diff options
Diffstat (limited to 'views/widget/tooltip_manager.h')
-rw-r--r-- | views/widget/tooltip_manager.h | 143 |
1 files changed, 13 insertions, 130 deletions
diff --git a/views/widget/tooltip_manager.h b/views/widget/tooltip_manager.h index 5cfe2bf..cb48973 100644 --- a/views/widget/tooltip_manager.h +++ b/views/widget/tooltip_manager.h @@ -5,51 +5,21 @@ #ifndef VIEWS_WIDGET_TOOLTIP_MANAGER_H_ #define VIEWS_WIDGET_TOOLTIP_MANAGER_H_ -#include <windows.h> -#include <commctrl.h> - #include <string> + #include "base/basictypes.h" -#include "base/task.h" namespace gfx { class Font; -} +} // namespace gfx namespace views { class View; -class Widget; - -// TooltipManager takes care of the wiring to support tooltips for Views. -// This class is intended to be used by Widgets. To use this, you must -// do the following: -// Add the following to your MSG_MAP: -// -// MESSAGE_RANGE_HANDLER(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange) -// MESSAGE_RANGE_HANDLER(WM_NCMOUSEMOVE, WM_NCMOUSEMOVE, OnMouseRange) -// MSG_WM_NOTIFY(OnNotify) -// -// With the following implementations: -// LRESULT XXX::OnMouseRange(UINT u_msg, WPARAM w_param, LPARAM l_param, -// BOOL& handled) { -// tooltip_manager_->OnMouse(u_msg, w_param, l_param); -// handled = FALSE; -// return 0; -// } -// -// LRESULT XXX::OnNotify(int w_param, NMHDR* l_param) { -// bool handled; -// LRESULT result = tooltip_manager_->OnNotify(w_param, l_param, &handled); -// SetMsgHandled(handled); -// return result; -// } -// -// And of course you'll need to create the TooltipManager! -// -// Lastly, you'll need to override GetTooltipManager. -// -// See XPFrame for an example of this in action. + +// TooltipManager takes care of the wiring to support tooltips for Views. You +// almost never need to interact directly with TooltipManager, rather look to +// the various tooltip methods on View. class TooltipManager { public: // Returns the height of tooltips. This should only be invoked from within @@ -62,109 +32,22 @@ class TooltipManager { // Returns the separator for lines of text in a tooltip. static const std::wstring& GetLineSeparator(); - // Creates a TooltipManager for the specified Widget and parent window. - TooltipManager(Widget* widget, HWND parent); - virtual ~TooltipManager(); + TooltipManager() {} + virtual ~TooltipManager() {} // Notification that the view hierarchy has changed in some way. - void UpdateTooltip(); + virtual void UpdateTooltip() = 0; // Invoked when the tooltip text changes for the specified views. - void TooltipTextChanged(View* view); + virtual void TooltipTextChanged(View* view) = 0; // Invoked when toolbar icon gets focus. - void ShowKeyboardTooltip(View* view); + virtual void ShowKeyboardTooltip(View* view) = 0; // Invoked when toolbar loses focus. - void HideKeyboardTooltip(); - - // Message handlers. These forward to the tooltip control. - virtual void OnMouse(UINT u_msg, WPARAM w_param, LPARAM l_param); - LRESULT OnNotify(int w_param, NMHDR* l_param, bool* handled); - // Not used directly by TooltipManager, but provided for AeroTooltipManager. - virtual void OnMouseLeave() {} - - protected: - virtual void Init(); - - // Updates the tooltip for the specified location. - void UpdateTooltip(int x, int y); - - // Parent window the tooltip is added to. - HWND parent_; - - // Tooltip control window. - HWND tooltip_hwnd_; - - // Tooltip information. - TOOLINFO toolinfo_; - - // Last location of the mouse. This is in the coordinates of the rootview. - int last_mouse_x_; - int last_mouse_y_; - - // Whether or not the tooltip is showing. - bool tooltip_showing_; - - private: - // Sets the tooltip position based on the x/y position of the text. If the - // tooltip fits, true is returned. - bool SetTooltipPosition(int text_x, int text_y); - - // Calculates the preferred height for tooltips. This always returns a - // positive value. - int CalcTooltipHeight(); - - // Trims the tooltip to fit, setting text to the clipped result, width to the - // width (in pixels) of the clipped text and line_count to the number of lines - // of text in the tooltip. - void TrimTooltipToFit(std::wstring* text, - int* width, - int* line_count, - int position_x, - int position_y, - HWND window); - - // Invoked when the timer elapses and tooltip has to be destroyed. - void DestroyKeyboardTooltipWindow(HWND window_to_destroy); - - // Hosting Widget. - Widget* widget_; - - // The View the mouse is under. This is null if the mouse isn't under a - // View. - View* last_tooltip_view_; - - // Whether or not the view under the mouse needs to be refreshed. If this - // is true, when the tooltip is asked for the view under the mouse is - // refreshed. - bool last_view_out_of_sync_; - - // Text for tooltip from the view. - std::wstring tooltip_text_; - - // The clipped tooltip. - std::wstring clipped_text_; - - // Number of lines in the tooltip. - int line_count_; - - // Width of the last tooltip. - int tooltip_width_; - - // Height for a tooltip; lazily calculated. - static int tooltip_height_; - - // control window for tooltip displayed using keyboard. - HWND keyboard_tooltip_hwnd_; - - // Used to register DestroyTooltipWindow function with PostDelayedTask - // function. - ScopedRunnableMethodFactory<TooltipManager> keyboard_tooltip_factory_; - - DISALLOW_EVIL_CONSTRUCTORS(TooltipManager); + virtual void HideKeyboardTooltip() = 0; }; } // namespace views -#endif // VIEWS_WIDGET_TOOLTIP_MANAGER_H_ +#endif // VIEWS_WIDGET_TOOLTIP_MANAGER_H_ |