]> git.saurik.com Git - wxWidgets.git/blame - samples/controls/controls.cpp
Small 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 274 : wxRadioBox(parent, id, title, pos, size, n, choices, majorDim,
8b1d8f36 275 style, validator, name) { SetForegroundColour(*wxRED); }
f6bcfd97
BP
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 );
8b1d8f36 685 m_radio->SetForegroundColour(*wxRED);
f048e32f
VZ
686
687#if wxUSE_TOOLTIPS
3e2dd3db 688 m_combo->SetToolTip("This is a natural\ncombobox - can you believe me?");
f048e32f
VZ
689 m_radio->SetToolTip("Ever seen a radiobox?");
690#endif // wxUSE_TOOLTIPS
691
3e2dd3db
VZ
692 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) );
693 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
694 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
695 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
696 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "&Disable", wxPoint(340,130), wxDefaultSize );
7e2b55cd 697 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxDefaultSize, wxRB_GROUP );
ec9f7884 698 rb->SetValue( FALSE );
3e2dd3db 699 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "&Radiobutton2", wxPoint(340,170), wxDefaultSize );
ec9f7884
VZ
700 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
701
702 panel = new wxPanel(m_notebook);
0bb62421 703 (void)new wxStaticBox( panel, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
f6bcfd97
BP
704 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL|wxNO_BORDER );
705 m_gauge->SetBackgroundColour(*wxGREEN);
706 m_gauge->SetForegroundColour(*wxRED);
37ed3ae3 707 m_gaugeVert = new wxGauge( panel, -1, 100,
0bb62421 708 wxPoint(195,35), wxSize(30, 90),
1724ca8b 709 wxGA_VERTICAL | wxGA_SMOOTH | wxNO_BORDER );
7ba4fbeb
VZ
710 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
711 wxSL_AUTOTICKS | wxSL_LABELS );
712 m_slider->SetTickFreq(40, 0);
413d43d3 713#if wxUSE_TOOLTIPS
8b1d8f36 714 m_slider->SetToolTip(_T("This is a sliding slider"));
413d43d3 715#endif // wxUSE_TOOLTIPS
8b1d8f36 716
4d23a4bf
VZ
717 (void)new wxStaticBox( panel, -1, "&Explanation",
718 wxPoint(230,10), wxSize(270,130),
719 wxALIGN_CENTER );
720
9838df2c 721#ifdef __WXMOTIF__
ec9f7884
VZ
722 // No wrapping text in wxStaticText yet :-(
723 (void)new wxStaticText( panel, -1,
724 "Drag the slider!",
37ed3ae3 725 wxPoint(250,30),
e65cc56a 726 wxSize(240, -1)
ec9f7884 727 );
9838df2c 728#else
ec9f7884
VZ
729 (void)new wxStaticText( panel, -1,
730 "In order see the gauge (aka progress bar)\n"
731 "control do something you have to drag the\n"
732 "handle of the slider to the right.\n"
733 "\n"
734 "This is also supposed to demonstrate how\n"
735 "to use static controls.\n",
37ed3ae3 736 wxPoint(250,25),
8c3c31d4 737 wxSize(240, 110)
ec9f7884 738 );
9838df2c 739#endif
8c3c31d4
VZ
740 int initialSpinValue = -5;
741 wxString s;
742 s << initialSpinValue;
743 m_spintext = new wxTextCtrl( panel, -1, s, wxPoint(20,160), wxSize(80,-1) );
0e528b99 744#if wxUSE_SPINBTN
738f9e5a 745 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,160), wxSize(80, -1) );
e94ff4cb 746 m_spinbutton->SetRange(-40,30);
8c3c31d4 747 m_spinbutton->SetValue(initialSpinValue);
9726da4f 748
3e2dd3db 749 m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "&Show progress dialog",
738f9e5a 750 wxPoint(300, 160) );
0e528b99 751#endif // wxUSE_SPINBTN
b782f2e0
VZ
752
753#if wxUSE_SPINCTRL
678cd6de 754 m_spinctrl = new wxSpinCtrl( panel, ID_SPINCTRL, "", wxPoint(200, 160), wxSize(80, -1) );
b782f2e0
VZ
755 m_spinctrl->SetRange(10,30);
756 m_spinctrl->SetValue(15);
757#endif // wxUSE_SPINCTRL
758
ec9f7884 759 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
45e41c05
VZ
760
761 panel = new wxPanel(m_notebook);
b782f2e0 762
3dec57ad 763#if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
389d906b 764 wxIcon icon = wxArtProvider::GetIcon(wxART_INFORMATION);
508d586e 765 (void) new wxStaticBitmap( panel, -1, icon, wxPoint(10, 10) );
45e41c05 766
bebe1443
VZ
767 // VZ: don't leak memory
768 // bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10));
769 // bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION));
b782f2e0
VZ
770#endif // !Motif
771
45e41c05
VZ
772 wxBitmap bitmap( 100, 100 );
773 wxMemoryDC dc;
774 dc.SelectObject( bitmap );
775 dc.SetPen(*wxGREEN_PEN);
f048e32f 776 dc.Clear();
45e41c05 777 dc.DrawEllipse(5, 5, 90, 90);
f048e32f 778 dc.DrawText("Bitmap", 30, 40);
45e41c05
VZ
779 dc.SelectObject( wxNullBitmap );
780
9121bed2 781 (void)new wxBitmapButton(panel, ID_BITMAP_BTN, bitmap, wxPoint(100, 20));
f048e32f 782
80a58c99 783#ifdef __WXMSW__
3e2dd3db
VZ
784 // test for masked bitmap display
785 bitmap = wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP);
9bb3479c
JS
786 if (bitmap.Ok())
787 {
788 bitmap.SetMask(new wxMask(bitmap, *wxBLUE));
669f7a11 789
9bb3479c
JS
790 (void)new wxStaticBitmap /* wxBitmapButton */ (panel, -1, bitmap, wxPoint(300, 120));
791 }
57160afe 792#endif
5ef2e633 793
389d906b
VS
794 wxBitmap bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION)),
795 bmp2(wxArtProvider::GetBitmap(wxART_WARNING)),
796 bmp3(wxArtProvider::GetBitmap(wxART_QUESTION));
f048e32f
VZ
797 wxBitmapButton *bmpBtn = new wxBitmapButton
798 (
799 panel, -1,
800 bmp1,
1db8dc4a 801 wxPoint(30, 70)
f048e32f 802 );
76fcf0f2 803
f048e32f
VZ
804 bmpBtn->SetBitmapSelected(bmp2);
805 bmpBtn->SetBitmapFocus(bmp3);
806
4c36ca57 807#if wxUSE_TOGGLEBTN
1db8dc4a
VZ
808 (void)new wxToggleButton(panel, ID_BUTTON_LABEL,
809 "&Toggle label", wxPoint(250, 20));
4c36ca57 810#endif // wxUSE_TOGGLEBTN
bedaf53e 811
185fa6bf
VZ
812 m_label = new wxStaticText(panel, -1, "Label with some long text",
813 wxPoint(250, 60), wxDefaultSize,
f6bcfd97 814 wxALIGN_RIGHT /*| wxST_NO_AUTORESIZE*/);
103aab26 815 m_label->SetForegroundColour( *wxBLUE );
2ac1b69a 816
45e41c05 817 m_notebook->AddPage(panel, "wxBitmapXXX");
dcc71398 818
9d9b7755 819 // layout constraints
461e93f9
JS
820#if wxUSE_CONSTRAINTS
821 wxLayoutConstraints *c;
dcc71398 822
9d9b7755
VZ
823 panel = new wxPanel(m_notebook);
824 panel->SetAutoLayout( TRUE );
d7928388 825
9d9b7755
VZ
826 c = new wxLayoutConstraints;
827 c->top.SameAs( panel, wxTop, 10 );
828 c->height.AsIs( );
829 c->left.SameAs( panel, wxLeft, 10 );
830 c->width.PercentOf( panel, wxWidth, 40 );
d7928388 831
3e2dd3db 832 wxButton *pMyButton = new wxButton(panel, ID_BUTTON_TEST1, "Test Button &1" );
9d9b7755 833 pMyButton->SetConstraints( c );
d7928388 834
9d9b7755
VZ
835 c = new wxLayoutConstraints;
836 c->top.SameAs( panel, wxTop, 10 );
837 c->bottom.SameAs( panel, wxBottom, 10 );
838 c->right.SameAs( panel, wxRight, 10 );
839 c->width.PercentOf( panel, wxWidth, 40 );
185fa6bf 840
3e2dd3db 841 wxButton *pMyButton2 = new wxButton(panel, ID_BUTTON_TEST2, "Test Button &2" );
9d9b7755 842 pMyButton2->SetConstraints( c );
185fa6bf 843
9d9b7755 844 m_notebook->AddPage(panel, "wxLayoutConstraint");
461e93f9
JS
845#endif
846
9d9b7755 847 // sizer
dcc71398 848
9d9b7755
VZ
849 panel = new wxPanel(m_notebook);
850 panel->SetAutoLayout( TRUE );
dcc71398 851
9d9b7755
VZ
852 wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );
853
3e2dd3db 854 sizer->Add( new wxButton(panel, -1, "Test Button &1" ), 3, wxALL, 10 );
9d9b7755 855 sizer->Add( 20,20, 1 );
d769e8eb 856 sizer->Add( new wxButton(panel, -1, "Multiline\nbutton" ), 3, wxGROW|wxALL, 10 );
9d9b7755
VZ
857
858 panel->SetSizer( sizer );
859
860 m_notebook->AddPage(panel, "wxSizer");
1c005ff7
RR
861}
862
863void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
864{
ec9f7884
VZ
865 int x = 0;
866 int y = 0;
867 GetClientSize( &x, &y );
655822f3 868
ec9f7884
VZ
869 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
870 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
1c005ff7
RR
871}
872
4d0f3cd6
VZ
873void MyPanel::OnPageChanging( wxNotebookEvent &event )
874{
45e41c05
VZ
875 int selOld = event.GetOldSelection();
876 if ( selOld == 2 )
4d0f3cd6 877 {
65045edd
RR
878 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
879 "page change from taking place - if you select\n"
880 "[No] the current page will stay the third one\n",
8c3c31d4 881 "Control sample",
f6bcfd97 882 wxICON_QUESTION | wxYES_NO, this) != wxYES )
8c3c31d4
VZ
883 {
884 event.Veto();
45e41c05 885
8c3c31d4
VZ
886 return;
887 }
4d0f3cd6 888 }
45e41c05 889
36202885
VZ
890 *m_text << "Notebook selection is being changed from " << selOld
891 << " to " << event.GetSelection()
892 << " (current page from notebook is "
893 << m_notebook->GetSelection() << ")\n";
4d0f3cd6
VZ
894}
895
cb43b372
RR
896void MyPanel::OnPageChanged( wxNotebookEvent &event )
897{
36202885
VZ
898 *m_text << "Notebook selection is now " << event.GetSelection()
899 << " (from notebook: " << m_notebook->GetSelection() << ")\n";
cb43b372
RR
900}
901
3e2dd3db
VZ
902void MyPanel::OnTestButton(wxCommandEvent& event)
903{
904 wxLogMessage(_T("Button %c clicked."),
905 event.GetId() == ID_BUTTON_TEST1 ? _T('1') : _T('2'));
906}
907
9121bed2
VZ
908void MyPanel::OnBmpButton(wxCommandEvent& event)
909{
910 wxLogMessage(_T("Bitmap button clicked."));
911}
912
87a1e308
VZ
913void MyPanel::OnChangeColour(wxCommandEvent& WXUNUSED(event))
914{
915 static wxColour s_colOld;
916
917 // test panel colour changing and propagation to the subcontrols
918 if ( s_colOld.Ok() )
919 {
920 SetBackgroundColour(s_colOld);
921 s_colOld = wxNullColour;
922
a60b1f5d
MB
923 m_lbSelectThis->SetForegroundColour(wxT("red"));
924 m_lbSelectThis->SetBackgroundColour(wxT("white"));
87a1e308
VZ
925 }
926 else
927 {
a60b1f5d
MB
928 s_colOld = wxColour(wxT("red"));
929 SetBackgroundColour(wxT("white"));
87a1e308 930
a60b1f5d
MB
931 m_lbSelectThis->SetForegroundColour(wxT("white"));
932 m_lbSelectThis->SetBackgroundColour(wxT("red"));
87a1e308
VZ
933 }
934
935 m_lbSelectThis->Refresh();
936 Refresh();
937}
938
1c005ff7
RR
939void MyPanel::OnListBox( wxCommandEvent &event )
940{
2e0e025e 941// GetParent()->Move(100, 100);
e66ad5c6 942
846e1424
RR
943 if (event.GetInt() == -1)
944 {
945 m_text->AppendText( "ListBox has no selections anymore\n" );
946 return;
947 }
948
6c8a980f
VZ
949 wxListBox *listbox = event.GetId() == ID_LISTBOX ? m_listbox
950 : m_listboxSorted;
951
952 m_text->AppendText( "ListBox event selection string is: '" );
ec9f7884 953 m_text->AppendText( event.GetString() );
6c8a980f
VZ
954 m_text->AppendText( "'\n" );
955 m_text->AppendText( "ListBox control selection string is: '" );
956 m_text->AppendText( listbox->GetStringSelection() );
957 m_text->AppendText( "'\n" );
958
959 wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject());
960 m_text->AppendText( "ListBox event client data string is: '" );
6e47faf1 961 if (obj) // BC++ doesn't like use of '? .. : .. ' in this context
74a533f7 962 m_text->AppendText( obj->GetData() );
6e47faf1 963 else
74a533f7 964 m_text->AppendText( wxString("none") );
6e47faf1 965
6c8a980f
VZ
966 m_text->AppendText( "'\n" );
967 m_text->AppendText( "ListBox control client data string is: '" );
968 obj = (wxStringClientData *)listbox->GetClientObject(listbox->GetSelection());
6e47faf1 969 if (obj)
74a533f7 970 m_text->AppendText( obj->GetData() );
6e47faf1 971 else
74a533f7 972 m_text->AppendText( wxString("none") );
6c8a980f 973 m_text->AppendText( "'\n" );
1c005ff7
RR
974}
975
5b077d48
RR
976void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
977{
ec9f7884
VZ
978 m_text->AppendText( "ListBox double click string is: " );
979 m_text->AppendText( event.GetString() );
980 m_text->AppendText( "\n" );
5b077d48
RR
981}
982
47908e25
RR
983void MyPanel::OnListBoxButtons( wxCommandEvent &event )
984{
ec9f7884 985 switch (event.GetId())
d3904ceb 986 {
ec9f7884
VZ
987 case ID_LISTBOX_ENABLE:
988 {
989 m_text->AppendText("Checkbox clicked.\n");
b8653fbf 990#if wxUSE_TOOLTIPS
0ae0226b 991 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
ec9f7884
VZ
992 if (event.GetInt())
993 cb->SetToolTip( "Click to enable listbox" );
994 else
995 cb->SetToolTip( "Click to disable listbox" );
16f6dfd8 996#endif // wxUSE_TOOLTIPS
ec9f7884 997 m_listbox->Enable( event.GetInt() == 0 );
57160afe
VZ
998 m_lbSelectThis->Enable( event.GetInt() == 0 );
999 m_lbSelectNum->Enable( event.GetInt() == 0 );
6c8a980f 1000 m_listboxSorted->Enable( event.GetInt() == 0 );
ee6e1b1d 1001 FindWindow(ID_CHANGE_COLOUR)->Enable( event.GetInt() == 0 );
ec9f7884
VZ
1002 break;
1003 }
1004 case ID_LISTBOX_SEL_NUM:
1005 {
1006 m_listbox->SetSelection( 2 );
6c8a980f 1007 m_listboxSorted->SetSelection( 2 );
8c3c31d4 1008 m_lbSelectThis->WarpPointer( 40, 14 );
ec9f7884
VZ
1009 break;
1010 }
1011 case ID_LISTBOX_SEL_STR:
1012 {
1013 m_listbox->SetStringSelection( "This" );
6c8a980f 1014 m_listboxSorted->SetStringSelection( "This" );
8c3c31d4 1015 m_lbSelectNum->WarpPointer( 40, 14 );
ec9f7884
VZ
1016 break;
1017 }
1018 case ID_LISTBOX_CLEAR:
1019 {
1020 m_listbox->Clear();
6c8a980f 1021 m_listboxSorted->Clear();
ec9f7884
VZ
1022 break;
1023 }
1024 case ID_LISTBOX_APPEND:
1025 {
1026 m_listbox->Append( "Hi!" );
6c8a980f 1027 m_listboxSorted->Append( "Hi!" );
ec9f7884
VZ
1028 break;
1029 }
1030 case ID_LISTBOX_DELETE:
1031 {
6c8a980f
VZ
1032 int idx;
1033 idx = m_listbox->GetSelection();
f6bcfd97
BP
1034 if ( idx != wxNOT_FOUND )
1035 m_listbox->Delete( idx );
6c8a980f 1036 idx = m_listboxSorted->GetSelection();
f6bcfd97
BP
1037 if ( idx != wxNOT_FOUND )
1038 m_listboxSorted->Delete( idx );
ec9f7884
VZ
1039 break;
1040 }
1041 case ID_LISTBOX_FONT:
1042 {
1043 m_listbox->SetFont( *wxITALIC_FONT );
6c8a980f 1044 m_listboxSorted->SetFont( *wxITALIC_FONT );
ec9f7884
VZ
1045 m_checkbox->SetFont( *wxITALIC_FONT );
1046 break;
1047 }
868a2826 1048 }
47908e25
RR
1049}
1050
1ccd23f5 1051#if wxUSE_CHOICE
47908e25
RR
1052void MyPanel::OnChoice( wxCommandEvent &event )
1053{
6c8a980f
VZ
1054 wxChoice *choice = event.GetId() == ID_CHOICE ? m_choice
1055 : m_choiceSorted;
1056
1057 m_text->AppendText( "Choice event selection string is: '" );
ec9f7884 1058 m_text->AppendText( event.GetString() );
6c8a980f 1059 m_text->AppendText( "'\n" );
b56c2246 1060 m_text->AppendText( "Choice control selection string is: '" );
6c8a980f
VZ
1061 m_text->AppendText( choice->GetStringSelection() );
1062 m_text->AppendText( "'\n" );
1063
1064 wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject());
1065 m_text->AppendText( "Choice event client data string is: '" );
6e47faf1
JS
1066
1067 if (obj)
1068 m_text->AppendText( obj->GetData() );
1069 else
1070 m_text->AppendText( wxString("none") );
1071
6c8a980f
VZ
1072 m_text->AppendText( "'\n" );
1073 m_text->AppendText( "Choice control client data string is: '" );
1074 obj = (wxStringClientData *)choice->GetClientObject(choice->GetSelection());
6e47faf1
JS
1075
1076 if (obj)
1077 m_text->AppendText( obj->GetData() );
1078 else
1079 m_text->AppendText( wxString("none") );
6c8a980f 1080 m_text->AppendText( "'\n" );
47908e25
RR
1081}
1082
1083void MyPanel::OnChoiceButtons( wxCommandEvent &event )
1084{
ec9f7884 1085 switch (event.GetId())
47908e25 1086 {
ec9f7884
VZ
1087 case ID_CHOICE_ENABLE:
1088 {
1089 m_choice->Enable( event.GetInt() == 0 );
b56c2246 1090 m_choiceSorted->Enable( event.GetInt() == 0 );
ec9f7884
VZ
1091 break;
1092 }
1093 case ID_CHOICE_SEL_NUM:
1094 {
1095 m_choice->SetSelection( 2 );
b56c2246 1096 m_choiceSorted->SetSelection( 2 );
ec9f7884
VZ
1097 break;
1098 }
1099 case ID_CHOICE_SEL_STR:
1100 {
1101 m_choice->SetStringSelection( "This" );
b56c2246 1102 m_choiceSorted->SetStringSelection( "This" );
ec9f7884
VZ
1103 break;
1104 }
1105 case ID_CHOICE_CLEAR:
1106 {
1107 m_choice->Clear();
b56c2246 1108 m_choiceSorted->Clear();
ec9f7884
VZ
1109 break;
1110 }
1111 case ID_CHOICE_APPEND:
1112 {
1113 m_choice->Append( "Hi!" );
b56c2246 1114 m_choiceSorted->Append( "Hi!" );
ec9f7884
VZ
1115 break;
1116 }
1117 case ID_CHOICE_DELETE:
1118 {
1119 int idx = m_choice->GetSelection();
f6bcfd97
BP
1120 if ( idx != wxNOT_FOUND )
1121 m_choice->Delete( idx );
b56c2246 1122 idx = m_choiceSorted->GetSelection();
f6bcfd97
BP
1123 if ( idx != wxNOT_FOUND )
1124 m_choiceSorted->Delete( idx );
ec9f7884
VZ
1125 break;
1126 }
1127 case ID_CHOICE_FONT:
1128 {
1129 m_choice->SetFont( *wxITALIC_FONT );
b56c2246 1130 m_choiceSorted->SetFont( *wxITALIC_FONT );
ec9f7884
VZ
1131 break;
1132 }
868a2826 1133 }
47908e25 1134}
1ccd23f5 1135#endif // wxUSE_CHOICE
47908e25
RR
1136
1137void MyPanel::OnCombo( wxCommandEvent &event )
1138{
19da4326 1139 m_text->AppendText( "ComboBox event selection string is: " );
ec9f7884
VZ
1140 m_text->AppendText( event.GetString() );
1141 m_text->AppendText( "\n" );
19da4326
RR
1142 m_text->AppendText( "ComboBox control selection string is: " );
1143 m_text->AppendText( m_combo->GetStringSelection() );
1144 m_text->AppendText( "\n" );
47908e25
RR
1145}
1146
27ff87da 1147void MyPanel::OnComboTextChanged(wxCommandEvent& event)
f6bcfd97 1148{
27ff87da
RR
1149 wxString str;
1150 str.Printf( wxT("Text in the combobox changed: now is '%s'."),
1151 event.GetString().c_str() );
1152 wxLogMessage( str.c_str() );
f6bcfd97
BP
1153}
1154
1155void MyPanel::OnComboTextEnter(wxCommandEvent& WXUNUSED(event))
1156{
1157 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1158 m_combo->GetValue().c_str());
1159}
1160
47908e25 1161void MyPanel::OnComboButtons( wxCommandEvent &event )
1c005ff7 1162{
ec9f7884 1163 switch (event.GetId())
2f6407b9 1164 {
ec9f7884
VZ
1165 case ID_COMBO_ENABLE:
1166 {
1167 m_combo->Enable( event.GetInt() == 0 );
1168 break;
1169 }
1170 case ID_COMBO_SEL_NUM:
1171 {
1172 m_combo->SetSelection( 2 );
1173 break;
1174 }
1175 case ID_COMBO_SEL_STR:
1176 {
1177 m_combo->SetStringSelection( "This" );
1178 break;
1179 }
1180 case ID_COMBO_CLEAR:
1181 {
1182 m_combo->Clear();
1183 break;
1184 }
1185 case ID_COMBO_APPEND:
1186 {
1187 m_combo->Append( "Hi!" );
1188 break;
1189 }
1190 case ID_COMBO_DELETE:
1191 {
1192 int idx = m_combo->GetSelection();
1193 m_combo->Delete( idx );
1194 break;
1195 }
1196 case ID_COMBO_FONT:
1197 {
1198 m_combo->SetFont( *wxITALIC_FONT );
1199 break;
1200 }
868a2826 1201 }
47908e25
RR
1202}
1203
1204void MyPanel::OnRadio( wxCommandEvent &event )
1205{
ec9f7884
VZ
1206 m_text->AppendText( "RadioBox selection string is: " );
1207 m_text->AppendText( event.GetString() );
1208 m_text->AppendText( "\n" );
47908e25
RR
1209}
1210
1211void MyPanel::OnRadioButtons( wxCommandEvent &event )
1212{
ec9f7884 1213 switch (event.GetId())
d3904ceb 1214 {
ec9f7884
VZ
1215 case ID_RADIOBOX_ENABLE:
1216 {
1217 m_radio->Enable( event.GetInt() == 0 );
1218 break;
1219 }
1220 case ID_RADIOBOX_SEL_NUM:
1221 {
1222 m_radio->SetSelection( 2 );
1223 break;
1224 }
1225 case ID_RADIOBOX_SEL_STR:
1226 {
1227 m_radio->SetStringSelection( "This" );
1228 break;
1229 }
1230 case ID_RADIOBOX_FONT:
1231 {
8b1d8f36
VZ
1232 m_radio->SetForegroundColour(*wxGREEN);
1233
ec9f7884
VZ
1234 m_radio->SetFont( *wxITALIC_FONT );
1235 break;
1236 }
868a2826 1237 }
1c005ff7
RR
1238}
1239
868a2826
RR
1240void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
1241{
ec9f7884
VZ
1242 m_fontButton->SetFont( *wxITALIC_FONT );
1243 m_text->SetFont( *wxITALIC_FONT );
868a2826
RR
1244}
1245
1db8dc4a 1246void MyPanel::OnUpdateLabel( wxCommandEvent &event )
185fa6bf 1247{
1db8dc4a
VZ
1248 m_label->SetLabel(event.GetInt() ? "Very very very very very long text."
1249 : "Shorter text.");
185fa6bf
VZ
1250}
1251
7bce6aec
RR
1252void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
1253{
ec9f7884 1254 m_gauge->SetValue( m_slider->GetValue() );
37ed3ae3 1255 m_gaugeVert->SetValue( m_slider->GetValue() / 2 );
7bce6aec
RR
1256}
1257
baccb514
VZ
1258#if wxUSE_SPINCTRL
1259
76106901
VZ
1260void MyPanel::OnSpinCtrlText(wxCommandEvent& event)
1261{
1262 if ( m_spinctrl )
1263 {
1264 wxString s;
508d586e
MB
1265 s.Printf( _T("Spin ctrl text changed: now %d (from event: %s)\n"),
1266 m_spinctrl->GetValue(), event.GetString().c_str() );
76106901
VZ
1267 m_text->AppendText(s);
1268 }
1269}
1270
457e6c54 1271void MyPanel::OnSpinCtrl(wxSpinEvent& event)
baccb514 1272{
76106901
VZ
1273 if ( m_spinctrl )
1274 {
1275 wxString s;
508d586e
MB
1276 s.Printf( _T("Spin ctrl changed: now %d (from event: %ld)\n"),
1277 m_spinctrl->GetValue(), event.GetInt() );
76106901
VZ
1278 m_text->AppendText(s);
1279 }
1280}
1281
1282void MyPanel::OnSpinCtrlUp(wxSpinEvent& event)
1283{
1284 if ( m_spinctrl )
1285 {
508d586e
MB
1286 m_text->AppendText( wxString::Format(
1287 _T("Spin up: %d (from event: %ld)\n"),
1288 m_spinctrl->GetValue(), event.GetInt() ) );
76106901
VZ
1289 }
1290}
1291
1292void MyPanel::OnSpinCtrlDown(wxSpinEvent& event)
1293{
1294 if ( m_spinctrl )
1295 {
508d586e
MB
1296 m_text->AppendText( wxString::Format(
1297 _T("Spin down: %d (from event: %ld)\n"),
1298 m_spinctrl->GetValue(), event.GetInt() ) );
76106901 1299 }
baccb514
VZ
1300}
1301
1302#endif // wxUSE_SPINCTRL
1303
0e528b99 1304#if wxUSE_SPINBTN
8c3c31d4
VZ
1305void MyPanel::OnSpinUp( wxSpinEvent &event )
1306{
1307 wxString value;
1308 value.Printf( _T("Spin control up: current = %d\n"),
1309 m_spinbutton->GetValue());
1310
e94ff4cb 1311 if ( event.GetPosition() > 17 )
8c3c31d4
VZ
1312 {
1313 value += _T("Preventing the spin button from going above 17.\n");
1314
1315 event.Veto();
1316 }
1317
1318 m_text->AppendText(value);
1319}
1320
1321void MyPanel::OnSpinDown( wxSpinEvent &event )
1322{
1323 wxString value;
1324 value.Printf( _T("Spin control down: current = %d\n"),
1325 m_spinbutton->GetValue());
1326
e94ff4cb 1327 if ( event.GetPosition() < -17 )
8c3c31d4
VZ
1328 {
1329 value += _T("Preventing the spin button from going below -17.\n");
1330
1331 event.Veto();
1332 }
1333
1334 m_text->AppendText(value);
1335}
1336
e380f72b
RR
1337void MyPanel::OnSpinUpdate( wxSpinEvent &event )
1338{
ec9f7884 1339 wxString value;
f70d5829 1340 value.Printf( _T("%d"), event.GetPosition() );
ec9f7884 1341 m_spintext->SetValue( value );
6380910c 1342
f70d5829 1343 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
6380910c
VZ
1344 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
1345 m_spinbutton->GetValue());
1346
1347 m_text->AppendText(value);
e380f72b 1348}
9726da4f
VZ
1349
1350void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
1351{
1352 event.Enable( m_spinbutton->GetValue() > 0 );
1353}
1354
1355void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
1356{
1357 int max = m_spinbutton->GetValue();
601964ff
VS
1358
1359 if ( max <= 0 )
1360 {
1361 wxLogError(_T("You must set positive range!"));
1362 return;
1363 }
1364
9726da4f
VZ
1365 wxProgressDialog dialog("Progress dialog example",
1366 "An informative message",
1367 max, // range
1368 this, // parent
8c3c31d4 1369 wxPD_CAN_ABORT |
2c8e4738 1370 wxPD_AUTO_HIDE |
8c3c31d4
VZ
1371 wxPD_APP_MODAL |
1372 wxPD_ELAPSED_TIME |
1373 wxPD_ESTIMATED_TIME |
1374 wxPD_REMAINING_TIME);
2ac1b69a 1375
9726da4f
VZ
1376
1377 bool cont = TRUE;
abceee76 1378 for ( int i = 0; i <= max && cont; i++ )
9726da4f
VZ
1379 {
1380 wxSleep(1);
abceee76 1381 if ( i == max )
be9abe3f
VZ
1382 {
1383 cont = dialog.Update(i, "That's all, folks!");
1384 }
1385 else if ( i == max / 2 )
9726da4f 1386 {
abceee76 1387 cont = dialog.Update(i, "Only a half left (very long message)!");
9726da4f
VZ
1388 }
1389 else
1390 {
1391 cont = dialog.Update(i);
1392 }
1393 }
1394
1395 if ( !cont )
1396 {
1397 *m_text << "Progress dialog aborted!\n";
1398 }
1399 else
1400 {
1401 *m_text << "Countdown from " << max << " finished.\n";
1402 }
1403}
1404
0e528b99 1405#endif // wxUSE_SPINBTN
e380f72b 1406
2cb21a45
VZ
1407MyPanel::~MyPanel()
1408{
29e7e51a
VZ
1409 //wxLog::RemoveTraceMask(_T("focus"));
1410 delete wxLog::SetActiveTarget(m_logTargetOld);
1411
ec9f7884 1412 delete m_notebook->GetImageList();
2cb21a45
VZ
1413}
1414
1c005ff7
RR
1415//----------------------------------------------------------------------
1416// MyFrame
1417//----------------------------------------------------------------------
1418
1419BEGIN_EVENT_TABLE(MyFrame, wxFrame)
3e2dd3db
VZ
1420 EVT_MENU(CONTROLS_QUIT, MyFrame::OnQuit)
1421 EVT_MENU(CONTROLS_ABOUT, MyFrame::OnAbout)
1422 EVT_MENU(CONTROLS_CLEAR_LOG, MyFrame::OnClearLog)
16f6dfd8 1423#if wxUSE_TOOLTIPS
3e2dd3db
VZ
1424 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
1425 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
16f6dfd8 1426#endif // wxUSE_TOOLTIPS
87a1e308 1427
3e2dd3db 1428 EVT_MENU(CONTROLS_ENABLE_ALL, MyFrame::OnEnableAll)
87a1e308
VZ
1429
1430 EVT_SIZE(MyFrame::OnSize)
97206645
VZ
1431 EVT_MOVE(MyFrame::OnMove)
1432
87a1e308 1433 EVT_IDLE(MyFrame::OnIdle)
1c005ff7
RR
1434END_EVENT_TABLE()
1435
7bfc22f6
VZ
1436MyFrame::MyFrame(const char *title, int x, int y)
1437 : wxFrame(NULL, -1, title, wxPoint(x, y), wxSize(500, 430))
1c005ff7 1438{
7bfc22f6
VZ
1439 // Give it an icon
1440 // The wxICON() macros loads an icon from a resource under Windows
1441 // and uses an #included XPM image under GTK+ and Motif
1442
1443 SetIcon( wxICON(mondrian) );
1444
1445 wxMenu *file_menu = new wxMenu;
1446
1447 file_menu->Append(CONTROLS_CLEAR_LOG, "&Clear log\tCtrl-L");
1448 file_menu->AppendSeparator();
1449 file_menu->Append(CONTROLS_ABOUT, "&About\tF1");
1450 file_menu->AppendSeparator();
1451 file_menu->Append(CONTROLS_QUIT, "E&xit\tAlt-X", "Quit controls sample");
1452
1453 wxMenuBar *menu_bar = new wxMenuBar;
1454 menu_bar->Append(file_menu, "&File");
1455
1456#if wxUSE_TOOLTIPS
1457 wxMenu *tooltip_menu = new wxMenu;
1458 tooltip_menu->Append(CONTROLS_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
1459 tooltip_menu->AppendSeparator();
1460 tooltip_menu->Append(CONTROLS_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T",
1461 "enable/disable tooltips", TRUE);
1462 tooltip_menu->Check(CONTROLS_ENABLE_TOOLTIPS, TRUE);
1463 menu_bar->Append(tooltip_menu, "&Tooltips");
1464#endif // wxUSE_TOOLTIPS
1465
1466 wxMenu *panel_menu = new wxMenu;
1467 panel_menu->Append(CONTROLS_ENABLE_ALL, "&Disable all\tCtrl-E",
1468 "Enable/disable all panel controls", TRUE);
1469 menu_bar->Append(panel_menu, "&Panel");
1470
1471 SetMenuBar(menu_bar);
1472
5fb9fcfc 1473 CreateStatusBar(2);
9f3362c4 1474
87a1e308 1475 m_panel = new MyPanel( this, 10, 10, 300, 100 );
7bfc22f6
VZ
1476
1477 SetSizeHints( 500, 425 );
1c005ff7
RR
1478}
1479
1480void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
1481{
ec9f7884 1482 Close(TRUE);
1c005ff7
RR
1483}
1484
1485void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
1486{
abceee76
VZ
1487 wxBusyCursor bc;
1488
ec9f7884
VZ
1489 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
1490 dialog.ShowModal();
1c005ff7 1491}
9f3362c4 1492
3e2dd3db
VZ
1493void MyFrame::OnClearLog(wxCommandEvent& WXUNUSED(event))
1494{
1495 m_panel->m_text->Clear();
1496}
1497
16f6dfd8
VZ
1498#if wxUSE_TOOLTIPS
1499void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
1500{
1501 static long s_delay = 5000;
1502
1503 wxString delay;
f70d5829 1504 delay.Printf( _T("%ld"), s_delay);
16f6dfd8
VZ
1505
1506 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
ec9f7884
VZ
1507 "Set tooltip delay",
1508 delay,
1509 this);
16f6dfd8
VZ
1510 if ( !delay )
1511 return; // cancelled
1512
f70d5829 1513 wxSscanf(delay, _T("%ld"), &s_delay);
16f6dfd8
VZ
1514
1515 wxToolTip::SetDelay(s_delay);
1516
f70d5829 1517 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
16f6dfd8
VZ
1518}
1519
1520void MyFrame::OnToggleTooltips(wxCommandEvent& event)
1521{
1522 static bool s_enabled = TRUE;
1523
1524 s_enabled = !s_enabled;
1525
1526 wxToolTip::Enable(s_enabled);
1527
f70d5829 1528 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
16f6dfd8
VZ
1529}
1530#endif // tooltips
1531
87a1e308
VZ
1532void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event))
1533{
1534 static bool s_enable = TRUE;
1535
1536 s_enable = !s_enable;
1537 m_panel->Enable(s_enable);
1538}
1539
97206645
VZ
1540void MyFrame::OnMove( wxMoveEvent& event )
1541{
1542 UpdateStatusBar(event.GetPosition(), GetSize());
1543
1544 event.Skip();
1545}
1546
5fb9fcfc
VZ
1547void MyFrame::OnSize( wxSizeEvent& event )
1548{
97206645 1549 UpdateStatusBar(GetPosition(), event.GetSize());
5fb9fcfc
VZ
1550
1551 event.Skip();
1552}
1553
9f3362c4
VZ
1554void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
1555{
1556 // track the window which has the focus in the status bar
1557 static wxWindow *s_windowFocus = (wxWindow *)NULL;
1558 wxWindow *focus = wxWindow::FindFocus();
1559 if ( focus && (focus != s_windowFocus) )
1560 {
1561 s_windowFocus = focus;
1562
1563 wxString msg;
f70d5829 1564 msg.Printf(
9f3362c4 1565#ifdef __WXMSW__
29e7e51a 1566 _T("Focus: %s, HWND = %08x"),
f70d5829 1567#else
29e7e51a 1568 _T("Focus: %s"),
f70d5829 1569#endif
29e7e51a 1570 s_windowFocus->GetClassInfo()->GetClassName()
9f3362c4 1571#ifdef __WXMSW__
8b1d8f36 1572 , (unsigned int) s_windowFocus->GetHWND()
f70d5829 1573#endif
9f3362c4
VZ
1574 );
1575
1576 SetStatusText(msg);
1577 }
341c92a8 1578}
6c8a980f 1579
f6bcfd97
BP
1580void MyComboBox::OnChar(wxKeyEvent& event)
1581{
1582 wxLogMessage(_T("MyComboBox::OnChar"));
1583
1584 if ( event.KeyCode() == 'w' )
1585 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1586 else
1587 event.Skip();
1588}
1589
1590void MyComboBox::OnKeyDown(wxKeyEvent& event)
1591{
1592 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1593
1594 if ( event.KeyCode() == 'w' )
1595 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1596 else
1597 event.Skip();
1598}
1599
1600void MyComboBox::OnKeyUp(wxKeyEvent& event)
1601{
1602 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1603
1604 event.Skip();
1605}
1606
8b81a824
VS
1607static void SetListboxClientData(const wxChar *name, wxListBox *control)
1608{
1609 size_t count = control->GetCount();
1610 for ( size_t n = 0; n < count; n++ )
1611 {
1612 wxString s;
1613 s.Printf(wxT("%s client data for '%s'"),
1614 name, control->GetString(n).c_str());
1615
1616 control->SetClientObject(n, new wxStringClientData(s));
1617 }
1618}
1619
1620static void SetChoiceClientData(const wxChar *name, wxChoice *control)
6c8a980f
VZ
1621{
1622 size_t count = control->GetCount();
1623 for ( size_t n = 0; n < count; n++ )
1624 {
1625 wxString s;
4acb6ca6 1626 s.Printf(wxT("%s client data for '%s'"),
6c8a980f
VZ
1627 name, control->GetString(n).c_str());
1628
1629 control->SetClientObject(n, new wxStringClientData(s));
1630 }
1631}