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();
121 wxColour m_canvasTextColour
;
125 virtual wxAppTraits
*CreateTraits() { return new MyAppTraits
; }
129 #if USE_MODAL_PRESENTATION
131 // A custom modeless dialog
132 class MyModelessDialog
: public wxDialog
135 MyModelessDialog(wxWindow
*parent
);
137 void OnButton(wxCommandEvent
& event
);
138 void OnClose(wxCloseEvent
& event
);
141 DECLARE_EVENT_TABLE()
144 // A custom modal dialog
145 class MyModalDialog
: public wxDialog
148 MyModalDialog(wxWindow
*parent
);
150 void OnButton(wxCommandEvent
& event
);
153 wxButton
*m_btnModal
,
157 DECLARE_EVENT_TABLE()
160 #endif // USE_MODAL_PRESENTATION
162 // A class demonstrating CreateStdDialogButtonSizer()
163 class StdButtonSizerDialog
: public wxDialog
166 StdButtonSizerDialog(wxWindow
*parent
);
168 void OnEvent(wxCommandEvent
& event
);
171 void EnableDisableControls();
173 wxCheckBox
*m_chkboxAffirmativeButton
;
174 wxRadioButton
*m_radiobtnOk
,
177 wxCheckBox
*m_chkboxDismissButton
;
178 wxRadioButton
*m_radiobtnClose
,
181 wxCheckBox
*m_chkboxApply
,
186 wxSizer
*m_buttonsSizer
;
188 DECLARE_EVENT_TABLE()
191 // Test harness for wxMessageDialog.
192 class TestMessageBoxDialog
: public wxDialog
195 TestMessageBoxDialog(wxWindow
*parent
);
198 void OnApply(wxCommandEvent
& event
);
199 void OnClose(wxCommandEvent
& event
);
200 void OnUpdateLabelUI(wxUpdateUIEvent
& event
);
201 void OnUpdateNoDefaultUI(wxUpdateUIEvent
& event
);
218 static const BtnInfo ms_btnInfo
[Btn_Max
];
220 wxTextCtrl
*m_textMsg
,
223 wxCheckBox
*m_buttons
[Btn_Max
];
224 wxTextCtrl
*m_labels
[Btn_Max
];
228 wxCheckBox
*m_chkNoDefault
,
231 DECLARE_EVENT_TABLE()
232 wxDECLARE_NO_COPY_CLASS(TestMessageBoxDialog
);
235 class TestDefaultActionDialog
: public wxDialog
238 TestDefaultActionDialog( wxWindow
*parent
);
240 void OnListBoxDClick(wxCommandEvent
& event
);
241 void OnCatchListBoxDClick(wxCommandEvent
& event
);
244 bool m_catchListBoxDClick
;
247 DECLARE_EVENT_TABLE()
251 #if USE_SETTINGS_DIALOG
252 // Property sheet dialog
253 class SettingsDialog
: public wxPropertySheetDialog
255 DECLARE_CLASS(SettingsDialog
)
257 SettingsDialog(wxWindow
* parent
, int dialogType
);
260 wxPanel
* CreateGeneralSettingsPage(wxWindow
* parent
);
261 wxPanel
* CreateAestheticSettingsPage(wxWindow
* parent
);
266 ID_SHOW_TOOLTIPS
= 100,
269 ID_LOAD_LAST_PROJECT
,
271 ID_APPLY_SETTINGS_TO
,
276 wxImageList
* m_imageList
;
278 DECLARE_EVENT_TABLE()
281 #endif // USE_SETTINGS_DIALOG
283 // Define a new frame type
284 class MyFrame
: public wxFrame
287 MyFrame(const wxString
& title
);
291 void MessageBox(wxCommandEvent
& event
);
292 void MessageBoxDialog(wxCommandEvent
& event
);
293 void MessageBoxInfo(wxCommandEvent
& event
);
294 #endif // wxUSE_MSGDLG
297 void ChooseColour(wxCommandEvent
& event
);
298 void GetColour(wxCommandEvent
& event
);
299 #endif // wxUSE_COLOURDLG
302 void ChooseFont(wxCommandEvent
& event
);
303 #endif // wxUSE_FONTDLG
306 void LogDialog(wxCommandEvent
& event
);
307 #endif // wxUSE_LOG_DIALOG
310 void SingleChoice(wxCommandEvent
& event
);
311 void MultiChoice(wxCommandEvent
& event
);
312 #endif // wxUSE_CHOICEDLG
314 void Rearrange(wxCommandEvent
& event
);
317 void TextEntry(wxCommandEvent
& event
);
318 void PasswordEntry(wxCommandEvent
& event
);
319 #endif // wxUSE_TEXTDLG
322 void NumericEntry(wxCommandEvent
& event
);
323 #endif // wxUSE_NUMBERDLG
326 void FileOpen(wxCommandEvent
& event
);
327 void FileOpen2(wxCommandEvent
& event
);
328 void FilesOpen(wxCommandEvent
& event
);
329 void FileSave(wxCommandEvent
& event
);
330 #endif // wxUSE_FILEDLG
332 #if USE_FILEDLG_GENERIC
333 void FileOpenGeneric(wxCommandEvent
& event
);
334 void FilesOpenGeneric(wxCommandEvent
& event
);
335 void FileSaveGeneric(wxCommandEvent
& event
);
336 #endif // USE_FILEDLG_GENERIC
339 void DirChoose(wxCommandEvent
& event
);
340 void DirChooseNew(wxCommandEvent
& event
);
341 #endif // wxUSE_DIRDLG
343 #if USE_DIRDLG_GENERIC
344 void GenericDirChoose(wxCommandEvent
& event
);
345 #endif // USE_DIRDLG_GENERIC
347 #if wxUSE_STARTUP_TIPS
348 void ShowTip(wxCommandEvent
& event
);
349 #endif // wxUSE_STARTUP_TIPS
351 #if USE_MODAL_PRESENTATION
352 void ModalDlg(wxCommandEvent
& event
);
353 #endif // USE_MODAL_PRESENTATION
354 void ModelessDlg(wxCommandEvent
& event
);
355 void DlgCenteredScreen(wxCommandEvent
& event
);
356 void DlgCenteredParent(wxCommandEvent
& event
);
357 void MiniFrame(wxCommandEvent
& event
);
358 void DlgOnTop(wxCommandEvent
& event
);
360 #if wxUSE_PROGRESSDLG
361 void ShowProgress(wxCommandEvent
& event
);
362 #endif // wxUSE_PROGRESSDLG
365 void ShowSimpleAboutDialog(wxCommandEvent
& event
);
366 void ShowFancyAboutDialog(wxCommandEvent
& event
);
367 void ShowFullAboutDialog(wxCommandEvent
& event
);
368 void ShowCustomAboutDialog(wxCommandEvent
& event
);
369 #endif // wxUSE_ABOUTDLG
372 void ShowBusyInfo(wxCommandEvent
& event
);
373 #endif // wxUSE_BUSYINFO
375 #if wxUSE_FINDREPLDLG
376 void ShowFindDialog(wxCommandEvent
& event
);
377 void ShowReplaceDialog(wxCommandEvent
& event
);
378 void OnFindDialog(wxFindDialogEvent
& event
);
379 #endif // wxUSE_FINDREPLDLG
381 #if USE_COLOURDLG_GENERIC
382 void ChooseColourGeneric(wxCommandEvent
& event
);
383 #endif // USE_COLOURDLG_GENERIC
385 #if USE_FONTDLG_GENERIC
386 void ChooseFontGeneric(wxCommandEvent
& event
);
387 #endif // USE_FONTDLG_GENERIC
389 void OnPropertySheet(wxCommandEvent
& event
);
391 void OnRequestUserAttention(wxCommandEvent
& event
);
392 #if wxUSE_NOTIFICATION_MESSAGE
393 void OnNotifMsgAuto(wxCommandEvent
& event
);
394 void OnNotifMsgShow(wxCommandEvent
& event
);
395 void OnNotifMsgHide(wxCommandEvent
& event
);
396 #endif // wxUSE_NOTIFICATION_MESSAGE
398 void OnStandardButtonsSizerDialog(wxCommandEvent
& event
);
400 void OnTestDefaultActionDialog(wxCommandEvent
& event
);
402 void OnExit(wxCommandEvent
& event
);
406 void DoDirChoose(int style
);
407 #endif // wxUSE_DIRDLG
409 #if USE_MODAL_PRESENTATION
410 MyModelessDialog
*m_dialog
;
411 #endif // USE_MODAL_PRESENTATION
413 #if wxUSE_FINDREPLDLG
414 wxFindReplaceData m_findData
;
416 wxFindReplaceDialog
*m_dlgFind
,
418 #endif // wxUSE_FINDREPLDLG
420 #if wxUSE_NOTIFICATION_MESSAGE
421 wxNotificationMessage
*m_notifMsg
;
422 #endif // wxUSE_NOTIFICATION_MESSAGE
424 wxColourData m_clrData
;
426 // just a window which we use to show the effect of font/colours selection
429 DECLARE_EVENT_TABLE()
432 class MyCanvas
: public wxScrolledWindow
435 MyCanvas(wxWindow
*parent
) : wxScrolledWindow(parent
, wxID_ANY
)
437 SetBackgroundColour(*wxWHITE
);
441 void OnPaint(wxPaintEvent
& event
);
443 DECLARE_EVENT_TABLE()
450 DIALOGS_CHOOSE_COLOUR
= wxID_HIGHEST
,
452 DIALOGS_CHOOSE_COLOUR_GENERIC
,
454 DIALOGS_CHOOSE_FONT_GENERIC
,
456 DIALOGS_MESSAGE_DIALOG
,
457 DIALOGS_MESSAGE_BOX_WXINFO
,
458 DIALOGS_SINGLE_CHOICE
,
459 DIALOGS_MULTI_CHOICE
,
462 DIALOGS_PASSWORD_ENTRY
,
467 DIALOGS_FILE_OPEN_GENERIC
,
468 DIALOGS_FILES_OPEN_GENERIC
,
469 DIALOGS_FILE_SAVE_GENERIC
,
471 DIALOGS_DIRNEW_CHOOSE
,
472 DIALOGS_GENERIC_DIR_CHOOSE
,
478 DIALOGS_CENTRE_SCREEN
,
479 DIALOGS_CENTRE_PARENT
,
482 DIALOGS_MODELESS_BTN
,
484 DIALOGS_ABOUTDLG_SIMPLE
,
485 DIALOGS_ABOUTDLG_FANCY
,
486 DIALOGS_ABOUTDLG_FULL
,
487 DIALOGS_ABOUTDLG_CUSTOM
,
495 DIALOGS_PROPERTY_SHEET
,
496 DIALOGS_PROPERTY_SHEET_TOOLBOOK
,
497 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK
,
498 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG
,
499 DIALOGS_TEST_DEFAULT_ACTION