]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/dialog.h
wxMessageBox off the main thread lost result code.
[wxWidgets.git] / interface / wx / dialog.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: dialog.h
e54c96f1 3// Purpose: interface of wxDialog
23324ae1 4// Author: wxWidgets team
526954c5 5// Licence: wxWindows licence
23324ae1
FM
6/////////////////////////////////////////////////////////////////////////////
7
1db8f1dc
BP
8/**
9 Modes used for wxDialog::SetLayoutAdaptationMode().
10*/
11enum wxDialogLayoutAdaptationMode
12{
13 wxDIALOG_ADAPTATION_MODE_DEFAULT = 0, ///< Use global adaptation enabled status.
14 wxDIALOG_ADAPTATION_MODE_ENABLED = 1, ///< Enable this dialog overriding global status.
15 wxDIALOG_ADAPTATION_MODE_DISABLED = 2 ///< Disable this dialog overriding global status.
16};
17
deb21d7f
RD
18#define wxDIALOG_NO_PARENT 0x00000020 ///< Don't make owned by apps top window
19
ea8fa3c4
RD
20#define wxDEFAULT_DIALOG_STYLE (wxCAPTION | wxSYSTEM_MENU | wxCLOSE_BOX)
21
deb21d7f
RD
22
23#define wxDIALOG_ADAPTATION_NONE 0 ///< Don't do any layout adaptation
24#define wxDIALOG_ADAPTATION_STANDARD_SIZER 1 ///< Only look for wxStdDialogButtonSizer for non-scrolling part
25#define wxDIALOG_ADAPTATION_ANY_SIZER 2 ///< Also look for any suitable sizer for non-scrolling part
26#define wxDIALOG_ADAPTATION_LOOSE_BUTTONS 3 ///< Also look for 'loose' standard buttons for non-scrolling part
27
23324ae1
FM
28/**
29 @class wxDialog
7c913512 30
1db8f1dc
BP
31 A dialog box is a window with a title bar and sometimes a system menu,
32 which can be moved around the screen. It can contain controls and other
33 windows and is often used to allow the user to make some choice or to
34 answer a question.
35
36 Dialogs can be made scrollable, automatically, for computers with low
37 resolution screens: please see @ref overview_dialog_autoscrolling for
38 further details.
39
40 Dialogs usually contains either a single button allowing to close the
41 dialog or two buttons, one accepting the changes and the other one
42 discarding them (such button, if present, is automatically activated if the
43 user presses the "Esc" key). By default, buttons with the standard wxID_OK
44 and wxID_CANCEL identifiers behave as expected. Starting with wxWidgets 2.7
45 it is also possible to use a button with a different identifier instead,
46 see SetAffirmativeId() and SetEscapeId().
47
48 Also notice that the CreateButtonSizer() should be used to create the
49 buttons appropriate for the current platform and positioned correctly
50 (including their order which is platform-dependent).
51
52 @section dialog_modal Modal and Modeless
53
54 There are two kinds of dialog, modal and modeless. A modal dialog blocks
55 program flow and user input on other windows until it is dismissed, whereas
56 a modeless dialog behaves more like a frame in that program flow continues,
57 and input in other windows is still possible. To show a modal dialog you
58 should use the ShowModal() method while to show a dialog modelessly you
59 simply use Show(), just as with frames.
60
61 Note that the modal dialog is one of the very few examples of
62 wxWindow-derived objects which may be created on the stack and not on the
63 heap. In other words, while most windows would be created like this:
64
65 @code
66 void AskUser()
67 {
68 MyAskDialog *dlg = new MyAskDialog(...);
69 if ( dlg->ShowModal() == wxID_OK )
70 // ...
71 //else: dialog was cancelled or some another button pressed
72
73 dlg->Destroy();
74 }
75 @endcode
76
77 You can achieve the same result with dialogs by using simpler code:
78
79 @code
80 void AskUser()
81 {
82 MyAskDialog dlg(...);
83 if ( dlg.ShowModal() == wxID_OK )
84 // ...
85
86 // no need to call Destroy() here
87 }
88 @endcode
89
90 An application can define a wxCloseEvent handler for the dialog to respond
91 to system close events.
7c913512 92
23324ae1 93 @beginStyleTable
8c6791e4 94 @style{wxCAPTION}
23324ae1 95 Puts a caption on the dialog box.
8c6791e4 96 @style{wxDEFAULT_DIALOG_STYLE}
23324ae1 97 Equivalent to a combination of wxCAPTION, wxCLOSE_BOX and
1db8f1dc 98 wxSYSTEM_MENU (the last one is not used under Unix).
8c6791e4 99 @style{wxRESIZE_BORDER}
d13b34d3 100 Display a resizable frame around the window.
8c6791e4 101 @style{wxSYSTEM_MENU}
23324ae1 102 Display a system menu.
8c6791e4 103 @style{wxCLOSE_BOX}
23324ae1 104 Displays a close box on the frame.
8c6791e4 105 @style{wxMAXIMIZE_BOX}
23324ae1 106 Displays a maximize box on the dialog.
8c6791e4 107 @style{wxMINIMIZE_BOX}
23324ae1 108 Displays a minimize box on the dialog.
8c6791e4 109 @style{wxTHICK_FRAME}
23324ae1 110 Display a thick frame around the window.
8c6791e4 111 @style{wxSTAY_ON_TOP}
23324ae1 112 The dialog stays on top of all other windows.
8c6791e4 113 @style{wxNO_3D}
06a5213d
VZ
114 This style is obsolete and doesn't do anything any more, don't use
115 it in any new code.
8c6791e4 116 @style{wxDIALOG_NO_PARENT}
23324ae1 117 By default, a dialog created with a @NULL parent window will be
1db8f1dc
BP
118 given the @ref wxApp::GetTopWindow() "application's top level window"
119 as parent. Use this style to prevent this from happening and create
120 an orphan dialog. This is not recommended for modal dialogs.
8c6791e4 121 @style{wxDIALOG_EX_CONTEXTHELP}
23324ae1
FM
122 Under Windows, puts a query button on the caption. When pressed,
123 Windows will go into a context-sensitive help mode and wxWidgets
3a194bda 124 will send a @c wxEVT_HELP event if the user clicked on an application
23324ae1 125 window. Note that this is an extended style and must be set by
1db8f1dc 126 calling SetExtraStyle() before Create is called (two-step
23324ae1 127 construction).
8c6791e4 128 @style{wxDIALOG_EX_METAL}
23324ae1
FM
129 On Mac OS X, frames with this style will be shown with a metallic
130 look. This is an extra style.
131 @endStyleTable
7c913512 132
1db8f1dc
BP
133 Under Unix or Linux, MWM (the Motif Window Manager) or other window
134 managers recognizing the MHM hints should be running for any of these
135 styles to have an effect.
136
9d157d59 137
3051a44a 138 @beginEventEmissionTable{wxCloseEvent}
9d157d59
FM
139 @event{EVT_CLOSE(func)}
140 The dialog is being closed by the user or programmatically (see wxWindow::Close).
141 The user may generate this event clicking the close button
142 (typically the 'X' on the top-right of the title bar) if it's present
143 (see the @c wxCLOSE_BOX style) or by clicking a button with the
144 @c wxID_CANCEL or @c wxID_OK ids.
3051a44a
FM
145 @event{EVT_INIT_DIALOG(func)}
146 Process a @c wxEVT_INIT_DIALOG event. See wxInitDialogEvent.
9d157d59
FM
147 @endEventTable
148
23324ae1
FM
149 @library{wxcore}
150 @category{cmndlg}
7c913512 151
1db8f1dc 152 @see @ref overview_dialog, wxFrame, @ref overview_validator
23324ae1
FM
153*/
154class wxDialog : public wxTopLevelWindow
155{
156public:
1db8f1dc
BP
157 /**
158 Default constructor.
159 */
160 wxDialog();
23324ae1
FM
161 /**
162 Constructor.
3c4f71cc 163
7c913512 164 @param parent
4cc4bfaf 165 Can be @NULL, a frame or another dialog box.
7c913512 166 @param id
1db8f1dc
BP
167 An identifier for the dialog. A value of -1 is taken to mean a
168 default.
7c913512 169 @param title
4cc4bfaf 170 The title of the dialog.
7c913512 171 @param pos
1db8f1dc
BP
172 The dialog position. The value wxDefaultPosition indicates a
173 default position, chosen by either the windowing system or
174 wxWidgets, depending on platform.
7c913512 175 @param size
1db8f1dc
BP
176 The dialog size. The value wxDefaultSize indicates a default size,
177 chosen by either the windowing system or wxWidgets, depending on
178 platform.
7c913512 179 @param style
1db8f1dc 180 The window style.
7c913512 181 @param name
1db8f1dc
BP
182 Used to associate a name with the window, allowing the application
183 user to set Motif resource values for individual dialog boxes.
3c4f71cc 184
4cc4bfaf 185 @see Create()
23324ae1 186 */
1db8f1dc 187 wxDialog(wxWindow* parent, wxWindowID id, const wxString& title,
7c913512
FM
188 const wxPoint& pos = wxDefaultPosition,
189 const wxSize& size = wxDefaultSize,
190 long style = wxDEFAULT_DIALOG_STYLE,
408776d0 191 const wxString& name = wxDialogNameStr);
23324ae1
FM
192
193 /**
2e4f32d7
FM
194 Destructor.
195
196 Deletes any child windows before deleting the physical window.
197
198 See @ref overview_windowdeletion for more info.
23324ae1 199 */
adaaa686 200 virtual ~wxDialog();
23324ae1
FM
201
202 /**
1db8f1dc
BP
203 Adds an identifier to be regarded as a main button for the
204 non-scrolling area of a dialog.
205
206 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1
FM
207 */
208 void AddMainButtonId(wxWindowID id);
209
210 /**
1db8f1dc
BP
211 Returns @true if this dialog can and should perform layout adaptation
212 using DoLayoutAdaptation(), usually if the dialog is too large to fit
213 on the display.
214
215 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1 216 */
4ccf0566 217 virtual bool CanDoLayoutAdaptation();
23324ae1
FM
218
219 /**
220 Centres the dialog box on the display.
3c4f71cc 221
7c913512 222 @param direction
4cc4bfaf 223 May be wxHORIZONTAL, wxVERTICAL or wxBOTH.
23324ae1
FM
224 */
225 void Centre(int direction = wxBOTH);
226
227 /**
1db8f1dc
BP
228 Used for two-step dialog box construction.
229
230 @see wxDialog()
23324ae1 231 */
1db8f1dc 232 bool Create(wxWindow* parent, wxWindowID id, const wxString& title,
23324ae1 233 const wxPoint& pos = wxDefaultPosition,
408776d0
FM
234 const wxSize& size = wxDefaultSize,
235 long style = wxDEFAULT_DIALOG_STYLE,
b91c4601 236 const wxString& name = wxDialogNameStr);
23324ae1
FM
237
238 /**
1db8f1dc
BP
239 Creates a sizer with standard buttons. @a flags is a bit list of the
240 following flags: wxOK, wxCANCEL, wxYES, wxNO, wxAPPLY, wxCLOSE, wxHELP,
241 wxNO_DEFAULT.
242
23324ae1 243 The sizer lays out the buttons in a manner appropriate to the platform.
1db8f1dc
BP
244
245 This function uses CreateStdDialogButtonSizer() internally for most
246 platforms but doesn't create the sizer at all for the platforms with
247 hardware buttons (such as smartphones) for which it sets up the
248 hardware buttons appropriately and returns @NULL, so don't forget to
249 test that the return value is valid before using it.
23324ae1
FM
250 */
251 wxSizer* CreateButtonSizer(long flags);
252
253 /**
1db8f1dc
BP
254 Creates a sizer with standard buttons using CreateButtonSizer()
255 separated from the rest of the dialog contents by a horizontal
256 wxStaticLine.
257
258 @note Just like CreateButtonSizer(), this function may return @NULL if
259 no buttons were created.
b14cca2a
VZ
260
261 This is a combination of CreateButtonSizer() and
262 CreateSeparatedSizer().
23324ae1
FM
263 */
264 wxSizer* CreateSeparatedButtonSizer(long flags);
265
b14cca2a
VZ
266 /**
267 Returns the sizer containing the given one with a separating
268 wxStaticLine if necessarily.
269
270 This function is useful for creating the sizer containing footer-like
271 contents in dialog boxes. It will add a separating static line only if
272 it conforms to the current platform convention (currently it is not
273 added under Mac where the use of static lines for grouping is
274 discouraged and is added elsewhere).
275
276 @since 2.9.2
277
278 @param sizer The sizer to wrap, must be non-@NULL.
279 @return The sizer wrapping the input one or possibly the input sizer
280 itself if no wrapping is necessary.
281 */
282 wxSizer *CreateSeparatedSizer(wxSizer *sizer);
283
23324ae1 284 /**
1db8f1dc
BP
285 Creates a wxStdDialogButtonSizer with standard buttons. @a flags is a
286 bit list of the following flags: wxOK, wxCANCEL, wxYES, wxNO, wxAPPLY,
287 wxCLOSE, wxHELP, wxNO_DEFAULT.
288
23324ae1
FM
289 The sizer lays out the buttons in a manner appropriate to the platform.
290 */
291 wxStdDialogButtonSizer* CreateStdDialogButtonSizer(long flags);
292
be631dba
RD
293 /**
294 Splits text up at newlines and places the lines into wxStaticText
295 objects in a vertical wxBoxSizer.
296 */
297 wxSizer *CreateTextSizer( const wxString& message );
298
23324ae1 299 /**
1db8f1dc
BP
300 Performs layout adaptation, usually if the dialog is too large to fit
301 on the display.
302
303 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1 304 */
4ccf0566 305 virtual bool DoLayoutAdaptation();
23324ae1
FM
306
307 /**
1db8f1dc
BP
308 This function is called when the titlebar OK button is pressed
309 (PocketPC only). A command event for the identifier returned by
310 GetAffirmativeId() is sent by default. You can override this function.
311 If the function returns @false, wxWidgets will call Close() for the
312 dialog.
4ccf0566
FM
313
314 @onlyfor{wxmsw}
23324ae1 315 */
4cc4bfaf 316 virtual bool DoOK();
23324ae1
FM
317
318 /**
1db8f1dc
BP
319 A static function enabling or disabling layout adaptation for all
320 dialogs.
321
322 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1
FM
323 */
324 static void EnableLayoutAdaptation(bool enable);
325
326 /**
1db8f1dc
BP
327 Ends a modal dialog, passing a value to be returned from the
328 ShowModal() invocation.
3c4f71cc 329
7c913512 330 @param retCode
4cc4bfaf 331 The value that should be returned by ShowModal.
3c4f71cc 332
4cc4bfaf 333 @see ShowModal(), GetReturnCode(), SetReturnCode()
23324ae1 334 */
adaaa686 335 virtual void EndModal(int retCode);
23324ae1
FM
336
337 /**
1db8f1dc
BP
338 Gets the identifier of the button which works like standard OK button
339 in this dialog.
3c4f71cc 340
4cc4bfaf 341 @see SetAffirmativeId()
23324ae1 342 */
328f5751 343 int GetAffirmativeId() const;
23324ae1
FM
344
345 /**
1db8f1dc
BP
346 Override this to return a window containing the main content of the
347 dialog. This is particularly useful when the dialog implements pages,
348 such as wxPropertySheetDialog, and allows the
349 @ref overview_dialog "layout adaptation code" to know that only the
350 pages need to be made scrollable.
23324ae1 351 */
adaaa686 352 virtual wxWindow* GetContentWindow() const;
23324ae1
FM
353
354 /**
1db8f1dc 355 Gets the identifier of the button to map presses of @c ESC button to.
3c4f71cc 356
4cc4bfaf 357 @see SetEscapeId()
23324ae1 358 */
328f5751 359 int GetEscapeId() const;
23324ae1
FM
360
361 /**
1db8f1dc
BP
362 Returns @true if the dialog has been adapted, usually by making it
363 scrollable to work with a small display.
364
365 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1 366 */
328f5751 367 bool GetLayoutAdaptationDone() const;
23324ae1
FM
368
369 /**
1db8f1dc
BP
370 Gets a value representing the aggressiveness of search for buttons and
371 sizers to be in the non-scrolling part of a layout-adapted dialog. Zero
372 switches off adaptation, and 3 allows search for standard buttons
373 anywhere in the dialog.
374
375 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1 376 */
adaaa686 377 int GetLayoutAdaptationLevel() const;
23324ae1
FM
378
379 /**
380 Gets the adaptation mode, overriding the global adaptation flag.
1db8f1dc
BP
381
382 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1 383 */
328f5751 384 wxDialogLayoutAdaptationMode GetLayoutAdaptationMode() const;
23324ae1
FM
385
386 /**
387 A static function getting the current layout adapter object.
1db8f1dc
BP
388
389 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1
FM
390 */
391 static wxDialogLayoutAdapter* GetLayoutAdapter();
392
393 /**
1db8f1dc
BP
394 Returns an array of identifiers to be regarded as the main buttons for
395 the non-scrolling area of a dialog.
396
397 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1 398 */
b91c4601 399 wxArrayInt& GetMainButtonIds();
23324ae1
FM
400
401 /**
402 Gets the return code for this window.
3c4f71cc 403
1db8f1dc
BP
404 @remarks A return code is normally associated with a modal dialog,
405 where ShowModal() returns a code to the application.
3c4f71cc 406
4cc4bfaf 407 @see SetReturnCode(), ShowModal(), EndModal()
23324ae1 408 */
adaaa686 409 int GetReturnCode() const;
23324ae1
FM
410
411 /**
412 On PocketPC, a dialog is automatically provided with an empty toolbar.
1db8f1dc
BP
413 This function allows you to access the toolbar and add tools to it.
414 Removing tools and adding arbitrary controls are not currently
415 supported.
416
23324ae1 417 This function is not available on any other platform.
4ccf0566
FM
418
419 @onlyfor{wxmsw}
23324ae1 420 */
328f5751 421 wxToolBar* GetToolBar() const;
23324ae1
FM
422
423 /**
424 Iconizes or restores the dialog. Windows only.
3c4f71cc 425
7c913512 426 @param iconize
4cc4bfaf 427 If @true, iconizes the dialog box; if @false, shows and restores it.
3c4f71cc 428
23324ae1 429 @remarks Note that in Windows, iconization has no effect since dialog
1db8f1dc
BP
430 boxes cannot be iconized. However, applications may need to
431 explicitly restore dialog boxes under Motif which have
432 user-iconizable frames, and under Windows calling
433 Iconize(@false) will bring the window to the front, as does
434 Show(@true).
23324ae1 435 */
43c48e1e 436 virtual void Iconize(bool iconize = true);
23324ae1
FM
437
438 /**
439 Returns @true if the dialog box is iconized. Windows only.
3c4f71cc 440
23324ae1 441 @remarks Always returns @false under Windows since dialogs cannot be
4cc4bfaf 442 iconized.
23324ae1 443 */
0004982c 444 virtual bool IsIconized() const;
23324ae1
FM
445
446 /**
1db8f1dc
BP
447 A static function returning @true if layout adaptation is enabled for
448 all dialogs.
449
450 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1
FM
451 */
452 static bool IsLayoutAdaptationEnabled();
453
454 /**
1db8f1dc
BP
455 Returns @true if @a id is in the array of identifiers to be regarded as
456 the main buttons for the non-scrolling area of a dialog.
457
4ccf0566
FM
458 @onlyfor{wxmsw}
459
1db8f1dc 460 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1 461 */
4ccf0566 462 bool IsMainButtonId(wxWindowID id) const;
23324ae1
FM
463
464 /**
465 Returns @true if the dialog box is modal, @false otherwise.
466 */
adaaa686 467 virtual bool IsModal() const;
23324ae1 468
23324ae1
FM
469 /**
470 Sets the identifier to be used as OK button. When the button with this
1db8f1dc
BP
471 identifier is pressed, the dialog calls wxWindow::Validate() and
472 wxWindow::TransferDataFromWindow() and, if they both return @true,
814bfbb9 473 closes the dialog with the affirmative id return code.
1db8f1dc
BP
474
475 Also, when the user presses a hardware OK button on the devices having
476 one or the special OK button in the PocketPC title bar, an event with
477 this id is generated.
478
23324ae1 479 By default, the affirmative id is wxID_OK.
3c4f71cc 480
4cc4bfaf 481 @see GetAffirmativeId(), SetEscapeId()
23324ae1
FM
482 */
483 void SetAffirmativeId(int id);
484
485 /**
7c913512 486 Sets the identifier of the button which should work like the standard
1db8f1dc
BP
487 "Cancel" button in this dialog. When the button with this id is
488 clicked, the dialog is closed. Also, when the user presses @c ESC key
489 in the dialog or closes the dialog using the close button in the title
490 bar, this is mapped to the click of the button with the specified id.
491
492 By default, the escape id is the special value wxID_ANY meaning that
493 wxID_CANCEL button is used if it's present in the dialog and otherwise
494 the button with GetAffirmativeId() is used. Another special value for
495 @a id is wxID_NONE meaning that @c ESC presses should be ignored. If
496 any other value is given, it is interpreted as the id of the button to
497 map the escape key to.
23324ae1
FM
498 */
499 void SetEscapeId(int id);
500
501 /**
502 Sets the icon for this dialog.
3c4f71cc 503
7c913512 504 @param icon
4cc4bfaf 505 The icon to associate with this dialog.
1db8f1dc
BP
506
507 @see wxIcon
23324ae1
FM
508 */
509 void SetIcon(const wxIcon& icon);
510
511 /**
512 Sets the icons for this dialog.
3c4f71cc 513
7c913512 514 @param icons
4cc4bfaf 515 The icons to associate with this dialog.
1db8f1dc
BP
516
517 @see wxIconBundle
23324ae1
FM
518 */
519 void SetIcons(const wxIconBundle& icons);
520
521 /**
1db8f1dc
BP
522 Marks the dialog as having been adapted, usually by making it
523 scrollable to work with a small display.
524
525 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1
FM
526 */
527 void SetLayoutAdaptationDone(bool done);
528
529 /**
530 Sets the aggressiveness of search for buttons and sizers to be in the
1db8f1dc
BP
531 non-scrolling part of a layout-adapted dialog. Zero switches off
532 adaptation, and 3 allows search for standard buttons anywhere in the
533 dialog.
534
535 @see @ref overview_dialog_autoscrolling (for more on layout adaptation)
23324ae1
FM
536 */
537 void SetLayoutAdaptationLevel(int level);
538
539 /**
1db8f1dc 540 Sets the adaptation mode, overriding the global adaptation flag.
3c4f71cc 541
1db8f1dc
BP
542 @see wxDialogLayoutAdaptationMode, @ref overview_dialog_autoscrolling
543 (for more on layout adaptation)
23324ae1
FM
544 */
545 void SetLayoutAdaptationMode(wxDialogLayoutAdaptationMode mode);
546
547 /**
1db8f1dc
BP
548 A static function for setting the current layout adapter object,
549 returning the old adapter. If you call this, you should delete the old
550 adapter object.
551
552 @see wxDialogLayoutAdapter, @ref overview_dialog_autoscrolling
23324ae1
FM
553 */
554 static wxDialogLayoutAdapter* SetLayoutAdapter(wxDialogLayoutAdapter* adapter);
555
23324ae1
FM
556 /**
557 Sets the return code for this window.
3c4f71cc 558
1db8f1dc
BP
559 A return code is normally associated with a modal dialog, where
560 ShowModal() returns a code to the application. The function EndModal()
561 calls SetReturnCode().
562
7c913512 563 @param retCode
4cc4bfaf 564 The integer return code, usually a control identifier.
3c4f71cc 565
4cc4bfaf 566 @see GetReturnCode(), ShowModal(), EndModal()
23324ae1
FM
567 */
568 void SetReturnCode(int retCode);
569
570 /**
1db8f1dc
BP
571 Hides or shows the dialog. The preferred way of dismissing a modal
572 dialog is to use EndModal().
3c4f71cc 573
7c913512 574 @param show
1db8f1dc
BP
575 If @true, the dialog box is shown and brought to the front,
576 otherwise the box is hidden. If @false and the dialog is modal,
577 control is returned to the calling program.
23324ae1 578 */
b91c4601 579 virtual bool Show(bool show = 1);
23324ae1
FM
580
581 /**
c088756c 582 Shows an application-modal dialog.
dc28b856
VZ
583
584 Program flow does not return until the dialog has been dismissed with
585 EndModal().
586
587 Notice that it is possible to call ShowModal() for a dialog which had
588 been previously shown with Show(), this allows to make an existing
589 modeless dialog modal. However ShowModal() can't be called twice
590 without intervening EndModal() calls.
1db8f1dc 591
e10539a9
FM
592 Note that this function creates a temporary event loop which takes
593 precedence over the application's main event loop (see wxEventLoopBase)
594 and which is destroyed when the dialog is dismissed.
8f139810 595 This also results in a call to wxApp::ProcessPendingEvents().
e10539a9 596
d29a9a8a 597 @return The value set with SetReturnCode().
3c4f71cc 598
c5d4360f
VS
599 @see ShowWindowModal(), ShowWindowModalThenDo(),
600 EndModal(), GetReturnCode(), SetReturnCode()
23324ae1 601 */
adaaa686 602 virtual int ShowModal();
c088756c
VZ
603
604 /**
605 Shows a dialog modal to the parent top level window only.
606
607 Unlike ShowModal(), dialogs shown with this function only prevent the
608 user from interacting with their parent frame only but not with the
609 rest of the application. They also don't block the program execution
610 but instead return immediately, as Show(), and generate a
36c5850b
VS
611 wxEVT_WINDOW_MODAL_DIALOG_CLOSED event (wxWindowModalDialogEvent)
612 later when the dialog is closed.
c088756c
VZ
613
614 Currently this function is only fully implemented in wxOSX ports, under
615 the other platforms it behaves like ShowModal() (but also sends the
616 above mentioned event).
617
c5d4360f 618 @see wxWindowModalDialogEvent, ShowWindowModalThenDo()
36c5850b 619
c088756c
VZ
620 @since 2.9.0
621 */
622 void ShowWindowModal();
c5d4360f
VS
623
624 /**
625 Shows a dialog modal to the parent top level window only and call a
626 functor after the dialog is closed.
627
628 Same as the other ShowWindowModal() overload, but calls the functor
629 passed as the argument upon completion, instead of generating the
630 wxEVT_WINDOW_MODAL_DIALOG_CLOSED event.
631
632 This form is particularly useful in combination with C++11 lambdas,
633 when it allows writing window-modal very similarly to how ShowModal()
634 is used (with the notable exception of not being able to create
635 the dialog on stack):
636
637 @code
638 wxWindowPtr<wxDialog> dlg(new wxMessageDialog(this, "Hello!"));
639
640 dlg->ShowWindowModalThenDo([this,dlg](int retcode){
641 if ( retcode == wxID_OK )
642 DoSomething();
643 // dlg is implicitly destroyed here, because the pointer was
644 // explicitly captured by the lambda
645 });
646 @endcode
647
648 @param onEndModal Function object to call when the dialog is
649 closed. The functor is called with a single
650 integer argument, dialog's return code.
651
652 @note The dialog instance must not be destroyed until @a onEndModal
653 is called. The best way to ensure thay is to use wxWindowPtr
654 to hold a pointer and include it in the lambda's capture,
655 by value (not reference!), as shown in the example above.
656
657 @since 3.0
658
659 @see wxWindowPtr<T>
660 */
661 template<typename Functor>
662 void ShowWindowModalThenDo(const Functor& onEndModal);
23324ae1
FM
663};
664
665
e54c96f1 666
23324ae1
FM
667/**
668 @class wxDialogLayoutAdapter
7c913512 669
d13b34d3 670 This abstract class is the base for classes that help wxWidgets perform
1db8f1dc
BP
671 run-time layout adaptation of dialogs. Principally, this is to cater for
672 small displays by making part of the dialog scroll, but the application
673 developer may find other uses for layout adaption.
7c913512 674
1db8f1dc
BP
675 By default, there is one instance of wxStandardDialogLayoutAdapter which
676 can perform adaptation for most custom dialogs and dialogs with book
677 controls such as wxPropertySheetDialog.
7c913512 678
23324ae1 679 @library{wxcore}
1db8f1dc 680 @category{winlayout}
7c913512 681
1db8f1dc 682 @see @ref overview_dialog_autoscrolling
23324ae1 683*/
7c913512 684class wxDialogLayoutAdapter
23324ae1
FM
685{
686public:
687 /**
688 Default constructor.
689 */
690 wxDialogLayoutAdapter();
691
692 /**
693 Override this to returns @true if adaptation can and should be done.
694 */
b91c4601 695 virtual bool CanDoLayoutAdaptation(wxDialog* dialog) = 0;
23324ae1
FM
696
697 /**
1db8f1dc
BP
698 Override this to perform layout adaptation, such as making parts of the
699 dialog scroll and resizing the dialog to fit the display. Normally this
700 function will be called just before the dialog is shown.
23324ae1 701 */
b91c4601 702 virtual bool DoLayoutAdaptation(wxDialog* dialog) = 0;
23324ae1 703};
e54c96f1 704
6e350141 705
36c5850b
VS
706/**
707 Event sent by wxDialog::ShowWindowModal() when the dialog closes.
708
709 @since 2.9.0
710 */
6e350141
RD
711class wxWindowModalDialogEvent : public wxCommandEvent
712{
713public:
36c5850b 714 /// Constructor
6e350141
RD
715 wxWindowModalDialogEvent (wxEventType commandType = wxEVT_NULL, int id = 0);
716
36c5850b 717 /// Return the corresponding dialog.
6e350141 718 wxDialog *GetDialog() const;
36c5850b
VS
719
720 /// Return the dialog's return code.
6e350141 721 int GetReturnCode() const;
36c5850b
VS
722
723 /// Clone the event.
6e350141
RD
724 virtual wxEvent *Clone() const;
725};