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