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