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