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