tooltip_icon.h revision 23730a6e56a168d1879203e4b3819bb36e3d8f1f
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/scoped_observer.h" 12#include "base/strings/string16.h" 13#include "base/timer/timer.h" 14#include "ui/views/controls/image_view.h" 15#include "ui/views/mouse_watcher.h" 16#include "ui/views/widget/widget_observer.h" 17 18namespace autofill { 19 20class InfoBubble; 21 22// A tooltip icon that shows a bubble on hover. Looks like (?). 23class TooltipIcon : public views::ImageView, 24 public views::MouseWatcherListener, 25 public views::WidgetObserver { 26 public: 27 static const char kViewClassName[]; 28 29 explicit TooltipIcon(const base::string16& tooltip); 30 virtual ~TooltipIcon(); 31 32 // views::ImageView: 33 virtual const char* GetClassName() const OVERRIDE; 34 virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE; 35 virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE; 36 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; 37 virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE; 38 39 // views::MouseWatcherListener: 40 virtual void MouseMovedOutOfHost() OVERRIDE; 41 42 // views::WidgetObserver: 43 virtual void OnWidgetDestroyed(views::Widget* widget) OVERRIDE; 44 45 private: 46 // Changes this view's image to the resource indicated by |idr|. 47 void ChangeImageTo(int idr); 48 49 // Creates and shows |bubble_|. If |bubble_| already exists, just cancels a 50 // potential close timer. 51 void ShowBubble(); 52 53 // Hides |bubble_| if necessary. 54 void HideBubble(); 55 56 // The text to show in a bubble when hovered. 57 base::string16 tooltip_; 58 59 // Whether the mouse is inside this tooltip. 60 bool mouse_inside_; 61 62 // A bubble shown on hover. Weak; owns itself. NULL while hiding. 63 InfoBubble* bubble_; 64 65 // A timer to delay showing |bubble_|. 66 base::OneShotTimer<TooltipIcon> show_timer_; 67 68 // A watcher that keeps |bubble_| open if the user's mouse enters it. 69 scoped_ptr<views::MouseWatcher> mouse_watcher_; 70 71 ScopedObserver<views::Widget, TooltipIcon> observer_; 72 73 DISALLOW_COPY_AND_ASSIGN(TooltipIcon); 74}; 75 76} // namespace autofill 77 78#endif // CHROME_BROWSER_UI_VIEWS_AUTOFILL_TOOLTIP_ICON_H_ 79