]> git.saurik.com Git - wxWidgets.git/blame - samples/controls/controls.cpp
added
[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
ee6e1b1d 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
ee6e1b1d 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 );
ee6e1b1d 835 FindWindow(ID_CHANGE_COLOUR)->Enable( event.GetInt() == 0 );
ec9f7884
VZ
836 break;
837 }
838 case ID_LISTBOX_SEL_NUM:
839 {
840 m_listbox->SetSelection( 2 );
6c8a980f 841 m_listboxSorted->SetSelection( 2 );
8c3c31d4 842 m_lbSelectThis->WarpPointer( 40, 14 );
ec9f7884
VZ
843 break;
844 }
845 case ID_LISTBOX_SEL_STR:
846 {
847 m_listbox->SetStringSelection( "This" );
6c8a980f 848 m_listboxSorted->SetStringSelection( "This" );
8c3c31d4 849 m_lbSelectNum->WarpPointer( 40, 14 );
ec9f7884
VZ
850 break;
851 }
852 case ID_LISTBOX_CLEAR:
853 {
854 m_listbox->Clear();
6c8a980f 855 m_listboxSorted->Clear();
ec9f7884
VZ
856 break;
857 }
858 case ID_LISTBOX_APPEND:
859 {
860 m_listbox->Append( "Hi!" );
6c8a980f 861 m_listboxSorted->Append( "Hi!" );
ec9f7884
VZ
862 break;
863 }
864 case ID_LISTBOX_DELETE:
865 {
6c8a980f
VZ
866 int idx;
867 idx = m_listbox->GetSelection();
ec9f7884 868 m_listbox->Delete( idx );
6c8a980f
VZ
869 idx = m_listboxSorted->GetSelection();
870 m_listboxSorted->Delete( idx );
ec9f7884
VZ
871 break;
872 }
873 case ID_LISTBOX_FONT:
874 {
875 m_listbox->SetFont( *wxITALIC_FONT );
6c8a980f 876 m_listboxSorted->SetFont( *wxITALIC_FONT );
ec9f7884
VZ
877 m_checkbox->SetFont( *wxITALIC_FONT );
878 break;
879 }
868a2826 880 }
47908e25
RR
881}
882
883void MyPanel::OnChoice( wxCommandEvent &event )
884{
6c8a980f
VZ
885 wxChoice *choice = event.GetId() == ID_CHOICE ? m_choice
886 : m_choiceSorted;
887
888 m_text->AppendText( "Choice event selection string is: '" );
ec9f7884 889 m_text->AppendText( event.GetString() );
6c8a980f 890 m_text->AppendText( "'\n" );
b56c2246 891 m_text->AppendText( "Choice control selection string is: '" );
6c8a980f
VZ
892 m_text->AppendText( choice->GetStringSelection() );
893 m_text->AppendText( "'\n" );
894
895 wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject());
896 m_text->AppendText( "Choice event client data string is: '" );
6e47faf1
JS
897
898 if (obj)
899 m_text->AppendText( obj->GetData() );
900 else
901 m_text->AppendText( wxString("none") );
902
6c8a980f
VZ
903 m_text->AppendText( "'\n" );
904 m_text->AppendText( "Choice control client data string is: '" );
905 obj = (wxStringClientData *)choice->GetClientObject(choice->GetSelection());
6e47faf1
JS
906
907 if (obj)
908 m_text->AppendText( obj->GetData() );
909 else
910 m_text->AppendText( wxString("none") );
6c8a980f 911 m_text->AppendText( "'\n" );
47908e25
RR
912}
913
914void MyPanel::OnChoiceButtons( wxCommandEvent &event )
915{
ec9f7884 916 switch (event.GetId())
47908e25 917 {
ec9f7884
VZ
918 case ID_CHOICE_ENABLE:
919 {
920 m_choice->Enable( event.GetInt() == 0 );
b56c2246 921 m_choiceSorted->Enable( event.GetInt() == 0 );
ec9f7884
VZ
922 break;
923 }
924 case ID_CHOICE_SEL_NUM:
925 {
926 m_choice->SetSelection( 2 );
b56c2246 927 m_choiceSorted->SetSelection( 2 );
ec9f7884
VZ
928 break;
929 }
930 case ID_CHOICE_SEL_STR:
931 {
932 m_choice->SetStringSelection( "This" );
b56c2246 933 m_choiceSorted->SetStringSelection( "This" );
ec9f7884
VZ
934 break;
935 }
936 case ID_CHOICE_CLEAR:
937 {
938 m_choice->Clear();
b56c2246 939 m_choiceSorted->Clear();
ec9f7884
VZ
940 break;
941 }
942 case ID_CHOICE_APPEND:
943 {
944 m_choice->Append( "Hi!" );
b56c2246 945 m_choiceSorted->Append( "Hi!" );
ec9f7884
VZ
946 break;
947 }
948 case ID_CHOICE_DELETE:
949 {
950 int idx = m_choice->GetSelection();
951 m_choice->Delete( idx );
b56c2246
VZ
952 idx = m_choiceSorted->GetSelection();
953 m_choiceSorted->Delete( idx );
ec9f7884
VZ
954 break;
955 }
956 case ID_CHOICE_FONT:
957 {
958 m_choice->SetFont( *wxITALIC_FONT );
b56c2246 959 m_choiceSorted->SetFont( *wxITALIC_FONT );
ec9f7884
VZ
960 break;
961 }
868a2826 962 }
47908e25
RR
963}
964
965void MyPanel::OnCombo( wxCommandEvent &event )
966{
19da4326 967 m_text->AppendText( "ComboBox event selection string is: " );
ec9f7884
VZ
968 m_text->AppendText( event.GetString() );
969 m_text->AppendText( "\n" );
19da4326
RR
970 m_text->AppendText( "ComboBox control selection string is: " );
971 m_text->AppendText( m_combo->GetStringSelection() );
972 m_text->AppendText( "\n" );
47908e25
RR
973}
974
975void MyPanel::OnComboButtons( wxCommandEvent &event )
1c005ff7 976{
ec9f7884 977 switch (event.GetId())
2f6407b9 978 {
ec9f7884
VZ
979 case ID_COMBO_ENABLE:
980 {
981 m_combo->Enable( event.GetInt() == 0 );
982 break;
983 }
984 case ID_COMBO_SEL_NUM:
985 {
986 m_combo->SetSelection( 2 );
987 break;
988 }
989 case ID_COMBO_SEL_STR:
990 {
991 m_combo->SetStringSelection( "This" );
992 break;
993 }
994 case ID_COMBO_CLEAR:
995 {
996 m_combo->Clear();
997 break;
998 }
999 case ID_COMBO_APPEND:
1000 {
1001 m_combo->Append( "Hi!" );
1002 break;
1003 }
1004 case ID_COMBO_DELETE:
1005 {
1006 int idx = m_combo->GetSelection();
1007 m_combo->Delete( idx );
1008 break;
1009 }
1010 case ID_COMBO_FONT:
1011 {
1012 m_combo->SetFont( *wxITALIC_FONT );
1013 break;
1014 }
868a2826 1015 }
47908e25
RR
1016}
1017
1018void MyPanel::OnRadio( wxCommandEvent &event )
1019{
ec9f7884
VZ
1020 m_text->AppendText( "RadioBox selection string is: " );
1021 m_text->AppendText( event.GetString() );
1022 m_text->AppendText( "\n" );
47908e25
RR
1023}
1024
1025void MyPanel::OnRadioButtons( wxCommandEvent &event )
1026{
ec9f7884 1027 switch (event.GetId())
d3904ceb 1028 {
ec9f7884
VZ
1029 case ID_RADIOBOX_ENABLE:
1030 {
1031 m_radio->Enable( event.GetInt() == 0 );
1032 break;
1033 }
1034 case ID_RADIOBOX_SEL_NUM:
1035 {
1036 m_radio->SetSelection( 2 );
1037 break;
1038 }
1039 case ID_RADIOBOX_SEL_STR:
1040 {
1041 m_radio->SetStringSelection( "This" );
1042 break;
1043 }
1044 case ID_RADIOBOX_FONT:
1045 {
1046 m_radio->SetFont( *wxITALIC_FONT );
1047 break;
1048 }
868a2826 1049 }
1c005ff7
RR
1050}
1051
868a2826
RR
1052void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
1053{
ec9f7884
VZ
1054 m_fontButton->SetFont( *wxITALIC_FONT );
1055 m_text->SetFont( *wxITALIC_FONT );
868a2826
RR
1056}
1057
185fa6bf
VZ
1058void MyPanel::OnUpdateLabel( wxCommandEvent &WXUNUSED(event) )
1059{
1060 static bool s_long = TRUE;
1061
1062 s_long = !s_long;
1063 m_label->SetLabel(s_long ? "very very very long text" : "shorter text");
1064}
1065
7bce6aec
RR
1066void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
1067{
ec9f7884 1068 m_gauge->SetValue( m_slider->GetValue() );
7bce6aec
RR
1069}
1070
baccb514
VZ
1071#if wxUSE_SPINCTRL
1072
457e6c54 1073void MyPanel::OnSpinCtrl(wxSpinEvent& event)
baccb514
VZ
1074{
1075 wxString s;
57160afe
VZ
1076 s.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1077 m_spinctrl->GetValue(), event.GetInt());
baccb514
VZ
1078 m_text->AppendText(s);
1079}
1080
1081#endif // wxUSE_SPINCTRL
1082
0e528b99 1083#if wxUSE_SPINBTN
8c3c31d4
VZ
1084void MyPanel::OnSpinUp( wxSpinEvent &event )
1085{
1086 wxString value;
1087 value.Printf( _T("Spin control up: current = %d\n"),
1088 m_spinbutton->GetValue());
1089
1090 if ( m_spinbutton->GetValue() > 17 )
1091 {
1092 value += _T("Preventing the spin button from going above 17.\n");
1093
1094 event.Veto();
1095 }
1096
1097 m_text->AppendText(value);
1098}
1099
1100void MyPanel::OnSpinDown( wxSpinEvent &event )
1101{
1102 wxString value;
1103 value.Printf( _T("Spin control down: current = %d\n"),
1104 m_spinbutton->GetValue());
1105
1106 if ( m_spinbutton->GetValue() < -17 )
1107 {
1108 value += _T("Preventing the spin button from going below -17.\n");
1109
1110 event.Veto();
1111 }
1112
1113 m_text->AppendText(value);
1114}
1115
e380f72b
RR
1116void MyPanel::OnSpinUpdate( wxSpinEvent &event )
1117{
ec9f7884 1118 wxString value;
f70d5829 1119 value.Printf( _T("%d"), event.GetPosition() );
ec9f7884 1120 m_spintext->SetValue( value );
6380910c 1121
f70d5829 1122 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
6380910c
VZ
1123 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
1124 m_spinbutton->GetValue());
1125
1126 m_text->AppendText(value);
e380f72b 1127}
9726da4f
VZ
1128
1129void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
1130{
1131 event.Enable( m_spinbutton->GetValue() > 0 );
1132}
1133
1134void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
1135{
1136 int max = m_spinbutton->GetValue();
1137 wxProgressDialog dialog("Progress dialog example",
1138 "An informative message",
1139 max, // range
1140 this, // parent
8c3c31d4
VZ
1141 wxPD_CAN_ABORT |
1142 wxPD_APP_MODAL |
1143 wxPD_ELAPSED_TIME |
1144 wxPD_ESTIMATED_TIME |
1145 wxPD_REMAINING_TIME);
2ac1b69a 1146
9726da4f
VZ
1147
1148 bool cont = TRUE;
1149 for ( int i = 0; i < max && cont; i++ )
1150 {
1151 wxSleep(1);
be9abe3f
VZ
1152 if ( i == max - 1 )
1153 {
1154 cont = dialog.Update(i, "That's all, folks!");
1155 }
1156 else if ( i == max / 2 )
9726da4f
VZ
1157 {
1158 cont = dialog.Update(i, "Only a half left!");
1159 }
1160 else
1161 {
1162 cont = dialog.Update(i);
1163 }
1164 }
1165
1166 if ( !cont )
1167 {
1168 *m_text << "Progress dialog aborted!\n";
1169 }
1170 else
1171 {
1172 *m_text << "Countdown from " << max << " finished.\n";
1173 }
1174}
1175
0e528b99 1176#endif // wxUSE_SPINBTN
e380f72b 1177
2cb21a45
VZ
1178MyPanel::~MyPanel()
1179{
29e7e51a
VZ
1180 //wxLog::RemoveTraceMask(_T("focus"));
1181 delete wxLog::SetActiveTarget(m_logTargetOld);
1182
ec9f7884 1183 delete m_notebook->GetImageList();
2cb21a45
VZ
1184}
1185
1c005ff7
RR
1186//----------------------------------------------------------------------
1187// MyFrame
1188//----------------------------------------------------------------------
1189
1190BEGIN_EVENT_TABLE(MyFrame, wxFrame)
3e2dd3db
VZ
1191 EVT_MENU(CONTROLS_QUIT, MyFrame::OnQuit)
1192 EVT_MENU(CONTROLS_ABOUT, MyFrame::OnAbout)
1193 EVT_MENU(CONTROLS_CLEAR_LOG, MyFrame::OnClearLog)
16f6dfd8 1194#if wxUSE_TOOLTIPS
3e2dd3db
VZ
1195 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
1196 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
16f6dfd8 1197#endif // wxUSE_TOOLTIPS
87a1e308 1198
3e2dd3db 1199 EVT_MENU(CONTROLS_ENABLE_ALL, MyFrame::OnEnableAll)
87a1e308
VZ
1200
1201 EVT_SIZE(MyFrame::OnSize)
97206645
VZ
1202 EVT_MOVE(MyFrame::OnMove)
1203
87a1e308 1204 EVT_IDLE(MyFrame::OnIdle)
1c005ff7
RR
1205END_EVENT_TABLE()
1206
9f3362c4 1207MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
ec9f7884 1208: wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
1c005ff7 1209{
5fb9fcfc 1210 CreateStatusBar(2);
9f3362c4 1211
87a1e308 1212 m_panel = new MyPanel( this, 10, 10, 300, 100 );
1c005ff7
RR
1213}
1214
1215void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
1216{
ec9f7884 1217 Close(TRUE);
1c005ff7
RR
1218}
1219
1220void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
1221{
ec9f7884
VZ
1222 wxBeginBusyCursor();
1223
1224 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
1225 dialog.ShowModal();
1226
1227 wxEndBusyCursor();
1c005ff7 1228}
9f3362c4 1229
3e2dd3db
VZ
1230void MyFrame::OnClearLog(wxCommandEvent& WXUNUSED(event))
1231{
1232 m_panel->m_text->Clear();
1233}
1234
16f6dfd8
VZ
1235#if wxUSE_TOOLTIPS
1236void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
1237{
1238 static long s_delay = 5000;
1239
1240 wxString delay;
f70d5829 1241 delay.Printf( _T("%ld"), s_delay);
16f6dfd8
VZ
1242
1243 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
ec9f7884
VZ
1244 "Set tooltip delay",
1245 delay,
1246 this);
16f6dfd8
VZ
1247 if ( !delay )
1248 return; // cancelled
1249
f70d5829 1250 wxSscanf(delay, _T("%ld"), &s_delay);
16f6dfd8
VZ
1251
1252 wxToolTip::SetDelay(s_delay);
1253
f70d5829 1254 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
16f6dfd8
VZ
1255}
1256
1257void MyFrame::OnToggleTooltips(wxCommandEvent& event)
1258{
1259 static bool s_enabled = TRUE;
1260
1261 s_enabled = !s_enabled;
1262
1263 wxToolTip::Enable(s_enabled);
1264
f70d5829 1265 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
16f6dfd8
VZ
1266}
1267#endif // tooltips
1268
87a1e308
VZ
1269void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event))
1270{
1271 static bool s_enable = TRUE;
1272
1273 s_enable = !s_enable;
1274 m_panel->Enable(s_enable);
1275}
1276
97206645
VZ
1277void MyFrame::OnMove( wxMoveEvent& event )
1278{
1279 UpdateStatusBar(event.GetPosition(), GetSize());
1280
1281 event.Skip();
1282}
1283
5fb9fcfc
VZ
1284void MyFrame::OnSize( wxSizeEvent& event )
1285{
97206645 1286 UpdateStatusBar(GetPosition(), event.GetSize());
5fb9fcfc
VZ
1287
1288 event.Skip();
1289}
1290
9f3362c4
VZ
1291void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
1292{
1293 // track the window which has the focus in the status bar
1294 static wxWindow *s_windowFocus = (wxWindow *)NULL;
1295 wxWindow *focus = wxWindow::FindFocus();
1296 if ( focus && (focus != s_windowFocus) )
1297 {
1298 s_windowFocus = focus;
1299
1300 wxString msg;
f70d5829 1301 msg.Printf(
9f3362c4 1302#ifdef __WXMSW__
29e7e51a 1303 _T("Focus: %s, HWND = %08x"),
f70d5829 1304#else
29e7e51a 1305 _T("Focus: %s"),
f70d5829 1306#endif
29e7e51a 1307 s_windowFocus->GetClassInfo()->GetClassName()
9f3362c4 1308#ifdef __WXMSW__
ec9f7884 1309 , s_windowFocus->GetHWND()
f70d5829 1310#endif
9f3362c4
VZ
1311 );
1312
1313 SetStatusText(msg);
1314 }
341c92a8 1315}
6c8a980f
VZ
1316
1317static void SetControlClientData(const char *name,
1318 wxControlWithItems *control)
1319{
1320 size_t count = control->GetCount();
1321 for ( size_t n = 0; n < count; n++ )
1322 {
1323 wxString s;
1324 s.Printf("%s client data for '%s'",
1325 name, control->GetString(n).c_str());
1326
1327 control->SetClientObject(n, new wxStringClientData(s));
1328 }
1329}