1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxDialog 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  10     Modes used for wxDialog::SetLayoutAdaptationMode(). 
  12 enum wxDialogLayoutAdaptationMode
 
  14     wxDIALOG_ADAPTATION_MODE_DEFAULT 
= 0,   ///< Use global adaptation enabled status. 
  15     wxDIALOG_ADAPTATION_MODE_ENABLED 
= 1,   ///< Enable this dialog overriding global status. 
  16     wxDIALOG_ADAPTATION_MODE_DISABLED 
= 2   ///< Disable this dialog overriding global status. 
  22     A dialog box is a window with a title bar and sometimes a system menu, 
  23     which can be moved around the screen. It can contain controls and other 
  24     windows and is often used to allow the user to make some choice or to 
  27     Dialogs can be made scrollable, automatically, for computers with low 
  28     resolution screens: please see @ref overview_dialog_autoscrolling for 
  31     Dialogs usually contains either a single button allowing to close the 
  32     dialog or two buttons, one accepting the changes and the other one 
  33     discarding them (such button, if present, is automatically activated if the 
  34     user presses the "Esc" key). By default, buttons with the standard wxID_OK 
  35     and wxID_CANCEL identifiers behave as expected. Starting with wxWidgets 2.7 
  36     it is also possible to use a button with a different identifier instead, 
  37     see SetAffirmativeId() and SetEscapeId(). 
  39     Also notice that the CreateButtonSizer() should be used to create the 
  40     buttons appropriate for the current platform and positioned correctly 
  41     (including their order which is platform-dependent). 
  43     @section dialog_modal Modal and Modeless 
  45     There are two kinds of dialog, modal and modeless. A modal dialog blocks 
  46     program flow and user input on other windows until it is dismissed, whereas 
  47     a modeless dialog behaves more like a frame in that program flow continues, 
  48     and input in other windows is still possible. To show a modal dialog you 
  49     should use the ShowModal() method while to show a dialog modelessly you 
  50     simply use Show(), just as with frames. 
  52     Note that the modal dialog is one of the very few examples of 
  53     wxWindow-derived objects which may be created on the stack and not on the 
  54     heap. In other words, while most windows would be created like this: 
  59         MyAskDialog *dlg = new MyAskDialog(...); 
  60         if ( dlg->ShowModal() == wxID_OK ) 
  62         //else: dialog was cancelled or some another button pressed 
  68     You can achieve the same result with dialogs by using simpler code: 
  74         if ( dlg.ShowModal() == wxID_OK ) 
  77         // no need to call Destroy() here 
  81     An application can define a wxCloseEvent handler for the dialog to respond 
  82     to system close events. 
  86            Puts a caption on the dialog box. 
  87     @style{wxDEFAULT_DIALOG_STYLE} 
  88            Equivalent to a combination of wxCAPTION, wxCLOSE_BOX and 
  89            wxSYSTEM_MENU (the last one is not used under Unix). 
  90     @style{wxRESIZE_BORDER} 
  91            Display a resizeable frame around the window. 
  93            Display a system menu. 
  95            Displays a close box on the frame. 
  96     @style{wxMAXIMIZE_BOX} 
  97            Displays a maximize box on the dialog. 
  98     @style{wxMINIMIZE_BOX} 
  99            Displays a minimize box on the dialog. 
 100     @style{wxTHICK_FRAME} 
 101            Display a thick frame around the window. 
 102     @style{wxSTAY_ON_TOP} 
 103            The dialog stays on top of all other windows. 
 105            Under Windows, specifies that the child controls should not have 3D 
 106            borders unless specified in the control. 
 107     @style{wxDIALOG_NO_PARENT} 
 108            By default, a dialog created with a @NULL parent window will be 
 109            given the @ref wxApp::GetTopWindow() "application's top level window" 
 110            as parent. Use this style to prevent this from happening and create 
 111            an orphan dialog. This is not recommended for modal dialogs. 
 112     @style{wxDIALOG_EX_CONTEXTHELP} 
 113            Under Windows, puts a query button on the caption. When pressed, 
 114            Windows will go into a context-sensitive help mode and wxWidgets 
 115            will send a wxEVT_HELP event if the user clicked on an application 
 116            window. Note that this is an extended style and must be set by 
 117            calling SetExtraStyle() before Create is called (two-step 
 119     @style{wxDIALOG_EX_METAL} 
 120            On Mac OS X, frames with this style will be shown with a metallic 
 121            look. This is an extra style. 
 124     Under Unix or Linux, MWM (the Motif Window Manager) or other window 
 125     managers recognizing the MHM hints should be running for any of these 
 126     styles to have an effect. 
 129     @beginEventTable{wxCloseEvent} 
 130     @event{EVT_CLOSE(func)} 
 131         The dialog is being closed by the user or programmatically (see wxWindow::Close). 
 132         The user may generate this event clicking the close button 
 133         (typically the 'X' on the top-right of the title bar) if it's present 
 134         (see the @c wxCLOSE_BOX style) or by clicking a button with the 
 135         @c wxID_CANCEL or @c wxID_OK ids. 
 141     @see @ref overview_dialog, wxFrame, @ref overview_validator 
 143 class wxDialog 
: public wxTopLevelWindow
 
 154             Can be @NULL, a frame or another dialog box. 
 156             An identifier for the dialog. A value of -1 is taken to mean a 
 159             The title of the dialog. 
 161             The dialog position. The value wxDefaultPosition indicates a 
 162             default position, chosen by either the windowing system or 
 163             wxWidgets, depending on platform. 
 165             The dialog size. The value wxDefaultSize indicates a default size, 
 166             chosen by either the windowing system or wxWidgets, depending on 
 171             Used to associate a name with the window, allowing the application 
 172             user to set Motif resource values for individual dialog boxes. 
 176     wxDialog(wxWindow
* parent
, wxWindowID id
, const wxString
& title
, 
 177              const wxPoint
& pos 
= wxDefaultPosition
, 
 178              const wxSize
& size 
= wxDefaultSize
, 
 179              long style 
= wxDEFAULT_DIALOG_STYLE
, 
 180              const wxString
& name 
= wxDialogNameStr
); 
 185         Deletes any child windows before deleting the physical window. 
 187         See @ref overview_windowdeletion for more info. 
 192         Adds an identifier to be regarded as a main button for the 
 193         non-scrolling area of a dialog. 
 195         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 197     void AddMainButtonId(wxWindowID id
); 
 200         Returns @true if this dialog can and should perform layout adaptation 
 201         using DoLayoutAdaptation(), usually if the dialog is too large to fit 
 204         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 206     virtual bool CanDoLayoutAdaptation(); 
 209         Centres the dialog box on the display. 
 212             May be wxHORIZONTAL, wxVERTICAL or wxBOTH. 
 214     void Centre(int direction 
= wxBOTH
); 
 217         Used for two-step dialog box construction. 
 221     bool Create(wxWindow
* parent
, wxWindowID id
, const wxString
& title
, 
 222                 const wxPoint
& pos 
= wxDefaultPosition
, 
 223                 const wxSize
& size 
= wxDefaultSize
, 
 224                 long style 
= wxDEFAULT_DIALOG_STYLE
, 
 225                 const wxString
& name 
= wxDialogNameStr
); 
 228         Creates a sizer with standard buttons. @a flags is a bit list of the 
 229         following flags: wxOK, wxCANCEL, wxYES, wxNO, wxAPPLY, wxCLOSE, wxHELP, 
 232         The sizer lays out the buttons in a manner appropriate to the platform. 
 234         This function uses CreateStdDialogButtonSizer() internally for most 
 235         platforms but doesn't create the sizer at all for the platforms with 
 236         hardware buttons (such as smartphones) for which it sets up the 
 237         hardware buttons appropriately and returns @NULL, so don't forget to 
 238         test that the return value is valid before using it. 
 240     wxSizer
* CreateButtonSizer(long flags
); 
 243         Creates a sizer with standard buttons using CreateButtonSizer() 
 244         separated from the rest of the dialog contents by a horizontal 
 247         @note Just like CreateButtonSizer(), this function may return @NULL if 
 248               no buttons were created. 
 250     wxSizer
* CreateSeparatedButtonSizer(long flags
); 
 253         Creates a wxStdDialogButtonSizer with standard buttons. @a flags is a 
 254         bit list of the following flags: wxOK, wxCANCEL, wxYES, wxNO, wxAPPLY, 
 255         wxCLOSE, wxHELP, wxNO_DEFAULT. 
 257         The sizer lays out the buttons in a manner appropriate to the platform. 
 259     wxStdDialogButtonSizer
* CreateStdDialogButtonSizer(long flags
); 
 262         Performs layout adaptation, usually if the dialog is too large to fit 
 265         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 267     virtual bool DoLayoutAdaptation(); 
 270         This function is called when the titlebar OK button is pressed 
 271         (PocketPC only). A command event for the identifier returned by 
 272         GetAffirmativeId() is sent by default. You can override this function. 
 273         If the function returns @false, wxWidgets will call Close() for the 
 281         A static function enabling or disabling layout adaptation for all 
 284         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 286     static void EnableLayoutAdaptation(bool enable
); 
 289         Ends a modal dialog, passing a value to be returned from the 
 290         ShowModal() invocation. 
 293             The value that should be returned by ShowModal. 
 295         @see ShowModal(), GetReturnCode(), SetReturnCode() 
 297     virtual void EndModal(int retCode
); 
 300         Gets the identifier of the button which works like standard OK button 
 303         @see SetAffirmativeId() 
 305     int GetAffirmativeId() const; 
 308         Override this to return a window containing the main content of the 
 309         dialog. This is particularly useful when the dialog implements pages, 
 310         such as wxPropertySheetDialog, and allows the 
 311         @ref overview_dialog "layout adaptation code" to know that only the 
 312         pages need to be made scrollable. 
 314     virtual wxWindow
* GetContentWindow() const; 
 317         Gets the identifier of the button to map presses of @c ESC button to. 
 321     int GetEscapeId() const; 
 324         Returns @true if the dialog has been adapted, usually by making it 
 325         scrollable to work with a small display. 
 327         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 329     bool GetLayoutAdaptationDone() const; 
 332         Gets a value representing the aggressiveness of search for buttons and 
 333         sizers to be in the non-scrolling part of a layout-adapted dialog. Zero 
 334         switches off adaptation, and 3 allows search for standard buttons 
 335         anywhere in the dialog. 
 337         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 339     int GetLayoutAdaptationLevel() const; 
 342         Gets the adaptation mode, overriding the global adaptation flag. 
 344         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 346     wxDialogLayoutAdaptationMode 
GetLayoutAdaptationMode() const; 
 349         A static function getting the current layout adapter object. 
 351         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 353     static wxDialogLayoutAdapter
* GetLayoutAdapter(); 
 356         Returns an array of identifiers to be regarded as the main buttons for 
 357         the non-scrolling area of a dialog. 
 359         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 361     wxArrayInt
& GetMainButtonIds(); 
 364         Gets the return code for this window. 
 366         @remarks A return code is normally associated with a modal dialog, 
 367                  where ShowModal() returns a code to the application. 
 369         @see SetReturnCode(), ShowModal(), EndModal() 
 371     int GetReturnCode() const; 
 374         On PocketPC, a dialog is automatically provided with an empty toolbar. 
 375         This function allows you to access the toolbar and add tools to it. 
 376         Removing tools and adding arbitrary controls are not currently 
 379         This function is not available on any other platform. 
 383     wxToolBar
* GetToolBar() const; 
 386         Iconizes or restores the dialog. Windows only. 
 389             If @true, iconizes the dialog box; if @false, shows and restores it. 
 391         @remarks Note that in Windows, iconization has no effect since dialog 
 392                  boxes cannot be iconized. However, applications may need to 
 393                  explicitly restore dialog boxes under Motif which have 
 394                  user-iconizable frames, and under Windows calling 
 395                  Iconize(@false) will bring the window to the front, as does 
 398     virtual void Iconize(bool iconize 
= true); 
 401         Returns @true if the dialog box is iconized. Windows only. 
 403         @remarks Always returns @false under Windows since dialogs cannot be 
 406     virtual bool IsIconized() const; 
 409         A static function returning @true if layout adaptation is enabled for 
 412         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 414     static bool IsLayoutAdaptationEnabled(); 
 417         Returns @true if @a id is in the array of identifiers to be regarded as 
 418         the main buttons for the non-scrolling area of a dialog. 
 422         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 424     bool IsMainButtonId(wxWindowID id
) const; 
 427         Returns @true if the dialog box is modal, @false otherwise. 
 429     virtual bool IsModal() const; 
 432         The default handler for wxEVT_SYS_COLOUR_CHANGED. 
 435             The colour change event. 
 437         @remarks Changes the dialog's colour to conform to the current settings 
 438                  (Windows only). Add an event table entry for your dialog class 
 439                  if you wish the behaviour to be different (such as keeping a 
 440                  user-defined background colour). If you do override this 
 441                  function, call wxEvent::Skip() to propagate the notification 
 442                  to child windows and controls. 
 444         @see wxSysColourChangedEvent 
 446     void OnSysColourChanged(wxSysColourChangedEvent
& event
); 
 449         Sets the identifier to be used as OK button. When the button with this 
 450         identifier is pressed, the dialog calls wxWindow::Validate() and 
 451         wxWindow::TransferDataFromWindow() and, if they both return @true, 
 452         closes the dialog with wxID_OK return code. 
 454         Also, when the user presses a hardware OK button on the devices having 
 455         one or the special OK button in the PocketPC title bar, an event with 
 456         this id is generated. 
 458         By default, the affirmative id is wxID_OK. 
 460         @see GetAffirmativeId(), SetEscapeId() 
 462     void SetAffirmativeId(int id
); 
 465         Sets the identifier of the button which should work like the standard 
 466         "Cancel" button in this dialog. When the button with this id is 
 467         clicked, the dialog is closed. Also, when the user presses @c ESC key 
 468         in the dialog or closes the dialog using the close button in the title 
 469         bar, this is mapped to the click of the button with the specified id. 
 471         By default, the escape id is the special value wxID_ANY meaning that 
 472         wxID_CANCEL button is used if it's present in the dialog and otherwise 
 473         the button with GetAffirmativeId() is used. Another special value for 
 474         @a id is wxID_NONE meaning that @c ESC presses should be ignored. If 
 475         any other value is given, it is interpreted as the id of the button to 
 476         map the escape key to. 
 478     void SetEscapeId(int id
); 
 481         Sets the icon for this dialog. 
 484             The icon to associate with this dialog. 
 488     void SetIcon(const wxIcon
& icon
); 
 491         Sets the icons for this dialog. 
 494             The icons to associate with this dialog. 
 498     void SetIcons(const wxIconBundle
& icons
); 
 501         Marks the dialog as having been adapted, usually by making it 
 502         scrollable to work with a small display. 
 504         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 506     void SetLayoutAdaptationDone(bool done
); 
 509         Sets the aggressiveness of search for buttons and sizers to be in the 
 510         non-scrolling part of a layout-adapted dialog. Zero switches off 
 511         adaptation, and 3 allows search for standard buttons anywhere in the 
 514         @see @ref overview_dialog_autoscrolling (for more on layout adaptation) 
 516     void SetLayoutAdaptationLevel(int level
); 
 519         Sets the adaptation mode, overriding the global adaptation flag. 
 521         @see wxDialogLayoutAdaptationMode, @ref overview_dialog_autoscrolling 
 522              (for more on layout adaptation) 
 524     void SetLayoutAdaptationMode(wxDialogLayoutAdaptationMode mode
); 
 527         A static function for setting the current layout adapter object, 
 528         returning the old adapter. If you call this, you should delete the old 
 531         @see wxDialogLayoutAdapter, @ref overview_dialog_autoscrolling 
 533     static wxDialogLayoutAdapter
* SetLayoutAdapter(wxDialogLayoutAdapter
* adapter
); 
 536         @deprecated This function doesn't work for all ports, just use 
 537                     ShowModal() to show a modal dialog instead. 
 539         Allows the programmer to specify whether the dialog box is modal 
 540         (Show() blocks control until the dialog is hidden) or modeless (control 
 541         returns immediately). 
 544             If @true, the dialog will be modal, otherwise it will be modeless. 
 546     void SetModal(bool flag
); 
 549         Sets the return code for this window. 
 551         A return code is normally associated with a modal dialog, where 
 552         ShowModal() returns a code to the application. The function EndModal() 
 553         calls SetReturnCode(). 
 556             The integer return code, usually a control identifier. 
 558         @see GetReturnCode(), ShowModal(), EndModal() 
 560     void SetReturnCode(int retCode
); 
 563         Hides or shows the dialog. The preferred way of dismissing a modal 
 564         dialog is to use EndModal(). 
 567             If @true, the dialog box is shown and brought to the front, 
 568             otherwise the box is hidden. If @false and the dialog is modal, 
 569             control is returned to the calling program. 
 571     virtual bool Show(bool show 
= 1); 
 574         Shows a modal dialog. 
 576         Program flow does not return until the dialog has been dismissed with 
 579         Notice that it is possible to call ShowModal() for a dialog which had 
 580         been previously shown with Show(), this allows to make an existing 
 581         modeless dialog modal. However ShowModal() can't be called twice 
 582         without intervening EndModal() calls. 
 584         @return The value set with SetReturnCode(). 
 586         @see EndModal(), GetReturnCode(), SetReturnCode() 
 588     virtual int ShowModal(); 
 594     @class wxDialogLayoutAdapter 
 596     This abstract class is the base for classes that help wxWidgets peform 
 597     run-time layout adaptation of dialogs. Principally, this is to cater for 
 598     small displays by making part of the dialog scroll, but the application 
 599     developer may find other uses for layout adaption. 
 601     By default, there is one instance of wxStandardDialogLayoutAdapter which 
 602     can perform adaptation for most custom dialogs and dialogs with book 
 603     controls such as wxPropertySheetDialog. 
 608     @see @ref overview_dialog_autoscrolling 
 610 class wxDialogLayoutAdapter
 
 616     wxDialogLayoutAdapter(); 
 619         Override this to returns @true if adaptation can and should be done. 
 621     virtual bool CanDoLayoutAdaptation(wxDialog
* dialog
) = 0; 
 624         Override this to perform layout adaptation, such as making parts of the 
 625         dialog scroll and resizing the dialog to fit the display. Normally this 
 626         function will be called just before the dialog is shown. 
 628     virtual bool DoLayoutAdaptation(wxDialog
* dialog
) = 0;