]> git.saurik.com Git - wxWidgets.git/blame_incremental - samples/controls/controls.cpp
Added the forgotten file txtstrm.tex
[wxWidgets.git] / samples / controls / controls.cpp
... / ...
CommitLineData
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
60class MyApp: public wxApp
61{
62public:
63 bool OnInit();
64};
65
66class MyPanel: public wxPanel
67{
68public:
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
111private:
112 DECLARE_EVENT_TABLE()
113};
114
115class MyFrame: public wxFrame
116{
117public:
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
129private:
130 DECLARE_EVENT_TABLE()
131};
132
133//----------------------------------------------------------------------
134// main()
135//----------------------------------------------------------------------
136
137IMPLEMENT_APP(MyApp)
138
139//----------------------------------------------------------------------
140// MyApp
141//----------------------------------------------------------------------
142
143enum
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
154bool 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
198const int ID_NOTEBOOK = 1000;
199
200const int ID_LISTBOX = 130;
201const int ID_LISTBOX_SEL_NUM = 131;
202const int ID_LISTBOX_SEL_STR = 132;
203const int ID_LISTBOX_CLEAR = 133;
204const int ID_LISTBOX_APPEND = 134;
205const int ID_LISTBOX_DELETE = 135;
206const int ID_LISTBOX_FONT = 136;
207const int ID_LISTBOX_ENABLE = 137;
208
209const int ID_CHOICE = 120;
210const int ID_CHOICE_SEL_NUM = 121;
211const int ID_CHOICE_SEL_STR = 122;
212const int ID_CHOICE_CLEAR = 123;
213const int ID_CHOICE_APPEND = 124;
214const int ID_CHOICE_DELETE = 125;
215const int ID_CHOICE_FONT = 126;
216const int ID_CHOICE_ENABLE = 127;
217
218const int ID_COMBO = 140;
219const int ID_COMBO_SEL_NUM = 141;
220const int ID_COMBO_SEL_STR = 142;
221const int ID_COMBO_CLEAR = 143;
222const int ID_COMBO_APPEND = 144;
223const int ID_COMBO_DELETE = 145;
224const int ID_COMBO_FONT = 146;
225const int ID_COMBO_ENABLE = 147;
226
227const int ID_RADIOBOX = 160;
228const int ID_RADIOBOX_SEL_NUM = 161;
229const int ID_RADIOBOX_SEL_STR = 162;
230const int ID_RADIOBOX_FONT = 163;
231const int ID_RADIOBOX_ENABLE = 164;
232
233const int ID_RADIOBUTTON_1 = 166;
234const int ID_RADIOBUTTON_2 = 167;
235
236const int ID_SET_FONT = 170;
237
238const int ID_GAUGE = 180;
239const int ID_SLIDER = 181;
240
241const int ID_SPIN = 182;
242const int ID_BTNPROGRESS = 183;
243
244BEGIN_EVENT_TABLE(MyPanel, wxPanel)
245EVT_SIZE ( MyPanel::OnSize)
246EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyPanel::OnPageChanging)
247EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
248EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
249EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
250EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
251EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
252EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
253EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
254EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
255EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
256EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
257EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
258EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
259EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
260EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
261EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
262EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
263EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
264EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
265EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
266EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
267EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
268EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
269EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
270EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
271EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
272EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
273EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
274EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
275EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
276EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
277EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
278EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
279EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
280#ifndef wxUSE_SPINBUTTON
281EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
282EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress)
283EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress)
284#endif
285END_EVENT_TABLE()
286
287MyPanel::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), wxRB_GROUP );
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 new wxButton(panel, -1, "Another button", wxPoint(250, 20));
495
496 m_notebook->AddPage(panel, "wxBitmapXXX");
497}
498
499void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
500{
501 int x = 0;
502 int y = 0;
503 GetClientSize( &x, &y );
504
505 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
506 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
507}
508
509void MyPanel::OnPageChanging( wxNotebookEvent &event )
510{
511 int selOld = event.GetOldSelection();
512 if ( selOld == 2 )
513 {
514 wxMessageBox("This demonstrates how a program may prevent the "
515 "page change from taking place - \n the current page will "
516 "stay the third one", "Control sample",
517 wxICON_INFORMATION | wxOK);
518
519 event.Veto();
520
521 return;
522 }
523
524 *m_text << "Notebook selection is being changed from " << selOld << "\n";
525}
526
527void MyPanel::OnPageChanged( wxNotebookEvent &event )
528{
529 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
530}
531
532void MyPanel::OnListBox( wxCommandEvent &event )
533{
534 m_text->AppendText( "ListBox event selection string is: " );
535 m_text->AppendText( event.GetString() );
536 m_text->AppendText( "\n" );
537 m_text->AppendText( "ListBox control selection string is: " );
538 m_text->AppendText( m_listbox->GetStringSelection() );
539 m_text->AppendText( "\n" );
540}
541
542void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
543{
544 m_text->AppendText( "ListBox double click string is: " );
545 m_text->AppendText( event.GetString() );
546 m_text->AppendText( "\n" );
547}
548
549void MyPanel::OnListBoxButtons( wxCommandEvent &event )
550{
551 switch (event.GetId())
552 {
553 case ID_LISTBOX_ENABLE:
554 {
555 m_text->AppendText("Checkbox clicked.\n");
556 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
557#if wxUSE_TOOLTIPS
558 if (event.GetInt())
559 cb->SetToolTip( "Click to enable listbox" );
560 else
561 cb->SetToolTip( "Click to disable listbox" );
562#endif // wxUSE_TOOLTIPS
563 m_listbox->Enable( event.GetInt() == 0 );
564 break;
565 }
566 case ID_LISTBOX_SEL_NUM:
567 {
568 m_listbox->SetSelection( 2 );
569 m_lbSelectThis->WarpPointer( 40, 14 );
570 break;
571 }
572 case ID_LISTBOX_SEL_STR:
573 {
574 m_listbox->SetStringSelection( "This" );
575 m_lbSelectNum->WarpPointer( 40, 14 );
576 break;
577 }
578 case ID_LISTBOX_CLEAR:
579 {
580 m_listbox->Clear();
581 break;
582 }
583 case ID_LISTBOX_APPEND:
584 {
585 m_listbox->Append( "Hi!" );
586 break;
587 }
588 case ID_LISTBOX_DELETE:
589 {
590 int idx = m_listbox->GetSelection();
591 m_listbox->Delete( idx );
592 break;
593 }
594 case ID_LISTBOX_FONT:
595 {
596 m_listbox->SetFont( *wxITALIC_FONT );
597 m_checkbox->SetFont( *wxITALIC_FONT );
598 break;
599 }
600 }
601}
602
603void MyPanel::OnChoice( wxCommandEvent &event )
604{
605 m_text->AppendText( "Choice event selection string is: " );
606 m_text->AppendText( event.GetString() );
607 m_text->AppendText( "\n" );
608 m_text->AppendText( "Choice control selection string is: " );
609 m_text->AppendText( m_choice->GetStringSelection() );
610 m_text->AppendText( "\n" );
611}
612
613void MyPanel::OnChoiceButtons( wxCommandEvent &event )
614{
615 switch (event.GetId())
616 {
617 case ID_CHOICE_ENABLE:
618 {
619 m_choice->Enable( event.GetInt() == 0 );
620 break;
621 }
622 case ID_CHOICE_SEL_NUM:
623 {
624 m_choice->SetSelection( 2 );
625 break;
626 }
627 case ID_CHOICE_SEL_STR:
628 {
629 m_choice->SetStringSelection( "This" );
630 break;
631 }
632 case ID_CHOICE_CLEAR:
633 {
634 m_choice->Clear();
635 break;
636 }
637 case ID_CHOICE_APPEND:
638 {
639 m_choice->Append( "Hi!" );
640 break;
641 }
642 case ID_CHOICE_DELETE:
643 {
644 int idx = m_choice->GetSelection();
645 m_choice->Delete( idx );
646 break;
647 }
648 case ID_CHOICE_FONT:
649 {
650 m_choice->SetFont( *wxITALIC_FONT );
651 break;
652 }
653 }
654}
655
656void MyPanel::OnCombo( wxCommandEvent &event )
657{
658 m_text->AppendText( "ComboBox event selection string is: " );
659 m_text->AppendText( event.GetString() );
660 m_text->AppendText( "\n" );
661 m_text->AppendText( "ComboBox control selection string is: " );
662 m_text->AppendText( m_combo->GetStringSelection() );
663 m_text->AppendText( "\n" );
664}
665
666void MyPanel::OnComboButtons( wxCommandEvent &event )
667{
668 switch (event.GetId())
669 {
670 case ID_COMBO_ENABLE:
671 {
672 m_combo->Enable( event.GetInt() == 0 );
673 break;
674 }
675 case ID_COMBO_SEL_NUM:
676 {
677 m_combo->SetSelection( 2 );
678 break;
679 }
680 case ID_COMBO_SEL_STR:
681 {
682 m_combo->SetStringSelection( "This" );
683 break;
684 }
685 case ID_COMBO_CLEAR:
686 {
687 m_combo->Clear();
688 break;
689 }
690 case ID_COMBO_APPEND:
691 {
692 m_combo->Append( "Hi!" );
693 break;
694 }
695 case ID_COMBO_DELETE:
696 {
697 int idx = m_combo->GetSelection();
698 m_combo->Delete( idx );
699 break;
700 }
701 case ID_COMBO_FONT:
702 {
703 m_combo->SetFont( *wxITALIC_FONT );
704 break;
705 }
706 }
707}
708
709void MyPanel::OnRadio( wxCommandEvent &event )
710{
711 m_text->AppendText( "RadioBox selection string is: " );
712 m_text->AppendText( event.GetString() );
713 m_text->AppendText( "\n" );
714}
715
716void MyPanel::OnRadioButtons( wxCommandEvent &event )
717{
718 switch (event.GetId())
719 {
720 case ID_RADIOBOX_ENABLE:
721 {
722 m_radio->Enable( event.GetInt() == 0 );
723 break;
724 }
725 case ID_RADIOBOX_SEL_NUM:
726 {
727 m_radio->SetSelection( 2 );
728 break;
729 }
730 case ID_RADIOBOX_SEL_STR:
731 {
732 m_radio->SetStringSelection( "This" );
733 break;
734 }
735 case ID_RADIOBOX_FONT:
736 {
737 m_radio->SetFont( *wxITALIC_FONT );
738 break;
739 }
740 }
741}
742
743void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
744{
745 m_fontButton->SetFont( *wxITALIC_FONT );
746 m_text->SetFont( *wxITALIC_FONT );
747}
748
749void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
750{
751 m_gauge->SetValue( m_slider->GetValue() );
752}
753
754#ifndef wxUSE_SPINBUTTON
755void MyPanel::OnSpinUpdate( wxSpinEvent &event )
756{
757 wxString value;
758 value.Printf( _T("%d"), event.GetPosition() );
759 m_spintext->SetValue( value );
760
761 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
762 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
763 m_spinbutton->GetValue());
764
765 m_text->AppendText(value);
766}
767
768void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
769{
770 event.Enable( m_spinbutton->GetValue() > 0 );
771}
772
773void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
774{
775 int max = m_spinbutton->GetValue();
776 wxProgressDialog dialog("Progress dialog example",
777 "An informative message",
778 max, // range
779 this, // parent
780 wxPD_CAN_ABORT | wxPD_APP_MODAL | wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME);
781
782
783 bool cont = TRUE;
784 for ( int i = 0; i < max && cont; i++ )
785 {
786 wxSleep(1);
787 if ( i == max - 1 )
788 {
789 cont = dialog.Update(i, "That's all, folks!");
790 }
791 else if ( i == max / 2 )
792 {
793 cont = dialog.Update(i, "Only a half left!");
794 }
795 else
796 {
797 cont = dialog.Update(i);
798 }
799 }
800
801 if ( !cont )
802 {
803 *m_text << "Progress dialog aborted!\n";
804 }
805 else
806 {
807 *m_text << "Countdown from " << max << " finished.\n";
808 }
809}
810
811#endif // wxUSE_SPINBUTTON
812
813MyPanel::~MyPanel()
814{
815 delete m_notebook->GetImageList();
816}
817
818//----------------------------------------------------------------------
819// MyFrame
820//----------------------------------------------------------------------
821
822BEGIN_EVENT_TABLE(MyFrame, wxFrame)
823EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
824EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
825#if wxUSE_TOOLTIPS
826EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
827EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
828#endif // wxUSE_TOOLTIPS
829EVT_SIZE(MyFrame::OnSize)
830EVT_IDLE(MyFrame::OnIdle)
831END_EVENT_TABLE()
832
833MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
834: wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
835{
836 CreateStatusBar(2);
837
838 (void)new MyPanel( this, 10, 10, 300, 100 );
839}
840
841void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
842{
843 Close(TRUE);
844}
845
846void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
847{
848 wxBeginBusyCursor();
849
850 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
851 dialog.ShowModal();
852
853 wxEndBusyCursor();
854}
855
856#if wxUSE_TOOLTIPS
857void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
858{
859 static long s_delay = 5000;
860
861 wxString delay;
862 delay.Printf( _T("%ld"), s_delay);
863
864 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
865 "Set tooltip delay",
866 delay,
867 this);
868 if ( !delay )
869 return; // cancelled
870
871 wxSscanf(delay, _T("%ld"), &s_delay);
872
873 wxToolTip::SetDelay(s_delay);
874
875 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
876}
877
878void MyFrame::OnToggleTooltips(wxCommandEvent& event)
879{
880 static bool s_enabled = TRUE;
881
882 s_enabled = !s_enabled;
883
884 wxToolTip::Enable(s_enabled);
885
886 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
887}
888#endif // tooltips
889
890void MyFrame::OnSize( wxSizeEvent& event )
891{
892 wxString msg;
893 msg.Printf( _("%dx%d"), event.GetSize().x, event.GetSize().y);
894 SetStatusText(msg, 1);
895
896 event.Skip();
897}
898
899void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
900{
901 // track the window which has the focus in the status bar
902 static wxWindow *s_windowFocus = (wxWindow *)NULL;
903 wxWindow *focus = wxWindow::FindFocus();
904 if ( focus && (focus != s_windowFocus) )
905 {
906 s_windowFocus = focus;
907
908 wxString msg;
909 msg.Printf(
910#ifdef __WXMSW__
911 _T("Focus: wxWindow = %p, HWND = %08x"),
912#else
913 _T("Focus: wxWindow = %p"),
914#endif
915 s_windowFocus
916#ifdef __WXMSW__
917 , s_windowFocus->GetHWND()
918#endif
919 );
920
921 SetStatusText(msg);
922 }
923}