]> git.saurik.com Git - wxWidgets.git/blob - samples/dialogs/dialogs.h
Add missing aui dependencies to the notebook sample.
[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_Help,
232 Btn_Max
233 };
234
235 struct BtnInfo
236 {
237 int flag;
238 const char *name;
239 };
240
241 static const BtnInfo ms_btnInfo[Btn_Max];
242
243 enum
244 {
245 MsgDlgIcon_No,
246 MsgDlgIcon_None,
247 MsgDlgIcon_Info,
248 MsgDlgIcon_Question,
249 MsgDlgIcon_Warning,
250 MsgDlgIcon_Error,
251 MsgDlgIcon_Max
252 };
253
254 wxTextCtrl *m_textMsg,
255 *m_textExtMsg;
256
257 wxCheckBox *m_buttons[Btn_Max];
258 wxTextCtrl *m_labels[Btn_Max];
259
260 wxRadioBox *m_icons;
261
262 wxCheckBox *m_chkNoDefault,
263 *m_chkCentre;
264
265 DECLARE_EVENT_TABLE()
266 wxDECLARE_NO_COPY_CLASS(TestMessageBoxDialog);
267 };
268
269 #if wxUSE_RICHMSGDLG
270 class TestRichMessageDialog : public TestMessageBoxDialog
271 {
272 public:
273 TestRichMessageDialog(wxWindow *parent);
274
275 protected:
276 // overrides method in base class
277 virtual void AddAdditionalTextOptions(wxSizer *sizer);
278 virtual void AddAdditionalFlags(wxSizer *sizer);
279
280 void OnApply(wxCommandEvent& event);
281
282 private:
283 wxTextCtrl *m_textCheckBox;
284 wxCheckBox *m_initialValueCheckBox;
285 wxTextCtrl *m_textDetailed;
286
287 DECLARE_EVENT_TABLE()
288 };
289 #endif // wxUSE_RICHMSGDLG
290
291 class TestDefaultActionDialog: public wxDialog
292 {
293 public:
294 TestDefaultActionDialog( wxWindow *parent );
295
296 void OnListBoxDClick(wxCommandEvent& event);
297 void OnDisableOK(wxCommandEvent& event);
298 void OnDisableCancel(wxCommandEvent& event);
299 void OnCatchListBoxDClick(wxCommandEvent& event);
300 void OnTextEnter(wxCommandEvent& event);
301
302 private:
303 bool m_catchListBoxDClick;
304
305 private:
306 DECLARE_EVENT_TABLE()
307 };
308
309
310 #if USE_SETTINGS_DIALOG
311 // Property sheet dialog
312 class SettingsDialog: public wxPropertySheetDialog
313 {
314 DECLARE_CLASS(SettingsDialog)
315 public:
316 SettingsDialog(wxWindow* parent, int dialogType);
317 ~SettingsDialog();
318
319 wxPanel* CreateGeneralSettingsPage(wxWindow* parent);
320 wxPanel* CreateAestheticSettingsPage(wxWindow* parent);
321
322 protected:
323
324 enum {
325 ID_SHOW_TOOLTIPS = 100,
326 ID_AUTO_SAVE,
327 ID_AUTO_SAVE_MINS,
328 ID_LOAD_LAST_PROJECT,
329
330 ID_APPLY_SETTINGS_TO,
331 ID_BACKGROUND_STYLE,
332 ID_FONT_SIZE
333 };
334
335 wxImageList* m_imageList;
336
337 DECLARE_EVENT_TABLE()
338 };
339
340 #endif // USE_SETTINGS_DIALOG
341
342 // Define a new frame type
343 class MyFrame: public wxFrame
344 {
345 public:
346 MyFrame(const wxString& title);
347 virtual ~MyFrame();
348
349 #if wxUSE_MSGDLG
350 void MessageBox(wxCommandEvent& event);
351 void MessageBoxDialog(wxCommandEvent& event);
352 void MessageBoxInfo(wxCommandEvent& event);
353 void MessageBoxWindowModal(wxCommandEvent& event);
354 void MessageBoxWindowModalClosed(wxWindowModalDialogEvent& event);
355 #endif // wxUSE_MSGDLG
356 #if wxUSE_RICHMSGDLG
357 void RichMessageDialog(wxCommandEvent& event);
358 #endif // wxUSE_RICHMSGDLG
359
360 #if wxUSE_COLOURDLG
361 void ChooseColour(wxCommandEvent& event);
362 void GetColour(wxCommandEvent& event);
363 #endif // wxUSE_COLOURDLG
364
365 #if wxUSE_FONTDLG
366 void ChooseFont(wxCommandEvent& event);
367 #endif // wxUSE_FONTDLG
368
369 #if wxUSE_LOG_DIALOG
370 void LogDialog(wxCommandEvent& event);
371 #endif // wxUSE_LOG_DIALOG
372
373 #if wxUSE_INFOBAR
374 void InfoBarSimple(wxCommandEvent& event);
375 void InfoBarAdvanced(wxCommandEvent& event);
376 #endif // wxUSE_INFOBAR
377
378 #if wxUSE_CHOICEDLG
379 void SingleChoice(wxCommandEvent& event);
380 void MultiChoice(wxCommandEvent& event);
381 #endif // wxUSE_CHOICEDLG
382
383 void Rearrange(wxCommandEvent& event);
384
385 #if wxUSE_TEXTDLG
386 void LineEntry(wxCommandEvent& event);
387 void TextEntry(wxCommandEvent& event);
388 void PasswordEntry(wxCommandEvent& event);
389 #endif // wxUSE_TEXTDLG
390
391 #if wxUSE_NUMBERDLG
392 void NumericEntry(wxCommandEvent& event);
393 #endif // wxUSE_NUMBERDLG
394
395 #if wxUSE_FILEDLG
396 void FileOpen(wxCommandEvent& event);
397 void FileOpen2(wxCommandEvent& event);
398 void FilesOpen(wxCommandEvent& event);
399 void FileSave(wxCommandEvent& event);
400 #endif // wxUSE_FILEDLG
401
402 #if USE_FILEDLG_GENERIC
403 void FileOpenGeneric(wxCommandEvent& event);
404 void FilesOpenGeneric(wxCommandEvent& event);
405 void FileSaveGeneric(wxCommandEvent& event);
406 #endif // USE_FILEDLG_GENERIC
407
408 #if wxUSE_DIRDLG
409 void DirChoose(wxCommandEvent& event);
410 void DirChooseNew(wxCommandEvent& event);
411 #endif // wxUSE_DIRDLG
412
413 #if USE_DIRDLG_GENERIC
414 void GenericDirChoose(wxCommandEvent& event);
415 #endif // USE_DIRDLG_GENERIC
416
417 #if wxUSE_STARTUP_TIPS
418 void ShowTip(wxCommandEvent& event);
419 #endif // wxUSE_STARTUP_TIPS
420
421 #if USE_MODAL_PRESENTATION
422 void ModalDlg(wxCommandEvent& event);
423 #endif // USE_MODAL_PRESENTATION
424 void ModelessDlg(wxCommandEvent& event);
425 void DlgCenteredScreen(wxCommandEvent& event);
426 void DlgCenteredParent(wxCommandEvent& event);
427 void MiniFrame(wxCommandEvent& event);
428 void DlgOnTop(wxCommandEvent& event);
429
430 #if wxUSE_PROGRESSDLG
431 void ShowProgress(wxCommandEvent& event);
432 #endif // wxUSE_PROGRESSDLG
433
434 #if wxUSE_ABOUTDLG
435 void ShowSimpleAboutDialog(wxCommandEvent& event);
436 void ShowFancyAboutDialog(wxCommandEvent& event);
437 void ShowFullAboutDialog(wxCommandEvent& event);
438 void ShowCustomAboutDialog(wxCommandEvent& event);
439 #endif // wxUSE_ABOUTDLG
440
441 #if wxUSE_BUSYINFO
442 void ShowBusyInfo(wxCommandEvent& event);
443 #endif // wxUSE_BUSYINFO
444
445 #if wxUSE_FINDREPLDLG
446 void ShowFindDialog(wxCommandEvent& event);
447 void ShowReplaceDialog(wxCommandEvent& event);
448 void OnFindDialog(wxFindDialogEvent& event);
449 #endif // wxUSE_FINDREPLDLG
450
451 #if USE_COLOURDLG_GENERIC
452 void ChooseColourGeneric(wxCommandEvent& event);
453 #endif // USE_COLOURDLG_GENERIC
454
455 #if USE_FONTDLG_GENERIC
456 void ChooseFontGeneric(wxCommandEvent& event);
457 #endif // USE_FONTDLG_GENERIC
458
459 void OnPropertySheet(wxCommandEvent& event);
460
461 void OnRequestUserAttention(wxCommandEvent& event);
462 #if wxUSE_NOTIFICATION_MESSAGE
463 void OnNotifMsgAuto(wxCommandEvent& event);
464 void OnNotifMsgShow(wxCommandEvent& event);
465 void OnNotifMsgHide(wxCommandEvent& event);
466 #endif // wxUSE_NOTIFICATION_MESSAGE
467
468 #if wxUSE_RICHTOOLTIP
469 void OnRichTipDialog(wxCommandEvent& event);
470 #endif // wxUSE_RICHTOOLTIP
471
472 void OnStandardButtonsSizerDialog(wxCommandEvent& event);
473
474 void OnTestDefaultActionDialog(wxCommandEvent& event);
475
476 void OnExit(wxCommandEvent& event);
477
478 private:
479 #if wxUSE_DIRDLG
480 void DoDirChoose(int style);
481 #endif // wxUSE_DIRDLG
482
483 #if USE_MODAL_PRESENTATION
484 MyModelessDialog *m_dialog;
485 #endif // USE_MODAL_PRESENTATION
486
487 #if wxUSE_FINDREPLDLG
488 wxFindReplaceData m_findData;
489
490 wxFindReplaceDialog *m_dlgFind,
491 *m_dlgReplace;
492 #endif // wxUSE_FINDREPLDLG
493
494 #if wxUSE_NOTIFICATION_MESSAGE
495 wxNotificationMessage *m_notifMsg;
496 #endif // wxUSE_NOTIFICATION_MESSAGE
497
498 wxColourData m_clrData;
499
500 // just a window which we use to show the effect of font/colours selection
501 wxWindow *m_canvas;
502
503 #if wxUSE_INFOBAR
504 void OnInfoBarRedo(wxCommandEvent& event);
505
506 wxInfoBar *m_infoBarSimple,
507 *m_infoBarAdvanced;
508 #endif // wxUSE_INFOBAR
509
510 DECLARE_EVENT_TABLE()
511 };
512
513 class MyCanvas: public wxScrolledWindow
514 {
515 public:
516 MyCanvas(wxWindow *parent) : wxScrolledWindow(parent, wxID_ANY)
517 {
518 SetForegroundColour(*wxBLACK);
519 SetBackgroundColour(*wxWHITE);
520 SetFont(*wxNORMAL_FONT);
521 }
522
523 private:
524 void OnPaint(wxPaintEvent& event);
525
526 DECLARE_EVENT_TABLE()
527 };
528
529
530 // Menu IDs
531 enum
532 {
533 DIALOGS_CHOOSE_COLOUR = wxID_HIGHEST,
534 DIALOGS_GET_COLOUR,
535 DIALOGS_CHOOSE_COLOUR_GENERIC,
536 DIALOGS_CHOOSE_FONT,
537 DIALOGS_CHOOSE_FONT_GENERIC,
538 DIALOGS_MESSAGE_BOX,
539 DIALOGS_MESSAGE_BOX_WINDOW_MODAL,
540 DIALOGS_MESSAGE_DIALOG,
541 DIALOGS_MESSAGE_BOX_WXINFO,
542 DIALOGS_RICH_MESSAGE_DIALOG,
543 DIALOGS_SINGLE_CHOICE,
544 DIALOGS_MULTI_CHOICE,
545 DIALOGS_REARRANGE,
546 DIALOGS_LINE_ENTRY,
547 DIALOGS_TEXT_ENTRY,
548 DIALOGS_PASSWORD_ENTRY,
549 DIALOGS_FILE_OPEN,
550 DIALOGS_FILE_OPEN2,
551 DIALOGS_FILES_OPEN,
552 DIALOGS_FILE_SAVE,
553 DIALOGS_FILE_OPEN_GENERIC,
554 DIALOGS_FILES_OPEN_GENERIC,
555 DIALOGS_FILE_SAVE_GENERIC,
556 DIALOGS_DIR_CHOOSE,
557 DIALOGS_DIRNEW_CHOOSE,
558 DIALOGS_GENERIC_DIR_CHOOSE,
559 DIALOGS_TIP,
560 DIALOGS_NUM_ENTRY,
561 DIALOGS_LOG_DIALOG,
562 DIALOGS_INFOBAR_SIMPLE,
563 DIALOGS_INFOBAR_ADVANCED,
564 DIALOGS_MODAL,
565 DIALOGS_MODELESS,
566 DIALOGS_CENTRE_SCREEN,
567 DIALOGS_CENTRE_PARENT,
568 DIALOGS_MINIFRAME,
569 DIALOGS_ONTOP,
570 DIALOGS_MODELESS_BTN,
571 DIALOGS_PROGRESS,
572 DIALOGS_ABOUTDLG_SIMPLE,
573 DIALOGS_ABOUTDLG_FANCY,
574 DIALOGS_ABOUTDLG_FULL,
575 DIALOGS_ABOUTDLG_CUSTOM,
576 DIALOGS_BUSYINFO,
577 DIALOGS_FIND,
578 DIALOGS_REPLACE,
579 DIALOGS_REQUEST,
580 DIALOGS_NOTIFY_AUTO,
581 DIALOGS_NOTIFY_SHOW,
582 DIALOGS_NOTIFY_HIDE,
583 DIALOGS_RICHTIP_DIALOG,
584 DIALOGS_PROPERTY_SHEET,
585 DIALOGS_PROPERTY_SHEET_TOOLBOOK,
586 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK,
587 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG,
588 DIALOGS_TEST_DEFAULT_ACTION
589 };
590
591 #endif
592