1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Common dialogs demo
4 // Author: Julian Smart, Vadim Zeitlin, ABX
7 // Copyright: (c) Julian Smart
10 // Licence: wxWindows licence
11 /////////////////////////////////////////////////////////////////////////////
14 This sample shows how to use the common dialogs available from wxWidgets.
15 It also shows that generic implementations of common dialogs can be exchanged
16 with native dialogs and can coexist in one application. The need for generic
17 dialogs addition is recognized thanks to setup of below USE_*** setting. Their
18 combinations reflects conditions of makefiles and project files to avoid unresolved
19 references during linking. For now some generic dialogs are added in static builds
26 #ifdef __WXUNIVERSAL__
27 #define USE_WXUNIVERSAL 1
29 #define USE_WXUNIVERSAL 0
38 #if defined(__WXWINCE__)
44 #if defined(__WXMSW__) && !USE_WXWINCE
56 #if defined(__WXMAC_OSX__) && ( MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2) && USE_NATIVE_FONT_DIALOG_FOR_MACOSX
57 #define USE_WXMACFONTDLG 1
59 #define USE_WXMACFONTDLG 0
74 #define USE_GENERIC_DIALOGS (!USE_WXUNIVERSAL && !USE_DLL)
76 #define USE_COLOURDLG_GENERIC \
77 ((USE_WXMSW || USE_WXMAC) && USE_GENERIC_DIALOGS && wxUSE_COLOURDLG)
78 #define USE_DIRDLG_GENERIC \
79 ((USE_WXMSW || USE_WXMAC) && USE_GENERIC_DIALOGS && wxUSE_DIRDLG)
80 #define USE_FILEDLG_GENERIC \
81 ((((USE_WXMSW || USE_WXMAC || USE_WXPM || USE_WXGTK) \
82 && USE_GENERIC_DIALOGS) || USE_WXWINCE) && wxUSE_FILEDLG)
83 #define USE_FONTDLG_GENERIC \
84 ((USE_WXMSW || USE_WXMACFONTDLG || USE_WXPM) && USE_GENERIC_DIALOGS && wxUSE_FONTDLG)
86 // Turn USE_MODAL_PRESENTATION to 0 if there is any reason for not presenting difference
87 // between modal and modeless dialogs (ie. not implemented it in your port yet)
88 #if defined(__SMARTPHONE__) || !wxUSE_BOOKCTRL
89 #define USE_MODAL_PRESENTATION 0
91 #define USE_MODAL_PRESENTATION 1
95 // Turn USE_SETTINGS_DIALOG to 0 if supported
97 #define USE_SETTINGS_DIALOG 1
99 #define USE_SETTINGS_DIALOG 0
104 // Custom application traits class which we use to override the default log
106 class MyAppTraits
: public wxGUIAppTraits
109 virtual wxLog
*CreateLogTarget();
114 // Define a new application type
115 class MyApp
: public wxApp
118 MyApp() { m_startupProgressStyle
= -1; }
120 virtual bool OnInit();
122 #if wxUSE_CMDLINE_PARSER
123 virtual void OnInitCmdLine(wxCmdLineParser
& parser
);
124 virtual bool OnCmdLineParsed(wxCmdLineParser
& parser
);
125 #endif // wxUSE_CMDLINE_PARSER
129 virtual wxAppTraits
*CreateTraits() { return new MyAppTraits
; }
133 // Flag set to a valid value if command line option "progress" is used,
134 // this allows testing of wxProgressDialog before the main event loop is
135 // started. If this option is not specified it is set to -1 by default
136 // meaning that progress dialog shouldn't be shown at all.
137 long m_startupProgressStyle
;
140 #if USE_MODAL_PRESENTATION
142 // A custom modeless dialog
143 class MyModelessDialog
: public wxDialog
146 MyModelessDialog(wxWindow
*parent
);
148 void OnButton(wxCommandEvent
& event
);
149 void OnClose(wxCloseEvent
& event
);
152 DECLARE_EVENT_TABLE()
155 // A custom modal dialog
156 class MyModalDialog
: public wxDialog
159 MyModalDialog(wxWindow
*parent
);
161 void OnButton(wxCommandEvent
& event
);
164 wxButton
*m_btnModal
,
168 DECLARE_EVENT_TABLE()
171 #endif // USE_MODAL_PRESENTATION
173 // A class demonstrating CreateStdDialogButtonSizer()
174 class StdButtonSizerDialog
: public wxDialog
177 StdButtonSizerDialog(wxWindow
*parent
);
179 void OnEvent(wxCommandEvent
& event
);
182 void EnableDisableControls();
184 wxCheckBox
*m_chkboxAffirmativeButton
;
185 wxRadioButton
*m_radiobtnOk
,
188 wxCheckBox
*m_chkboxDismissButton
;
189 wxRadioButton
*m_radiobtnClose
,
192 wxCheckBox
*m_chkboxApply
,
197 wxSizer
*m_buttonsSizer
;
199 DECLARE_EVENT_TABLE()
202 // Test harness for wxMessageDialog.
203 class TestMessageBoxDialog
: public wxDialog
206 TestMessageBoxDialog(wxWindow
*parent
);
211 wxString
GetMessage() { return m_textMsg
->GetValue(); }
214 void PrepareMessageDialog(wxMessageDialogBase
&dlg
);
216 virtual void AddAdditionalTextOptions(wxSizer
*WXUNUSED(sizer
)) { }
217 virtual void AddAdditionalFlags(wxSizer
*WXUNUSED(sizer
)) { }
219 void OnApply(wxCommandEvent
& event
);
220 void OnClose(wxCommandEvent
& event
);
221 void OnUpdateLabelUI(wxUpdateUIEvent
& event
);
222 void OnUpdateNoDefaultUI(wxUpdateUIEvent
& event
);
240 static const BtnInfo ms_btnInfo
[Btn_Max
];
253 wxTextCtrl
*m_textMsg
,
256 wxCheckBox
*m_buttons
[Btn_Max
];
257 wxTextCtrl
*m_labels
[Btn_Max
];
261 wxCheckBox
*m_chkNoDefault
,
264 DECLARE_EVENT_TABLE()
265 wxDECLARE_NO_COPY_CLASS(TestMessageBoxDialog
);
269 class TestRichMessageDialog
: public TestMessageBoxDialog
272 TestRichMessageDialog(wxWindow
*parent
);
275 // overrides method in base class
276 virtual void AddAdditionalTextOptions(wxSizer
*sizer
);
277 virtual void AddAdditionalFlags(wxSizer
*sizer
);
279 void OnApply(wxCommandEvent
& event
);
282 wxTextCtrl
*m_textCheckBox
;
283 wxCheckBox
*m_initialValueCheckBox
;
284 wxTextCtrl
*m_textDetailed
;
286 DECLARE_EVENT_TABLE()
288 #endif // wxUSE_RICHMSGDLG
290 class TestDefaultActionDialog
: public wxDialog
293 TestDefaultActionDialog( wxWindow
*parent
);
295 void OnListBoxDClick(wxCommandEvent
& event
);
296 void OnCatchListBoxDClick(wxCommandEvent
& event
);
299 bool m_catchListBoxDClick
;
302 DECLARE_EVENT_TABLE()
306 #if USE_SETTINGS_DIALOG
307 // Property sheet dialog
308 class SettingsDialog
: public wxPropertySheetDialog
310 DECLARE_CLASS(SettingsDialog
)
312 SettingsDialog(wxWindow
* parent
, int dialogType
);
315 wxPanel
* CreateGeneralSettingsPage(wxWindow
* parent
);
316 wxPanel
* CreateAestheticSettingsPage(wxWindow
* parent
);
321 ID_SHOW_TOOLTIPS
= 100,
324 ID_LOAD_LAST_PROJECT
,
326 ID_APPLY_SETTINGS_TO
,
331 wxImageList
* m_imageList
;
333 DECLARE_EVENT_TABLE()
336 #endif // USE_SETTINGS_DIALOG
338 // Define a new frame type
339 class MyFrame
: public wxFrame
342 MyFrame(const wxString
& title
);
346 void MessageBox(wxCommandEvent
& event
);
347 void MessageBoxDialog(wxCommandEvent
& event
);
348 void MessageBoxInfo(wxCommandEvent
& event
);
349 void MessageBoxWindowModal(wxCommandEvent
& event
);
350 void MessageBoxWindowModalClosed(wxWindowModalDialogEvent
& event
);
351 #endif // wxUSE_MSGDLG
353 void RichMessageDialog(wxCommandEvent
& event
);
354 #endif // wxUSE_RICHMSGDLG
357 void ChooseColour(wxCommandEvent
& event
);
358 void GetColour(wxCommandEvent
& event
);
359 #endif // wxUSE_COLOURDLG
362 void ChooseFont(wxCommandEvent
& event
);
363 #endif // wxUSE_FONTDLG
366 void LogDialog(wxCommandEvent
& event
);
367 #endif // wxUSE_LOG_DIALOG
370 void InfoBarSimple(wxCommandEvent
& event
);
371 void InfoBarAdvanced(wxCommandEvent
& event
);
372 #endif // wxUSE_INFOBAR
375 void SingleChoice(wxCommandEvent
& event
);
376 void MultiChoice(wxCommandEvent
& event
);
377 #endif // wxUSE_CHOICEDLG
379 void Rearrange(wxCommandEvent
& event
);
382 void LineEntry(wxCommandEvent
& event
);
383 void TextEntry(wxCommandEvent
& event
);
384 void PasswordEntry(wxCommandEvent
& event
);
385 #endif // wxUSE_TEXTDLG
388 void NumericEntry(wxCommandEvent
& event
);
389 #endif // wxUSE_NUMBERDLG
392 void FileOpen(wxCommandEvent
& event
);
393 void FileOpen2(wxCommandEvent
& event
);
394 void FilesOpen(wxCommandEvent
& event
);
395 void FileSave(wxCommandEvent
& event
);
396 #endif // wxUSE_FILEDLG
398 #if USE_FILEDLG_GENERIC
399 void FileOpenGeneric(wxCommandEvent
& event
);
400 void FilesOpenGeneric(wxCommandEvent
& event
);
401 void FileSaveGeneric(wxCommandEvent
& event
);
402 #endif // USE_FILEDLG_GENERIC
405 void DirChoose(wxCommandEvent
& event
);
406 void DirChooseNew(wxCommandEvent
& event
);
407 #endif // wxUSE_DIRDLG
409 #if USE_DIRDLG_GENERIC
410 void GenericDirChoose(wxCommandEvent
& event
);
411 #endif // USE_DIRDLG_GENERIC
413 #if wxUSE_STARTUP_TIPS
414 void ShowTip(wxCommandEvent
& event
);
415 #endif // wxUSE_STARTUP_TIPS
417 #if USE_MODAL_PRESENTATION
418 void ModalDlg(wxCommandEvent
& event
);
419 #endif // USE_MODAL_PRESENTATION
420 void ModelessDlg(wxCommandEvent
& event
);
421 void DlgCenteredScreen(wxCommandEvent
& event
);
422 void DlgCenteredParent(wxCommandEvent
& event
);
423 void MiniFrame(wxCommandEvent
& event
);
424 void DlgOnTop(wxCommandEvent
& event
);
426 #if wxUSE_PROGRESSDLG
427 void ShowProgress(wxCommandEvent
& event
);
428 #endif // wxUSE_PROGRESSDLG
431 void ShowSimpleAboutDialog(wxCommandEvent
& event
);
432 void ShowFancyAboutDialog(wxCommandEvent
& event
);
433 void ShowFullAboutDialog(wxCommandEvent
& event
);
434 void ShowCustomAboutDialog(wxCommandEvent
& event
);
435 #endif // wxUSE_ABOUTDLG
438 void ShowBusyInfo(wxCommandEvent
& event
);
439 #endif // wxUSE_BUSYINFO
441 #if wxUSE_FINDREPLDLG
442 void ShowFindDialog(wxCommandEvent
& event
);
443 void ShowReplaceDialog(wxCommandEvent
& event
);
444 void OnFindDialog(wxFindDialogEvent
& event
);
445 #endif // wxUSE_FINDREPLDLG
447 #if USE_COLOURDLG_GENERIC
448 void ChooseColourGeneric(wxCommandEvent
& event
);
449 #endif // USE_COLOURDLG_GENERIC
451 #if USE_FONTDLG_GENERIC
452 void ChooseFontGeneric(wxCommandEvent
& event
);
453 #endif // USE_FONTDLG_GENERIC
455 void OnPropertySheet(wxCommandEvent
& event
);
457 void OnRequestUserAttention(wxCommandEvent
& event
);
458 #if wxUSE_NOTIFICATION_MESSAGE
459 void OnNotifMsgAuto(wxCommandEvent
& event
);
460 void OnNotifMsgShow(wxCommandEvent
& event
);
461 void OnNotifMsgHide(wxCommandEvent
& event
);
462 #endif // wxUSE_NOTIFICATION_MESSAGE
464 void OnStandardButtonsSizerDialog(wxCommandEvent
& event
);
466 void OnTestDefaultActionDialog(wxCommandEvent
& event
);
468 void OnExit(wxCommandEvent
& event
);
472 void DoDirChoose(int style
);
473 #endif // wxUSE_DIRDLG
475 #if USE_MODAL_PRESENTATION
476 MyModelessDialog
*m_dialog
;
477 #endif // USE_MODAL_PRESENTATION
479 #if wxUSE_FINDREPLDLG
480 wxFindReplaceData m_findData
;
482 wxFindReplaceDialog
*m_dlgFind
,
484 #endif // wxUSE_FINDREPLDLG
486 #if wxUSE_NOTIFICATION_MESSAGE
487 wxNotificationMessage
*m_notifMsg
;
488 #endif // wxUSE_NOTIFICATION_MESSAGE
490 wxColourData m_clrData
;
492 // just a window which we use to show the effect of font/colours selection
496 void OnInfoBarRedo(wxCommandEvent
& event
);
498 wxInfoBar
*m_infoBarSimple
,
500 #endif // wxUSE_INFOBAR
502 DECLARE_EVENT_TABLE()
505 class MyCanvas
: public wxScrolledWindow
508 MyCanvas(wxWindow
*parent
) : wxScrolledWindow(parent
, wxID_ANY
)
510 SetForegroundColour(*wxBLACK
);
511 SetBackgroundColour(*wxWHITE
);
512 SetFont(*wxNORMAL_FONT
);
516 void OnPaint(wxPaintEvent
& event
);
518 DECLARE_EVENT_TABLE()
525 DIALOGS_CHOOSE_COLOUR
= wxID_HIGHEST
,
527 DIALOGS_CHOOSE_COLOUR_GENERIC
,
529 DIALOGS_CHOOSE_FONT_GENERIC
,
531 DIALOGS_MESSAGE_BOX_WINDOW_MODAL
,
532 DIALOGS_MESSAGE_DIALOG
,
533 DIALOGS_MESSAGE_BOX_WXINFO
,
534 DIALOGS_RICH_MESSAGE_DIALOG
,
535 DIALOGS_SINGLE_CHOICE
,
536 DIALOGS_MULTI_CHOICE
,
540 DIALOGS_PASSWORD_ENTRY
,
545 DIALOGS_FILE_OPEN_GENERIC
,
546 DIALOGS_FILES_OPEN_GENERIC
,
547 DIALOGS_FILE_SAVE_GENERIC
,
549 DIALOGS_DIRNEW_CHOOSE
,
550 DIALOGS_GENERIC_DIR_CHOOSE
,
554 DIALOGS_INFOBAR_SIMPLE
,
555 DIALOGS_INFOBAR_ADVANCED
,
558 DIALOGS_CENTRE_SCREEN
,
559 DIALOGS_CENTRE_PARENT
,
562 DIALOGS_MODELESS_BTN
,
564 DIALOGS_ABOUTDLG_SIMPLE
,
565 DIALOGS_ABOUTDLG_FANCY
,
566 DIALOGS_ABOUTDLG_FULL
,
567 DIALOGS_ABOUTDLG_CUSTOM
,
575 DIALOGS_PROPERTY_SHEET
,
576 DIALOGS_PROPERTY_SHEET_TOOLBOOK
,
577 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK
,
578 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG
,
579 DIALOGS_TEST_DEFAULT_ACTION