]> git.saurik.com Git - wxWidgets.git/blob - samples/controls/controls.cpp
Unicode compilation fix, just for kicks (was bored after missing some
[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 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
402
403 panel = new wxPanel(m_notebook);
404 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(10,10), wxSize(120,-1), 5, choices, wxCB_READONLY );
405 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
406 (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
407 (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
408 (void)new wxButton( panel, ID_COMBO_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
409 (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
410 (void)new wxButton( panel, ID_COMBO_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
411 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
412 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
413
414 wxString choices2[] =
415 {
416 "First", "Second",
417 /* "Third",
418 "Fourth", "Fifth", "Sixth",
419 "Seventh", "Eighth", "Nineth", "Tenth" */
420 };
421
422 panel = new wxPanel(m_notebook);
423 (void)new wxRadioBox( panel, ID_RADIOBOX, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS );
424 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS );
425 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
426 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
427 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
428 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
429 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) );
430 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
431 rb->SetValue( FALSE );
432 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
433 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
434
435 panel = new wxPanel(m_notebook);
436 (void)new wxStaticBox( panel, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
437 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30) );
438 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS );
439 (void)new wxStaticBox( panel, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
440 #ifdef __WXMOTIF__
441 // No wrapping text in wxStaticText yet :-(
442 (void)new wxStaticText( panel, -1,
443 "Drag the slider!",
444 wxPoint(208,30),
445 wxSize(210, -1)
446 );
447 #else
448 (void)new wxStaticText( panel, -1,
449 "In order see the gauge (aka progress bar)\n"
450 "control do something you have to drag the\n"
451 "handle of the slider to the right.\n"
452 "\n"
453 "This is also supposed to demonstrate how\n"
454 "to use static controls.\n",
455 wxPoint(208,25),
456 wxSize(250, 110)
457 );
458 #endif
459 m_spintext = new wxTextCtrl( panel, -1, "0", wxPoint(20,160), wxSize(80,-1) );
460 #ifndef wxUSE_SPINBUTTON
461 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) );
462 m_spinbutton->SetRange(-10,30);
463 m_spinbutton->SetValue(-5);
464
465 m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "Show progress dialog",
466 wxPoint(208, 159) );
467 #endif
468 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
469
470 panel = new wxPanel(m_notebook);
471 wxIcon icon = wxTheApp->GetStdIcon(wxICON_INFORMATION);
472 wxStaticBitmap *bmpStatic = new wxStaticBitmap(panel, -1, icon, wxPoint(10, 10));
473
474 bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10));
475 bmpStatic->SetIcon(wxTheApp->GetStdIcon(wxICON_QUESTION));
476
477 wxBitmap bitmap( 100, 100 );
478 wxMemoryDC dc;
479 dc.SelectObject( bitmap );
480 dc.SetPen(*wxGREEN_PEN);
481 dc.DrawEllipse(5, 5, 90, 90);
482 dc.DrawText("Bitmap", 20, 20);
483 dc.SelectObject( wxNullBitmap );
484
485 wxBitmapButton *bmpBtn = new wxBitmapButton
486 (
487 panel,
488 -1,
489 bitmap,
490 wxPoint(100, 20)
491 );
492 bmpBtn = NULL; // suppress warning
493
494 m_notebook->AddPage(panel, "wxBitmapXXX");
495 }
496
497 void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
498 {
499 int x = 0;
500 int y = 0;
501 GetClientSize( &x, &y );
502
503 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
504 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
505 }
506
507 void MyPanel::OnPageChanging( wxNotebookEvent &event )
508 {
509 int selOld = event.GetOldSelection();
510 if ( selOld == 2 )
511 {
512 wxMessageBox("This demonstrates how a program may prevent the "
513 "page change from taking place - \n the current page will "
514 "stay the third one", "Control sample",
515 wxICON_INFORMATION | wxOK);
516
517 event.Veto();
518
519 return;
520 }
521
522 *m_text << "Notebook selection is being changed from " << selOld << "\n";
523 }
524
525 void MyPanel::OnPageChanged( wxNotebookEvent &event )
526 {
527 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
528 }
529
530 void MyPanel::OnListBox( wxCommandEvent &event )
531 {
532 m_text->AppendText( "ListBox event selection string is: " );
533 m_text->AppendText( event.GetString() );
534 m_text->AppendText( "\n" );
535 m_text->AppendText( "ListBox control selection string is: " );
536 m_text->AppendText( m_listbox->GetStringSelection() );
537 m_text->AppendText( "\n" );
538 }
539
540 void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
541 {
542 m_text->AppendText( "ListBox double click string is: " );
543 m_text->AppendText( event.GetString() );
544 m_text->AppendText( "\n" );
545 }
546
547 void MyPanel::OnListBoxButtons( wxCommandEvent &event )
548 {
549 switch (event.GetId())
550 {
551 case ID_LISTBOX_ENABLE:
552 {
553 m_text->AppendText("Checkbox clicked.\n");
554 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
555 #if wxUSE_TOOLTIPS
556 if (event.GetInt())
557 cb->SetToolTip( "Click to enable listbox" );
558 else
559 cb->SetToolTip( "Click to disable listbox" );
560 #endif // wxUSE_TOOLTIPS
561 m_listbox->Enable( event.GetInt() == 0 );
562 break;
563 }
564 case ID_LISTBOX_SEL_NUM:
565 {
566 m_listbox->SetSelection( 2 );
567 m_lbSelectThis->WarpPointer( 40, 14 );
568 break;
569 }
570 case ID_LISTBOX_SEL_STR:
571 {
572 m_listbox->SetStringSelection( "This" );
573 m_lbSelectNum->WarpPointer( 40, 14 );
574 break;
575 }
576 case ID_LISTBOX_CLEAR:
577 {
578 m_listbox->Clear();
579 break;
580 }
581 case ID_LISTBOX_APPEND:
582 {
583 m_listbox->Append( "Hi!" );
584 break;
585 }
586 case ID_LISTBOX_DELETE:
587 {
588 int idx = m_listbox->GetSelection();
589 m_listbox->Delete( idx );
590 break;
591 }
592 case ID_LISTBOX_FONT:
593 {
594 m_listbox->SetFont( *wxITALIC_FONT );
595 m_checkbox->SetFont( *wxITALIC_FONT );
596 break;
597 }
598 }
599 }
600
601 void MyPanel::OnChoice( wxCommandEvent &event )
602 {
603 m_text->AppendText( "Choice event selection string is: " );
604 m_text->AppendText( event.GetString() );
605 m_text->AppendText( "\n" );
606 m_text->AppendText( "Choice control selection string is: " );
607 m_text->AppendText( m_choice->GetStringSelection() );
608 m_text->AppendText( "\n" );
609 }
610
611 void MyPanel::OnChoiceButtons( wxCommandEvent &event )
612 {
613 switch (event.GetId())
614 {
615 case ID_CHOICE_ENABLE:
616 {
617 m_choice->Enable( event.GetInt() == 0 );
618 break;
619 }
620 case ID_CHOICE_SEL_NUM:
621 {
622 m_choice->SetSelection( 2 );
623 break;
624 }
625 case ID_CHOICE_SEL_STR:
626 {
627 m_choice->SetStringSelection( "This" );
628 break;
629 }
630 case ID_CHOICE_CLEAR:
631 {
632 m_choice->Clear();
633 break;
634 }
635 case ID_CHOICE_APPEND:
636 {
637 m_choice->Append( "Hi!" );
638 break;
639 }
640 case ID_CHOICE_DELETE:
641 {
642 int idx = m_choice->GetSelection();
643 m_choice->Delete( idx );
644 break;
645 }
646 case ID_CHOICE_FONT:
647 {
648 m_choice->SetFont( *wxITALIC_FONT );
649 break;
650 }
651 }
652 }
653
654 void MyPanel::OnCombo( wxCommandEvent &event )
655 {
656 m_text->AppendText( "ComboBox event selection string is: " );
657 m_text->AppendText( event.GetString() );
658 m_text->AppendText( "\n" );
659 m_text->AppendText( "ComboBox control selection string is: " );
660 m_text->AppendText( m_combo->GetStringSelection() );
661 m_text->AppendText( "\n" );
662 }
663
664 void MyPanel::OnComboButtons( wxCommandEvent &event )
665 {
666 switch (event.GetId())
667 {
668 case ID_COMBO_ENABLE:
669 {
670 m_combo->Enable( event.GetInt() == 0 );
671 break;
672 }
673 case ID_COMBO_SEL_NUM:
674 {
675 m_combo->SetSelection( 2 );
676 break;
677 }
678 case ID_COMBO_SEL_STR:
679 {
680 m_combo->SetStringSelection( "This" );
681 break;
682 }
683 case ID_COMBO_CLEAR:
684 {
685 m_combo->Clear();
686 break;
687 }
688 case ID_COMBO_APPEND:
689 {
690 m_combo->Append( "Hi!" );
691 break;
692 }
693 case ID_COMBO_DELETE:
694 {
695 int idx = m_combo->GetSelection();
696 m_combo->Delete( idx );
697 break;
698 }
699 case ID_COMBO_FONT:
700 {
701 m_combo->SetFont( *wxITALIC_FONT );
702 break;
703 }
704 }
705 }
706
707 void MyPanel::OnRadio( wxCommandEvent &event )
708 {
709 m_text->AppendText( "RadioBox selection string is: " );
710 m_text->AppendText( event.GetString() );
711 m_text->AppendText( "\n" );
712 }
713
714 void MyPanel::OnRadioButtons( wxCommandEvent &event )
715 {
716 switch (event.GetId())
717 {
718 case ID_RADIOBOX_ENABLE:
719 {
720 m_radio->Enable( event.GetInt() == 0 );
721 break;
722 }
723 case ID_RADIOBOX_SEL_NUM:
724 {
725 m_radio->SetSelection( 2 );
726 break;
727 }
728 case ID_RADIOBOX_SEL_STR:
729 {
730 m_radio->SetStringSelection( "This" );
731 break;
732 }
733 case ID_RADIOBOX_FONT:
734 {
735 m_radio->SetFont( *wxITALIC_FONT );
736 break;
737 }
738 }
739 }
740
741 void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
742 {
743 m_fontButton->SetFont( *wxITALIC_FONT );
744 m_text->SetFont( *wxITALIC_FONT );
745 }
746
747 void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
748 {
749 m_gauge->SetValue( m_slider->GetValue() );
750 }
751
752 #ifndef wxUSE_SPINBUTTON
753 void MyPanel::OnSpinUpdate( wxSpinEvent &event )
754 {
755 wxString value;
756 value.Printf( _T("%d"), event.GetPosition() );
757 m_spintext->SetValue( value );
758
759 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
760 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
761 m_spinbutton->GetValue());
762
763 m_text->AppendText(value);
764 }
765
766 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
767 {
768 event.Enable( m_spinbutton->GetValue() > 0 );
769 }
770
771 void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
772 {
773 int max = m_spinbutton->GetValue();
774 wxProgressDialog dialog("Progress dialog example",
775 "An informative message",
776 max, // range
777 this, // parent
778 wxPD_CAN_ABORT | wxPD_APP_MODAL | wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME);
779
780
781 bool cont = TRUE;
782 for ( int i = 0; i < max && cont; i++ )
783 {
784 wxSleep(1);
785 if ( i == max - 1 )
786 {
787 cont = dialog.Update(i, "That's all, folks!");
788 }
789 else if ( i == max / 2 )
790 {
791 cont = dialog.Update(i, "Only a half left!");
792 }
793 else
794 {
795 cont = dialog.Update(i);
796 }
797 }
798
799 if ( !cont )
800 {
801 *m_text << "Progress dialog aborted!\n";
802 }
803 else
804 {
805 *m_text << "Countdown from " << max << " finished.\n";
806 }
807 }
808
809 #endif // wxUSE_SPINBUTTON
810
811 MyPanel::~MyPanel()
812 {
813 delete m_notebook->GetImageList();
814 }
815
816 //----------------------------------------------------------------------
817 // MyFrame
818 //----------------------------------------------------------------------
819
820 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
821 EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
822 EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
823 #if wxUSE_TOOLTIPS
824 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
825 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
826 #endif // wxUSE_TOOLTIPS
827 EVT_SIZE(MyFrame::OnSize)
828 EVT_IDLE(MyFrame::OnIdle)
829 END_EVENT_TABLE()
830
831 MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
832 : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
833 {
834 CreateStatusBar(2);
835
836 (void)new MyPanel( this, 10, 10, 300, 100 );
837 }
838
839 void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
840 {
841 Close(TRUE);
842 }
843
844 void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
845 {
846 wxBeginBusyCursor();
847
848 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
849 dialog.ShowModal();
850
851 wxEndBusyCursor();
852 }
853
854 #if wxUSE_TOOLTIPS
855 void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
856 {
857 static long s_delay = 5000;
858
859 wxString delay;
860 delay.Printf( _T("%ld"), s_delay);
861
862 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
863 "Set tooltip delay",
864 delay,
865 this);
866 if ( !delay )
867 return; // cancelled
868
869 wxSscanf(delay, _T("%ld"), &s_delay);
870
871 wxToolTip::SetDelay(s_delay);
872
873 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
874 }
875
876 void MyFrame::OnToggleTooltips(wxCommandEvent& event)
877 {
878 static bool s_enabled = TRUE;
879
880 s_enabled = !s_enabled;
881
882 wxToolTip::Enable(s_enabled);
883
884 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
885 }
886 #endif // tooltips
887
888 void MyFrame::OnSize( wxSizeEvent& event )
889 {
890 wxString msg;
891 msg.Printf( _("%dx%d"), event.GetSize().x, event.GetSize().y);
892 SetStatusText(msg, 1);
893
894 event.Skip();
895 }
896
897 void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
898 {
899 // track the window which has the focus in the status bar
900 static wxWindow *s_windowFocus = (wxWindow *)NULL;
901 wxWindow *focus = wxWindow::FindFocus();
902 if ( focus && (focus != s_windowFocus) )
903 {
904 s_windowFocus = focus;
905
906 wxString msg;
907 msg.Printf(
908 #ifdef __WXMSW__
909 _T("Focus: wxWindow = %p, HWND = %08x"),
910 #else
911 _T("Focus: wxWindow = %p"),
912 #endif
913 s_windowFocus
914 #ifdef __WXMSW__
915 , s_windowFocus->GetHWND()
916 #endif
917 );
918
919 SetStatusText(msg);
920 }
921 }