]> git.saurik.com Git - wxWidgets.git/blame_incremental - samples/dialogs/dialogs.cpp
no real changes, just fixed confusing (to both people and coverity) mix of testing...
[wxWidgets.git] / samples / dialogs / dialogs.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: dialogs.cpp
3// Purpose: Common dialogs demo
4// Author: Julian Smart
5// Modified by: ABX (2004) - adjustements for conditional building + new menu
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12// For compilers that support precompilation, includes "wx/wx.h".
13#include "wx/wxprec.h"
14
15#ifdef __BORLANDC__
16#pragma hdrstop
17#endif
18
19#ifndef WX_PRECOMP
20#include "wx/wx.h"
21#endif
22
23#include "../sample.xpm"
24
25#include "wx/datetime.h"
26#include "wx/image.h"
27#include "wx/bookctrl.h"
28#include "wx/artprov.h"
29#include "wx/imaglist.h"
30#include "wx/sysopt.h"
31
32#if wxUSE_COLOURDLG
33 #include "wx/colordlg.h"
34#endif // wxUSE_COLOURDLG
35
36#if wxUSE_CHOICEDLG
37 #include "wx/choicdlg.h"
38#endif // wxUSE_CHOICEDLG
39
40#if wxUSE_STARTUP_TIPS
41 #include "wx/tipdlg.h"
42#endif // wxUSE_STARTUP_TIPS
43
44#if wxUSE_PROGRESSDLG
45#if wxUSE_STOPWATCH && wxUSE_LONGLONG
46 #include "wx/datetime.h" // wxDateTime
47#endif
48
49 #include "wx/progdlg.h"
50#endif // wxUSE_PROGRESSDLG
51
52#if wxUSE_ABOUTDLG
53 #include "wx/aboutdlg.h"
54
55 // these headers are only needed for custom about dialog
56 #include "wx/statline.h"
57 #include "wx/generic/aboutdlgg.h"
58#endif // wxUSE_ABOUTDLG
59
60#if wxUSE_BUSYINFO
61 #include "wx/busyinfo.h"
62#endif // wxUSE_BUSYINFO
63
64#if wxUSE_NUMBERDLG
65 #include "wx/numdlg.h"
66#endif // wxUSE_NUMBERDLG
67
68#if wxUSE_FILEDLG
69 #include "wx/filedlg.h"
70#endif // wxUSE_FILEDLG
71
72#if wxUSE_DIRDLG
73 #include "wx/dirdlg.h"
74#endif // wxUSE_DIRDLG
75
76#if wxUSE_FONTDLG
77 #include "wx/fontdlg.h"
78#endif // wxUSE_FONTDLG
79
80#if wxUSE_FINDREPLDLG
81 #include "wx/fdrepdlg.h"
82#endif // wxUSE_FINDREPLDLG
83
84#if wxUSE_SPINCTRL
85#include "wx/spinctrl.h"
86#endif
87
88#include "wx/propdlg.h"
89
90#include "dialogs.h"
91
92#if USE_COLOURDLG_GENERIC
93 #include "wx/generic/colrdlgg.h"
94#endif // USE_COLOURDLG_GENERIC
95
96#if USE_DIRDLG_GENERIC
97 #include "wx/generic/dirdlgg.h"
98#endif // USE_DIRDLG_GENERIC
99
100#if USE_FILEDLG_GENERIC
101 #include "wx/generic/filedlgg.h"
102#endif // USE_FILEDLG_GENERIC
103
104#if USE_FONTDLG_GENERIC
105 #include "wx/generic/fontdlgg.h"
106#endif // USE_FONTDLG_GENERIC
107
108IMPLEMENT_APP(MyApp)
109
110BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
111 EVT_PAINT(MyCanvas::OnPaint)
112END_EVENT_TABLE()
113
114
115
116BEGIN_EVENT_TABLE(MyFrame, wxFrame)
117 EVT_MENU(DIALOGS_MESSAGE_BOX, MyFrame::MessageBox)
118
119#if wxUSE_COLOURDLG
120 EVT_MENU(DIALOGS_CHOOSE_COLOUR, MyFrame::ChooseColour)
121#endif // wxUSE_COLOURDLG
122
123#if wxUSE_FONTDLG
124 EVT_MENU(DIALOGS_CHOOSE_FONT, MyFrame::ChooseFont)
125#endif // wxUSE_FONTDLG
126
127#if wxUSE_LOG_DIALOG
128 EVT_MENU(DIALOGS_LOG_DIALOG, MyFrame::LogDialog)
129#endif // wxUSE_LOG_DIALOG
130
131#if wxUSE_TEXTDLG
132 EVT_MENU(DIALOGS_TEXT_ENTRY, MyFrame::TextEntry)
133 EVT_MENU(DIALOGS_PASSWORD_ENTRY, MyFrame::PasswordEntry)
134#endif // wxUSE_TEXTDLG
135
136#if wxUSE_NUMBERDLG
137 EVT_MENU(DIALOGS_NUM_ENTRY, MyFrame::NumericEntry)
138#endif // wxUSE_NUMBERDLG
139
140#if wxUSE_CHOICEDLG
141 EVT_MENU(DIALOGS_SINGLE_CHOICE, MyFrame::SingleChoice)
142 EVT_MENU(DIALOGS_MULTI_CHOICE, MyFrame::MultiChoice)
143#endif // wxUSE_CHOICEDLG
144
145#if wxUSE_FILEDLG
146 EVT_MENU(DIALOGS_FILE_OPEN, MyFrame::FileOpen)
147 EVT_MENU(DIALOGS_FILE_OPEN2, MyFrame::FileOpen2)
148 EVT_MENU(DIALOGS_FILES_OPEN, MyFrame::FilesOpen)
149 EVT_MENU(DIALOGS_FILE_SAVE, MyFrame::FileSave)
150#endif // wxUSE_FILEDLG
151
152#if USE_FILEDLG_GENERIC
153 EVT_MENU(DIALOGS_FILE_OPEN_GENERIC, MyFrame::FileOpenGeneric)
154 EVT_MENU(DIALOGS_FILES_OPEN_GENERIC, MyFrame::FilesOpenGeneric)
155 EVT_MENU(DIALOGS_FILE_SAVE_GENERIC, MyFrame::FileSaveGeneric)
156#endif // USE_FILEDLG_GENERIC
157
158#if wxUSE_DIRDLG
159 EVT_MENU(DIALOGS_DIR_CHOOSE, MyFrame::DirChoose)
160 EVT_MENU(DIALOGS_DIRNEW_CHOOSE, MyFrame::DirChooseNew)
161#endif // wxUSE_DIRDLG
162
163#if USE_MODAL_PRESENTATION
164 EVT_MENU(DIALOGS_MODAL, MyFrame::ModalDlg)
165 EVT_MENU(DIALOGS_MODELESS, MyFrame::ModelessDlg)
166 EVT_MENU(DIALOGS_CENTRE_SCREEN, MyFrame::DlgCenteredScreen)
167 EVT_MENU(DIALOGS_CENTRE_PARENT, MyFrame::DlgCenteredParent)
168#endif // USE_MODAL
169
170#if wxUSE_STARTUP_TIPS
171 EVT_MENU(DIALOGS_TIP, MyFrame::ShowTip)
172#endif // wxUSE_STARTUP_TIPS
173
174#if USE_FONTDLG_GENERIC
175 EVT_MENU(DIALOGS_CHOOSE_FONT_GENERIC, MyFrame::ChooseFontGeneric)
176#endif // USE_FONTDLG_GENERIC
177
178#if USE_DIRDLG_GENERIC
179 EVT_MENU(DIALOGS_GENERIC_DIR_CHOOSE, MyFrame::GenericDirChoose)
180#endif // wxMSW || wxMAC
181
182#if USE_COLOURDLG_GENERIC
183 EVT_MENU(DIALOGS_CHOOSE_COLOUR_GENERIC, MyFrame::ChooseColourGeneric)
184#endif // USE_COLOURDLG_GENERIC
185
186#if wxUSE_PROGRESSDLG
187 EVT_MENU(DIALOGS_PROGRESS, MyFrame::ShowProgress)
188#endif // wxUSE_PROGRESSDLG
189
190#if wxUSE_ABOUTDLG
191 EVT_MENU(DIALOGS_ABOUTDLG_SIMPLE, MyFrame::ShowSimpleAboutDialog)
192 EVT_MENU(DIALOGS_ABOUTDLG_FANCY, MyFrame::ShowFancyAboutDialog)
193 EVT_MENU(DIALOGS_ABOUTDLG_FULL, MyFrame::ShowFullAboutDialog)
194 EVT_MENU(DIALOGS_ABOUTDLG_CUSTOM, MyFrame::ShowCustomAboutDialog)
195#endif // wxUSE_ABOUTDLG
196
197#if wxUSE_BUSYINFO
198 EVT_MENU(DIALOGS_BUSYINFO, MyFrame::ShowBusyInfo)
199#endif // wxUSE_BUSYINFO
200
201#if wxUSE_FINDREPLDLG
202 EVT_MENU(DIALOGS_FIND, MyFrame::ShowFindDialog)
203 EVT_MENU(DIALOGS_REPLACE, MyFrame::ShowReplaceDialog)
204
205 EVT_FIND(wxID_ANY, MyFrame::OnFindDialog)
206 EVT_FIND_NEXT(wxID_ANY, MyFrame::OnFindDialog)
207 EVT_FIND_REPLACE(wxID_ANY, MyFrame::OnFindDialog)
208 EVT_FIND_REPLACE_ALL(wxID_ANY, MyFrame::OnFindDialog)
209 EVT_FIND_CLOSE(wxID_ANY, MyFrame::OnFindDialog)
210#endif // wxUSE_FINDREPLDLG
211
212#if USE_SETTINGS_DIALOG
213 EVT_MENU(DIALOGS_PROPERTY_SHEET, MyFrame::OnPropertySheet)
214 EVT_MENU(DIALOGS_PROPERTY_SHEET_TOOLBOOK, MyFrame::OnPropertySheet)
215 EVT_MENU(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, MyFrame::OnPropertySheet)
216#endif
217
218 EVT_MENU(DIALOGS_REQUEST, MyFrame::OnRequestUserAttention)
219
220 EVT_MENU(wxID_EXIT, MyFrame::OnExit)
221END_EVENT_TABLE()
222
223#if USE_MODAL_PRESENTATION
224
225 BEGIN_EVENT_TABLE(MyModalDialog, wxDialog)
226 EVT_BUTTON(wxID_ANY, MyModalDialog::OnButton)
227 END_EVENT_TABLE()
228
229 BEGIN_EVENT_TABLE(MyModelessDialog, wxDialog)
230 EVT_BUTTON(DIALOGS_MODELESS_BTN, MyModelessDialog::OnButton)
231 EVT_CLOSE(MyModelessDialog::OnClose)
232 END_EVENT_TABLE()
233
234#endif // USE_MODAL_PRESENTATION
235
236MyCanvas *myCanvas = (MyCanvas *) NULL;
237
238// `Main program' equivalent, creating windows and returning main app frame
239bool MyApp::OnInit()
240{
241 if ( !wxApp::OnInit() )
242 return false;
243
244#if wxUSE_IMAGE
245 wxInitAllImageHandlers();
246#endif
247
248 m_canvasTextColour = *wxBLACK;
249 m_canvasFont = *wxNORMAL_FONT;
250
251 // Create the main frame window
252 MyFrame *frame = new MyFrame((wxFrame *) NULL, _T("wxWidgets dialogs example"));
253
254 // Make a menubar
255 wxMenu *menuDlg = new wxMenu;
256
257 menuDlg->Append(DIALOGS_MESSAGE_BOX, _T("&Message box\tCtrl-M"));
258
259
260#if wxUSE_COLOURDLG || wxUSE_FONTDLG || wxUSE_CHOICEDLG
261
262 wxMenu *choices_menu = new wxMenu;
263
264 #if wxUSE_COLOURDLG
265 choices_menu->Append(DIALOGS_CHOOSE_COLOUR, _T("&Choose colour"));
266 #endif // wxUSE_COLOURDLG
267
268 #if wxUSE_FONTDLG
269 choices_menu->Append(DIALOGS_CHOOSE_FONT, _T("Choose &font"));
270 #endif // wxUSE_FONTDLG
271
272 #if wxUSE_CHOICEDLG
273 choices_menu->Append(DIALOGS_SINGLE_CHOICE, _T("&Single choice\tCtrl-C"));
274 choices_menu->Append(DIALOGS_MULTI_CHOICE, _T("M&ultiple choice\tCtrl-U"));
275 #endif // wxUSE_CHOICEDLG
276
277 #if USE_COLOURDLG_GENERIC || USE_FONTDLG_GENERIC
278 choices_menu->AppendSeparator();
279 #endif // USE_COLOURDLG_GENERIC || USE_FONTDLG_GENERIC
280
281 #if USE_COLOURDLG_GENERIC
282 choices_menu->Append(DIALOGS_CHOOSE_COLOUR_GENERIC, _T("&Choose colour (generic)"));
283 #endif // USE_COLOURDLG_GENERIC
284
285 #if USE_FONTDLG_GENERIC
286 choices_menu->Append(DIALOGS_CHOOSE_FONT_GENERIC, _T("Choose &font (generic)"));
287 #endif // USE_FONTDLG_GENERIC
288
289 menuDlg->Append(wxID_ANY,_T("&Choices and selectors"),choices_menu);
290#endif // wxUSE_COLOURDLG || wxUSE_FONTDLG || wxUSE_CHOICEDLG
291
292
293#if wxUSE_TEXTDLG || wxUSE_NUMBERDLG
294
295 wxMenu *entry_menu = new wxMenu;
296
297 #if wxUSE_TEXTDLG
298 entry_menu->Append(DIALOGS_TEXT_ENTRY, _T("Text &entry\tCtrl-E"));
299 entry_menu->Append(DIALOGS_PASSWORD_ENTRY, _T("&Password entry\tCtrl-P"));
300 #endif // wxUSE_TEXTDLG
301
302 #if wxUSE_NUMBERDLG
303 entry_menu->Append(DIALOGS_NUM_ENTRY, _T("&Numeric entry\tCtrl-N"));
304 #endif // wxUSE_NUMBERDLG
305
306 menuDlg->Append(wxID_ANY,_T("&Entry dialogs"),entry_menu);
307
308#endif // wxUSE_TEXTDLG || wxUSE_NUMBERDLG
309
310
311#if wxUSE_FILEDLG
312
313 wxMenu *filedlg_menu = new wxMenu;
314 filedlg_menu->Append(DIALOGS_FILE_OPEN, _T("&Open file\tCtrl-O"));
315 filedlg_menu->Append(DIALOGS_FILE_OPEN2, _T("&Second open file\tCtrl-2"));
316 filedlg_menu->Append(DIALOGS_FILES_OPEN, _T("Open &files\tCtrl-Q"));
317 filedlg_menu->Append(DIALOGS_FILE_SAVE, _T("Sa&ve file\tCtrl-S"));
318
319 #if USE_FILEDLG_GENERIC
320 filedlg_menu->AppendSeparator();
321 filedlg_menu->Append(DIALOGS_FILE_OPEN_GENERIC, _T("&Open file (generic)"));
322 filedlg_menu->Append(DIALOGS_FILES_OPEN_GENERIC, _T("Open &files (generic)"));
323 filedlg_menu->Append(DIALOGS_FILE_SAVE_GENERIC, _T("Sa&ve file (generic)"));
324 #endif // USE_FILEDLG_GENERIC
325
326 menuDlg->Append(wxID_ANY,_T("&File operations"),filedlg_menu);
327
328#endif // wxUSE_FILEDLG
329
330#if wxUSE_DIRDLG
331 wxMenu *dir_menu = new wxMenu;
332
333 dir_menu->Append(DIALOGS_DIR_CHOOSE, _T("&Choose a directory\tCtrl-D"));
334 dir_menu->Append(DIALOGS_DIRNEW_CHOOSE, _T("Choose a directory (with \"Ne&w\" button)\tShift-Ctrl-D"));
335 menuDlg->Append(wxID_ANY,_T("&Directory operations"),dir_menu);
336
337 #if USE_DIRDLG_GENERIC
338 dir_menu->AppendSeparator();
339 dir_menu->Append(DIALOGS_GENERIC_DIR_CHOOSE, _T("&Choose a directory (generic)"));
340 #endif // USE_DIRDLG_GENERIC
341
342#endif // wxUSE_DIRDLG
343
344
345#if wxUSE_STARTUP_TIPS || wxUSE_PROGRESSDLG || wxUSE_BUSYINFO || wxUSE_LOG_DIALOG
346
347 wxMenu *info_menu = new wxMenu;
348
349 #if wxUSE_STARTUP_TIPS
350 info_menu->Append(DIALOGS_TIP, _T("&Tip of the day\tCtrl-T"));
351 #endif // wxUSE_STARTUP_TIPS
352
353 #if wxUSE_PROGRESSDLG
354 info_menu->Append(DIALOGS_PROGRESS, _T("Pro&gress dialog\tCtrl-G"));
355 #endif // wxUSE_PROGRESSDLG
356
357 #if wxUSE_BUSYINFO
358 info_menu->Append(DIALOGS_BUSYINFO, _T("&Busy info dialog\tCtrl-B"));
359 #endif // wxUSE_BUSYINFO
360
361 #if wxUSE_LOG_DIALOG
362 info_menu->Append(DIALOGS_LOG_DIALOG, _T("&Log dialog\tCtrl-L"));
363 #endif // wxUSE_LOG_DIALOG
364
365 menuDlg->Append(wxID_ANY,_T("&Informative dialogs"),info_menu);
366
367#endif // wxUSE_STARTUP_TIPS || wxUSE_PROGRESSDLG || wxUSE_BUSYINFO || wxUSE_LOG_DIALOG
368
369
370#if wxUSE_FINDREPLDLG
371 wxMenu *find_menu = new wxMenu;
372 find_menu->AppendCheckItem(DIALOGS_FIND, _T("&Find dialog\tCtrl-F"));
373 find_menu->AppendCheckItem(DIALOGS_REPLACE, _T("Find and &replace dialog\tShift-Ctrl-F"));
374 menuDlg->Append(wxID_ANY,_T("&Searching"),find_menu);
375#endif // wxUSE_FINDREPLDLG
376
377#if USE_MODAL_PRESENTATION
378 wxMenu *dialogs_menu = new wxMenu;
379 dialogs_menu->Append(DIALOGS_MODAL, _T("&Modal dialog\tCtrl-W"));
380 dialogs_menu->AppendCheckItem(DIALOGS_MODELESS, _T("Mode&less dialog\tCtrl-Z"));
381 dialogs_menu->Append(DIALOGS_CENTRE_SCREEN, _T("Centered on &screen\tShift-Ctrl-1"));
382 dialogs_menu->Append(DIALOGS_CENTRE_PARENT, _T("Centered on &parent\tShift-Ctrl-2"));
383 menuDlg->Append(wxID_ANY, _T("&Generic dialogs"), dialogs_menu);
384#endif // USE_MODAL_PRESENTATION
385
386#if USE_SETTINGS_DIALOG
387 wxMenu *sheet_menu = new wxMenu;
388 sheet_menu->Append(DIALOGS_PROPERTY_SHEET, _T("&Standard property sheet\tShift-Ctrl-P"));
389 sheet_menu->Append(DIALOGS_PROPERTY_SHEET_TOOLBOOK, _T("&Toolbook sheet\tShift-Ctrl-T"));
390
391 if (wxPlatformIs(wxPORT_MAC))
392 sheet_menu->Append(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, _T("Button &Toolbook sheet\tShift-Ctrl-U"));
393/*
394#ifdef __WXMAC__
395 sheet_menu->Append(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, _T("Button &Toolbook sheet\tShift-Ctrl-U"));
396#endif
397*/
398 menuDlg->Append(wxID_ANY, _T("&Property sheets"), sheet_menu);
399#endif // USE_SETTINGS_DIALOG
400
401 menuDlg->Append(DIALOGS_REQUEST, _T("&Request user attention\tCtrl-R"));
402
403 menuDlg->AppendSeparator();
404 menuDlg->Append(wxID_EXIT, _T("E&xit\tAlt-X"));
405
406#if wxUSE_ABOUTDLG
407 wxMenu *menuHelp = new wxMenu;
408 menuHelp->Append(DIALOGS_ABOUTDLG_SIMPLE, _T("&About (simple)...\tF1"));
409 menuHelp->Append(DIALOGS_ABOUTDLG_FANCY, _T("About (&fancy)...\tShift-F1"));
410 menuHelp->Append(DIALOGS_ABOUTDLG_FULL, _T("About (f&ull)...\tCtrl-F1"));
411 menuHelp->Append(DIALOGS_ABOUTDLG_CUSTOM, _T("About (&custom)...\tCtrl-Shift-F1"));
412#endif // wxUSE_ABOUTDLG
413
414 wxMenuBar *menubar = new wxMenuBar;
415 menubar->Append(menuDlg, _T("&Dialogs"));
416#if wxUSE_ABOUTDLG
417 menubar->Append(menuHelp, _T("&Help"));
418#endif // wxUSE_ABOUTDLG
419
420 frame->SetMenuBar(menubar);
421
422 myCanvas = new MyCanvas(frame);
423 myCanvas->SetBackgroundColour(*wxWHITE);
424
425 frame->Centre(wxBOTH);
426
427 // Show the frame
428 frame->Show(true);
429
430 SetTopWindow(frame);
431
432 return true;
433}
434
435// My frame constructor
436MyFrame::MyFrame(wxWindow *parent,
437 const wxString& title)
438 : wxFrame(parent, wxID_ANY, title)
439{
440 SetIcon(sample_xpm);
441
442#if USE_MODAL_PRESENTATION
443 m_dialog = (MyModelessDialog *)NULL;
444#endif // USE_MODAL_PRESENTATION
445
446#if wxUSE_FINDREPLDLG
447 m_dlgFind =
448 m_dlgReplace = NULL;
449#endif
450
451#if wxUSE_COLOURDLG
452 m_clrData.SetChooseFull(true);
453 for (int i = 0; i < 16; i++)
454 {
455 m_clrData.SetCustomColour(
456 i,
457 wxColour(
458 (unsigned char)(i*16),
459 (unsigned char)(i*16),
460 (unsigned char)(i*16)
461 )
462 );
463 }
464#endif // wxUSE_COLOURDLG
465
466#if wxUSE_STATUSBAR
467 CreateStatusBar();
468#endif // wxUSE_STATUSBAR
469}
470
471#if wxUSE_COLOURDLG
472void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) )
473{
474 m_clrData.SetColour(myCanvas->GetBackgroundColour());
475
476 wxColourDialog dialog(this, &m_clrData);
477 dialog.SetTitle(_T("Choose the background colour"));
478 if (dialog.ShowModal() == wxID_OK)
479 {
480 m_clrData = dialog.GetColourData();
481 myCanvas->SetBackgroundColour(m_clrData.GetColour());
482 myCanvas->ClearBackground();
483 myCanvas->Refresh();
484 }
485}
486#endif // wxUSE_COLOURDLG
487
488#if USE_COLOURDLG_GENERIC
489void MyFrame::ChooseColourGeneric(wxCommandEvent& WXUNUSED(event))
490{
491 m_clrData.SetColour(myCanvas->GetBackgroundColour());
492
493 //FIXME:TODO:This has no effect...
494 m_clrData.SetChooseFull(true);
495
496 for (int i = 0; i < 16; i++)
497 {
498 wxColour colour(
499 (unsigned char)(i*16),
500 (unsigned char)(i*16),
501 (unsigned char)(i*16)
502 );
503 m_clrData.SetCustomColour(i, colour);
504 }
505
506 wxGenericColourDialog *dialog = new wxGenericColourDialog(this, &m_clrData);
507 if (dialog->ShowModal() == wxID_OK)
508 {
509 m_clrData = dialog->GetColourData();
510 myCanvas->SetBackgroundColour(m_clrData.GetColour());
511 myCanvas->ClearBackground();
512 myCanvas->Refresh();
513 }
514 dialog->Destroy();
515}
516#endif // USE_COLOURDLG_GENERIC
517
518#if wxUSE_FONTDLG
519void MyFrame::ChooseFont(wxCommandEvent& WXUNUSED(event) )
520{
521 wxFontData data;
522 data.SetInitialFont(wxGetApp().m_canvasFont);
523 data.SetColour(wxGetApp().m_canvasTextColour);
524
525 // you might also do this:
526 //
527 // wxFontDialog dialog;
528 // if ( !dialog.Create(this, data) { ... error ... }
529 //
530 wxFontDialog dialog(this, data);
531
532 if (dialog.ShowModal() == wxID_OK)
533 {
534 wxFontData retData = dialog.GetFontData();
535 wxGetApp().m_canvasFont = retData.GetChosenFont();
536 wxGetApp().m_canvasTextColour = retData.GetColour();
537 myCanvas->Refresh();
538 }
539 //else: cancelled by the user, don't change the font
540}
541#endif // wxUSE_FONTDLG
542
543#if USE_FONTDLG_GENERIC
544void MyFrame::ChooseFontGeneric(wxCommandEvent& WXUNUSED(event) )
545{
546 wxFontData data;
547 data.SetInitialFont(wxGetApp().m_canvasFont);
548 data.SetColour(wxGetApp().m_canvasTextColour);
549
550 wxGenericFontDialog *dialog = new wxGenericFontDialog(this, data);
551 if (dialog->ShowModal() == wxID_OK)
552 {
553 wxFontData retData = dialog->GetFontData();
554 wxGetApp().m_canvasFont = retData.GetChosenFont();
555 wxGetApp().m_canvasTextColour = retData.GetColour();
556 myCanvas->Refresh();
557 }
558 dialog->Destroy();
559}
560#endif // USE_FONTDLG_GENERIC
561
562#if wxUSE_LOG_DIALOG
563void MyFrame::LogDialog(wxCommandEvent& WXUNUSED(event))
564{
565 // calling wxYield() (as ~wxBusyCursor does) shouldn't result in messages
566 // being flushed -- test it
567 {
568 wxBusyCursor bc;
569 wxLogMessage(wxT("This is some message - everything is ok so far."));
570 wxLogMessage(wxT("Another message...\n... this one is on multiple lines"));
571 wxLogWarning(wxT("And then something went wrong!"));
572
573 // and if ~wxBusyCursor doesn't do it, then call it manually
574 wxYield();
575 }
576
577 wxLogError(wxT("Intermediary error handler decided to abort."));
578 wxLogError(wxT("The top level caller detected an unrecoverable error."));
579
580 wxLog::FlushActive();
581
582 wxLogMessage(wxT("And this is the same dialog but with only one message."));
583}
584#endif // wxUSE_LOG_DIALOG
585
586void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event) )
587{
588 wxMessageDialog dialog( NULL, _T("This is a message box\nA long, long string to test out the message box properly"),
589 _T("Message box text"), wxNO_DEFAULT|wxYES_NO|wxCANCEL|wxICON_INFORMATION);
590
591 switch ( dialog.ShowModal() )
592 {
593 case wxID_YES:
594 wxLogStatus(wxT("You pressed \"Yes\""));
595 break;
596
597 case wxID_NO:
598 wxLogStatus(wxT("You pressed \"No\""));
599 break;
600
601 case wxID_CANCEL:
602 wxLogStatus(wxT("You pressed \"Cancel\""));
603 break;
604
605 default:
606 wxLogError(wxT("Unexpected wxMessageDialog return code!"));
607 }
608}
609
610#if wxUSE_NUMBERDLG
611void MyFrame::NumericEntry(wxCommandEvent& WXUNUSED(event) )
612{
613 long res = wxGetNumberFromUser( _T("This is some text, actually a lot of text.\n")
614 _T("Even two rows of text."),
615 _T("Enter a number:"), _T("Numeric input test"),
616 50, 0, 100, this );
617
618 wxString msg;
619 int icon;
620 if ( res == -1 )
621 {
622 msg = _T("Invalid number entered or dialog cancelled.");
623 icon = wxICON_HAND;
624 }
625 else
626 {
627 msg.Printf(_T("You've entered %lu"), res );
628 icon = wxICON_INFORMATION;
629 }
630
631 wxMessageBox(msg, _T("Numeric test result"), wxOK | icon, this);
632}
633#endif // wxUSE_NUMBERDLG
634
635#if wxUSE_TEXTDLG
636void MyFrame::PasswordEntry(wxCommandEvent& WXUNUSED(event))
637{
638 wxString pwd = wxGetPasswordFromUser(_T("Enter password:"),
639 _T("Password entry dialog"),
640 wxEmptyString,
641 this);
642 if ( !pwd.empty() )
643 {
644 wxMessageBox(wxString::Format(wxT("Your password is '%s'"), pwd.c_str()),
645 _T("Got password"), wxOK | wxICON_INFORMATION, this);
646 }
647}
648
649void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event))
650{
651 wxTextEntryDialog dialog(this,
652 _T("This is a small sample\n")
653 _T("A long, long string to test out the text entrybox"),
654 _T("Please enter a string"),
655 _T("Default value"),
656 wxOK | wxCANCEL);
657
658 if (dialog.ShowModal() == wxID_OK)
659 {
660 wxMessageBox(dialog.GetValue(), _T("Got string"), wxOK | wxICON_INFORMATION, this);
661 }
662}
663#endif // wxUSE_TEXTDLG
664
665#if wxUSE_CHOICEDLG
666void MyFrame::SingleChoice(wxCommandEvent& WXUNUSED(event) )
667{
668 const wxString choices[] = { _T("One"), _T("Two"), _T("Three"), _T("Four"), _T("Five") } ;
669
670 wxSingleChoiceDialog dialog(this,
671 _T("This is a small sample\n")
672 _T("A single-choice convenience dialog"),
673 _T("Please select a value"),
674 WXSIZEOF(choices), choices);
675
676 dialog.SetSelection(2);
677
678 if (dialog.ShowModal() == wxID_OK)
679 {
680 wxMessageDialog dialog2(this, dialog.GetStringSelection(), _T("Got string"));
681 dialog2.ShowModal();
682 }
683}
684
685void MyFrame::MultiChoice(wxCommandEvent& WXUNUSED(event) )
686{
687 const wxString choices[] =
688 {
689 _T("One"), _T("Two"), _T("Three"), _T("Four"), _T("Five"),
690 _T("Six"), _T("Seven"), _T("Eight"), _T("Nine"), _T("Ten"),
691 _T("Eleven"), _T("Twelve"), _T("Seventeen"),
692 };
693
694 wxArrayInt selections;
695 size_t count = wxGetMultipleChoices(selections,
696 _T("This is a small sample\n")
697 _T("A multi-choice convenience dialog"),
698 _T("Please select a value"),
699 WXSIZEOF(choices), choices,
700 this);
701 if ( count )
702 {
703 wxString msg;
704 msg.Printf(wxT("You selected %u items:\n"), (unsigned)count);
705 for ( size_t n = 0; n < count; n++ )
706 {
707 msg += wxString::Format(wxT("\t%u: %u (%s)\n"),
708 (unsigned)n, (unsigned)selections[n],
709 choices[selections[n]].c_str());
710 }
711 wxLogMessage(msg);
712 }
713 //else: cancelled or nothing selected
714}
715#endif // wxUSE_CHOICEDLG
716
717#if wxUSE_FILEDLG
718void MyFrame::FileOpen(wxCommandEvent& WXUNUSED(event) )
719{
720 wxFileDialog dialog
721 (
722 this,
723 _T("Testing open file dialog"),
724 wxEmptyString,
725 wxEmptyString,
726#ifdef __WXMOTIF__
727 _T("C++ files (*.cpp)|*.cpp")
728#else
729 _T("C++ files (*.cpp;*.h)|*.cpp;*.h")
730#endif
731 );
732
733 dialog.CentreOnParent();
734 dialog.SetDirectory(wxGetHomeDir());
735
736 if (dialog.ShowModal() == wxID_OK)
737 {
738 wxString info;
739 info.Printf(_T("Full file name: %s\n")
740 _T("Path: %s\n")
741 _T("Name: %s"),
742 dialog.GetPath().c_str(),
743 dialog.GetDirectory().c_str(),
744 dialog.GetFilename().c_str());
745 wxMessageDialog dialog2(this, info, _T("Selected file"));
746 dialog2.ShowModal();
747 }
748}
749
750// this shows how to take advantage of specifying a default extension in the
751// call to wxFileSelector: it is remembered after each new call and the next
752// one will use it by default
753void MyFrame::FileOpen2(wxCommandEvent& WXUNUSED(event) )
754{
755 static wxString s_extDef;
756 wxString path = wxFileSelector(
757 _T("Select the file to load"),
758 wxEmptyString, wxEmptyString,
759 s_extDef,
760 wxString::Format
761 (
762 _T("Waveform (*.wav)|*.wav|Plain text (*.txt)|*.txt|All files (%s)|%s"),
763 wxFileSelectorDefaultWildcardStr,
764 wxFileSelectorDefaultWildcardStr
765 ),
766 wxFD_OPEN|wxFD_CHANGE_DIR|wxFD_PREVIEW,
767 this
768 );
769
770 if ( !path )
771 return;
772
773 // it is just a sample, would use wxSplitPath in real program
774 s_extDef = path.AfterLast(_T('.'));
775
776 wxLogMessage(_T("You selected the file '%s', remembered extension '%s'"),
777 (const wxChar*) path, (const wxChar*) s_extDef);
778}
779
780void MyFrame::FilesOpen(wxCommandEvent& WXUNUSED(event) )
781{
782 wxString wildcards =
783#ifdef __WXMOTIF__
784 _T("C++ files (*.cpp)|*.cpp");
785#else
786 wxString::Format
787 (
788 _T("All files (%s)|%s|C++ files (*.cpp;*.h)|*.cpp;*.h"),
789 wxFileSelectorDefaultWildcardStr,
790 wxFileSelectorDefaultWildcardStr
791 );
792#endif
793 wxFileDialog dialog(this, _T("Testing open multiple file dialog"),
794 wxEmptyString, wxEmptyString, wildcards,
795 wxFD_OPEN|wxFD_MULTIPLE);
796
797 if (dialog.ShowModal() == wxID_OK)
798 {
799 wxArrayString paths, filenames;
800
801 dialog.GetPaths(paths);
802 dialog.GetFilenames(filenames);
803
804 wxString msg, s;
805 size_t count = paths.GetCount();
806 for ( size_t n = 0; n < count; n++ )
807 {
808 s.Printf(_T("File %d: %s (%s)\n"),
809 (int)n, paths[n].c_str(), filenames[n].c_str());
810
811 msg += s;
812 }
813 s.Printf(_T("Filter index: %d"), dialog.GetFilterIndex());
814 msg += s;
815
816 wxMessageDialog dialog2(this, msg, _T("Selected files"));
817 dialog2.ShowModal();
818 }
819}
820
821void MyFrame::FileSave(wxCommandEvent& WXUNUSED(event) )
822{
823 wxFileDialog dialog(this,
824 _T("Testing save file dialog"),
825 wxEmptyString,
826 _T("myletter.doc"),
827 _T("Text files (*.txt)|*.txt|Document files (*.doc)|*.doc"),
828 wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
829
830 dialog.SetFilterIndex(1);
831
832 if (dialog.ShowModal() == wxID_OK)
833 {
834 wxLogMessage(_T("%s, filter %d"),
835 dialog.GetPath().c_str(), dialog.GetFilterIndex());
836 }
837}
838#endif // wxUSE_FILEDLG
839
840#if USE_FILEDLG_GENERIC
841void MyFrame::FileOpenGeneric(wxCommandEvent& WXUNUSED(event) )
842{
843 wxGenericFileDialog dialog
844 (
845 this,
846 _T("Testing open file dialog"),
847 wxEmptyString,
848 wxEmptyString,
849 _T("C++ files (*.cpp;*.h)|*.cpp;*.h")
850 );
851
852 dialog.SetDirectory(wxGetHomeDir());
853
854 if (dialog.ShowModal() == wxID_OK)
855 {
856 wxString info;
857 info.Printf(_T("Full file name: %s\n")
858 _T("Path: %s\n")
859 _T("Name: %s"),
860 dialog.GetPath().c_str(),
861 dialog.GetDirectory().c_str(),
862 dialog.GetFilename().c_str());
863 wxMessageDialog dialog2(this, info, _T("Selected file"));
864 dialog2.ShowModal();
865 }
866}
867
868void MyFrame::FilesOpenGeneric(wxCommandEvent& WXUNUSED(event) )
869{
870 // On PocketPC you can disable OK-only dialogs policy using system option
871 int buttons = wxSystemOptions::GetOptionInt(wxT("wince.dialog.real-ok-cancel"));
872 wxSystemOptions::SetOption(wxT("wince.dialog.real-ok-cancel"), 1);
873
874 wxString wildcards = _T("All files (*.*)|*.*|C++ files (*.cpp;*.h)|*.cpp;*.h");
875 wxGenericFileDialog dialog(this, _T("Testing open multiple file dialog"),
876 wxEmptyString, wxEmptyString, wildcards,
877 wxFD_MULTIPLE);
878
879 if (dialog.ShowModal() == wxID_OK)
880 {
881 wxArrayString paths, filenames;
882
883 dialog.GetPaths(paths);
884 dialog.GetFilenames(filenames);
885
886 wxString msg, s;
887 size_t count = paths.GetCount();
888 for ( size_t n = 0; n < count; n++ )
889 {
890 s.Printf(_T("File %d: %s (%s)\n"),
891 (int)n, paths[n].c_str(), filenames[n].c_str());
892
893 msg += s;
894 }
895 s.Printf(_T("Filter index: %d"), dialog.GetFilterIndex());
896 msg += s;
897
898 wxMessageDialog dialog2(this, msg, _T("Selected files"));
899 dialog2.ShowModal();
900 }
901
902 // restore system option
903 wxSystemOptions::SetOption(wxT("wince.dialog.real-ok-cancel"), buttons);
904}
905
906void MyFrame::FileSaveGeneric(wxCommandEvent& WXUNUSED(event) )
907{
908 wxGenericFileDialog dialog(this,
909 _T("Testing save file dialog"),
910 wxEmptyString,
911 _T("myletter.doc"),
912 _T("Text files (*.txt)|*.txt|Document files (*.doc)|*.doc"),
913 wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
914
915 dialog.SetFilterIndex(1);
916
917 if (dialog.ShowModal() == wxID_OK)
918 {
919 wxLogMessage(_T("%s, filter %d"),
920 dialog.GetPath().c_str(), dialog.GetFilterIndex());
921 }
922}
923#endif // USE_FILEDLG_GENERIC
924
925#if wxUSE_DIRDLG
926void MyFrame::DoDirChoose(int style)
927{
928 // pass some initial dir to wxDirDialog
929 wxString dirHome;
930 wxGetHomeDir(&dirHome);
931
932 wxDirDialog dialog(this, _T("Testing directory picker"), dirHome, style);
933
934 if (dialog.ShowModal() == wxID_OK)
935 {
936 wxLogMessage(_T("Selected path: %s"), dialog.GetPath().c_str());
937 }
938}
939
940void MyFrame::DirChoose(wxCommandEvent& WXUNUSED(event) )
941{
942 DoDirChoose(wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST);
943}
944
945void MyFrame::DirChooseNew(wxCommandEvent& WXUNUSED(event) )
946{
947 DoDirChoose(wxDD_DEFAULT_STYLE & ~wxDD_DIR_MUST_EXIST);
948}
949#endif // wxUSE_DIRDLG
950
951#if USE_DIRDLG_GENERIC
952void MyFrame::GenericDirChoose(wxCommandEvent& WXUNUSED(event) )
953{
954 // pass some initial dir to wxDirDialog
955 wxString dirHome;
956 wxGetHomeDir(&dirHome);
957
958 wxGenericDirDialog dialog(this, _T("Testing generic directory picker"), dirHome);
959
960 if (dialog.ShowModal() == wxID_OK)
961 {
962 wxMessageDialog dialog2(this, dialog.GetPath(), _T("Selected path"));
963 dialog2.ShowModal();
964 }
965}
966#endif // USE_DIRDLG_GENERIC
967
968#if USE_MODAL_PRESENTATION
969void MyFrame::ModalDlg(wxCommandEvent& WXUNUSED(event))
970{
971 MyModalDialog dlg(this);
972 dlg.ShowModal();
973}
974
975void MyFrame::ModelessDlg(wxCommandEvent& event)
976{
977 bool show = GetMenuBar()->IsChecked(event.GetId());
978
979 if ( show )
980 {
981 if ( !m_dialog )
982 {
983 m_dialog = new MyModelessDialog(this);
984 }
985
986 m_dialog->Show(true);
987 }
988 else // hide
989 {
990 // If m_dialog is NULL, then possibly the system
991 // didn't report the checked menu item status correctly.
992 // It should be true just after the menu item was selected,
993 // if there was no modeless dialog yet.
994
995 wxASSERT( m_dialog != NULL );
996 if (m_dialog)
997 m_dialog->Hide();
998 }
999}
1000
1001void MyFrame::DlgCenteredScreen(wxCommandEvent& WXUNUSED(event))
1002{
1003 wxDialog dlg(this, wxID_ANY, _T("Dialog centered on screen"),
1004 wxDefaultPosition, wxSize(200, 100));
1005 (new wxButton(&dlg, wxID_OK, _T("Close")))->Centre();
1006 dlg.CentreOnScreen();
1007 dlg.ShowModal();
1008}
1009
1010void MyFrame::DlgCenteredParent(wxCommandEvent& WXUNUSED(event))
1011{
1012 wxDialog dlg(this, wxID_ANY, _T("Dialog centered on parent"),
1013 wxDefaultPosition, wxSize(200, 100));
1014 (new wxButton(&dlg, wxID_OK, _T("Close")))->Centre();
1015 dlg.CentreOnParent();
1016 dlg.ShowModal();
1017}
1018
1019#endif // USE_MODAL_PRESENTATION
1020
1021#if wxUSE_STARTUP_TIPS
1022void MyFrame::ShowTip(wxCommandEvent& WXUNUSED(event))
1023{
1024 static size_t s_index = (size_t)-1;
1025
1026 if ( s_index == (size_t)-1 )
1027 {
1028 srand(time(NULL));
1029
1030 // this is completely bogus, we don't know how many lines are there
1031 // in the file, but who cares, it's a demo only...
1032 s_index = rand() % 5;
1033 }
1034
1035 wxTipProvider *tipProvider = wxCreateFileTipProvider(_T("tips.txt"), s_index);
1036
1037 bool showAtStartup = wxShowTip(this, tipProvider);
1038
1039 if ( showAtStartup )
1040 {
1041 wxMessageBox(_T("Will show tips on startup"), _T("Tips dialog"),
1042 wxOK | wxICON_INFORMATION, this);
1043 }
1044
1045 s_index = tipProvider->GetCurrentTip();
1046 delete tipProvider;
1047}
1048#endif // wxUSE_STARTUP_TIPS
1049
1050#if USE_SETTINGS_DIALOG
1051void MyFrame::OnPropertySheet(wxCommandEvent& event)
1052{
1053 SettingsDialog dialog(this, event.GetId());
1054 dialog.ShowModal();
1055}
1056#endif // USE_SETTINGS_DIALOG
1057
1058void MyFrame::OnRequestUserAttention(wxCommandEvent& WXUNUSED(event))
1059{
1060 wxLogStatus(_T("Sleeping for 3 seconds to allow you to switch to another window"));
1061
1062 wxSleep(3);
1063
1064 RequestUserAttention(wxUSER_ATTENTION_ERROR);
1065}
1066
1067void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event) )
1068{
1069 Close(true);
1070}
1071
1072#if wxUSE_PROGRESSDLG
1073
1074void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
1075{
1076 static const int max = 100;
1077
1078 wxProgressDialog dialog(_T("Progress dialog example"),
1079 _T("An informative message"),
1080 max, // range
1081 this, // parent
1082 wxPD_CAN_ABORT |
1083 wxPD_CAN_SKIP |
1084 wxPD_APP_MODAL |
1085 // wxPD_AUTO_HIDE | -- try this as well
1086 wxPD_ELAPSED_TIME |
1087 wxPD_ESTIMATED_TIME |
1088 wxPD_REMAINING_TIME
1089 | wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small
1090 );
1091
1092 bool cont = true;
1093 for ( int i = 0; i <= max; i++ )
1094 {
1095 wxMilliSleep(200);
1096
1097 wxString msg;
1098
1099 // test both modes of wxProgressDialog behaviour: start in
1100 // indeterminate mode but switch to the determinate one later
1101 const bool determinate = i > max/2;
1102
1103 if ( i == max )
1104 {
1105 msg = _T("That's all, folks!");
1106 }
1107 else if ( !determinate )
1108 {
1109 msg = _T("Testing indeterminate mode");
1110 }
1111 else if ( determinate )
1112 {
1113 msg = _T("Now in standard determinate mode");
1114 }
1115
1116 // will be set to true if "Skip" button was pressed
1117 bool skip = false;
1118 if ( determinate )
1119 {
1120 cont = dialog.Update(i, msg, &skip);
1121 }
1122 else
1123 {
1124 cont = dialog.Pulse(msg, &skip);
1125 }
1126
1127 // each skip will move progress about quarter forward
1128 if ( skip )
1129 i += max/4;
1130
1131 if ( !cont )
1132 {
1133 if ( wxMessageBox(_T("Do you really want to cancel?"),
1134 _T("Progress dialog question"), // caption
1135 wxYES_NO | wxICON_QUESTION) == wxYES )
1136 break;
1137
1138 cont = true;
1139 dialog.Resume();
1140 }
1141 }
1142
1143 if ( !cont )
1144 {
1145 wxLogStatus(wxT("Progress dialog aborted!"));
1146 }
1147 else
1148 {
1149 wxLogStatus(wxT("Countdown from %d finished"), max);
1150 }
1151}
1152
1153#endif // wxUSE_PROGRESSDLG
1154
1155#if wxUSE_ABOUTDLG
1156
1157static void InitAboutInfoMinimal(wxAboutDialogInfo& info)
1158{
1159 info.SetName(_T("Dialogs Sample"));
1160 info.SetVersion(wxVERSION_NUM_DOT_STRING_T);
1161 info.SetDescription(_T("This sample shows different wxWidgets dialogs"));
1162 info.SetCopyright(_T("(C) 1998-2006 wxWidgets dev team"));
1163 info.AddDeveloper(_T("Vadim Zeitlin"));
1164}
1165
1166static void InitAboutInfoWebsite(wxAboutDialogInfo& info)
1167{
1168 InitAboutInfoMinimal(info);
1169
1170 info.SetWebSite(_T("http://www.wxwidgets.org/"), _T("wxWidgets web site"));
1171}
1172
1173static void InitAboutInfoAll(wxAboutDialogInfo& info)
1174{
1175 InitAboutInfoMinimal(info);
1176
1177 // we can add a second developer
1178 info.AddDeveloper(_T("A.N. Other"));
1179
1180 // or we can add several persons at once like this
1181 static const wxChar *docwriters[] =
1182 {
1183 _T("First D. Writer"),
1184 _T("Second One"),
1185 };
1186
1187 info.SetDocWriters(wxArrayString(WXSIZEOF(docwriters), docwriters));
1188 info.SetLicence(wxString::FromAscii(
1189" wxWindows Library Licence, Version 3.1\n"
1190" ======================================\n"
1191"\n"
1192" Copyright (c) 1998-2005 Julian Smart, Robert Roebling et al\n"
1193"\n"
1194" Everyone is permitted to copy and distribute verbatim copies\n"
1195" of this licence document, but changing it is not allowed.\n"
1196"\n"
1197" WXWINDOWS LIBRARY LICENCE\n"
1198" TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
1199"\n"
1200" ...and so on and so forth...\n"
1201 ));
1202
1203 info.AddTranslator(_T("Wun Ngo Wen (Martian)"));
1204}
1205
1206void MyFrame::ShowSimpleAboutDialog(wxCommandEvent& WXUNUSED(event))
1207{
1208 wxAboutDialogInfo info;
1209 InitAboutInfoMinimal(info);
1210
1211 wxAboutBox(info);
1212}
1213
1214void MyFrame::ShowFancyAboutDialog(wxCommandEvent& WXUNUSED(event))
1215{
1216 wxAboutDialogInfo info;
1217 InitAboutInfoWebsite(info);
1218
1219 wxAboutBox(info);
1220}
1221
1222void MyFrame::ShowFullAboutDialog(wxCommandEvent& WXUNUSED(event))
1223{
1224 wxAboutDialogInfo info;
1225 InitAboutInfoAll(info);
1226
1227 wxAboutBox(info);
1228}
1229
1230// a trivial example of a custom dialog class
1231class MyAboutDialog : public wxGenericAboutDialog
1232{
1233public:
1234 MyAboutDialog(const wxAboutDialogInfo& info)
1235 {
1236 Create(info);
1237 }
1238
1239 // add some custom controls
1240 virtual void DoAddCustomControls()
1241 {
1242 AddControl(new wxStaticLine(this), wxSizerFlags().Expand());
1243 AddText(_T("Some custom text"));
1244 AddControl(new wxStaticLine(this), wxSizerFlags().Expand());
1245 }
1246};
1247
1248void MyFrame::ShowCustomAboutDialog(wxCommandEvent& WXUNUSED(event))
1249{
1250 wxAboutDialogInfo info;
1251 InitAboutInfoAll(info);
1252
1253 MyAboutDialog dlg(info);
1254 dlg.ShowModal();
1255}
1256
1257#endif // wxUSE_ABOUTDLG
1258
1259#if wxUSE_BUSYINFO
1260
1261void MyFrame::ShowBusyInfo(wxCommandEvent& WXUNUSED(event))
1262{
1263 wxWindowDisabler disableAll;
1264
1265 wxBusyInfo info(_T("Working, please wait..."), this);
1266
1267 for ( int i = 0; i < 18; i++ )
1268 {
1269 //wxUsleep(100);
1270 wxTheApp->Yield();
1271 }
1272
1273 wxSleep(2);
1274 //wxWakeUpIdle();
1275}
1276
1277#endif // wxUSE_BUSYINFO
1278
1279#if wxUSE_FINDREPLDLG
1280
1281void MyFrame::ShowReplaceDialog( wxCommandEvent& WXUNUSED(event) )
1282{
1283 if ( m_dlgReplace )
1284 {
1285 delete m_dlgReplace;
1286 m_dlgReplace = NULL;
1287 }
1288 else
1289 {
1290 m_dlgReplace = new wxFindReplaceDialog
1291 (
1292 this,
1293 &m_findData,
1294 _T("Find and replace dialog"),
1295 wxFR_REPLACEDIALOG
1296 );
1297
1298 m_dlgReplace->Show(true);
1299 }
1300}
1301
1302void MyFrame::ShowFindDialog( wxCommandEvent& WXUNUSED(event) )
1303{
1304 if ( m_dlgFind )
1305 {
1306 delete m_dlgFind;
1307 m_dlgFind = NULL;
1308 }
1309 else
1310 {
1311 m_dlgFind = new wxFindReplaceDialog
1312 (
1313 this,
1314 &m_findData,
1315 _T("Find dialog"),
1316 // just for testing
1317 wxFR_NOWHOLEWORD
1318 );
1319
1320 m_dlgFind->Show(true);
1321 }
1322}
1323
1324static wxString DecodeFindDialogEventFlags(int flags)
1325{
1326 wxString str;
1327 str << (flags & wxFR_DOWN ? _T("down") : _T("up")) << _T(", ")
1328 << (flags & wxFR_WHOLEWORD ? _T("whole words only, ") : _T(""))
1329 << (flags & wxFR_MATCHCASE ? _T("") : _T("not "))
1330 << _T("case sensitive");
1331
1332 return str;
1333}
1334
1335void MyFrame::OnFindDialog(wxFindDialogEvent& event)
1336{
1337 wxEventType type = event.GetEventType();
1338
1339 if ( type == wxEVT_COMMAND_FIND || type == wxEVT_COMMAND_FIND_NEXT )
1340 {
1341 wxLogMessage(wxT("Find %s'%s' (flags: %s)"),
1342 type == wxEVT_COMMAND_FIND_NEXT ? wxT("next ") : wxT(""),
1343 event.GetFindString().c_str(),
1344 DecodeFindDialogEventFlags(event.GetFlags()).c_str());
1345 }
1346 else if ( type == wxEVT_COMMAND_FIND_REPLACE ||
1347 type == wxEVT_COMMAND_FIND_REPLACE_ALL )
1348 {
1349 wxLogMessage(wxT("Replace %s'%s' with '%s' (flags: %s)"),
1350 type == wxEVT_COMMAND_FIND_REPLACE_ALL ? _T("all ") : wxT(""),
1351 event.GetFindString().c_str(),
1352 event.GetReplaceString().c_str(),
1353 DecodeFindDialogEventFlags(event.GetFlags()).c_str());
1354 }
1355 else if ( type == wxEVT_COMMAND_FIND_CLOSE )
1356 {
1357 wxFindReplaceDialog *dlg = event.GetDialog();
1358
1359 int idMenu;
1360 const wxChar *txt;
1361 if ( dlg == m_dlgFind )
1362 {
1363 txt = _T("Find");
1364 idMenu = DIALOGS_FIND;
1365 m_dlgFind = NULL;
1366 }
1367 else if ( dlg == m_dlgReplace )
1368 {
1369 txt = _T("Replace");
1370 idMenu = DIALOGS_REPLACE;
1371 m_dlgReplace = NULL;
1372 }
1373 else
1374 {
1375 txt = _T("Unknown");
1376 idMenu = wxID_ANY;
1377
1378 wxFAIL_MSG( _T("unexpected event") );
1379 }
1380
1381 wxLogMessage(wxT("%s dialog is being closed."), txt);
1382
1383 if ( idMenu != wxID_ANY )
1384 {
1385 GetMenuBar()->Check(idMenu, false);
1386 }
1387
1388 dlg->Destroy();
1389 }
1390 else
1391 {
1392 wxLogError(wxT("Unknown find dialog event!"));
1393 }
1394}
1395
1396#endif // wxUSE_FINDREPLDLG
1397
1398// ----------------------------------------------------------------------------
1399// MyCanvas
1400// ----------------------------------------------------------------------------
1401
1402void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event) )
1403{
1404 wxPaintDC dc(this);
1405 dc.SetFont(wxGetApp().m_canvasFont);
1406 dc.SetTextForeground(wxGetApp().m_canvasTextColour);
1407 dc.SetBackgroundMode(wxTRANSPARENT);
1408 dc.DrawText(
1409 _T("wxWidgets common dialogs")
1410#if !defined(__SMARTPHONE__)
1411 _T(" test application")
1412#endif
1413 , 10, 10);
1414}
1415
1416#if USE_MODAL_PRESENTATION
1417
1418// ----------------------------------------------------------------------------
1419// MyModelessDialog
1420// ----------------------------------------------------------------------------
1421
1422MyModelessDialog::MyModelessDialog(wxWindow *parent)
1423 : wxDialog(parent, wxID_ANY, wxString(_T("Modeless dialog")))
1424{
1425 wxBoxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
1426
1427 wxButton *btn = new wxButton(this, DIALOGS_MODELESS_BTN, _T("Press me"));
1428 wxCheckBox *check = new wxCheckBox(this, wxID_ANY, _T("Should be disabled"));
1429 check->Disable();
1430
1431 sizerTop->Add(btn, 1, wxEXPAND | wxALL, 5);
1432 sizerTop->Add(check, 1, wxEXPAND | wxALL, 5);
1433
1434 SetSizer(sizerTop);
1435
1436 sizerTop->SetSizeHints(this);
1437 sizerTop->Fit(this);
1438}
1439
1440void MyModelessDialog::OnButton(wxCommandEvent& WXUNUSED(event))
1441{
1442 wxMessageBox(_T("Button pressed in modeless dialog"), _T("Info"),
1443 wxOK | wxICON_INFORMATION, this);
1444}
1445
1446void MyModelessDialog::OnClose(wxCloseEvent& event)
1447{
1448 if ( event.CanVeto() )
1449 {
1450 wxMessageBox(_T("Use the menu item to close this dialog"),
1451 _T("Modeless dialog"),
1452 wxOK | wxICON_INFORMATION, this);
1453
1454 event.Veto();
1455 }
1456}
1457
1458// ----------------------------------------------------------------------------
1459// MyModalDialog
1460// ----------------------------------------------------------------------------
1461
1462MyModalDialog::MyModalDialog(wxWindow *parent)
1463 : wxDialog(parent, wxID_ANY, wxString(_T("Modal dialog")))
1464{
1465 wxBoxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
1466
1467 m_btnModal = new wxButton(this, wxID_ANY, _T("&Modal dialog..."));
1468 m_btnModeless = new wxButton(this, wxID_ANY, _T("Mode&less dialog"));
1469 m_btnDelete = new wxButton(this, wxID_ANY, _T("&Delete button"));
1470
1471 wxButton *btnOk = new wxButton(this, wxID_CANCEL, _T("&Close"));
1472 sizerTop->Add(m_btnModal, 0, wxALIGN_CENTER | wxALL, 5);
1473 sizerTop->Add(m_btnModeless, 0, wxALIGN_CENTER | wxALL, 5);
1474 sizerTop->Add(m_btnDelete, 0, wxALIGN_CENTER | wxALL, 5);
1475 sizerTop->Add(btnOk, 0, wxALIGN_CENTER | wxALL, 5);
1476
1477 SetSizer(sizerTop);
1478
1479 sizerTop->SetSizeHints(this);
1480 sizerTop->Fit(this);
1481
1482 m_btnModal->SetFocus();
1483 m_btnModal->SetDefault();
1484}
1485
1486void MyModalDialog::OnButton(wxCommandEvent& event)
1487{
1488 if ( event.GetEventObject() == m_btnDelete )
1489 {
1490 delete m_btnModal;
1491 m_btnModal = NULL;
1492
1493 m_btnDelete->Disable();
1494 }
1495 else if ( event.GetEventObject() == m_btnModal )
1496 {
1497#if wxUSE_TEXTDLG
1498 wxGetTextFromUser(_T("Dummy prompt"),
1499 _T("Modal dialog called from dialog"),
1500 wxEmptyString, this);
1501#else
1502 wxMessageBox(_T("Modal dialog called from dialog"));
1503#endif // wxUSE_TEXTDLG
1504 }
1505 else if ( event.GetEventObject() == m_btnModeless )
1506 {
1507 (new MyModelessDialog(this))->Show();
1508 }
1509 else
1510 {
1511 event.Skip();
1512 }
1513}
1514
1515#endif // USE_MODAL_PRESENTATION
1516
1517#if USE_SETTINGS_DIALOG
1518// ----------------------------------------------------------------------------
1519// SettingsDialog
1520// ----------------------------------------------------------------------------
1521
1522IMPLEMENT_CLASS(SettingsDialog, wxPropertySheetDialog)
1523
1524BEGIN_EVENT_TABLE(SettingsDialog, wxPropertySheetDialog)
1525END_EVENT_TABLE()
1526
1527SettingsDialog::SettingsDialog(wxWindow* win, int dialogType)
1528{
1529 SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);
1530
1531 int tabImage1 = -1;
1532 int tabImage2 = -1;
1533
1534 bool useToolBook = (dialogType == DIALOGS_PROPERTY_SHEET_TOOLBOOK || dialogType == DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK);
1535 int resizeBorder = wxRESIZE_BORDER;
1536
1537 if (useToolBook)
1538 {
1539 resizeBorder = 0;
1540 tabImage1 = 0;
1541 tabImage2 = 1;
1542
1543 int sheetStyle = wxPROPSHEET_SHRINKTOFIT;
1544 if (dialogType == DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK)
1545 sheetStyle |= wxPROPSHEET_BUTTONTOOLBOOK;
1546 else
1547 sheetStyle |= wxPROPSHEET_TOOLBOOK;
1548
1549 SetSheetStyle(sheetStyle);
1550 SetSheetInnerBorder(0);
1551 SetSheetOuterBorder(0);
1552
1553 // create a dummy image list with a few icons
1554 const wxSize imageSize(32, 32);
1555
1556 m_imageList = new wxImageList(imageSize.GetWidth(), imageSize.GetHeight());
1557 m_imageList->
1558 Add(wxArtProvider::GetIcon(wxART_INFORMATION, wxART_OTHER, imageSize));
1559 m_imageList->
1560 Add(wxArtProvider::GetIcon(wxART_QUESTION, wxART_OTHER, imageSize));
1561 m_imageList->
1562 Add(wxArtProvider::GetIcon(wxART_WARNING, wxART_OTHER, imageSize));
1563 m_imageList->
1564 Add(wxArtProvider::GetIcon(wxART_ERROR, wxART_OTHER, imageSize));
1565 }
1566 else
1567 m_imageList = NULL;
1568
1569 Create(win, wxID_ANY, _("Preferences"), wxDefaultPosition, wxDefaultSize,
1570 wxDEFAULT_DIALOG_STYLE| (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, resizeBorder)
1571 );
1572
1573 // If using a toolbook, also follow Mac style and don't create buttons
1574 if (!useToolBook)
1575 CreateButtons(wxOK | wxCANCEL |
1576 (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP)
1577 );
1578
1579 wxBookCtrlBase* notebook = GetBookCtrl();
1580 notebook->SetImageList(m_imageList);
1581
1582 wxPanel* generalSettings = CreateGeneralSettingsPage(notebook);
1583 wxPanel* aestheticSettings = CreateAestheticSettingsPage(notebook);
1584
1585 notebook->AddPage(generalSettings, _("General"), true, tabImage1);
1586 notebook->AddPage(aestheticSettings, _("Aesthetics"), false, tabImage2);
1587
1588 LayoutDialog();
1589}
1590
1591SettingsDialog::~SettingsDialog()
1592{
1593 delete m_imageList;
1594}
1595
1596wxPanel* SettingsDialog::CreateGeneralSettingsPage(wxWindow* parent)
1597{
1598 wxPanel* panel = new wxPanel(parent, wxID_ANY);
1599
1600 wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );
1601 wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );
1602
1603 //// LOAD LAST FILE
1604
1605 wxBoxSizer* itemSizer3 = new wxBoxSizer( wxHORIZONTAL );
1606 wxCheckBox* checkBox3 = new wxCheckBox(panel, ID_LOAD_LAST_PROJECT, _("&Load last project on startup"), wxDefaultPosition, wxDefaultSize);
1607 itemSizer3->Add(checkBox3, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
1608 item0->Add(itemSizer3, 0, wxGROW|wxALL, 0);
1609
1610 //// AUTOSAVE
1611
1612 wxString autoSaveLabel = _("&Auto-save every");
1613 wxString minsLabel = _("mins");
1614
1615 wxBoxSizer* itemSizer12 = new wxBoxSizer( wxHORIZONTAL );
1616 wxCheckBox* checkBox12 = new wxCheckBox(panel, ID_AUTO_SAVE, autoSaveLabel, wxDefaultPosition, wxDefaultSize);
1617
1618#if wxUSE_SPINCTRL
1619 wxSpinCtrl* spinCtrl12 = new wxSpinCtrl(panel, ID_AUTO_SAVE_MINS, wxEmptyString,
1620 wxDefaultPosition, wxSize(40, wxDefaultCoord), wxSP_ARROW_KEYS, 1, 60, 1);
1621#endif
1622
1623 itemSizer12->Add(checkBox12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
1624#if wxUSE_SPINCTRL
1625 itemSizer12->Add(spinCtrl12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
1626#endif
1627 itemSizer12->Add(new wxStaticText(panel, wxID_STATIC, minsLabel), 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
1628 item0->Add(itemSizer12, 0, wxGROW|wxALL, 0);
1629
1630 //// TOOLTIPS
1631
1632 wxBoxSizer* itemSizer8 = new wxBoxSizer( wxHORIZONTAL );
1633 wxCheckBox* checkBox6 = new wxCheckBox(panel, ID_SHOW_TOOLTIPS, _("Show &tooltips"), wxDefaultPosition, wxDefaultSize);
1634 itemSizer8->Add(checkBox6, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
1635 item0->Add(itemSizer8, 0, wxGROW|wxALL, 0);
1636
1637 topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );
1638
1639 panel->SetSizer(topSizer);
1640 topSizer->Fit(panel);
1641
1642 return panel;
1643}
1644
1645wxPanel* SettingsDialog::CreateAestheticSettingsPage(wxWindow* parent)
1646{
1647 wxPanel* panel = new wxPanel(parent, wxID_ANY);
1648
1649 wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );
1650 wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );
1651
1652 //// PROJECT OR GLOBAL
1653 wxString globalOrProjectChoices[2];
1654 globalOrProjectChoices[0] = _("&New projects");
1655 globalOrProjectChoices[1] = _("&This project");
1656
1657 wxRadioBox* projectOrGlobal = new wxRadioBox(panel, ID_APPLY_SETTINGS_TO, _("&Apply settings to:"),
1658 wxDefaultPosition, wxDefaultSize, 2, globalOrProjectChoices);
1659 item0->Add(projectOrGlobal, 0, wxGROW|wxALL, 5);
1660
1661 projectOrGlobal->SetSelection(0);
1662
1663 //// BACKGROUND STYLE
1664 wxArrayString backgroundStyleChoices;
1665 backgroundStyleChoices.Add(wxT("Colour"));
1666 backgroundStyleChoices.Add(wxT("Image"));
1667 wxStaticBox* staticBox3 = new wxStaticBox(panel, wxID_ANY, _("Background style:"));
1668
1669 wxBoxSizer* styleSizer = new wxStaticBoxSizer( staticBox3, wxVERTICAL );
1670 item0->Add(styleSizer, 0, wxGROW|wxALL, 5);
1671
1672 wxBoxSizer* itemSizer2 = new wxBoxSizer( wxHORIZONTAL );
1673
1674 wxChoice* choice2 = new wxChoice(panel, ID_BACKGROUND_STYLE, wxDefaultPosition, wxDefaultSize, backgroundStyleChoices);
1675
1676 itemSizer2->Add(new wxStaticText(panel, wxID_ANY, _("&Window:")), 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
1677 itemSizer2->Add(5, 5, 1, wxALL, 0);
1678 itemSizer2->Add(choice2, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
1679
1680 styleSizer->Add(itemSizer2, 0, wxGROW|wxALL, 5);
1681
1682#if wxUSE_SPINCTRL
1683 //// FONT SIZE SELECTION
1684
1685 wxStaticBox* staticBox1 = new wxStaticBox(panel, wxID_ANY, _("Tile font size:"));
1686 wxBoxSizer* itemSizer5 = new wxStaticBoxSizer( staticBox1, wxHORIZONTAL );
1687
1688 wxSpinCtrl* spinCtrl = new wxSpinCtrl(panel, ID_FONT_SIZE, wxEmptyString, wxDefaultPosition,
1689 wxSize(80, wxDefaultCoord));
1690 itemSizer5->Add(spinCtrl, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
1691
1692 item0->Add(itemSizer5, 0, wxGROW|wxLEFT|wxRIGHT, 5);
1693#endif
1694
1695 topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );
1696 topSizer->AddSpacer(5);
1697
1698 panel->SetSizer(topSizer);
1699 topSizer->Fit(panel);
1700
1701 return panel;
1702}
1703
1704#endif // USE_SETTINGS_DIALOG