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