]> git.saurik.com Git - wxWidgets.git/blame - samples/controls/controls.cpp
Toolbar updates
[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);
76106901
VZ
115 void OnSpinCtrlUp(wxSpinEvent& event);
116 void OnSpinCtrlDown(wxSpinEvent& event);
117 void OnSpinCtrlText(wxCommandEvent& event);
baccb514
VZ
118#endif // wxUSE_SPINCTRL
119
87a1e308
VZ
120 void OnEnableAll(wxCommandEvent& event);
121 void OnChangeColour(wxCommandEvent& event);
3e2dd3db 122 void OnTestButton(wxCommandEvent& event);
9121bed2 123 void OnBmpButton(wxCommandEvent& event);
87a1e308 124
6c8a980f
VZ
125 wxListBox *m_listbox,
126 *m_listboxSorted;
1ccd23f5 127#if wxUSE_CHOICE
b56c2246
VZ
128 wxChoice *m_choice,
129 *m_choiceSorted;
1ccd23f5 130#endif
e380f72b
RR
131 wxComboBox *m_combo;
132 wxRadioBox *m_radio;
37ed3ae3
VZ
133 wxGauge *m_gauge,
134 *m_gaugeVert;
e380f72b
RR
135 wxSlider *m_slider;
136 wxButton *m_fontButton;
85eb36c2
RR
137 wxButton *m_lbSelectNum;
138 wxButton *m_lbSelectThis;
0e528b99 139#if wxUSE_SPINBTN
e380f72b 140 wxSpinButton *m_spinbutton;
9726da4f 141 wxButton *m_btnProgress;
0e528b99 142#endif // wxUSE_SPINBTN
b782f2e0
VZ
143
144#if wxUSE_SPINCTRL
145 wxSpinCtrl *m_spinctrl;
146#endif // wxUSE_SPINCTRL
147
e380f72b 148 wxTextCtrl *m_spintext;
ae0bdb01 149 wxCheckBox *m_checkbox;
16f6dfd8 150
e380f72b 151 wxTextCtrl *m_text;
655822f3
VZ
152 wxNotebook *m_notebook;
153
185fa6bf
VZ
154 wxStaticText *m_label;
155
b8653fbf 156private:
29e7e51a
VZ
157 wxLog *m_logTargetOld;
158
b8653fbf 159 DECLARE_EVENT_TABLE()
1c005ff7
RR
160};
161
162class MyFrame: public wxFrame
163{
b8653fbf 164public:
7bfc22f6 165 MyFrame(const char *title, int x, int y);
655822f3 166
1c005ff7
RR
167 void OnQuit(wxCommandEvent& event);
168 void OnAbout(wxCommandEvent& event);
3e2dd3db 169 void OnClearLog(wxCommandEvent& event);
87a1e308 170
16f6dfd8
VZ
171#if wxUSE_TOOLTIPS
172 void OnSetTooltipDelay(wxCommandEvent& event);
173 void OnToggleTooltips(wxCommandEvent& event);
174#endif // wxUSE_TOOLTIPS
87a1e308
VZ
175
176 void OnEnableAll(wxCommandEvent& event);
177
9f3362c4 178 void OnIdle( wxIdleEvent& event );
5fb9fcfc 179 void OnSize( wxSizeEvent& event );
97206645 180 void OnMove( wxMoveEvent& event );
655822f3 181
f048e32f
VZ
182 MyPanel *GetPanel() const { return m_panel; }
183
b8653fbf 184private:
97206645
VZ
185 void UpdateStatusBar(const wxPoint& pos, const wxSize& size)
186 {
7bfc22f6
VZ
187 if ( m_frameStatusBar )
188 {
189 wxString msg;
0545d965
VZ
190 wxSize sizeAll = GetSize(),
191 sizeCl = GetClientSize();
192 msg.Printf(_("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)"),
7bfc22f6
VZ
193 pos.x, pos.y,
194 size.x, size.y,
0545d965 195 sizeAll.x, sizeAll.y,
7bfc22f6
VZ
196 sizeCl.x, sizeCl.y);
197 SetStatusText(msg, 1);
198 }
97206645
VZ
199 }
200
f048e32f 201 MyPanel *m_panel;
87a1e308 202
b8653fbf 203 DECLARE_EVENT_TABLE()
1c005ff7
RR
204};
205
f6bcfd97
BP
206// a button which intercepts double clicks (for testing...)
207class MyButton : public wxButton
208{
209public:
210 MyButton(wxWindow *parent,
211 wxWindowID id,
212 const wxString& label = wxEmptyString,
213 const wxPoint& pos = wxDefaultPosition,
214 const wxSize& size = wxDefaultSize)
215 : wxButton(parent, id, label, pos, size)
216 {
217 }
218
219 void OnDClick(wxMouseEvent& event)
220 {
221 wxLogMessage(_T("MyButton::OnDClick"));
222
223 event.Skip();
224 }
225
226private:
227 DECLARE_EVENT_TABLE()
228};
229
230// a combo which intercepts chars (to test Windows behaviour)
231class MyComboBox : public wxComboBox
232{
233public:
234 MyComboBox(wxWindow *parent, wxWindowID id,
235 const wxString& value = wxEmptyString,
236 const wxPoint& pos = wxDefaultPosition,
237 const wxSize& size = wxDefaultSize,
238 int n = 0, const wxString choices[] = NULL,
239 long style = 0,
240 const wxValidator& validator = wxDefaultValidator,
241 const wxString& name = wxComboBoxNameStr)
242 : wxComboBox(parent, id, value, pos, size, n, choices, style,
243 validator, name) { }
244
245protected:
246 void OnChar(wxKeyEvent& event);
247 void OnKeyDown(wxKeyEvent& event);
248 void OnKeyUp(wxKeyEvent& event);
249 void OnFocusGot(wxFocusEvent& event)
250 {
251 wxLogMessage(_T("MyComboBox::OnFocusGot"));
252
253 event.Skip();
254 }
255
256private:
257 DECLARE_EVENT_TABLE()
258};
259
260// a radiobox which handles focus set/kill (for testing)
261class MyRadioBox : public wxRadioBox
262{
263public:
264 MyRadioBox(wxWindow *parent,
265 wxWindowID id,
266 const wxString& title = wxEmptyString,
267 const wxPoint& pos = wxDefaultPosition,
268 const wxSize& size = wxDefaultSize,
269 int n = 0, const wxString choices[] = NULL,
270 int majorDim = 1,
271 long style = wxRA_HORIZONTAL,
272 const wxValidator& validator = wxDefaultValidator,
0bb62421 273 const wxString& name = wxRadioBoxNameStr)
f6bcfd97
BP
274 : wxRadioBox(parent, id, title, pos, size, n, choices, majorDim,
275 style, validator, name) { }
276
277protected:
278 void OnFocusGot(wxFocusEvent& event)
279 {
280 wxLogMessage(_T("MyRadioBox::OnFocusGot"));
281
282 event.Skip();
283 }
284
285 void OnFocusLost(wxFocusEvent& event)
286 {
287 wxLogMessage(_T("MyRadioBox::OnFocusLost"));
288
289 event.Skip();
290 }
291
292private:
293 DECLARE_EVENT_TABLE()
294};
295
1c005ff7 296//----------------------------------------------------------------------
6c8a980f 297// other
1c005ff7
RR
298//----------------------------------------------------------------------
299
8b81a824
VS
300static void SetListboxClientData(const wxChar *name, wxListBox *control);
301static void SetChoiceClientData(const wxChar *name, wxChoice *control);
6c8a980f 302
d59051dd 303IMPLEMENT_APP(MyApp)
1c005ff7
RR
304
305//----------------------------------------------------------------------
306// MyApp
307//----------------------------------------------------------------------
308
16f6dfd8
VZ
309enum
310{
3e2dd3db
VZ
311 CONTROLS_QUIT = 100,
312 CONTROLS_TEXT,
313 CONTROLS_ABOUT,
314 CONTROLS_CLEAR_LOG,
16f6dfd8
VZ
315
316 // tooltip menu
3e2dd3db
VZ
317 CONTROLS_SET_TOOLTIP_DELAY = 200,
318 CONTROLS_ENABLE_TOOLTIPS,
87a1e308
VZ
319
320 // panel menu
3e2dd3db 321 CONTROLS_ENABLE_ALL
16f6dfd8 322};
1c005ff7 323
b8653fbf 324bool MyApp::OnInit()
1c005ff7 325{
41b66be9
VS
326 // use standard command line handling:
327 if ( !wxApp::OnInit() )
328 return FALSE;
329
e66ad5c6
VZ
330 // parse the cmd line
331 int x = 50,
332 y = 50;
3ca6a5f0 333 if ( argc == 3 )
e66ad5c6 334 {
a60b1f5d
MB
335 wxSscanf(wxString(argv[1]), wxT("%d"), &x);
336 wxSscanf(wxString(argv[2]), wxT("%d"), &y);
e66ad5c6
VZ
337 }
338
ec9f7884 339 // Create the main frame window
7bfc22f6 340 MyFrame *frame = new MyFrame("Controls wxWindows App", x, y);
ec9f7884 341 frame->Show(TRUE);
655822f3 342
ec9f7884 343 return TRUE;
1c005ff7
RR
344}
345
346//----------------------------------------------------------------------
347// MyPanel
348//----------------------------------------------------------------------
349
4fabb575 350const int ID_NOTEBOOK = 1000;
1c005ff7 351
4fabb575
JS
352const int ID_LISTBOX = 130;
353const int ID_LISTBOX_SEL_NUM = 131;
354const int ID_LISTBOX_SEL_STR = 132;
355const int ID_LISTBOX_CLEAR = 133;
356const int ID_LISTBOX_APPEND = 134;
357const int ID_LISTBOX_DELETE = 135;
358const int ID_LISTBOX_FONT = 136;
359const int ID_LISTBOX_ENABLE = 137;
6c8a980f 360const int ID_LISTBOX_SORTED = 138;
1c005ff7 361
4fabb575
JS
362const int ID_CHOICE = 120;
363const int ID_CHOICE_SEL_NUM = 121;
364const int ID_CHOICE_SEL_STR = 122;
365const int ID_CHOICE_CLEAR = 123;
366const int ID_CHOICE_APPEND = 124;
367const int ID_CHOICE_DELETE = 125;
368const int ID_CHOICE_FONT = 126;
369const int ID_CHOICE_ENABLE = 127;
b56c2246 370const int ID_CHOICE_SORTED = 128;
53010e52 371
4fabb575
JS
372const int ID_COMBO = 140;
373const int ID_COMBO_SEL_NUM = 141;
374const int ID_COMBO_SEL_STR = 142;
375const int ID_COMBO_CLEAR = 143;
376const int ID_COMBO_APPEND = 144;
377const int ID_COMBO_DELETE = 145;
378const int ID_COMBO_FONT = 146;
379const int ID_COMBO_ENABLE = 147;
53010e52 380
4fabb575
JS
381const int ID_RADIOBOX = 160;
382const int ID_RADIOBOX_SEL_NUM = 161;
383const int ID_RADIOBOX_SEL_STR = 162;
384const int ID_RADIOBOX_FONT = 163;
385const int ID_RADIOBOX_ENABLE = 164;
868a2826 386
f5d29b39
RR
387const int ID_RADIOBUTTON_1 = 166;
388const int ID_RADIOBUTTON_2 = 167;
389
4fabb575 390const int ID_SET_FONT = 170;
47908e25 391
4fabb575
JS
392const int ID_GAUGE = 180;
393const int ID_SLIDER = 181;
58614078 394
4fabb575 395const int ID_SPIN = 182;
9726da4f 396const int ID_BTNPROGRESS = 183;
185fa6bf 397const int ID_BUTTON_LABEL = 184;
baccb514 398const int ID_SPINCTRL = 185;
e380f72b 399
3e2dd3db
VZ
400const int ID_BUTTON_TEST1 = 190;
401const int ID_BUTTON_TEST2 = 191;
9121bed2 402const int ID_BITMAP_BTN = 192;
3e2dd3db 403
87a1e308
VZ
404const int ID_CHANGE_COLOUR = 200;
405
1c005ff7 406BEGIN_EVENT_TABLE(MyPanel, wxPanel)
ec9f7884 407EVT_SIZE ( MyPanel::OnSize)
4d0f3cd6 408EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyPanel::OnPageChanging)
ec9f7884
VZ
409EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
410EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
6c8a980f 411EVT_LISTBOX (ID_LISTBOX_SORTED, MyPanel::OnListBox)
ec9f7884
VZ
412EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
413EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
414EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
415EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
416EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
417EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
418EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
419EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
1ccd23f5 420#if wxUSE_CHOICE
ec9f7884 421EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
b56c2246 422EVT_CHOICE (ID_CHOICE_SORTED, MyPanel::OnChoice)
ec9f7884
VZ
423EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
424EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
425EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
426EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
427EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
428EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
429EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
1ccd23f5 430#endif
ec9f7884 431EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
f6bcfd97
BP
432EVT_TEXT (ID_COMBO, MyPanel::OnComboTextChanged)
433EVT_TEXT_ENTER(ID_COMBO, MyPanel::OnComboTextEnter)
ec9f7884
VZ
434EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
435EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
436EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
437EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
438EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
439EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
440EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
441EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
442EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
443EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
444EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
445EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
446EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
447EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
0e528b99 448#if wxUSE_SPINBTN
ec9f7884 449EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
8c3c31d4
VZ
450EVT_SPIN_UP (ID_SPIN, MyPanel::OnSpinUp)
451EVT_SPIN_DOWN (ID_SPIN, MyPanel::OnSpinDown)
9726da4f
VZ
452EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress)
453EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress)
0e528b99 454#endif // wxUSE_SPINBTN
baccb514 455#if wxUSE_SPINCTRL
57160afe 456EVT_SPINCTRL (ID_SPINCTRL, MyPanel::OnSpinCtrl)
76106901
VZ
457EVT_SPIN_UP (ID_SPINCTRL, MyPanel::OnSpinCtrlUp)
458EVT_SPIN_DOWN (ID_SPINCTRL, MyPanel::OnSpinCtrlDown)
459EVT_TEXT (ID_SPINCTRL, MyPanel::OnSpinCtrlText)
baccb514 460#endif // wxUSE_SPINCTRL
4c36ca57 461#if wxUSE_TOGGLEBTN
1db8dc4a 462EVT_TOGGLEBUTTON(ID_BUTTON_LABEL, MyPanel::OnUpdateLabel)
4c36ca57 463#endif // wxUSE_TOGGLEBTN
87a1e308 464EVT_CHECKBOX (ID_CHANGE_COLOUR, MyPanel::OnChangeColour)
3e2dd3db
VZ
465EVT_BUTTON (ID_BUTTON_TEST1, MyPanel::OnTestButton)
466EVT_BUTTON (ID_BUTTON_TEST2, MyPanel::OnTestButton)
9121bed2 467EVT_BUTTON (ID_BITMAP_BTN, MyPanel::OnBmpButton)
1c005ff7
RR
468END_EVENT_TABLE()
469
f6bcfd97
BP
470BEGIN_EVENT_TABLE(MyButton, wxButton)
471 EVT_LEFT_DCLICK(MyButton::OnDClick)
472END_EVENT_TABLE()
473
474BEGIN_EVENT_TABLE(MyComboBox, wxComboBox)
475 EVT_CHAR(MyComboBox::OnChar)
476 EVT_KEY_DOWN(MyComboBox::OnKeyDown)
477 EVT_KEY_UP(MyComboBox::OnKeyUp)
478
479 EVT_SET_FOCUS(MyComboBox::OnFocusGot)
480END_EVENT_TABLE()
481
482BEGIN_EVENT_TABLE(MyRadioBox, wxRadioBox)
483 EVT_SET_FOCUS(MyRadioBox::OnFocusGot)
484 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost)
485END_EVENT_TABLE()
486
487// ============================================================================
488// implementation
489// ============================================================================
490
5fb9fcfc 491MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
946fb2b9 492 : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) )
1c005ff7 493{
946fb2b9
JS
494 m_listbox = NULL;
495 m_listboxSorted = NULL;
496#if wxUSE_CHOICE
497 m_choice = NULL;
498 m_choiceSorted = NULL;
499#endif
500 m_combo = NULL;
501 m_radio = NULL;
502 m_gauge = NULL;
503 m_gaugeVert = NULL;
504 m_slider = NULL;
505 m_fontButton = NULL;
506 m_lbSelectNum = NULL;
507 m_lbSelectThis = NULL;
508#if wxUSE_SPINBTN
509 m_spinbutton = NULL;
510 m_btnProgress = NULL;
511#endif // wxUSE_SPINBTN
512#if wxUSE_SPINCTRL
513 m_spinctrl = NULL;
514#endif // wxUSE_SPINCTRL
515 m_spintext = NULL;
516 m_checkbox = NULL;
517 m_text = NULL;
518 m_notebook = NULL;
519 m_label = NULL;
520
3e2dd3db
VZ
521 m_text = new wxTextCtrl(this, -1, "This is the log window.\n",
522 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE);
a60b1f5d 523 m_text->SetBackgroundColour(wxT("wheat"));
655822f3 524
abceee76
VZ
525 if ( 0 )
526 wxLog::AddTraceMask(_T("focus"));
29e7e51a 527 m_logTargetOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_text));
0a772322 528
3e2dd3db 529 m_notebook = new wxNotebook(this, ID_NOTEBOOK);
655822f3 530
ec9f7884
VZ
531 wxString choices[] =
532 {
533 "This",
534 "is one of my",
535 "really",
536 "wonderful",
537 "examples."
538 };
655822f3 539
4fabb575 540#ifdef USE_XPM
ec9f7884
VZ
541 // image ids
542 enum
543 {
544 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
545 };
546
547 // fill the image list
548 wxImageList *imagelist = new wxImageList(32, 32);
549
550 imagelist-> Add( wxBitmap( list_xpm ));
551 imagelist-> Add( wxBitmap( choice_xpm ));
552 imagelist-> Add( wxBitmap( combo_xpm ));
553 imagelist-> Add( wxBitmap( text_xpm ));
554 imagelist-> Add( wxBitmap( radio_xpm ));
555 imagelist-> Add( wxBitmap( gauge_xpm ));
556 m_notebook->SetImageList(imagelist);
73c700fd 557#elif defined(__WXMSW__)
ec9f7884
VZ
558 // load images from resources
559 enum
560 {
561 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
562 };
563 wxImageList *imagelist = new wxImageList(16, 16, FALSE, Image_Max);
564
565 static const char *s_iconNames[Image_Max] =
566 {
567 "list", "choice", "combo", "text", "radio", "gauge"
568 };
569
570 for ( size_t n = 0; n < Image_Max; n++ )
571 {
572 wxBitmap bmp(s_iconNames[n]);
573 if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) )
574 {
4acb6ca6 575 wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."),
ec9f7884
VZ
576 s_iconNames[n], n);
577 }
578 }
579
580 m_notebook->SetImageList(imagelist);
4fabb575
JS
581#else
582
ec9f7884 583 // No images for now
4fabb575
JS
584#define Image_List -1
585#define Image_Choice -1
586#define Image_Combo -1
587#define Image_Text -1
588#define Image_Radio -1
589#define Image_Gauge -1
590#define Image_Max -1
591
fc54776e 592#endif
2cb21a45 593
6c8a980f
VZ
594 wxPanel *panel = new wxPanel(m_notebook);
595 m_listbox = new wxListBox( panel, ID_LISTBOX,
596 wxPoint(10,10), wxSize(120,70),
354aa1e3 597 5, choices, wxLB_ALWAYS_SB );
6c8a980f
VZ
598 m_listboxSorted = new wxListBox( panel, ID_LISTBOX_SORTED,
599 wxPoint(10,90), wxSize(120,70),
354aa1e3 600 5, choices, wxLB_SORT );
6c8a980f 601
8b81a824
VS
602 SetListboxClientData(wxT("listbox"), m_listbox);
603 SetListboxClientData(wxT("listbox"), m_listboxSorted);
9838df2c 604
ec9f7884 605 m_listbox->SetCursor(*wxCROSS_CURSOR);
b8653fbf 606#if wxUSE_TOOLTIPS
ec9f7884 607 m_listbox->SetToolTip( "This is a list box" );
16f6dfd8 608#endif // wxUSE_TOOLTIPS
9f3362c4 609
3e2dd3db
VZ
610 m_lbSelectNum = new wxButton( panel, ID_LISTBOX_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) );
611 m_lbSelectThis = new wxButton( panel, ID_LISTBOX_SEL_STR, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
612 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "&Clear", wxPoint(180,80), wxSize(140,30) );
f6bcfd97 613 (void)new MyButton( panel, ID_LISTBOX_APPEND, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
3e2dd3db 614 (void)new wxButton( panel, ID_LISTBOX_DELETE, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
f6bcfd97 615 wxButton *button = new MyButton( panel, ID_LISTBOX_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
57160afe
VZ
616
617 button->SetDefault();
618
619 button->SetForegroundColour(*wxBLUE);
620
b8653fbf 621#if wxUSE_TOOLTIPS
ec9f7884 622 button->SetToolTip( "Press here to set italic font" );
16f6dfd8 623#endif // wxUSE_TOOLTIPS
b1170810 624
6c8a980f 625 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "&Disable", wxPoint(20,170) );
ec9f7884 626 m_checkbox->SetValue(FALSE);
b8653fbf 627#if wxUSE_TOOLTIPS
ec9f7884 628 m_checkbox->SetToolTip( "Click here to disable the listbox" );
16f6dfd8 629#endif // wxUSE_TOOLTIPS
87a1e308
VZ
630 (void)new wxCheckBox( panel, ID_CHANGE_COLOUR, "&Toggle colour",
631 wxPoint(110,170) );
9121bed2 632 panel->SetCursor(wxCursor(wxCURSOR_HAND));
ec9f7884
VZ
633 m_notebook->AddPage(panel, "wxListBox", TRUE, Image_List);
634
1ccd23f5 635#if wxUSE_CHOICE
ec9f7884
VZ
636 panel = new wxPanel(m_notebook);
637 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices );
b56c2246
VZ
638 m_choiceSorted = new wxChoice( panel, ID_CHOICE_SORTED, wxPoint(10,70), wxSize(120,-1),
639 5, choices, wxCB_SORT );
6c8a980f 640
8b81a824
VS
641 SetChoiceClientData(wxT("choice"), m_choice);
642 SetChoiceClientData(wxT("choice"), m_choiceSorted);
6c8a980f 643
ddc8c2e3 644 m_choice->SetSelection(2);
a60b1f5d 645 m_choice->SetBackgroundColour( wxT("red") );
3e2dd3db
VZ
646 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) );
647 (void)new wxButton( panel, ID_CHOICE_SEL_STR, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
648 (void)new wxButton( panel, ID_CHOICE_CLEAR, "&Clear", wxPoint(180,80), wxSize(140,30) );
649 (void)new wxButton( panel, ID_CHOICE_APPEND, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
650 (void)new wxButton( panel, ID_CHOICE_DELETE, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
651 (void)new wxButton( panel, ID_CHOICE_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
652 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, "&Disable", wxPoint(20,130), wxSize(140,30) );
1fad4c3e 653
ec9f7884 654 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
1ccd23f5 655#endif // wxUSE_CHOICE
ec9f7884
VZ
656
657 panel = new wxPanel(m_notebook);
3e2dd3db 658 (void)new wxStaticBox( panel, -1, "&Box around combobox",
f048e32f 659 wxPoint(5, 5), wxSize(150, 100));
f6bcfd97
BP
660 m_combo = new MyComboBox( panel, ID_COMBO, "This",
661 wxPoint(20,25), wxSize(120, -1),
662 5, choices,
663 /* wxCB_READONLY | */ wxPROCESS_ENTER);
664
3e2dd3db
VZ
665 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) );
666 (void)new wxButton( panel, ID_COMBO_SEL_STR, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
667 (void)new wxButton( panel, ID_COMBO_CLEAR, "&Clear", wxPoint(180,80), wxSize(140,30) );
668 (void)new wxButton( panel, ID_COMBO_APPEND, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
669 (void)new wxButton( panel, ID_COMBO_DELETE, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
670 (void)new wxButton( panel, ID_COMBO_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
671 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, "&Disable", wxPoint(20,130), wxSize(140,30) );
ec9f7884
VZ
672 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
673
ec9f7884
VZ
674 wxString choices2[] =
675 {
17867d61 676 "First", "Second",
0a772322 677 /* "Third",
17867d61
RR
678 "Fourth", "Fifth", "Sixth",
679 "Seventh", "Eighth", "Nineth", "Tenth" */
ec9f7884
VZ
680 };
681
682 panel = new wxPanel(m_notebook);
f6bcfd97 683 (void)new MyRadioBox( panel, ID_RADIOBOX, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS );
3e2dd3db 684 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS );
f048e32f
VZ
685
686#if wxUSE_TOOLTIPS
3e2dd3db 687 m_combo->SetToolTip("This is a natural\ncombobox - can you believe me?");
f048e32f
VZ
688 m_radio->SetToolTip("Ever seen a radiobox?");
689#endif // wxUSE_TOOLTIPS
690
3e2dd3db
VZ
691 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) );
692 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
693 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
694 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
695 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "&Disable", wxPoint(340,130), wxDefaultSize );
7e2b55cd 696 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxDefaultSize, wxRB_GROUP );
ec9f7884 697 rb->SetValue( FALSE );
3e2dd3db 698 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "&Radiobutton2", wxPoint(340,170), wxDefaultSize );
ec9f7884
VZ
699 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
700
701 panel = new wxPanel(m_notebook);
0bb62421 702 (void)new wxStaticBox( panel, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
f6bcfd97
BP
703 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL|wxNO_BORDER );
704 m_gauge->SetBackgroundColour(*wxGREEN);
705 m_gauge->SetForegroundColour(*wxRED);
37ed3ae3 706 m_gaugeVert = new wxGauge( panel, -1, 100,
0bb62421 707 wxPoint(195,35), wxSize(30, 90),
1724ca8b 708 wxGA_VERTICAL | wxGA_SMOOTH | wxNO_BORDER );
7ba4fbeb
VZ
709 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
710 wxSL_AUTOTICKS | wxSL_LABELS );
711 m_slider->SetTickFreq(40, 0);
4d23a4bf
VZ
712 (void)new wxStaticBox( panel, -1, "&Explanation",
713 wxPoint(230,10), wxSize(270,130),
714 wxALIGN_CENTER );
715
9838df2c 716#ifdef __WXMOTIF__
ec9f7884
VZ
717 // No wrapping text in wxStaticText yet :-(
718 (void)new wxStaticText( panel, -1,
719 "Drag the slider!",
37ed3ae3 720 wxPoint(250,30),
e65cc56a 721 wxSize(240, -1)
ec9f7884 722 );
9838df2c 723#else
ec9f7884
VZ
724 (void)new wxStaticText( panel, -1,
725 "In order see the gauge (aka progress bar)\n"
726 "control do something you have to drag the\n"
727 "handle of the slider to the right.\n"
728 "\n"
729 "This is also supposed to demonstrate how\n"
730 "to use static controls.\n",
37ed3ae3 731 wxPoint(250,25),
8c3c31d4 732 wxSize(240, 110)
ec9f7884 733 );
9838df2c 734#endif
8c3c31d4
VZ
735 int initialSpinValue = -5;
736 wxString s;
737 s << initialSpinValue;
738 m_spintext = new wxTextCtrl( panel, -1, s, wxPoint(20,160), wxSize(80,-1) );
0e528b99 739#if wxUSE_SPINBTN
738f9e5a 740 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,160), wxSize(80, -1) );
e94ff4cb 741 m_spinbutton->SetRange(-40,30);
8c3c31d4 742 m_spinbutton->SetValue(initialSpinValue);
9726da4f 743
3e2dd3db 744 m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "&Show progress dialog",
738f9e5a 745 wxPoint(300, 160) );
0e528b99 746#endif // wxUSE_SPINBTN
b782f2e0
VZ
747
748#if wxUSE_SPINCTRL
678cd6de 749 m_spinctrl = new wxSpinCtrl( panel, ID_SPINCTRL, "", wxPoint(200, 160), wxSize(80, -1) );
b782f2e0
VZ
750 m_spinctrl->SetRange(10,30);
751 m_spinctrl->SetValue(15);
752#endif // wxUSE_SPINCTRL
753
ec9f7884 754 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
45e41c05
VZ
755
756 panel = new wxPanel(m_notebook);
b782f2e0 757
3dec57ad 758#if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
389d906b 759 wxIcon icon = wxArtProvider::GetIcon(wxART_INFORMATION);
f048e32f
VZ
760 wxStaticBitmap *bmpStatic = new wxStaticBitmap(panel, -1, icon,
761 wxPoint(10, 10));
45e41c05 762
bebe1443
VZ
763 // VZ: don't leak memory
764 // bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10));
765 // bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION));
b782f2e0
VZ
766#endif // !Motif
767
45e41c05
VZ
768 wxBitmap bitmap( 100, 100 );
769 wxMemoryDC dc;
770 dc.SelectObject( bitmap );
771 dc.SetPen(*wxGREEN_PEN);
f048e32f 772 dc.Clear();
45e41c05 773 dc.DrawEllipse(5, 5, 90, 90);
f048e32f 774 dc.DrawText("Bitmap", 30, 40);
45e41c05
VZ
775 dc.SelectObject( wxNullBitmap );
776
9121bed2 777 (void)new wxBitmapButton(panel, ID_BITMAP_BTN, bitmap, wxPoint(100, 20));
f048e32f 778
80a58c99 779#ifdef __WXMSW__
3e2dd3db
VZ
780 // test for masked bitmap display
781 bitmap = wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP);
9bb3479c
JS
782 if (bitmap.Ok())
783 {
784 bitmap.SetMask(new wxMask(bitmap, *wxBLUE));
669f7a11 785
9bb3479c
JS
786 (void)new wxStaticBitmap /* wxBitmapButton */ (panel, -1, bitmap, wxPoint(300, 120));
787 }
57160afe 788#endif
5ef2e633 789
389d906b
VS
790 wxBitmap bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION)),
791 bmp2(wxArtProvider::GetBitmap(wxART_WARNING)),
792 bmp3(wxArtProvider::GetBitmap(wxART_QUESTION));
f048e32f
VZ
793 wxBitmapButton *bmpBtn = new wxBitmapButton
794 (
795 panel, -1,
796 bmp1,
1db8dc4a 797 wxPoint(30, 70)
f048e32f 798 );
76fcf0f2 799
f048e32f
VZ
800 bmpBtn->SetBitmapSelected(bmp2);
801 bmpBtn->SetBitmapFocus(bmp3);
802
4c36ca57 803#if wxUSE_TOGGLEBTN
1db8dc4a
VZ
804 (void)new wxToggleButton(panel, ID_BUTTON_LABEL,
805 "&Toggle label", wxPoint(250, 20));
4c36ca57 806#endif // wxUSE_TOGGLEBTN
bedaf53e 807
185fa6bf
VZ
808 m_label = new wxStaticText(panel, -1, "Label with some long text",
809 wxPoint(250, 60), wxDefaultSize,
f6bcfd97 810 wxALIGN_RIGHT /*| wxST_NO_AUTORESIZE*/);
103aab26 811 m_label->SetForegroundColour( *wxBLUE );
2ac1b69a 812
45e41c05 813 m_notebook->AddPage(panel, "wxBitmapXXX");
dcc71398 814
9d9b7755 815 // layout constraints
461e93f9
JS
816#if wxUSE_CONSTRAINTS
817 wxLayoutConstraints *c;
dcc71398 818
9d9b7755
VZ
819 panel = new wxPanel(m_notebook);
820 panel->SetAutoLayout( TRUE );
d7928388 821
9d9b7755
VZ
822 c = new wxLayoutConstraints;
823 c->top.SameAs( panel, wxTop, 10 );
824 c->height.AsIs( );
825 c->left.SameAs( panel, wxLeft, 10 );
826 c->width.PercentOf( panel, wxWidth, 40 );
d7928388 827
3e2dd3db 828 wxButton *pMyButton = new wxButton(panel, ID_BUTTON_TEST1, "Test Button &1" );
9d9b7755 829 pMyButton->SetConstraints( c );
d7928388 830
9d9b7755
VZ
831 c = new wxLayoutConstraints;
832 c->top.SameAs( panel, wxTop, 10 );
833 c->bottom.SameAs( panel, wxBottom, 10 );
834 c->right.SameAs( panel, wxRight, 10 );
835 c->width.PercentOf( panel, wxWidth, 40 );
185fa6bf 836
3e2dd3db 837 wxButton *pMyButton2 = new wxButton(panel, ID_BUTTON_TEST2, "Test Button &2" );
9d9b7755 838 pMyButton2->SetConstraints( c );
185fa6bf 839
9d9b7755 840 m_notebook->AddPage(panel, "wxLayoutConstraint");
461e93f9
JS
841#endif
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 );
d769e8eb 852 sizer->Add( new wxButton(panel, -1, "Multiline\nbutton" ), 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
a60b1f5d
MB
919 m_lbSelectThis->SetForegroundColour(wxT("red"));
920 m_lbSelectThis->SetBackgroundColour(wxT("white"));
87a1e308
VZ
921 }
922 else
923 {
a60b1f5d
MB
924 s_colOld = wxColour(wxT("red"));
925 SetBackgroundColour(wxT("white"));
87a1e308 926
a60b1f5d
MB
927 m_lbSelectThis->SetForegroundColour(wxT("white"));
928 m_lbSelectThis->SetBackgroundColour(wxT("red"));
87a1e308
VZ
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");
b8653fbf 986#if wxUSE_TOOLTIPS
0ae0226b 987 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
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
76106901
VZ
1252void MyPanel::OnSpinCtrlText(wxCommandEvent& event)
1253{
1254 if ( m_spinctrl )
1255 {
1256 wxString s;
1257 s.Printf(_T("Spin ctrl text changed: now %d (from event: %s)\n"),
1258 m_spinctrl->GetValue(), event.GetString());
1259 m_text->AppendText(s);
1260 }
1261}
1262
457e6c54 1263void MyPanel::OnSpinCtrl(wxSpinEvent& event)
baccb514 1264{
76106901
VZ
1265 if ( m_spinctrl )
1266 {
1267 wxString s;
1268 s.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1269 m_spinctrl->GetValue(), event.GetInt());
1270 m_text->AppendText(s);
1271 }
1272}
1273
1274void MyPanel::OnSpinCtrlUp(wxSpinEvent& event)
1275{
1276 if ( m_spinctrl )
1277 {
1278 m_text->AppendText(wxString::Format(_T("Spin up: %d (from event: %d)\n"),
1279 m_spinctrl->GetValue(), event.GetInt()));
1280 }
1281}
1282
1283void MyPanel::OnSpinCtrlDown(wxSpinEvent& event)
1284{
1285 if ( m_spinctrl )
1286 {
1287 m_text->AppendText(wxString::Format(_T("Spin down: %d (from event: %d)\n"),
1288 m_spinctrl->GetValue(), event.GetInt()));
1289 }
baccb514
VZ
1290}
1291
1292#endif // wxUSE_SPINCTRL
1293
0e528b99 1294#if wxUSE_SPINBTN
8c3c31d4
VZ
1295void MyPanel::OnSpinUp( wxSpinEvent &event )
1296{
1297 wxString value;
1298 value.Printf( _T("Spin control up: current = %d\n"),
1299 m_spinbutton->GetValue());
1300
e94ff4cb 1301 if ( event.GetPosition() > 17 )
8c3c31d4
VZ
1302 {
1303 value += _T("Preventing the spin button from going above 17.\n");
1304
1305 event.Veto();
1306 }
1307
1308 m_text->AppendText(value);
1309}
1310
1311void MyPanel::OnSpinDown( wxSpinEvent &event )
1312{
1313 wxString value;
1314 value.Printf( _T("Spin control down: current = %d\n"),
1315 m_spinbutton->GetValue());
1316
e94ff4cb 1317 if ( event.GetPosition() < -17 )
8c3c31d4
VZ
1318 {
1319 value += _T("Preventing the spin button from going below -17.\n");
1320
1321 event.Veto();
1322 }
1323
1324 m_text->AppendText(value);
1325}
1326
e380f72b
RR
1327void MyPanel::OnSpinUpdate( wxSpinEvent &event )
1328{
ec9f7884 1329 wxString value;
f70d5829 1330 value.Printf( _T("%d"), event.GetPosition() );
ec9f7884 1331 m_spintext->SetValue( value );
6380910c 1332
f70d5829 1333 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
6380910c
VZ
1334 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
1335 m_spinbutton->GetValue());
1336
1337 m_text->AppendText(value);
e380f72b 1338}
9726da4f
VZ
1339
1340void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
1341{
1342 event.Enable( m_spinbutton->GetValue() > 0 );
1343}
1344
1345void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
1346{
1347 int max = m_spinbutton->GetValue();
601964ff
VS
1348
1349 if ( max <= 0 )
1350 {
1351 wxLogError(_T("You must set positive range!"));
1352 return;
1353 }
1354
9726da4f
VZ
1355 wxProgressDialog dialog("Progress dialog example",
1356 "An informative message",
1357 max, // range
1358 this, // parent
8c3c31d4 1359 wxPD_CAN_ABORT |
2c8e4738 1360 wxPD_AUTO_HIDE |
8c3c31d4
VZ
1361 wxPD_APP_MODAL |
1362 wxPD_ELAPSED_TIME |
1363 wxPD_ESTIMATED_TIME |
1364 wxPD_REMAINING_TIME);
2ac1b69a 1365
9726da4f
VZ
1366
1367 bool cont = TRUE;
abceee76 1368 for ( int i = 0; i <= max && cont; i++ )
9726da4f
VZ
1369 {
1370 wxSleep(1);
abceee76 1371 if ( i == max )
be9abe3f
VZ
1372 {
1373 cont = dialog.Update(i, "That's all, folks!");
1374 }
1375 else if ( i == max / 2 )
9726da4f 1376 {
abceee76 1377 cont = dialog.Update(i, "Only a half left (very long message)!");
9726da4f
VZ
1378 }
1379 else
1380 {
1381 cont = dialog.Update(i);
1382 }
1383 }
1384
1385 if ( !cont )
1386 {
1387 *m_text << "Progress dialog aborted!\n";
1388 }
1389 else
1390 {
1391 *m_text << "Countdown from " << max << " finished.\n";
1392 }
1393}
1394
0e528b99 1395#endif // wxUSE_SPINBTN
e380f72b 1396
2cb21a45
VZ
1397MyPanel::~MyPanel()
1398{
29e7e51a
VZ
1399 //wxLog::RemoveTraceMask(_T("focus"));
1400 delete wxLog::SetActiveTarget(m_logTargetOld);
1401
ec9f7884 1402 delete m_notebook->GetImageList();
2cb21a45
VZ
1403}
1404
1c005ff7
RR
1405//----------------------------------------------------------------------
1406// MyFrame
1407//----------------------------------------------------------------------
1408
1409BEGIN_EVENT_TABLE(MyFrame, wxFrame)
3e2dd3db
VZ
1410 EVT_MENU(CONTROLS_QUIT, MyFrame::OnQuit)
1411 EVT_MENU(CONTROLS_ABOUT, MyFrame::OnAbout)
1412 EVT_MENU(CONTROLS_CLEAR_LOG, MyFrame::OnClearLog)
16f6dfd8 1413#if wxUSE_TOOLTIPS
3e2dd3db
VZ
1414 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
1415 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
16f6dfd8 1416#endif // wxUSE_TOOLTIPS
87a1e308 1417
3e2dd3db 1418 EVT_MENU(CONTROLS_ENABLE_ALL, MyFrame::OnEnableAll)
87a1e308
VZ
1419
1420 EVT_SIZE(MyFrame::OnSize)
97206645
VZ
1421 EVT_MOVE(MyFrame::OnMove)
1422
87a1e308 1423 EVT_IDLE(MyFrame::OnIdle)
1c005ff7
RR
1424END_EVENT_TABLE()
1425
7bfc22f6
VZ
1426MyFrame::MyFrame(const char *title, int x, int y)
1427 : wxFrame(NULL, -1, title, wxPoint(x, y), wxSize(500, 430))
1c005ff7 1428{
7bfc22f6
VZ
1429 // Give it an icon
1430 // The wxICON() macros loads an icon from a resource under Windows
1431 // and uses an #included XPM image under GTK+ and Motif
1432
1433 SetIcon( wxICON(mondrian) );
1434
1435 wxMenu *file_menu = new wxMenu;
1436
1437 file_menu->Append(CONTROLS_CLEAR_LOG, "&Clear log\tCtrl-L");
1438 file_menu->AppendSeparator();
1439 file_menu->Append(CONTROLS_ABOUT, "&About\tF1");
1440 file_menu->AppendSeparator();
1441 file_menu->Append(CONTROLS_QUIT, "E&xit\tAlt-X", "Quit controls sample");
1442
1443 wxMenuBar *menu_bar = new wxMenuBar;
1444 menu_bar->Append(file_menu, "&File");
1445
1446#if wxUSE_TOOLTIPS
1447 wxMenu *tooltip_menu = new wxMenu;
1448 tooltip_menu->Append(CONTROLS_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
1449 tooltip_menu->AppendSeparator();
1450 tooltip_menu->Append(CONTROLS_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T",
1451 "enable/disable tooltips", TRUE);
1452 tooltip_menu->Check(CONTROLS_ENABLE_TOOLTIPS, TRUE);
1453 menu_bar->Append(tooltip_menu, "&Tooltips");
1454#endif // wxUSE_TOOLTIPS
1455
1456 wxMenu *panel_menu = new wxMenu;
1457 panel_menu->Append(CONTROLS_ENABLE_ALL, "&Disable all\tCtrl-E",
1458 "Enable/disable all panel controls", TRUE);
1459 menu_bar->Append(panel_menu, "&Panel");
1460
1461 SetMenuBar(menu_bar);
1462
5fb9fcfc 1463 CreateStatusBar(2);
9f3362c4 1464
87a1e308 1465 m_panel = new MyPanel( this, 10, 10, 300, 100 );
7bfc22f6
VZ
1466
1467 SetSizeHints( 500, 425 );
1c005ff7
RR
1468}
1469
1470void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
1471{
ec9f7884 1472 Close(TRUE);
1c005ff7
RR
1473}
1474
1475void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
1476{
abceee76
VZ
1477 wxBusyCursor bc;
1478
ec9f7884
VZ
1479 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
1480 dialog.ShowModal();
1c005ff7 1481}
9f3362c4 1482
3e2dd3db
VZ
1483void MyFrame::OnClearLog(wxCommandEvent& WXUNUSED(event))
1484{
1485 m_panel->m_text->Clear();
1486}
1487
16f6dfd8
VZ
1488#if wxUSE_TOOLTIPS
1489void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
1490{
1491 static long s_delay = 5000;
1492
1493 wxString delay;
f70d5829 1494 delay.Printf( _T("%ld"), s_delay);
16f6dfd8
VZ
1495
1496 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
ec9f7884
VZ
1497 "Set tooltip delay",
1498 delay,
1499 this);
16f6dfd8
VZ
1500 if ( !delay )
1501 return; // cancelled
1502
f70d5829 1503 wxSscanf(delay, _T("%ld"), &s_delay);
16f6dfd8
VZ
1504
1505 wxToolTip::SetDelay(s_delay);
1506
f70d5829 1507 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
16f6dfd8
VZ
1508}
1509
1510void MyFrame::OnToggleTooltips(wxCommandEvent& event)
1511{
1512 static bool s_enabled = TRUE;
1513
1514 s_enabled = !s_enabled;
1515
1516 wxToolTip::Enable(s_enabled);
1517
f70d5829 1518 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
16f6dfd8
VZ
1519}
1520#endif // tooltips
1521
87a1e308
VZ
1522void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event))
1523{
1524 static bool s_enable = TRUE;
1525
1526 s_enable = !s_enable;
1527 m_panel->Enable(s_enable);
1528}
1529
97206645
VZ
1530void MyFrame::OnMove( wxMoveEvent& event )
1531{
1532 UpdateStatusBar(event.GetPosition(), GetSize());
1533
1534 event.Skip();
1535}
1536
5fb9fcfc
VZ
1537void MyFrame::OnSize( wxSizeEvent& event )
1538{
97206645 1539 UpdateStatusBar(GetPosition(), event.GetSize());
5fb9fcfc
VZ
1540
1541 event.Skip();
1542}
1543
9f3362c4
VZ
1544void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
1545{
1546 // track the window which has the focus in the status bar
1547 static wxWindow *s_windowFocus = (wxWindow *)NULL;
1548 wxWindow *focus = wxWindow::FindFocus();
1549 if ( focus && (focus != s_windowFocus) )
1550 {
1551 s_windowFocus = focus;
1552
1553 wxString msg;
f70d5829 1554 msg.Printf(
9f3362c4 1555#ifdef __WXMSW__
29e7e51a 1556 _T("Focus: %s, HWND = %08x"),
f70d5829 1557#else
29e7e51a 1558 _T("Focus: %s"),
f70d5829 1559#endif
29e7e51a 1560 s_windowFocus->GetClassInfo()->GetClassName()
9f3362c4 1561#ifdef __WXMSW__
ec9f7884 1562 , s_windowFocus->GetHWND()
f70d5829 1563#endif
9f3362c4
VZ
1564 );
1565
1566 SetStatusText(msg);
1567 }
341c92a8 1568}
6c8a980f 1569
f6bcfd97
BP
1570void MyComboBox::OnChar(wxKeyEvent& event)
1571{
1572 wxLogMessage(_T("MyComboBox::OnChar"));
1573
1574 if ( event.KeyCode() == 'w' )
1575 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1576 else
1577 event.Skip();
1578}
1579
1580void MyComboBox::OnKeyDown(wxKeyEvent& event)
1581{
1582 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1583
1584 if ( event.KeyCode() == 'w' )
1585 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1586 else
1587 event.Skip();
1588}
1589
1590void MyComboBox::OnKeyUp(wxKeyEvent& event)
1591{
1592 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1593
1594 event.Skip();
1595}
1596
8b81a824
VS
1597static void SetListboxClientData(const wxChar *name, wxListBox *control)
1598{
1599 size_t count = control->GetCount();
1600 for ( size_t n = 0; n < count; n++ )
1601 {
1602 wxString s;
1603 s.Printf(wxT("%s client data for '%s'"),
1604 name, control->GetString(n).c_str());
1605
1606 control->SetClientObject(n, new wxStringClientData(s));
1607 }
1608}
1609
1610static void SetChoiceClientData(const wxChar *name, wxChoice *control)
6c8a980f
VZ
1611{
1612 size_t count = control->GetCount();
1613 for ( size_t n = 0; n < count; n++ )
1614 {
1615 wxString s;
4acb6ca6 1616 s.Printf(wxT("%s client data for '%s'"),
6c8a980f
VZ
1617 name, control->GetString(n).c_str());
1618
1619 control->SetClientObject(n, new wxStringClientData(s));
1620 }
1621}