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