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