Store canvas attributes in the canvas itself in the dialogs 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 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 wxTextCtrl *m_textMsg,
218 *m_textExtMsg;
219
220 wxCheckBox *m_buttons[Btn_Max];
221 wxTextCtrl *m_labels[Btn_Max];
222
223 wxRadioBox *m_icons;
224
225 wxCheckBox *m_chkNoDefault,
226 *m_chkCentre;
227
228 DECLARE_EVENT_TABLE()
229 wxDECLARE_NO_COPY_CLASS(TestMessageBoxDialog);
230 };
231
232 class TestDefaultActionDialog: public wxDialog
233 {
234 public:
235 TestDefaultActionDialog( wxWindow *parent );
236
237 void OnListBoxDClick(wxCommandEvent& event);
238 void OnCatchListBoxDClick(wxCommandEvent& event);
239
240 private:
241 bool m_catchListBoxDClick;
242
243 private:
244 DECLARE_EVENT_TABLE()
245 };
246
247
248 #if USE_SETTINGS_DIALOG
249 // Property sheet dialog
250 class SettingsDialog: public wxPropertySheetDialog
251 {
252 DECLARE_CLASS(SettingsDialog)
253 public:
254 SettingsDialog(wxWindow* parent, int dialogType);
255 ~SettingsDialog();
256
257 wxPanel* CreateGeneralSettingsPage(wxWindow* parent);
258 wxPanel* CreateAestheticSettingsPage(wxWindow* parent);
259
260 protected:
261
262 enum {
263 ID_SHOW_TOOLTIPS = 100,
264 ID_AUTO_SAVE,
265 ID_AUTO_SAVE_MINS,
266 ID_LOAD_LAST_PROJECT,
267
268 ID_APPLY_SETTINGS_TO,
269 ID_BACKGROUND_STYLE,
270 ID_FONT_SIZE
271 };
272
273 wxImageList* m_imageList;
274
275 DECLARE_EVENT_TABLE()
276 };
277
278 #endif // USE_SETTINGS_DIALOG
279
280 // Define a new frame type
281 class MyFrame: public wxFrame
282 {
283 public:
284 MyFrame(const wxString& title);
285 virtual ~MyFrame();
286
287 #if wxUSE_MSGDLG
288 void MessageBox(wxCommandEvent& event);
289 void MessageBoxDialog(wxCommandEvent& event);
290 void MessageBoxInfo(wxCommandEvent& event);
291 #endif // wxUSE_MSGDLG
292
293 #if wxUSE_COLOURDLG
294 void ChooseColour(wxCommandEvent& event);
295 void GetColour(wxCommandEvent& event);
296 #endif // wxUSE_COLOURDLG
297
298 #if wxUSE_FONTDLG
299 void ChooseFont(wxCommandEvent& event);
300 #endif // wxUSE_FONTDLG
301
302 #if wxUSE_LOG_DIALOG
303 void LogDialog(wxCommandEvent& event);
304 #endif // wxUSE_LOG_DIALOG
305
306 #if wxUSE_CHOICEDLG
307 void SingleChoice(wxCommandEvent& event);
308 void MultiChoice(wxCommandEvent& event);
309 #endif // wxUSE_CHOICEDLG
310
311 void Rearrange(wxCommandEvent& event);
312
313 #if wxUSE_TEXTDLG
314 void TextEntry(wxCommandEvent& event);
315 void PasswordEntry(wxCommandEvent& event);
316 #endif // wxUSE_TEXTDLG
317
318 #if wxUSE_NUMBERDLG
319 void NumericEntry(wxCommandEvent& event);
320 #endif // wxUSE_NUMBERDLG
321
322 #if wxUSE_FILEDLG
323 void FileOpen(wxCommandEvent& event);
324 void FileOpen2(wxCommandEvent& event);
325 void FilesOpen(wxCommandEvent& event);
326 void FileSave(wxCommandEvent& event);
327 #endif // wxUSE_FILEDLG
328
329 #if USE_FILEDLG_GENERIC
330 void FileOpenGeneric(wxCommandEvent& event);
331 void FilesOpenGeneric(wxCommandEvent& event);
332 void FileSaveGeneric(wxCommandEvent& event);
333 #endif // USE_FILEDLG_GENERIC
334
335 #if wxUSE_DIRDLG
336 void DirChoose(wxCommandEvent& event);
337 void DirChooseNew(wxCommandEvent& event);
338 #endif // wxUSE_DIRDLG
339
340 #if USE_DIRDLG_GENERIC
341 void GenericDirChoose(wxCommandEvent& event);
342 #endif // USE_DIRDLG_GENERIC
343
344 #if wxUSE_STARTUP_TIPS
345 void ShowTip(wxCommandEvent& event);
346 #endif // wxUSE_STARTUP_TIPS
347
348 #if USE_MODAL_PRESENTATION
349 void ModalDlg(wxCommandEvent& event);
350 #endif // USE_MODAL_PRESENTATION
351 void ModelessDlg(wxCommandEvent& event);
352 void DlgCenteredScreen(wxCommandEvent& event);
353 void DlgCenteredParent(wxCommandEvent& event);
354 void MiniFrame(wxCommandEvent& event);
355 void DlgOnTop(wxCommandEvent& event);
356
357 #if wxUSE_PROGRESSDLG
358 void ShowProgress(wxCommandEvent& event);
359 #endif // wxUSE_PROGRESSDLG
360
361 #if wxUSE_ABOUTDLG
362 void ShowSimpleAboutDialog(wxCommandEvent& event);
363 void ShowFancyAboutDialog(wxCommandEvent& event);
364 void ShowFullAboutDialog(wxCommandEvent& event);
365 void ShowCustomAboutDialog(wxCommandEvent& event);
366 #endif // wxUSE_ABOUTDLG
367
368 #if wxUSE_BUSYINFO
369 void ShowBusyInfo(wxCommandEvent& event);
370 #endif // wxUSE_BUSYINFO
371
372 #if wxUSE_FINDREPLDLG
373 void ShowFindDialog(wxCommandEvent& event);
374 void ShowReplaceDialog(wxCommandEvent& event);
375 void OnFindDialog(wxFindDialogEvent& event);
376 #endif // wxUSE_FINDREPLDLG
377
378 #if USE_COLOURDLG_GENERIC
379 void ChooseColourGeneric(wxCommandEvent& event);
380 #endif // USE_COLOURDLG_GENERIC
381
382 #if USE_FONTDLG_GENERIC
383 void ChooseFontGeneric(wxCommandEvent& event);
384 #endif // USE_FONTDLG_GENERIC
385
386 void OnPropertySheet(wxCommandEvent& event);
387
388 void OnRequestUserAttention(wxCommandEvent& event);
389 #if wxUSE_NOTIFICATION_MESSAGE
390 void OnNotifMsgAuto(wxCommandEvent& event);
391 void OnNotifMsgShow(wxCommandEvent& event);
392 void OnNotifMsgHide(wxCommandEvent& event);
393 #endif // wxUSE_NOTIFICATION_MESSAGE
394
395 void OnStandardButtonsSizerDialog(wxCommandEvent& event);
396
397 void OnTestDefaultActionDialog(wxCommandEvent& event);
398
399 void OnExit(wxCommandEvent& event);
400
401 private:
402 #if wxUSE_DIRDLG
403 void DoDirChoose(int style);
404 #endif // wxUSE_DIRDLG
405
406 #if USE_MODAL_PRESENTATION
407 MyModelessDialog *m_dialog;
408 #endif // USE_MODAL_PRESENTATION
409
410 #if wxUSE_FINDREPLDLG
411 wxFindReplaceData m_findData;
412
413 wxFindReplaceDialog *m_dlgFind,
414 *m_dlgReplace;
415 #endif // wxUSE_FINDREPLDLG
416
417 #if wxUSE_NOTIFICATION_MESSAGE
418 wxNotificationMessage *m_notifMsg;
419 #endif // wxUSE_NOTIFICATION_MESSAGE
420
421 wxColourData m_clrData;
422
423 // just a window which we use to show the effect of font/colours selection
424 wxWindow *m_canvas;
425
426 DECLARE_EVENT_TABLE()
427 };
428
429 class MyCanvas: public wxScrolledWindow
430 {
431 public:
432 MyCanvas(wxWindow *parent) : wxScrolledWindow(parent, wxID_ANY)
433 {
434 SetForegroundColour(*wxBLACK);
435 SetBackgroundColour(*wxWHITE);
436 SetFont(*wxNORMAL_FONT);
437 }
438
439 private:
440 void OnPaint(wxPaintEvent& event);
441
442 DECLARE_EVENT_TABLE()
443 };
444
445
446 // Menu IDs
447 enum
448 {
449 DIALOGS_CHOOSE_COLOUR = wxID_HIGHEST,
450 DIALOGS_GET_COLOUR,
451 DIALOGS_CHOOSE_COLOUR_GENERIC,
452 DIALOGS_CHOOSE_FONT,
453 DIALOGS_CHOOSE_FONT_GENERIC,
454 DIALOGS_MESSAGE_BOX,
455 DIALOGS_MESSAGE_DIALOG,
456 DIALOGS_MESSAGE_BOX_WXINFO,
457 DIALOGS_SINGLE_CHOICE,
458 DIALOGS_MULTI_CHOICE,
459 DIALOGS_REARRANGE,
460 DIALOGS_TEXT_ENTRY,
461 DIALOGS_PASSWORD_ENTRY,
462 DIALOGS_FILE_OPEN,
463 DIALOGS_FILE_OPEN2,
464 DIALOGS_FILES_OPEN,
465 DIALOGS_FILE_SAVE,
466 DIALOGS_FILE_OPEN_GENERIC,
467 DIALOGS_FILES_OPEN_GENERIC,
468 DIALOGS_FILE_SAVE_GENERIC,
469 DIALOGS_DIR_CHOOSE,
470 DIALOGS_DIRNEW_CHOOSE,
471 DIALOGS_GENERIC_DIR_CHOOSE,
472 DIALOGS_TIP,
473 DIALOGS_NUM_ENTRY,
474 DIALOGS_LOG_DIALOG,
475 DIALOGS_MODAL,
476 DIALOGS_MODELESS,
477 DIALOGS_CENTRE_SCREEN,
478 DIALOGS_CENTRE_PARENT,
479 DIALOGS_MINIFRAME,
480 DIALOGS_ONTOP,
481 DIALOGS_MODELESS_BTN,
482 DIALOGS_PROGRESS,
483 DIALOGS_ABOUTDLG_SIMPLE,
484 DIALOGS_ABOUTDLG_FANCY,
485 DIALOGS_ABOUTDLG_FULL,
486 DIALOGS_ABOUTDLG_CUSTOM,
487 DIALOGS_BUSYINFO,
488 DIALOGS_FIND,
489 DIALOGS_REPLACE,
490 DIALOGS_REQUEST,
491 DIALOGS_NOTIFY_AUTO,
492 DIALOGS_NOTIFY_SHOW,
493 DIALOGS_NOTIFY_HIDE,
494 DIALOGS_PROPERTY_SHEET,
495 DIALOGS_PROPERTY_SHEET_TOOLBOOK,
496 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK,
497 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG,
498 DIALOGS_TEST_DEFAULT_ACTION
499 };
500
501 #endif
502