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