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