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