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