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 #endif // wxUSE_MSGDLG
294 void ChooseColour(wxCommandEvent
& event
);
295 void GetColour(wxCommandEvent
& event
);
296 #endif // wxUSE_COLOURDLG
299 void ChooseFont(wxCommandEvent
& event
);
300 #endif // wxUSE_FONTDLG
303 void LogDialog(wxCommandEvent
& event
);
304 #endif // wxUSE_LOG_DIALOG
307 void InfoBarSimple(wxCommandEvent
& event
);
308 void InfoBarAdvanced(wxCommandEvent
& event
);
309 #endif // wxUSE_INFOBAR
312 void SingleChoice(wxCommandEvent
& event
);
313 void MultiChoice(wxCommandEvent
& event
);
314 #endif // wxUSE_CHOICEDLG
316 void Rearrange(wxCommandEvent
& event
);
319 void TextEntry(wxCommandEvent
& event
);
320 void PasswordEntry(wxCommandEvent
& event
);
321 #endif // wxUSE_TEXTDLG
324 void NumericEntry(wxCommandEvent
& event
);
325 #endif // wxUSE_NUMBERDLG
328 void FileOpen(wxCommandEvent
& event
);
329 void FileOpen2(wxCommandEvent
& event
);
330 void FilesOpen(wxCommandEvent
& event
);
331 void FileSave(wxCommandEvent
& event
);
332 #endif // wxUSE_FILEDLG
334 #if USE_FILEDLG_GENERIC
335 void FileOpenGeneric(wxCommandEvent
& event
);
336 void FilesOpenGeneric(wxCommandEvent
& event
);
337 void FileSaveGeneric(wxCommandEvent
& event
);
338 #endif // USE_FILEDLG_GENERIC
341 void DirChoose(wxCommandEvent
& event
);
342 void DirChooseNew(wxCommandEvent
& event
);
343 #endif // wxUSE_DIRDLG
345 #if USE_DIRDLG_GENERIC
346 void GenericDirChoose(wxCommandEvent
& event
);
347 #endif // USE_DIRDLG_GENERIC
349 #if wxUSE_STARTUP_TIPS
350 void ShowTip(wxCommandEvent
& event
);
351 #endif // wxUSE_STARTUP_TIPS
353 #if USE_MODAL_PRESENTATION
354 void ModalDlg(wxCommandEvent
& event
);
355 #endif // USE_MODAL_PRESENTATION
356 void ModelessDlg(wxCommandEvent
& event
);
357 void DlgCenteredScreen(wxCommandEvent
& event
);
358 void DlgCenteredParent(wxCommandEvent
& event
);
359 void MiniFrame(wxCommandEvent
& event
);
360 void DlgOnTop(wxCommandEvent
& event
);
362 #if wxUSE_PROGRESSDLG
363 void ShowProgress(wxCommandEvent
& event
);
364 #endif // wxUSE_PROGRESSDLG
367 void ShowSimpleAboutDialog(wxCommandEvent
& event
);
368 void ShowFancyAboutDialog(wxCommandEvent
& event
);
369 void ShowFullAboutDialog(wxCommandEvent
& event
);
370 void ShowCustomAboutDialog(wxCommandEvent
& event
);
371 #endif // wxUSE_ABOUTDLG
374 void ShowBusyInfo(wxCommandEvent
& event
);
375 #endif // wxUSE_BUSYINFO
377 #if wxUSE_FINDREPLDLG
378 void ShowFindDialog(wxCommandEvent
& event
);
379 void ShowReplaceDialog(wxCommandEvent
& event
);
380 void OnFindDialog(wxFindDialogEvent
& event
);
381 #endif // wxUSE_FINDREPLDLG
383 #if USE_COLOURDLG_GENERIC
384 void ChooseColourGeneric(wxCommandEvent
& event
);
385 #endif // USE_COLOURDLG_GENERIC
387 #if USE_FONTDLG_GENERIC
388 void ChooseFontGeneric(wxCommandEvent
& event
);
389 #endif // USE_FONTDLG_GENERIC
391 void OnPropertySheet(wxCommandEvent
& event
);
393 void OnRequestUserAttention(wxCommandEvent
& event
);
394 #if wxUSE_NOTIFICATION_MESSAGE
395 void OnNotifMsgAuto(wxCommandEvent
& event
);
396 void OnNotifMsgShow(wxCommandEvent
& event
);
397 void OnNotifMsgHide(wxCommandEvent
& event
);
398 #endif // wxUSE_NOTIFICATION_MESSAGE
400 void OnStandardButtonsSizerDialog(wxCommandEvent
& event
);
402 void OnTestDefaultActionDialog(wxCommandEvent
& event
);
404 void OnExit(wxCommandEvent
& event
);
408 void DoDirChoose(int style
);
409 #endif // wxUSE_DIRDLG
411 #if USE_MODAL_PRESENTATION
412 MyModelessDialog
*m_dialog
;
413 #endif // USE_MODAL_PRESENTATION
415 #if wxUSE_FINDREPLDLG
416 wxFindReplaceData m_findData
;
418 wxFindReplaceDialog
*m_dlgFind
,
420 #endif // wxUSE_FINDREPLDLG
422 #if wxUSE_NOTIFICATION_MESSAGE
423 wxNotificationMessage
*m_notifMsg
;
424 #endif // wxUSE_NOTIFICATION_MESSAGE
426 wxColourData m_clrData
;
428 // just a window which we use to show the effect of font/colours selection
432 void OnInfoBarRedo(wxCommandEvent
& event
);
434 wxInfoBar
*m_infoBarSimple
,
436 #endif // wxUSE_INFOBAR
438 DECLARE_EVENT_TABLE()
441 class MyCanvas
: public wxScrolledWindow
444 MyCanvas(wxWindow
*parent
) : wxScrolledWindow(parent
, wxID_ANY
)
446 SetForegroundColour(*wxBLACK
);
447 SetBackgroundColour(*wxWHITE
);
448 SetFont(*wxNORMAL_FONT
);
452 void OnPaint(wxPaintEvent
& event
);
454 DECLARE_EVENT_TABLE()
461 DIALOGS_CHOOSE_COLOUR
= wxID_HIGHEST
,
463 DIALOGS_CHOOSE_COLOUR_GENERIC
,
465 DIALOGS_CHOOSE_FONT_GENERIC
,
467 DIALOGS_MESSAGE_DIALOG
,
468 DIALOGS_MESSAGE_BOX_WXINFO
,
469 DIALOGS_SINGLE_CHOICE
,
470 DIALOGS_MULTI_CHOICE
,
473 DIALOGS_PASSWORD_ENTRY
,
478 DIALOGS_FILE_OPEN_GENERIC
,
479 DIALOGS_FILES_OPEN_GENERIC
,
480 DIALOGS_FILE_SAVE_GENERIC
,
482 DIALOGS_DIRNEW_CHOOSE
,
483 DIALOGS_GENERIC_DIR_CHOOSE
,
487 DIALOGS_INFOBAR_SIMPLE
,
488 DIALOGS_INFOBAR_ADVANCED
,
491 DIALOGS_CENTRE_SCREEN
,
492 DIALOGS_CENTRE_PARENT
,
495 DIALOGS_MODELESS_BTN
,
497 DIALOGS_ABOUTDLG_SIMPLE
,
498 DIALOGS_ABOUTDLG_FANCY
,
499 DIALOGS_ABOUTDLG_FULL
,
500 DIALOGS_ABOUTDLG_CUSTOM
,
508 DIALOGS_PROPERTY_SHEET
,
509 DIALOGS_PROPERTY_SHEET_TOOLBOOK
,
510 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK
,
511 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG
,
512 DIALOGS_TEST_DEFAULT_ACTION