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