Merge in from trunk r67662 to r64801
[wxWidgets.git] / samples / dialogs / dialogs.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: dialogs.h
3 // Purpose: Common dialogs demo
4 // Author: Julian Smart, Vadim Zeitlin, ABX
5 // Created: 04/01/98
6 // RCS-ID: $Id$
7 // Copyright: (c) Julian Smart
8 // (c) 2004 ABX
9 // (c) Vadim Zeitlin
10 // Licence: wxWindows licence
11 /////////////////////////////////////////////////////////////////////////////
12
13 /*
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
20 of MSW, MAC and OS2
21 */
22
23 #ifndef __DIALOGSH__
24 #define __DIALOGSH__
25
26 #ifdef __WXUNIVERSAL__
27 #define USE_WXUNIVERSAL 1
28 #else
29 #define USE_WXUNIVERSAL 0
30 #endif
31
32 #ifdef WXUSINGDLL
33 #define USE_DLL 1
34 #else
35 #define USE_DLL 0
36 #endif
37
38 #if defined(__WXWINCE__)
39 #define USE_WXWINCE 1
40 #else
41 #define USE_WXWINCE 0
42 #endif
43
44 #if defined(__WXMSW__) && !USE_WXWINCE
45 #define USE_WXMSW 1
46 #else
47 #define USE_WXMSW 0
48 #endif
49
50 #ifdef __WXMAC__
51 #define USE_WXMAC 1
52 #else
53 #define USE_WXMAC 0
54 #endif
55
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
58 #else
59 #define USE_WXMACFONTDLG 0
60 #endif
61
62 #ifdef __WXGTK__
63 #define USE_WXGTK 1
64 #else
65 #define USE_WXGTK 0
66 #endif
67
68 #ifdef __WXPM__
69 #define USE_WXPM 1
70 #else
71 #define USE_WXPM 0
72 #endif
73
74 #define USE_GENERIC_DIALOGS (!USE_WXUNIVERSAL && !USE_DLL)
75
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)
85
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
90 #else
91 #define USE_MODAL_PRESENTATION 1
92 #endif
93
94
95 // Turn USE_SETTINGS_DIALOG to 0 if supported
96 #if wxUSE_BOOKCTRL
97 #define USE_SETTINGS_DIALOG 1
98 #else
99 #define USE_SETTINGS_DIALOG 0
100 #endif
101
102 #if wxUSE_LOG
103
104 // Custom application traits class which we use to override the default log
105 // target creation
106 class MyAppTraits : public wxGUIAppTraits
107 {
108 public:
109 virtual wxLog *CreateLogTarget();
110 };
111
112 #endif // wxUSE_LOG
113
114 // Define a new application type
115 class MyApp: public wxApp
116 {
117 public:
118 MyApp() { m_startupProgressStyle = -1; }
119
120 virtual bool OnInit();
121
122 #if wxUSE_CMDLINE_PARSER
123 virtual void OnInitCmdLine(wxCmdLineParser& parser);
124 virtual bool OnCmdLineParsed(wxCmdLineParser& parser);
125 #endif // wxUSE_CMDLINE_PARSER
126
127 protected:
128 #if wxUSE_LOG
129 virtual wxAppTraits *CreateTraits() { return new MyAppTraits; }
130 #endif // wxUSE_LOG
131
132 private:
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;
138 };
139
140 #if USE_MODAL_PRESENTATION
141
142 // A custom modeless dialog
143 class MyModelessDialog : public wxDialog
144 {
145 public:
146 MyModelessDialog(wxWindow *parent);
147
148 void OnButton(wxCommandEvent& event);
149 void OnClose(wxCloseEvent& event);
150
151 private:
152 DECLARE_EVENT_TABLE()
153 };
154
155 // A custom modal dialog
156 class MyModalDialog : public wxDialog
157 {
158 public:
159 MyModalDialog(wxWindow *parent);
160
161 void OnButton(wxCommandEvent& event);
162
163 private:
164 wxButton *m_btnModal,
165 *m_btnModeless,
166 *m_btnDelete;
167
168 DECLARE_EVENT_TABLE()
169 };
170
171 #endif // USE_MODAL_PRESENTATION
172
173 // A class demonstrating CreateStdDialogButtonSizer()
174 class StdButtonSizerDialog : public wxDialog
175 {
176 public:
177 StdButtonSizerDialog(wxWindow *parent);
178
179 void OnEvent(wxCommandEvent& event);
180
181 private:
182 void EnableDisableControls();
183
184 wxCheckBox *m_chkboxAffirmativeButton;
185 wxRadioButton *m_radiobtnOk,
186 *m_radiobtnYes;
187
188 wxCheckBox *m_chkboxDismissButton;
189 wxRadioButton *m_radiobtnClose,
190 *m_radiobtnCancel;
191
192 wxCheckBox *m_chkboxApply,
193 *m_chkboxNo,
194 *m_chkboxHelp,
195 *m_chkboxNoDefault;
196
197 wxSizer *m_buttonsSizer;
198
199 DECLARE_EVENT_TABLE()
200 };
201
202 // Test harness for wxMessageDialog.
203 class TestMessageBoxDialog : public wxDialog
204 {
205 public:
206 TestMessageBoxDialog(wxWindow *parent);
207
208 bool Create();
209
210 protected:
211 wxString GetMessage() { return m_textMsg->GetValue(); }
212 long GetStyle();
213
214 void PrepareMessageDialog(wxMessageDialogBase &dlg);
215
216 virtual void AddAdditionalTextOptions(wxSizer *WXUNUSED(sizer)) { }
217 virtual void AddAdditionalFlags(wxSizer *WXUNUSED(sizer)) { }
218
219 void OnApply(wxCommandEvent& event);
220 void OnClose(wxCommandEvent& event);
221 void OnUpdateLabelUI(wxUpdateUIEvent& event);
222 void OnUpdateNoDefaultUI(wxUpdateUIEvent& event);
223
224 private:
225 enum
226 {
227 Btn_Yes,
228 Btn_No,
229 Btn_Ok,
230 Btn_Cancel,
231 Btn_Max
232 };
233
234 struct BtnInfo
235 {
236 int flag;
237 const char *name;
238 };
239
240 static const BtnInfo ms_btnInfo[Btn_Max];
241
242 enum
243 {
244 MsgDlgIcon_No,
245 MsgDlgIcon_None,
246 MsgDlgIcon_Info,
247 MsgDlgIcon_Question,
248 MsgDlgIcon_Warning,
249 MsgDlgIcon_Error,
250 MsgDlgIcon_Max
251 };
252
253 wxTextCtrl *m_textMsg,
254 *m_textExtMsg;
255
256 wxCheckBox *m_buttons[Btn_Max];
257 wxTextCtrl *m_labels[Btn_Max];
258
259 wxRadioBox *m_icons;
260
261 wxCheckBox *m_chkNoDefault,
262 *m_chkCentre;
263
264 DECLARE_EVENT_TABLE()
265 wxDECLARE_NO_COPY_CLASS(TestMessageBoxDialog);
266 };
267
268 #if wxUSE_RICHMSGDLG
269 class TestRichMessageDialog : public TestMessageBoxDialog
270 {
271 public:
272 TestRichMessageDialog(wxWindow *parent);
273
274 protected:
275 // overrides method in base class
276 virtual void AddAdditionalTextOptions(wxSizer *sizer);
277 virtual void AddAdditionalFlags(wxSizer *sizer);
278
279 void OnApply(wxCommandEvent& event);
280
281 private:
282 wxTextCtrl *m_textCheckBox;
283 wxCheckBox *m_initialValueCheckBox;
284 wxTextCtrl *m_textDetailed;
285
286 DECLARE_EVENT_TABLE()
287 };
288 #endif // wxUSE_RICHMSGDLG
289
290 class TestDefaultActionDialog: public wxDialog
291 {
292 public:
293 TestDefaultActionDialog( wxWindow *parent );
294
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);
300
301 private:
302 bool m_catchListBoxDClick;
303
304 private:
305 DECLARE_EVENT_TABLE()
306 };
307
308
309 #if USE_SETTINGS_DIALOG
310 // Property sheet dialog
311 class SettingsDialog: public wxPropertySheetDialog
312 {
313 DECLARE_CLASS(SettingsDialog)
314 public:
315 SettingsDialog(wxWindow* parent, int dialogType);
316 ~SettingsDialog();
317
318 wxPanel* CreateGeneralSettingsPage(wxWindow* parent);
319 wxPanel* CreateAestheticSettingsPage(wxWindow* parent);
320
321 protected:
322
323 enum {
324 ID_SHOW_TOOLTIPS = 100,
325 ID_AUTO_SAVE,
326 ID_AUTO_SAVE_MINS,
327 ID_LOAD_LAST_PROJECT,
328
329 ID_APPLY_SETTINGS_TO,
330 ID_BACKGROUND_STYLE,
331 ID_FONT_SIZE
332 };
333
334 wxImageList* m_imageList;
335
336 DECLARE_EVENT_TABLE()
337 };
338
339 #endif // USE_SETTINGS_DIALOG
340
341 // Define a new frame type
342 class MyFrame: public wxFrame
343 {
344 public:
345 MyFrame(const wxString& title);
346 virtual ~MyFrame();
347
348 #if wxUSE_MSGDLG
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
355 #if wxUSE_RICHMSGDLG
356 void RichMessageDialog(wxCommandEvent& event);
357 #endif // wxUSE_RICHMSGDLG
358
359 #if wxUSE_COLOURDLG
360 void ChooseColour(wxCommandEvent& event);
361 void GetColour(wxCommandEvent& event);
362 #endif // wxUSE_COLOURDLG
363
364 #if wxUSE_FONTDLG
365 void ChooseFont(wxCommandEvent& event);
366 #endif // wxUSE_FONTDLG
367
368 #if wxUSE_LOG_DIALOG
369 void LogDialog(wxCommandEvent& event);
370 #endif // wxUSE_LOG_DIALOG
371
372 #if wxUSE_INFOBAR
373 void InfoBarSimple(wxCommandEvent& event);
374 void InfoBarAdvanced(wxCommandEvent& event);
375 #endif // wxUSE_INFOBAR
376
377 #if wxUSE_CHOICEDLG
378 void SingleChoice(wxCommandEvent& event);
379 void MultiChoice(wxCommandEvent& event);
380 #endif // wxUSE_CHOICEDLG
381
382 void Rearrange(wxCommandEvent& event);
383
384 #if wxUSE_TEXTDLG
385 void LineEntry(wxCommandEvent& event);
386 void TextEntry(wxCommandEvent& event);
387 void PasswordEntry(wxCommandEvent& event);
388 #endif // wxUSE_TEXTDLG
389
390 #if wxUSE_NUMBERDLG
391 void NumericEntry(wxCommandEvent& event);
392 #endif // wxUSE_NUMBERDLG
393
394 #if wxUSE_FILEDLG
395 void FileOpen(wxCommandEvent& event);
396 void FileOpen2(wxCommandEvent& event);
397 void FilesOpen(wxCommandEvent& event);
398 void FileSave(wxCommandEvent& event);
399 #endif // wxUSE_FILEDLG
400
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
406
407 #if wxUSE_DIRDLG
408 void DirChoose(wxCommandEvent& event);
409 void DirChooseNew(wxCommandEvent& event);
410 #endif // wxUSE_DIRDLG
411
412 #if USE_DIRDLG_GENERIC
413 void GenericDirChoose(wxCommandEvent& event);
414 #endif // USE_DIRDLG_GENERIC
415
416 #if wxUSE_STARTUP_TIPS
417 void ShowTip(wxCommandEvent& event);
418 #endif // wxUSE_STARTUP_TIPS
419
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);
428
429 #if wxUSE_PROGRESSDLG
430 void ShowProgress(wxCommandEvent& event);
431 #endif // wxUSE_PROGRESSDLG
432
433 #if wxUSE_ABOUTDLG
434 void ShowSimpleAboutDialog(wxCommandEvent& event);
435 void ShowFancyAboutDialog(wxCommandEvent& event);
436 void ShowFullAboutDialog(wxCommandEvent& event);
437 void ShowCustomAboutDialog(wxCommandEvent& event);
438 #endif // wxUSE_ABOUTDLG
439
440 #if wxUSE_BUSYINFO
441 void ShowBusyInfo(wxCommandEvent& event);
442 #endif // wxUSE_BUSYINFO
443
444 #if wxUSE_FINDREPLDLG
445 void ShowFindDialog(wxCommandEvent& event);
446 void ShowReplaceDialog(wxCommandEvent& event);
447 void OnFindDialog(wxFindDialogEvent& event);
448 #endif // wxUSE_FINDREPLDLG
449
450 #if USE_COLOURDLG_GENERIC
451 void ChooseColourGeneric(wxCommandEvent& event);
452 #endif // USE_COLOURDLG_GENERIC
453
454 #if USE_FONTDLG_GENERIC
455 void ChooseFontGeneric(wxCommandEvent& event);
456 #endif // USE_FONTDLG_GENERIC
457
458 void OnPropertySheet(wxCommandEvent& event);
459
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
466
467 void OnStandardButtonsSizerDialog(wxCommandEvent& event);
468
469 void OnTestDefaultActionDialog(wxCommandEvent& event);
470
471 void OnExit(wxCommandEvent& event);
472
473 private:
474 #if wxUSE_DIRDLG
475 void DoDirChoose(int style);
476 #endif // wxUSE_DIRDLG
477
478 #if USE_MODAL_PRESENTATION
479 MyModelessDialog *m_dialog;
480 #endif // USE_MODAL_PRESENTATION
481
482 #if wxUSE_FINDREPLDLG
483 wxFindReplaceData m_findData;
484
485 wxFindReplaceDialog *m_dlgFind,
486 *m_dlgReplace;
487 #endif // wxUSE_FINDREPLDLG
488
489 #if wxUSE_NOTIFICATION_MESSAGE
490 wxNotificationMessage *m_notifMsg;
491 #endif // wxUSE_NOTIFICATION_MESSAGE
492
493 wxColourData m_clrData;
494
495 // just a window which we use to show the effect of font/colours selection
496 wxWindow *m_canvas;
497
498 #if wxUSE_INFOBAR
499 void OnInfoBarRedo(wxCommandEvent& event);
500
501 wxInfoBar *m_infoBarSimple,
502 *m_infoBarAdvanced;
503 #endif // wxUSE_INFOBAR
504
505 DECLARE_EVENT_TABLE()
506 };
507
508 class MyCanvas: public wxScrolledWindow
509 {
510 public:
511 MyCanvas(wxWindow *parent) : wxScrolledWindow(parent, wxID_ANY)
512 {
513 SetForegroundColour(*wxBLACK);
514 SetBackgroundColour(*wxWHITE);
515 SetFont(*wxNORMAL_FONT);
516 }
517
518 private:
519 void OnPaint(wxPaintEvent& event);
520
521 DECLARE_EVENT_TABLE()
522 };
523
524
525 // Menu IDs
526 enum
527 {
528 DIALOGS_CHOOSE_COLOUR = wxID_HIGHEST,
529 DIALOGS_GET_COLOUR,
530 DIALOGS_CHOOSE_COLOUR_GENERIC,
531 DIALOGS_CHOOSE_FONT,
532 DIALOGS_CHOOSE_FONT_GENERIC,
533 DIALOGS_MESSAGE_BOX,
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,
540 DIALOGS_REARRANGE,
541 DIALOGS_LINE_ENTRY,
542 DIALOGS_TEXT_ENTRY,
543 DIALOGS_PASSWORD_ENTRY,
544 DIALOGS_FILE_OPEN,
545 DIALOGS_FILE_OPEN2,
546 DIALOGS_FILES_OPEN,
547 DIALOGS_FILE_SAVE,
548 DIALOGS_FILE_OPEN_GENERIC,
549 DIALOGS_FILES_OPEN_GENERIC,
550 DIALOGS_FILE_SAVE_GENERIC,
551 DIALOGS_DIR_CHOOSE,
552 DIALOGS_DIRNEW_CHOOSE,
553 DIALOGS_GENERIC_DIR_CHOOSE,
554 DIALOGS_TIP,
555 DIALOGS_NUM_ENTRY,
556 DIALOGS_LOG_DIALOG,
557 DIALOGS_INFOBAR_SIMPLE,
558 DIALOGS_INFOBAR_ADVANCED,
559 DIALOGS_MODAL,
560 DIALOGS_MODELESS,
561 DIALOGS_CENTRE_SCREEN,
562 DIALOGS_CENTRE_PARENT,
563 DIALOGS_MINIFRAME,
564 DIALOGS_ONTOP,
565 DIALOGS_MODELESS_BTN,
566 DIALOGS_PROGRESS,
567 DIALOGS_ABOUTDLG_SIMPLE,
568 DIALOGS_ABOUTDLG_FANCY,
569 DIALOGS_ABOUTDLG_FULL,
570 DIALOGS_ABOUTDLG_CUSTOM,
571 DIALOGS_BUSYINFO,
572 DIALOGS_FIND,
573 DIALOGS_REPLACE,
574 DIALOGS_REQUEST,
575 DIALOGS_NOTIFY_AUTO,
576 DIALOGS_NOTIFY_SHOW,
577 DIALOGS_NOTIFY_HIDE,
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
583 };
584
585 #endif
586