]> git.saurik.com Git - wxWidgets.git/blame_incremental - samples/controls/controls.cpp
added wxEncodingConverter - scripts for creating convertion tables
[wxWidgets.git] / samples / controls / controls.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: controls.cpp
3// Purpose: Controls wxWindows sample
4// Author: Robert Roebling
5// Modified by:
6// RCS-ID: $Id$
7// Copyright: (c) Robert Roebling, Julian Smart
8// Licence: wxWindows license
9/////////////////////////////////////////////////////////////////////////////
10
11#ifdef __GNUG__
12 #pragma implementation "controls.h"
13#endif
14
15// For compilers that support precompilation, includes "wx/wx.h".
16#include "wx/wxprec.h"
17
18#ifdef __BORLANDC__
19 #pragma hdrstop
20#endif
21
22#ifndef WX_PRECOMP
23 #include "wx/wx.h"
24#endif
25
26#if !defined( __WXMSW__ ) || defined( __WIN95__ )
27#include "wx/spinbutt.h"
28#endif
29#include "wx/notebook.h"
30#include "wx/imaglist.h"
31
32#if wxUSE_TOOLTIPS
33 #include "wx/tooltip.h"
34#endif
35
36#if defined(__WXGTK__) || defined(__WXMOTIF__)
37 #define USE_XPM
38#endif
39
40#ifdef USE_XPM
41 #include "mondrian.xpm"
42 #include "icons/choice.xpm"
43 #include "icons/combo.xpm"
44 #include "icons/list.xpm"
45 #include "icons/radio.xpm"
46 #include "icons/text.xpm"
47 #include "icons/gauge.xpm"
48#endif
49
50#ifdef __WIN16__
51 // Win16 doesn't have them
52 #ifdef wxUSE_SPINBTN
53 #undef wxUSE_SPINBTN
54 #endif
55 #define wxUSE_SPINBTN 0
56#else
57 #ifndef wxUSE_SPINBTN
58 #define wxUSE_SPINBTN 1
59 #endif
60#endif // __WIN16__
61
62#include "wx/progdlg.h"
63
64#if wxUSE_SPINCTRL
65 #include "wx/spinctrl.h"
66#endif // wxUSE_SPINCTRL
67
68#include "wx/calctrl.h"
69
70//----------------------------------------------------------------------
71// class definitions
72//----------------------------------------------------------------------
73
74class MyApp: public wxApp
75{
76public:
77 bool OnInit();
78};
79
80class MyPanel: public wxPanel
81{
82public:
83 MyPanel(wxFrame *frame, int x, int y, int w, int h);
84 virtual ~MyPanel();
85
86 void OnSize( wxSizeEvent& event );
87 void OnListBox( wxCommandEvent &event );
88 void OnListBoxDoubleClick( wxCommandEvent &event );
89 void OnListBoxButtons( wxCommandEvent &event );
90 void OnChoice( wxCommandEvent &event );
91 void OnChoiceButtons( wxCommandEvent &event );
92 void OnCombo( wxCommandEvent &event );
93 void OnComboButtons( wxCommandEvent &event );
94 void OnRadio( wxCommandEvent &event );
95 void OnRadioButtons( wxCommandEvent &event );
96 void OnSetFont( wxCommandEvent &event );
97 void OnPageChanged( wxNotebookEvent &event );
98 void OnPageChanging( wxNotebookEvent &event );
99 void OnSliderUpdate( wxCommandEvent &event );
100 void OnUpdateLabel( wxCommandEvent &event );
101#if wxUSE_SPINBTN
102 void OnSpinUp( wxSpinEvent &event );
103 void OnSpinDown( wxSpinEvent &event );
104 void OnSpinUpdate( wxSpinEvent &event );
105 void OnUpdateShowProgress( wxUpdateUIEvent& event );
106 void OnShowProgress( wxCommandEvent &event );
107#endif // wxUSE_SPINBTN
108
109#if wxUSE_SPINCTRL
110 void OnSpinCtrl(wxCommandEvent& event);
111#endif // wxUSE_SPINCTRL
112
113 void OnEnableAll(wxCommandEvent& event);
114 void OnChangeColour(wxCommandEvent& event);
115
116 void OnCalendar(wxCalendarEvent& event);
117 void OnCalendarWeekDayClick(wxCalendarEvent& event);
118 void OnCalendarChange(wxCalendarEvent& event);
119
120 wxListBox *m_listbox,
121 *m_listboxSorted;
122 wxChoice *m_choice,
123 *m_choiceSorted;
124 wxComboBox *m_combo;
125 wxRadioBox *m_radio;
126 wxGauge *m_gauge;
127 wxSlider *m_slider;
128 wxButton *m_fontButton;
129 wxButton *m_lbSelectNum;
130 wxButton *m_lbSelectThis;
131#if wxUSE_SPINBTN
132 wxSpinButton *m_spinbutton;
133 wxButton *m_btnProgress;
134#endif // wxUSE_SPINBTN
135
136#if wxUSE_SPINCTRL
137 wxSpinCtrl *m_spinctrl;
138#endif // wxUSE_SPINCTRL
139
140 wxTextCtrl *m_spintext;
141 wxCheckBox *m_checkbox;
142
143 wxTextCtrl *m_text;
144 wxNotebook *m_notebook;
145
146 wxStaticText *m_label;
147
148 wxCalendarCtrl *m_calendar;
149 wxStaticText *m_date;
150
151private:
152 DECLARE_EVENT_TABLE()
153};
154
155class MyFrame: public wxFrame
156{
157public:
158 MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
159
160 void OnQuit(wxCommandEvent& event);
161 void OnAbout(wxCommandEvent& event);
162
163#if wxUSE_TOOLTIPS
164 void OnSetTooltipDelay(wxCommandEvent& event);
165 void OnToggleTooltips(wxCommandEvent& event);
166#endif // wxUSE_TOOLTIPS
167
168 void OnEnableAll(wxCommandEvent& event);
169
170 void OnIdle( wxIdleEvent& event );
171 void OnSize( wxSizeEvent& event );
172 void OnMove( wxMoveEvent& event );
173
174 MyPanel *GetPanel() const { return m_panel; }
175
176private:
177 void UpdateStatusBar(const wxPoint& pos, const wxSize& size)
178 {
179 wxString msg;
180 msg.Printf(_("pos=(%d, %d), size=%dx%d"),
181 pos.x, pos.y, size.x, size.y);
182 SetStatusText(msg, 1);
183 }
184
185 MyPanel *m_panel;
186
187 DECLARE_EVENT_TABLE()
188};
189
190//----------------------------------------------------------------------
191// other
192//----------------------------------------------------------------------
193
194static void SetControlClientData(const char *name,
195 wxControlWithItems *control);
196
197IMPLEMENT_APP(MyApp)
198
199//----------------------------------------------------------------------
200// MyApp
201//----------------------------------------------------------------------
202
203enum
204{
205 MINIMAL_QUIT = 100,
206 MINIMAL_TEXT,
207 MINIMAL_ABOUT,
208
209 // tooltip menu
210 MINIMAL_SET_TOOLTIP_DELAY = 200,
211 MINIMAL_ENABLE_TOOLTIPS,
212
213 // panel menu
214 MINIMAL_ENABLE_ALL
215};
216
217bool MyApp::OnInit()
218{
219 // parse the cmd line
220 int x = 50,
221 y = 50;
222 if ( argc == 2 )
223 {
224 wxSscanf(argv[1], "%d", &x);
225 wxSscanf(argv[2], "%d", &y);
226 }
227
228 // Create the main frame window
229 MyFrame *frame = new MyFrame((wxFrame *) NULL,
230 "Controls wxWindows App",
231 x, y, 540, 430);
232
233 frame->SetSizeHints( 500, 425 );
234
235 // Give it an icon
236 // The wxICON() macros loads an icon from a resource under Windows
237 // and uses an #included XPM image under GTK+ and Motif
238
239 frame->SetIcon( wxICON(mondrian) );
240
241 wxMenu *file_menu = new wxMenu("", wxMENU_TEAROFF);
242
243 file_menu->Append(MINIMAL_ABOUT, "&About\tF1");
244 file_menu->AppendSeparator();
245 file_menu->Append(MINIMAL_QUIT, "E&xit\tAlt-X", "Quit controls sample");
246
247 wxMenuBar *menu_bar = new wxMenuBar;
248 menu_bar->Append(file_menu, "&File");
249
250#if wxUSE_TOOLTIPS
251 wxMenu *tooltip_menu = new wxMenu;
252 tooltip_menu->Append(MINIMAL_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
253 tooltip_menu->AppendSeparator();
254 tooltip_menu->Append(MINIMAL_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T",
255 "enable/disable tooltips", TRUE);
256 tooltip_menu->Check(MINIMAL_ENABLE_TOOLTIPS, TRUE);
257 menu_bar->Append(tooltip_menu, "&Tooltips");
258#endif // wxUSE_TOOLTIPS
259
260 wxMenu *panel_menu = new wxMenu;
261 panel_menu->Append(MINIMAL_ENABLE_ALL, "&Disable all\tCtrl-E",
262 "Enable/disable all panel controls", TRUE);
263 menu_bar->Append(panel_menu, "&Panel");
264
265 frame->SetMenuBar(menu_bar);
266
267 frame->Show(TRUE);
268 frame->SetCursor(wxCursor(wxCURSOR_HAND));
269
270 frame->GetPanel()->m_notebook->SetSelection(6);
271
272 SetTopWindow(frame);
273
274 return TRUE;
275}
276
277//----------------------------------------------------------------------
278// MyPanel
279//----------------------------------------------------------------------
280
281const int ID_NOTEBOOK = 1000;
282
283const int ID_LISTBOX = 130;
284const int ID_LISTBOX_SEL_NUM = 131;
285const int ID_LISTBOX_SEL_STR = 132;
286const int ID_LISTBOX_CLEAR = 133;
287const int ID_LISTBOX_APPEND = 134;
288const int ID_LISTBOX_DELETE = 135;
289const int ID_LISTBOX_FONT = 136;
290const int ID_LISTBOX_ENABLE = 137;
291const int ID_LISTBOX_SORTED = 138;
292
293const int ID_CHOICE = 120;
294const int ID_CHOICE_SEL_NUM = 121;
295const int ID_CHOICE_SEL_STR = 122;
296const int ID_CHOICE_CLEAR = 123;
297const int ID_CHOICE_APPEND = 124;
298const int ID_CHOICE_DELETE = 125;
299const int ID_CHOICE_FONT = 126;
300const int ID_CHOICE_ENABLE = 127;
301const int ID_CHOICE_SORTED = 128;
302
303const int ID_COMBO = 140;
304const int ID_COMBO_SEL_NUM = 141;
305const int ID_COMBO_SEL_STR = 142;
306const int ID_COMBO_CLEAR = 143;
307const int ID_COMBO_APPEND = 144;
308const int ID_COMBO_DELETE = 145;
309const int ID_COMBO_FONT = 146;
310const int ID_COMBO_ENABLE = 147;
311
312const int ID_RADIOBOX = 160;
313const int ID_RADIOBOX_SEL_NUM = 161;
314const int ID_RADIOBOX_SEL_STR = 162;
315const int ID_RADIOBOX_FONT = 163;
316const int ID_RADIOBOX_ENABLE = 164;
317
318const int ID_RADIOBUTTON_1 = 166;
319const int ID_RADIOBUTTON_2 = 167;
320
321const int ID_SET_FONT = 170;
322
323const int ID_GAUGE = 180;
324const int ID_SLIDER = 181;
325
326const int ID_SPIN = 182;
327const int ID_BTNPROGRESS = 183;
328const int ID_BUTTON_LABEL = 184;
329const int ID_SPINCTRL = 185;
330
331const int ID_CHANGE_COLOUR = 200;
332
333const int ID_CALENDAR = 210;
334
335BEGIN_EVENT_TABLE(MyPanel, wxPanel)
336EVT_SIZE ( MyPanel::OnSize)
337EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyPanel::OnPageChanging)
338EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
339EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
340EVT_LISTBOX (ID_LISTBOX_SORTED, MyPanel::OnListBox)
341EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
342EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
343EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
344EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
345EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
346EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
347EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
348EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
349EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
350EVT_CHOICE (ID_CHOICE_SORTED, MyPanel::OnChoice)
351EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
352EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
353EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
354EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
355EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
356EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
357EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
358EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
359EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
360EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
361EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
362EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
363EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
364EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
365EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
366EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
367EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
368EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
369EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
370EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
371EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
372EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
373#if wxUSE_SPINBTN
374EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
375EVT_SPIN_UP (ID_SPIN, MyPanel::OnSpinUp)
376EVT_SPIN_DOWN (ID_SPIN, MyPanel::OnSpinDown)
377EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress)
378EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress)
379#endif // wxUSE_SPINBTN
380#if wxUSE_SPINCTRL
381EVT_SPINCTRL (ID_SPINCTRL, MyPanel::OnSpinCtrl)
382#endif // wxUSE_SPINCTRL
383EVT_BUTTON (ID_BUTTON_LABEL, MyPanel::OnUpdateLabel)
384EVT_CHECKBOX (ID_CHANGE_COLOUR, MyPanel::OnChangeColour)
385
386EVT_CALENDAR (ID_CALENDAR, MyPanel::OnCalendar)
387EVT_CALENDAR_SEL_CHANGED(ID_CALENDAR, MyPanel::OnCalendarChange)
388EVT_CALENDAR_WEEKDAY_CLICKED(ID_CALENDAR, MyPanel::OnCalendarWeekDayClick)
389
390END_EVENT_TABLE()
391
392MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
393 : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ),
394 m_text(NULL), m_notebook(NULL)
395{
396 wxLayoutConstraints *c;
397
398 m_text = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE );
399 // m_text->SetBackgroundColour("wheat");
400
401 //delete wxLog::SetActiveTarget(new wxLogStderr);
402
403 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
404
405 wxString choices[] =
406 {
407 "This",
408 "is one of my",
409 "really",
410 "wonderful",
411 "examples."
412 };
413
414#ifdef USE_XPM
415 // image ids
416 enum
417 {
418 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
419 };
420
421 // fill the image list
422 wxImageList *imagelist = new wxImageList(32, 32);
423
424 imagelist-> Add( wxBitmap( list_xpm ));
425 imagelist-> Add( wxBitmap( choice_xpm ));
426 imagelist-> Add( wxBitmap( combo_xpm ));
427 imagelist-> Add( wxBitmap( text_xpm ));
428 imagelist-> Add( wxBitmap( radio_xpm ));
429 imagelist-> Add( wxBitmap( gauge_xpm ));
430 m_notebook->SetImageList(imagelist);
431#elif defined(__WXMSW__)
432 // load images from resources
433 enum
434 {
435 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
436 };
437 wxImageList *imagelist = new wxImageList(16, 16, FALSE, Image_Max);
438
439 static const char *s_iconNames[Image_Max] =
440 {
441 "list", "choice", "combo", "text", "radio", "gauge"
442 };
443
444 for ( size_t n = 0; n < Image_Max; n++ )
445 {
446 wxBitmap bmp(s_iconNames[n]);
447 if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) )
448 {
449 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
450 s_iconNames[n], n);
451 }
452 }
453
454 m_notebook->SetImageList(imagelist);
455#else
456
457 // No images for now
458#define Image_List -1
459#define Image_Choice -1
460#define Image_Combo -1
461#define Image_Text -1
462#define Image_Radio -1
463#define Image_Gauge -1
464#define Image_Max -1
465
466#endif
467
468 wxPanel *panel = new wxPanel(m_notebook);
469 m_listbox = new wxListBox( panel, ID_LISTBOX,
470 wxPoint(10,10), wxSize(120,70),
471 5, choices, wxLB_ALWAYS_SB );
472 m_listboxSorted = new wxListBox( panel, ID_LISTBOX_SORTED,
473 wxPoint(10,90), wxSize(120,70),
474 5, choices, wxLB_SORT );
475
476 SetControlClientData("listbox", m_listbox);
477 SetControlClientData("listbox", m_listboxSorted);
478
479 m_listbox->SetCursor(*wxCROSS_CURSOR);
480#if wxUSE_TOOLTIPS
481 m_listbox->SetToolTip( "This is a list box" );
482#endif // wxUSE_TOOLTIPS
483
484 m_lbSelectNum = new wxButton( panel, ID_LISTBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
485 m_lbSelectThis = new wxButton( panel, ID_LISTBOX_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
486 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
487 (void)new wxButton( panel, ID_LISTBOX_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
488 (void)new wxButton( panel, ID_LISTBOX_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
489 wxButton *button = new wxButton( panel, ID_LISTBOX_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
490
491 button->SetDefault();
492
493 button->SetForegroundColour(*wxBLUE);
494
495#if wxUSE_TOOLTIPS
496 button->SetToolTip( "Press here to set italic font" );
497#endif // wxUSE_TOOLTIPS
498
499 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "&Disable", wxPoint(20,170) );
500 m_checkbox->SetValue(FALSE);
501#if wxUSE_TOOLTIPS
502 m_checkbox->SetToolTip( "Click here to disable the listbox" );
503#endif // wxUSE_TOOLTIPS
504 (void)new wxCheckBox( panel, ID_CHANGE_COLOUR, "&Toggle colour",
505 wxPoint(110,170) );
506 m_notebook->AddPage(panel, "wxListBox", TRUE, Image_List);
507
508 panel = new wxPanel(m_notebook);
509 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices );
510 m_choiceSorted = new wxChoice( panel, ID_CHOICE_SORTED, wxPoint(10,70), wxSize(120,-1),
511 5, choices, wxCB_SORT );
512
513#ifndef __WXMOTIF__
514 SetControlClientData("choice", m_choice);
515 SetControlClientData("choice", m_choiceSorted);
516#endif
517
518 m_choice->SetSelection(2);
519 m_choice->SetBackgroundColour( "red" );
520 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
521 (void)new wxButton( panel, ID_CHOICE_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
522 (void)new wxButton( panel, ID_CHOICE_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
523 (void)new wxButton( panel, ID_CHOICE_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
524 (void)new wxButton( panel, ID_CHOICE_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
525 (void)new wxButton( panel, ID_CHOICE_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
526 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
527
528 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
529
530 panel = new wxPanel(m_notebook);
531 (void)new wxStaticBox( panel, -1, "Box around combobox",
532 wxPoint(5, 5), wxSize(150, 100));
533 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(20,20), wxSize(120,-1), 5, choices, wxCB_READONLY );
534 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
535 (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
536 (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
537 (void)new wxButton( panel, ID_COMBO_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
538 (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
539 (void)new wxButton( panel, ID_COMBO_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
540 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
541 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
542
543 wxString choices2[] =
544 {
545 "First", "Second",
546 /* "Third",
547 "Fourth", "Fifth", "Sixth",
548 "Seventh", "Eighth", "Nineth", "Tenth" */
549 };
550
551 panel = new wxPanel(m_notebook);
552 (void)new wxRadioBox( panel, ID_RADIOBOX, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS );
553 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS );
554
555#if wxUSE_TOOLTIPS
556 m_radio->SetToolTip("Ever seen a radiobox?");
557#endif // wxUSE_TOOLTIPS
558
559 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
560 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
561 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
562 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
563 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) );
564 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxSize(110,30), wxRB_GROUP );
565 rb->SetValue( FALSE );
566 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
567 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
568
569 panel = new wxPanel(m_notebook);
570 (void)new wxStaticBox( panel, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
571 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30) );
572 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS );
573 (void)new wxStaticBox( panel, -1, "Explanation", wxPoint(220,10), wxSize(270,130) );
574#ifdef __WXMOTIF__
575 // No wrapping text in wxStaticText yet :-(
576 (void)new wxStaticText( panel, -1,
577 "Drag the slider!",
578 wxPoint(228,30),
579 wxSize(240, -1)
580 );
581#else
582 (void)new wxStaticText( panel, -1,
583 "In order see the gauge (aka progress bar)\n"
584 "control do something you have to drag the\n"
585 "handle of the slider to the right.\n"
586 "\n"
587 "This is also supposed to demonstrate how\n"
588 "to use static controls.\n",
589 wxPoint(228,25),
590 wxSize(240, 110)
591 );
592#endif
593 int initialSpinValue = -5;
594 wxString s;
595 s << initialSpinValue;
596 m_spintext = new wxTextCtrl( panel, -1, s, wxPoint(20,160), wxSize(80,-1) );
597#if wxUSE_SPINBTN
598 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,160), wxSize(80, -1) );
599 m_spinbutton->SetRange(-10,30);
600 m_spinbutton->SetValue(initialSpinValue);
601
602 m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "Show progress dialog",
603 wxPoint(300, 160) );
604#endif // wxUSE_SPINBTN
605
606#if wxUSE_SPINCTRL
607 m_spinctrl = new wxSpinCtrl( panel, ID_SPINCTRL, "", wxPoint(200, 160), wxSize(80, -1) );
608 m_spinctrl->SetRange(10,30);
609 m_spinctrl->SetValue(15);
610#endif // wxUSE_SPINCTRL
611
612 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
613
614 panel = new wxPanel(m_notebook);
615
616#ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
617 wxIcon icon = wxTheApp->GetStdIcon(wxICON_INFORMATION);
618 wxStaticBitmap *bmpStatic = new wxStaticBitmap(panel, -1, icon,
619 wxPoint(10, 10));
620
621 bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10));
622 bmpStatic->SetIcon(wxTheApp->GetStdIcon(wxICON_QUESTION));
623#endif // !Motif
624
625 wxBitmap bitmap( 100, 100 );
626 wxMemoryDC dc;
627 dc.SelectObject( bitmap );
628 dc.SetPen(*wxGREEN_PEN);
629 dc.Clear();
630 dc.DrawEllipse(5, 5, 90, 90);
631 dc.DrawText("Bitmap", 30, 40);
632 dc.SelectObject( wxNullBitmap );
633
634 (void)new wxBitmapButton(panel, -1, bitmap, wxPoint(100, 20));
635
636#if 0
637 bitmap = wxBitmap("../../utils/wxPython/tests/bitmaps/test2.bmp",
638 wxBITMAP_TYPE_BMP);
639 bitmap.SetMask(new wxMask(bitmap, *wxBLUE));
640 (void)new wxBitmapButton(panel, -1, bitmap, wxPoint(300, 120));
641#endif
642
643 wxBitmap bmp1(wxTheApp->GetStdIcon(wxICON_INFORMATION)),
644 bmp2(wxTheApp->GetStdIcon(wxICON_WARNING)),
645 bmp3(wxTheApp->GetStdIcon(wxICON_QUESTION));
646 wxBitmapButton *bmpBtn = new wxBitmapButton
647 (
648 panel, -1,
649 bmp1,
650 wxPoint(30, 50)
651 );
652 bmpBtn->SetBitmapSelected(bmp2);
653 bmpBtn->SetBitmapFocus(bmp3);
654
655 (void)new wxButton(panel, ID_BUTTON_LABEL, "Toggle label", wxPoint(250, 20));
656 m_label = new wxStaticText(panel, -1, "Label with some long text",
657 wxPoint(250, 60), wxDefaultSize,
658 wxALIGN_RIGHT | wxST_NO_AUTORESIZE);
659
660 m_notebook->AddPage(panel, "wxBitmapXXX");
661
662 // wxCalendarCtrl
663
664 panel = new wxPanel(m_notebook);
665 panel->SetAutoLayout( TRUE );
666
667 wxString date;
668 date.Printf("Selected date: %s",
669 wxDateTime::Today().FormatISODate().c_str());
670 m_date = new wxStaticText(panel, -1, date);
671 m_calendar = new wxCalendarCtrl(panel, ID_CALENDAR);
672
673 c = new wxLayoutConstraints;
674 c->left.SameAs( panel, wxLeft, 10 );
675 c->centreY.SameAs( m_calendar, wxCentreY );
676 c->height.AsIs();
677 c->width.AsIs();
678
679 m_date->SetConstraints(c);
680
681 c = new wxLayoutConstraints;
682 c->left.SameAs( m_date, wxRight, 10 );
683 c->top.SameAs( panel, wxTop, 10 );
684 c->height.AsIs();
685 c->width.AsIs();
686
687 m_calendar->SetConstraints(c);
688
689 m_notebook->AddPage(panel, "wxCalendar");
690
691 // layout constraints
692
693 panel = new wxPanel(m_notebook);
694 panel->SetAutoLayout( TRUE );
695
696 c = new wxLayoutConstraints;
697 c->top.SameAs( panel, wxTop, 10 );
698 c->height.AsIs( );
699 c->left.SameAs( panel, wxLeft, 10 );
700 c->width.PercentOf( panel, wxWidth, 40 );
701
702 wxButton *pMyButton = new wxButton(panel, -1, "Test Button" );
703 pMyButton->SetConstraints( c );
704
705 c = new wxLayoutConstraints;
706 c->top.SameAs( panel, wxTop, 10 );
707 c->bottom.SameAs( panel, wxBottom, 10 );
708 c->right.SameAs( panel, wxRight, 10 );
709 c->width.PercentOf( panel, wxWidth, 40 );
710
711 wxButton *pMyButton2 = new wxButton(panel, -1, "Test Button 2" );
712 pMyButton2->SetConstraints( c );
713
714 m_notebook->AddPage(panel, "wxLayoutConstraint");
715
716 // sizer
717
718 panel = new wxPanel(m_notebook);
719 panel->SetAutoLayout( TRUE );
720
721 wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );
722
723 sizer->Add( new wxButton(panel, -1, "Test Button" ), 3, wxALL, 10 );
724 sizer->Add( 20,20, 1 );
725 sizer->Add( new wxButton(panel, -1, "Test Button 2" ), 3, wxGROW|wxALL, 10 );
726
727 panel->SetSizer( sizer );
728
729 m_notebook->AddPage(panel, "wxSizer");
730}
731
732void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
733{
734 int x = 0;
735 int y = 0;
736 GetClientSize( &x, &y );
737
738 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
739 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
740}
741
742void MyPanel::OnPageChanging( wxNotebookEvent &event )
743{
744 int selOld = event.GetOldSelection();
745 if ( selOld == 2 )
746 {
747 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
748 "page change from taking place - if you select\n"
749 "[No] the current page will stay the third one\n",
750 "Control sample",
751 wxICON_QUESTION | wxYES_NO) != wxYES )
752 {
753 event.Veto();
754
755 return;
756 }
757 }
758
759 *m_text << "Notebook selection is being changed from " << selOld << "\n";
760}
761
762void MyPanel::OnPageChanged( wxNotebookEvent &event )
763{
764 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
765}
766
767void MyPanel::OnCalendar(wxCalendarEvent& event)
768{
769 *m_text << "Selected " << event.GetDate().FormatISODate() <<
770 " from calendar\n";
771}
772
773void MyPanel::OnCalendarChange(wxCalendarEvent& event)
774{
775 wxString s;
776 s.Printf("Selected date: %s", event.GetDate().FormatISODate().c_str());
777
778 m_date->SetLabel(s);
779}
780
781void MyPanel::OnCalendarWeekDayClick(wxCalendarEvent& event)
782{
783 *m_text << "Clicked on "
784 << wxDateTime::GetWeekDayName(event.GetWeekDay())
785 << "\n";
786}
787
788void MyPanel::OnChangeColour(wxCommandEvent& WXUNUSED(event))
789{
790 static wxColour s_colOld;
791
792 // test panel colour changing and propagation to the subcontrols
793 if ( s_colOld.Ok() )
794 {
795 SetBackgroundColour(s_colOld);
796 s_colOld = wxNullColour;
797
798 m_lbSelectThis->SetForegroundColour("yellow");
799 m_lbSelectThis->SetBackgroundColour("blue");
800 }
801 else
802 {
803 s_colOld = GetBackgroundColour();
804 SetBackgroundColour("green");
805
806 m_lbSelectThis->SetForegroundColour("white");
807 m_lbSelectThis->SetBackgroundColour("red");
808 }
809
810 m_lbSelectThis->Refresh();
811 Refresh();
812}
813
814void MyPanel::OnListBox( wxCommandEvent &event )
815{
816// GetParent()->Move(100, 100);
817
818 wxListBox *listbox = event.GetId() == ID_LISTBOX ? m_listbox
819 : m_listboxSorted;
820
821 m_text->AppendText( "ListBox event selection string is: '" );
822 m_text->AppendText( event.GetString() );
823 m_text->AppendText( "'\n" );
824 m_text->AppendText( "ListBox control selection string is: '" );
825 m_text->AppendText( listbox->GetStringSelection() );
826 m_text->AppendText( "'\n" );
827
828 wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject());
829 m_text->AppendText( "ListBox event client data string is: '" );
830 if (obj) // BC++ doesn't like use of '? .. : .. ' in this context
831 m_text->AppendText( obj->GetData() );
832 else
833 m_text->AppendText( wxString("none") );
834
835 m_text->AppendText( "'\n" );
836 m_text->AppendText( "ListBox control client data string is: '" );
837 obj = (wxStringClientData *)listbox->GetClientObject(listbox->GetSelection());
838 if (obj)
839 m_text->AppendText( obj->GetData() );
840 else
841 m_text->AppendText( wxString("none") );
842 m_text->AppendText( "'\n" );
843}
844
845void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
846{
847 m_text->AppendText( "ListBox double click string is: " );
848 m_text->AppendText( event.GetString() );
849 m_text->AppendText( "\n" );
850}
851
852void MyPanel::OnListBoxButtons( wxCommandEvent &event )
853{
854 switch (event.GetId())
855 {
856 case ID_LISTBOX_ENABLE:
857 {
858 m_text->AppendText("Checkbox clicked.\n");
859 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
860#if wxUSE_TOOLTIPS
861 if (event.GetInt())
862 cb->SetToolTip( "Click to enable listbox" );
863 else
864 cb->SetToolTip( "Click to disable listbox" );
865#endif // wxUSE_TOOLTIPS
866 m_listbox->Enable( event.GetInt() == 0 );
867 m_lbSelectThis->Enable( event.GetInt() == 0 );
868 m_lbSelectNum->Enable( event.GetInt() == 0 );
869 m_listboxSorted->Enable( event.GetInt() == 0 );
870 break;
871 }
872 case ID_LISTBOX_SEL_NUM:
873 {
874 m_listbox->SetSelection( 2 );
875 m_listboxSorted->SetSelection( 2 );
876 m_lbSelectThis->WarpPointer( 40, 14 );
877 break;
878 }
879 case ID_LISTBOX_SEL_STR:
880 {
881 m_listbox->SetStringSelection( "This" );
882 m_listboxSorted->SetStringSelection( "This" );
883 m_lbSelectNum->WarpPointer( 40, 14 );
884 break;
885 }
886 case ID_LISTBOX_CLEAR:
887 {
888 m_listbox->Clear();
889 m_listboxSorted->Clear();
890 break;
891 }
892 case ID_LISTBOX_APPEND:
893 {
894 m_listbox->Append( "Hi!" );
895 m_listboxSorted->Append( "Hi!" );
896 break;
897 }
898 case ID_LISTBOX_DELETE:
899 {
900 int idx;
901 idx = m_listbox->GetSelection();
902 m_listbox->Delete( idx );
903 idx = m_listboxSorted->GetSelection();
904 m_listboxSorted->Delete( idx );
905 break;
906 }
907 case ID_LISTBOX_FONT:
908 {
909 m_listbox->SetFont( *wxITALIC_FONT );
910 m_listboxSorted->SetFont( *wxITALIC_FONT );
911 m_checkbox->SetFont( *wxITALIC_FONT );
912 break;
913 }
914 }
915}
916
917void MyPanel::OnChoice( wxCommandEvent &event )
918{
919 wxChoice *choice = event.GetId() == ID_CHOICE ? m_choice
920 : m_choiceSorted;
921
922 m_text->AppendText( "Choice event selection string is: '" );
923 m_text->AppendText( event.GetString() );
924 m_text->AppendText( "'\n" );
925 m_text->AppendText( "Choice control selection string is: '" );
926 m_text->AppendText( choice->GetStringSelection() );
927 m_text->AppendText( "'\n" );
928
929 wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject());
930 m_text->AppendText( "Choice event client data string is: '" );
931
932 if (obj)
933 m_text->AppendText( obj->GetData() );
934 else
935 m_text->AppendText( wxString("none") );
936
937 m_text->AppendText( "'\n" );
938 m_text->AppendText( "Choice control client data string is: '" );
939 obj = (wxStringClientData *)choice->GetClientObject(choice->GetSelection());
940
941 if (obj)
942 m_text->AppendText( obj->GetData() );
943 else
944 m_text->AppendText( wxString("none") );
945 m_text->AppendText( "'\n" );
946}
947
948void MyPanel::OnChoiceButtons( wxCommandEvent &event )
949{
950 switch (event.GetId())
951 {
952 case ID_CHOICE_ENABLE:
953 {
954 m_choice->Enable( event.GetInt() == 0 );
955 m_choiceSorted->Enable( event.GetInt() == 0 );
956 break;
957 }
958 case ID_CHOICE_SEL_NUM:
959 {
960 m_choice->SetSelection( 2 );
961 m_choiceSorted->SetSelection( 2 );
962 break;
963 }
964 case ID_CHOICE_SEL_STR:
965 {
966 m_choice->SetStringSelection( "This" );
967 m_choiceSorted->SetStringSelection( "This" );
968 break;
969 }
970 case ID_CHOICE_CLEAR:
971 {
972 m_choice->Clear();
973 m_choiceSorted->Clear();
974 break;
975 }
976 case ID_CHOICE_APPEND:
977 {
978 m_choice->Append( "Hi!" );
979 m_choiceSorted->Append( "Hi!" );
980 break;
981 }
982 case ID_CHOICE_DELETE:
983 {
984 int idx = m_choice->GetSelection();
985 m_choice->Delete( idx );
986 idx = m_choiceSorted->GetSelection();
987 m_choiceSorted->Delete( idx );
988 break;
989 }
990 case ID_CHOICE_FONT:
991 {
992 m_choice->SetFont( *wxITALIC_FONT );
993 m_choiceSorted->SetFont( *wxITALIC_FONT );
994 break;
995 }
996 }
997}
998
999void MyPanel::OnCombo( wxCommandEvent &event )
1000{
1001 m_text->AppendText( "ComboBox event selection string is: " );
1002 m_text->AppendText( event.GetString() );
1003 m_text->AppendText( "\n" );
1004 m_text->AppendText( "ComboBox control selection string is: " );
1005 m_text->AppendText( m_combo->GetStringSelection() );
1006 m_text->AppendText( "\n" );
1007}
1008
1009void MyPanel::OnComboButtons( wxCommandEvent &event )
1010{
1011 switch (event.GetId())
1012 {
1013 case ID_COMBO_ENABLE:
1014 {
1015 m_combo->Enable( event.GetInt() == 0 );
1016 break;
1017 }
1018 case ID_COMBO_SEL_NUM:
1019 {
1020 m_combo->SetSelection( 2 );
1021 break;
1022 }
1023 case ID_COMBO_SEL_STR:
1024 {
1025 m_combo->SetStringSelection( "This" );
1026 break;
1027 }
1028 case ID_COMBO_CLEAR:
1029 {
1030 m_combo->Clear();
1031 break;
1032 }
1033 case ID_COMBO_APPEND:
1034 {
1035 m_combo->Append( "Hi!" );
1036 break;
1037 }
1038 case ID_COMBO_DELETE:
1039 {
1040 int idx = m_combo->GetSelection();
1041 m_combo->Delete( idx );
1042 break;
1043 }
1044 case ID_COMBO_FONT:
1045 {
1046 m_combo->SetFont( *wxITALIC_FONT );
1047 break;
1048 }
1049 }
1050}
1051
1052void MyPanel::OnRadio( wxCommandEvent &event )
1053{
1054 m_text->AppendText( "RadioBox selection string is: " );
1055 m_text->AppendText( event.GetString() );
1056 m_text->AppendText( "\n" );
1057}
1058
1059void MyPanel::OnRadioButtons( wxCommandEvent &event )
1060{
1061 switch (event.GetId())
1062 {
1063 case ID_RADIOBOX_ENABLE:
1064 {
1065 m_radio->Enable( event.GetInt() == 0 );
1066 break;
1067 }
1068 case ID_RADIOBOX_SEL_NUM:
1069 {
1070 m_radio->SetSelection( 2 );
1071 break;
1072 }
1073 case ID_RADIOBOX_SEL_STR:
1074 {
1075 m_radio->SetStringSelection( "This" );
1076 break;
1077 }
1078 case ID_RADIOBOX_FONT:
1079 {
1080 m_radio->SetFont( *wxITALIC_FONT );
1081 break;
1082 }
1083 }
1084}
1085
1086void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
1087{
1088 m_fontButton->SetFont( *wxITALIC_FONT );
1089 m_text->SetFont( *wxITALIC_FONT );
1090}
1091
1092void MyPanel::OnUpdateLabel( wxCommandEvent &WXUNUSED(event) )
1093{
1094 static bool s_long = TRUE;
1095
1096 s_long = !s_long;
1097 m_label->SetLabel(s_long ? "very very very long text" : "shorter text");
1098}
1099
1100void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
1101{
1102 m_gauge->SetValue( m_slider->GetValue() );
1103}
1104
1105#if wxUSE_SPINCTRL
1106
1107void MyPanel::OnSpinCtrl(wxCommandEvent& event)
1108{
1109 wxString s;
1110 s.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1111 m_spinctrl->GetValue(), event.GetInt());
1112 m_text->AppendText(s);
1113}
1114
1115#endif // wxUSE_SPINCTRL
1116
1117#if wxUSE_SPINBTN
1118void MyPanel::OnSpinUp( wxSpinEvent &event )
1119{
1120 wxString value;
1121 value.Printf( _T("Spin control up: current = %d\n"),
1122 m_spinbutton->GetValue());
1123
1124 if ( m_spinbutton->GetValue() > 17 )
1125 {
1126 value += _T("Preventing the spin button from going above 17.\n");
1127
1128 event.Veto();
1129 }
1130
1131 m_text->AppendText(value);
1132}
1133
1134void MyPanel::OnSpinDown( wxSpinEvent &event )
1135{
1136 wxString value;
1137 value.Printf( _T("Spin control down: current = %d\n"),
1138 m_spinbutton->GetValue());
1139
1140 if ( m_spinbutton->GetValue() < -17 )
1141 {
1142 value += _T("Preventing the spin button from going below -17.\n");
1143
1144 event.Veto();
1145 }
1146
1147 m_text->AppendText(value);
1148}
1149
1150void MyPanel::OnSpinUpdate( wxSpinEvent &event )
1151{
1152 wxString value;
1153 value.Printf( _T("%d"), event.GetPosition() );
1154 m_spintext->SetValue( value );
1155
1156 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1157 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
1158 m_spinbutton->GetValue());
1159
1160 m_text->AppendText(value);
1161}
1162
1163void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
1164{
1165 event.Enable( m_spinbutton->GetValue() > 0 );
1166}
1167
1168void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
1169{
1170 int max = m_spinbutton->GetValue();
1171 wxProgressDialog dialog("Progress dialog example",
1172 "An informative message",
1173 max, // range
1174 this, // parent
1175 wxPD_CAN_ABORT |
1176 wxPD_APP_MODAL |
1177 wxPD_ELAPSED_TIME |
1178 wxPD_ESTIMATED_TIME |
1179 wxPD_REMAINING_TIME);
1180
1181
1182 bool cont = TRUE;
1183 for ( int i = 0; i < max && cont; i++ )
1184 {
1185 wxSleep(1);
1186 if ( i == max - 1 )
1187 {
1188 cont = dialog.Update(i, "That's all, folks!");
1189 }
1190 else if ( i == max / 2 )
1191 {
1192 cont = dialog.Update(i, "Only a half left!");
1193 }
1194 else
1195 {
1196 cont = dialog.Update(i);
1197 }
1198 }
1199
1200 if ( !cont )
1201 {
1202 *m_text << "Progress dialog aborted!\n";
1203 }
1204 else
1205 {
1206 *m_text << "Countdown from " << max << " finished.\n";
1207 }
1208}
1209
1210#endif // wxUSE_SPINBTN
1211
1212MyPanel::~MyPanel()
1213{
1214 delete m_notebook->GetImageList();
1215}
1216
1217//----------------------------------------------------------------------
1218// MyFrame
1219//----------------------------------------------------------------------
1220
1221BEGIN_EVENT_TABLE(MyFrame, wxFrame)
1222 EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
1223 EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
1224#if wxUSE_TOOLTIPS
1225 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
1226 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
1227#endif // wxUSE_TOOLTIPS
1228
1229 EVT_MENU(MINIMAL_ENABLE_ALL, MyFrame::OnEnableAll)
1230
1231 EVT_SIZE(MyFrame::OnSize)
1232 EVT_MOVE(MyFrame::OnMove)
1233
1234 EVT_IDLE(MyFrame::OnIdle)
1235END_EVENT_TABLE()
1236
1237MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
1238: wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
1239{
1240 CreateStatusBar(2);
1241
1242 m_panel = new MyPanel( this, 10, 10, 300, 100 );
1243}
1244
1245void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
1246{
1247 Close(TRUE);
1248}
1249
1250void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
1251{
1252 wxBeginBusyCursor();
1253
1254 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
1255 dialog.ShowModal();
1256
1257 wxEndBusyCursor();
1258}
1259
1260#if wxUSE_TOOLTIPS
1261void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
1262{
1263 static long s_delay = 5000;
1264
1265 wxString delay;
1266 delay.Printf( _T("%ld"), s_delay);
1267
1268 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
1269 "Set tooltip delay",
1270 delay,
1271 this);
1272 if ( !delay )
1273 return; // cancelled
1274
1275 wxSscanf(delay, _T("%ld"), &s_delay);
1276
1277 wxToolTip::SetDelay(s_delay);
1278
1279 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
1280}
1281
1282void MyFrame::OnToggleTooltips(wxCommandEvent& event)
1283{
1284 static bool s_enabled = TRUE;
1285
1286 s_enabled = !s_enabled;
1287
1288 wxToolTip::Enable(s_enabled);
1289
1290 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
1291}
1292#endif // tooltips
1293
1294void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event))
1295{
1296 static bool s_enable = TRUE;
1297
1298 s_enable = !s_enable;
1299 m_panel->Enable(s_enable);
1300}
1301
1302void MyFrame::OnMove( wxMoveEvent& event )
1303{
1304 UpdateStatusBar(event.GetPosition(), GetSize());
1305
1306 event.Skip();
1307}
1308
1309void MyFrame::OnSize( wxSizeEvent& event )
1310{
1311 UpdateStatusBar(GetPosition(), event.GetSize());
1312
1313 event.Skip();
1314}
1315
1316void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
1317{
1318 // track the window which has the focus in the status bar
1319 static wxWindow *s_windowFocus = (wxWindow *)NULL;
1320 wxWindow *focus = wxWindow::FindFocus();
1321 if ( focus && (focus != s_windowFocus) )
1322 {
1323 s_windowFocus = focus;
1324
1325 wxString msg;
1326 msg.Printf(
1327#ifdef __WXMSW__
1328 _T("Focus: wxWindow = %p, HWND = %08x"),
1329#else
1330 _T("Focus: wxWindow = %p"),
1331#endif
1332 s_windowFocus
1333#ifdef __WXMSW__
1334 , s_windowFocus->GetHWND()
1335#endif
1336 );
1337
1338 SetStatusText(msg);
1339 }
1340}
1341
1342static void SetControlClientData(const char *name,
1343 wxControlWithItems *control)
1344{
1345 size_t count = control->GetCount();
1346 for ( size_t n = 0; n < count; n++ )
1347 {
1348 wxString s;
1349 s.Printf("%s client data for '%s'",
1350 name, control->GetString(n).c_str());
1351
1352 control->SetClientObject(n, new wxStringClientData(s));
1353 }
1354}