]> git.saurik.com Git - wxWidgets.git/blame_incremental - samples/controls/controls.cpp
another makefile updated
[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 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
113private:
114 DECLARE_EVENT_TABLE()
115};
116
117class MyFrame: public wxFrame
118{
119public:
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
131private:
132 DECLARE_EVENT_TABLE()
133};
134
135//----------------------------------------------------------------------
136// main()
137//----------------------------------------------------------------------
138
139IMPLEMENT_APP(MyApp)
140
141//----------------------------------------------------------------------
142// MyApp
143//----------------------------------------------------------------------
144
145enum
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
156bool 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
200const int ID_NOTEBOOK = 1000;
201
202const int ID_LISTBOX = 130;
203const int ID_LISTBOX_SEL_NUM = 131;
204const int ID_LISTBOX_SEL_STR = 132;
205const int ID_LISTBOX_CLEAR = 133;
206const int ID_LISTBOX_APPEND = 134;
207const int ID_LISTBOX_DELETE = 135;
208const int ID_LISTBOX_FONT = 136;
209const int ID_LISTBOX_ENABLE = 137;
210
211const int ID_CHOICE = 120;
212const int ID_CHOICE_SEL_NUM = 121;
213const int ID_CHOICE_SEL_STR = 122;
214const int ID_CHOICE_CLEAR = 123;
215const int ID_CHOICE_APPEND = 124;
216const int ID_CHOICE_DELETE = 125;
217const int ID_CHOICE_FONT = 126;
218const int ID_CHOICE_ENABLE = 127;
219
220const int ID_COMBO = 140;
221const int ID_COMBO_SEL_NUM = 141;
222const int ID_COMBO_SEL_STR = 142;
223const int ID_COMBO_CLEAR = 143;
224const int ID_COMBO_APPEND = 144;
225const int ID_COMBO_DELETE = 145;
226const int ID_COMBO_FONT = 146;
227const int ID_COMBO_ENABLE = 147;
228
229const int ID_RADIOBOX = 160;
230const int ID_RADIOBOX_SEL_NUM = 161;
231const int ID_RADIOBOX_SEL_STR = 162;
232const int ID_RADIOBOX_FONT = 163;
233const int ID_RADIOBOX_ENABLE = 164;
234
235const int ID_RADIOBUTTON_1 = 166;
236const int ID_RADIOBUTTON_2 = 167;
237
238const int ID_SET_FONT = 170;
239
240const int ID_GAUGE = 180;
241const int ID_SLIDER = 181;
242
243const int ID_SPIN = 182;
244const int ID_BTNPROGRESS = 183;
245
246BEGIN_EVENT_TABLE(MyPanel, wxPanel)
247EVT_SIZE ( MyPanel::OnSize)
248EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyPanel::OnPageChanging)
249EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
250EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
251EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
252EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
253EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
254EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
255EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
256EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
257EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
258EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
259EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
260EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
261EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
262EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
263EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
264EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
265EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
266EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
267EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
268EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
269EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
270EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
271EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
272EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
273EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
274EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
275EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
276EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
277EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
278EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
279EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
280EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
281EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
282#ifndef wxUSE_SPINBUTTON
283EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
284EVT_SPIN_UP (ID_SPIN, MyPanel::OnSpinUp)
285EVT_SPIN_DOWN (ID_SPIN, MyPanel::OnSpinDown)
286EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress)
287EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress)
288#endif
289END_EVENT_TABLE()
290
291MyPanel::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
506void 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
516void 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
536void MyPanel::OnPageChanged( wxNotebookEvent &event )
537{
538 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
539}
540
541void 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
551void 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
558void 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
612void 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
622void 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
665void 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
675void 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
718void 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
725void 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
752void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
753{
754 m_fontButton->SetFont( *wxITALIC_FONT );
755 m_text->SetFont( *wxITALIC_FONT );
756}
757
758void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
759{
760 m_gauge->SetValue( m_slider->GetValue() );
761}
762
763#ifndef wxUSE_SPINBUTTON
764void 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
780void 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
796void 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
809void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event )
810{
811 event.Enable( m_spinbutton->GetValue() > 0 );
812}
813
814void 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
858MyPanel::~MyPanel()
859{
860 delete m_notebook->GetImageList();
861}
862
863//----------------------------------------------------------------------
864// MyFrame
865//----------------------------------------------------------------------
866
867BEGIN_EVENT_TABLE(MyFrame, wxFrame)
868EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
869EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
870#if wxUSE_TOOLTIPS
871EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
872EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
873#endif // wxUSE_TOOLTIPS
874EVT_SIZE(MyFrame::OnSize)
875EVT_IDLE(MyFrame::OnIdle)
876END_EVENT_TABLE()
877
878MyFrame::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
886void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
887{
888 Close(TRUE);
889}
890
891void 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
902void 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
923void 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
935void 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
944void 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}