]> git.saurik.com Git - wxWidgets.git/blame - samples/controls/controls.cpp
tiny fixes
[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
52 #undef wxUSE_SPINBUTTON
53 #define wxUSE_SPINBUTTON 0
54#endif // __WIN16__
55
56#include "wx/progdlg.h"
57
1c005ff7
RR
58//----------------------------------------------------------------------
59// class definitions
60//----------------------------------------------------------------------
61
62class MyApp: public wxApp
655822f3 63{
b8653fbf
VZ
64public:
65 bool OnInit();
1c005ff7
RR
66};
67
68class MyPanel: public wxPanel
69{
b8653fbf 70public:
1c005ff7 71 MyPanel(wxFrame *frame, int x, int y, int w, int h);
2cb21a45 72 virtual ~MyPanel();
16f6dfd8 73
1c005ff7
RR
74 void OnSize( wxSizeEvent& event );
75 void OnListBox( wxCommandEvent &event );
5b077d48 76 void OnListBoxDoubleClick( wxCommandEvent &event );
1c005ff7 77 void OnListBoxButtons( wxCommandEvent &event );
47908e25
RR
78 void OnChoice( wxCommandEvent &event );
79 void OnChoiceButtons( wxCommandEvent &event );
80 void OnCombo( wxCommandEvent &event );
81 void OnComboButtons( wxCommandEvent &event );
82 void OnRadio( wxCommandEvent &event );
83 void OnRadioButtons( wxCommandEvent &event );
868a2826 84 void OnSetFont( wxCommandEvent &event );
cb43b372 85 void OnPageChanged( wxNotebookEvent &event );
4d0f3cd6 86 void OnPageChanging( wxNotebookEvent &event );
7bce6aec 87 void OnSliderUpdate( wxCommandEvent &event );
9726da4f 88#ifndef wxUSE_SPINBUTTON
8c3c31d4
VZ
89 void OnSpinUp( wxSpinEvent &event );
90 void OnSpinDown( wxSpinEvent &event );
e380f72b 91 void OnSpinUpdate( wxSpinEvent &event );
9726da4f
VZ
92 void OnUpdateShowProgress( wxUpdateUIEvent& event );
93 void OnShowProgress( wxCommandEvent &event );
94#endif // wxUSE_SPINBUTTON
16f6dfd8 95
e380f72b
RR
96 wxListBox *m_listbox;
97 wxChoice *m_choice;
98 wxComboBox *m_combo;
99 wxRadioBox *m_radio;
100 wxGauge *m_gauge;
101 wxSlider *m_slider;
102 wxButton *m_fontButton;
85eb36c2
RR
103 wxButton *m_lbSelectNum;
104 wxButton *m_lbSelectThis;
9726da4f 105#ifndef wxUSE_SPINBUTTON
e380f72b 106 wxSpinButton *m_spinbutton;
9726da4f 107 wxButton *m_btnProgress;
2a47d3c1 108#endif
e380f72b 109 wxTextCtrl *m_spintext;
ae0bdb01 110 wxCheckBox *m_checkbox;
16f6dfd8 111
e380f72b 112 wxTextCtrl *m_text;
655822f3
VZ
113 wxNotebook *m_notebook;
114
b8653fbf
VZ
115private:
116 DECLARE_EVENT_TABLE()
1c005ff7
RR
117};
118
119class MyFrame: public wxFrame
120{
b8653fbf 121public:
1c005ff7 122 MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
655822f3 123
1c005ff7
RR
124 void OnQuit(wxCommandEvent& event);
125 void OnAbout(wxCommandEvent& event);
16f6dfd8
VZ
126#if wxUSE_TOOLTIPS
127 void OnSetTooltipDelay(wxCommandEvent& event);
128 void OnToggleTooltips(wxCommandEvent& event);
129#endif // wxUSE_TOOLTIPS
9f3362c4 130 void OnIdle( wxIdleEvent& event );
5fb9fcfc 131 void OnSize( wxSizeEvent& event );
655822f3 132
b8653fbf
VZ
133private:
134 DECLARE_EVENT_TABLE()
1c005ff7
RR
135};
136
137//----------------------------------------------------------------------
138// main()
139//----------------------------------------------------------------------
140
d59051dd 141IMPLEMENT_APP(MyApp)
1c005ff7
RR
142
143//----------------------------------------------------------------------
144// MyApp
145//----------------------------------------------------------------------
146
16f6dfd8
VZ
147enum
148{
149 MINIMAL_QUIT = 100,
150 MINIMAL_TEXT,
151 MINIMAL_ABOUT,
152
153 // tooltip menu
154 MINIMAL_SET_TOOLTIP_DELAY = 200,
155 MINIMAL_ENABLE_TOOLTIPS
156};
1c005ff7 157
b8653fbf 158bool MyApp::OnInit()
1c005ff7 159{
ec9f7884
VZ
160 // Create the main frame window
161 MyFrame *frame = new MyFrame((wxFrame *) NULL,
162 "Controls wxWindows App",
163 50, 50, 530, 420);
655822f3 164
ec9f7884
VZ
165 // Give it an icon
166 // The wxICON() macros loads an icon from a resource under Windows
167 // and uses an #included XPM image under GTK+ and Motif
655822f3 168
ec9f7884 169 frame->SetIcon( wxICON(mondrian) );
1c005ff7 170
934e1eda 171 wxMenu *file_menu = new wxMenu("", wxMENU_TEAROFF );
6bc8a1c8
RR
172 file_menu->Append(MINIMAL_ABOUT, "&About\tF1");
173 file_menu->Append(MINIMAL_QUIT, "E&xit\tAlt-X", "Quit controls sample");
16f6dfd8 174
33caefb3 175 wxMenuBar *menu_bar = new wxMenuBar;
ec9f7884 176 menu_bar->Append(file_menu, "&File");
16f6dfd8
VZ
177
178#if wxUSE_TOOLTIPS
ec9f7884 179 wxMenu *tooltip_menu = new wxMenu;
6bc8a1c8 180 tooltip_menu->Append(MINIMAL_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
ec9f7884 181 tooltip_menu->AppendSeparator();
6bc8a1c8 182 tooltip_menu->Append(MINIMAL_ENABLE_TOOLTIPS, "&Toggle tooltips\tCrtl-T",
ec9f7884
VZ
183 "enable/disable tooltips", TRUE);
184 tooltip_menu->Check(MINIMAL_ENABLE_TOOLTIPS, TRUE);
185 menu_bar->Append(tooltip_menu, "&Tooltips");
16f6dfd8
VZ
186#endif // wxUSE_TOOLTIPS
187
ec9f7884 188 frame->SetMenuBar(menu_bar);
1c005ff7 189
ec9f7884 190 frame->Show(TRUE);
9018abe3 191 frame->SetCursor(wxCursor(wxCURSOR_HAND));
655822f3 192
ec9f7884 193 SetTopWindow(frame);
1c005ff7 194
ec9f7884 195 return TRUE;
1c005ff7
RR
196}
197
198//----------------------------------------------------------------------
199// MyPanel
200//----------------------------------------------------------------------
201
4fabb575 202const int ID_NOTEBOOK = 1000;
1c005ff7 203
4fabb575
JS
204const int ID_LISTBOX = 130;
205const int ID_LISTBOX_SEL_NUM = 131;
206const int ID_LISTBOX_SEL_STR = 132;
207const int ID_LISTBOX_CLEAR = 133;
208const int ID_LISTBOX_APPEND = 134;
209const int ID_LISTBOX_DELETE = 135;
210const int ID_LISTBOX_FONT = 136;
211const int ID_LISTBOX_ENABLE = 137;
1c005ff7 212
4fabb575
JS
213const int ID_CHOICE = 120;
214const int ID_CHOICE_SEL_NUM = 121;
215const int ID_CHOICE_SEL_STR = 122;
216const int ID_CHOICE_CLEAR = 123;
217const int ID_CHOICE_APPEND = 124;
218const int ID_CHOICE_DELETE = 125;
219const int ID_CHOICE_FONT = 126;
220const int ID_CHOICE_ENABLE = 127;
53010e52 221
4fabb575
JS
222const int ID_COMBO = 140;
223const int ID_COMBO_SEL_NUM = 141;
224const int ID_COMBO_SEL_STR = 142;
225const int ID_COMBO_CLEAR = 143;
226const int ID_COMBO_APPEND = 144;
227const int ID_COMBO_DELETE = 145;
228const int ID_COMBO_FONT = 146;
229const int ID_COMBO_ENABLE = 147;
53010e52 230
4fabb575
JS
231const int ID_RADIOBOX = 160;
232const int ID_RADIOBOX_SEL_NUM = 161;
233const int ID_RADIOBOX_SEL_STR = 162;
234const int ID_RADIOBOX_FONT = 163;
235const int ID_RADIOBOX_ENABLE = 164;
868a2826 236
f5d29b39
RR
237const int ID_RADIOBUTTON_1 = 166;
238const int ID_RADIOBUTTON_2 = 167;
239
4fabb575 240const int ID_SET_FONT = 170;
47908e25 241
4fabb575
JS
242const int ID_GAUGE = 180;
243const int ID_SLIDER = 181;
58614078 244
4fabb575 245const int ID_SPIN = 182;
9726da4f 246const int ID_BTNPROGRESS = 183;
e380f72b 247
1c005ff7 248BEGIN_EVENT_TABLE(MyPanel, wxPanel)
ec9f7884 249EVT_SIZE ( MyPanel::OnSize)
4d0f3cd6 250EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyPanel::OnPageChanging)
ec9f7884
VZ
251EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
252EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
253EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
254EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
255EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
256EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
257EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
258EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
259EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
260EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
261EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
262EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
263EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
264EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
265EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
266EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
267EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
268EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
269EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
270EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
271EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
272EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
273EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
274EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
275EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
276EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
277EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
278EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
279EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
280EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
281EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
282EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
283EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
9726da4f 284#ifndef wxUSE_SPINBUTTON
ec9f7884 285EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
8c3c31d4
VZ
286EVT_SPIN_UP (ID_SPIN, MyPanel::OnSpinUp)
287EVT_SPIN_DOWN (ID_SPIN, MyPanel::OnSpinDown)
9726da4f
VZ
288EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress)
289EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress)
2a47d3c1 290#endif
1c005ff7
RR
291END_EVENT_TABLE()
292
5fb9fcfc 293MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
0a772322
VZ
294 : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ),
295 m_text(NULL), m_notebook(NULL)
1c005ff7 296{
ec9f7884 297 // SetBackgroundColour("cadet blue");
a81258be 298
ec9f7884
VZ
299 m_text = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE );
300 // m_text->SetBackgroundColour("wheat");
655822f3 301
4d0f3cd6 302 delete wxLog::SetActiveTarget(new wxLogStderr);
0a772322 303
ec9f7884 304 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
655822f3 305
ec9f7884
VZ
306 wxString choices[] =
307 {
308 "This",
309 "is one of my",
310 "really",
311 "wonderful",
312 "examples."
313 };
655822f3 314
4fabb575 315#ifdef USE_XPM
ec9f7884
VZ
316 // image ids
317 enum
318 {
319 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
320 };
321
322 // fill the image list
323 wxImageList *imagelist = new wxImageList(32, 32);
324
325 imagelist-> Add( wxBitmap( list_xpm ));
326 imagelist-> Add( wxBitmap( choice_xpm ));
327 imagelist-> Add( wxBitmap( combo_xpm ));
328 imagelist-> Add( wxBitmap( text_xpm ));
329 imagelist-> Add( wxBitmap( radio_xpm ));
330 imagelist-> Add( wxBitmap( gauge_xpm ));
331 m_notebook->SetImageList(imagelist);
73c700fd 332#elif defined(__WXMSW__)
ec9f7884
VZ
333 // load images from resources
334 enum
335 {
336 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
337 };
338 wxImageList *imagelist = new wxImageList(16, 16, FALSE, Image_Max);
339
340 static const char *s_iconNames[Image_Max] =
341 {
342 "list", "choice", "combo", "text", "radio", "gauge"
343 };
344
345 for ( size_t n = 0; n < Image_Max; n++ )
346 {
347 wxBitmap bmp(s_iconNames[n]);
348 if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) )
349 {
350 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
351 s_iconNames[n], n);
352 }
353 }
354
355 m_notebook->SetImageList(imagelist);
4fabb575
JS
356#else
357
ec9f7884 358 // No images for now
4fabb575
JS
359#define Image_List -1
360#define Image_Choice -1
361#define Image_Combo -1
362#define Image_Text -1
363#define Image_Radio -1
364#define Image_Gauge -1
365#define Image_Max -1
366
fc54776e 367#endif
2cb21a45 368
ec9f7884
VZ
369 wxButton *button = (wxButton*) NULL; /* who did this ? */
370 wxPanel *panel = (wxPanel*) NULL;
9838df2c 371
ec9f7884 372 panel = new wxPanel(m_notebook);
034be888 373 m_listbox = new wxListBox( panel, ID_LISTBOX, wxPoint(10,10), wxSize(120,70), 5, choices, wxLB_ALWAYS_SB );
ec9f7884 374 m_listbox->SetCursor(*wxCROSS_CURSOR);
b8653fbf 375#if wxUSE_TOOLTIPS
ec9f7884 376 m_listbox->SetToolTip( "This is a list box" );
16f6dfd8 377#endif // wxUSE_TOOLTIPS
9f3362c4 378
85eb36c2
RR
379 m_lbSelectNum = new wxButton( panel, ID_LISTBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
380 m_lbSelectThis = new wxButton( panel, ID_LISTBOX_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
ec9f7884
VZ
381 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
382 (void)new wxButton( panel, ID_LISTBOX_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
383 (void)new wxButton( panel, ID_LISTBOX_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
034be888 384 button = new wxButton( panel, ID_LISTBOX_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
b8653fbf 385#if wxUSE_TOOLTIPS
ec9f7884 386 button->SetToolTip( "Press here to set italic font" );
16f6dfd8 387#endif // wxUSE_TOOLTIPS
b1170810 388
ed58dbea 389 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "&Disable", wxPoint(20,130) );
ec9f7884 390 m_checkbox->SetValue(FALSE);
b8653fbf 391#if wxUSE_TOOLTIPS
ec9f7884 392 m_checkbox->SetToolTip( "Click here to disable the listbox" );
16f6dfd8 393#endif // wxUSE_TOOLTIPS
ec9f7884
VZ
394 m_notebook->AddPage(panel, "wxListBox", TRUE, Image_List);
395
396 panel = new wxPanel(m_notebook);
397 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices );
ddc8c2e3 398 m_choice->SetSelection(2);
2b07d713 399 m_choice->SetBackgroundColour( "red" );
ec9f7884
VZ
400 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
401 (void)new wxButton( panel, ID_CHOICE_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
402 (void)new wxButton( panel, ID_CHOICE_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
403 (void)new wxButton( panel, ID_CHOICE_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
404 (void)new wxButton( panel, ID_CHOICE_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
405 (void)new wxButton( panel, ID_CHOICE_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
406 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
1fad4c3e 407
ec9f7884
VZ
408 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
409
410 panel = new wxPanel(m_notebook);
a260fe6a 411 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(10,10), wxSize(120,-1), 5, choices, wxCB_READONLY );
ec9f7884
VZ
412 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
413 (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
414 (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
415 (void)new wxButton( panel, ID_COMBO_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
416 (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
417 (void)new wxButton( panel, ID_COMBO_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
418 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
419 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
420
ec9f7884
VZ
421 wxString choices2[] =
422 {
17867d61 423 "First", "Second",
0a772322 424 /* "Third",
17867d61
RR
425 "Fourth", "Fifth", "Sixth",
426 "Seventh", "Eighth", "Nineth", "Tenth" */
ec9f7884
VZ
427 };
428
429 panel = new wxPanel(m_notebook);
9018abe3
VZ
430 (void)new wxRadioBox( panel, ID_RADIOBOX, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS );
431 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS );
ec9f7884
VZ
432 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
433 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
434 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
435 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
436 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) );
0544bc0a 437 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxSize(110,30), wxRB_GROUP );
ec9f7884
VZ
438 rb->SetValue( FALSE );
439 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
440 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
441
442 panel = new wxPanel(m_notebook);
33961d59 443 (void)new wxStaticBox( panel, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
ec9f7884 444 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30) );
858b5bdd 445 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS );
33961d59 446 (void)new wxStaticBox( panel, -1, "Explanation", wxPoint(220,10), wxSize(270,130) );
9838df2c 447#ifdef __WXMOTIF__
ec9f7884
VZ
448 // No wrapping text in wxStaticText yet :-(
449 (void)new wxStaticText( panel, -1,
450 "Drag the slider!",
33961d59 451 wxPoint(228,30),
e65cc56a 452 wxSize(240, -1)
ec9f7884 453 );
9838df2c 454#else
ec9f7884
VZ
455 (void)new wxStaticText( panel, -1,
456 "In order see the gauge (aka progress bar)\n"
457 "control do something you have to drag the\n"
458 "handle of the slider to the right.\n"
459 "\n"
460 "This is also supposed to demonstrate how\n"
461 "to use static controls.\n",
8c3c31d4
VZ
462 wxPoint(228,25),
463 wxSize(240, 110)
ec9f7884 464 );
9838df2c 465#endif
8c3c31d4
VZ
466 int initialSpinValue = -5;
467 wxString s;
468 s << initialSpinValue;
469 m_spintext = new wxTextCtrl( panel, -1, s, wxPoint(20,160), wxSize(80,-1) );
9726da4f 470#ifndef wxUSE_SPINBUTTON
ec9f7884 471 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) );
6380910c 472 m_spinbutton->SetRange(-10,30);
8c3c31d4 473 m_spinbutton->SetValue(initialSpinValue);
9726da4f
VZ
474
475 m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "Show progress dialog",
476 wxPoint(208, 159) );
2a47d3c1 477#endif
ec9f7884 478 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
45e41c05
VZ
479
480 panel = new wxPanel(m_notebook);
556921dc
MB
481
482#ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
45e41c05
VZ
483 wxIcon icon = wxTheApp->GetStdIcon(wxICON_INFORMATION);
484 wxStaticBitmap *bmpStatic = new wxStaticBitmap(panel, -1, icon, wxPoint(10, 10));
485
486 bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10));
487 bmpStatic->SetIcon(wxTheApp->GetStdIcon(wxICON_QUESTION));
556921dc
MB
488#endif
489
45e41c05
VZ
490 wxBitmap bitmap( 100, 100 );
491 wxMemoryDC dc;
492 dc.SelectObject( bitmap );
493 dc.SetPen(*wxGREEN_PEN);
494 dc.DrawEllipse(5, 5, 90, 90);
495 dc.DrawText("Bitmap", 20, 20);
496 dc.SelectObject( wxNullBitmap );
497
498 wxBitmapButton *bmpBtn = new wxBitmapButton
499 (
500 panel,
501 -1,
502 bitmap,
503 wxPoint(100, 20)
504 );
505 bmpBtn = NULL; // suppress warning
506
2ac1b69a
RD
507 new wxButton(panel, -1, "Another button", wxPoint(250, 20));
508
45e41c05 509 m_notebook->AddPage(panel, "wxBitmapXXX");
1c005ff7
RR
510}
511
512void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
513{
ec9f7884
VZ
514 int x = 0;
515 int y = 0;
516 GetClientSize( &x, &y );
655822f3 517
ec9f7884
VZ
518 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
519 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
1c005ff7
RR
520}
521
4d0f3cd6
VZ
522void MyPanel::OnPageChanging( wxNotebookEvent &event )
523{
45e41c05
VZ
524 int selOld = event.GetOldSelection();
525 if ( selOld == 2 )
4d0f3cd6 526 {
65045edd
RR
527 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
528 "page change from taking place - if you select\n"
529 "[No] the current page will stay the third one\n",
8c3c31d4
VZ
530 "Control sample",
531 wxICON_QUESTION | wxYES_NO) != wxYES )
532 {
533 event.Veto();
45e41c05 534
8c3c31d4
VZ
535 return;
536 }
4d0f3cd6 537 }
45e41c05
VZ
538
539 *m_text << "Notebook selection is being changed from " << selOld << "\n";
4d0f3cd6
VZ
540}
541
cb43b372
RR
542void MyPanel::OnPageChanged( wxNotebookEvent &event )
543{
ec9f7884 544 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
cb43b372
RR
545}
546
1c005ff7
RR
547void MyPanel::OnListBox( wxCommandEvent &event )
548{
19da4326 549 m_text->AppendText( "ListBox event selection string is: " );
ec9f7884
VZ
550 m_text->AppendText( event.GetString() );
551 m_text->AppendText( "\n" );
19da4326
RR
552 m_text->AppendText( "ListBox control selection string is: " );
553 m_text->AppendText( m_listbox->GetStringSelection() );
554 m_text->AppendText( "\n" );
1c005ff7
RR
555}
556
5b077d48
RR
557void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
558{
ec9f7884
VZ
559 m_text->AppendText( "ListBox double click string is: " );
560 m_text->AppendText( event.GetString() );
561 m_text->AppendText( "\n" );
5b077d48
RR
562}
563
47908e25
RR
564void MyPanel::OnListBoxButtons( wxCommandEvent &event )
565{
ec9f7884 566 switch (event.GetId())
d3904ceb 567 {
ec9f7884
VZ
568 case ID_LISTBOX_ENABLE:
569 {
570 m_text->AppendText("Checkbox clicked.\n");
571 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
b8653fbf 572#if wxUSE_TOOLTIPS
ec9f7884
VZ
573 if (event.GetInt())
574 cb->SetToolTip( "Click to enable listbox" );
575 else
576 cb->SetToolTip( "Click to disable listbox" );
16f6dfd8 577#endif // wxUSE_TOOLTIPS
ec9f7884
VZ
578 m_listbox->Enable( event.GetInt() == 0 );
579 break;
580 }
581 case ID_LISTBOX_SEL_NUM:
582 {
583 m_listbox->SetSelection( 2 );
8c3c31d4 584 m_lbSelectThis->WarpPointer( 40, 14 );
ec9f7884
VZ
585 break;
586 }
587 case ID_LISTBOX_SEL_STR:
588 {
589 m_listbox->SetStringSelection( "This" );
8c3c31d4 590 m_lbSelectNum->WarpPointer( 40, 14 );
ec9f7884
VZ
591 break;
592 }
593 case ID_LISTBOX_CLEAR:
594 {
595 m_listbox->Clear();
596 break;
597 }
598 case ID_LISTBOX_APPEND:
599 {
600 m_listbox->Append( "Hi!" );
601 break;
602 }
603 case ID_LISTBOX_DELETE:
604 {
605 int idx = m_listbox->GetSelection();
606 m_listbox->Delete( idx );
607 break;
608 }
609 case ID_LISTBOX_FONT:
610 {
611 m_listbox->SetFont( *wxITALIC_FONT );
612 m_checkbox->SetFont( *wxITALIC_FONT );
613 break;
614 }
868a2826 615 }
47908e25
RR
616}
617
618void MyPanel::OnChoice( wxCommandEvent &event )
619{
19da4326 620 m_text->AppendText( "Choice event selection string is: " );
ec9f7884
VZ
621 m_text->AppendText( event.GetString() );
622 m_text->AppendText( "\n" );
19da4326
RR
623 m_text->AppendText( "Choice control selection string is: " );
624 m_text->AppendText( m_choice->GetStringSelection() );
625 m_text->AppendText( "\n" );
47908e25
RR
626}
627
628void MyPanel::OnChoiceButtons( wxCommandEvent &event )
629{
ec9f7884 630 switch (event.GetId())
47908e25 631 {
ec9f7884
VZ
632 case ID_CHOICE_ENABLE:
633 {
634 m_choice->Enable( event.GetInt() == 0 );
635 break;
636 }
637 case ID_CHOICE_SEL_NUM:
638 {
639 m_choice->SetSelection( 2 );
640 break;
641 }
642 case ID_CHOICE_SEL_STR:
643 {
644 m_choice->SetStringSelection( "This" );
645 break;
646 }
647 case ID_CHOICE_CLEAR:
648 {
649 m_choice->Clear();
650 break;
651 }
652 case ID_CHOICE_APPEND:
653 {
654 m_choice->Append( "Hi!" );
655 break;
656 }
657 case ID_CHOICE_DELETE:
658 {
659 int idx = m_choice->GetSelection();
660 m_choice->Delete( idx );
661 break;
662 }
663 case ID_CHOICE_FONT:
664 {
665 m_choice->SetFont( *wxITALIC_FONT );
666 break;
667 }
868a2826 668 }
47908e25
RR
669}
670
671void MyPanel::OnCombo( wxCommandEvent &event )
672{
19da4326 673 m_text->AppendText( "ComboBox event selection string is: " );
ec9f7884
VZ
674 m_text->AppendText( event.GetString() );
675 m_text->AppendText( "\n" );
19da4326
RR
676 m_text->AppendText( "ComboBox control selection string is: " );
677 m_text->AppendText( m_combo->GetStringSelection() );
678 m_text->AppendText( "\n" );
47908e25
RR
679}
680
681void MyPanel::OnComboButtons( wxCommandEvent &event )
1c005ff7 682{
ec9f7884 683 switch (event.GetId())
2f6407b9 684 {
ec9f7884
VZ
685 case ID_COMBO_ENABLE:
686 {
687 m_combo->Enable( event.GetInt() == 0 );
688 break;
689 }
690 case ID_COMBO_SEL_NUM:
691 {
692 m_combo->SetSelection( 2 );
693 break;
694 }
695 case ID_COMBO_SEL_STR:
696 {
697 m_combo->SetStringSelection( "This" );
698 break;
699 }
700 case ID_COMBO_CLEAR:
701 {
702 m_combo->Clear();
703 break;
704 }
705 case ID_COMBO_APPEND:
706 {
707 m_combo->Append( "Hi!" );
708 break;
709 }
710 case ID_COMBO_DELETE:
711 {
712 int idx = m_combo->GetSelection();
713 m_combo->Delete( idx );
714 break;
715 }
716 case ID_COMBO_FONT:
717 {
718 m_combo->SetFont( *wxITALIC_FONT );
719 break;
720 }
868a2826 721 }
47908e25
RR
722}
723
724void MyPanel::OnRadio( wxCommandEvent &event )
725{
ec9f7884
VZ
726 m_text->AppendText( "RadioBox selection string is: " );
727 m_text->AppendText( event.GetString() );
728 m_text->AppendText( "\n" );
47908e25
RR
729}
730
731void MyPanel::OnRadioButtons( wxCommandEvent &event )
732{
ec9f7884 733 switch (event.GetId())
d3904ceb 734 {
ec9f7884
VZ
735 case ID_RADIOBOX_ENABLE:
736 {
737 m_radio->Enable( event.GetInt() == 0 );
738 break;
739 }
740 case ID_RADIOBOX_SEL_NUM:
741 {
742 m_radio->SetSelection( 2 );
743 break;
744 }
745 case ID_RADIOBOX_SEL_STR:
746 {
747 m_radio->SetStringSelection( "This" );
748 break;
749 }
750 case ID_RADIOBOX_FONT:
751 {
752 m_radio->SetFont( *wxITALIC_FONT );
753 break;
754 }
868a2826 755 }
1c005ff7
RR
756}
757
868a2826
RR
758void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
759{
ec9f7884
VZ
760 m_fontButton->SetFont( *wxITALIC_FONT );
761 m_text->SetFont( *wxITALIC_FONT );
868a2826
RR
762}
763
7bce6aec
RR
764void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
765{
ec9f7884 766 m_gauge->SetValue( m_slider->GetValue() );
7bce6aec
RR
767}
768
9726da4f 769#ifndef wxUSE_SPINBUTTON
8c3c31d4
VZ
770void MyPanel::OnSpinUp( wxSpinEvent &event )
771{
772 wxString value;
773 value.Printf( _T("Spin control up: current = %d\n"),
774 m_spinbutton->GetValue());
775
776 if ( m_spinbutton->GetValue() > 17 )
777 {
778 value += _T("Preventing the spin button from going above 17.\n");
779
780 event.Veto();
781 }
782
783 m_text->AppendText(value);
784}
785
786void MyPanel::OnSpinDown( wxSpinEvent &event )
787{
788 wxString value;
789 value.Printf( _T("Spin control down: current = %d\n"),
790 m_spinbutton->GetValue());
791
792 if ( m_spinbutton->GetValue() < -17 )
793 {
794 value += _T("Preventing the spin button from going below -17.\n");
795
796 event.Veto();
797 }
798
799 m_text->AppendText(value);
800}
801
e380f72b
RR
802void MyPanel::OnSpinUpdate( wxSpinEvent &event )
803{
ec9f7884 804 wxString value;
f70d5829 805 value.Printf( _T("%d"), event.GetPosition() );
ec9f7884 806 m_spintext->SetValue( value );
6380910c 807
f70d5829 808 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
6380910c
VZ
809 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
810 m_spinbutton->GetValue());
811
812 m_text->AppendText(value);
e380f72b 813}
9726da4f
VZ
814
815void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
816{
817 event.Enable( m_spinbutton->GetValue() > 0 );
818}
819
820void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
821{
822 int max = m_spinbutton->GetValue();
823 wxProgressDialog dialog("Progress dialog example",
824 "An informative message",
825 max, // range
826 this, // parent
8c3c31d4
VZ
827 wxPD_CAN_ABORT |
828 wxPD_APP_MODAL |
829 wxPD_ELAPSED_TIME |
830 wxPD_ESTIMATED_TIME |
831 wxPD_REMAINING_TIME);
2ac1b69a 832
9726da4f
VZ
833
834 bool cont = TRUE;
835 for ( int i = 0; i < max && cont; i++ )
836 {
837 wxSleep(1);
be9abe3f
VZ
838 if ( i == max - 1 )
839 {
840 cont = dialog.Update(i, "That's all, folks!");
841 }
842 else if ( i == max / 2 )
9726da4f
VZ
843 {
844 cont = dialog.Update(i, "Only a half left!");
845 }
846 else
847 {
848 cont = dialog.Update(i);
849 }
850 }
851
852 if ( !cont )
853 {
854 *m_text << "Progress dialog aborted!\n";
855 }
856 else
857 {
858 *m_text << "Countdown from " << max << " finished.\n";
859 }
860}
861
862#endif // wxUSE_SPINBUTTON
e380f72b 863
2cb21a45
VZ
864MyPanel::~MyPanel()
865{
ec9f7884 866 delete m_notebook->GetImageList();
2cb21a45
VZ
867}
868
1c005ff7
RR
869//----------------------------------------------------------------------
870// MyFrame
871//----------------------------------------------------------------------
872
873BEGIN_EVENT_TABLE(MyFrame, wxFrame)
ec9f7884
VZ
874EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
875EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
16f6dfd8 876#if wxUSE_TOOLTIPS
ec9f7884
VZ
877EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
878EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
16f6dfd8 879#endif // wxUSE_TOOLTIPS
ec9f7884
VZ
880EVT_SIZE(MyFrame::OnSize)
881EVT_IDLE(MyFrame::OnIdle)
1c005ff7
RR
882END_EVENT_TABLE()
883
9f3362c4 884MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
ec9f7884 885: wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
1c005ff7 886{
5fb9fcfc 887 CreateStatusBar(2);
9f3362c4
VZ
888
889 (void)new MyPanel( this, 10, 10, 300, 100 );
1c005ff7
RR
890}
891
892void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
893{
ec9f7884 894 Close(TRUE);
1c005ff7
RR
895}
896
897void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
898{
ec9f7884
VZ
899 wxBeginBusyCursor();
900
901 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
902 dialog.ShowModal();
903
904 wxEndBusyCursor();
1c005ff7 905}
9f3362c4 906
16f6dfd8
VZ
907#if wxUSE_TOOLTIPS
908void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
909{
910 static long s_delay = 5000;
911
912 wxString delay;
f70d5829 913 delay.Printf( _T("%ld"), s_delay);
16f6dfd8
VZ
914
915 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
ec9f7884
VZ
916 "Set tooltip delay",
917 delay,
918 this);
16f6dfd8
VZ
919 if ( !delay )
920 return; // cancelled
921
f70d5829 922 wxSscanf(delay, _T("%ld"), &s_delay);
16f6dfd8
VZ
923
924 wxToolTip::SetDelay(s_delay);
925
f70d5829 926 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
16f6dfd8
VZ
927}
928
929void MyFrame::OnToggleTooltips(wxCommandEvent& event)
930{
931 static bool s_enabled = TRUE;
932
933 s_enabled = !s_enabled;
934
935 wxToolTip::Enable(s_enabled);
936
f70d5829 937 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
16f6dfd8
VZ
938}
939#endif // tooltips
940
5fb9fcfc
VZ
941void MyFrame::OnSize( wxSizeEvent& event )
942{
943 wxString msg;
f70d5829 944 msg.Printf( _("%dx%d"), event.GetSize().x, event.GetSize().y);
5fb9fcfc
VZ
945 SetStatusText(msg, 1);
946
947 event.Skip();
948}
949
9f3362c4
VZ
950void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
951{
952 // track the window which has the focus in the status bar
953 static wxWindow *s_windowFocus = (wxWindow *)NULL;
954 wxWindow *focus = wxWindow::FindFocus();
955 if ( focus && (focus != s_windowFocus) )
956 {
957 s_windowFocus = focus;
958
959 wxString msg;
f70d5829 960 msg.Printf(
9f3362c4 961#ifdef __WXMSW__
f70d5829
RR
962 _T("Focus: wxWindow = %p, HWND = %08x"),
963#else
964 _T("Focus: wxWindow = %p"),
965#endif
966 s_windowFocus
9f3362c4 967#ifdef __WXMSW__
ec9f7884 968 , s_windowFocus->GetHWND()
f70d5829 969#endif
9f3362c4
VZ
970 );
971
972 SetStatusText(msg);
973 }
341c92a8 974}