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