]> git.saurik.com Git - wxWidgets.git/blame - samples/controls/controls.cpp
Define SF_UNICODE if undefined
[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{
9d9b7755
VZ
486 wxLayoutConstraints *c;
487
3e2dd3db
VZ
488 m_text = new wxTextCtrl(this, -1, "This is the log window.\n",
489 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE);
a60b1f5d 490 m_text->SetBackgroundColour(wxT("wheat"));
655822f3 491
abceee76
VZ
492 if ( 0 )
493 wxLog::AddTraceMask(_T("focus"));
29e7e51a 494 m_logTargetOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_text));
0a772322 495
3e2dd3db 496 m_notebook = new wxNotebook(this, ID_NOTEBOOK);
655822f3 497
ec9f7884
VZ
498 wxString choices[] =
499 {
500 "This",
501 "is one of my",
502 "really",
503 "wonderful",
504 "examples."
505 };
655822f3 506
4fabb575 507#ifdef USE_XPM
ec9f7884
VZ
508 // image ids
509 enum
510 {
511 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
512 };
513
514 // fill the image list
515 wxImageList *imagelist = new wxImageList(32, 32);
516
517 imagelist-> Add( wxBitmap( list_xpm ));
518 imagelist-> Add( wxBitmap( choice_xpm ));
519 imagelist-> Add( wxBitmap( combo_xpm ));
520 imagelist-> Add( wxBitmap( text_xpm ));
521 imagelist-> Add( wxBitmap( radio_xpm ));
522 imagelist-> Add( wxBitmap( gauge_xpm ));
523 m_notebook->SetImageList(imagelist);
73c700fd 524#elif defined(__WXMSW__)
ec9f7884
VZ
525 // load images from resources
526 enum
527 {
528 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
529 };
530 wxImageList *imagelist = new wxImageList(16, 16, FALSE, Image_Max);
531
532 static const char *s_iconNames[Image_Max] =
533 {
534 "list", "choice", "combo", "text", "radio", "gauge"
535 };
536
537 for ( size_t n = 0; n < Image_Max; n++ )
538 {
539 wxBitmap bmp(s_iconNames[n]);
540 if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) )
541 {
4acb6ca6 542 wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."),
ec9f7884
VZ
543 s_iconNames[n], n);
544 }
545 }
546
547 m_notebook->SetImageList(imagelist);
4fabb575
JS
548#else
549
ec9f7884 550 // No images for now
4fabb575
JS
551#define Image_List -1
552#define Image_Choice -1
553#define Image_Combo -1
554#define Image_Text -1
555#define Image_Radio -1
556#define Image_Gauge -1
557#define Image_Max -1
558
fc54776e 559#endif
2cb21a45 560
6c8a980f
VZ
561 wxPanel *panel = new wxPanel(m_notebook);
562 m_listbox = new wxListBox( panel, ID_LISTBOX,
563 wxPoint(10,10), wxSize(120,70),
354aa1e3 564 5, choices, wxLB_ALWAYS_SB );
6c8a980f
VZ
565 m_listboxSorted = new wxListBox( panel, ID_LISTBOX_SORTED,
566 wxPoint(10,90), wxSize(120,70),
354aa1e3 567 5, choices, wxLB_SORT );
6c8a980f 568
8b81a824
VS
569 SetListboxClientData(wxT("listbox"), m_listbox);
570 SetListboxClientData(wxT("listbox"), m_listboxSorted);
9838df2c 571
ec9f7884 572 m_listbox->SetCursor(*wxCROSS_CURSOR);
b8653fbf 573#if wxUSE_TOOLTIPS
ec9f7884 574 m_listbox->SetToolTip( "This is a list box" );
16f6dfd8 575#endif // wxUSE_TOOLTIPS
9f3362c4 576
3e2dd3db
VZ
577 m_lbSelectNum = new wxButton( panel, ID_LISTBOX_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) );
578 m_lbSelectThis = new wxButton( panel, ID_LISTBOX_SEL_STR, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
579 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "&Clear", wxPoint(180,80), wxSize(140,30) );
f6bcfd97 580 (void)new MyButton( panel, ID_LISTBOX_APPEND, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
3e2dd3db 581 (void)new wxButton( panel, ID_LISTBOX_DELETE, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
f6bcfd97 582 wxButton *button = new MyButton( panel, ID_LISTBOX_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
57160afe
VZ
583
584 button->SetDefault();
585
586 button->SetForegroundColour(*wxBLUE);
587
b8653fbf 588#if wxUSE_TOOLTIPS
ec9f7884 589 button->SetToolTip( "Press here to set italic font" );
16f6dfd8 590#endif // wxUSE_TOOLTIPS
b1170810 591
6c8a980f 592 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "&Disable", wxPoint(20,170) );
ec9f7884 593 m_checkbox->SetValue(FALSE);
b8653fbf 594#if wxUSE_TOOLTIPS
ec9f7884 595 m_checkbox->SetToolTip( "Click here to disable the listbox" );
16f6dfd8 596#endif // wxUSE_TOOLTIPS
87a1e308
VZ
597 (void)new wxCheckBox( panel, ID_CHANGE_COLOUR, "&Toggle colour",
598 wxPoint(110,170) );
9121bed2 599 panel->SetCursor(wxCursor(wxCURSOR_HAND));
ec9f7884
VZ
600 m_notebook->AddPage(panel, "wxListBox", TRUE, Image_List);
601
1ccd23f5 602#if wxUSE_CHOICE
ec9f7884
VZ
603 panel = new wxPanel(m_notebook);
604 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices );
b56c2246
VZ
605 m_choiceSorted = new wxChoice( panel, ID_CHOICE_SORTED, wxPoint(10,70), wxSize(120,-1),
606 5, choices, wxCB_SORT );
6c8a980f 607
8b81a824
VS
608 SetChoiceClientData(wxT("choice"), m_choice);
609 SetChoiceClientData(wxT("choice"), m_choiceSorted);
6c8a980f 610
ddc8c2e3 611 m_choice->SetSelection(2);
a60b1f5d 612 m_choice->SetBackgroundColour( wxT("red") );
3e2dd3db
VZ
613 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) );
614 (void)new wxButton( panel, ID_CHOICE_SEL_STR, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
615 (void)new wxButton( panel, ID_CHOICE_CLEAR, "&Clear", wxPoint(180,80), wxSize(140,30) );
616 (void)new wxButton( panel, ID_CHOICE_APPEND, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
617 (void)new wxButton( panel, ID_CHOICE_DELETE, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
618 (void)new wxButton( panel, ID_CHOICE_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
619 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, "&Disable", wxPoint(20,130), wxSize(140,30) );
1fad4c3e 620
ec9f7884 621 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
1ccd23f5 622#endif // wxUSE_CHOICE
ec9f7884
VZ
623
624 panel = new wxPanel(m_notebook);
3e2dd3db 625 (void)new wxStaticBox( panel, -1, "&Box around combobox",
f048e32f 626 wxPoint(5, 5), wxSize(150, 100));
f6bcfd97
BP
627 m_combo = new MyComboBox( panel, ID_COMBO, "This",
628 wxPoint(20,25), wxSize(120, -1),
629 5, choices,
630 /* wxCB_READONLY | */ wxPROCESS_ENTER);
631
3e2dd3db
VZ
632 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) );
633 (void)new wxButton( panel, ID_COMBO_SEL_STR, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
634 (void)new wxButton( panel, ID_COMBO_CLEAR, "&Clear", wxPoint(180,80), wxSize(140,30) );
635 (void)new wxButton( panel, ID_COMBO_APPEND, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
636 (void)new wxButton( panel, ID_COMBO_DELETE, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
637 (void)new wxButton( panel, ID_COMBO_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
638 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, "&Disable", wxPoint(20,130), wxSize(140,30) );
ec9f7884
VZ
639 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
640
ec9f7884
VZ
641 wxString choices2[] =
642 {
17867d61 643 "First", "Second",
0a772322 644 /* "Third",
17867d61
RR
645 "Fourth", "Fifth", "Sixth",
646 "Seventh", "Eighth", "Nineth", "Tenth" */
ec9f7884
VZ
647 };
648
649 panel = new wxPanel(m_notebook);
f6bcfd97 650 (void)new MyRadioBox( panel, ID_RADIOBOX, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS );
3e2dd3db 651 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS );
f048e32f
VZ
652
653#if wxUSE_TOOLTIPS
3e2dd3db 654 m_combo->SetToolTip("This is a natural\ncombobox - can you believe me?");
f048e32f
VZ
655 m_radio->SetToolTip("Ever seen a radiobox?");
656#endif // wxUSE_TOOLTIPS
657
3e2dd3db
VZ
658 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) );
659 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
660 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
661 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
662 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "&Disable", wxPoint(340,130), wxDefaultSize );
7e2b55cd 663 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxDefaultSize, wxRB_GROUP );
ec9f7884 664 rb->SetValue( FALSE );
3e2dd3db 665 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "&Radiobutton2", wxPoint(340,170), wxDefaultSize );
ec9f7884
VZ
666 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
667
668 panel = new wxPanel(m_notebook);
0bb62421 669 (void)new wxStaticBox( panel, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
f6bcfd97
BP
670 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL|wxNO_BORDER );
671 m_gauge->SetBackgroundColour(*wxGREEN);
672 m_gauge->SetForegroundColour(*wxRED);
37ed3ae3 673 m_gaugeVert = new wxGauge( panel, -1, 100,
0bb62421 674 wxPoint(195,35), wxSize(30, 90),
1724ca8b 675 wxGA_VERTICAL | wxGA_SMOOTH | wxNO_BORDER );
7ba4fbeb
VZ
676 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
677 wxSL_AUTOTICKS | wxSL_LABELS );
678 m_slider->SetTickFreq(40, 0);
0bb62421 679 (void)new wxStaticBox( panel, -1, "&Explanation", wxPoint(230,10), wxSize(270,130) );
9838df2c 680#ifdef __WXMOTIF__
ec9f7884
VZ
681 // No wrapping text in wxStaticText yet :-(
682 (void)new wxStaticText( panel, -1,
683 "Drag the slider!",
37ed3ae3 684 wxPoint(250,30),
e65cc56a 685 wxSize(240, -1)
ec9f7884 686 );
9838df2c 687#else
ec9f7884
VZ
688 (void)new wxStaticText( panel, -1,
689 "In order see the gauge (aka progress bar)\n"
690 "control do something you have to drag the\n"
691 "handle of the slider to the right.\n"
692 "\n"
693 "This is also supposed to demonstrate how\n"
694 "to use static controls.\n",
37ed3ae3 695 wxPoint(250,25),
8c3c31d4 696 wxSize(240, 110)
ec9f7884 697 );
9838df2c 698#endif
8c3c31d4
VZ
699 int initialSpinValue = -5;
700 wxString s;
701 s << initialSpinValue;
702 m_spintext = new wxTextCtrl( panel, -1, s, wxPoint(20,160), wxSize(80,-1) );
0e528b99 703#if wxUSE_SPINBTN
738f9e5a 704 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,160), wxSize(80, -1) );
6380910c 705 m_spinbutton->SetRange(-10,30);
8c3c31d4 706 m_spinbutton->SetValue(initialSpinValue);
9726da4f 707
3e2dd3db 708 m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "&Show progress dialog",
738f9e5a 709 wxPoint(300, 160) );
0e528b99 710#endif // wxUSE_SPINBTN
b782f2e0
VZ
711
712#if wxUSE_SPINCTRL
678cd6de 713 m_spinctrl = new wxSpinCtrl( panel, ID_SPINCTRL, "", wxPoint(200, 160), wxSize(80, -1) );
b782f2e0
VZ
714 m_spinctrl->SetRange(10,30);
715 m_spinctrl->SetValue(15);
716#endif // wxUSE_SPINCTRL
717
ec9f7884 718 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
45e41c05
VZ
719
720 panel = new wxPanel(m_notebook);
b782f2e0 721
3dec57ad 722#if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
45e41c05 723 wxIcon icon = wxTheApp->GetStdIcon(wxICON_INFORMATION);
f048e32f
VZ
724 wxStaticBitmap *bmpStatic = new wxStaticBitmap(panel, -1, icon,
725 wxPoint(10, 10));
45e41c05
VZ
726
727 bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10));
728 bmpStatic->SetIcon(wxTheApp->GetStdIcon(wxICON_QUESTION));
b782f2e0
VZ
729#endif // !Motif
730
45e41c05
VZ
731 wxBitmap bitmap( 100, 100 );
732 wxMemoryDC dc;
733 dc.SelectObject( bitmap );
734 dc.SetPen(*wxGREEN_PEN);
f048e32f 735 dc.Clear();
45e41c05 736 dc.DrawEllipse(5, 5, 90, 90);
f048e32f 737 dc.DrawText("Bitmap", 30, 40);
45e41c05
VZ
738 dc.SelectObject( wxNullBitmap );
739
9121bed2 740 (void)new wxBitmapButton(panel, ID_BITMAP_BTN, bitmap, wxPoint(100, 20));
f048e32f 741
80a58c99 742#ifdef __WXMSW__
3e2dd3db
VZ
743 // test for masked bitmap display
744 bitmap = wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP);
9bb3479c
JS
745 if (bitmap.Ok())
746 {
747 bitmap.SetMask(new wxMask(bitmap, *wxBLUE));
669f7a11 748
9bb3479c
JS
749 (void)new wxStaticBitmap /* wxBitmapButton */ (panel, -1, bitmap, wxPoint(300, 120));
750 }
57160afe 751#endif
5ef2e633 752
f048e32f
VZ
753 wxBitmap bmp1(wxTheApp->GetStdIcon(wxICON_INFORMATION)),
754 bmp2(wxTheApp->GetStdIcon(wxICON_WARNING)),
755 bmp3(wxTheApp->GetStdIcon(wxICON_QUESTION));
756 wxBitmapButton *bmpBtn = new wxBitmapButton
757 (
758 panel, -1,
759 bmp1,
1db8dc4a 760 wxPoint(30, 70)
f048e32f 761 );
76fcf0f2 762
f048e32f
VZ
763 bmpBtn->SetBitmapSelected(bmp2);
764 bmpBtn->SetBitmapFocus(bmp3);
765
4c36ca57 766#if wxUSE_TOGGLEBTN
1db8dc4a
VZ
767 (void)new wxToggleButton(panel, ID_BUTTON_LABEL,
768 "&Toggle label", wxPoint(250, 20));
4c36ca57 769#endif // wxUSE_TOGGLEBTN
bedaf53e 770
185fa6bf
VZ
771 m_label = new wxStaticText(panel, -1, "Label with some long text",
772 wxPoint(250, 60), wxDefaultSize,
f6bcfd97 773 wxALIGN_RIGHT /*| wxST_NO_AUTORESIZE*/);
103aab26 774 m_label->SetForegroundColour( *wxBLUE );
2ac1b69a 775
45e41c05 776 m_notebook->AddPage(panel, "wxBitmapXXX");
dcc71398 777
9d9b7755 778 // layout constraints
dcc71398 779
9d9b7755
VZ
780 panel = new wxPanel(m_notebook);
781 panel->SetAutoLayout( TRUE );
d7928388 782
9d9b7755
VZ
783 c = new wxLayoutConstraints;
784 c->top.SameAs( panel, wxTop, 10 );
785 c->height.AsIs( );
786 c->left.SameAs( panel, wxLeft, 10 );
787 c->width.PercentOf( panel, wxWidth, 40 );
d7928388 788
3e2dd3db 789 wxButton *pMyButton = new wxButton(panel, ID_BUTTON_TEST1, "Test Button &1" );
9d9b7755 790 pMyButton->SetConstraints( c );
d7928388 791
9d9b7755
VZ
792 c = new wxLayoutConstraints;
793 c->top.SameAs( panel, wxTop, 10 );
794 c->bottom.SameAs( panel, wxBottom, 10 );
795 c->right.SameAs( panel, wxRight, 10 );
796 c->width.PercentOf( panel, wxWidth, 40 );
185fa6bf 797
3e2dd3db 798 wxButton *pMyButton2 = new wxButton(panel, ID_BUTTON_TEST2, "Test Button &2" );
9d9b7755 799 pMyButton2->SetConstraints( c );
185fa6bf 800
9d9b7755 801 m_notebook->AddPage(panel, "wxLayoutConstraint");
d7928388 802
9d9b7755 803 // sizer
dcc71398 804
9d9b7755
VZ
805 panel = new wxPanel(m_notebook);
806 panel->SetAutoLayout( TRUE );
dcc71398 807
9d9b7755
VZ
808 wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );
809
3e2dd3db 810 sizer->Add( new wxButton(panel, -1, "Test Button &1" ), 3, wxALL, 10 );
9d9b7755 811 sizer->Add( 20,20, 1 );
3e2dd3db 812 sizer->Add( new wxButton(panel, -1, "Test Button &2" ), 3, wxGROW|wxALL, 10 );
9d9b7755
VZ
813
814 panel->SetSizer( sizer );
815
816 m_notebook->AddPage(panel, "wxSizer");
1c005ff7
RR
817}
818
819void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
820{
ec9f7884
VZ
821 int x = 0;
822 int y = 0;
823 GetClientSize( &x, &y );
655822f3 824
ec9f7884
VZ
825 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
826 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
1c005ff7
RR
827}
828
4d0f3cd6
VZ
829void MyPanel::OnPageChanging( wxNotebookEvent &event )
830{
45e41c05
VZ
831 int selOld = event.GetOldSelection();
832 if ( selOld == 2 )
4d0f3cd6 833 {
65045edd
RR
834 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
835 "page change from taking place - if you select\n"
836 "[No] the current page will stay the third one\n",
8c3c31d4 837 "Control sample",
f6bcfd97 838 wxICON_QUESTION | wxYES_NO, this) != wxYES )
8c3c31d4
VZ
839 {
840 event.Veto();
45e41c05 841
8c3c31d4
VZ
842 return;
843 }
4d0f3cd6 844 }
45e41c05 845
36202885
VZ
846 *m_text << "Notebook selection is being changed from " << selOld
847 << " to " << event.GetSelection()
848 << " (current page from notebook is "
849 << m_notebook->GetSelection() << ")\n";
4d0f3cd6
VZ
850}
851
cb43b372
RR
852void MyPanel::OnPageChanged( wxNotebookEvent &event )
853{
36202885
VZ
854 *m_text << "Notebook selection is now " << event.GetSelection()
855 << " (from notebook: " << m_notebook->GetSelection() << ")\n";
cb43b372
RR
856}
857
3e2dd3db
VZ
858void MyPanel::OnTestButton(wxCommandEvent& event)
859{
860 wxLogMessage(_T("Button %c clicked."),
861 event.GetId() == ID_BUTTON_TEST1 ? _T('1') : _T('2'));
862}
863
9121bed2
VZ
864void MyPanel::OnBmpButton(wxCommandEvent& event)
865{
866 wxLogMessage(_T("Bitmap button clicked."));
867}
868
87a1e308
VZ
869void MyPanel::OnChangeColour(wxCommandEvent& WXUNUSED(event))
870{
871 static wxColour s_colOld;
872
873 // test panel colour changing and propagation to the subcontrols
874 if ( s_colOld.Ok() )
875 {
876 SetBackgroundColour(s_colOld);
877 s_colOld = wxNullColour;
878
a60b1f5d
MB
879 m_lbSelectThis->SetForegroundColour(wxT("red"));
880 m_lbSelectThis->SetBackgroundColour(wxT("white"));
87a1e308
VZ
881 }
882 else
883 {
a60b1f5d
MB
884 s_colOld = wxColour(wxT("red"));
885 SetBackgroundColour(wxT("white"));
87a1e308 886
a60b1f5d
MB
887 m_lbSelectThis->SetForegroundColour(wxT("white"));
888 m_lbSelectThis->SetBackgroundColour(wxT("red"));
87a1e308
VZ
889 }
890
891 m_lbSelectThis->Refresh();
892 Refresh();
893}
894
1c005ff7
RR
895void MyPanel::OnListBox( wxCommandEvent &event )
896{
2e0e025e 897// GetParent()->Move(100, 100);
e66ad5c6 898
846e1424
RR
899 if (event.GetInt() == -1)
900 {
901 m_text->AppendText( "ListBox has no selections anymore\n" );
902 return;
903 }
904
6c8a980f
VZ
905 wxListBox *listbox = event.GetId() == ID_LISTBOX ? m_listbox
906 : m_listboxSorted;
907
908 m_text->AppendText( "ListBox event selection string is: '" );
ec9f7884 909 m_text->AppendText( event.GetString() );
6c8a980f
VZ
910 m_text->AppendText( "'\n" );
911 m_text->AppendText( "ListBox control selection string is: '" );
912 m_text->AppendText( listbox->GetStringSelection() );
913 m_text->AppendText( "'\n" );
914
915 wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject());
916 m_text->AppendText( "ListBox event client data string is: '" );
6e47faf1 917 if (obj) // BC++ doesn't like use of '? .. : .. ' in this context
74a533f7 918 m_text->AppendText( obj->GetData() );
6e47faf1 919 else
74a533f7 920 m_text->AppendText( wxString("none") );
6e47faf1 921
6c8a980f
VZ
922 m_text->AppendText( "'\n" );
923 m_text->AppendText( "ListBox control client data string is: '" );
924 obj = (wxStringClientData *)listbox->GetClientObject(listbox->GetSelection());
6e47faf1 925 if (obj)
74a533f7 926 m_text->AppendText( obj->GetData() );
6e47faf1 927 else
74a533f7 928 m_text->AppendText( wxString("none") );
6c8a980f 929 m_text->AppendText( "'\n" );
1c005ff7
RR
930}
931
5b077d48
RR
932void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
933{
ec9f7884
VZ
934 m_text->AppendText( "ListBox double click string is: " );
935 m_text->AppendText( event.GetString() );
936 m_text->AppendText( "\n" );
5b077d48
RR
937}
938
47908e25
RR
939void MyPanel::OnListBoxButtons( wxCommandEvent &event )
940{
ec9f7884 941 switch (event.GetId())
d3904ceb 942 {
ec9f7884
VZ
943 case ID_LISTBOX_ENABLE:
944 {
945 m_text->AppendText("Checkbox clicked.\n");
b8653fbf 946#if wxUSE_TOOLTIPS
0ae0226b 947 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
ec9f7884
VZ
948 if (event.GetInt())
949 cb->SetToolTip( "Click to enable listbox" );
950 else
951 cb->SetToolTip( "Click to disable listbox" );
16f6dfd8 952#endif // wxUSE_TOOLTIPS
ec9f7884 953 m_listbox->Enable( event.GetInt() == 0 );
57160afe
VZ
954 m_lbSelectThis->Enable( event.GetInt() == 0 );
955 m_lbSelectNum->Enable( event.GetInt() == 0 );
6c8a980f 956 m_listboxSorted->Enable( event.GetInt() == 0 );
ee6e1b1d 957 FindWindow(ID_CHANGE_COLOUR)->Enable( event.GetInt() == 0 );
ec9f7884
VZ
958 break;
959 }
960 case ID_LISTBOX_SEL_NUM:
961 {
962 m_listbox->SetSelection( 2 );
6c8a980f 963 m_listboxSorted->SetSelection( 2 );
8c3c31d4 964 m_lbSelectThis->WarpPointer( 40, 14 );
ec9f7884
VZ
965 break;
966 }
967 case ID_LISTBOX_SEL_STR:
968 {
969 m_listbox->SetStringSelection( "This" );
6c8a980f 970 m_listboxSorted->SetStringSelection( "This" );
8c3c31d4 971 m_lbSelectNum->WarpPointer( 40, 14 );
ec9f7884
VZ
972 break;
973 }
974 case ID_LISTBOX_CLEAR:
975 {
976 m_listbox->Clear();
6c8a980f 977 m_listboxSorted->Clear();
ec9f7884
VZ
978 break;
979 }
980 case ID_LISTBOX_APPEND:
981 {
982 m_listbox->Append( "Hi!" );
6c8a980f 983 m_listboxSorted->Append( "Hi!" );
ec9f7884
VZ
984 break;
985 }
986 case ID_LISTBOX_DELETE:
987 {
6c8a980f
VZ
988 int idx;
989 idx = m_listbox->GetSelection();
f6bcfd97
BP
990 if ( idx != wxNOT_FOUND )
991 m_listbox->Delete( idx );
6c8a980f 992 idx = m_listboxSorted->GetSelection();
f6bcfd97
BP
993 if ( idx != wxNOT_FOUND )
994 m_listboxSorted->Delete( idx );
ec9f7884
VZ
995 break;
996 }
997 case ID_LISTBOX_FONT:
998 {
999 m_listbox->SetFont( *wxITALIC_FONT );
6c8a980f 1000 m_listboxSorted->SetFont( *wxITALIC_FONT );
ec9f7884
VZ
1001 m_checkbox->SetFont( *wxITALIC_FONT );
1002 break;
1003 }
868a2826 1004 }
47908e25
RR
1005}
1006
1ccd23f5 1007#if wxUSE_CHOICE
47908e25
RR
1008void MyPanel::OnChoice( wxCommandEvent &event )
1009{
6c8a980f
VZ
1010 wxChoice *choice = event.GetId() == ID_CHOICE ? m_choice
1011 : m_choiceSorted;
1012
1013 m_text->AppendText( "Choice event selection string is: '" );
ec9f7884 1014 m_text->AppendText( event.GetString() );
6c8a980f 1015 m_text->AppendText( "'\n" );
b56c2246 1016 m_text->AppendText( "Choice control selection string is: '" );
6c8a980f
VZ
1017 m_text->AppendText( choice->GetStringSelection() );
1018 m_text->AppendText( "'\n" );
1019
1020 wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject());
1021 m_text->AppendText( "Choice event client data string is: '" );
6e47faf1
JS
1022
1023 if (obj)
1024 m_text->AppendText( obj->GetData() );
1025 else
1026 m_text->AppendText( wxString("none") );
1027
6c8a980f
VZ
1028 m_text->AppendText( "'\n" );
1029 m_text->AppendText( "Choice control client data string is: '" );
1030 obj = (wxStringClientData *)choice->GetClientObject(choice->GetSelection());
6e47faf1
JS
1031
1032 if (obj)
1033 m_text->AppendText( obj->GetData() );
1034 else
1035 m_text->AppendText( wxString("none") );
6c8a980f 1036 m_text->AppendText( "'\n" );
47908e25
RR
1037}
1038
1039void MyPanel::OnChoiceButtons( wxCommandEvent &event )
1040{
ec9f7884 1041 switch (event.GetId())
47908e25 1042 {
ec9f7884
VZ
1043 case ID_CHOICE_ENABLE:
1044 {
1045 m_choice->Enable( event.GetInt() == 0 );
b56c2246 1046 m_choiceSorted->Enable( event.GetInt() == 0 );
ec9f7884
VZ
1047 break;
1048 }
1049 case ID_CHOICE_SEL_NUM:
1050 {
1051 m_choice->SetSelection( 2 );
b56c2246 1052 m_choiceSorted->SetSelection( 2 );
ec9f7884
VZ
1053 break;
1054 }
1055 case ID_CHOICE_SEL_STR:
1056 {
1057 m_choice->SetStringSelection( "This" );
b56c2246 1058 m_choiceSorted->SetStringSelection( "This" );
ec9f7884
VZ
1059 break;
1060 }
1061 case ID_CHOICE_CLEAR:
1062 {
1063 m_choice->Clear();
b56c2246 1064 m_choiceSorted->Clear();
ec9f7884
VZ
1065 break;
1066 }
1067 case ID_CHOICE_APPEND:
1068 {
1069 m_choice->Append( "Hi!" );
b56c2246 1070 m_choiceSorted->Append( "Hi!" );
ec9f7884
VZ
1071 break;
1072 }
1073 case ID_CHOICE_DELETE:
1074 {
1075 int idx = m_choice->GetSelection();
f6bcfd97
BP
1076 if ( idx != wxNOT_FOUND )
1077 m_choice->Delete( idx );
b56c2246 1078 idx = m_choiceSorted->GetSelection();
f6bcfd97
BP
1079 if ( idx != wxNOT_FOUND )
1080 m_choiceSorted->Delete( idx );
ec9f7884
VZ
1081 break;
1082 }
1083 case ID_CHOICE_FONT:
1084 {
1085 m_choice->SetFont( *wxITALIC_FONT );
b56c2246 1086 m_choiceSorted->SetFont( *wxITALIC_FONT );
ec9f7884
VZ
1087 break;
1088 }
868a2826 1089 }
47908e25 1090}
1ccd23f5 1091#endif // wxUSE_CHOICE
47908e25
RR
1092
1093void MyPanel::OnCombo( wxCommandEvent &event )
1094{
19da4326 1095 m_text->AppendText( "ComboBox event selection string is: " );
ec9f7884
VZ
1096 m_text->AppendText( event.GetString() );
1097 m_text->AppendText( "\n" );
19da4326
RR
1098 m_text->AppendText( "ComboBox control selection string is: " );
1099 m_text->AppendText( m_combo->GetStringSelection() );
1100 m_text->AppendText( "\n" );
47908e25
RR
1101}
1102
f6bcfd97
BP
1103void MyPanel::OnComboTextChanged(wxCommandEvent& WXUNUSED(event))
1104{
1105 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1106 m_combo->GetValue().c_str());
1107}
1108
1109void MyPanel::OnComboTextEnter(wxCommandEvent& WXUNUSED(event))
1110{
1111 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1112 m_combo->GetValue().c_str());
1113}
1114
47908e25 1115void MyPanel::OnComboButtons( wxCommandEvent &event )
1c005ff7 1116{
ec9f7884 1117 switch (event.GetId())
2f6407b9 1118 {
ec9f7884
VZ
1119 case ID_COMBO_ENABLE:
1120 {
1121 m_combo->Enable( event.GetInt() == 0 );
1122 break;
1123 }
1124 case ID_COMBO_SEL_NUM:
1125 {
1126 m_combo->SetSelection( 2 );
1127 break;
1128 }
1129 case ID_COMBO_SEL_STR:
1130 {
1131 m_combo->SetStringSelection( "This" );
1132 break;
1133 }
1134 case ID_COMBO_CLEAR:
1135 {
1136 m_combo->Clear();
1137 break;
1138 }
1139 case ID_COMBO_APPEND:
1140 {
1141 m_combo->Append( "Hi!" );
1142 break;
1143 }
1144 case ID_COMBO_DELETE:
1145 {
1146 int idx = m_combo->GetSelection();
1147 m_combo->Delete( idx );
1148 break;
1149 }
1150 case ID_COMBO_FONT:
1151 {
1152 m_combo->SetFont( *wxITALIC_FONT );
1153 break;
1154 }
868a2826 1155 }
47908e25
RR
1156}
1157
1158void MyPanel::OnRadio( wxCommandEvent &event )
1159{
ec9f7884
VZ
1160 m_text->AppendText( "RadioBox selection string is: " );
1161 m_text->AppendText( event.GetString() );
1162 m_text->AppendText( "\n" );
47908e25
RR
1163}
1164
1165void MyPanel::OnRadioButtons( wxCommandEvent &event )
1166{
ec9f7884 1167 switch (event.GetId())
d3904ceb 1168 {
ec9f7884
VZ
1169 case ID_RADIOBOX_ENABLE:
1170 {
1171 m_radio->Enable( event.GetInt() == 0 );
1172 break;
1173 }
1174 case ID_RADIOBOX_SEL_NUM:
1175 {
1176 m_radio->SetSelection( 2 );
1177 break;
1178 }
1179 case ID_RADIOBOX_SEL_STR:
1180 {
1181 m_radio->SetStringSelection( "This" );
1182 break;
1183 }
1184 case ID_RADIOBOX_FONT:
1185 {
1186 m_radio->SetFont( *wxITALIC_FONT );
1187 break;
1188 }
868a2826 1189 }
1c005ff7
RR
1190}
1191
868a2826
RR
1192void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
1193{
ec9f7884
VZ
1194 m_fontButton->SetFont( *wxITALIC_FONT );
1195 m_text->SetFont( *wxITALIC_FONT );
868a2826
RR
1196}
1197
1db8dc4a 1198void MyPanel::OnUpdateLabel( wxCommandEvent &event )
185fa6bf 1199{
1db8dc4a
VZ
1200 m_label->SetLabel(event.GetInt() ? "Very very very very very long text."
1201 : "Shorter text.");
185fa6bf
VZ
1202}
1203
7bce6aec
RR
1204void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
1205{
ec9f7884 1206 m_gauge->SetValue( m_slider->GetValue() );
37ed3ae3 1207 m_gaugeVert->SetValue( m_slider->GetValue() / 2 );
7bce6aec
RR
1208}
1209
baccb514
VZ
1210#if wxUSE_SPINCTRL
1211
457e6c54 1212void MyPanel::OnSpinCtrl(wxSpinEvent& event)
baccb514
VZ
1213{
1214 wxString s;
57160afe
VZ
1215 s.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1216 m_spinctrl->GetValue(), event.GetInt());
baccb514
VZ
1217 m_text->AppendText(s);
1218}
1219
1220#endif // wxUSE_SPINCTRL
1221
0e528b99 1222#if wxUSE_SPINBTN
8c3c31d4
VZ
1223void MyPanel::OnSpinUp( wxSpinEvent &event )
1224{
1225 wxString value;
1226 value.Printf( _T("Spin control up: current = %d\n"),
1227 m_spinbutton->GetValue());
1228
1229 if ( m_spinbutton->GetValue() > 17 )
1230 {
1231 value += _T("Preventing the spin button from going above 17.\n");
1232
1233 event.Veto();
1234 }
1235
1236 m_text->AppendText(value);
1237}
1238
1239void MyPanel::OnSpinDown( wxSpinEvent &event )
1240{
1241 wxString value;
1242 value.Printf( _T("Spin control down: current = %d\n"),
1243 m_spinbutton->GetValue());
1244
1245 if ( m_spinbutton->GetValue() < -17 )
1246 {
1247 value += _T("Preventing the spin button from going below -17.\n");
1248
1249 event.Veto();
1250 }
1251
1252 m_text->AppendText(value);
1253}
1254
e380f72b
RR
1255void MyPanel::OnSpinUpdate( wxSpinEvent &event )
1256{
ec9f7884 1257 wxString value;
f70d5829 1258 value.Printf( _T("%d"), event.GetPosition() );
ec9f7884 1259 m_spintext->SetValue( value );
6380910c 1260
f70d5829 1261 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
6380910c
VZ
1262 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
1263 m_spinbutton->GetValue());
1264
1265 m_text->AppendText(value);
e380f72b 1266}
9726da4f
VZ
1267
1268void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
1269{
1270 event.Enable( m_spinbutton->GetValue() > 0 );
1271}
1272
1273void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
1274{
1275 int max = m_spinbutton->GetValue();
1276 wxProgressDialog dialog("Progress dialog example",
1277 "An informative message",
1278 max, // range
1279 this, // parent
8c3c31d4 1280 wxPD_CAN_ABORT |
2c8e4738 1281 wxPD_AUTO_HIDE |
8c3c31d4
VZ
1282 wxPD_APP_MODAL |
1283 wxPD_ELAPSED_TIME |
1284 wxPD_ESTIMATED_TIME |
1285 wxPD_REMAINING_TIME);
2ac1b69a 1286
9726da4f
VZ
1287
1288 bool cont = TRUE;
abceee76 1289 for ( int i = 0; i <= max && cont; i++ )
9726da4f
VZ
1290 {
1291 wxSleep(1);
abceee76 1292 if ( i == max )
be9abe3f
VZ
1293 {
1294 cont = dialog.Update(i, "That's all, folks!");
1295 }
1296 else if ( i == max / 2 )
9726da4f 1297 {
abceee76 1298 cont = dialog.Update(i, "Only a half left (very long message)!");
9726da4f
VZ
1299 }
1300 else
1301 {
1302 cont = dialog.Update(i);
1303 }
1304 }
1305
1306 if ( !cont )
1307 {
1308 *m_text << "Progress dialog aborted!\n";
1309 }
1310 else
1311 {
1312 *m_text << "Countdown from " << max << " finished.\n";
1313 }
1314}
1315
0e528b99 1316#endif // wxUSE_SPINBTN
e380f72b 1317
2cb21a45
VZ
1318MyPanel::~MyPanel()
1319{
29e7e51a
VZ
1320 //wxLog::RemoveTraceMask(_T("focus"));
1321 delete wxLog::SetActiveTarget(m_logTargetOld);
1322
ec9f7884 1323 delete m_notebook->GetImageList();
2cb21a45
VZ
1324}
1325
1c005ff7
RR
1326//----------------------------------------------------------------------
1327// MyFrame
1328//----------------------------------------------------------------------
1329
1330BEGIN_EVENT_TABLE(MyFrame, wxFrame)
3e2dd3db
VZ
1331 EVT_MENU(CONTROLS_QUIT, MyFrame::OnQuit)
1332 EVT_MENU(CONTROLS_ABOUT, MyFrame::OnAbout)
1333 EVT_MENU(CONTROLS_CLEAR_LOG, MyFrame::OnClearLog)
16f6dfd8 1334#if wxUSE_TOOLTIPS
3e2dd3db
VZ
1335 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
1336 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
16f6dfd8 1337#endif // wxUSE_TOOLTIPS
87a1e308 1338
3e2dd3db 1339 EVT_MENU(CONTROLS_ENABLE_ALL, MyFrame::OnEnableAll)
87a1e308
VZ
1340
1341 EVT_SIZE(MyFrame::OnSize)
97206645
VZ
1342 EVT_MOVE(MyFrame::OnMove)
1343
87a1e308 1344 EVT_IDLE(MyFrame::OnIdle)
1c005ff7
RR
1345END_EVENT_TABLE()
1346
7bfc22f6
VZ
1347MyFrame::MyFrame(const char *title, int x, int y)
1348 : wxFrame(NULL, -1, title, wxPoint(x, y), wxSize(500, 430))
1c005ff7 1349{
7bfc22f6
VZ
1350 // Give it an icon
1351 // The wxICON() macros loads an icon from a resource under Windows
1352 // and uses an #included XPM image under GTK+ and Motif
1353
1354 SetIcon( wxICON(mondrian) );
1355
1356 wxMenu *file_menu = new wxMenu;
1357
1358 file_menu->Append(CONTROLS_CLEAR_LOG, "&Clear log\tCtrl-L");
1359 file_menu->AppendSeparator();
1360 file_menu->Append(CONTROLS_ABOUT, "&About\tF1");
1361 file_menu->AppendSeparator();
1362 file_menu->Append(CONTROLS_QUIT, "E&xit\tAlt-X", "Quit controls sample");
1363
1364 wxMenuBar *menu_bar = new wxMenuBar;
1365 menu_bar->Append(file_menu, "&File");
1366
1367#if wxUSE_TOOLTIPS
1368 wxMenu *tooltip_menu = new wxMenu;
1369 tooltip_menu->Append(CONTROLS_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
1370 tooltip_menu->AppendSeparator();
1371 tooltip_menu->Append(CONTROLS_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T",
1372 "enable/disable tooltips", TRUE);
1373 tooltip_menu->Check(CONTROLS_ENABLE_TOOLTIPS, TRUE);
1374 menu_bar->Append(tooltip_menu, "&Tooltips");
1375#endif // wxUSE_TOOLTIPS
1376
1377 wxMenu *panel_menu = new wxMenu;
1378 panel_menu->Append(CONTROLS_ENABLE_ALL, "&Disable all\tCtrl-E",
1379 "Enable/disable all panel controls", TRUE);
1380 menu_bar->Append(panel_menu, "&Panel");
1381
1382 SetMenuBar(menu_bar);
1383
5fb9fcfc 1384 CreateStatusBar(2);
9f3362c4 1385
87a1e308 1386 m_panel = new MyPanel( this, 10, 10, 300, 100 );
7bfc22f6
VZ
1387
1388 SetSizeHints( 500, 425 );
1c005ff7
RR
1389}
1390
1391void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
1392{
ec9f7884 1393 Close(TRUE);
1c005ff7
RR
1394}
1395
1396void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
1397{
abceee76
VZ
1398 wxBusyCursor bc;
1399
ec9f7884
VZ
1400 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
1401 dialog.ShowModal();
1c005ff7 1402}
9f3362c4 1403
3e2dd3db
VZ
1404void MyFrame::OnClearLog(wxCommandEvent& WXUNUSED(event))
1405{
1406 m_panel->m_text->Clear();
1407}
1408
16f6dfd8
VZ
1409#if wxUSE_TOOLTIPS
1410void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
1411{
1412 static long s_delay = 5000;
1413
1414 wxString delay;
f70d5829 1415 delay.Printf( _T("%ld"), s_delay);
16f6dfd8
VZ
1416
1417 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
ec9f7884
VZ
1418 "Set tooltip delay",
1419 delay,
1420 this);
16f6dfd8
VZ
1421 if ( !delay )
1422 return; // cancelled
1423
f70d5829 1424 wxSscanf(delay, _T("%ld"), &s_delay);
16f6dfd8
VZ
1425
1426 wxToolTip::SetDelay(s_delay);
1427
f70d5829 1428 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
16f6dfd8
VZ
1429}
1430
1431void MyFrame::OnToggleTooltips(wxCommandEvent& event)
1432{
1433 static bool s_enabled = TRUE;
1434
1435 s_enabled = !s_enabled;
1436
1437 wxToolTip::Enable(s_enabled);
1438
f70d5829 1439 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
16f6dfd8
VZ
1440}
1441#endif // tooltips
1442
87a1e308
VZ
1443void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event))
1444{
1445 static bool s_enable = TRUE;
1446
1447 s_enable = !s_enable;
1448 m_panel->Enable(s_enable);
1449}
1450
97206645
VZ
1451void MyFrame::OnMove( wxMoveEvent& event )
1452{
1453 UpdateStatusBar(event.GetPosition(), GetSize());
1454
1455 event.Skip();
1456}
1457
5fb9fcfc
VZ
1458void MyFrame::OnSize( wxSizeEvent& event )
1459{
97206645 1460 UpdateStatusBar(GetPosition(), event.GetSize());
5fb9fcfc
VZ
1461
1462 event.Skip();
1463}
1464
9f3362c4
VZ
1465void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
1466{
1467 // track the window which has the focus in the status bar
1468 static wxWindow *s_windowFocus = (wxWindow *)NULL;
1469 wxWindow *focus = wxWindow::FindFocus();
1470 if ( focus && (focus != s_windowFocus) )
1471 {
1472 s_windowFocus = focus;
1473
1474 wxString msg;
f70d5829 1475 msg.Printf(
9f3362c4 1476#ifdef __WXMSW__
29e7e51a 1477 _T("Focus: %s, HWND = %08x"),
f70d5829 1478#else
29e7e51a 1479 _T("Focus: %s"),
f70d5829 1480#endif
29e7e51a 1481 s_windowFocus->GetClassInfo()->GetClassName()
9f3362c4 1482#ifdef __WXMSW__
ec9f7884 1483 , s_windowFocus->GetHWND()
f70d5829 1484#endif
9f3362c4
VZ
1485 );
1486
1487 SetStatusText(msg);
1488 }
341c92a8 1489}
6c8a980f 1490
f6bcfd97
BP
1491void MyComboBox::OnChar(wxKeyEvent& event)
1492{
1493 wxLogMessage(_T("MyComboBox::OnChar"));
1494
1495 if ( event.KeyCode() == 'w' )
1496 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1497 else
1498 event.Skip();
1499}
1500
1501void MyComboBox::OnKeyDown(wxKeyEvent& event)
1502{
1503 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1504
1505 if ( event.KeyCode() == 'w' )
1506 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1507 else
1508 event.Skip();
1509}
1510
1511void MyComboBox::OnKeyUp(wxKeyEvent& event)
1512{
1513 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1514
1515 event.Skip();
1516}
1517
8b81a824
VS
1518static void SetListboxClientData(const wxChar *name, wxListBox *control)
1519{
1520 size_t count = control->GetCount();
1521 for ( size_t n = 0; n < count; n++ )
1522 {
1523 wxString s;
1524 s.Printf(wxT("%s client data for '%s'"),
1525 name, control->GetString(n).c_str());
1526
1527 control->SetClientObject(n, new wxStringClientData(s));
1528 }
1529}
1530
1531static void SetChoiceClientData(const wxChar *name, wxChoice *control)
6c8a980f
VZ
1532{
1533 size_t count = control->GetCount();
1534 for ( size_t n = 0; n < count; n++ )
1535 {
1536 wxString s;
4acb6ca6 1537 s.Printf(wxT("%s client data for '%s'"),
6c8a980f
VZ
1538 name, control->GetString(n).c_str());
1539
1540 control->SetClientObject(n, new wxStringClientData(s));
1541 }
1542}