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