]> git.saurik.com Git - wxWidgets.git/blame - samples/controls/controls.cpp
Make a couple virtuals protected so they can be overridden.
[wxWidgets.git] / samples / controls / controls.cpp
CommitLineData
1c005ff7 1/////////////////////////////////////////////////////////////////////////////
dfad0599 2// Name: controls.cpp
be5a51fb 3// Purpose: Controls wxWidgets sample
1c005ff7
RR
4// Author: Robert Roebling
5// Modified by:
6// RCS-ID: $Id$
c67d8618 7// Copyright: (c) Robert Roebling, Julian Smart
526954c5 8// Licence: wxWindows licence
1c005ff7
RR
9/////////////////////////////////////////////////////////////////////////////
10
1c005ff7
RR
11// For compilers that support precompilation, includes "wx/wx.h".
12#include "wx/wxprec.h"
13
14#ifdef __BORLANDC__
9f3362c4 15 #pragma hdrstop
1c005ff7
RR
16#endif
17
18#ifndef WX_PRECOMP
9f3362c4 19 #include "wx/wx.h"
1c005ff7
RR
20#endif
21
4fabb575 22#include "wx/spinbutt.h"
1db8dc4a 23#include "wx/tglbtn.h"
61c083e7 24#include "wx/bookctrl.h"
2cb21a45 25#include "wx/imaglist.h"
389d906b 26#include "wx/artprov.h"
1a8b677e 27#include "wx/cshelp.h"
d159e964 28#include "wx/gbsizer.h"
b8653fbf
VZ
29
30#if wxUSE_TOOLTIPS
31 #include "wx/tooltip.h"
be8b4385
VZ
32#ifdef __WXMSW__
33 #include "wx/numdlg.h"
34#endif // __WXMSW__
35#endif // wxUSE_TOOLTIPS
1c005ff7 36
3cb332c1 37#ifndef __WXMSW__
73c700fd
VZ
38 #include "icons/choice.xpm"
39 #include "icons/combo.xpm"
40 #include "icons/list.xpm"
41 #include "icons/radio.xpm"
42 #include "icons/text.xpm"
43 #include "icons/gauge.xpm"
47908e25
RR
44#endif
45
3a5bcc4d 46#ifndef wxUSE_SPINBTN
ad556aa9 47 #define wxUSE_SPINBTN 1
3a5bcc4d 48#endif
9726da4f
VZ
49
50#include "wx/progdlg.h"
51
b782f2e0
VZ
52#if wxUSE_SPINCTRL
53 #include "wx/spinctrl.h"
54#endif // wxUSE_SPINCTRL
55
bebc503c
VZ
56#if !wxUSE_TOGGLEBTN
57 #define wxToggleButton wxCheckBox
58 #define EVT_TOGGLEBUTTON EVT_CHECKBOX
59#endif
60
e7092398 61#ifndef wxHAS_IMAGES_IN_RESOURCES
3cb332c1
VZ
62 #include "../sample.xpm"
63#endif
64
1c005ff7
RR
65//----------------------------------------------------------------------
66// class definitions
67//----------------------------------------------------------------------
68
69class MyApp: public wxApp
655822f3 70{
b8653fbf
VZ
71public:
72 bool OnInit();
1c005ff7
RR
73};
74
75class MyPanel: public wxPanel
76{
b8653fbf 77public:
1c005ff7 78 MyPanel(wxFrame *frame, int x, int y, int w, int h);
2cb21a45 79 virtual ~MyPanel();
16f6dfd8 80
be8b4385
VZ
81#if wxUSE_TOOLTIPS
82 void SetAllToolTips();
83#endif // wxUSE_TOOLTIPS
84
f226be17 85 void OnIdle( wxIdleEvent &event );
1c005ff7 86 void OnListBox( wxCommandEvent &event );
5b077d48 87 void OnListBoxDoubleClick( wxCommandEvent &event );
1c005ff7 88 void OnListBoxButtons( wxCommandEvent &event );
1ccd23f5 89#if wxUSE_CHOICE
47908e25
RR
90 void OnChoice( wxCommandEvent &event );
91 void OnChoiceButtons( wxCommandEvent &event );
1ccd23f5 92#endif
47908e25 93 void OnCombo( wxCommandEvent &event );
f6bcfd97
BP
94 void OnComboTextChanged( wxCommandEvent &event );
95 void OnComboTextEnter( wxCommandEvent &event );
47908e25
RR
96 void OnComboButtons( wxCommandEvent &event );
97 void OnRadio( wxCommandEvent &event );
98 void OnRadioButtons( wxCommandEvent &event );
a48b9bfb
VZ
99 void OnRadioButton1( wxCommandEvent &event );
100 void OnRadioButton2( wxCommandEvent &event );
868a2826 101 void OnSetFont( wxCommandEvent &event );
61c083e7
WS
102 void OnPageChanged( wxBookCtrlEvent &event );
103 void OnPageChanging( wxBookCtrlEvent &event );
7bce6aec 104 void OnSliderUpdate( wxCommandEvent &event );
185fa6bf 105 void OnUpdateLabel( wxCommandEvent &event );
0e528b99 106#if wxUSE_SPINBTN
8c3c31d4
VZ
107 void OnSpinUp( wxSpinEvent &event );
108 void OnSpinDown( wxSpinEvent &event );
e380f72b 109 void OnSpinUpdate( wxSpinEvent &event );
516ab399 110#if wxUSE_PROGRESSDLG
9726da4f
VZ
111 void OnUpdateShowProgress( wxUpdateUIEvent& event );
112 void OnShowProgress( wxCommandEvent &event );
516ab399 113#endif // wxUSE_PROGRESSDLG
0e528b99 114#endif // wxUSE_SPINBTN
1dd815f3 115 void OnNewText( wxCommandEvent &event );
baccb514 116#if wxUSE_SPINCTRL
457e6c54 117 void OnSpinCtrl(wxSpinEvent& event);
76106901
VZ
118 void OnSpinCtrlUp(wxSpinEvent& event);
119 void OnSpinCtrlDown(wxSpinEvent& event);
120 void OnSpinCtrlText(wxCommandEvent& event);
baccb514
VZ
121#endif // wxUSE_SPINCTRL
122
87a1e308
VZ
123 void OnEnableAll(wxCommandEvent& event);
124 void OnChangeColour(wxCommandEvent& event);
3e2dd3db 125 void OnTestButton(wxCommandEvent& event);
9121bed2 126 void OnBmpButton(wxCommandEvent& event);
bebc503c 127 void OnBmpButtonToggle(wxCommandEvent& event);
87a1e308 128
2b5f62a0
VZ
129 void OnSizerCheck (wxCommandEvent &event);
130
6c8a980f
VZ
131 wxListBox *m_listbox,
132 *m_listboxSorted;
1ccd23f5 133#if wxUSE_CHOICE
b56c2246
VZ
134 wxChoice *m_choice,
135 *m_choiceSorted;
2b5f62a0
VZ
136#endif // wxUSE_CHOICE
137
e380f72b
RR
138 wxComboBox *m_combo;
139 wxRadioBox *m_radio;
516ab399 140#if wxUSE_GAUGE
37ed3ae3
VZ
141 wxGauge *m_gauge,
142 *m_gaugeVert;
516ab399 143#endif // wxUSE_GAUGE
6bb44116 144#if wxUSE_SLIDER
e380f72b 145 wxSlider *m_slider;
6bb44116 146#endif // wxUSE_SLIDER
e380f72b 147 wxButton *m_fontButton;
85eb36c2
RR
148 wxButton *m_lbSelectNum;
149 wxButton *m_lbSelectThis;
0e528b99 150#if wxUSE_SPINBTN
e380f72b 151 wxSpinButton *m_spinbutton;
516ab399 152#if wxUSE_PROGRESSDLG
9726da4f 153 wxButton *m_btnProgress;
516ab399 154#endif // wxUSE_PROGRESSDLG
0e528b99 155#endif // wxUSE_SPINBTN
1dd815f3
RR
156 wxStaticText *m_wrappingText;
157 wxStaticText *m_nonWrappingText;
b782f2e0
VZ
158
159#if wxUSE_SPINCTRL
160 wxSpinCtrl *m_spinctrl;
161#endif // wxUSE_SPINCTRL
162
e380f72b 163 wxTextCtrl *m_spintext;
ae0bdb01 164 wxCheckBox *m_checkbox;
16f6dfd8 165
e380f72b 166 wxTextCtrl *m_text;
61c083e7 167 wxBookCtrl *m_book;
655822f3 168
185fa6bf
VZ
169 wxStaticText *m_label;
170
2b5f62a0
VZ
171 wxBoxSizer *m_buttonSizer;
172 wxButton *m_sizerBtn1;
173 wxButton *m_sizerBtn2;
174 wxButton *m_sizerBtn3;
175 wxButton *m_sizerBtn4;
176 wxBoxSizer *m_hsizer;
177 wxButton *m_bigBtn;
178
b8653fbf 179private:
29e7e51a
VZ
180 wxLog *m_logTargetOld;
181
b8653fbf 182 DECLARE_EVENT_TABLE()
1c005ff7
RR
183};
184
185class MyFrame: public wxFrame
186{
b8653fbf 187public:
9f84eccd 188 MyFrame(const wxChar *title, int x, int y);
655822f3 189
1c005ff7
RR
190 void OnQuit(wxCommandEvent& event);
191 void OnAbout(wxCommandEvent& event);
3e2dd3db 192 void OnClearLog(wxCommandEvent& event);
87a1e308 193
16f6dfd8
VZ
194#if wxUSE_TOOLTIPS
195 void OnSetTooltipDelay(wxCommandEvent& event);
196 void OnToggleTooltips(wxCommandEvent& event);
be8b4385
VZ
197#ifdef __WXMSW__
198 void OnSetMaxTooltipWidth(wxCommandEvent& event);
199#endif // __WXMSW__
16f6dfd8 200#endif // wxUSE_TOOLTIPS
87a1e308
VZ
201
202 void OnEnableAll(wxCommandEvent& event);
47a8a4d5
VZ
203 void OnHideAll(wxCommandEvent& event);
204 void OnHideList(wxCommandEvent& event);
1a8b677e 205 void OnContextHelp(wxCommandEvent& event);
87a1e308 206
9f3362c4 207 void OnIdle( wxIdleEvent& event );
35960bbf
VZ
208 void OnIconized( wxIconizeEvent& event );
209 void OnMaximized( wxMaximizeEvent& event );
5fb9fcfc 210 void OnSize( wxSizeEvent& event );
97206645 211 void OnMove( wxMoveEvent& event );
655822f3 212
f048e32f
VZ
213 MyPanel *GetPanel() const { return m_panel; }
214
b8653fbf 215private:
960a83cc 216#if wxUSE_STATUSBAR
97206645
VZ
217 void UpdateStatusBar(const wxPoint& pos, const wxSize& size)
218 {
7bfc22f6
VZ
219 if ( m_frameStatusBar )
220 {
221 wxString msg;
0545d965
VZ
222 wxSize sizeAll = GetSize(),
223 sizeCl = GetClientSize();
224 msg.Printf(_("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)"),
7bfc22f6
VZ
225 pos.x, pos.y,
226 size.x, size.y,
0545d965 227 sizeAll.x, sizeAll.y,
7bfc22f6
VZ
228 sizeCl.x, sizeCl.y);
229 SetStatusText(msg, 1);
230 }
97206645 231 }
960a83cc 232#endif // wxUSE_STATUSBAR
97206645 233
f048e32f 234 MyPanel *m_panel;
87a1e308 235
b8653fbf 236 DECLARE_EVENT_TABLE()
1c005ff7
RR
237};
238
f6bcfd97
BP
239// a button which intercepts double clicks (for testing...)
240class MyButton : public wxButton
241{
242public:
243 MyButton(wxWindow *parent,
244 wxWindowID id,
245 const wxString& label = wxEmptyString,
246 const wxPoint& pos = wxDefaultPosition,
247 const wxSize& size = wxDefaultSize)
248 : wxButton(parent, id, label, pos, size)
249 {
250 }
251
252 void OnDClick(wxMouseEvent& event)
253 {
9a83f860 254 wxLogMessage(wxT("MyButton::OnDClick"));
f6bcfd97
BP
255
256 event.Skip();
257 }
258
259private:
260 DECLARE_EVENT_TABLE()
261};
262
263// a combo which intercepts chars (to test Windows behaviour)
264class MyComboBox : public wxComboBox
265{
266public:
267 MyComboBox(wxWindow *parent, wxWindowID id,
268 const wxString& value = wxEmptyString,
269 const wxPoint& pos = wxDefaultPosition,
270 const wxSize& size = wxDefaultSize,
271 int n = 0, const wxString choices[] = NULL,
272 long style = 0,
273 const wxValidator& validator = wxDefaultValidator,
274 const wxString& name = wxComboBoxNameStr)
275 : wxComboBox(parent, id, value, pos, size, n, choices, style,
276 validator, name) { }
277
278protected:
279 void OnChar(wxKeyEvent& event);
280 void OnKeyDown(wxKeyEvent& event);
281 void OnKeyUp(wxKeyEvent& event);
282 void OnFocusGot(wxFocusEvent& event)
283 {
9a83f860 284 wxLogMessage(wxT("MyComboBox::OnFocusGot"));
f6bcfd97
BP
285
286 event.Skip();
287 }
288
289private:
290 DECLARE_EVENT_TABLE()
291};
292
293// a radiobox which handles focus set/kill (for testing)
294class MyRadioBox : public wxRadioBox
295{
296public:
297 MyRadioBox(wxWindow *parent,
298 wxWindowID id,
299 const wxString& title = wxEmptyString,
300 const wxPoint& pos = wxDefaultPosition,
301 const wxSize& size = wxDefaultSize,
302 int n = 0, const wxString choices[] = NULL,
303 int majorDim = 1,
3998c74b 304 long style = wxRA_SPECIFY_COLS,
f6bcfd97 305 const wxValidator& validator = wxDefaultValidator,
0bb62421 306 const wxString& name = wxRadioBoxNameStr)
f6bcfd97 307 : wxRadioBox(parent, id, title, pos, size, n, choices, majorDim,
7891b4d4
VZ
308 style, validator, name)
309 {
310 }
f6bcfd97
BP
311
312protected:
313 void OnFocusGot(wxFocusEvent& event)
314 {
9a83f860 315 wxLogMessage(wxT("MyRadioBox::OnFocusGot"));
f6bcfd97
BP
316
317 event.Skip();
318 }
319
320 void OnFocusLost(wxFocusEvent& event)
321 {
9a83f860 322 wxLogMessage(wxT("MyRadioBox::OnFocusLost"));
f6bcfd97
BP
323
324 event.Skip();
325 }
326
327private:
328 DECLARE_EVENT_TABLE()
329};
330
1a84e759
RR
331// a choice which handles focus set/kill (for testing)
332class MyChoice : public wxChoice
333{
334public:
335 MyChoice(wxWindow *parent,
336 wxWindowID id,
337 const wxPoint& pos = wxDefaultPosition,
338 const wxSize& size = wxDefaultSize,
339 int n = 0, const wxString choices[] = NULL,
340 long style = 0,
341 const wxValidator& validator = wxDefaultValidator,
342 const wxString& name = wxChoiceNameStr )
0d29fecd 343 : wxChoice(parent, id, pos, size, n, choices,
1a84e759
RR
344 style, validator, name) { }
345
346protected:
347 void OnFocusGot(wxFocusEvent& event)
348 {
9a83f860 349 wxLogMessage(wxT("MyChoice::OnFocusGot"));
1a84e759
RR
350
351 event.Skip();
352 }
353
354 void OnFocusLost(wxFocusEvent& event)
355 {
9a83f860 356 wxLogMessage(wxT("MyChoice::OnFocusLost"));
1a84e759
RR
357
358 event.Skip();
359 }
360
361private:
362 DECLARE_EVENT_TABLE()
363};
364
365
366
1c005ff7 367//----------------------------------------------------------------------
6c8a980f 368// other
1c005ff7
RR
369//----------------------------------------------------------------------
370
8b81a824 371static void SetListboxClientData(const wxChar *name, wxListBox *control);
2b5f62a0
VZ
372
373#if wxUSE_CHOICE
8b81a824 374static void SetChoiceClientData(const wxChar *name, wxChoice *control);
2b5f62a0 375#endif // wxUSE_CHOICE
6c8a980f 376
d59051dd 377IMPLEMENT_APP(MyApp)
1c005ff7
RR
378
379//----------------------------------------------------------------------
380// MyApp
381//----------------------------------------------------------------------
382
16f6dfd8
VZ
383enum
384{
91b07357
JS
385 CONTROLS_QUIT = wxID_EXIT,
386 CONTROLS_ABOUT = wxID_ABOUT,
387 CONTROLS_TEXT = 100,
3e2dd3db 388 CONTROLS_CLEAR_LOG,
16f6dfd8
VZ
389
390 // tooltip menu
3e2dd3db
VZ
391 CONTROLS_SET_TOOLTIP_DELAY = 200,
392 CONTROLS_ENABLE_TOOLTIPS,
be8b4385 393 CONTROLS_SET_TOOLTIPS_MAX_WIDTH,
87a1e308
VZ
394
395 // panel menu
1a8b677e 396 CONTROLS_ENABLE_ALL,
47a8a4d5
VZ
397 CONTROLS_HIDE_ALL,
398 CONTROLS_HIDE_LIST,
1a8b677e 399 CONTROLS_CONTEXT_HELP
16f6dfd8 400};
1c005ff7 401
b8653fbf 402bool MyApp::OnInit()
1c005ff7 403{
41b66be9
VS
404 // use standard command line handling:
405 if ( !wxApp::OnInit() )
9230b621 406 return false;
41b66be9 407
e66ad5c6
VZ
408 // parse the cmd line
409 int x = 50,
410 y = 50;
3ca6a5f0 411 if ( argc == 3 )
e66ad5c6 412 {
a60b1f5d
MB
413 wxSscanf(wxString(argv[1]), wxT("%d"), &x);
414 wxSscanf(wxString(argv[2]), wxT("%d"), &y);
e66ad5c6
VZ
415 }
416
1a8b677e
VZ
417#if wxUSE_HELP
418 wxHelpProvider::Set( new wxSimpleHelpProvider );
419#endif // wxUSE_HELP
420
ec9f7884 421 // Create the main frame window
9a83f860 422 MyFrame *frame = new MyFrame(wxT("Controls wxWidgets App"), x, y);
9230b621 423 frame->Show(true);
655822f3 424
9230b621 425 return true;
1c005ff7
RR
426}
427
428//----------------------------------------------------------------------
429// MyPanel
430//----------------------------------------------------------------------
431
61c083e7 432const int ID_BOOK = 1000;
1c005ff7 433
4fabb575
JS
434const int ID_LISTBOX = 130;
435const int ID_LISTBOX_SEL_NUM = 131;
436const int ID_LISTBOX_SEL_STR = 132;
437const int ID_LISTBOX_CLEAR = 133;
438const int ID_LISTBOX_APPEND = 134;
439const int ID_LISTBOX_DELETE = 135;
440const int ID_LISTBOX_FONT = 136;
441const int ID_LISTBOX_ENABLE = 137;
6c8a980f 442const int ID_LISTBOX_SORTED = 138;
1c005ff7 443
4fabb575
JS
444const int ID_CHOICE = 120;
445const int ID_CHOICE_SEL_NUM = 121;
446const int ID_CHOICE_SEL_STR = 122;
447const int ID_CHOICE_CLEAR = 123;
448const int ID_CHOICE_APPEND = 124;
449const int ID_CHOICE_DELETE = 125;
450const int ID_CHOICE_FONT = 126;
451const int ID_CHOICE_ENABLE = 127;
b56c2246 452const int ID_CHOICE_SORTED = 128;
53010e52 453
4fabb575
JS
454const int ID_COMBO = 140;
455const int ID_COMBO_SEL_NUM = 141;
456const int ID_COMBO_SEL_STR = 142;
457const int ID_COMBO_CLEAR = 143;
458const int ID_COMBO_APPEND = 144;
459const int ID_COMBO_DELETE = 145;
460const int ID_COMBO_FONT = 146;
461const int ID_COMBO_ENABLE = 147;
cc7e9e20 462const int ID_COMBO_SET_TEXT = 148;
53010e52 463
4fabb575
JS
464const int ID_RADIOBOX = 160;
465const int ID_RADIOBOX_SEL_NUM = 161;
466const int ID_RADIOBOX_SEL_STR = 162;
467const int ID_RADIOBOX_FONT = 163;
468const int ID_RADIOBOX_ENABLE = 164;
be8b4385 469const int ID_RADIOBOX2 = 165;
f5d29b39
RR
470const int ID_RADIOBUTTON_1 = 166;
471const int ID_RADIOBUTTON_2 = 167;
472
4fabb575 473const int ID_SET_FONT = 170;
47908e25 474
516ab399 475#if wxUSE_GAUGE
4fabb575 476const int ID_GAUGE = 180;
516ab399
WS
477#endif // wxUSE_GAUGE
478
6bb44116 479#if wxUSE_SLIDER
4fabb575 480const int ID_SLIDER = 181;
6bb44116 481#endif // wxUSE_SLIDER
58614078 482
4fabb575 483const int ID_SPIN = 182;
516ab399 484#if wxUSE_PROGRESSDLG
9726da4f 485const int ID_BTNPROGRESS = 183;
516ab399 486#endif // wxUSE_PROGRESSDLG
185fa6bf 487const int ID_BUTTON_LABEL = 184;
baccb514 488const int ID_SPINCTRL = 185;
1dd815f3 489const int ID_BTNNEWTEXT = 186;
e380f72b 490
3e2dd3db
VZ
491const int ID_BUTTON_TEST1 = 190;
492const int ID_BUTTON_TEST2 = 191;
9121bed2 493const int ID_BITMAP_BTN = 192;
bebc503c 494const int ID_BITMAP_BTN_ENABLE = 193;
3e2dd3db 495
87a1e308
VZ
496const int ID_CHANGE_COLOUR = 200;
497
2b5f62a0
VZ
498const int ID_SIZER_CHECK1 = 201;
499const int ID_SIZER_CHECK2 = 202;
500const int ID_SIZER_CHECK3 = 203;
501const int ID_SIZER_CHECK4 = 204;
502const int ID_SIZER_CHECK14 = 205;
503const int ID_SIZER_CHECKBIG = 206;
504
1a8b677e
VZ
505const int ID_HYPERLINK = 300;
506
1c005ff7 507BEGIN_EVENT_TABLE(MyPanel, wxPanel)
f226be17 508EVT_IDLE ( MyPanel::OnIdle)
61c083e7
WS
509EVT_BOOKCTRL_PAGE_CHANGING(ID_BOOK, MyPanel::OnPageChanging)
510EVT_BOOKCTRL_PAGE_CHANGED(ID_BOOK, MyPanel::OnPageChanged)
ec9f7884 511EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
6c8a980f 512EVT_LISTBOX (ID_LISTBOX_SORTED, MyPanel::OnListBox)
ec9f7884
VZ
513EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
514EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
515EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
516EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
517EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
518EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
519EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
520EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
1ccd23f5 521#if wxUSE_CHOICE
ec9f7884 522EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
b56c2246 523EVT_CHOICE (ID_CHOICE_SORTED, MyPanel::OnChoice)
ec9f7884
VZ
524EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
525EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
526EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
527EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
528EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
529EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
530EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
1ccd23f5 531#endif
ec9f7884 532EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
f6bcfd97
BP
533EVT_TEXT (ID_COMBO, MyPanel::OnComboTextChanged)
534EVT_TEXT_ENTER(ID_COMBO, MyPanel::OnComboTextEnter)
ec9f7884
VZ
535EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
536EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
537EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
538EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
539EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
540EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
cc7e9e20 541EVT_BUTTON (ID_COMBO_SET_TEXT, MyPanel::OnComboButtons)
ec9f7884
VZ
542EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
543EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
be8b4385 544EVT_RADIOBOX (ID_RADIOBOX2, MyPanel::OnRadio)
ec9f7884
VZ
545EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
546EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
547EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
548EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
a48b9bfb
VZ
549EVT_RADIOBUTTON(ID_RADIOBUTTON_1, MyPanel::OnRadioButton1)
550EVT_RADIOBUTTON(ID_RADIOBUTTON_2, MyPanel::OnRadioButton2)
ec9f7884 551EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
6bb44116 552#if wxUSE_SLIDER
ec9f7884 553EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
6bb44116 554#endif // wxUSE_SLIDER
0e528b99 555#if wxUSE_SPINBTN
ec9f7884 556EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
8c3c31d4
VZ
557EVT_SPIN_UP (ID_SPIN, MyPanel::OnSpinUp)
558EVT_SPIN_DOWN (ID_SPIN, MyPanel::OnSpinDown)
516ab399 559#if wxUSE_PROGRESSDLG
9726da4f
VZ
560EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress)
561EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress)
516ab399 562#endif // wxUSE_PROGRESSDLG
0e528b99 563#endif // wxUSE_SPINBTN
baccb514 564#if wxUSE_SPINCTRL
57160afe 565EVT_SPINCTRL (ID_SPINCTRL, MyPanel::OnSpinCtrl)
76106901
VZ
566EVT_SPIN_UP (ID_SPINCTRL, MyPanel::OnSpinCtrlUp)
567EVT_SPIN_DOWN (ID_SPINCTRL, MyPanel::OnSpinCtrlDown)
568EVT_TEXT (ID_SPINCTRL, MyPanel::OnSpinCtrlText)
baccb514 569#endif // wxUSE_SPINCTRL
1dd815f3 570EVT_BUTTON (ID_BTNNEWTEXT, MyPanel::OnNewText)
1db8dc4a 571EVT_TOGGLEBUTTON(ID_BUTTON_LABEL, MyPanel::OnUpdateLabel)
87a1e308 572EVT_CHECKBOX (ID_CHANGE_COLOUR, MyPanel::OnChangeColour)
3e2dd3db
VZ
573EVT_BUTTON (ID_BUTTON_TEST1, MyPanel::OnTestButton)
574EVT_BUTTON (ID_BUTTON_TEST2, MyPanel::OnTestButton)
9121bed2 575EVT_BUTTON (ID_BITMAP_BTN, MyPanel::OnBmpButton)
bebc503c 576EVT_TOGGLEBUTTON(ID_BITMAP_BTN_ENABLE, MyPanel::OnBmpButtonToggle)
2b5f62a0
VZ
577
578EVT_CHECKBOX (ID_SIZER_CHECK1, MyPanel::OnSizerCheck)
579EVT_CHECKBOX (ID_SIZER_CHECK2, MyPanel::OnSizerCheck)
580EVT_CHECKBOX (ID_SIZER_CHECK3, MyPanel::OnSizerCheck)
581EVT_CHECKBOX (ID_SIZER_CHECK4, MyPanel::OnSizerCheck)
582EVT_CHECKBOX (ID_SIZER_CHECK14, MyPanel::OnSizerCheck)
583EVT_CHECKBOX (ID_SIZER_CHECKBIG, MyPanel::OnSizerCheck)
584
1c005ff7
RR
585END_EVENT_TABLE()
586
f6bcfd97
BP
587BEGIN_EVENT_TABLE(MyButton, wxButton)
588 EVT_LEFT_DCLICK(MyButton::OnDClick)
589END_EVENT_TABLE()
590
591BEGIN_EVENT_TABLE(MyComboBox, wxComboBox)
592 EVT_CHAR(MyComboBox::OnChar)
593 EVT_KEY_DOWN(MyComboBox::OnKeyDown)
594 EVT_KEY_UP(MyComboBox::OnKeyUp)
595
596 EVT_SET_FOCUS(MyComboBox::OnFocusGot)
597END_EVENT_TABLE()
598
599BEGIN_EVENT_TABLE(MyRadioBox, wxRadioBox)
600 EVT_SET_FOCUS(MyRadioBox::OnFocusGot)
601 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost)
602END_EVENT_TABLE()
603
1a84e759
RR
604BEGIN_EVENT_TABLE(MyChoice, wxChoice)
605 EVT_SET_FOCUS(MyChoice::OnFocusGot)
606 EVT_KILL_FOCUS(MyChoice::OnFocusLost)
607END_EVENT_TABLE()
608
f6bcfd97
BP
609// ============================================================================
610// implementation
611// ============================================================================
612
5fb9fcfc 613MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
9230b621 614 : wxPanel( frame, wxID_ANY, wxPoint(x, y), wxSize(w, h) )
1c005ff7 615{
946fb2b9
JS
616 m_listbox = NULL;
617 m_listboxSorted = NULL;
618#if wxUSE_CHOICE
619 m_choice = NULL;
620 m_choiceSorted = NULL;
6bb44116 621#endif // wxUSE_CHOICE
946fb2b9
JS
622 m_combo = NULL;
623 m_radio = NULL;
516ab399 624#if wxUSE_GAUGE
946fb2b9
JS
625 m_gauge = NULL;
626 m_gaugeVert = NULL;
516ab399 627#endif // wxUSE_GAUGE
6bb44116 628#if wxUSE_SLIDER
946fb2b9 629 m_slider = NULL;
6bb44116 630#endif // wxUSE_SLIDER
946fb2b9
JS
631 m_fontButton = NULL;
632 m_lbSelectNum = NULL;
633 m_lbSelectThis = NULL;
634#if wxUSE_SPINBTN
635 m_spinbutton = NULL;
516ab399 636#if wxUSE_PROGRESSDLG
946fb2b9 637 m_btnProgress = NULL;
516ab399 638#endif // wxUSE_PROGRESSDLG
946fb2b9
JS
639#endif // wxUSE_SPINBTN
640#if wxUSE_SPINCTRL
641 m_spinctrl = NULL;
642#endif // wxUSE_SPINCTRL
643 m_spintext = NULL;
644 m_checkbox = NULL;
645 m_text = NULL;
61c083e7 646 m_book = NULL;
946fb2b9
JS
647 m_label = NULL;
648
9a83f860 649 m_text = new wxTextCtrl(this, wxID_ANY, wxT("This is the log window.\n"),
3e2dd3db 650 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE);
655822f3 651
29e7e51a 652 m_logTargetOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_text));
0a772322 653
61c083e7 654 m_book = new wxBookCtrl(this, ID_BOOK);
655822f3 655
ec9f7884
VZ
656 wxString choices[] =
657 {
9a83f860
VZ
658 wxT("This"),
659 wxT("is"),
660 wxT("one of my long and"),
661 wxT("wonderful"),
662 wxT("examples.")
ec9f7884 663 };
655822f3 664
3cb332c1 665#ifndef __WXMSW__
ec9f7884
VZ
666 // image ids
667 enum
668 {
516ab399
WS
669 Image_List,
670 Image_Choice,
671 Image_Combo,
672 Image_Text,
673 Image_Radio,
674#if wxUSE_GAUGE
675 Image_Gauge,
676#endif // wxUSE_GAUGE
677 Image_Max
ec9f7884
VZ
678 };
679
680 // fill the image list
a374426f 681 wxBitmap bmp(list_xpm);
ec9f7884 682
a374426f
VZ
683 wxImageList *imagelist = new wxImageList(bmp.GetWidth(), bmp.GetHeight());
684
685 imagelist-> Add( bmp );
ec9f7884
VZ
686 imagelist-> Add( wxBitmap( choice_xpm ));
687 imagelist-> Add( wxBitmap( combo_xpm ));
688 imagelist-> Add( wxBitmap( text_xpm ));
689 imagelist-> Add( wxBitmap( radio_xpm ));
516ab399 690#if wxUSE_GAUGE
ec9f7884 691 imagelist-> Add( wxBitmap( gauge_xpm ));
516ab399 692#endif // wxUSE_GAUGE
61c083e7 693 m_book->SetImageList(imagelist);
3cb332c1 694#else
ec9f7884
VZ
695 // load images from resources
696 enum
697 {
516ab399
WS
698 Image_List,
699 Image_Choice,
700 Image_Combo,
701 Image_Text,
702 Image_Radio,
703#if wxUSE_GAUGE
704 Image_Gauge,
705#endif // wxUSE_GAUGE
706 Image_Max
ec9f7884 707 };
9230b621 708 wxImageList *imagelist = new wxImageList(16, 16, false, Image_Max);
ec9f7884 709
9f84eccd 710 static const wxChar *s_iconNames[Image_Max] =
ec9f7884 711 {
9a83f860
VZ
712 wxT("list")
713 , wxT("choice")
714 , wxT("combo")
715 , wxT("text")
716 , wxT("radio")
516ab399 717#if wxUSE_GAUGE
9a83f860 718 , wxT("gauge")
516ab399 719#endif // wxUSE_GAUGE
ec9f7884
VZ
720 };
721
722 for ( size_t n = 0; n < Image_Max; n++ )
723 {
724 wxBitmap bmp(s_iconNames[n]);
a1b806b9 725 if ( !bmp.IsOk() || (imagelist->Add(bmp) == -1) )
ec9f7884 726 {
61c083e7 727 wxLogWarning(wxT("Couldn't load the image '%s' for the book control page %d."),
ec9f7884
VZ
728 s_iconNames[n], n);
729 }
730 }
731
61c083e7 732 m_book->SetImageList(imagelist);
fc54776e 733#endif
2cb21a45 734
d159e964
VZ
735 // ------------------------------------------------------------------------
736 // listbox page
737 // ------------------------------------------------------------------------
61c083e7 738 wxPanel *panel = new wxPanel(m_book);
6c8a980f
VZ
739 m_listbox = new wxListBox( panel, ID_LISTBOX,
740 wxPoint(10,10), wxSize(120,70),
6695f8f8 741 5, choices, wxLB_MULTIPLE | wxLB_ALWAYS_SB | wxHSCROLL );
6c8a980f
VZ
742 m_listboxSorted = new wxListBox( panel, ID_LISTBOX_SORTED,
743 wxPoint(10,90), wxSize(120,70),
6695f8f8 744 3, choices, wxLB_SORT );
6c8a980f 745
8b81a824
VS
746 SetListboxClientData(wxT("listbox"), m_listbox);
747 SetListboxClientData(wxT("listbox"), m_listboxSorted);
9838df2c 748
ec9f7884 749 m_listbox->SetCursor(*wxCROSS_CURSOR);
9f3362c4 750
9a83f860
VZ
751 m_lbSelectNum = new wxButton( panel, ID_LISTBOX_SEL_NUM, wxT("Select #&2"), wxPoint(180,30), wxSize(140,30) );
752 m_lbSelectThis = new wxButton( panel, ID_LISTBOX_SEL_STR, wxT("&Select 'This'"), wxPoint(340,30), wxSize(140,30) );
753 (void)new wxButton( panel, ID_LISTBOX_CLEAR, wxT("&Clear"), wxPoint(180,80), wxSize(140,30) );
754 (void)new MyButton( panel, ID_LISTBOX_APPEND, wxT("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) );
755 (void)new wxButton( panel, ID_LISTBOX_DELETE, wxT("D&elete selected item"), wxPoint(180,130), wxSize(140,30) );
756 wxButton *button = new MyButton( panel, ID_LISTBOX_FONT, wxT("Set &Italic font"), wxPoint(340,130), wxSize(140,30) );
57160afe
VZ
757
758 button->SetDefault();
57160afe 759
9a83f860 760 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, wxT("&Disable"), wxPoint(20,170) );
9230b621 761 m_checkbox->SetValue(false);
35960bbf 762 button->MoveAfterInTabOrder(m_checkbox);
9a83f860 763 (void)new wxCheckBox( panel, ID_CHANGE_COLOUR, wxT("&Toggle colour"),
87a1e308 764 wxPoint(110,170) );
9121bed2 765 panel->SetCursor(wxCursor(wxCURSOR_HAND));
9a83f860 766 m_book->AddPage(panel, wxT("wxListBox"), true, Image_List);
ec9f7884 767
d159e964
VZ
768 // ------------------------------------------------------------------------
769 // choice page
770 // ------------------------------------------------------------------------
1ccd23f5 771#if wxUSE_CHOICE
61c083e7 772 panel = new wxPanel(m_book);
1a84e759
RR
773 m_choice = new MyChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,wxDefaultCoord), 5, choices );
774 m_choiceSorted = new MyChoice( panel, ID_CHOICE_SORTED, wxPoint(10,70), wxSize(120,wxDefaultCoord),
b56c2246 775 5, choices, wxCB_SORT );
6c8a980f 776
8b81a824
VS
777 SetChoiceClientData(wxT("choice"), m_choice);
778 SetChoiceClientData(wxT("choice"), m_choiceSorted);
6c8a980f 779
ddc8c2e3 780 m_choice->SetSelection(2);
9a83f860
VZ
781 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, wxT("Select #&2"), wxPoint(180,30), wxSize(140,30) );
782 (void)new wxButton( panel, ID_CHOICE_SEL_STR, wxT("&Select 'This'"), wxPoint(340,30), wxSize(140,30) );
783 (void)new wxButton( panel, ID_CHOICE_CLEAR, wxT("&Clear"), wxPoint(180,80), wxSize(140,30) );
784 (void)new wxButton( panel, ID_CHOICE_APPEND, wxT("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) );
785 (void)new wxButton( panel, ID_CHOICE_DELETE, wxT("D&elete selected item"), wxPoint(180,130), wxSize(140,30) );
786 (void)new wxButton( panel, ID_CHOICE_FONT, wxT("Set &Italic font"), wxPoint(340,130), wxSize(140,30) );
787 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, wxT("&Disable"), wxPoint(20,130), wxSize(140,30) );
788
789 m_book->AddPage(panel, wxT("wxChoice"), false, Image_Choice);
1ccd23f5 790#endif // wxUSE_CHOICE
ec9f7884 791
d159e964
VZ
792 // ------------------------------------------------------------------------
793 // combo page
794 // ------------------------------------------------------------------------
61c083e7 795 panel = new wxPanel(m_book);
9a83f860 796 (void)new wxStaticBox( panel, wxID_ANY, wxT("&Box around combobox"),
f048e32f 797 wxPoint(5, 5), wxSize(150, 100));
9a83f860 798 m_combo = new MyComboBox( panel, ID_COMBO, wxT("This"),
422d0ff0 799 wxPoint(20,25), wxSize(120, wxDefaultCoord),
f6bcfd97 800 5, choices,
8e13c1ec 801 wxTE_PROCESS_ENTER);
f6bcfd97 802
9a83f860
VZ
803 (void)new wxButton( panel, ID_COMBO_SEL_NUM, wxT("Select #&2"), wxPoint(180,30), wxSize(140,30) );
804 (void)new wxButton( panel, ID_COMBO_SEL_STR, wxT("&Select 'This'"), wxPoint(340,30), wxSize(140,30) );
805 (void)new wxButton( panel, ID_COMBO_CLEAR, wxT("&Clear"), wxPoint(180,80), wxSize(140,30) );
806 (void)new wxButton( panel, ID_COMBO_APPEND, wxT("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) );
807 (void)new wxButton( panel, ID_COMBO_DELETE, wxT("D&elete selected item"), wxPoint(180,130), wxSize(140,30) );
808 (void)new wxButton( panel, ID_COMBO_FONT, wxT("Set &Italic font"), wxPoint(340,130), wxSize(140,30) );
809 (void)new wxButton( panel, ID_COMBO_SET_TEXT, wxT("Set 'Hi!' at #2"), wxPoint(340,180), wxSize(140,30) );
810 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, wxT("&Disable"), wxPoint(20,130), wxSize(140,30) );
811 m_book->AddPage(panel, wxT("wxComboBox"), false, Image_Combo);
ec9f7884 812
d159e964
VZ
813 // ------------------------------------------------------------------------
814 // radio box
815 // ------------------------------------------------------------------------
ec9f7884
VZ
816 wxString choices2[] =
817 {
9a83f860 818 wxT("First"), wxT("Second"),
0a772322 819 /* "Third",
17867d61
RR
820 "Fourth", "Fifth", "Sixth",
821 "Seventh", "Eighth", "Nineth", "Tenth" */
ec9f7884
VZ
822 };
823
61c083e7 824 panel = new wxPanel(m_book);
d159e964
VZ
825 wxGridBagSizer* radio_page_sizer = new wxGridBagSizer(5, 5);
826
9a83f860 827 m_radio = new wxRadioBox(panel, ID_RADIOBOX, wxT("T&his"),
be8b4385
VZ
828 wxPoint(10,10), wxDefaultSize,
829 WXSIZEOF(choices), choices,
830 1, wxRA_SPECIFY_COLS );
d159e964
VZ
831 MyRadioBox* mybox = new MyRadioBox(panel, ID_RADIOBOX2, wxT("&That"),
832 wxPoint(10,160), wxDefaultSize,
833 WXSIZEOF(choices2), choices2,
834 1, wxRA_SPECIFY_ROWS );
835
836 radio_page_sizer->Add( m_radio, wxGBPosition(0,0), wxGBSpan(2,1) );
837 radio_page_sizer->Add( mybox, wxGBPosition(2,0), wxGBSpan(2,1) );
f048e32f 838
1a8b677e 839#if wxUSE_HELP
d159e964
VZ
840 for (unsigned int item = 0; item < WXSIZEOF(choices); ++item)
841 m_radio->SetItemHelpText( item, wxString::Format( wxT("Help text for \"%s\""),
842 choices[item].c_str() ) );
1a8b677e
VZ
843
844 // erase help text for the second item
9a83f860 845 m_radio->SetItemHelpText( 1, wxT("") );
1a8b677e 846 // set default help text for control
9a83f860 847 m_radio->SetHelpText( wxT("Default helptext for wxRadioBox") );
1a8b677e
VZ
848#endif // wxUSE_HELP
849
d159e964
VZ
850 wxButton* select_two = new wxButton ( panel, ID_RADIOBOX_SEL_NUM, wxT("Select #&2") );
851 wxButton* select_this = new wxButton ( panel, ID_RADIOBOX_SEL_STR, wxT("&Select 'This'") );
852 m_fontButton = new wxButton ( panel, ID_SET_FONT, wxT("Set &more Italic font") );
853 wxButton* set_italic = new wxButton ( panel, ID_RADIOBOX_FONT, wxT("Set &Italic font") );
854 wxCheckBox* disable_cb = new wxCheckBox( panel, ID_RADIOBOX_ENABLE, wxT("&Disable") );
855 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, wxT("Radiobutton1"),
856 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
857 wxRadioButton *rb2 = new wxRadioButton( panel, ID_RADIOBUTTON_2, wxT("&Radiobutton2"),
858 wxDefaultPosition, wxDefaultSize );
9230b621 859 rb->SetValue( false );
d159e964
VZ
860
861 radio_page_sizer->Add( select_two, wxGBPosition(0, 1), wxDefaultSpan, wxALL , 10 );
862 radio_page_sizer->Add( select_this, wxGBPosition(1, 1), wxDefaultSpan, wxALL , 10 );
863 radio_page_sizer->Add( m_fontButton, wxGBPosition(0, 2), wxDefaultSpan, wxALL , 10 );
864 radio_page_sizer->Add( set_italic, wxGBPosition(1, 2), wxDefaultSpan, wxALL , 10 );
865 radio_page_sizer->Add( disable_cb, wxGBPosition(2, 2), wxDefaultSpan, wxLEFT | wxRIGHT, 10 );
866 radio_page_sizer->Add( rb, wxGBPosition(3, 1), wxDefaultSpan, wxLEFT | wxRIGHT, 10 );
867 radio_page_sizer->Add( rb2, wxGBPosition(3, 2), wxDefaultSpan, wxLEFT | wxRIGHT, 10 );
868
869 panel->SetSizer( radio_page_sizer );
870
9a83f860 871 m_book->AddPage(panel, wxT("wxRadioBox"), false, Image_Radio);
ec9f7884 872
d159e964
VZ
873 // ------------------------------------------------------------------------
874 // gauge and slider
875 // ------------------------------------------------------------------------
1dd815f3 876
6bb44116 877#if wxUSE_SLIDER && wxUSE_GAUGE
61c083e7 878 panel = new wxPanel(m_book);
0d29fecd 879
d159e964
VZ
880 wxBoxSizer *gauge_page_vsizer = new wxBoxSizer( wxVERTICAL );
881
882 wxBoxSizer *gauge_page_first_row_sizer = new wxBoxSizer( wxHORIZONTAL );
0d29fecd 883
9a83f860 884 wxStaticBoxSizer *gauge_sizer = new wxStaticBoxSizer( wxHORIZONTAL, panel, wxT("&wxGauge and wxSlider") );
d159e964 885 gauge_page_first_row_sizer->Add( gauge_sizer, 0, wxALL, 5 );
1dd815f3
RR
886 wxBoxSizer *sz = new wxBoxSizer( wxVERTICAL );
887 gauge_sizer->Add( sz );
888 m_gauge = new wxGauge( panel, wxID_ANY, 200, wxDefaultPosition, wxSize(155, 30), wxGA_HORIZONTAL|wxNO_BORDER );
1dd815f3 889 sz->Add( m_gauge, 0, wxALL, 10 );
bebc503c 890 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200,
1dd815f3 891 wxDefaultPosition, wxSize(155,wxDefaultCoord),
bebc503c 892 wxSL_AUTOTICKS | wxSL_LABELS);
0a12e013 893 m_slider->SetTickFreq(40);
1dd815f3 894 sz->Add( m_slider, 0, wxALL, 10 );
0d29fecd 895
1dd815f3
RR
896 m_gaugeVert = new wxGauge( panel, wxID_ANY, 100,
897 wxDefaultPosition, wxSize(wxDefaultCoord, 90),
898 wxGA_VERTICAL | wxGA_SMOOTH | wxNO_BORDER );
899 gauge_sizer->Add( m_gaugeVert, 0, wxALL, 10 );
900
8b1d8f36 901
1dd815f3 902
9a83f860 903 wxStaticBox *sb = new wxStaticBox( panel, wxID_ANY, wxT("&Explanation"),
1dd815f3
RR
904 wxDefaultPosition, wxDefaultSize ); //, wxALIGN_CENTER );
905 wxStaticBoxSizer *wrapping_sizer = new wxStaticBoxSizer( sb, wxVERTICAL );
d159e964 906 gauge_page_first_row_sizer->Add( wrapping_sizer, 0, wxALL, 5 );
4d23a4bf 907
9838df2c 908#ifdef __WXMOTIF__
ec9f7884 909 // No wrapping text in wxStaticText yet :-(
1dd815f3 910 m_wrappingText = new wxStaticText( panel, wxID_ANY,
9a83f860 911 wxT("Drag the slider!"),
37ed3ae3 912 wxPoint(250,30),
422d0ff0 913 wxSize(240, wxDefaultCoord)
ec9f7884 914 );
9838df2c 915#else
1dd815f3 916 m_wrappingText = new wxStaticText( panel, wxID_ANY,
9a83f860
VZ
917 wxT("In order see the gauge (aka progress bar) ")
918 wxT("control do something you have to drag the ")
919 wxT("handle of the slider to the right.")
920 wxT("\n\n")
921 wxT("This is also supposed to demonstrate how ")
922 wxT("to use static controls with line wrapping."),
1dd815f3 923 wxDefaultPosition,
a71d815b 924 wxSize(240, wxDefaultCoord)
ec9f7884 925 );
9838df2c 926#endif
1dd815f3
RR
927 wrapping_sizer->Add( m_wrappingText );
928
929 wxStaticBoxSizer *non_wrapping_sizer = new wxStaticBoxSizer( wxVERTICAL, panel, wxT("Non-wrapping") );
d159e964 930 gauge_page_first_row_sizer->Add( non_wrapping_sizer, 0, wxALL, 5 );
1dd815f3
RR
931
932 m_nonWrappingText = new wxStaticText( panel, wxID_ANY,
9a83f860 933 wxT("This static text has two lines.\nThey do not wrap."),
1dd815f3
RR
934 wxDefaultPosition,
935 wxDefaultSize
936 );
937 non_wrapping_sizer->Add( m_nonWrappingText );
938
d159e964
VZ
939 gauge_page_vsizer->Add( gauge_page_first_row_sizer, 1 );
940 wxBoxSizer *gauge_page_second_row_sizer = new wxBoxSizer( wxHORIZONTAL );
941
1dd815f3 942
8c3c31d4
VZ
943 int initialSpinValue = -5;
944 wxString s;
945 s << initialSpinValue;
d159e964
VZ
946 m_spintext = new wxTextCtrl( panel, wxID_ANY, s );
947 gauge_page_second_row_sizer->Add( m_spintext, 0, wxALL, 5 );
948
0e528b99 949#if wxUSE_SPINBTN
d159e964 950 m_spinbutton = new wxSpinButton( panel, ID_SPIN );
e94ff4cb 951 m_spinbutton->SetRange(-40,30);
8c3c31d4 952 m_spinbutton->SetValue(initialSpinValue);
d159e964 953 gauge_page_second_row_sizer->Add( m_spinbutton, 0, wxALL, 5 );
0e528b99 954#endif // wxUSE_SPINBTN
b782f2e0
VZ
955
956#if wxUSE_SPINCTRL
d159e964 957 m_spinctrl = new wxSpinCtrl( panel, ID_SPINCTRL, wxEmptyString );
69199aad 958 m_spinctrl->SetRange(-10,30);
b782f2e0 959 m_spinctrl->SetValue(15);
d159e964 960 gauge_page_second_row_sizer->Add( m_spinctrl, 0, wxALL, 5 );
b782f2e0
VZ
961#endif // wxUSE_SPINCTRL
962
d159e964
VZ
963#if wxUSE_SPINBTN
964#if wxUSE_PROGRESSDLG
965 m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, wxT("&Show progress dialog") );
966 gauge_page_second_row_sizer->Add( m_btnProgress, 0, wxALL, 5 );
967#endif // wxUSE_PROGRESSDLG
968#endif // wxUSE_SPINBTN
969
970 wxButton* newTextButton = new wxButton( panel, ID_BTNNEWTEXT, wxT("New text"));
971 gauge_page_second_row_sizer->Add( newTextButton, 0, wxALL, 5 );
972
973 gauge_page_vsizer->Add(gauge_page_second_row_sizer, 1);
974 panel->SetSizer( gauge_page_vsizer );
975
9a83f860 976 m_book->AddPage(panel, wxT("wxGauge"), false, Image_Gauge);
6bb44116 977#endif // wxUSE_SLIDER && wxUSE_GAUGE
45e41c05 978
1dd815f3 979
d159e964
VZ
980 // ------------------------------------------------------------------------
981 // wxBitmapXXX
982 // ------------------------------------------------------------------------
983
61c083e7 984 panel = new wxPanel(m_book);
b782f2e0 985
3a5bcc4d 986#if !defined(__WXMOTIF__) // wxStaticBitmap not working under Motif yet.
389d906b 987 wxIcon icon = wxArtProvider::GetIcon(wxART_INFORMATION);
9230b621 988 (void) new wxStaticBitmap( panel, wxID_ANY, icon, wxPoint(10, 10) );
45e41c05 989
bebe1443 990 // VZ: don't leak memory
9230b621 991 // bmpStatic = new wxStaticBitmap(panel, wxID_ANY, wxNullIcon, wxPoint(50, 10));
bebe1443 992 // bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION));
b782f2e0
VZ
993#endif // !Motif
994
45e41c05
VZ
995 wxBitmap bitmap( 100, 100 );
996 wxMemoryDC dc;
997 dc.SelectObject( bitmap );
90d05e9b
JG
998 dc.SetBackground(*wxGREEN);
999 dc.SetPen(*wxRED_PEN);
f048e32f 1000 dc.Clear();
45e41c05 1001 dc.DrawEllipse(5, 5, 90, 90);
9a83f860 1002 dc.DrawText(wxT("Bitmap"), 30, 40);
45e41c05
VZ
1003 dc.SelectObject( wxNullBitmap );
1004
d9317033
VZ
1005 wxPanel *panel2 = new wxPanel(panel, -1, wxPoint(100, 0), wxSize(100, 200));
1006 (void)new wxBitmapButton(panel2, ID_BITMAP_BTN, bitmap, wxPoint(0, 20));
1007 (void)new wxToggleButton(panel2, ID_BITMAP_BTN_ENABLE,
1008 wxT("Enable/disable &bitmap"), wxPoint(0, 140));
f048e32f 1009
aae0472b 1010#if defined(__WXMSW__) || defined(__WXMOTIF__)
3e2dd3db 1011 // test for masked bitmap display
9a83f860 1012 bitmap = wxBitmap(wxT("test2.bmp"), wxBITMAP_TYPE_BMP);
a1b806b9 1013 if (bitmap.IsOk())
9bb3479c
JS
1014 {
1015 bitmap.SetMask(new wxMask(bitmap, *wxBLUE));
669f7a11 1016
bebc503c 1017 (void)new wxStaticBitmap(panel, wxID_ANY, bitmap, wxPoint(300, 120));
9bb3479c 1018 }
57160afe 1019#endif
5ef2e633 1020
389d906b
VS
1021 wxBitmap bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION)),
1022 bmp2(wxArtProvider::GetBitmap(wxART_WARNING)),
1023 bmp3(wxArtProvider::GetBitmap(wxART_QUESTION));
f048e32f
VZ
1024 wxBitmapButton *bmpBtn = new wxBitmapButton
1025 (
9230b621 1026 panel, wxID_ANY,
f048e32f 1027 bmp1,
1db8dc4a 1028 wxPoint(30, 70)
f048e32f 1029 );
76fcf0f2 1030
f048e32f
VZ
1031 bmpBtn->SetBitmapSelected(bmp2);
1032 bmpBtn->SetBitmapFocus(bmp3);
1033
1db8dc4a 1034 (void)new wxToggleButton(panel, ID_BUTTON_LABEL,
9a83f860 1035 wxT("&Toggle label"), wxPoint(250, 20));
bedaf53e 1036
9a83f860 1037 m_label = new wxStaticText(panel, wxID_ANY, wxT("Label with some long text"),
185fa6bf 1038 wxPoint(250, 60), wxDefaultSize,
f6bcfd97 1039 wxALIGN_RIGHT /*| wxST_NO_AUTORESIZE*/);
103aab26 1040 m_label->SetForegroundColour( *wxBLUE );
2ac1b69a 1041
9a83f860 1042 m_book->AddPage(panel, wxT("wxBitmapXXX"));
dcc71398 1043
d159e964
VZ
1044 // ------------------------------------------------------------------------
1045 // sizer page
1046 // ------------------------------------------------------------------------
1047
61c083e7 1048 panel = new wxPanel(m_book);
dcc71398 1049
2b5f62a0
VZ
1050 wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
1051
1052 wxStaticBoxSizer *csizer =
9a83f860 1053 new wxStaticBoxSizer (new wxStaticBox (panel, wxID_ANY, wxT("Show Buttons")), wxHORIZONTAL );
61c083e7 1054
2b5f62a0 1055 wxCheckBox *check1, *check2, *check3, *check4, *check14, *checkBig;
9a83f860 1056 check1 = new wxCheckBox (panel, ID_SIZER_CHECK1, wxT("1"));
9230b621 1057 check1->SetValue (true);
2b5f62a0 1058 csizer->Add (check1);
9a83f860 1059 check2 = new wxCheckBox (panel, ID_SIZER_CHECK2, wxT("2"));
9230b621 1060 check2->SetValue (true);
2b5f62a0 1061 csizer->Add (check2);
9a83f860 1062 check3 = new wxCheckBox (panel, ID_SIZER_CHECK3, wxT("3"));
9230b621 1063 check3->SetValue (true);
2b5f62a0 1064 csizer->Add (check3);
9a83f860 1065 check4 = new wxCheckBox (panel, ID_SIZER_CHECK4, wxT("4"));
9230b621 1066 check4->SetValue (true);
2b5f62a0 1067 csizer->Add (check4);
9a83f860 1068 check14 = new wxCheckBox (panel, ID_SIZER_CHECK14, wxT("1-4"));
9230b621 1069 check14->SetValue (true);
2b5f62a0 1070 csizer->Add (check14);
9a83f860 1071 checkBig = new wxCheckBox (panel, ID_SIZER_CHECKBIG, wxT("Big"));
9230b621 1072 checkBig->SetValue (true);
2b5f62a0 1073 csizer->Add (checkBig);
61c083e7 1074
2b5f62a0
VZ
1075 sizer->Add (csizer);
1076
1077 m_hsizer = new wxBoxSizer( wxHORIZONTAL );
9d9b7755 1078
2b5f62a0 1079 m_buttonSizer = new wxBoxSizer (wxVERTICAL);
61c083e7 1080
9a83f860 1081 m_sizerBtn1 = new wxButton(panel, wxID_ANY, wxT("Test Button &1 (tab order 1)") );
2b5f62a0 1082 m_buttonSizer->Add( m_sizerBtn1, 0, wxALL, 10 );
9a83f860 1083 m_sizerBtn2 = new wxButton(panel, wxID_ANY, wxT("Test Button &2 (tab order 3)") );
2b5f62a0 1084 m_buttonSizer->Add( m_sizerBtn2, 0, wxALL, 10 );
9a83f860 1085 m_sizerBtn3 = new wxButton(panel, wxID_ANY, wxT("Test Button &3 (tab order 2)") );
2b5f62a0 1086 m_buttonSizer->Add( m_sizerBtn3, 0, wxALL, 10 );
9a83f860 1087 m_sizerBtn4 = new wxButton(panel, wxID_ANY, wxT("Test Button &4 (tab order 4)") );
2b5f62a0
VZ
1088 m_buttonSizer->Add( m_sizerBtn4, 0, wxALL, 10 );
1089
3f93f659
VS
1090 m_sizerBtn3->MoveBeforeInTabOrder(m_sizerBtn2);
1091
2b5f62a0
VZ
1092 m_hsizer->Add (m_buttonSizer);
1093 m_hsizer->Add( 20,20, 1 );
9a83f860 1094 m_bigBtn = new wxButton(panel, wxID_ANY, wxT("Multiline\nbutton") );
2b5f62a0
VZ
1095 m_hsizer->Add( m_bigBtn , 3, wxGROW|wxALL, 10 );
1096
1097 sizer->Add (m_hsizer, 1, wxGROW);
9d9b7755
VZ
1098
1099 panel->SetSizer( sizer );
1100
9a83f860 1101 m_book->AddPage(panel, wxT("wxSizer"));
655822f3 1102
9ae19599
VZ
1103 // set the sizer for the panel itself
1104 sizer = new wxBoxSizer(wxVERTICAL);
1105 sizer->Add(m_book, wxSizerFlags().Border().Expand());
1106 sizer->Add(m_text, wxSizerFlags(1).Border().Expand());
1107 SetSizer(sizer);
be8b4385
VZ
1108
1109#if wxUSE_TOOLTIPS
1110 SetAllToolTips();
1111#endif // wxUSE_TOOLTIPS
1c005ff7
RR
1112}
1113
be8b4385
VZ
1114#if wxUSE_TOOLTIPS
1115
1116namespace
1117{
1118
1119void ResetToolTip(wxWindow *win, const char *tip)
1120{
1121 wxCHECK_RET( win, "NULL window?" );
1122
1123 win->UnsetToolTip();
1124 win->SetToolTip(tip);
1125}
1126
1127}
1128
1129void MyPanel::SetAllToolTips()
1130{
1131 ResetToolTip(FindWindow(ID_LISTBOX_FONT), "Press here to set italic font");
1132 ResetToolTip(m_checkbox, "Click here to disable the listbox");
1133 ResetToolTip(m_listbox, "This is a list box");
1134 ResetToolTip(m_combo, "This is a natural\ncombobox - can you believe me?");
1135 ResetToolTip(m_slider, "This is a sliding slider");
1136 ResetToolTip(FindWindow(ID_RADIOBOX2), "Ever seen a radiobox?");
1137
1138 //ResetToolTip(m_radio, "Tooltip for the entire radiobox");
1139 for ( unsigned int nb = 0; nb < m_radio->GetCount(); nb++ )
1140 {
1141 m_radio->SetItemToolTip(nb, "");
1142 m_radio->SetItemToolTip(nb, "tooltip for\n" + m_radio->GetString(nb));
1143 }
1144
1145 // remove the tooltip for one of the items
1146 m_radio->SetItemToolTip(2, "");
1147}
1148#endif // wxUSE_TOOLTIPS
1149
f226be17
VZ
1150void MyPanel::OnIdle(wxIdleEvent& event)
1151{
1152 static const int INVALID_SELECTION = -2;
1153
1154 static int s_selCombo = INVALID_SELECTION;
25e19bdf
JS
1155
1156 if (!m_combo || !m_choice)
1157 {
1158 event.Skip();
1159 return;
1160 }
1161
f226be17
VZ
1162 int sel = m_combo->GetSelection();
1163 if ( sel != s_selCombo )
1164 {
1165 if ( s_selCombo != INVALID_SELECTION )
1166 {
9a83f860 1167 wxLogMessage(wxT("EVT_IDLE: combobox selection changed from %d to %d"),
f226be17
VZ
1168 s_selCombo, sel);
1169 }
1170
1171 s_selCombo = sel;
1172 }
1173
d6bbc10c
VZ
1174 static int s_selChoice = INVALID_SELECTION;
1175 sel = m_choice->GetSelection();
1176 if ( sel != s_selChoice )
1177 {
1178 if ( s_selChoice != INVALID_SELECTION )
1179 {
9a83f860 1180 wxLogMessage(wxT("EVT_IDLE: choice selection changed from %d to %d"),
d6bbc10c
VZ
1181 s_selChoice, sel);
1182 }
1183
1184 s_selChoice = sel;
1185 }
1186
f226be17
VZ
1187 event.Skip();
1188}
1189
61c083e7 1190void MyPanel::OnPageChanging( wxBookCtrlEvent &event )
4d0f3cd6 1191{
45e41c05
VZ
1192 int selOld = event.GetOldSelection();
1193 if ( selOld == 2 )
4d0f3cd6 1194 {
9a83f860
VZ
1195 if ( wxMessageBox(wxT("This demonstrates how a program may prevent the\n")
1196 wxT("page change from taking place - if you select\n")
1197 wxT("[No] the current page will stay the third one\n"),
1198 wxT("Control sample"),
f6bcfd97 1199 wxICON_QUESTION | wxYES_NO, this) != wxYES )
8c3c31d4
VZ
1200 {
1201 event.Veto();
45e41c05 1202
8c3c31d4
VZ
1203 return;
1204 }
4d0f3cd6 1205 }
45e41c05 1206
9a83f860
VZ
1207 *m_text << wxT("Book selection is being changed from ") << selOld
1208 << wxT(" to ") << event.GetSelection()
1209 << wxT(" (current page from book is ")
1210 << m_book->GetSelection() << wxT(")\n");
4d0f3cd6
VZ
1211}
1212
61c083e7 1213void MyPanel::OnPageChanged( wxBookCtrlEvent &event )
cb43b372 1214{
9a83f860
VZ
1215 *m_text << wxT("Book selection is now ") << event.GetSelection()
1216 << wxT(" (from book: ") << m_book->GetSelection()
1217 << wxT(")\n");
cb43b372
RR
1218}
1219
3e2dd3db
VZ
1220void MyPanel::OnTestButton(wxCommandEvent& event)
1221{
9a83f860
VZ
1222 wxLogMessage(wxT("Button %c clicked."),
1223 event.GetId() == ID_BUTTON_TEST1 ? wxT('1') : wxT('2'));
3e2dd3db
VZ
1224}
1225
87728739 1226void MyPanel::OnBmpButton(wxCommandEvent& WXUNUSED(event))
9121bed2 1227{
9a83f860 1228 wxLogMessage(wxT("Bitmap button clicked."));
9121bed2
VZ
1229}
1230
bebc503c
VZ
1231void MyPanel::OnBmpButtonToggle(wxCommandEvent& event)
1232{
1233 FindWindow(ID_BITMAP_BTN)->Enable(!event.IsChecked());
1234}
1235
87a1e308
VZ
1236void MyPanel::OnChangeColour(wxCommandEvent& WXUNUSED(event))
1237{
1238 static wxColour s_colOld;
1239
29c749b8 1240 SetThemeEnabled(false);
87a1e308 1241 // test panel colour changing and propagation to the subcontrols
a1b806b9 1242 if ( s_colOld.IsOk() )
87a1e308
VZ
1243 {
1244 SetBackgroundColour(s_colOld);
1245 s_colOld = wxNullColour;
1246
29c749b8
VS
1247 m_lbSelectThis->SetForegroundColour(wxNullColour);
1248 m_lbSelectThis->SetBackgroundColour(wxNullColour);
87a1e308
VZ
1249 }
1250 else
1251 {
a60b1f5d
MB
1252 s_colOld = wxColour(wxT("red"));
1253 SetBackgroundColour(wxT("white"));
87a1e308 1254
a60b1f5d
MB
1255 m_lbSelectThis->SetForegroundColour(wxT("white"));
1256 m_lbSelectThis->SetBackgroundColour(wxT("red"));
87a1e308
VZ
1257 }
1258
1259 m_lbSelectThis->Refresh();
1260 Refresh();
1261}
1262
1c005ff7
RR
1263void MyPanel::OnListBox( wxCommandEvent &event )
1264{
6c8a980f
VZ
1265 wxListBox *listbox = event.GetId() == ID_LISTBOX ? m_listbox
1266 : m_listboxSorted;
1267
0f252d11
RR
1268 bool deselect = false;
1269 if (listbox->HasFlag(wxLB_MULTIPLE) || listbox->HasFlag(wxLB_EXTENDED))
1270 {
1271 deselect = !event.IsSelection();
1272 if (deselect)
9a83f860 1273 m_text->AppendText( wxT("ListBox deselection event\n") );
0f252d11
RR
1274 }
1275
9a83f860 1276 m_text->AppendText( wxT("ListBox event selection string is: '") );
ec9f7884 1277 m_text->AppendText( event.GetString() );
9a83f860 1278 m_text->AppendText( wxT("'\n") );
45262a34
VZ
1279
1280 // can't use GetStringSelection() with multiple selections, there could be
1281 // more than one of them
0f252d11 1282 if ( !listbox->HasFlag(wxLB_MULTIPLE) && !listbox->HasFlag(wxLB_EXTENDED) )
45262a34 1283 {
9a83f860 1284 m_text->AppendText( wxT("ListBox control selection string is: '") );
45262a34 1285 m_text->AppendText( listbox->GetStringSelection() );
9a83f860 1286 m_text->AppendText( wxT("'\n") );
45262a34 1287 }
6c8a980f
VZ
1288
1289 wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject());
9a83f860 1290 m_text->AppendText( wxT("ListBox event client data string is: '") );
6e47faf1 1291 if (obj) // BC++ doesn't like use of '? .. : .. ' in this context
74a533f7 1292 m_text->AppendText( obj->GetData() );
6e47faf1 1293 else
9a83f860 1294 m_text->AppendText( wxString(wxT("none")) );
6e47faf1 1295
9a83f860
VZ
1296 m_text->AppendText( wxT("'\n") );
1297 m_text->AppendText( wxT("ListBox control client data string is: '") );
45262a34 1298 obj = (wxStringClientData *)listbox->GetClientObject(event.GetInt());
6e47faf1 1299 if (obj)
74a533f7 1300 m_text->AppendText( obj->GetData() );
6e47faf1 1301 else
9a83f860
VZ
1302 m_text->AppendText( wxString(wxT("none")) );
1303 m_text->AppendText( wxT("'\n") );
1c005ff7
RR
1304}
1305
5b077d48
RR
1306void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
1307{
9a83f860 1308 m_text->AppendText( wxT("ListBox double click string is: ") );
ec9f7884 1309 m_text->AppendText( event.GetString() );
9a83f860 1310 m_text->AppendText( wxT("\n") );
5b077d48
RR
1311}
1312
47908e25
RR
1313void MyPanel::OnListBoxButtons( wxCommandEvent &event )
1314{
ec9f7884 1315 switch (event.GetId())
d3904ceb 1316 {
ec9f7884
VZ
1317 case ID_LISTBOX_ENABLE:
1318 {
9a83f860 1319 m_text->AppendText(wxT("Checkbox clicked.\n"));
b8653fbf 1320#if wxUSE_TOOLTIPS
0ae0226b 1321 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
ec9f7884 1322 if (event.GetInt())
9a83f860 1323 cb->SetToolTip( wxT("Click to enable listbox") );
ec9f7884 1324 else
9a83f860 1325 cb->SetToolTip( wxT("Click to disable listbox") );
16f6dfd8 1326#endif // wxUSE_TOOLTIPS
ec9f7884 1327 m_listbox->Enable( event.GetInt() == 0 );
57160afe
VZ
1328 m_lbSelectThis->Enable( event.GetInt() == 0 );
1329 m_lbSelectNum->Enable( event.GetInt() == 0 );
6c8a980f 1330 m_listboxSorted->Enable( event.GetInt() == 0 );
ee6e1b1d 1331 FindWindow(ID_CHANGE_COLOUR)->Enable( event.GetInt() == 0 );
ec9f7884
VZ
1332 break;
1333 }
1334 case ID_LISTBOX_SEL_NUM:
1335 {
91f2c154
JS
1336 if (m_listbox->GetCount() > 2)
1337 m_listbox->SetSelection( 2 );
1338 if (m_listboxSorted->GetCount() > 2)
1339 m_listboxSorted->SetSelection( 2 );
8c3c31d4 1340 m_lbSelectThis->WarpPointer( 40, 14 );
ec9f7884
VZ
1341 break;
1342 }
1343 case ID_LISTBOX_SEL_STR:
1344 {
9a83f860
VZ
1345 if (m_listbox->FindString(wxT("This")) != wxNOT_FOUND)
1346 m_listbox->SetStringSelection( wxT("This") );
1347 if (m_listboxSorted->FindString(wxT("This")) != wxNOT_FOUND)
1348 m_listboxSorted->SetStringSelection( wxT("This") );
8c3c31d4 1349 m_lbSelectNum->WarpPointer( 40, 14 );
ec9f7884
VZ
1350 break;
1351 }
1352 case ID_LISTBOX_CLEAR:
1353 {
1354 m_listbox->Clear();
6c8a980f 1355 m_listboxSorted->Clear();
ec9f7884
VZ
1356 break;
1357 }
1358 case ID_LISTBOX_APPEND:
1359 {
9a83f860
VZ
1360 m_listbox->Append( wxT("Hi kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk!") );
1361 m_listboxSorted->Append( wxT("Hi hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh!") );
ec9f7884
VZ
1362 break;
1363 }
1364 case ID_LISTBOX_DELETE:
1365 {
6c8a980f
VZ
1366 int idx;
1367 idx = m_listbox->GetSelection();
f6bcfd97
BP
1368 if ( idx != wxNOT_FOUND )
1369 m_listbox->Delete( idx );
6c8a980f 1370 idx = m_listboxSorted->GetSelection();
f6bcfd97
BP
1371 if ( idx != wxNOT_FOUND )
1372 m_listboxSorted->Delete( idx );
ec9f7884
VZ
1373 break;
1374 }
1375 case ID_LISTBOX_FONT:
1376 {
1377 m_listbox->SetFont( *wxITALIC_FONT );
6c8a980f 1378 m_listboxSorted->SetFont( *wxITALIC_FONT );
ec9f7884
VZ
1379 m_checkbox->SetFont( *wxITALIC_FONT );
1380 break;
1381 }
868a2826 1382 }
47908e25
RR
1383}
1384
1ccd23f5 1385#if wxUSE_CHOICE
bc50a2ae 1386
da603a67 1387static wxString GetDataString(wxClientData *data)
bc50a2ae 1388{
81d3348a 1389 return data ? static_cast<wxStringClientData *>(data)->GetData()
da603a67 1390 : wxString("none");
bc50a2ae
VZ
1391}
1392
47908e25
RR
1393void MyPanel::OnChoice( wxCommandEvent &event )
1394{
6c8a980f
VZ
1395 wxChoice *choice = event.GetId() == ID_CHOICE ? m_choice
1396 : m_choiceSorted;
1397
bc50a2ae 1398 const int sel = choice->GetSelection();
6c8a980f 1399
bc50a2ae
VZ
1400 wxClientData *dataEvt = event.GetClientObject(),
1401 *dataCtrl = choice->GetClientObject(sel);
6e47faf1 1402
9a83f860
VZ
1403 wxLogMessage(wxT("EVT_CHOICE: item %d/%d (event/control), ")
1404 wxT("string \"%s\"/\"%s\", ")
1405 wxT("data \"%s\"/\"%s\""),
bc50a2ae
VZ
1406 (int)event.GetInt(),
1407 sel,
da603a67
VZ
1408 event.GetString(),
1409 choice->GetStringSelection(),
bc50a2ae
VZ
1410 GetDataString(dataEvt),
1411 GetDataString(dataCtrl));
47908e25
RR
1412}
1413
1414void MyPanel::OnChoiceButtons( wxCommandEvent &event )
1415{
ec9f7884 1416 switch (event.GetId())
47908e25 1417 {
ec9f7884
VZ
1418 case ID_CHOICE_ENABLE:
1419 {
1420 m_choice->Enable( event.GetInt() == 0 );
b56c2246 1421 m_choiceSorted->Enable( event.GetInt() == 0 );
ec9f7884
VZ
1422 break;
1423 }
1424 case ID_CHOICE_SEL_NUM:
1425 {
1426 m_choice->SetSelection( 2 );
b56c2246 1427 m_choiceSorted->SetSelection( 2 );
ec9f7884
VZ
1428 break;
1429 }
1430 case ID_CHOICE_SEL_STR:
1431 {
9a83f860
VZ
1432 m_choice->SetStringSelection( wxT("This") );
1433 m_choiceSorted->SetStringSelection( wxT("This") );
ec9f7884
VZ
1434 break;
1435 }
1436 case ID_CHOICE_CLEAR:
1437 {
1438 m_choice->Clear();
b56c2246 1439 m_choiceSorted->Clear();
ec9f7884
VZ
1440 break;
1441 }
1442 case ID_CHOICE_APPEND:
1443 {
9a83f860
VZ
1444 m_choice->Append( wxT("Hi!") );
1445 m_choiceSorted->Append( wxT("Hi!") );
ec9f7884
VZ
1446 break;
1447 }
1448 case ID_CHOICE_DELETE:
1449 {
1450 int idx = m_choice->GetSelection();
f6bcfd97
BP
1451 if ( idx != wxNOT_FOUND )
1452 m_choice->Delete( idx );
b56c2246 1453 idx = m_choiceSorted->GetSelection();
f6bcfd97
BP
1454 if ( idx != wxNOT_FOUND )
1455 m_choiceSorted->Delete( idx );
ec9f7884
VZ
1456 break;
1457 }
1458 case ID_CHOICE_FONT:
1459 {
1460 m_choice->SetFont( *wxITALIC_FONT );
b56c2246 1461 m_choiceSorted->SetFont( *wxITALIC_FONT );
ec9f7884
VZ
1462 break;
1463 }
868a2826 1464 }
47908e25 1465}
1ccd23f5 1466#endif // wxUSE_CHOICE
47908e25
RR
1467
1468void MyPanel::OnCombo( wxCommandEvent &event )
1469{
00dff4d2
JS
1470 if (!m_combo)
1471 return;
43b2d5e7 1472
9a83f860 1473 wxLogMessage(wxT("EVT_COMBOBOX: item %d/%d (event/control), string \"%s\"/\"%s\""),
0d29fecd 1474 (int)event.GetInt(),
f226be17
VZ
1475 m_combo->GetSelection(),
1476 event.GetString().c_str(),
1477 m_combo->GetStringSelection().c_str());
47908e25
RR
1478}
1479
27ff87da 1480void MyPanel::OnComboTextChanged(wxCommandEvent& event)
f6bcfd97 1481{
7c2151fa 1482 if (m_combo)
43b2d5e7 1483 {
7c2151fa
SN
1484 wxLogMessage(wxT("EVT_TEXT for the combobox: \"%s\" (event) or \"%s\" (control)."),
1485 event.GetString().c_str(),
1486 m_combo->GetValue().c_str());
43b2d5e7 1487 }
f6bcfd97
BP
1488}
1489
1490void MyPanel::OnComboTextEnter(wxCommandEvent& WXUNUSED(event))
1491{
7c2151fa 1492 if (m_combo)
43b2d5e7 1493 {
9a83f860 1494 wxLogMessage(wxT("Enter pressed in the combobox: value is '%s'."),
7c2151fa 1495 m_combo->GetValue().c_str());
43b2d5e7 1496 }
f6bcfd97
BP
1497}
1498
47908e25 1499void MyPanel::OnComboButtons( wxCommandEvent &event )
1c005ff7 1500{
ec9f7884 1501 switch (event.GetId())
2f6407b9 1502 {
ec9f7884
VZ
1503 case ID_COMBO_ENABLE:
1504 {
1505 m_combo->Enable( event.GetInt() == 0 );
1506 break;
1507 }
1508 case ID_COMBO_SEL_NUM:
1509 {
1510 m_combo->SetSelection( 2 );
1511 break;
1512 }
1513 case ID_COMBO_SEL_STR:
1514 {
9a83f860 1515 m_combo->SetStringSelection( wxT("This") );
ec9f7884
VZ
1516 break;
1517 }
1518 case ID_COMBO_CLEAR:
1519 {
1520 m_combo->Clear();
1521 break;
1522 }
1523 case ID_COMBO_APPEND:
1524 {
9a83f860 1525 m_combo->Append( wxT("Hi!") );
ec9f7884
VZ
1526 break;
1527 }
1528 case ID_COMBO_DELETE:
1529 {
1530 int idx = m_combo->GetSelection();
1531 m_combo->Delete( idx );
1532 break;
1533 }
1534 case ID_COMBO_FONT:
1535 {
1536 m_combo->SetFont( *wxITALIC_FONT );
1537 break;
1538 }
cc7e9e20
RR
1539 case ID_COMBO_SET_TEXT:
1540 {
1541 m_combo->SetString( 2, wxT("Hi!") );
1542 break;
1543 }
868a2826 1544 }
47908e25
RR
1545}
1546
1547void MyPanel::OnRadio( wxCommandEvent &event )
1548{
9a83f860 1549 m_text->AppendText( wxT("RadioBox selection string is: ") );
ec9f7884 1550 m_text->AppendText( event.GetString() );
9a83f860 1551 m_text->AppendText( wxT("\n") );
47908e25
RR
1552}
1553
a48b9bfb
VZ
1554void MyPanel::OnRadioButton1( wxCommandEvent & WXUNUSED(event) )
1555{
9a83f860 1556 wxMessageBox(wxT("First wxRadioButton selected."), wxT("wxControl sample"));
a48b9bfb
VZ
1557}
1558
1559void MyPanel::OnRadioButton2( wxCommandEvent & WXUNUSED(event) )
1560{
9a83f860 1561 m_text->AppendText(wxT("Second wxRadioButton selected.\n"));
a48b9bfb
VZ
1562}
1563
47908e25
RR
1564void MyPanel::OnRadioButtons( wxCommandEvent &event )
1565{
ec9f7884 1566 switch (event.GetId())
d3904ceb 1567 {
ec9f7884 1568 case ID_RADIOBOX_ENABLE:
7891b4d4
VZ
1569 m_radio->Enable( event.GetInt() == 0 );
1570 break;
1571
ec9f7884 1572 case ID_RADIOBOX_SEL_NUM:
7891b4d4
VZ
1573 m_radio->SetSelection( 2 );
1574 break;
1575
ec9f7884 1576 case ID_RADIOBOX_SEL_STR:
9a83f860 1577 m_radio->SetStringSelection( wxT("This") );
7891b4d4 1578 break;
8b1d8f36 1579
7891b4d4
VZ
1580 case ID_RADIOBOX_FONT:
1581 m_radio->SetFont( *wxITALIC_FONT );
1582 break;
868a2826 1583 }
1c005ff7
RR
1584}
1585
868a2826
RR
1586void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
1587{
ec9f7884
VZ
1588 m_fontButton->SetFont( *wxITALIC_FONT );
1589 m_text->SetFont( *wxITALIC_FONT );
868a2826
RR
1590}
1591
1db8dc4a 1592void MyPanel::OnUpdateLabel( wxCommandEvent &event )
185fa6bf 1593{
9a83f860
VZ
1594 m_label->SetLabel(event.GetInt() ? wxT("Very very very very very long text.")
1595 : wxT("Shorter text."));
185fa6bf
VZ
1596}
1597
6bb44116
WS
1598#if wxUSE_SLIDER
1599
7bce6aec
RR
1600void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
1601{
516ab399 1602#if wxUSE_GAUGE
ec9f7884 1603 m_gauge->SetValue( m_slider->GetValue() );
37ed3ae3 1604 m_gaugeVert->SetValue( m_slider->GetValue() / 2 );
516ab399 1605#endif // wxUSE_GAUGE
7bce6aec
RR
1606}
1607
6bb44116
WS
1608#endif // wxUSE_SLIDER
1609
baccb514
VZ
1610#if wxUSE_SPINCTRL
1611
76106901
VZ
1612void MyPanel::OnSpinCtrlText(wxCommandEvent& event)
1613{
1614 if ( m_spinctrl )
1615 {
1616 wxString s;
9a83f860 1617 s.Printf( wxT("Spin ctrl text changed: now %d (from event: %s)\n"),
508d586e 1618 m_spinctrl->GetValue(), event.GetString().c_str() );
76106901
VZ
1619 m_text->AppendText(s);
1620 }
1621}
1622
457e6c54 1623void MyPanel::OnSpinCtrl(wxSpinEvent& event)
baccb514 1624{
76106901
VZ
1625 if ( m_spinctrl )
1626 {
1627 wxString s;
9a83f860 1628 s.Printf( wxT("Spin ctrl changed: now %d (from event: %d)\n"),
508d586e 1629 m_spinctrl->GetValue(), event.GetInt() );
76106901
VZ
1630 m_text->AppendText(s);
1631 }
1632}
1633
1634void MyPanel::OnSpinCtrlUp(wxSpinEvent& event)
1635{
1636 if ( m_spinctrl )
1637 {
508d586e 1638 m_text->AppendText( wxString::Format(
9a83f860 1639 wxT("Spin up: %d (from event: %d)\n"),
508d586e 1640 m_spinctrl->GetValue(), event.GetInt() ) );
76106901
VZ
1641 }
1642}
1643
1644void MyPanel::OnSpinCtrlDown(wxSpinEvent& event)
1645{
1646 if ( m_spinctrl )
1647 {
508d586e 1648 m_text->AppendText( wxString::Format(
9a83f860 1649 wxT("Spin down: %d (from event: %d)\n"),
508d586e 1650 m_spinctrl->GetValue(), event.GetInt() ) );
76106901 1651 }
baccb514
VZ
1652}
1653
1654#endif // wxUSE_SPINCTRL
1655
0e528b99 1656#if wxUSE_SPINBTN
8c3c31d4
VZ
1657void MyPanel::OnSpinUp( wxSpinEvent &event )
1658{
1659 wxString value;
9a83f860 1660 value.Printf( wxT("Spin control up: current = %d\n"),
8c3c31d4
VZ
1661 m_spinbutton->GetValue());
1662
e94ff4cb 1663 if ( event.GetPosition() > 17 )
8c3c31d4 1664 {
9a83f860 1665 value += wxT("Preventing the spin button from going above 17.\n");
8c3c31d4
VZ
1666
1667 event.Veto();
1668 }
1669
1670 m_text->AppendText(value);
1671}
1672
1673void MyPanel::OnSpinDown( wxSpinEvent &event )
1674{
1675 wxString value;
9a83f860 1676 value.Printf( wxT("Spin control down: current = %d\n"),
8c3c31d4
VZ
1677 m_spinbutton->GetValue());
1678
e94ff4cb 1679 if ( event.GetPosition() < -17 )
8c3c31d4 1680 {
9a83f860 1681 value += wxT("Preventing the spin button from going below -17.\n");
8c3c31d4
VZ
1682
1683 event.Veto();
1684 }
1685
1686 m_text->AppendText(value);
1687}
1688
e380f72b
RR
1689void MyPanel::OnSpinUpdate( wxSpinEvent &event )
1690{
ec9f7884 1691 wxString value;
9a83f860 1692 value.Printf( wxT("%d"), event.GetPosition() );
ec9f7884 1693 m_spintext->SetValue( value );
6380910c 1694
9a83f860 1695 value.Printf( wxT("Spin control range: (%d, %d), current = %d\n"),
6380910c
VZ
1696 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
1697 m_spinbutton->GetValue());
1698
1699 m_text->AppendText(value);
e380f72b 1700}
9726da4f 1701
fe1bc285 1702void MyPanel::OnNewText( wxCommandEvent& /* event */)
1dd815f3
RR
1703{
1704 m_nonWrappingText->SetLabel( wxT("This text is short\nbut still spans\nover three lines.") );
1705 m_wrappingText->SetLabel( wxT("This text is short but will still be wrapped if it is too long.") );
1706 m_wrappingText->GetParent()->Layout();
1707}
1708
516ab399
WS
1709#if wxUSE_PROGRESSDLG
1710
9726da4f
VZ
1711void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
1712{
1713 event.Enable( m_spinbutton->GetValue() > 0 );
1714}
1715
1716void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
1717{
1718 int max = m_spinbutton->GetValue();
61c083e7 1719
601964ff
VS
1720 if ( max <= 0 )
1721 {
9a83f860 1722 wxLogError(wxT("You must set positive range!"));
601964ff
VS
1723 return;
1724 }
61c083e7 1725
9a83f860
VZ
1726 wxProgressDialog dialog(wxT("Progress dialog example"),
1727 wxT("An informative message"),
9726da4f
VZ
1728 max, // range
1729 this, // parent
8c3c31d4 1730 wxPD_CAN_ABORT |
2c8e4738 1731 wxPD_AUTO_HIDE |
8c3c31d4
VZ
1732 wxPD_APP_MODAL |
1733 wxPD_ELAPSED_TIME |
1734 wxPD_ESTIMATED_TIME |
1735 wxPD_REMAINING_TIME);
2ac1b69a 1736
9726da4f 1737
9230b621 1738 bool cont = true;
abceee76 1739 for ( int i = 0; i <= max && cont; i++ )
9726da4f
VZ
1740 {
1741 wxSleep(1);
abceee76 1742 if ( i == max )
be9abe3f 1743 {
9a83f860 1744 cont = dialog.Update(i, wxT("That's all, folks!"));
be9abe3f
VZ
1745 }
1746 else if ( i == max / 2 )
9726da4f 1747 {
9a83f860 1748 cont = dialog.Update(i, wxT("Only a half left (very long message)!"));
9726da4f
VZ
1749 }
1750 else
1751 {
1752 cont = dialog.Update(i);
1753 }
1754 }
1755
1756 if ( !cont )
1757 {
9a83f860 1758 *m_text << wxT("Progress dialog aborted!\n");
9726da4f
VZ
1759 }
1760 else
1761 {
9a83f860 1762 *m_text << wxT("Countdown from ") << max << wxT(" finished.\n");
9726da4f
VZ
1763 }
1764}
1765
516ab399 1766#endif // wxUSE_PROGRESSDLG
0e528b99 1767#endif // wxUSE_SPINBTN
e380f72b 1768
2b5f62a0
VZ
1769void MyPanel::OnSizerCheck( wxCommandEvent &event)
1770{
1771 switch (event.GetId ()) {
1772 case ID_SIZER_CHECK1:
1773 m_buttonSizer->Show (m_sizerBtn1, event.IsChecked ());
1774 m_buttonSizer->Layout ();
1775 break;
1776 case ID_SIZER_CHECK2:
1777 m_buttonSizer->Show (m_sizerBtn2, event.IsChecked ());
1778 m_buttonSizer->Layout ();
1779 break;
1780 case ID_SIZER_CHECK3:
1781 m_buttonSizer->Show (m_sizerBtn3, event.IsChecked ());
1782 m_buttonSizer->Layout ();
1783 break;
1784 case ID_SIZER_CHECK4:
1785 m_buttonSizer->Show (m_sizerBtn4, event.IsChecked ());
1786 m_buttonSizer->Layout ();
1787 break;
1788 case ID_SIZER_CHECK14:
1789 m_hsizer->Show (m_buttonSizer, event.IsChecked ());
1790 m_hsizer->Layout ();
1791 break;
1792 case ID_SIZER_CHECKBIG:
1793 m_hsizer->Show (m_bigBtn, event.IsChecked ());
1794 m_hsizer->Layout ();
1795 break;
1796 }
1797
1798}
1799
2cb21a45
VZ
1800MyPanel::~MyPanel()
1801{
9a83f860 1802 //wxLog::RemoveTraceMask(wxT("focus"));
29e7e51a
VZ
1803 delete wxLog::SetActiveTarget(m_logTargetOld);
1804
61c083e7 1805 delete m_book->GetImageList();
2cb21a45
VZ
1806}
1807
1c005ff7
RR
1808//----------------------------------------------------------------------
1809// MyFrame
1810//----------------------------------------------------------------------
1811
1812BEGIN_EVENT_TABLE(MyFrame, wxFrame)
3e2dd3db
VZ
1813 EVT_MENU(CONTROLS_QUIT, MyFrame::OnQuit)
1814 EVT_MENU(CONTROLS_ABOUT, MyFrame::OnAbout)
1815 EVT_MENU(CONTROLS_CLEAR_LOG, MyFrame::OnClearLog)
16f6dfd8 1816#if wxUSE_TOOLTIPS
3e2dd3db
VZ
1817 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
1818 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
be8b4385
VZ
1819#ifdef __WXMSW__
1820 EVT_MENU(CONTROLS_SET_TOOLTIPS_MAX_WIDTH, MyFrame::OnSetMaxTooltipWidth)
1821#endif // __WXMSW__
16f6dfd8 1822#endif // wxUSE_TOOLTIPS
87a1e308 1823
3e2dd3db 1824 EVT_MENU(CONTROLS_ENABLE_ALL, MyFrame::OnEnableAll)
47a8a4d5
VZ
1825 EVT_MENU(CONTROLS_HIDE_ALL, MyFrame::OnHideAll)
1826 EVT_MENU(CONTROLS_HIDE_LIST, MyFrame::OnHideList)
1a8b677e 1827 EVT_MENU(CONTROLS_CONTEXT_HELP, MyFrame::OnContextHelp)
87a1e308 1828
35960bbf
VZ
1829 EVT_ICONIZE(MyFrame::OnIconized)
1830 EVT_MAXIMIZE(MyFrame::OnMaximized)
87a1e308 1831 EVT_SIZE(MyFrame::OnSize)
97206645
VZ
1832 EVT_MOVE(MyFrame::OnMove)
1833
87a1e308 1834 EVT_IDLE(MyFrame::OnIdle)
1c005ff7
RR
1835END_EVENT_TABLE()
1836
9f84eccd 1837MyFrame::MyFrame(const wxChar *title, int x, int y)
c4ef14c2 1838 : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y), wxSize(700, 450))
1c005ff7 1839{
9a83f860 1840 SetHelpText( wxT("Controls sample demonstrating various widgets") );
1a8b677e 1841
7bfc22f6
VZ
1842 // Give it an icon
1843 // The wxICON() macros loads an icon from a resource under Windows
1844 // and uses an #included XPM image under GTK+ and Motif
1845
3cb332c1 1846 SetIcon( wxICON(sample) );
7bfc22f6
VZ
1847
1848 wxMenu *file_menu = new wxMenu;
1849
9a83f860 1850 file_menu->Append(CONTROLS_CLEAR_LOG, wxT("&Clear log\tCtrl-L"));
7bfc22f6 1851 file_menu->AppendSeparator();
9a83f860 1852 file_menu->Append(CONTROLS_ABOUT, wxT("&About\tF1"));
7bfc22f6 1853 file_menu->AppendSeparator();
9a83f860 1854 file_menu->Append(CONTROLS_QUIT, wxT("E&xit\tAlt-X"), wxT("Quit controls sample"));
7bfc22f6
VZ
1855
1856 wxMenuBar *menu_bar = new wxMenuBar;
9a83f860 1857 menu_bar->Append(file_menu, wxT("&File"));
7bfc22f6
VZ
1858
1859#if wxUSE_TOOLTIPS
1860 wxMenu *tooltip_menu = new wxMenu;
9a83f860 1861 tooltip_menu->Append(CONTROLS_SET_TOOLTIP_DELAY, wxT("Set &delay\tCtrl-D"));
7bfc22f6 1862 tooltip_menu->AppendSeparator();
9a83f860
VZ
1863 tooltip_menu->Append(CONTROLS_ENABLE_TOOLTIPS, wxT("&Toggle tooltips\tCtrl-T"),
1864 wxT("enable/disable tooltips"), true);
9230b621 1865 tooltip_menu->Check(CONTROLS_ENABLE_TOOLTIPS, true);
be8b4385
VZ
1866#ifdef __WXMSW__
1867 tooltip_menu->Append(CONTROLS_SET_TOOLTIPS_MAX_WIDTH, "Set maximal &width");
1868#endif // __WXMSW__
9a83f860 1869 menu_bar->Append(tooltip_menu, wxT("&Tooltips"));
7bfc22f6
VZ
1870#endif // wxUSE_TOOLTIPS
1871
1872 wxMenu *panel_menu = new wxMenu;
9a83f860
VZ
1873 panel_menu->Append(CONTROLS_ENABLE_ALL, wxT("&Disable all\tCtrl-E"),
1874 wxT("Enable/disable all panel controls"), true);
1875 panel_menu->Append(CONTROLS_HIDE_ALL, wxT("&Hide all\tCtrl-I"),
1876 wxT("Show/hide thoe whole panel controls"), true);
1877 panel_menu->Append(CONTROLS_HIDE_LIST, wxT("Hide &list ctrl\tCtrl-S"),
1878 wxT("Enable/disable all panel controls"), true);
1879 panel_menu->Append(CONTROLS_CONTEXT_HELP, wxT("&Context help...\tCtrl-H"),
1880 wxT("Get context help for a control"));
1881 menu_bar->Append(panel_menu, wxT("&Panel"));
7bfc22f6
VZ
1882
1883 SetMenuBar(menu_bar);
1884
960a83cc 1885#if wxUSE_STATUSBAR
5fb9fcfc 1886 CreateStatusBar(2);
960a83cc 1887#endif // wxUSE_STATUSBAR
9f3362c4 1888
87a1e308 1889 m_panel = new MyPanel( this, 10, 10, 300, 100 );
1c005ff7
RR
1890}
1891
1892void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
1893{
9230b621 1894 Close(true);
1c005ff7
RR
1895}
1896
1897void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
1898{
abceee76
VZ
1899 wxBusyCursor bc;
1900
9a83f860 1901 wxMessageDialog dialog(this, wxT("This is a control sample"), wxT("About Controls"), wxOK );
ec9f7884 1902 dialog.ShowModal();
1c005ff7 1903}
9f3362c4 1904
3e2dd3db
VZ
1905void MyFrame::OnClearLog(wxCommandEvent& WXUNUSED(event))
1906{
1907 m_panel->m_text->Clear();
1908}
1909
16f6dfd8 1910#if wxUSE_TOOLTIPS
87728739 1911void MyFrame::OnSetTooltipDelay(wxCommandEvent& WXUNUSED(event))
16f6dfd8
VZ
1912{
1913 static long s_delay = 5000;
1914
1915 wxString delay;
9a83f860 1916 delay.Printf( wxT("%ld"), s_delay);
16f6dfd8 1917
9a83f860
VZ
1918 delay = wxGetTextFromUser(wxT("Enter delay (in milliseconds)"),
1919 wxT("Set tooltip delay"),
ec9f7884
VZ
1920 delay,
1921 this);
16f6dfd8
VZ
1922 if ( !delay )
1923 return; // cancelled
1924
9a83f860 1925 wxSscanf(delay, wxT("%ld"), &s_delay);
16f6dfd8
VZ
1926
1927 wxToolTip::SetDelay(s_delay);
1928
9a83f860 1929 wxLogStatus(this, wxT("Tooltip delay set to %ld milliseconds"), s_delay);
16f6dfd8
VZ
1930}
1931
87728739 1932void MyFrame::OnToggleTooltips(wxCommandEvent& WXUNUSED(event))
16f6dfd8 1933{
9230b621 1934 static bool s_enabled = true;
16f6dfd8
VZ
1935
1936 s_enabled = !s_enabled;
1937
1938 wxToolTip::Enable(s_enabled);
1939
9a83f860 1940 wxLogStatus(this, wxT("Tooltips %sabled"), s_enabled ? wxT("en") : wxT("dis") );
16f6dfd8 1941}
be8b4385
VZ
1942
1943#ifdef __WXMSW__
1944
1945void MyFrame::OnSetMaxTooltipWidth(wxCommandEvent& WXUNUSED(event))
1946{
1947 static int s_maxWidth = 0;
1948
1949 wxNumberEntryDialog dlg
1950 (
1951 this,
1952 "Change maximal tooltip width",
1953 "&Width in pixels:",
1954 GetTitle(),
1955 s_maxWidth,
1956 -1,
1957 600
1958 );
1959 if ( dlg.ShowModal() == wxID_CANCEL )
1960 return;
1961
1962 s_maxWidth = dlg.GetValue();
1963 wxToolTip::SetMaxWidth(s_maxWidth);
1964
1965 // we need to set the tooltip again to test the new width
1966 m_panel->SetAllToolTips();
1967}
1968
1969#endif // __WXMSW__
1970
1971#endif // wxUSE_TOOLTIPS
16f6dfd8 1972
87a1e308
VZ
1973void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event))
1974{
9230b621 1975 static bool s_enable = true;
87a1e308
VZ
1976
1977 s_enable = !s_enable;
1978 m_panel->Enable(s_enable);
47a8a4d5
VZ
1979 static bool s_enableCheckbox = true;
1980 if ( !s_enable )
1981 {
1982 // this is a test for correct behaviour of either enabling or disabling
1983 // a child when its parent is disabled: the checkbox should have the
1984 // correct state when the parent is enabled back
1985 m_panel->m_checkbox->Enable(s_enableCheckbox);
1986 s_enableCheckbox = !s_enableCheckbox;
1987 }
1988}
1989
1990void MyFrame::OnHideAll(wxCommandEvent& WXUNUSED(event))
1991{
1992 static bool s_show = true;
1993
1994 s_show = !s_show;
1995 m_panel->Show(s_show);
1996}
1997
1998void MyFrame::OnHideList(wxCommandEvent& WXUNUSED(event))
1999{
2000 static bool s_show = true;
2001
2002 s_show = !s_show;
2003 m_panel->m_listbox->Show(s_show);
87a1e308
VZ
2004}
2005
1a8b677e
VZ
2006void MyFrame::OnContextHelp(wxCommandEvent& WXUNUSED(event))
2007{
2008 // starts a local event loop
2009 wxContextHelp chelp(this);
2010}
2011
97206645
VZ
2012void MyFrame::OnMove( wxMoveEvent& event )
2013{
960a83cc 2014#if wxUSE_STATUSBAR
97206645 2015 UpdateStatusBar(event.GetPosition(), GetSize());
960a83cc 2016#endif // wxUSE_STATUSBAR
97206645
VZ
2017
2018 event.Skip();
2019}
2020
35960bbf
VZ
2021void MyFrame::OnIconized( wxIconizeEvent& event )
2022{
9a83f860
VZ
2023 wxLogMessage(wxT("Frame %s"), event.IsIconized() ? wxT("iconized")
2024 : wxT("restored"));
35960bbf
VZ
2025 event.Skip();
2026}
2027
2028void MyFrame::OnMaximized( wxMaximizeEvent& WXUNUSED(event) )
2029{
9a83f860 2030 wxLogMessage(wxT("Frame maximized"));
35960bbf
VZ
2031}
2032
5fb9fcfc
VZ
2033void MyFrame::OnSize( wxSizeEvent& event )
2034{
960a83cc 2035#if wxUSE_STATUSBAR
97206645 2036 UpdateStatusBar(GetPosition(), event.GetSize());
960a83cc 2037#endif // wxUSE_STATUSBAR
5fb9fcfc
VZ
2038
2039 event.Skip();
2040}
2041
9f3362c4
VZ
2042void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
2043{
2044 // track the window which has the focus in the status bar
2dd8d2d7 2045 static wxWindow *s_windowFocus = NULL;
9f3362c4 2046 wxWindow *focus = wxWindow::FindFocus();
2dd8d2d7 2047 if ( focus != s_windowFocus )
9f3362c4
VZ
2048 {
2049 s_windowFocus = focus;
2050
2051 wxString msg;
2dd8d2d7
VZ
2052 if ( focus )
2053 {
2054 msg.Printf(
d3eb13d2 2055 "Focus: %s"
9f3362c4 2056#ifdef __WXMSW__
d3eb13d2 2057 ", HWND = %08x"
f70d5829 2058#endif
2dd8d2d7 2059 , s_windowFocus->GetName().c_str()
9f3362c4 2060#ifdef __WXMSW__
2dd8d2d7 2061 , (unsigned int) s_windowFocus->GetHWND()
f70d5829 2062#endif
2dd8d2d7
VZ
2063 );
2064 }
2065 else
2066 {
9a83f860 2067 msg = wxT("No focus");
2dd8d2d7 2068 }
9f3362c4 2069
960a83cc 2070#if wxUSE_STATUSBAR
9f3362c4 2071 SetStatusText(msg);
960a83cc 2072#endif // wxUSE_STATUSBAR
9f3362c4 2073 }
341c92a8 2074}
6c8a980f 2075
f6bcfd97
BP
2076void MyComboBox::OnChar(wxKeyEvent& event)
2077{
9a83f860 2078 wxLogMessage(wxT("MyComboBox::OnChar"));
f6bcfd97 2079
b1d4dd7a 2080 if ( event.GetKeyCode() == 'w' )
43b2d5e7 2081 {
9a83f860 2082 wxLogMessage(wxT("MyComboBox: 'w' will be ignored."));
43b2d5e7 2083 }
f6bcfd97 2084 else
43b2d5e7 2085 {
f6bcfd97 2086 event.Skip();
43b2d5e7 2087 }
f6bcfd97
BP
2088}
2089
2090void MyComboBox::OnKeyDown(wxKeyEvent& event)
2091{
9a83f860 2092 wxLogMessage(wxT("MyComboBox::OnKeyDown"));
f6bcfd97 2093
b1d4dd7a 2094 if ( event.GetKeyCode() == 'w' )
43b2d5e7 2095 {
9a83f860 2096 wxLogMessage(wxT("MyComboBox: 'w' will be ignored."));
43b2d5e7 2097 }
f6bcfd97 2098 else
43b2d5e7 2099 {
f6bcfd97 2100 event.Skip();
43b2d5e7 2101 }
f6bcfd97
BP
2102}
2103
2104void MyComboBox::OnKeyUp(wxKeyEvent& event)
2105{
9a83f860 2106 wxLogMessage(wxT("MyComboBox::OnKeyUp"));
f6bcfd97
BP
2107
2108 event.Skip();
2109}
2110
8b81a824
VS
2111static void SetListboxClientData(const wxChar *name, wxListBox *control)
2112{
2113 size_t count = control->GetCount();
2114 for ( size_t n = 0; n < count; n++ )
2115 {
2116 wxString s;
2117 s.Printf(wxT("%s client data for '%s'"),
2118 name, control->GetString(n).c_str());
2119
2120 control->SetClientObject(n, new wxStringClientData(s));
2121 }
2122}
2123
2b5f62a0
VZ
2124#if wxUSE_CHOICE
2125
8b81a824 2126static void SetChoiceClientData(const wxChar *name, wxChoice *control)
6c8a980f
VZ
2127{
2128 size_t count = control->GetCount();
2129 for ( size_t n = 0; n < count; n++ )
2130 {
2131 wxString s;
4acb6ca6 2132 s.Printf(wxT("%s client data for '%s'"),
6c8a980f
VZ
2133 name, control->GetString(n).c_str());
2134
2135 control->SetClientObject(n, new wxStringClientData(s));
2136 }
2137}
2b5f62a0
VZ
2138
2139#endif // wxUSE_CHOICE