]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/cshelp.h
avoid infinite recursion for richtooltops, (hopefully) fixes #15070
[wxWidgets.git] / interface / wx / cshelp.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: cshelp.h
e54c96f1 3// Purpose: interface of wxHelpProvider
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
526954c5 6// Licence: wxWindows licence
23324ae1
FM
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10 @class wxHelpProvider
7c913512 11
23324ae1 12 wxHelpProvider is an abstract class used by a program implementing
d155b6f4 13 context-sensitive help to show the help text for the given window.
7c913512 14
23324ae1 15 The current help provider must be explicitly set by the application using
dc215c81 16 Set().
7c913512 17
23324ae1
FM
18 @library{wxcore}
19 @category{help}
7c913512 20
e54c96f1 21 @see wxContextHelp, wxContextHelpButton, wxSimpleHelpProvider,
d155b6f4
VS
22 wxHelpControllerHelpProvider, wxWindow::SetHelpText(),
23 wxWindow::GetHelpTextAtPoint()
23324ae1 24*/
7c913512 25class wxHelpProvider
23324ae1
FM
26{
27public:
28 /**
29 Virtual destructor for any base class.
30 */
dc215c81 31 virtual ~wxHelpProvider();
23324ae1
FM
32
33 /**
d155b6f4
VS
34 Associates the text with the given window.
35
36 @remarks
37 Although all help providers have these functions to allow making
38 wxWindow::SetHelpText() work, not all of them implement the functions.
23324ae1 39 */
d155b6f4 40 virtual void AddHelp(wxWindowBase* window, const wxString& text);
23324ae1
FM
41
42 /**
d155b6f4
VS
43 Associates the text with the given ID.
44
45 This help text will be shown for all windows with ID @a id, unless they
46 have more specific help text associated using the other AddHelp()
47 prototype. May be used to set the same help string for all Cancel
48 buttons in the application, for example.
49
50 @remarks
51 Although all help providers have these functions to allow making
52 wxWindow::SetHelpText() work, not all of them implement the functions.
53 */
54 virtual void AddHelp(wxWindowID id, const wxString& text);
55
56 /**
57 Returns pointer to help provider instance.
58
23324ae1 59 Unlike some other classes, the help provider is not created on demand.
d155b6f4 60 This must be explicitly done by the application using Set().
23324ae1 61 */
d155b6f4 62 static wxHelpProvider* Get();
23324ae1 63
23324ae1
FM
64 /**
65 This version associates the given text with all windows with this id.
66 May be used to set the same help string for all Cancel buttons in
67 the application, for example.
68 */
b91c4601 69 virtual wxString GetHelp(const wxWindowBase* window) = 0;
d155b6f4 70
23324ae1 71 /**
d155b6f4
VS
72 Removes the association between the window pointer and the help text.
73 This is called by the wxWindow destructor. Without this, the table of
74 help strings will fill up and when window pointers are reused, the
75 wrong help string will be found.
23324ae1 76 */
d155b6f4 77 virtual void RemoveHelp(wxWindowBase* window);
23324ae1
FM
78
79 /**
d155b6f4
VS
80 Set the current, application-wide help provider.
81
82 @return Pointer to previous help provider or @NULL if there wasn't any.
23324ae1 83 */
d155b6f4 84 static wxHelpProvider* Set(wxHelpProvider* helpProvider);
23324ae1
FM
85
86 /**
d155b6f4
VS
87 Shows help for the given window.
88
89 Override this function if the help doesn't depend on the exact position
90 inside the window, otherwise you need to override ShowHelpAtPoint().
91 Returns @true if help was shown, or @false if no help was available for
92 this window.
23324ae1 93 */
d155b6f4 94 virtual bool ShowHelp(wxWindowBase* window);
23324ae1
FM
95
96 /**
d155b6f4
VS
97 This function may be overridden to show help for the window when it
98 should depend on the position inside the window, By default this method
99 forwards to ShowHelp(), so it is enough to only implement the latter if
dc215c81 100 the help doesn't depend on the position.
3c4f71cc 101
7c913512 102 @param window
4cc4bfaf 103 Window to show help text for.
7c913512 104 @param point
4cc4bfaf 105 Coordinates of the mouse at the moment of help event emission.
7c913512 106 @param origin
4cc4bfaf 107 Help event origin, see wxHelpEvent::GetOrigin.
dc215c81 108
d29a9a8a
BP
109 @return @true if help was shown, or @false if no help was available
110 for this window.
dc215c81 111
1e24c2af 112 @since 2.7.0
23324ae1 113 */
4707b84c
FM
114 virtual bool ShowHelpAtPoint(wxWindowBase* window, const wxPoint& point,
115 wxHelpEvent::Origin origin);
23324ae1
FM
116};
117
118
e54c96f1 119
23324ae1
FM
120/**
121 @class wxHelpControllerHelpProvider
7c913512 122
23324ae1 123 wxHelpControllerHelpProvider is an implementation of wxHelpProvider which
d155b6f4 124 supports both context identifiers and plain text help strings. If the help
dc215c81 125 text is an integer, it is passed to wxHelpController::DisplayContextPopup().
d155b6f4
VS
126 Otherwise, it shows the string in a tooltip as per wxSimpleHelpProvider. If
127 you use this with a wxCHMHelpController instance on windows, it will use
128 the native style of tip window instead of wxTipWindow.
129
130 You can use the convenience function wxContextId() to convert an integer
131 context id to a string for passing to wxWindow::SetHelpText().
7c913512 132
23324ae1
FM
133 @library{wxcore}
134 @category{help}
7c913512 135
e54c96f1 136 @see wxHelpProvider, wxSimpleHelpProvider, wxContextHelp,
d155b6f4 137 wxWindow::SetHelpText(), wxWindow::GetHelpTextAtPoint()
23324ae1
FM
138*/
139class wxHelpControllerHelpProvider : public wxSimpleHelpProvider
140{
141public:
142 /**
d155b6f4
VS
143 Note that the instance doesn't own the help controller. The help
144 controller should be deleted separately.
23324ae1 145 */
4cc4bfaf 146 wxHelpControllerHelpProvider(wxHelpControllerBase* hc = NULL);
23324ae1
FM
147
148 /**
149 Returns the help controller associated with this help provider.
150 */
328f5751 151 wxHelpControllerBase* GetHelpController() const;
23324ae1
FM
152
153 /**
154 Sets the help controller associated with this help provider.
155 */
156 void SetHelpController(wxHelpControllerBase* hc);
157};
158
159
e54c96f1 160
23324ae1
FM
161/**
162 @class wxContextHelp
7c913512 163
23324ae1 164 This class changes the cursor to a query and puts the application into a
d155b6f4 165 'context-sensitive help mode'. When the user left-clicks on a window
3a194bda 166 within the specified window, a @c wxEVT_HELP event is sent to that control,
d155b6f4 167 and the application may respond to it by popping up some help.
7c913512 168
23324ae1 169 For example:
23324ae1
FM
170 @code
171 wxContextHelp contextHelp(myWindow);
172 @endcode
7c913512 173
23324ae1 174 There are a couple of ways to invoke this behaviour implicitly:
7c913512 175
dd634f27 176 - Use the wxDIALOG_EX_CONTEXTHELP style for a dialog (Windows only). This
d155b6f4
VS
177 will put a question mark in the titlebar, and Windows will put the
178 application into context-sensitive help mode automatically, with further
179 programming.
180
dd634f27 181 - Create a wxContextHelpButton, whose predefined behaviour is
d155b6f4
VS
182 to create a context help object. Normally you will write your application
183 so that this button is only added to a dialog for non-Windows platforms
184 (use wxDIALOG_EX_CONTEXTHELP on Windows).
7c913512 185
23324ae1
FM
186 Note that on Mac OS X, the cursor does not change when in context-sensitive
187 help mode.
7c913512 188
23324ae1
FM
189 @library{wxcore}
190 @category{help}
7c913512 191
e54c96f1 192 @see wxHelpEvent, wxHelpController, wxContextHelpButton
23324ae1
FM
193*/
194class wxContextHelp : public wxObject
195{
196public:
197 /**
198 Constructs a context help object, calling BeginContextHelp() if
4cc4bfaf 199 @a doNow is @true (the default).
dc215c81 200
4cc4bfaf 201 If @a window is @NULL, the top window is used.
23324ae1 202 */
4cc4bfaf 203 wxContextHelp(wxWindow* window = NULL, bool doNow = true);
23324ae1
FM
204
205 /**
206 Destroys the context help object.
207 */
b7e94bd7 208 virtual ~wxContextHelp();
23324ae1
FM
209
210 /**
d155b6f4
VS
211 Puts the application into context-sensitive help mode. @a window is the
212 window which will be used to catch events; if @NULL, the top window
4707b84c
FM
213 will be used.
214
215 Returns @true if the application was successfully put into
216 context-sensitive help mode.
217 This function only returns when the event loop has finished.
23324ae1 218 */
4707b84c 219 bool BeginContextHelp(wxWindow* window);
23324ae1
FM
220
221 /**
d155b6f4
VS
222 Ends context-sensitive help mode. Not normally called by the
223 application.
23324ae1
FM
224 */
225 bool EndContextHelp();
226};
227
228
e54c96f1 229
23324ae1
FM
230/**
231 @class wxContextHelpButton
7c913512 232
23324ae1 233 Instances of this class may be used to add a question mark button that when
d155b6f4 234 pressed, puts the application into context-help mode. It does this by
3a194bda 235 creating a wxContextHelp object which itself generates a @c wxEVT_HELP event
d155b6f4 236 when the user clicks on a window.
7c913512 237
23324ae1 238 On Windows, you may add a question-mark icon to a dialog by use of the
d155b6f4
VS
239 wxDIALOG_EX_CONTEXTHELP extra style, but on other platforms you will have
240 to add a button explicitly, usually next to OK, Cancel or similar buttons.
7c913512 241
23324ae1
FM
242 @library{wxcore}
243 @category{help}
7c913512 244
e54c96f1 245 @see wxBitmapButton, wxContextHelp
23324ae1
FM
246*/
247class wxContextHelpButton : public wxBitmapButton
248{
249public:
23324ae1
FM
250 /**
251 Constructor, creating and showing a context help button.
3c4f71cc 252
7c913512 253 @param parent
4cc4bfaf 254 Parent window. Must not be @NULL.
7c913512 255 @param id
4cc4bfaf 256 Button identifier. Defaults to wxID_CONTEXT_HELP.
7c913512 257 @param pos
4cc4bfaf 258 Button position.
dc1b07fd 259 If ::wxDefaultPosition is specified then a default position is chosen.
7c913512 260 @param size
dc1b07fd
FM
261 Button size.
262 If ::wxDefaultSize is specified then the button is sized appropriately
263 for the question mark bitmap.
7c913512 264 @param style
4cc4bfaf 265 Window style.
dc215c81
BP
266
267 @remarks
268 Normally you only need pass the parent window to the constructor, and
269 use the defaults for the remaining parameters.
23324ae1 270 */
7c913512
FM
271 wxContextHelpButton(wxWindow* parent,
272 wxWindowID id = wxID_CONTEXT_HELP,
273 const wxPoint& pos = wxDefaultPosition,
274 const wxSize& size = wxDefaultSize,
275 long style = wxBU_AUTODRAW);
23324ae1
FM
276};
277
278
279/**
280 @class wxSimpleHelpProvider
7c913512 281
23324ae1
FM
282 wxSimpleHelpProvider is an implementation of wxHelpProvider which supports
283 only plain text help strings, and shows the string associated with the
284 control (if any) in a tooltip.
7c913512 285
23324ae1
FM
286 @library{wxcore}
287 @category{help}
7c913512 288
e54c96f1 289 @see wxHelpProvider, wxHelpControllerHelpProvider, wxContextHelp,
d155b6f4 290 wxWindow::SetHelpText()(, wxWindow::GetHelpTextAtPoint()
23324ae1
FM
291*/
292class wxSimpleHelpProvider : public wxHelpProvider
293{
294public:
7c913512 295
23324ae1 296};
e54c96f1 297