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 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
);
197 wxString
GetMessage() { return m_textMsg
->GetValue(); }
200 void PrepareMessageDialog(wxMessageDialogBase
&dlg
);
202 virtual void AddAdditionalTextOptions(wxSizer
*WXUNUSED(sizer
)) { }
203 virtual void AddAdditionalFlags(wxSizer
*WXUNUSED(sizer
)) { }
205 void OnApply(wxCommandEvent
& event
);
206 void OnClose(wxCommandEvent
& event
);
207 void OnUpdateLabelUI(wxUpdateUIEvent
& event
);
208 void OnUpdateNoDefaultUI(wxUpdateUIEvent
& event
);
226 static const BtnInfo ms_btnInfo
[Btn_Max
];
239 wxTextCtrl
*m_textMsg
,
242 wxCheckBox
*m_buttons
[Btn_Max
];
243 wxTextCtrl
*m_labels
[Btn_Max
];
247 wxCheckBox
*m_chkNoDefault
,
250 DECLARE_EVENT_TABLE()
251 wxDECLARE_NO_COPY_CLASS(TestMessageBoxDialog
);
255 class TestRichMessageDialog
: public TestMessageBoxDialog
258 TestRichMessageDialog(wxWindow
*parent
);
261 // overrides method in base class
262 virtual void AddAdditionalTextOptions(wxSizer
*sizer
);
263 virtual void AddAdditionalFlags(wxSizer
*sizer
);
265 void OnApply(wxCommandEvent
& event
);
268 wxTextCtrl
*m_textCheckBox
;
269 wxCheckBox
*m_initialValueCheckBox
;
270 wxTextCtrl
*m_textDetailed
;
272 DECLARE_EVENT_TABLE()
274 #endif // wxUSE_RICHMSGDLG
276 class TestDefaultActionDialog
: public wxDialog
279 TestDefaultActionDialog( wxWindow
*parent
);
281 void OnListBoxDClick(wxCommandEvent
& event
);
282 void OnCatchListBoxDClick(wxCommandEvent
& event
);
285 bool m_catchListBoxDClick
;
288 DECLARE_EVENT_TABLE()
292 #if USE_SETTINGS_DIALOG
293 // Property sheet dialog
294 class SettingsDialog
: public wxPropertySheetDialog
296 DECLARE_CLASS(SettingsDialog
)
298 SettingsDialog(wxWindow
* parent
, int dialogType
);
301 wxPanel
* CreateGeneralSettingsPage(wxWindow
* parent
);
302 wxPanel
* CreateAestheticSettingsPage(wxWindow
* parent
);
307 ID_SHOW_TOOLTIPS
= 100,
310 ID_LOAD_LAST_PROJECT
,
312 ID_APPLY_SETTINGS_TO
,
317 wxImageList
* m_imageList
;
319 DECLARE_EVENT_TABLE()
322 #endif // USE_SETTINGS_DIALOG
324 // Define a new frame type
325 class MyFrame
: public wxFrame
328 MyFrame(const wxString
& title
);
332 void MessageBox(wxCommandEvent
& event
);
333 void MessageBoxDialog(wxCommandEvent
& event
);
334 void MessageBoxInfo(wxCommandEvent
& event
);
335 void MessageBoxWindowModal(wxCommandEvent
& event
);
336 void MessageBoxWindowModalClosed(wxWindowModalDialogEvent
& event
);
337 #endif // wxUSE_MSGDLG
339 void RichMessageDialog(wxCommandEvent
& event
);
340 #endif // wxUSE_RICHMSGDLG
343 void ChooseColour(wxCommandEvent
& event
);
344 void GetColour(wxCommandEvent
& event
);
345 #endif // wxUSE_COLOURDLG
348 void ChooseFont(wxCommandEvent
& event
);
349 #endif // wxUSE_FONTDLG
352 void LogDialog(wxCommandEvent
& event
);
353 #endif // wxUSE_LOG_DIALOG
356 void InfoBarSimple(wxCommandEvent
& event
);
357 void InfoBarAdvanced(wxCommandEvent
& event
);
358 #endif // wxUSE_INFOBAR
361 void SingleChoice(wxCommandEvent
& event
);
362 void MultiChoice(wxCommandEvent
& event
);
363 #endif // wxUSE_CHOICEDLG
365 void Rearrange(wxCommandEvent
& event
);
368 void TextEntry(wxCommandEvent
& event
);
369 void PasswordEntry(wxCommandEvent
& event
);
370 #endif // wxUSE_TEXTDLG
373 void NumericEntry(wxCommandEvent
& event
);
374 #endif // wxUSE_NUMBERDLG
377 void FileOpen(wxCommandEvent
& event
);
378 void FileOpen2(wxCommandEvent
& event
);
379 void FilesOpen(wxCommandEvent
& event
);
380 void FileSave(wxCommandEvent
& event
);
381 #endif // wxUSE_FILEDLG
383 #if USE_FILEDLG_GENERIC
384 void FileOpenGeneric(wxCommandEvent
& event
);
385 void FilesOpenGeneric(wxCommandEvent
& event
);
386 void FileSaveGeneric(wxCommandEvent
& event
);
387 #endif // USE_FILEDLG_GENERIC
390 void DirChoose(wxCommandEvent
& event
);
391 void DirChooseNew(wxCommandEvent
& event
);
392 #endif // wxUSE_DIRDLG
394 #if USE_DIRDLG_GENERIC
395 void GenericDirChoose(wxCommandEvent
& event
);
396 #endif // USE_DIRDLG_GENERIC
398 #if wxUSE_STARTUP_TIPS
399 void ShowTip(wxCommandEvent
& event
);
400 #endif // wxUSE_STARTUP_TIPS
402 #if USE_MODAL_PRESENTATION
403 void ModalDlg(wxCommandEvent
& event
);
404 #endif // USE_MODAL_PRESENTATION
405 void ModelessDlg(wxCommandEvent
& event
);
406 void DlgCenteredScreen(wxCommandEvent
& event
);
407 void DlgCenteredParent(wxCommandEvent
& event
);
408 void MiniFrame(wxCommandEvent
& event
);
409 void DlgOnTop(wxCommandEvent
& event
);
411 #if wxUSE_PROGRESSDLG
412 void ShowProgress(wxCommandEvent
& event
);
413 #endif // wxUSE_PROGRESSDLG
416 void ShowSimpleAboutDialog(wxCommandEvent
& event
);
417 void ShowFancyAboutDialog(wxCommandEvent
& event
);
418 void ShowFullAboutDialog(wxCommandEvent
& event
);
419 void ShowCustomAboutDialog(wxCommandEvent
& event
);
420 #endif // wxUSE_ABOUTDLG
423 void ShowBusyInfo(wxCommandEvent
& event
);
424 #endif // wxUSE_BUSYINFO
426 #if wxUSE_FINDREPLDLG
427 void ShowFindDialog(wxCommandEvent
& event
);
428 void ShowReplaceDialog(wxCommandEvent
& event
);
429 void OnFindDialog(wxFindDialogEvent
& event
);
430 #endif // wxUSE_FINDREPLDLG
432 #if USE_COLOURDLG_GENERIC
433 void ChooseColourGeneric(wxCommandEvent
& event
);
434 #endif // USE_COLOURDLG_GENERIC
436 #if USE_FONTDLG_GENERIC
437 void ChooseFontGeneric(wxCommandEvent
& event
);
438 #endif // USE_FONTDLG_GENERIC
440 void OnPropertySheet(wxCommandEvent
& event
);
442 void OnRequestUserAttention(wxCommandEvent
& event
);
443 #if wxUSE_NOTIFICATION_MESSAGE
444 void OnNotifMsgAuto(wxCommandEvent
& event
);
445 void OnNotifMsgShow(wxCommandEvent
& event
);
446 void OnNotifMsgHide(wxCommandEvent
& event
);
447 #endif // wxUSE_NOTIFICATION_MESSAGE
449 void OnStandardButtonsSizerDialog(wxCommandEvent
& event
);
451 void OnTestDefaultActionDialog(wxCommandEvent
& event
);
453 void OnExit(wxCommandEvent
& event
);
457 void DoDirChoose(int style
);
458 #endif // wxUSE_DIRDLG
460 #if USE_MODAL_PRESENTATION
461 MyModelessDialog
*m_dialog
;
462 #endif // USE_MODAL_PRESENTATION
464 #if wxUSE_FINDREPLDLG
465 wxFindReplaceData m_findData
;
467 wxFindReplaceDialog
*m_dlgFind
,
469 #endif // wxUSE_FINDREPLDLG
471 #if wxUSE_NOTIFICATION_MESSAGE
472 wxNotificationMessage
*m_notifMsg
;
473 #endif // wxUSE_NOTIFICATION_MESSAGE
475 wxColourData m_clrData
;
477 // just a window which we use to show the effect of font/colours selection
481 void OnInfoBarRedo(wxCommandEvent
& event
);
483 wxInfoBar
*m_infoBarSimple
,
485 #endif // wxUSE_INFOBAR
487 DECLARE_EVENT_TABLE()
490 class MyCanvas
: public wxScrolledWindow
493 MyCanvas(wxWindow
*parent
) : wxScrolledWindow(parent
, wxID_ANY
)
495 SetForegroundColour(*wxBLACK
);
496 SetBackgroundColour(*wxWHITE
);
497 SetFont(*wxNORMAL_FONT
);
501 void OnPaint(wxPaintEvent
& event
);
503 DECLARE_EVENT_TABLE()
510 DIALOGS_CHOOSE_COLOUR
= wxID_HIGHEST
,
512 DIALOGS_CHOOSE_COLOUR_GENERIC
,
514 DIALOGS_CHOOSE_FONT_GENERIC
,
516 DIALOGS_MESSAGE_BOX_WINDOW_MODAL
,
517 DIALOGS_MESSAGE_DIALOG
,
518 DIALOGS_MESSAGE_BOX_WXINFO
,
519 DIALOGS_RICH_MESSAGE_DIALOG
,
520 DIALOGS_SINGLE_CHOICE
,
521 DIALOGS_MULTI_CHOICE
,
524 DIALOGS_PASSWORD_ENTRY
,
529 DIALOGS_FILE_OPEN_GENERIC
,
530 DIALOGS_FILES_OPEN_GENERIC
,
531 DIALOGS_FILE_SAVE_GENERIC
,
533 DIALOGS_DIRNEW_CHOOSE
,
534 DIALOGS_GENERIC_DIR_CHOOSE
,
538 DIALOGS_INFOBAR_SIMPLE
,
539 DIALOGS_INFOBAR_ADVANCED
,
542 DIALOGS_CENTRE_SCREEN
,
543 DIALOGS_CENTRE_PARENT
,
546 DIALOGS_MODELESS_BTN
,
548 DIALOGS_ABOUTDLG_SIMPLE
,
549 DIALOGS_ABOUTDLG_FANCY
,
550 DIALOGS_ABOUTDLG_FULL
,
551 DIALOGS_ABOUTDLG_CUSTOM
,
559 DIALOGS_PROPERTY_SHEET
,
560 DIALOGS_PROPERTY_SHEET_TOOLBOOK
,
561 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK
,
562 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG
,
563 DIALOGS_TEST_DEFAULT_ACTION