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