]> git.saurik.com Git - wxWidgets.git/blob - samples/controls/controls.cpp
9f6486ab65e5f662bb4e930003a4ca156b2b6d8c
[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 #include "wx/spinbutt.h"
27 #include "wx/notebook.h"
28 #include "wx/imaglist.h"
29
30 #if wxUSE_TOOLTIPS
31 #include "wx/tooltip.h"
32 #endif
33
34 #if defined(__WXGTK__) || defined(__WXMOTIF__)
35 #define USE_XPM
36 #endif
37
38 #ifdef USE_XPM
39 #include "mondrian.xpm"
40 #include "icons/choice.xpm"
41 #include "icons/combo.xpm"
42 #include "icons/list.xpm"
43 #include "icons/radio.xpm"
44 #include "icons/text.xpm"
45 #include "icons/gauge.xpm"
46 #endif
47
48 #ifdef __WIN16__
49 // Win16 doesn't have them
50 #undef wxUSE_SPINBUTTON
51 #define wxUSE_SPINBUTTON 0
52 #endif // __WIN16__
53
54 #include "wx/progdlg.h"
55
56 //----------------------------------------------------------------------
57 // class definitions
58 //----------------------------------------------------------------------
59
60 class MyApp: public wxApp
61 {
62 public:
63 bool OnInit();
64 };
65
66 class MyPanel: public wxPanel
67 {
68 public:
69 MyPanel(wxFrame *frame, int x, int y, int w, int h);
70 virtual ~MyPanel();
71
72 void OnSize( wxSizeEvent& event );
73 void OnListBox( wxCommandEvent &event );
74 void OnListBoxDoubleClick( wxCommandEvent &event );
75 void OnListBoxButtons( wxCommandEvent &event );
76 void OnChoice( wxCommandEvent &event );
77 void OnChoiceButtons( wxCommandEvent &event );
78 void OnCombo( wxCommandEvent &event );
79 void OnComboButtons( wxCommandEvent &event );
80 void OnRadio( wxCommandEvent &event );
81 void OnRadioButtons( wxCommandEvent &event );
82 void OnSetFont( wxCommandEvent &event );
83 void OnPageChanged( wxNotebookEvent &event );
84 void OnPageChanging( wxNotebookEvent &event );
85 void OnSliderUpdate( wxCommandEvent &event );
86 #ifndef wxUSE_SPINBUTTON
87 void OnSpinUpdate( wxSpinEvent &event );
88 void OnUpdateShowProgress( wxUpdateUIEvent& event );
89 void OnShowProgress( wxCommandEvent &event );
90 #endif // wxUSE_SPINBUTTON
91
92 wxListBox *m_listbox;
93 wxChoice *m_choice;
94 wxComboBox *m_combo;
95 wxRadioBox *m_radio;
96 wxGauge *m_gauge;
97 wxSlider *m_slider;
98 wxButton *m_fontButton;
99 wxButton *m_lbSelectNum;
100 wxButton *m_lbSelectThis;
101 #ifndef wxUSE_SPINBUTTON
102 wxSpinButton *m_spinbutton;
103 wxButton *m_btnProgress;
104 #endif
105 wxTextCtrl *m_spintext;
106 wxCheckBox *m_checkbox;
107
108 wxTextCtrl *m_text;
109 wxNotebook *m_notebook;
110
111 private:
112 DECLARE_EVENT_TABLE()
113 };
114
115 class MyFrame: public wxFrame
116 {
117 public:
118 MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
119
120 void OnQuit(wxCommandEvent& event);
121 void OnAbout(wxCommandEvent& event);
122 #if wxUSE_TOOLTIPS
123 void OnSetTooltipDelay(wxCommandEvent& event);
124 void OnToggleTooltips(wxCommandEvent& event);
125 #endif // wxUSE_TOOLTIPS
126 void OnIdle( wxIdleEvent& event );
127 void OnSize( wxSizeEvent& event );
128
129 private:
130 DECLARE_EVENT_TABLE()
131 };
132
133 //----------------------------------------------------------------------
134 // main()
135 //----------------------------------------------------------------------
136
137 IMPLEMENT_APP(MyApp)
138
139 //----------------------------------------------------------------------
140 // MyApp
141 //----------------------------------------------------------------------
142
143 enum
144 {
145 MINIMAL_QUIT = 100,
146 MINIMAL_TEXT,
147 MINIMAL_ABOUT,
148
149 // tooltip menu
150 MINIMAL_SET_TOOLTIP_DELAY = 200,
151 MINIMAL_ENABLE_TOOLTIPS
152 };
153
154 bool MyApp::OnInit()
155 {
156 // Create the main frame window
157 MyFrame *frame = new MyFrame((wxFrame *) NULL,
158 "Controls wxWindows App",
159 50, 50, 530, 420);
160
161 // Give it an icon
162 // The wxICON() macros loads an icon from a resource under Windows
163 // and uses an #included XPM image under GTK+ and Motif
164
165 frame->SetIcon( wxICON(mondrian) );
166
167 wxMenu *file_menu = new wxMenu("", wxMENU_TEAROFF );
168 file_menu->Append(MINIMAL_ABOUT, "&About\tF1");
169 file_menu->Append(MINIMAL_QUIT, "E&xit\tAlt-X", "Quit controls sample");
170
171 wxMenuBar *menu_bar = new wxMenuBar;
172 menu_bar->Append(file_menu, "&File");
173
174 #if wxUSE_TOOLTIPS
175 wxMenu *tooltip_menu = new wxMenu;
176 tooltip_menu->Append(MINIMAL_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
177 tooltip_menu->AppendSeparator();
178 tooltip_menu->Append(MINIMAL_ENABLE_TOOLTIPS, "&Toggle tooltips\tCrtl-T",
179 "enable/disable tooltips", TRUE);
180 tooltip_menu->Check(MINIMAL_ENABLE_TOOLTIPS, TRUE);
181 menu_bar->Append(tooltip_menu, "&Tooltips");
182 #endif // wxUSE_TOOLTIPS
183
184 frame->SetMenuBar(menu_bar);
185
186 frame->Show(TRUE);
187 frame->SetCursor(wxCursor(wxCURSOR_HAND));
188
189 SetTopWindow(frame);
190
191 return TRUE;
192 }
193
194 //----------------------------------------------------------------------
195 // MyPanel
196 //----------------------------------------------------------------------
197
198 const int ID_NOTEBOOK = 1000;
199
200 const int ID_LISTBOX = 130;
201 const int ID_LISTBOX_SEL_NUM = 131;
202 const int ID_LISTBOX_SEL_STR = 132;
203 const int ID_LISTBOX_CLEAR = 133;
204 const int ID_LISTBOX_APPEND = 134;
205 const int ID_LISTBOX_DELETE = 135;
206 const int ID_LISTBOX_FONT = 136;
207 const int ID_LISTBOX_ENABLE = 137;
208
209 const int ID_CHOICE = 120;
210 const int ID_CHOICE_SEL_NUM = 121;
211 const int ID_CHOICE_SEL_STR = 122;
212 const int ID_CHOICE_CLEAR = 123;
213 const int ID_CHOICE_APPEND = 124;
214 const int ID_CHOICE_DELETE = 125;
215 const int ID_CHOICE_FONT = 126;
216 const int ID_CHOICE_ENABLE = 127;
217
218 const int ID_COMBO = 140;
219 const int ID_COMBO_SEL_NUM = 141;
220 const int ID_COMBO_SEL_STR = 142;
221 const int ID_COMBO_CLEAR = 143;
222 const int ID_COMBO_APPEND = 144;
223 const int ID_COMBO_DELETE = 145;
224 const int ID_COMBO_FONT = 146;
225 const int ID_COMBO_ENABLE = 147;
226
227 const int ID_RADIOBOX = 160;
228 const int ID_RADIOBOX_SEL_NUM = 161;
229 const int ID_RADIOBOX_SEL_STR = 162;
230 const int ID_RADIOBOX_FONT = 163;
231 const int ID_RADIOBOX_ENABLE = 164;
232
233 const int ID_RADIOBUTTON_1 = 166;
234 const int ID_RADIOBUTTON_2 = 167;
235
236 const int ID_SET_FONT = 170;
237
238 const int ID_GAUGE = 180;
239 const int ID_SLIDER = 181;
240
241 const int ID_SPIN = 182;
242 const int ID_BTNPROGRESS = 183;
243
244 BEGIN_EVENT_TABLE(MyPanel, wxPanel)
245 EVT_SIZE ( MyPanel::OnSize)
246 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyPanel::OnPageChanging)
247 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
248 EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
249 EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
250 EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
251 EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
252 EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
253 EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
254 EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
255 EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
256 EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
257 EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
258 EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
259 EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
260 EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
261 EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
262 EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
263 EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
264 EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
265 EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
266 EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
267 EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
268 EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
269 EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
270 EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
271 EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
272 EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
273 EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
274 EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
275 EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
276 EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
277 EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
278 EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
279 EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
280 #ifndef wxUSE_SPINBUTTON
281 EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
282 EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress)
283 EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress)
284 #endif
285 END_EVENT_TABLE()
286
287 MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
288 : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ),
289 m_text(NULL), m_notebook(NULL)
290 {
291 // SetBackgroundColour("cadet blue");
292
293 m_text = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE );
294 // m_text->SetBackgroundColour("wheat");
295
296 delete wxLog::SetActiveTarget(new wxLogStderr);
297
298 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
299
300 wxString choices[] =
301 {
302 "This",
303 "is one of my",
304 "really",
305 "wonderful",
306 "examples."
307 };
308
309 #ifdef USE_XPM
310 // image ids
311 enum
312 {
313 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
314 };
315
316 // fill the image list
317 wxImageList *imagelist = new wxImageList(32, 32);
318
319 imagelist-> Add( wxBitmap( list_xpm ));
320 imagelist-> Add( wxBitmap( choice_xpm ));
321 imagelist-> Add( wxBitmap( combo_xpm ));
322 imagelist-> Add( wxBitmap( text_xpm ));
323 imagelist-> Add( wxBitmap( radio_xpm ));
324 imagelist-> Add( wxBitmap( gauge_xpm ));
325 m_notebook->SetImageList(imagelist);
326 #elif defined(__WXMSW__)
327 // load images from resources
328 enum
329 {
330 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
331 };
332 wxImageList *imagelist = new wxImageList(16, 16, FALSE, Image_Max);
333
334 static const char *s_iconNames[Image_Max] =
335 {
336 "list", "choice", "combo", "text", "radio", "gauge"
337 };
338
339 for ( size_t n = 0; n < Image_Max; n++ )
340 {
341 wxBitmap bmp(s_iconNames[n]);
342 if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) )
343 {
344 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
345 s_iconNames[n], n);
346 }
347 }
348
349 m_notebook->SetImageList(imagelist);
350 #else
351
352 // No images for now
353 #define Image_List -1
354 #define Image_Choice -1
355 #define Image_Combo -1
356 #define Image_Text -1
357 #define Image_Radio -1
358 #define Image_Gauge -1
359 #define Image_Max -1
360
361 #endif
362
363 wxButton *button = (wxButton*) NULL; /* who did this ? */
364 wxPanel *panel = (wxPanel*) NULL;
365
366 panel = new wxPanel(m_notebook);
367 m_listbox = new wxListBox( panel, ID_LISTBOX, wxPoint(10,10), wxSize(120,70), 5, choices, wxLB_ALWAYS_SB );
368 m_listbox->SetCursor(*wxCROSS_CURSOR);
369 #if wxUSE_TOOLTIPS
370 m_listbox->SetToolTip( "This is a list box" );
371 #endif // wxUSE_TOOLTIPS
372
373 m_lbSelectNum = new wxButton( panel, ID_LISTBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
374 m_lbSelectThis = new wxButton( panel, ID_LISTBOX_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
375 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
376 (void)new wxButton( panel, ID_LISTBOX_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
377 (void)new wxButton( panel, ID_LISTBOX_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
378 button = new wxButton( panel, ID_LISTBOX_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
379 #if wxUSE_TOOLTIPS
380 button->SetToolTip( "Press here to set italic font" );
381 #endif // wxUSE_TOOLTIPS
382
383 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "&Disable", wxPoint(20,130), wxSize(-1, -1), wxALIGN_RIGHT );
384 m_checkbox->SetValue(FALSE);
385 #if wxUSE_TOOLTIPS
386 m_checkbox->SetToolTip( "Click here to disable the listbox" );
387 #endif // wxUSE_TOOLTIPS
388 m_notebook->AddPage(panel, "wxListBox", TRUE, Image_List);
389
390 panel = new wxPanel(m_notebook);
391 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices );
392 m_choice->SetBackgroundColour( "red" );
393 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
394 (void)new wxButton( panel, ID_CHOICE_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
395 (void)new wxButton( panel, ID_CHOICE_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
396 (void)new wxButton( panel, ID_CHOICE_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
397 (void)new wxButton( panel, ID_CHOICE_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
398 (void)new wxButton( panel, ID_CHOICE_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
399 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
400
401 /*
402 wxIcon icon = wxTheApp->GetStdIcon(wxICON_INFORMATION);
403 wxSize sizeIcon = wxSize(icon.GetWidth(), icon.GetHeight());
404 (void)new wxStaticBitmap( panel, -1, icon, wxPoint(50, 60), sizeIcon);
405 wxStaticBitmap *bitmap = new wxStaticBitmap( panel, -1, wxNullBitmap, wxPoint(10, 60), sizeIcon);
406 bitmap->SetBitmap(icon);
407 */
408 wxIcon icon = wxTheApp->GetStdIcon(wxICON_INFORMATION);
409 (void)new wxStaticBitmap( panel, -1, icon, wxPoint(50, 60) );
410 wxStaticBitmap *bitmap = new wxStaticBitmap( panel, -1, wxNullBitmap, wxPoint(10, 60) );
411 bitmap->SetBitmap(icon);
412
413 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
414
415 panel = new wxPanel(m_notebook);
416 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(10,10), wxSize(120,-1), 5, choices, wxCB_READONLY );
417 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
418 (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
419 (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
420 (void)new wxButton( panel, ID_COMBO_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
421 (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
422 (void)new wxButton( panel, ID_COMBO_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
423 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
424 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
425
426 wxString choices2[] =
427 {
428 "First", "Second",
429 /* "Third",
430 "Fourth", "Fifth", "Sixth",
431 "Seventh", "Eighth", "Nineth", "Tenth" */
432 };
433
434 panel = new wxPanel(m_notebook);
435 (void)new wxRadioBox( panel, ID_RADIOBOX, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS );
436 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS );
437 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
438 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
439 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
440 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
441 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) );
442 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
443 rb->SetValue( FALSE );
444 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
445 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
446
447 panel = new wxPanel(m_notebook);
448 (void)new wxStaticBox( panel, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
449 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30) );
450 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS );
451 (void)new wxStaticBox( panel, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
452 #ifdef __WXMOTIF__
453 // No wrapping text in wxStaticText yet :-(
454 (void)new wxStaticText( panel, -1,
455 "Drag the slider!",
456 wxPoint(208,30),
457 wxSize(210, -1)
458 );
459 #else
460 (void)new wxStaticText( panel, -1,
461 "In order see the gauge (aka progress bar)\n"
462 "control do something you have to drag the\n"
463 "handle of the slider to the right.\n"
464 "\n"
465 "This is also supposed to demonstrate how\n"
466 "to use static controls.\n",
467 wxPoint(208,25),
468 wxSize(250, 110)
469 );
470 #endif
471 m_spintext = new wxTextCtrl( panel, -1, "0", wxPoint(20,160), wxSize(80,-1) );
472 #ifndef wxUSE_SPINBUTTON
473 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) );
474 m_spinbutton->SetRange(-10,30);
475 m_spinbutton->SetValue(-5);
476
477 m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "Show progress dialog",
478 wxPoint(208, 159) );
479 #endif
480 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
481 }
482
483 void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
484 {
485 int x = 0;
486 int y = 0;
487 GetClientSize( &x, &y );
488
489 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
490 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
491 }
492
493 void MyPanel::OnPageChanging( wxNotebookEvent &event )
494 {
495 int selNew = event.GetSelection(),
496 selOld = event.GetOldSelection();
497 if ( selOld == 2 && selNew == 4 )
498 {
499 wxMessageBox("This demonstrates how a program may prevent the "
500 "page change from taking place - \n the current page will "
501 "stay the third one", "Control sample",
502 wxICON_INFORMATION | wxOK);
503
504 event.Veto();
505 }
506 else
507 {
508 *m_text << "Notebook selection is being changed from "
509 << selOld << " to " << selNew << "\n";
510 }
511 }
512
513 void MyPanel::OnPageChanged( wxNotebookEvent &event )
514 {
515 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
516 }
517
518 void MyPanel::OnListBox( wxCommandEvent &event )
519 {
520 m_text->AppendText( "ListBox event selection string is: " );
521 m_text->AppendText( event.GetString() );
522 m_text->AppendText( "\n" );
523 m_text->AppendText( "ListBox control selection string is: " );
524 m_text->AppendText( m_listbox->GetStringSelection() );
525 m_text->AppendText( "\n" );
526 }
527
528 void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
529 {
530 m_text->AppendText( "ListBox double click string is: " );
531 m_text->AppendText( event.GetString() );
532 m_text->AppendText( "\n" );
533 }
534
535 void MyPanel::OnListBoxButtons( wxCommandEvent &event )
536 {
537 switch (event.GetId())
538 {
539 case ID_LISTBOX_ENABLE:
540 {
541 m_text->AppendText("Checkbox clicked.\n");
542 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
543 #if wxUSE_TOOLTIPS
544 if (event.GetInt())
545 cb->SetToolTip( "Click to enable listbox" );
546 else
547 cb->SetToolTip( "Click to disable listbox" );
548 #endif // wxUSE_TOOLTIPS
549 m_listbox->Enable( event.GetInt() == 0 );
550 break;
551 }
552 case ID_LISTBOX_SEL_NUM:
553 {
554 m_listbox->SetSelection( 2 );
555 m_lbSelectThis->WarpPointer( 40, 14 );
556 break;
557 }
558 case ID_LISTBOX_SEL_STR:
559 {
560 m_listbox->SetStringSelection( "This" );
561 m_lbSelectNum->WarpPointer( 40, 14 );
562 break;
563 }
564 case ID_LISTBOX_CLEAR:
565 {
566 m_listbox->Clear();
567 break;
568 }
569 case ID_LISTBOX_APPEND:
570 {
571 m_listbox->Append( "Hi!" );
572 break;
573 }
574 case ID_LISTBOX_DELETE:
575 {
576 int idx = m_listbox->GetSelection();
577 m_listbox->Delete( idx );
578 break;
579 }
580 case ID_LISTBOX_FONT:
581 {
582 m_listbox->SetFont( *wxITALIC_FONT );
583 m_checkbox->SetFont( *wxITALIC_FONT );
584 break;
585 }
586 }
587 }
588
589 void MyPanel::OnChoice( wxCommandEvent &event )
590 {
591 m_text->AppendText( "Choice event selection string is: " );
592 m_text->AppendText( event.GetString() );
593 m_text->AppendText( "\n" );
594 m_text->AppendText( "Choice control selection string is: " );
595 m_text->AppendText( m_choice->GetStringSelection() );
596 m_text->AppendText( "\n" );
597 }
598
599 void MyPanel::OnChoiceButtons( wxCommandEvent &event )
600 {
601 switch (event.GetId())
602 {
603 case ID_CHOICE_ENABLE:
604 {
605 m_choice->Enable( event.GetInt() == 0 );
606 break;
607 }
608 case ID_CHOICE_SEL_NUM:
609 {
610 m_choice->SetSelection( 2 );
611 break;
612 }
613 case ID_CHOICE_SEL_STR:
614 {
615 m_choice->SetStringSelection( "This" );
616 break;
617 }
618 case ID_CHOICE_CLEAR:
619 {
620 m_choice->Clear();
621 break;
622 }
623 case ID_CHOICE_APPEND:
624 {
625 m_choice->Append( "Hi!" );
626 break;
627 }
628 case ID_CHOICE_DELETE:
629 {
630 int idx = m_choice->GetSelection();
631 m_choice->Delete( idx );
632 break;
633 }
634 case ID_CHOICE_FONT:
635 {
636 m_choice->SetFont( *wxITALIC_FONT );
637 break;
638 }
639 }
640 }
641
642 void MyPanel::OnCombo( wxCommandEvent &event )
643 {
644 m_text->AppendText( "ComboBox event selection string is: " );
645 m_text->AppendText( event.GetString() );
646 m_text->AppendText( "\n" );
647 m_text->AppendText( "ComboBox control selection string is: " );
648 m_text->AppendText( m_combo->GetStringSelection() );
649 m_text->AppendText( "\n" );
650 }
651
652 void MyPanel::OnComboButtons( wxCommandEvent &event )
653 {
654 switch (event.GetId())
655 {
656 case ID_COMBO_ENABLE:
657 {
658 m_combo->Enable( event.GetInt() == 0 );
659 break;
660 }
661 case ID_COMBO_SEL_NUM:
662 {
663 m_combo->SetSelection( 2 );
664 break;
665 }
666 case ID_COMBO_SEL_STR:
667 {
668 m_combo->SetStringSelection( "This" );
669 break;
670 }
671 case ID_COMBO_CLEAR:
672 {
673 m_combo->Clear();
674 break;
675 }
676 case ID_COMBO_APPEND:
677 {
678 m_combo->Append( "Hi!" );
679 break;
680 }
681 case ID_COMBO_DELETE:
682 {
683 int idx = m_combo->GetSelection();
684 m_combo->Delete( idx );
685 break;
686 }
687 case ID_COMBO_FONT:
688 {
689 m_combo->SetFont( *wxITALIC_FONT );
690 break;
691 }
692 }
693 }
694
695 void MyPanel::OnRadio( wxCommandEvent &event )
696 {
697 m_text->AppendText( "RadioBox selection string is: " );
698 m_text->AppendText( event.GetString() );
699 m_text->AppendText( "\n" );
700 }
701
702 void MyPanel::OnRadioButtons( wxCommandEvent &event )
703 {
704 switch (event.GetId())
705 {
706 case ID_RADIOBOX_ENABLE:
707 {
708 m_radio->Enable( event.GetInt() == 0 );
709 break;
710 }
711 case ID_RADIOBOX_SEL_NUM:
712 {
713 m_radio->SetSelection( 2 );
714 break;
715 }
716 case ID_RADIOBOX_SEL_STR:
717 {
718 m_radio->SetStringSelection( "This" );
719 break;
720 }
721 case ID_RADIOBOX_FONT:
722 {
723 m_radio->SetFont( *wxITALIC_FONT );
724 break;
725 }
726 }
727 }
728
729 void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
730 {
731 m_fontButton->SetFont( *wxITALIC_FONT );
732 m_text->SetFont( *wxITALIC_FONT );
733 }
734
735 void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
736 {
737 m_gauge->SetValue( m_slider->GetValue() );
738 }
739
740 #ifndef wxUSE_SPINBUTTON
741 void MyPanel::OnSpinUpdate( wxSpinEvent &event )
742 {
743 wxString value;
744 value.Printf( _T("%d"), event.GetPosition() );
745 m_spintext->SetValue( value );
746
747 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
748 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
749 m_spinbutton->GetValue());
750
751 m_text->AppendText(value);
752 }
753
754 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
755 {
756 event.Enable( m_spinbutton->GetValue() > 0 );
757 }
758
759 void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
760 {
761 int max = m_spinbutton->GetValue();
762 wxProgressDialog dialog("Progress dialog example",
763 "An informative message",
764 max, // range
765 this, // parent
766 wxPD_CAN_ABORT | wxPD_APP_MODAL | wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME);
767
768
769 bool cont = TRUE;
770 for ( int i = 0; i < max && cont; i++ )
771 {
772 wxSleep(1);
773 if ( i == max - 1 )
774 {
775 cont = dialog.Update(i, "That's all, folks!");
776 }
777 else if ( i == max / 2 )
778 {
779 cont = dialog.Update(i, "Only a half left!");
780 }
781 else
782 {
783 cont = dialog.Update(i);
784 }
785 }
786
787 if ( !cont )
788 {
789 *m_text << "Progress dialog aborted!\n";
790 }
791 else
792 {
793 *m_text << "Countdown from " << max << " finished.\n";
794 }
795 }
796
797 #endif // wxUSE_SPINBUTTON
798
799 MyPanel::~MyPanel()
800 {
801 delete m_notebook->GetImageList();
802 }
803
804 //----------------------------------------------------------------------
805 // MyFrame
806 //----------------------------------------------------------------------
807
808 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
809 EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
810 EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
811 #if wxUSE_TOOLTIPS
812 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
813 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
814 #endif // wxUSE_TOOLTIPS
815 EVT_SIZE(MyFrame::OnSize)
816 EVT_IDLE(MyFrame::OnIdle)
817 END_EVENT_TABLE()
818
819 MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
820 : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
821 {
822 CreateStatusBar(2);
823
824 (void)new MyPanel( this, 10, 10, 300, 100 );
825 }
826
827 void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
828 {
829 Close(TRUE);
830 }
831
832 void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
833 {
834 wxBeginBusyCursor();
835
836 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
837 dialog.ShowModal();
838
839 wxEndBusyCursor();
840 }
841
842 #if wxUSE_TOOLTIPS
843 void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
844 {
845 static long s_delay = 5000;
846
847 wxString delay;
848 delay.Printf( _T("%ld"), s_delay);
849
850 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
851 "Set tooltip delay",
852 delay,
853 this);
854 if ( !delay )
855 return; // cancelled
856
857 wxSscanf(delay, _T("%ld"), &s_delay);
858
859 wxToolTip::SetDelay(s_delay);
860
861 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
862 }
863
864 void MyFrame::OnToggleTooltips(wxCommandEvent& event)
865 {
866 static bool s_enabled = TRUE;
867
868 s_enabled = !s_enabled;
869
870 wxToolTip::Enable(s_enabled);
871
872 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
873 }
874 #endif // tooltips
875
876 void MyFrame::OnSize( wxSizeEvent& event )
877 {
878 wxString msg;
879 msg.Printf( _("%dx%d"), event.GetSize().x, event.GetSize().y);
880 SetStatusText(msg, 1);
881
882 event.Skip();
883 }
884
885 void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
886 {
887 // track the window which has the focus in the status bar
888 static wxWindow *s_windowFocus = (wxWindow *)NULL;
889 wxWindow *focus = wxWindow::FindFocus();
890 if ( focus && (focus != s_windowFocus) )
891 {
892 s_windowFocus = focus;
893
894 wxString msg;
895 msg.Printf(
896 #ifdef __WXMSW__
897 _T("Focus: wxWindow = %p, HWND = %08x"),
898 #else
899 _T("Focus: wxWindow = %p"),
900 #endif
901 s_windowFocus
902 #ifdef __WXMSW__
903 , s_windowFocus->GetHWND()
904 #endif
905 );
906
907 SetStatusText(msg);
908 }
909 }