1 // Copyright (c) 2012 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 UI_VIEWS_COREWM_TOOLTIP_CONTROLLER_H_ 6 #define UI_VIEWS_COREWM_TOOLTIP_CONTROLLER_H_ 7 8 #include <map> 9 10 #include "base/memory/scoped_ptr.h" 11 #include "base/strings/string16.h" 12 #include "base/timer/timer.h" 13 #include "ui/aura/client/tooltip_client.h" 14 #include "ui/aura/window_observer.h" 15 #include "ui/events/event_handler.h" 16 #include "ui/gfx/point.h" 17 #include "ui/views/views_export.h" 18 19 namespace aura { 20 class Window; 21 } 22 23 namespace views { 24 namespace corewm { 25 26 class Tooltip; 27 28 namespace test { 29 class TooltipControllerTestHelper; 30 } // namespace test 31 32 // TooltipController provides tooltip functionality for aura. 33 class VIEWS_EXPORT TooltipController : public aura::client::TooltipClient, 34 public ui::EventHandler, 35 public aura::WindowObserver { 36 public: 37 explicit TooltipController(scoped_ptr<Tooltip> tooltip); 38 virtual ~TooltipController(); 39 40 // Overridden from aura::client::TooltipClient. 41 virtual void UpdateTooltip(aura::Window* target) OVERRIDE; 42 virtual void SetTooltipShownTimeout(aura::Window* target, 43 int timeout_in_ms) OVERRIDE; 44 virtual void SetTooltipsEnabled(bool enable) OVERRIDE; 45 46 // Overridden from ui::EventHandler. 47 virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE; 48 virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE; 49 virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE; 50 virtual void OnCancelMode(ui::CancelModeEvent* event) OVERRIDE; 51 52 // Overridden from aura::WindowObserver. 53 virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE; 54 55 const gfx::Point& mouse_location() const { return curr_mouse_loc_; } 56 57 private: 58 friend class test::TooltipControllerTestHelper; 59 60 void TooltipTimerFired(); 61 void TooltipShownTimerFired(); 62 63 // Updates the tooltip if required (if there is any change in the tooltip 64 // text or the aura::Window. 65 void UpdateIfRequired(); 66 67 // Only used in tests. 68 bool IsTooltipVisible(); 69 70 bool IsDragDropInProgress(); 71 72 // Returns true if the cursor is visible. 73 bool IsCursorVisible(); 74 75 int GetTooltipShownTimeout(); 76 77 aura::Window* tooltip_window_; 78 base::string16 tooltip_text_; 79 80 // These fields are for tracking state when the user presses a mouse button. 81 aura::Window* tooltip_window_at_mouse_press_; 82 base::string16 tooltip_text_at_mouse_press_; 83 84 scoped_ptr<Tooltip> tooltip_; 85 86 base::RepeatingTimer<TooltipController> tooltip_timer_; 87 88 // Timer to timeout the life of an on-screen tooltip. We hide the tooltip when 89 // this timer fires. 90 base::OneShotTimer<TooltipController> tooltip_shown_timer_; 91 92 // Location of the last event in |tooltip_window_|'s coordinates. 93 gfx::Point curr_mouse_loc_; 94 95 bool tooltips_enabled_; 96 97 std::map<aura::Window*, int> tooltip_shown_timeout_map_; 98 99 DISALLOW_COPY_AND_ASSIGN(TooltipController); 100 }; 101 102 } // namespace corewm 103 } // namespace views 104 105 #endif // UI_VIEWS_COREWM_TOOLTIP_CONTROLLER_H_ 106