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 OnDisableOK(wxCommandEvent
& event
);
297 void OnDisableCancel(wxCommandEvent
& event
);
298 void OnCatchListBoxDClick(wxCommandEvent
& event
);
299 void OnTextEnter(wxCommandEvent
& event
);
302 bool m_catchListBoxDClick
;
305 DECLARE_EVENT_TABLE()
309 #if USE_SETTINGS_DIALOG
310 // Property sheet dialog
311 class SettingsDialog
: public wxPropertySheetDialog
313 DECLARE_CLASS(SettingsDialog
)
315 SettingsDialog(wxWindow
* parent
, int dialogType
);
318 wxPanel
* CreateGeneralSettingsPage(wxWindow
* parent
);
319 wxPanel
* CreateAestheticSettingsPage(wxWindow
* parent
);
324 ID_SHOW_TOOLTIPS
= 100,
327 ID_LOAD_LAST_PROJECT
,
329 ID_APPLY_SETTINGS_TO
,
334 wxImageList
* m_imageList
;
336 DECLARE_EVENT_TABLE()
339 #endif // USE_SETTINGS_DIALOG
341 // Define a new frame type
342 class MyFrame
: public wxFrame
345 MyFrame(const wxString
& title
);
349 void MessageBox(wxCommandEvent
& event
);
350 void MessageBoxDialog(wxCommandEvent
& event
);
351 void MessageBoxInfo(wxCommandEvent
& event
);
352 void MessageBoxWindowModal(wxCommandEvent
& event
);
353 void MessageBoxWindowModalClosed(wxWindowModalDialogEvent
& event
);
354 #endif // wxUSE_MSGDLG
356 void RichMessageDialog(wxCommandEvent
& event
);
357 #endif // wxUSE_RICHMSGDLG
360 void ChooseColour(wxCommandEvent
& event
);
361 void GetColour(wxCommandEvent
& event
);
362 #endif // wxUSE_COLOURDLG
365 void ChooseFont(wxCommandEvent
& event
);
366 #endif // wxUSE_FONTDLG
369 void LogDialog(wxCommandEvent
& event
);
370 #endif // wxUSE_LOG_DIALOG
373 void InfoBarSimple(wxCommandEvent
& event
);
374 void InfoBarAdvanced(wxCommandEvent
& event
);
375 #endif // wxUSE_INFOBAR
378 void SingleChoice(wxCommandEvent
& event
);
379 void MultiChoice(wxCommandEvent
& event
);
380 #endif // wxUSE_CHOICEDLG
382 void Rearrange(wxCommandEvent
& event
);
385 void LineEntry(wxCommandEvent
& event
);
386 void TextEntry(wxCommandEvent
& event
);
387 void PasswordEntry(wxCommandEvent
& event
);
388 #endif // wxUSE_TEXTDLG
391 void NumericEntry(wxCommandEvent
& event
);
392 #endif // wxUSE_NUMBERDLG
395 void FileOpen(wxCommandEvent
& event
);
396 void FileOpen2(wxCommandEvent
& event
);
397 void FilesOpen(wxCommandEvent
& event
);
398 void FileSave(wxCommandEvent
& event
);
399 #endif // wxUSE_FILEDLG
401 #if USE_FILEDLG_GENERIC
402 void FileOpenGeneric(wxCommandEvent
& event
);
403 void FilesOpenGeneric(wxCommandEvent
& event
);
404 void FileSaveGeneric(wxCommandEvent
& event
);
405 #endif // USE_FILEDLG_GENERIC
408 void DirChoose(wxCommandEvent
& event
);
409 void DirChooseNew(wxCommandEvent
& event
);
410 #endif // wxUSE_DIRDLG
412 #if USE_DIRDLG_GENERIC
413 void GenericDirChoose(wxCommandEvent
& event
);
414 #endif // USE_DIRDLG_GENERIC
416 #if wxUSE_STARTUP_TIPS
417 void ShowTip(wxCommandEvent
& event
);
418 #endif // wxUSE_STARTUP_TIPS
420 #if USE_MODAL_PRESENTATION
421 void ModalDlg(wxCommandEvent
& event
);
422 #endif // USE_MODAL_PRESENTATION
423 void ModelessDlg(wxCommandEvent
& event
);
424 void DlgCenteredScreen(wxCommandEvent
& event
);
425 void DlgCenteredParent(wxCommandEvent
& event
);
426 void MiniFrame(wxCommandEvent
& event
);
427 void DlgOnTop(wxCommandEvent
& event
);
429 #if wxUSE_PROGRESSDLG
430 void ShowProgress(wxCommandEvent
& event
);
431 #endif // wxUSE_PROGRESSDLG
434 void ShowSimpleAboutDialog(wxCommandEvent
& event
);
435 void ShowFancyAboutDialog(wxCommandEvent
& event
);
436 void ShowFullAboutDialog(wxCommandEvent
& event
);
437 void ShowCustomAboutDialog(wxCommandEvent
& event
);
438 #endif // wxUSE_ABOUTDLG
441 void ShowBusyInfo(wxCommandEvent
& event
);
442 #endif // wxUSE_BUSYINFO
444 #if wxUSE_FINDREPLDLG
445 void ShowFindDialog(wxCommandEvent
& event
);
446 void ShowReplaceDialog(wxCommandEvent
& event
);
447 void OnFindDialog(wxFindDialogEvent
& event
);
448 #endif // wxUSE_FINDREPLDLG
450 #if USE_COLOURDLG_GENERIC
451 void ChooseColourGeneric(wxCommandEvent
& event
);
452 #endif // USE_COLOURDLG_GENERIC
454 #if USE_FONTDLG_GENERIC
455 void ChooseFontGeneric(wxCommandEvent
& event
);
456 #endif // USE_FONTDLG_GENERIC
458 void OnPropertySheet(wxCommandEvent
& event
);
460 void OnRequestUserAttention(wxCommandEvent
& event
);
461 #if wxUSE_NOTIFICATION_MESSAGE
462 void OnNotifMsgAuto(wxCommandEvent
& event
);
463 void OnNotifMsgShow(wxCommandEvent
& event
);
464 void OnNotifMsgHide(wxCommandEvent
& event
);
465 #endif // wxUSE_NOTIFICATION_MESSAGE
467 void OnStandardButtonsSizerDialog(wxCommandEvent
& event
);
469 void OnTestDefaultActionDialog(wxCommandEvent
& event
);
471 void OnExit(wxCommandEvent
& event
);
475 void DoDirChoose(int style
);
476 #endif // wxUSE_DIRDLG
478 #if USE_MODAL_PRESENTATION
479 MyModelessDialog
*m_dialog
;
480 #endif // USE_MODAL_PRESENTATION
482 #if wxUSE_FINDREPLDLG
483 wxFindReplaceData m_findData
;
485 wxFindReplaceDialog
*m_dlgFind
,
487 #endif // wxUSE_FINDREPLDLG
489 #if wxUSE_NOTIFICATION_MESSAGE
490 wxNotificationMessage
*m_notifMsg
;
491 #endif // wxUSE_NOTIFICATION_MESSAGE
493 wxColourData m_clrData
;
495 // just a window which we use to show the effect of font/colours selection
499 void OnInfoBarRedo(wxCommandEvent
& event
);
501 wxInfoBar
*m_infoBarSimple
,
503 #endif // wxUSE_INFOBAR
505 DECLARE_EVENT_TABLE()
508 class MyCanvas
: public wxScrolledWindow
511 MyCanvas(wxWindow
*parent
) : wxScrolledWindow(parent
, wxID_ANY
)
513 SetForegroundColour(*wxBLACK
);
514 SetBackgroundColour(*wxWHITE
);
515 SetFont(*wxNORMAL_FONT
);
519 void OnPaint(wxPaintEvent
& event
);
521 DECLARE_EVENT_TABLE()
528 DIALOGS_CHOOSE_COLOUR
= wxID_HIGHEST
,
530 DIALOGS_CHOOSE_COLOUR_GENERIC
,
532 DIALOGS_CHOOSE_FONT_GENERIC
,
534 DIALOGS_MESSAGE_BOX_WINDOW_MODAL
,
535 DIALOGS_MESSAGE_DIALOG
,
536 DIALOGS_MESSAGE_BOX_WXINFO
,
537 DIALOGS_RICH_MESSAGE_DIALOG
,
538 DIALOGS_SINGLE_CHOICE
,
539 DIALOGS_MULTI_CHOICE
,
543 DIALOGS_PASSWORD_ENTRY
,
548 DIALOGS_FILE_OPEN_GENERIC
,
549 DIALOGS_FILES_OPEN_GENERIC
,
550 DIALOGS_FILE_SAVE_GENERIC
,
552 DIALOGS_DIRNEW_CHOOSE
,
553 DIALOGS_GENERIC_DIR_CHOOSE
,
557 DIALOGS_INFOBAR_SIMPLE
,
558 DIALOGS_INFOBAR_ADVANCED
,
561 DIALOGS_CENTRE_SCREEN
,
562 DIALOGS_CENTRE_PARENT
,
565 DIALOGS_MODELESS_BTN
,
567 DIALOGS_ABOUTDLG_SIMPLE
,
568 DIALOGS_ABOUTDLG_FANCY
,
569 DIALOGS_ABOUTDLG_FULL
,
570 DIALOGS_ABOUTDLG_CUSTOM
,
578 DIALOGS_PROPERTY_SHEET
,
579 DIALOGS_PROPERTY_SHEET_TOOLBOOK
,
580 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK
,
581 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG
,
582 DIALOGS_TEST_DEFAULT_ACTION