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