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