1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Common dialogs demo
4 // Author: Julian Smart, Vadim Zeitlin, ABX
7 // Copyright: (c) Julian Smart
10 // Licence: wxWindows license
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 virtual bool OnInit();
122 virtual wxAppTraits
*CreateTraits() { return new MyAppTraits
; }
126 #if USE_MODAL_PRESENTATION
128 // A custom modeless dialog
129 class MyModelessDialog
: public wxDialog
132 MyModelessDialog(wxWindow
*parent
);
134 void OnButton(wxCommandEvent
& event
);
135 void OnClose(wxCloseEvent
& event
);
138 DECLARE_EVENT_TABLE()
141 // A custom modal dialog
142 class MyModalDialog
: public wxDialog
145 MyModalDialog(wxWindow
*parent
);
147 void OnButton(wxCommandEvent
& event
);
150 wxButton
*m_btnModal
,
154 DECLARE_EVENT_TABLE()
157 #endif // USE_MODAL_PRESENTATION
159 // A class demonstrating CreateStdDialogButtonSizer()
160 class StdButtonSizerDialog
: public wxDialog
163 StdButtonSizerDialog(wxWindow
*parent
);
165 void OnEvent(wxCommandEvent
& event
);
168 void EnableDisableControls();
170 wxCheckBox
*m_chkboxAffirmativeButton
;
171 wxRadioButton
*m_radiobtnOk
,
174 wxCheckBox
*m_chkboxDismissButton
;
175 wxRadioButton
*m_radiobtnClose
,
178 wxCheckBox
*m_chkboxApply
,
183 wxSizer
*m_buttonsSizer
;
185 DECLARE_EVENT_TABLE()
188 // Test harness for wxMessageDialog.
189 class TestMessageBoxDialog
: public wxDialog
192 TestMessageBoxDialog(wxWindow
*parent
);
195 void OnApply(wxCommandEvent
& event
);
196 void OnClose(wxCommandEvent
& event
);
197 void OnUpdateLabelUI(wxUpdateUIEvent
& event
);
198 void OnUpdateNoDefaultUI(wxUpdateUIEvent
& event
);
215 static const BtnInfo ms_btnInfo
[Btn_Max
];
217 wxTextCtrl
*m_textMsg
,
220 wxCheckBox
*m_buttons
[Btn_Max
];
221 wxTextCtrl
*m_labels
[Btn_Max
];
225 wxCheckBox
*m_chkNoDefault
,
228 DECLARE_EVENT_TABLE()
229 wxDECLARE_NO_COPY_CLASS(TestMessageBoxDialog
);
232 class TestDefaultActionDialog
: public wxDialog
235 TestDefaultActionDialog( wxWindow
*parent
);
237 void OnListBoxDClick(wxCommandEvent
& event
);
238 void OnCatchListBoxDClick(wxCommandEvent
& event
);
241 bool m_catchListBoxDClick
;
244 DECLARE_EVENT_TABLE()
248 #if USE_SETTINGS_DIALOG
249 // Property sheet dialog
250 class SettingsDialog
: public wxPropertySheetDialog
252 DECLARE_CLASS(SettingsDialog
)
254 SettingsDialog(wxWindow
* parent
, int dialogType
);
257 wxPanel
* CreateGeneralSettingsPage(wxWindow
* parent
);
258 wxPanel
* CreateAestheticSettingsPage(wxWindow
* parent
);
263 ID_SHOW_TOOLTIPS
= 100,
266 ID_LOAD_LAST_PROJECT
,
268 ID_APPLY_SETTINGS_TO
,
273 wxImageList
* m_imageList
;
275 DECLARE_EVENT_TABLE()
278 #endif // USE_SETTINGS_DIALOG
280 // Define a new frame type
281 class MyFrame
: public wxFrame
284 MyFrame(const wxString
& title
);
288 void MessageBox(wxCommandEvent
& event
);
289 void MessageBoxDialog(wxCommandEvent
& event
);
290 void MessageBoxInfo(wxCommandEvent
& event
);
291 void MessageBoxWindowModal(wxCommandEvent
& event
);
292 void MessageBoxWindowModalClosed(wxWindowModalDialogEvent
& event
);
293 #endif // wxUSE_MSGDLG
296 void ChooseColour(wxCommandEvent
& event
);
297 void GetColour(wxCommandEvent
& event
);
298 #endif // wxUSE_COLOURDLG
301 void ChooseFont(wxCommandEvent
& event
);
302 #endif // wxUSE_FONTDLG
305 void LogDialog(wxCommandEvent
& event
);
306 #endif // wxUSE_LOG_DIALOG
309 void InfoBarSimple(wxCommandEvent
& event
);
310 void InfoBarAdvanced(wxCommandEvent
& event
);
311 #endif // wxUSE_INFOBAR
314 void SingleChoice(wxCommandEvent
& event
);
315 void MultiChoice(wxCommandEvent
& event
);
316 #endif // wxUSE_CHOICEDLG
318 void Rearrange(wxCommandEvent
& event
);
321 void TextEntry(wxCommandEvent
& event
);
322 void PasswordEntry(wxCommandEvent
& event
);
323 #endif // wxUSE_TEXTDLG
326 void NumericEntry(wxCommandEvent
& event
);
327 #endif // wxUSE_NUMBERDLG
330 void FileOpen(wxCommandEvent
& event
);
331 void FileOpen2(wxCommandEvent
& event
);
332 void FilesOpen(wxCommandEvent
& event
);
333 void FileSave(wxCommandEvent
& event
);
334 #endif // wxUSE_FILEDLG
336 #if USE_FILEDLG_GENERIC
337 void FileOpenGeneric(wxCommandEvent
& event
);
338 void FilesOpenGeneric(wxCommandEvent
& event
);
339 void FileSaveGeneric(wxCommandEvent
& event
);
340 #endif // USE_FILEDLG_GENERIC
343 void DirChoose(wxCommandEvent
& event
);
344 void DirChooseNew(wxCommandEvent
& event
);
345 #endif // wxUSE_DIRDLG
347 #if USE_DIRDLG_GENERIC
348 void GenericDirChoose(wxCommandEvent
& event
);
349 #endif // USE_DIRDLG_GENERIC
351 #if wxUSE_STARTUP_TIPS
352 void ShowTip(wxCommandEvent
& event
);
353 #endif // wxUSE_STARTUP_TIPS
355 #if USE_MODAL_PRESENTATION
356 void ModalDlg(wxCommandEvent
& event
);
357 #endif // USE_MODAL_PRESENTATION
358 void ModelessDlg(wxCommandEvent
& event
);
359 void DlgCenteredScreen(wxCommandEvent
& event
);
360 void DlgCenteredParent(wxCommandEvent
& event
);
361 void MiniFrame(wxCommandEvent
& event
);
362 void DlgOnTop(wxCommandEvent
& event
);
364 #if wxUSE_PROGRESSDLG
365 void ShowProgress(wxCommandEvent
& event
);
366 #endif // wxUSE_PROGRESSDLG
369 void ShowSimpleAboutDialog(wxCommandEvent
& event
);
370 void ShowFancyAboutDialog(wxCommandEvent
& event
);
371 void ShowFullAboutDialog(wxCommandEvent
& event
);
372 void ShowCustomAboutDialog(wxCommandEvent
& event
);
373 #endif // wxUSE_ABOUTDLG
376 void ShowBusyInfo(wxCommandEvent
& event
);
377 #endif // wxUSE_BUSYINFO
379 #if wxUSE_FINDREPLDLG
380 void ShowFindDialog(wxCommandEvent
& event
);
381 void ShowReplaceDialog(wxCommandEvent
& event
);
382 void OnFindDialog(wxFindDialogEvent
& event
);
383 #endif // wxUSE_FINDREPLDLG
385 #if USE_COLOURDLG_GENERIC
386 void ChooseColourGeneric(wxCommandEvent
& event
);
387 #endif // USE_COLOURDLG_GENERIC
389 #if USE_FONTDLG_GENERIC
390 void ChooseFontGeneric(wxCommandEvent
& event
);
391 #endif // USE_FONTDLG_GENERIC
393 void OnPropertySheet(wxCommandEvent
& event
);
395 void OnRequestUserAttention(wxCommandEvent
& event
);
396 #if wxUSE_NOTIFICATION_MESSAGE
397 void OnNotifMsgAuto(wxCommandEvent
& event
);
398 void OnNotifMsgShow(wxCommandEvent
& event
);
399 void OnNotifMsgHide(wxCommandEvent
& event
);
400 #endif // wxUSE_NOTIFICATION_MESSAGE
402 void OnStandardButtonsSizerDialog(wxCommandEvent
& event
);
404 void OnTestDefaultActionDialog(wxCommandEvent
& event
);
406 void OnExit(wxCommandEvent
& event
);
410 void DoDirChoose(int style
);
411 #endif // wxUSE_DIRDLG
413 #if USE_MODAL_PRESENTATION
414 MyModelessDialog
*m_dialog
;
415 #endif // USE_MODAL_PRESENTATION
417 #if wxUSE_FINDREPLDLG
418 wxFindReplaceData m_findData
;
420 wxFindReplaceDialog
*m_dlgFind
,
422 #endif // wxUSE_FINDREPLDLG
424 #if wxUSE_NOTIFICATION_MESSAGE
425 wxNotificationMessage
*m_notifMsg
;
426 #endif // wxUSE_NOTIFICATION_MESSAGE
428 wxColourData m_clrData
;
430 // just a window which we use to show the effect of font/colours selection
434 void OnInfoBarRedo(wxCommandEvent
& event
);
436 wxInfoBar
*m_infoBarSimple
,
438 #endif // wxUSE_INFOBAR
440 DECLARE_EVENT_TABLE()
443 class MyCanvas
: public wxScrolledWindow
446 MyCanvas(wxWindow
*parent
) : wxScrolledWindow(parent
, wxID_ANY
)
448 SetForegroundColour(*wxBLACK
);
449 SetBackgroundColour(*wxWHITE
);
450 SetFont(*wxNORMAL_FONT
);
454 void OnPaint(wxPaintEvent
& event
);
456 DECLARE_EVENT_TABLE()
463 DIALOGS_CHOOSE_COLOUR
= wxID_HIGHEST
,
465 DIALOGS_CHOOSE_COLOUR_GENERIC
,
467 DIALOGS_CHOOSE_FONT_GENERIC
,
469 DIALOGS_MESSAGE_BOX_WINDOW_MODAL
,
470 DIALOGS_MESSAGE_DIALOG
,
471 DIALOGS_MESSAGE_BOX_WXINFO
,
472 DIALOGS_SINGLE_CHOICE
,
473 DIALOGS_MULTI_CHOICE
,
476 DIALOGS_PASSWORD_ENTRY
,
481 DIALOGS_FILE_OPEN_GENERIC
,
482 DIALOGS_FILES_OPEN_GENERIC
,
483 DIALOGS_FILE_SAVE_GENERIC
,
485 DIALOGS_DIRNEW_CHOOSE
,
486 DIALOGS_GENERIC_DIR_CHOOSE
,
490 DIALOGS_INFOBAR_SIMPLE
,
491 DIALOGS_INFOBAR_ADVANCED
,
494 DIALOGS_CENTRE_SCREEN
,
495 DIALOGS_CENTRE_PARENT
,
498 DIALOGS_MODELESS_BTN
,
500 DIALOGS_ABOUTDLG_SIMPLE
,
501 DIALOGS_ABOUTDLG_FANCY
,
502 DIALOGS_ABOUTDLG_FULL
,
503 DIALOGS_ABOUTDLG_CUSTOM
,
511 DIALOGS_PROPERTY_SHEET
,
512 DIALOGS_PROPERTY_SHEET_TOOLBOOK
,
513 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK
,
514 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG
,
515 DIALOGS_TEST_DEFAULT_ACTION