]> git.saurik.com Git - wxWidgets.git/blob - samples/dialogs/dialogs.h
link with wininet.lib under Windows to avoid linking errors in wxUSE_URL_NATIVE=...
[wxWidgets.git] / samples / dialogs / dialogs.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: dialogs.h
3 // Purpose: Common dialogs demo
4 // Author: Julian Smart
5 // Modified by: ABX (2004) - adjustementd for conditional building
6 // Created: 04/01/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 /*
13 This sample shows how to use the common dialogs available from wxWidgets.
14 It also shows that generic implementations of common dialogs can be exchanged
15 with native dialogs and can coexist in one application. The need for generic
16 dialogs addition is recognized thanks to setup of below USE_*** setting. Their
17 combinations reflects conditions of makefiles and project files to avoid unresolved
18 references during linking. For now some generic dialogs are added in static builds
19 of MSW, MAC and OS2
20 */
21
22 #ifndef __DIALOGSH__
23 #define __DIALOGSH__
24
25 #ifdef __WXUNIVERSAL__
26 #define USE_WXUNIVERSAL 1
27 #else
28 #define USE_WXUNIVERSAL 0
29 #endif
30
31 #ifdef WXUSINGDLL
32 #define USE_DLL 1
33 #else
34 #define USE_DLL 0
35 #endif
36
37 #if defined(__WXWINCE__)
38 #define USE_WXWINCE 1
39 #else
40 #define USE_WXWINCE 0
41 #endif
42
43 #if defined(__WXMSW__) && !USE_WXWINCE
44 #define USE_WXMSW 1
45 #else
46 #define USE_WXMSW 0
47 #endif
48
49 #ifdef __WXMAC__
50 #define USE_WXMAC 1
51 #else
52 #define USE_WXMAC 0
53 #endif
54
55 #if defined(__WXMAC_OSX__) && ( MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2) && USE_NATIVE_FONT_DIALOG_FOR_MACOSX
56 #define USE_WXMACFONTDLG 1
57 #else
58 #define USE_WXMACFONTDLG 0
59 #endif
60
61 #ifdef __WXGTK__
62 #define USE_WXGTK 1
63 #else
64 #define USE_WXGTK 0
65 #endif
66
67 #ifdef __WXPM__
68 #define USE_WXPM 1
69 #else
70 #define USE_WXPM 0
71 #endif
72
73 #define USE_GENERIC_DIALOGS (!USE_WXUNIVERSAL && !USE_DLL)
74
75 #define USE_COLOURDLG_GENERIC \
76 ((USE_WXMSW || USE_WXMAC) && USE_GENERIC_DIALOGS && wxUSE_COLOURDLG)
77 #define USE_DIRDLG_GENERIC \
78 ((USE_WXMSW || USE_WXMAC) && USE_GENERIC_DIALOGS && wxUSE_DIRDLG)
79 #define USE_FILEDLG_GENERIC \
80 ((((USE_WXMSW || USE_WXMAC || USE_WXPM || USE_WXGTK) \
81 && USE_GENERIC_DIALOGS) || USE_WXWINCE) && wxUSE_FILEDLG)
82 #define USE_FONTDLG_GENERIC \
83 ((USE_WXMSW || USE_WXMACFONTDLG || USE_WXPM) && USE_GENERIC_DIALOGS && wxUSE_FONTDLG)
84
85 // Turn USE_MODAL_PRESENTATION to 0 if there is any reason for not presenting difference
86 // between modal and modeless dialogs (ie. not implemented it in your port yet)
87 #if defined(__SMARTPHONE__) || !wxUSE_BOOKCTRL
88 #define USE_MODAL_PRESENTATION 0
89 #else
90 #define USE_MODAL_PRESENTATION 1
91 #endif
92
93
94 // Turn USE_SETTINGS_DIALOG to 0 if supported
95 #if wxUSE_BOOKCTRL
96 #define USE_SETTINGS_DIALOG 1
97 #else
98 #define USE_SETTINGS_DIALOG 0
99 #endif
100
101 #if wxUSE_LOG
102
103 // Custom application traits class which we use to override the default log
104 // target creation
105 class MyAppTraits : public wxGUIAppTraits
106 {
107 public:
108 virtual wxLog *CreateLogTarget();
109 };
110
111 #endif // wxUSE_LOG
112
113 // Define a new application type
114 class MyApp: public wxApp
115 {
116 public:
117 virtual bool OnInit();
118
119 wxFont m_canvasFont;
120 wxColour m_canvasTextColour;
121
122 protected:
123 #if wxUSE_LOG
124 virtual wxAppTraits *CreateTraits() { return new MyAppTraits; }
125 #endif // wxUSE_LOG
126 };
127
128 #if USE_MODAL_PRESENTATION
129
130 // A custom modeless dialog
131 class MyModelessDialog : public wxDialog
132 {
133 public:
134 MyModelessDialog(wxWindow *parent);
135
136 void OnButton(wxCommandEvent& event);
137 void OnClose(wxCloseEvent& event);
138
139 private:
140 DECLARE_EVENT_TABLE()
141 };
142
143 // A custom modal dialog
144 class MyModalDialog : public wxDialog
145 {
146 public:
147 MyModalDialog(wxWindow *parent);
148
149 void OnButton(wxCommandEvent& event);
150
151 private:
152 wxButton *m_btnModal,
153 *m_btnModeless,
154 *m_btnDelete;
155
156 DECLARE_EVENT_TABLE()
157 };
158
159 #endif // USE_MODAL_PRESENTATION
160
161 // A class demonstrating CreateStdDialogButtonSizer()
162 class StdButtonSizerDialog : public wxDialog
163 {
164 public:
165 StdButtonSizerDialog(wxWindow *parent);
166
167 void OnEvent(wxCommandEvent& event);
168
169 private:
170 void EnableDisableControls();
171
172 wxCheckBox *m_chkboxAffirmativeButton;
173 wxRadioButton *m_radiobtnOk,
174 *m_radiobtnYes;
175
176 wxCheckBox *m_chkboxDismissButton;
177 wxRadioButton *m_radiobtnClose,
178 *m_radiobtnCancel;
179
180 wxCheckBox *m_chkboxApply,
181 *m_chkboxNo,
182 *m_chkboxHelp,
183 *m_chkboxNoDefault;
184
185 wxSizer *m_buttonsSizer;
186
187 DECLARE_EVENT_TABLE()
188 };
189
190 // Test harness for wxMessageDialog.
191 class TestMessageBoxDialog : public wxDialog
192 {
193 public:
194 TestMessageBoxDialog(wxWindow *parent);
195
196 private:
197 void OnApply(wxCommandEvent& event);
198 void OnClose(wxCommandEvent& event);
199 void OnUpdateLabelUI(wxUpdateUIEvent& event);
200 void OnUpdateNoDefaultUI(wxUpdateUIEvent& event);
201
202 enum
203 {
204 Btn_Yes,
205 Btn_No,
206 Btn_Ok,
207 Btn_Cancel,
208 Btn_Max
209 };
210
211 struct BtnInfo
212 {
213 int flag;
214 const char *name;
215 };
216
217 static const BtnInfo ms_btnInfo[Btn_Max];
218
219 wxTextCtrl *m_textMsg,
220 *m_textExtMsg;
221
222 wxCheckBox *m_buttons[Btn_Max];
223 wxTextCtrl *m_labels[Btn_Max];
224
225 wxRadioBox *m_icons;
226
227 wxCheckBox *m_chkNoDefault,
228 *m_chkCentre;
229
230 DECLARE_EVENT_TABLE()
231 DECLARE_NO_COPY_CLASS(TestMessageBoxDialog)
232 };
233
234 class TestDefaultActionDialog: public wxDialog
235 {
236 public:
237 TestDefaultActionDialog( wxWindow *parent );
238
239 void OnListBoxDClick(wxCommandEvent& event);
240 void OnCatchListBoxDClick(wxCommandEvent& event);
241
242 private:
243 bool m_catchListBoxDClick;
244
245 private:
246 DECLARE_EVENT_TABLE()
247 };
248
249
250 #if USE_SETTINGS_DIALOG
251 // Property sheet dialog
252 class SettingsDialog: public wxPropertySheetDialog
253 {
254 DECLARE_CLASS(SettingsDialog)
255 public:
256 SettingsDialog(wxWindow* parent, int dialogType);
257 ~SettingsDialog();
258
259 wxPanel* CreateGeneralSettingsPage(wxWindow* parent);
260 wxPanel* CreateAestheticSettingsPage(wxWindow* parent);
261
262 protected:
263
264 enum {
265 ID_SHOW_TOOLTIPS = 100,
266 ID_AUTO_SAVE,
267 ID_AUTO_SAVE_MINS,
268 ID_LOAD_LAST_PROJECT,
269
270 ID_APPLY_SETTINGS_TO,
271 ID_BACKGROUND_STYLE,
272 ID_FONT_SIZE
273 };
274
275 wxImageList* m_imageList;
276
277 DECLARE_EVENT_TABLE()
278 };
279
280 #endif // USE_SETTINGS_DIALOG
281
282 // Define a new frame type
283 class MyFrame: public wxFrame
284 {
285 public:
286 MyFrame(wxWindow *parent, const wxString& title);
287 virtual ~MyFrame();
288
289 #if wxUSE_MSGDLG
290 void MessageBox(wxCommandEvent& event);
291 void MessageBoxDialog(wxCommandEvent& event);
292 void MessageBoxInfo(wxCommandEvent& event);
293 #endif // wxUSE_MSGDLG
294
295 #if wxUSE_COLOURDLG
296 void ChooseColour(wxCommandEvent& event);
297 void GetColour(wxCommandEvent& event);
298 #endif // wxUSE_COLOURDLG
299
300 #if wxUSE_FONTDLG
301 void ChooseFont(wxCommandEvent& event);
302 #endif // wxUSE_FONTDLG
303
304 #if wxUSE_LOG_DIALOG
305 void LogDialog(wxCommandEvent& event);
306 #endif // wxUSE_LOG_DIALOG
307
308 #if wxUSE_CHOICEDLG
309 void SingleChoice(wxCommandEvent& event);
310 void MultiChoice(wxCommandEvent& event);
311 #endif // wxUSE_CHOICEDLG
312
313 void Rearrange(wxCommandEvent& event);
314
315 #if wxUSE_TEXTDLG
316 void TextEntry(wxCommandEvent& event);
317 void PasswordEntry(wxCommandEvent& event);
318 #endif // wxUSE_TEXTDLG
319
320 #if wxUSE_NUMBERDLG
321 void NumericEntry(wxCommandEvent& event);
322 #endif // wxUSE_NUMBERDLG
323
324 #if wxUSE_FILEDLG
325 void FileOpen(wxCommandEvent& event);
326 void FileOpen2(wxCommandEvent& event);
327 void FilesOpen(wxCommandEvent& event);
328 void FileSave(wxCommandEvent& event);
329 #endif // wxUSE_FILEDLG
330
331 #if USE_FILEDLG_GENERIC
332 void FileOpenGeneric(wxCommandEvent& event);
333 void FilesOpenGeneric(wxCommandEvent& event);
334 void FileSaveGeneric(wxCommandEvent& event);
335 #endif // USE_FILEDLG_GENERIC
336
337 #if wxUSE_DIRDLG
338 void DirChoose(wxCommandEvent& event);
339 void DirChooseNew(wxCommandEvent& event);
340 #endif // wxUSE_DIRDLG
341
342 #if USE_DIRDLG_GENERIC
343 void GenericDirChoose(wxCommandEvent& event);
344 #endif // USE_DIRDLG_GENERIC
345
346 #if wxUSE_STARTUP_TIPS
347 void ShowTip(wxCommandEvent& event);
348 #endif // wxUSE_STARTUP_TIPS
349
350 #if USE_MODAL_PRESENTATION
351 void ModalDlg(wxCommandEvent& event);
352 #endif // USE_MODAL_PRESENTATION
353 void ModelessDlg(wxCommandEvent& event);
354 void DlgCenteredScreen(wxCommandEvent& event);
355 void DlgCenteredParent(wxCommandEvent& event);
356 void MiniFrame(wxCommandEvent& event);
357 void DlgOnTop(wxCommandEvent& event);
358
359 #if wxUSE_PROGRESSDLG
360 void ShowProgress(wxCommandEvent& event);
361 #endif // wxUSE_PROGRESSDLG
362
363 #if wxUSE_ABOUTDLG
364 void ShowSimpleAboutDialog(wxCommandEvent& event);
365 void ShowFancyAboutDialog(wxCommandEvent& event);
366 void ShowFullAboutDialog(wxCommandEvent& event);
367 void ShowCustomAboutDialog(wxCommandEvent& event);
368 #endif // wxUSE_ABOUTDLG
369
370 #if wxUSE_BUSYINFO
371 void ShowBusyInfo(wxCommandEvent& event);
372 #endif // wxUSE_BUSYINFO
373
374 #if wxUSE_FINDREPLDLG
375 void ShowFindDialog(wxCommandEvent& event);
376 void ShowReplaceDialog(wxCommandEvent& event);
377 void OnFindDialog(wxFindDialogEvent& event);
378 #endif // wxUSE_FINDREPLDLG
379
380 #if USE_COLOURDLG_GENERIC
381 void ChooseColourGeneric(wxCommandEvent& event);
382 #endif // USE_COLOURDLG_GENERIC
383
384 #if USE_FONTDLG_GENERIC
385 void ChooseFontGeneric(wxCommandEvent& event);
386 #endif // USE_FONTDLG_GENERIC
387
388 void OnPropertySheet(wxCommandEvent& event);
389
390 void OnRequestUserAttention(wxCommandEvent& event);
391 #if wxUSE_NOTIFICATION_MESSAGE
392 void OnNotifMsgAuto(wxCommandEvent& event);
393 void OnNotifMsgShow(wxCommandEvent& event);
394 void OnNotifMsgHide(wxCommandEvent& event);
395 #endif // wxUSE_NOTIFICATION_MESSAGE
396
397 void OnStandardButtonsSizerDialog(wxCommandEvent& event);
398
399 void OnTestDefaultActionDialog(wxCommandEvent& event);
400
401 void OnExit(wxCommandEvent& event);
402
403 private:
404 #if wxUSE_DIRDLG
405 void DoDirChoose(int style);
406 #endif // wxUSE_DIRDLG
407
408 #if USE_MODAL_PRESENTATION
409 MyModelessDialog *m_dialog;
410 #endif // USE_MODAL_PRESENTATION
411
412 #if wxUSE_FINDREPLDLG
413 wxFindReplaceData m_findData;
414
415 wxFindReplaceDialog *m_dlgFind,
416 *m_dlgReplace;
417 #endif // wxUSE_FINDREPLDLG
418
419 #if wxUSE_NOTIFICATION_MESSAGE
420 wxNotificationMessage *m_notifMsg;
421 #endif // wxUSE_NOTIFICATION_MESSAGE
422
423 wxColourData m_clrData;
424
425 DECLARE_EVENT_TABLE()
426 };
427
428 class MyCanvas: public wxScrolledWindow
429 {
430 public:
431 MyCanvas(wxWindow *parent) :
432 wxScrolledWindow(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxNO_FULL_REPAINT_ON_RESIZE) { }
433
434 void OnPaint(wxPaintEvent& event);
435
436 DECLARE_EVENT_TABLE()
437 };
438
439
440 // Menu IDs
441 enum
442 {
443 DIALOGS_CHOOSE_COLOUR = wxID_HIGHEST,
444 DIALOGS_GET_COLOUR,
445 DIALOGS_CHOOSE_COLOUR_GENERIC,
446 DIALOGS_CHOOSE_FONT,
447 DIALOGS_CHOOSE_FONT_GENERIC,
448 DIALOGS_MESSAGE_BOX,
449 DIALOGS_MESSAGE_DIALOG,
450 DIALOGS_MESSAGE_BOX_WXINFO,
451 DIALOGS_SINGLE_CHOICE,
452 DIALOGS_MULTI_CHOICE,
453 DIALOGS_REARRANGE,
454 DIALOGS_TEXT_ENTRY,
455 DIALOGS_PASSWORD_ENTRY,
456 DIALOGS_FILE_OPEN,
457 DIALOGS_FILE_OPEN2,
458 DIALOGS_FILES_OPEN,
459 DIALOGS_FILE_SAVE,
460 DIALOGS_FILE_OPEN_GENERIC,
461 DIALOGS_FILES_OPEN_GENERIC,
462 DIALOGS_FILE_SAVE_GENERIC,
463 DIALOGS_DIR_CHOOSE,
464 DIALOGS_DIRNEW_CHOOSE,
465 DIALOGS_GENERIC_DIR_CHOOSE,
466 DIALOGS_TIP,
467 DIALOGS_NUM_ENTRY,
468 DIALOGS_LOG_DIALOG,
469 DIALOGS_MODAL,
470 DIALOGS_MODELESS,
471 DIALOGS_CENTRE_SCREEN,
472 DIALOGS_CENTRE_PARENT,
473 DIALOGS_MINIFRAME,
474 DIALOGS_ONTOP,
475 DIALOGS_MODELESS_BTN,
476 DIALOGS_PROGRESS,
477 DIALOGS_ABOUTDLG_SIMPLE,
478 DIALOGS_ABOUTDLG_FANCY,
479 DIALOGS_ABOUTDLG_FULL,
480 DIALOGS_ABOUTDLG_CUSTOM,
481 DIALOGS_BUSYINFO,
482 DIALOGS_FIND,
483 DIALOGS_REPLACE,
484 DIALOGS_REQUEST,
485 DIALOGS_NOTIFY_AUTO,
486 DIALOGS_NOTIFY_SHOW,
487 DIALOGS_NOTIFY_HIDE,
488 DIALOGS_PROPERTY_SHEET,
489 DIALOGS_PROPERTY_SHEET_TOOLBOOK,
490 DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK,
491 DIALOGS_STANDARD_BUTTON_SIZER_DIALOG,
492 DIALOGS_TEST_DEFAULT_ACTION
493 };
494
495 #endif
496