Add a "not specified" icon style to the message box test dialog.
[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 license
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 virtual bool OnInit();
119
120 protected:
121 #if wxUSE_LOG
122 virtual wxAppTraits *CreateTraits() { return new MyAppTraits; }
123 #endif // wxUSE_LOG
124 };
125
126 #if USE_MODAL_PRESENTATION
127
128 // A custom modeless dialog
129 class MyModelessDialog : public wxDialog
130 {
131 public:
132 MyModelessDialog(wxWindow *parent);
133
134 void OnButton(wxCommandEvent& event);
135 void OnClose(wxCloseEvent& event);
136
137 private:
138 DECLARE_EVENT_TABLE()
139 };
140
141 // A custom modal dialog
142 class MyModalDialog : public wxDialog
143 {
144 public:
145 MyModalDialog(wxWindow *parent);
146
147 void OnButton(wxCommandEvent& event);
148
149 private:
150 wxButton *m_btnModal,
151 *m_btnModeless,
152 *m_btnDelete;
153
154 DECLARE_EVENT_TABLE()
155 };
156
157 #endif // USE_MODAL_PRESENTATION
158
159 // A class demonstrating CreateStdDialogButtonSizer()
160 class StdButtonSizerDialog : public wxDialog
161 {
162 public:
163 StdButtonSizerDialog(wxWindow *parent);
164
165 void OnEvent(wxCommandEvent& event);
166
167 private:
168 void EnableDisableControls();
169
170 wxCheckBox *m_chkboxAffirmativeButton;
171 wxRadioButton *m_radiobtnOk,
172 *m_radiobtnYes;
173
174 wxCheckBox *m_chkboxDismissButton;
175 wxRadioButton *m_radiobtnClose,
176 *m_radiobtnCancel;
177
178 wxCheckBox *m_chkboxApply,
179 *m_chkboxNo,
180 *m_chkboxHelp,
181 *m_chkboxNoDefault;
182
183 wxSizer *m_buttonsSizer;
184
185 DECLARE_EVENT_TABLE()
186 };
187
188 // Test harness for wxMessageDialog.
189 class TestMessageBoxDialog : public wxDialog
190 {
191 public:
192 TestMessageBoxDialog(wxWindow *parent);
193
194 private:
195 void OnApply(wxCommandEvent& event);
196 void OnClose(wxCommandEvent& event);
197 void OnUpdateLabelUI(wxUpdateUIEvent& event);
198 void OnUpdateNoDefaultUI(wxUpdateUIEvent& event);
199
200 enum
201 {
202 Btn_Yes,
203 Btn_No,
204 Btn_Ok,
205 Btn_Cancel,
206 Btn_Max
207 };
208
209 struct BtnInfo
210 {
211 int flag;
212 const char *name;
213 };
214
215 static const BtnInfo ms_btnInfo[Btn_Max];
216
217 enum
218 {
219 MsgDlgIcon_No,
220 MsgDlgIcon_None,
221 MsgDlgIcon_Info,
222 MsgDlgIcon_Question,
223 MsgDlgIcon_Warning,
224 MsgDlgIcon_Error,
225 MsgDlgIcon_Max
226 };
227
228 wxTextCtrl *m_textMsg,
229 *m_textExtMsg;
230
231 wxCheckBox *m_buttons[Btn_Max];
232 wxTextCtrl *m_labels[Btn_Max];
233
234 wxRadioBox *m_icons;
235
236 wxCheckBox *m_chkNoDefault,
237 *m_chkCentre;
238
239 DECLARE_EVENT_TABLE()
240 wxDECLARE_NO_COPY_CLASS(TestMessageBoxDialog);
241 };
242
243 class TestDefaultActionDialog: public wxDialog
244 {
245 public:
246 TestDefaultActionDialog( wxWindow *parent );
247
248 void OnListBoxDClick(wxCommandEvent& event);
249 void OnCatchListBoxDClick(wxCommandEvent& event);
250
251 private:
252 bool m_catchListBoxDClick;
253
254 private:
255 DECLARE_EVENT_TABLE()
256 };
257
258
259 #if USE_SETTINGS_DIALOG
260 // Property sheet dialog
261 class SettingsDialog: public wxPropertySheetDialog
262 {
263 DECLARE_CLASS(SettingsDialog)
264 public:
265 SettingsDialog(wxWindow* parent, int dialogType);
266 ~SettingsDialog();
267
268 wxPanel* CreateGeneralSettingsPage(wxWindow* parent);
269 wxPanel* CreateAestheticSettingsPage(wxWindow* parent);
270
271 protected:
272
273 enum {
274 ID_SHOW_TOOLTIPS = 100,
275 ID_AUTO_SAVE,
276 ID_AUTO_SAVE_MINS,
277 ID_LOAD_LAST_PROJECT,
278
279 ID_APPLY_SETTINGS_TO,
280 ID_BACKGROUND_STYLE,
281 ID_FONT_SIZE
282 };
283
284 wxImageList* m_imageList;
285
286 DECLARE_EVENT_TABLE()
287 };
288
289 #endif // USE_SETTINGS_DIALOG
290
291 // Define a new frame type
292 class MyFrame: public wxFrame
293 {
294 public:
295 MyFrame(const wxString& title);
296 virtual ~MyFrame();
297
298 #if wxUSE_MSGDLG
299 void MessageBox(wxCommandEvent& event);
300 void MessageBoxDialog(wxCommandEvent& event);
301 void MessageBoxInfo(wxCommandEvent& event);
302 void MessageBoxWindowModal(wxCommandEvent& event);
303 void MessageBoxWindowModalClosed(wxWindowModalDialogEvent& event);
304 #endif // wxUSE_MSGDLG
305
306 #if wxUSE_COLOURDLG
307 void ChooseColour(wxCommandEvent& event);
308 void GetColour(wxCommandEvent& event);
309 #endif // wxUSE_COLOURDLG
310
311 #if wxUSE_FONTDLG
312 void ChooseFont(wxCommandEvent& event);
313 #endif // wxUSE_FONTDLG
314
315 #if wxUSE_LOG_DIALOG
316 void LogDialog(wxCommandEvent& event);
317 #endif // wxUSE_LOG_DIALOG
318
319 #if wxUSE_INFOBAR
320 void InfoBarSimple(wxCommandEvent& event);
321 void InfoBarAdvanced(wxCommandEvent& event);
322 #endif // wxUSE_INFOBAR
323
324 #if wxUSE_CHOICEDLG
325 void SingleChoice(wxCommandEvent& event);
326 void MultiChoice(wxCommandEvent& event);
327 #endif // wxUSE_CHOICEDLG
328
329 void Rearrange(wxCommandEvent& event);
330
331 #if wxUSE_TEXTDLG
332 void TextEntry(wxCommandEvent& event);
333 void PasswordEntry(wxCommandEvent& event);
334 #endif // wxUSE_TEXTDLG
335
336 #if wxUSE_NUMBERDLG
337 void NumericEntry(wxCommandEvent& event);
338 #endif // wxUSE_NUMBERDLG
339
340 #if wxUSE_FILEDLG
341 void FileOpen(wxCommandEvent& event);
342 void FileOpen2(wxCommandEvent& event);
343 void FilesOpen(wxCommandEvent& event);
344 void FileSave(wxCommandEvent& event);
345 #endif // wxUSE_FILEDLG
346
347 #if USE_FILEDLG_GENERIC
348 void FileOpenGeneric(wxCommandEvent& event);
349 void FilesOpenGeneric(wxCommandEvent& event);
350 void FileSaveGeneric(wxCommandEvent& event);
351 #endif // USE_FILEDLG_GENERIC
352
353 #if wxUSE_DIRDLG
354 void DirChoose(wxCommandEvent& event);
355 void DirChooseNew(wxCommandEvent& event);
356 #endif // wxUSE_DIRDLG
357
358 #if USE_DIRDLG_GENERIC
359 void GenericDirChoose(wxCommandEvent& event);
360 #endif // USE_DIRDLG_GENERIC
361
362 #if wxUSE_STARTUP_TIPS
363 void ShowTip(wxCommandEvent& event);
364 #endif // wxUSE_STARTUP_TIPS
365
366 #if USE_MODAL_PRESENTATION
367 void ModalDlg(wxCommandEvent& event);
368 #endif // USE_MODAL_PRESENTATION
369 void ModelessDlg(wxCommandEvent& event);
370 void DlgCenteredScreen(wxCommandEvent& event);
371 void DlgCenteredParent(wxCommandEvent& event);
372 void MiniFrame(wxCommandEvent& event);
373 void DlgOnTop(wxCommandEvent& event);
374
375 #if wxUSE_PROGRESSDLG
376 void ShowProgress(wxCommandEvent& event);
377 #endif // wxUSE_PROGRESSDLG
378
379 #if wxUSE_ABOUTDLG
380 void ShowSimpleAboutDialog(wxCommandEvent& event);
381 void ShowFancyAboutDialog(wxCommandEvent& event);
382 void ShowFullAboutDialog(wxCommandEvent& event);
383 void ShowCustomAboutDialog(wxCommandEvent& event);
384 #endif // wxUSE_ABOUTDLG
385
386 #if wxUSE_BUSYINFO
387 void ShowBusyInfo(wxCommandEvent& event);
388 #endif // wxUSE_BUSYINFO
389
390 #if wxUSE_FINDREPLDLG
391 void ShowFindDialog(wxCommandEvent& event);
392 void ShowReplaceDialog(wxCommandEvent& event);
393 void OnFindDialog(wxFindDialogEvent& event);
394 #endif // wxUSE_FINDREPLDLG
395
396 #if USE_COLOURDLG_GENERIC
397 void ChooseColourGeneric(wxCommandEvent& event);
398 #endif // USE_COLOURDLG_GENERIC
399
400 #if USE_FONTDLG_GENERIC
401 void ChooseFontGeneric(wxCommandEvent& event);
402 #endif // USE_FONTDLG_GENERIC
403
404 void OnPropertySheet(wxCommandEvent& event);
405
406 void OnRequestUserAttention(wxCommandEvent& event);
407 #if wxUSE_NOTIFICATION_MESSAGE
408 void OnNotifMsgAuto(wxCommandEvent& event);
409 void OnNotifMsgShow(wxCommandEvent& event);
410 void OnNotifMsgHide(wxCommandEvent& event);
411 #endif // wxUSE_NOTIFICATION_MESSAGE
412
413 void OnStandardButtonsSizerDialog(wxCommandEvent& event);
414
415 void OnTestDefaultActionDialog(wxCommandEvent& event);
416
417 void OnExit(wxCommandEvent& event);
418
419 private:
420 #if wxUSE_DIRDLG
421 void DoDirChoose(int style);
422 #endif // wxUSE_DIRDLG
423
424 #if USE_MODAL_PRESENTATION
425 MyModelessDialog *m_dialog;
426 #endif // USE_MODAL_PRESENTATION
427
428 #if wxUSE_FINDREPLDLG
429 wxFindReplaceData m_findData;
430
431 wxFindReplaceDialog *m_dlgFind,
432 *m_dlgReplace;
433 #endif // wxUSE_FINDREPLDLG
434
435 #if wxUSE_NOTIFICATION_MESSAGE
436 wxNotificationMessage *m_notifMsg;
437 #endif // wxUSE_NOTIFICATION_MESSAGE
438
439 wxColourData m_clrData;
440
441 // just a window which we use to show the effect of font/colours selection
442 wxWindow *m_canvas;
443
444 #if wxUSE_INFOBAR
445 void OnInfoBarRedo(wxCommandEvent& event);
446
447 wxInfoBar *m_infoBarSimple,
448 *m_infoBarAdvanced;
449 #endif // wxUSE_INFOBAR
450
451 DECLARE_EVENT_TABLE()
452 };
453
454 class MyCanvas: public wxScrolledWindow
455 {
456 public:
457 MyCanvas(wxWindow *parent) : wxScrolledWindow(parent, wxID_ANY)
458 {
459 SetForegroundColour(*wxBLACK);
460 SetBackgroundColour(*wxWHITE);
461 SetFont(*wxNORMAL_FONT);
462 }
463
464 private:
465 void OnPaint(wxPaintEvent& event);
466
467 DECLARE_EVENT_TABLE()
468 };
469
470
471 // Menu IDs
472 enum
473 {
474 DIALOGS_CHOOSE_COLOUR = wxID_HIGHEST,
475 DIALOGS_GET_COLOUR,
476 DIALOGS_CHOOSE_COLOUR_GENERIC,
477 DIALOGS_CHOOSE_FONT,
478 DIALOGS_CHOOSE_FONT_GENERIC,
479 DIALOGS_MESSAGE_BOX,
480 DIALOGS_MESSAGE_BOX_WINDOW_MODAL,
481 DIALOGS_MESSAGE_DIALOG,
482 DIALOGS_MESSAGE_BOX_WXINFO,
483 DIALOGS_SINGLE_CHOICE,
484 DIALOGS_MULTI_CHOICE,
485 DIALOGS_REARRANGE,
486 DIALOGS_TEXT_ENTRY,
487 DIALOGS_PASSWORD_ENTRY,
488 DIALOGS_FILE_OPEN,
489 DIALOGS_FILE_OPEN2,
490 DIALOGS_FILES_OPEN,
491 DIALOGS_FILE_SAVE,
492 DIALOGS_FILE_OPEN_GENERIC,
493 DIALOGS_FILES_OPEN_GENERIC,
494 DIALOGS_FILE_SAVE_GENERIC,
495 DIALOGS_DIR_CHOOSE,
496 DIALOGS_DIRNEW_CHOOSE,
497 DIALOGS_GENERIC_DIR_CHOOSE,
498 DIALOGS_TIP,
499 DIALOGS_NUM_ENTRY,
500 DIALOGS_LOG_DIALOG,
501 DIALOGS_INFOBAR_SIMPLE,
502 DIALOGS_INFOBAR_ADVANCED,
503 DIALOGS_MODAL,
504 DIALOGS_MODELESS,
505 DIALOGS_CENTRE_SCREEN,
506 DIALOGS_CENTRE_PARENT,
507 DIALOGS_MINIFRAME,
508 DIALOGS_ONTOP,
509 DIALOGS_MODELESS_BTN,
510 DIALOGS_PROGRESS,
511 DIALOGS_ABOUTDLG_SIMPLE,
512 DIALOGS_ABOUTDLG_FANCY,
513 DIALOGS_ABOUTDLG_FULL,
514 DIALOGS_ABOUTDLG_CUSTOM,
515 DIALOGS_BUSYINFO,
516 DIALOGS_FIND,
517 DIALOGS_REPLACE,
518 DIALOGS_REQUEST,
519 DIALOGS_NOTIFY_AUTO,
520 DIALOGS_NOTIFY_SHOW,
521 DIALOGS_NOTIFY_HIDE,
522 DIALOGS_PROPERTY_SHEET,
523 DIALOGS_PROPERTY_SHEET_TOOLBOOK,
524 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK,
525 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG,
526 DIALOGS_TEST_DEFAULT_ACTION
527 };
528
529 #endif
530