added tests for centering dialogs on screen/parent
[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(__WXMSW__) && !defined(__WXWINCE__)
38 #define USE_WXMSW 1
39 #else
40 #define USE_WXMSW 0
41 #endif
42
43 #ifdef __WXMAC__
44 #define USE_WXMAC 1
45 #else
46 #define USE_WXMAC 0
47 #endif
48
49 #if defined(__WXMAC_OSX__) && ( MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2) && USE_NATIVE_FONT_DIALOG_FOR_MACOSX
50 #define USE_WXMACFONTDLG 1
51 #else
52 #define USE_WXMACFONTDLG 0
53 #endif
54
55 #ifdef __WXGTK__
56 #define USE_WXGTK 1
57 #else
58 #define USE_WXGTK 0
59 #endif
60
61 #ifdef __WXPM__
62 #define USE_WXPM 1
63 #else
64 #define USE_WXPM 0
65 #endif
66
67 #define USE_GENERIC_DIALOGS (!USE_WXUNIVERSAL && !USE_DLL)
68
69 #define USE_COLOURDLG_GENERIC \
70 ((USE_WXMSW || USE_WXMAC) && USE_GENERIC_DIALOGS && wxUSE_COLOURDLG)
71 #define USE_DIRDLG_GENERIC \
72 ((USE_WXMSW || USE_WXMAC) && USE_GENERIC_DIALOGS && wxUSE_DIRDLG)
73 #define USE_FILEDLG_GENERIC \
74 ((USE_WXMSW || USE_WXMAC || USE_WXPM) && USE_GENERIC_DIALOGS && wxUSE_FILEDLG)
75 #define USE_FONTDLG_GENERIC \
76 ((USE_WXMSW || USE_WXMACFONTDLG ||USE_WXPM) && USE_GENERIC_DIALOGS && wxUSE_FONTDLG)
77
78
79 // Turn USE_MODAL_PRESENTATION to 0 if there is any reason for not presenting difference
80 // between modal and modeless dialogs (ie. not implemented it in your port yet)
81 #if defined(__SMARTPHONE__) || !wxUSE_BOOKCTRL
82 #define USE_MODAL_PRESENTATION 0
83 #else
84 #define USE_MODAL_PRESENTATION 1
85 #endif
86
87
88 // Turn USE_SETTINGS_DIALOG to 0 if supported
89 #if wxUSE_BOOKCTRL
90 #define USE_SETTINGS_DIALOG 1
91 #else
92 #define USE_SETTINGS_DIALOG 0
93 #endif
94
95
96 // Define a new application type
97 class MyApp: public wxApp
98 {
99 public:
100 bool OnInit();
101
102 wxFont m_canvasFont;
103 wxColour m_canvasTextColour;
104 };
105
106 #if USE_MODAL_PRESENTATION
107
108 // A custom modeless dialog
109 class MyModelessDialog : public wxDialog
110 {
111 public:
112 MyModelessDialog(wxWindow *parent);
113
114 void OnButton(wxCommandEvent& event);
115 void OnClose(wxCloseEvent& event);
116
117 private:
118 DECLARE_EVENT_TABLE()
119 };
120
121 // A custom modal dialog
122 class MyModalDialog : public wxDialog
123 {
124 public:
125 MyModalDialog(wxWindow *parent);
126
127 void OnButton(wxCommandEvent& event);
128
129 private:
130 wxButton *m_btnModal,
131 *m_btnModeless,
132 *m_btnDelete;
133
134 DECLARE_EVENT_TABLE()
135 };
136
137 #endif // USE_MODAL_PRESENTATION
138
139 #if USE_SETTINGS_DIALOG
140 // Property sheet dialog
141 class SettingsDialog: public wxPropertySheetDialog
142 {
143 DECLARE_CLASS(SettingsDialog)
144 public:
145 SettingsDialog(wxWindow* parent, bool useToolBook = false);
146 ~SettingsDialog();
147
148 wxPanel* CreateGeneralSettingsPage(wxWindow* parent);
149 wxPanel* CreateAestheticSettingsPage(wxWindow* parent);
150
151 protected:
152
153 enum {
154 ID_SHOW_TOOLTIPS = 100,
155 ID_AUTO_SAVE,
156 ID_AUTO_SAVE_MINS,
157 ID_LOAD_LAST_PROJECT,
158
159 ID_APPLY_SETTINGS_TO,
160 ID_BACKGROUND_STYLE,
161 ID_FONT_SIZE
162 };
163
164 wxImageList* m_imageList;
165
166 DECLARE_EVENT_TABLE()
167 };
168
169 #endif // USE_SETTINGS_DIALOG
170
171 // Define a new frame type
172 class MyFrame: public wxFrame
173 {
174 public:
175 MyFrame(wxWindow *parent, const wxString& title);
176
177 void MessageBox(wxCommandEvent& event);
178
179 #if wxUSE_COLOURDLG
180 void ChooseColour(wxCommandEvent& event);
181 #endif // wxUSE_COLOURDLG
182
183 #if wxUSE_FONTDLG
184 void ChooseFont(wxCommandEvent& event);
185 #endif // wxUSE_FONTDLG
186
187 #if wxUSE_LOG_DIALOG
188 void LogDialog(wxCommandEvent& event);
189 #endif // wxUSE_LOG_DIALOG
190
191 #if wxUSE_CHOICEDLG
192 void SingleChoice(wxCommandEvent& event);
193 void MultiChoice(wxCommandEvent& event);
194 #endif // wxUSE_CHOICEDLG
195
196 #if wxUSE_TEXTDLG
197 void TextEntry(wxCommandEvent& event);
198 void PasswordEntry(wxCommandEvent& event);
199 #endif // wxUSE_TEXTDLG
200
201 #if wxUSE_NUMBERDLG
202 void NumericEntry(wxCommandEvent& event);
203 #endif // wxUSE_NUMBERDLG
204
205 #if wxUSE_FILEDLG
206 void FileOpen(wxCommandEvent& event);
207 void FileOpen2(wxCommandEvent& event);
208 void FilesOpen(wxCommandEvent& event);
209 void FileSave(wxCommandEvent& event);
210 #endif // wxUSE_FILEDLG
211
212 #if USE_FILEDLG_GENERIC
213 void FileOpenGeneric(wxCommandEvent& event);
214 void FilesOpenGeneric(wxCommandEvent& event);
215 void FileSaveGeneric(wxCommandEvent& event);
216 #endif // USE_FILEDLG_GENERIC
217
218 #if wxUSE_DIRDLG
219 void DirChoose(wxCommandEvent& event);
220 void DirChooseNew(wxCommandEvent& event);
221 #endif // wxUSE_DIRDLG
222
223 #if USE_DIRDLG_GENERIC
224 void GenericDirChoose(wxCommandEvent& event);
225 #endif // USE_DIRDLG_GENERIC
226
227 #if wxUSE_STARTUP_TIPS
228 void ShowTip(wxCommandEvent& event);
229 #endif // wxUSE_STARTUP_TIPS
230
231 #if USE_MODAL_PRESENTATION
232 void ModalDlg(wxCommandEvent& event);
233 void ModelessDlg(wxCommandEvent& event);
234 void DlgCenteredScreen(wxCommandEvent& event);
235 void DlgCenteredParent(wxCommandEvent& event);
236 #endif // USE_MODAL_PRESENTATION
237
238 #if wxUSE_PROGRESSDLG
239 void ShowProgress(wxCommandEvent& event);
240 #endif // wxUSE_PROGRESSDLG
241
242 #if wxUSE_BUSYINFO
243 void ShowBusyInfo(wxCommandEvent& event);
244 #endif // wxUSE_BUSYINFO
245
246 #if wxUSE_FINDREPLDLG
247 void ShowFindDialog(wxCommandEvent& event);
248 void ShowReplaceDialog(wxCommandEvent& event);
249 void OnFindDialog(wxFindDialogEvent& event);
250 #endif // wxUSE_FINDREPLDLG
251
252 #if USE_COLOURDLG_GENERIC
253 void ChooseColourGeneric(wxCommandEvent& event);
254 #endif // USE_COLOURDLG_GENERIC
255
256 #if USE_FONTDLG_GENERIC
257 void ChooseFontGeneric(wxCommandEvent& event);
258 #endif // USE_FONTDLG_GENERIC
259
260 void OnPropertySheet(wxCommandEvent& event);
261 void OnPropertySheetToolBook(wxCommandEvent& event);
262 void OnRequestUserAttention(wxCommandEvent& event);
263 void OnExit(wxCommandEvent& event);
264
265 private:
266 #if wxUSE_DIRDLG
267 void DoDirChoose(int style);
268 #endif // wxUSE_DIRDLG
269
270 #if USE_MODAL_PRESENTATION
271 MyModelessDialog *m_dialog;
272 #endif // USE_MODAL_PRESENTATION
273
274 #if wxUSE_FINDREPLDLG
275 wxFindReplaceData m_findData;
276
277 wxFindReplaceDialog *m_dlgFind,
278 *m_dlgReplace;
279 #endif // wxUSE_FINDREPLDLG
280
281 wxColourData m_clrData;
282
283 DECLARE_EVENT_TABLE()
284 };
285
286 class MyCanvas: public wxScrolledWindow
287 {
288 public:
289 MyCanvas(wxWindow *parent) :
290 wxScrolledWindow(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxNO_FULL_REPAINT_ON_RESIZE) { }
291
292 void OnPaint(wxPaintEvent& event);
293
294 DECLARE_EVENT_TABLE()
295 };
296
297
298 // Menu IDs
299 enum
300 {
301 DIALOGS_CHOOSE_COLOUR = wxID_HIGHEST,
302 DIALOGS_CHOOSE_COLOUR_GENERIC,
303 DIALOGS_CHOOSE_FONT,
304 DIALOGS_CHOOSE_FONT_GENERIC,
305 DIALOGS_MESSAGE_BOX,
306 DIALOGS_SINGLE_CHOICE,
307 DIALOGS_MULTI_CHOICE,
308 DIALOGS_TEXT_ENTRY,
309 DIALOGS_PASSWORD_ENTRY,
310 DIALOGS_FILE_OPEN,
311 DIALOGS_FILE_OPEN2,
312 DIALOGS_FILES_OPEN,
313 DIALOGS_FILE_SAVE,
314 DIALOGS_FILE_OPEN_GENERIC,
315 DIALOGS_FILES_OPEN_GENERIC,
316 DIALOGS_FILE_SAVE_GENERIC,
317 DIALOGS_DIR_CHOOSE,
318 DIALOGS_DIRNEW_CHOOSE,
319 DIALOGS_GENERIC_DIR_CHOOSE,
320 DIALOGS_TIP,
321 DIALOGS_NUM_ENTRY,
322 DIALOGS_LOG_DIALOG,
323 DIALOGS_MODAL,
324 DIALOGS_MODELESS,
325 DIALOGS_CENTRE_SCREEN,
326 DIALOGS_CENTRE_PARENT,
327 DIALOGS_MODELESS_BTN,
328 DIALOGS_PROGRESS,
329 DIALOGS_BUSYINFO,
330 DIALOGS_FIND,
331 DIALOGS_REPLACE,
332 DIALOGS_REQUEST,
333 DIALOGS_PROPERTY_SHEET,
334 DIALOGS_PROPERTY_SHEET_TOOLBOOK
335 };
336
337 #endif
338