Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: views/widget/tooltip_manager.h

Issue 114054: Splits TooltipManager so that it can be ported and stubs out the GTK... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « views/widget/aero_tooltip_manager.cc ('k') | views/widget/tooltip_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef VIEWS_WIDGET_TOOLTIP_MANAGER_H_ 5 #ifndef VIEWS_WIDGET_TOOLTIP_MANAGER_H_
6 #define VIEWS_WIDGET_TOOLTIP_MANAGER_H_ 6 #define VIEWS_WIDGET_TOOLTIP_MANAGER_H_
7 7
8 #include <windows.h> 8 #include <string>
9 #include <commctrl.h>
10 9
11 #include <string>
12 #include "base/basictypes.h" 10 #include "base/basictypes.h"
13 #include "base/task.h"
14 11
15 namespace gfx { 12 namespace gfx {
16 class Font; 13 class Font;
17 } 14 } // namespace gfx
18 15
19 namespace views { 16 namespace views {
20 17
21 class View; 18 class View;
22 class Widget;
23 19
24 // TooltipManager takes care of the wiring to support tooltips for Views. 20 // TooltipManager takes care of the wiring to support tooltips for Views. You
25 // This class is intended to be used by Widgets. To use this, you must 21 // almost never need to interact directly with TooltipManager, rather look to
26 // do the following: 22 // the various tooltip methods on View.
27 // Add the following to your MSG_MAP:
28 //
29 // MESSAGE_RANGE_HANDLER(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange)
30 // MESSAGE_RANGE_HANDLER(WM_NCMOUSEMOVE, WM_NCMOUSEMOVE, OnMouseRange)
31 // MSG_WM_NOTIFY(OnNotify)
32 //
33 // With the following implementations:
34 // LRESULT XXX::OnMouseRange(UINT u_msg, WPARAM w_param, LPARAM l_param,
35 // BOOL& handled) {
36 // tooltip_manager_->OnMouse(u_msg, w_param, l_param);
37 // handled = FALSE;
38 // return 0;
39 // }
40 //
41 // LRESULT XXX::OnNotify(int w_param, NMHDR* l_param) {
42 // bool handled;
43 // LRESULT result = tooltip_manager_->OnNotify(w_param, l_param, &handled);
44 // SetMsgHandled(handled);
45 // return result;
46 // }
47 //
48 // And of course you'll need to create the TooltipManager!
49 //
50 // Lastly, you'll need to override GetTooltipManager.
51 //
52 // See XPFrame for an example of this in action.
53 class TooltipManager { 23 class TooltipManager {
54 public: 24 public:
55 // Returns the height of tooltips. This should only be invoked from within 25 // Returns the height of tooltips. This should only be invoked from within
56 // GetTooltipTextOrigin. 26 // GetTooltipTextOrigin.
57 static int GetTooltipHeight(); 27 static int GetTooltipHeight();
58 28
59 // Returns the default font used by tooltips. 29 // Returns the default font used by tooltips.
60 static gfx::Font GetDefaultFont(); 30 static gfx::Font GetDefaultFont();
61 31
62 // Returns the separator for lines of text in a tooltip. 32 // Returns the separator for lines of text in a tooltip.
63 static const std::wstring& GetLineSeparator(); 33 static const std::wstring& GetLineSeparator();
64 34
65 // Creates a TooltipManager for the specified Widget and parent window. 35 TooltipManager() {}
66 TooltipManager(Widget* widget, HWND parent); 36 virtual ~TooltipManager() {}
67 virtual ~TooltipManager();
68 37
69 // Notification that the view hierarchy has changed in some way. 38 // Notification that the view hierarchy has changed in some way.
70 void UpdateTooltip(); 39 virtual void UpdateTooltip() = 0;
71 40
72 // Invoked when the tooltip text changes for the specified views. 41 // Invoked when the tooltip text changes for the specified views.
73 void TooltipTextChanged(View* view); 42 virtual void TooltipTextChanged(View* view) = 0;
74 43
75 // Invoked when toolbar icon gets focus. 44 // Invoked when toolbar icon gets focus.
76 void ShowKeyboardTooltip(View* view); 45 virtual void ShowKeyboardTooltip(View* view) = 0;
77 46
78 // Invoked when toolbar loses focus. 47 // Invoked when toolbar loses focus.
79 void HideKeyboardTooltip(); 48 virtual void HideKeyboardTooltip() = 0;
80
81 // Message handlers. These forward to the tooltip control.
82 virtual void OnMouse(UINT u_msg, WPARAM w_param, LPARAM l_param);
83 LRESULT OnNotify(int w_param, NMHDR* l_param, bool* handled);
84 // Not used directly by TooltipManager, but provided for AeroTooltipManager.
85 virtual void OnMouseLeave() {}
86
87 protected:
88 virtual void Init();
89
90 // Updates the tooltip for the specified location.
91 void UpdateTooltip(int x, int y);
92
93 // Parent window the tooltip is added to.
94 HWND parent_;
95
96 // Tooltip control window.
97 HWND tooltip_hwnd_;
98
99 // Tooltip information.
100 TOOLINFO toolinfo_;
101
102 // Last location of the mouse. This is in the coordinates of the rootview.
103 int last_mouse_x_;
104 int last_mouse_y_;
105
106 // Whether or not the tooltip is showing.
107 bool tooltip_showing_;
108
109 private:
110 // Sets the tooltip position based on the x/y position of the text. If the
111 // tooltip fits, true is returned.
112 bool SetTooltipPosition(int text_x, int text_y);
113
114 // Calculates the preferred height for tooltips. This always returns a
115 // positive value.
116 int CalcTooltipHeight();
117
118 // Trims the tooltip to fit, setting text to the clipped result, width to the
119 // width (in pixels) of the clipped text and line_count to the number of lines
120 // of text in the tooltip.
121 void TrimTooltipToFit(std::wstring* text,
122 int* width,
123 int* line_count,
124 int position_x,
125 int position_y,
126 HWND window);
127
128 // Invoked when the timer elapses and tooltip has to be destroyed.
129 void DestroyKeyboardTooltipWindow(HWND window_to_destroy);
130
131 // Hosting Widget.
132 Widget* widget_;
133
134 // The View the mouse is under. This is null if the mouse isn't under a
135 // View.
136 View* last_tooltip_view_;
137
138 // Whether or not the view under the mouse needs to be refreshed. If this
139 // is true, when the tooltip is asked for the view under the mouse is
140 // refreshed.
141 bool last_view_out_of_sync_;
142
143 // Text for tooltip from the view.
144 std::wstring tooltip_text_;
145
146 // The clipped tooltip.
147 std::wstring clipped_text_;
148
149 // Number of lines in the tooltip.
150 int line_count_;
151
152 // Width of the last tooltip.
153 int tooltip_width_;
154
155 // Height for a tooltip; lazily calculated.
156 static int tooltip_height_;
157
158 // control window for tooltip displayed using keyboard.
159 HWND keyboard_tooltip_hwnd_;
160
161 // Used to register DestroyTooltipWindow function with PostDelayedTask
162 // function.
163 ScopedRunnableMethodFactory<TooltipManager> keyboard_tooltip_factory_;
164
165 DISALLOW_EVIL_CONSTRUCTORS(TooltipManager);
166 }; 49 };
167 50
168 } // namespace views 51 } // namespace views
169 52
170 #endif // VIEWS_WIDGET_TOOLTIP_MANAGER_H_ 53 #endif // VIEWS_WIDGET_TOOLTIP_MANAGER_H_
OLDNEW
« no previous file with comments | « views/widget/aero_tooltip_manager.cc ('k') | views/widget/tooltip_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698