tooltip_icon.h revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_VIEWS_AUTOFILL_TOOLTIP_ICON_H_
6#define CHROME_BROWSER_UI_VIEWS_AUTOFILL_TOOLTIP_ICON_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "base/memory/scoped_ptr.h"
11#include "base/strings/string16.h"
12#include "base/timer/timer.h"
13#include "ui/views/controls/image_view.h"
14#include "ui/views/mouse_watcher.h"
15
16namespace autofill {
17
18class InfoBubble;
19
20// A tooltip icon that shows a bubble on hover. Looks like (?).
21class TooltipIcon : public views::ImageView,
22                    public views::MouseWatcherListener {
23 public:
24  explicit TooltipIcon(const base::string16& tooltip);
25  virtual ~TooltipIcon();
26
27  static const char kViewClassName[];
28
29  // views::ImageView:
30  virtual const char* GetClassName() const OVERRIDE;
31  virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE;
32  virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE;
33  virtual void OnBoundsChanged(const gfx::Rect& prev_bounds) OVERRIDE;
34  virtual void OnFocus() OVERRIDE;
35  virtual void OnBlur() OVERRIDE;
36
37  // views::MouseWatcherListener:
38  virtual void MouseMovedOutOfHost() OVERRIDE;
39
40 private:
41  // Changes this view's image to the resource indicated by |idr|.
42  void ChangeImageTo(int idr);
43
44  // Creates and shows |bubble_|. If |bubble_| already exists, just cancels a
45  // potential close timer.
46  void ShowBubble();
47
48  // Hides |bubble_| if necessary.
49  void HideBubble();
50
51  // The text to show in a bubble when hovered.
52  base::string16 tooltip_;
53
54  // Whether the mouse is inside this tooltip.
55  bool mouse_inside_;
56
57  // A bubble shown on hover. Weak; owns itself. NULL while hiding.
58  InfoBubble* bubble_;
59
60  // A timer to delay showing |bubble_|.
61  base::OneShotTimer<TooltipIcon> show_timer_;
62
63  // A watcher that keeps |bubble_| open if the user's mouse enters it.
64  scoped_ptr<views::MouseWatcher> mouse_watcher_;
65
66  DISALLOW_COPY_AND_ASSIGN(TooltipIcon);
67};
68
69}  // namespace autofill
70
71#endif  // CHROME_BROWSER_UI_VIEWS_AUTOFILL_TOOLTIP_ICON_H_
72