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