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