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