1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Controls wxWindows sample
4 // Author: Robert Roebling
7 // Copyright: (c) Robert Roebling, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
12 #pragma implementation "controls.h"
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
26 #if !defined( __WXMSW__ ) || defined( __WIN95__ )
27 #include "wx/spinbutt.h"
29 #include "wx/notebook.h"
30 #include "wx/imaglist.h"
33 #include "wx/tooltip.h"
36 #if defined(__WXGTK__) || defined(__WXMOTIF__)
41 #include "mondrian.xpm"
42 #include "icons/choice.xpm"
43 #include "icons/combo.xpm"
44 #include "icons/list.xpm"
45 #include "icons/radio.xpm"
46 #include "icons/text.xpm"
47 #include "icons/gauge.xpm"
51 // Win16 doesn't have them
52 #undef wxUSE_SPINBUTTON
53 #define wxUSE_SPINBUTTON 0
55 #if !defined(wxUSE_SPINBUTTON)
56 #define wxUSE_SPINBUTTON 1
60 #include "wx/progdlg.h"
62 // VZ: this is a temp. hack, will remove soon
63 #define wxUSE_SPINCTRL 1
66 #include "wx/spinctrl.h"
67 #endif // wxUSE_SPINCTRL
69 //----------------------------------------------------------------------
71 //----------------------------------------------------------------------
73 class MyApp
: public wxApp
79 class MyPanel
: public wxPanel
82 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
85 void OnSize( wxSizeEvent
& event
);
86 void OnListBox( wxCommandEvent
&event
);
87 void OnListBoxDoubleClick( wxCommandEvent
&event
);
88 void OnListBoxButtons( wxCommandEvent
&event
);
89 void OnChoice( wxCommandEvent
&event
);
90 void OnChoiceButtons( wxCommandEvent
&event
);
91 void OnCombo( wxCommandEvent
&event
);
92 void OnComboButtons( wxCommandEvent
&event
);
93 void OnRadio( wxCommandEvent
&event
);
94 void OnRadioButtons( wxCommandEvent
&event
);
95 void OnSetFont( wxCommandEvent
&event
);
96 void OnPageChanged( wxNotebookEvent
&event
);
97 void OnPageChanging( wxNotebookEvent
&event
);
98 void OnSliderUpdate( wxCommandEvent
&event
);
99 void OnUpdateLabel( wxCommandEvent
&event
);
101 void OnSpinUp( wxSpinEvent
&event
);
102 void OnSpinDown( wxSpinEvent
&event
);
103 void OnSpinUpdate( wxSpinEvent
&event
);
104 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
105 void OnShowProgress( wxCommandEvent
&event
);
106 #endif // wxUSE_SPINBUTTON
109 void OnSpinCtrl(wxSpinEvent
& event
);
110 #endif // wxUSE_SPINCTRL
112 void OnEnableAll(wxCommandEvent
& event
);
113 void OnChangeColour(wxCommandEvent
& event
);
115 wxListBox
*m_listbox
,
123 wxButton
*m_fontButton
;
124 wxButton
*m_lbSelectNum
;
125 wxButton
*m_lbSelectThis
;
127 wxSpinButton
*m_spinbutton
;
128 wxButton
*m_btnProgress
;
129 #endif // wxUSE_SPINBUTTON
132 wxSpinCtrl
*m_spinctrl
;
133 #endif // wxUSE_SPINCTRL
135 wxTextCtrl
*m_spintext
;
136 wxCheckBox
*m_checkbox
;
139 wxNotebook
*m_notebook
;
141 wxStaticText
*m_label
;
144 DECLARE_EVENT_TABLE()
147 class MyFrame
: public wxFrame
150 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
152 void OnQuit(wxCommandEvent
& event
);
153 void OnAbout(wxCommandEvent
& event
);
156 void OnSetTooltipDelay(wxCommandEvent
& event
);
157 void OnToggleTooltips(wxCommandEvent
& event
);
158 #endif // wxUSE_TOOLTIPS
160 void OnEnableAll(wxCommandEvent
& event
);
162 void OnIdle( wxIdleEvent
& event
);
163 void OnSize( wxSizeEvent
& event
);
168 DECLARE_EVENT_TABLE()
171 //----------------------------------------------------------------------
173 //----------------------------------------------------------------------
175 static void SetControlClientData(const char *name
,
176 wxControlWithItems
*control
);
180 //----------------------------------------------------------------------
182 //----------------------------------------------------------------------
191 MINIMAL_SET_TOOLTIP_DELAY
= 200,
192 MINIMAL_ENABLE_TOOLTIPS
,
200 // Create the main frame window
201 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
202 "Controls wxWindows App",
206 // The wxICON() macros loads an icon from a resource under Windows
207 // and uses an #included XPM image under GTK+ and Motif
209 frame
->SetIcon( wxICON(mondrian
) );
211 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
212 file_menu
->Append(MINIMAL_ABOUT
, "&About\tF1");
213 file_menu
->AppendSeparator();
214 file_menu
->Append(MINIMAL_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
216 wxMenuBar
*menu_bar
= new wxMenuBar
;
217 menu_bar
->Append(file_menu
, "&File");
220 wxMenu
*tooltip_menu
= new wxMenu
;
221 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
222 tooltip_menu
->AppendSeparator();
223 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
224 "enable/disable tooltips", TRUE
);
225 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
226 menu_bar
->Append(tooltip_menu
, "&Tooltips");
227 #endif // wxUSE_TOOLTIPS
229 wxMenu
*panel_menu
= new wxMenu
;
230 panel_menu
->Append(MINIMAL_ENABLE_ALL
, "&Disable all\tCtrl-E",
231 "Enable/disable all panel controls", TRUE
);
232 menu_bar
->Append(panel_menu
, "&Panel");
234 frame
->SetMenuBar(menu_bar
);
237 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
244 //----------------------------------------------------------------------
246 //----------------------------------------------------------------------
248 const int ID_NOTEBOOK
= 1000;
250 const int ID_LISTBOX
= 130;
251 const int ID_LISTBOX_SEL_NUM
= 131;
252 const int ID_LISTBOX_SEL_STR
= 132;
253 const int ID_LISTBOX_CLEAR
= 133;
254 const int ID_LISTBOX_APPEND
= 134;
255 const int ID_LISTBOX_DELETE
= 135;
256 const int ID_LISTBOX_FONT
= 136;
257 const int ID_LISTBOX_ENABLE
= 137;
258 const int ID_LISTBOX_SORTED
= 138;
260 const int ID_CHOICE
= 120;
261 const int ID_CHOICE_SEL_NUM
= 121;
262 const int ID_CHOICE_SEL_STR
= 122;
263 const int ID_CHOICE_CLEAR
= 123;
264 const int ID_CHOICE_APPEND
= 124;
265 const int ID_CHOICE_DELETE
= 125;
266 const int ID_CHOICE_FONT
= 126;
267 const int ID_CHOICE_ENABLE
= 127;
268 const int ID_CHOICE_SORTED
= 128;
270 const int ID_COMBO
= 140;
271 const int ID_COMBO_SEL_NUM
= 141;
272 const int ID_COMBO_SEL_STR
= 142;
273 const int ID_COMBO_CLEAR
= 143;
274 const int ID_COMBO_APPEND
= 144;
275 const int ID_COMBO_DELETE
= 145;
276 const int ID_COMBO_FONT
= 146;
277 const int ID_COMBO_ENABLE
= 147;
279 const int ID_RADIOBOX
= 160;
280 const int ID_RADIOBOX_SEL_NUM
= 161;
281 const int ID_RADIOBOX_SEL_STR
= 162;
282 const int ID_RADIOBOX_FONT
= 163;
283 const int ID_RADIOBOX_ENABLE
= 164;
285 const int ID_RADIOBUTTON_1
= 166;
286 const int ID_RADIOBUTTON_2
= 167;
288 const int ID_SET_FONT
= 170;
290 const int ID_GAUGE
= 180;
291 const int ID_SLIDER
= 181;
293 const int ID_SPIN
= 182;
294 const int ID_BTNPROGRESS
= 183;
295 const int ID_BUTTON_LABEL
= 184;
296 const int ID_SPINCTRL
= 185;
298 const int ID_CHANGE_COLOUR
= 200;
300 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
301 EVT_SIZE ( MyPanel::OnSize
)
302 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
303 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
304 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
305 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
306 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
307 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
308 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
309 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
310 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
311 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
312 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
313 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
314 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
315 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
316 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
317 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
318 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
319 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
320 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
321 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
322 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
323 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
324 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
325 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
326 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
327 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
328 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
329 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
330 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
331 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
332 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
333 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
334 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
335 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
336 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
337 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
339 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
340 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
341 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
342 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
343 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
344 #endif // wxUSE_SPINBUTTON
346 EVT_SPIN (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
347 #endif // wxUSE_SPINCTRL
348 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
349 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
352 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
353 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
354 m_text(NULL
), m_notebook(NULL
)
356 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
357 // m_text->SetBackgroundColour("wheat");
359 delete wxLog::SetActiveTarget(new wxLogStderr
);
361 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
376 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
379 // fill the image list
380 wxImageList
*imagelist
= new wxImageList(32, 32);
382 imagelist
-> Add( wxBitmap( list_xpm
));
383 imagelist
-> Add( wxBitmap( choice_xpm
));
384 imagelist
-> Add( wxBitmap( combo_xpm
));
385 imagelist
-> Add( wxBitmap( text_xpm
));
386 imagelist
-> Add( wxBitmap( radio_xpm
));
387 imagelist
-> Add( wxBitmap( gauge_xpm
));
388 m_notebook
->SetImageList(imagelist
);
389 #elif defined(__WXMSW__)
390 // load images from resources
393 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
395 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
397 static const char *s_iconNames
[Image_Max
] =
399 "list", "choice", "combo", "text", "radio", "gauge"
402 for ( size_t n
= 0; n
< Image_Max
; n
++ )
404 wxBitmap
bmp(s_iconNames
[n
]);
405 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
407 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
412 m_notebook
->SetImageList(imagelist
);
416 #define Image_List -1
417 #define Image_Choice -1
418 #define Image_Combo -1
419 #define Image_Text -1
420 #define Image_Radio -1
421 #define Image_Gauge -1
426 wxPanel
*panel
= new wxPanel(m_notebook
);
427 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
428 wxPoint(10,10), wxSize(120,70),
429 5, choices
, wxLB_ALWAYS_SB
);
430 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
431 wxPoint(10,90), wxSize(120,70),
432 5, choices
, wxLB_SORT
);
434 SetControlClientData("listbox", m_listbox
);
435 SetControlClientData("listbox", m_listboxSorted
);
437 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
439 m_listbox
->SetToolTip( "This is a list box" );
440 #endif // wxUSE_TOOLTIPS
442 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
443 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
444 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
445 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
446 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
447 wxButton
*button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
449 button
->SetToolTip( "Press here to set italic font" );
450 #endif // wxUSE_TOOLTIPS
452 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
453 m_checkbox
->SetValue(FALSE
);
455 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
456 #endif // wxUSE_TOOLTIPS
457 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
459 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
461 panel
= new wxPanel(m_notebook
);
462 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
463 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
464 5, choices
, wxCB_SORT
);
466 SetControlClientData("choice", m_choice
);
467 SetControlClientData("choice", m_choiceSorted
);
469 m_choice
->SetSelection(2);
470 m_choice
->SetBackgroundColour( "red" );
471 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
472 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
473 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
474 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
475 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
476 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
477 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
479 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
481 panel
= new wxPanel(m_notebook
);
482 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(10,10), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
483 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
484 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
485 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
486 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
487 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
488 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
489 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
490 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
492 wxString choices2
[] =
496 "Fourth", "Fifth", "Sixth",
497 "Seventh", "Eighth", "Nineth", "Tenth" */
500 panel
= new wxPanel(m_notebook
);
501 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
502 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
503 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
504 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
505 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
506 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
507 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
508 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30), wxRB_GROUP
);
509 rb
->SetValue( FALSE
);
510 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
511 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
513 panel
= new wxPanel(m_notebook
);
514 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
515 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
516 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
517 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(220,10), wxSize(270,130) );
519 // No wrapping text in wxStaticText yet :-(
520 (void)new wxStaticText( panel
, -1,
526 (void)new wxStaticText( panel
, -1,
527 "In order see the gauge (aka progress bar)\n"
528 "control do something you have to drag the\n"
529 "handle of the slider to the right.\n"
531 "This is also supposed to demonstrate how\n"
532 "to use static controls.\n",
537 int initialSpinValue
= -5;
539 s
<< initialSpinValue
;
540 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
542 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
543 m_spinbutton
->SetRange(-10,30);
544 m_spinbutton
->SetValue(initialSpinValue
);
546 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "Show progress dialog",
548 #endif // wxUSE_SPINBUTTON
551 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
552 m_spinctrl
->SetRange(10,30);
553 m_spinctrl
->SetValue(15);
554 #endif // wxUSE_SPINCTRL
556 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
558 panel
= new wxPanel(m_notebook
);
560 #ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
561 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
562 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
, wxPoint(10, 10));
564 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
565 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
568 wxBitmap
bitmap( 100, 100 );
570 dc
.SelectObject( bitmap
);
571 dc
.SetPen(*wxGREEN_PEN
);
572 dc
.DrawEllipse(5, 5, 90, 90);
573 dc
.DrawText("Bitmap", 20, 20);
574 dc
.SelectObject( wxNullBitmap
);
576 (void)new wxBitmapButton(panel
, -1, bitmap
, wxPoint(100, 20));
577 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "Toggle label", wxPoint(250, 20));
578 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
579 wxPoint(250, 60), wxDefaultSize
,
580 wxALIGN_RIGHT
| wxST_NO_AUTORESIZE
);
582 m_notebook
->AddPage(panel
, "wxBitmapXXX");
584 // --------------- TEST CODE ----------------------
586 // layout constraints
588 panel
= new wxPanel(m_notebook
);
589 panel
->SetAutoLayout( TRUE
);
591 wxLayoutConstraints
*c
;
592 c
= new wxLayoutConstraints
;
593 c
->top
.SameAs( panel
, wxTop
, 10 );
595 c
->left
.SameAs( panel
, wxLeft
, 10 );
596 c
->width
.PercentOf( panel
, wxWidth
, 40 );
598 wxButton
*pMyButton
= new wxButton(panel
, -1, "Test Button" );
599 pMyButton
->SetConstraints( c
);
601 c
= new wxLayoutConstraints
;
602 c
->top
.SameAs( panel
, wxTop
, 10 );
603 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
604 c
->right
.SameAs( panel
, wxRight
, 10 );
605 c
->width
.PercentOf( panel
, wxWidth
, 40 );
607 wxButton
*pMyButton2
= new wxButton(panel
, -1, "Test Button 2" );
608 pMyButton2
->SetConstraints( c
);
610 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
614 panel
= new wxPanel(m_notebook
);
615 panel
->SetAutoLayout( TRUE
);
617 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
619 sizer
->Add( new wxButton(panel
, -1, "Test Button" ), 3, wxALL
, 10 );
620 sizer
->Add( 20,20, 1 );
621 sizer
->Add( new wxButton(panel
, -1, "Test Button 2" ), 3, wxGROW
|wxALL
, 10 );
623 panel
->SetSizer( sizer
);
625 m_notebook
->AddPage(panel
, "wxSizer");
627 // --------------- TEST CODE ----------------------
631 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
635 GetClientSize( &x
, &y
);
637 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
638 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
641 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
643 int selOld
= event
.GetOldSelection();
646 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
647 "page change from taking place - if you select\n"
648 "[No] the current page will stay the third one\n",
650 wxICON_QUESTION
| wxYES_NO
) != wxYES
)
658 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
661 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
663 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
666 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
668 static wxColour s_colOld
;
670 // test panel colour changing and propagation to the subcontrols
673 SetBackgroundColour(s_colOld
);
674 s_colOld
= wxNullColour
;
676 m_lbSelectThis
->SetBackgroundColour("blue");
680 s_colOld
= GetBackgroundColour();
681 SetBackgroundColour("green");
683 m_lbSelectThis
->SetBackgroundColour("red");
686 m_lbSelectThis
->Refresh();
690 void MyPanel::OnListBox( wxCommandEvent
&event
)
692 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
695 m_text
->AppendText( "ListBox event selection string is: '" );
696 m_text
->AppendText( event
.GetString() );
697 m_text
->AppendText( "'\n" );
698 m_text
->AppendText( "ListBox control selection string is: '" );
699 m_text
->AppendText( listbox
->GetStringSelection() );
700 m_text
->AppendText( "'\n" );
702 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
703 m_text
->AppendText( "ListBox event client data string is: '" );
704 m_text
->AppendText( obj
? obj
->GetData() : wxString("none"));
705 m_text
->AppendText( "'\n" );
706 m_text
->AppendText( "ListBox control client data string is: '" );
707 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
708 m_text
->AppendText( obj
? obj
->GetData() : wxString("none"));
709 m_text
->AppendText( "'\n" );
712 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
714 m_text
->AppendText( "ListBox double click string is: " );
715 m_text
->AppendText( event
.GetString() );
716 m_text
->AppendText( "\n" );
719 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
721 switch (event
.GetId())
723 case ID_LISTBOX_ENABLE
:
725 m_text
->AppendText("Checkbox clicked.\n");
726 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
729 cb
->SetToolTip( "Click to enable listbox" );
731 cb
->SetToolTip( "Click to disable listbox" );
732 #endif // wxUSE_TOOLTIPS
733 m_listbox
->Enable( event
.GetInt() == 0 );
734 m_listboxSorted
->Enable( event
.GetInt() == 0 );
737 case ID_LISTBOX_SEL_NUM
:
739 m_listbox
->SetSelection( 2 );
740 m_listboxSorted
->SetSelection( 2 );
741 m_lbSelectThis
->WarpPointer( 40, 14 );
744 case ID_LISTBOX_SEL_STR
:
746 m_listbox
->SetStringSelection( "This" );
747 m_listboxSorted
->SetStringSelection( "This" );
748 m_lbSelectNum
->WarpPointer( 40, 14 );
751 case ID_LISTBOX_CLEAR
:
754 m_listboxSorted
->Clear();
757 case ID_LISTBOX_APPEND
:
759 m_listbox
->Append( "Hi!" );
760 m_listboxSorted
->Append( "Hi!" );
763 case ID_LISTBOX_DELETE
:
766 idx
= m_listbox
->GetSelection();
767 m_listbox
->Delete( idx
);
768 idx
= m_listboxSorted
->GetSelection();
769 m_listboxSorted
->Delete( idx
);
772 case ID_LISTBOX_FONT
:
774 m_listbox
->SetFont( *wxITALIC_FONT
);
775 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
776 m_checkbox
->SetFont( *wxITALIC_FONT
);
782 void MyPanel::OnChoice( wxCommandEvent
&event
)
784 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
787 m_text
->AppendText( "Choice event selection string is: '" );
788 m_text
->AppendText( event
.GetString() );
789 m_text
->AppendText( "'\n" );
790 m_text
->AppendText( "Choice control selection string is: '" );
791 m_text
->AppendText( choice
->GetStringSelection() );
792 m_text
->AppendText( "'\n" );
794 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
795 m_text
->AppendText( "Choice event client data string is: '" );
796 m_text
->AppendText( obj
? obj
->GetData() : wxString("none"));
797 m_text
->AppendText( "'\n" );
798 m_text
->AppendText( "Choice control client data string is: '" );
799 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
800 m_text
->AppendText( obj
? obj
->GetData() : wxString("none"));
801 m_text
->AppendText( "'\n" );
804 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
806 switch (event
.GetId())
808 case ID_CHOICE_ENABLE
:
810 m_choice
->Enable( event
.GetInt() == 0 );
811 m_choiceSorted
->Enable( event
.GetInt() == 0 );
814 case ID_CHOICE_SEL_NUM
:
816 m_choice
->SetSelection( 2 );
817 m_choiceSorted
->SetSelection( 2 );
820 case ID_CHOICE_SEL_STR
:
822 m_choice
->SetStringSelection( "This" );
823 m_choiceSorted
->SetStringSelection( "This" );
826 case ID_CHOICE_CLEAR
:
829 m_choiceSorted
->Clear();
832 case ID_CHOICE_APPEND
:
834 m_choice
->Append( "Hi!" );
835 m_choiceSorted
->Append( "Hi!" );
838 case ID_CHOICE_DELETE
:
840 int idx
= m_choice
->GetSelection();
841 m_choice
->Delete( idx
);
842 idx
= m_choiceSorted
->GetSelection();
843 m_choiceSorted
->Delete( idx
);
848 m_choice
->SetFont( *wxITALIC_FONT
);
849 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
855 void MyPanel::OnCombo( wxCommandEvent
&event
)
857 m_text
->AppendText( "ComboBox event selection string is: " );
858 m_text
->AppendText( event
.GetString() );
859 m_text
->AppendText( "\n" );
860 m_text
->AppendText( "ComboBox control selection string is: " );
861 m_text
->AppendText( m_combo
->GetStringSelection() );
862 m_text
->AppendText( "\n" );
865 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
867 switch (event
.GetId())
869 case ID_COMBO_ENABLE
:
871 m_combo
->Enable( event
.GetInt() == 0 );
874 case ID_COMBO_SEL_NUM
:
876 m_combo
->SetSelection( 2 );
879 case ID_COMBO_SEL_STR
:
881 m_combo
->SetStringSelection( "This" );
889 case ID_COMBO_APPEND
:
891 m_combo
->Append( "Hi!" );
894 case ID_COMBO_DELETE
:
896 int idx
= m_combo
->GetSelection();
897 m_combo
->Delete( idx
);
902 m_combo
->SetFont( *wxITALIC_FONT
);
908 void MyPanel::OnRadio( wxCommandEvent
&event
)
910 m_text
->AppendText( "RadioBox selection string is: " );
911 m_text
->AppendText( event
.GetString() );
912 m_text
->AppendText( "\n" );
915 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
917 switch (event
.GetId())
919 case ID_RADIOBOX_ENABLE
:
921 m_radio
->Enable( event
.GetInt() == 0 );
924 case ID_RADIOBOX_SEL_NUM
:
926 m_radio
->SetSelection( 2 );
929 case ID_RADIOBOX_SEL_STR
:
931 m_radio
->SetStringSelection( "This" );
934 case ID_RADIOBOX_FONT
:
936 m_radio
->SetFont( *wxITALIC_FONT
);
942 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
944 m_fontButton
->SetFont( *wxITALIC_FONT
);
945 m_text
->SetFont( *wxITALIC_FONT
);
948 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
950 static bool s_long
= TRUE
;
953 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
956 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
958 m_gauge
->SetValue( m_slider
->GetValue() );
963 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
966 s
.Printf(_T("Current value of spin ctrl is %d\n"), m_spinctrl
->GetValue());
967 m_text
->AppendText(s
);
970 #endif // wxUSE_SPINCTRL
973 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
976 value
.Printf( _T("Spin control up: current = %d\n"),
977 m_spinbutton
->GetValue());
979 if ( m_spinbutton
->GetValue() > 17 )
981 value
+= _T("Preventing the spin button from going above 17.\n");
986 m_text
->AppendText(value
);
989 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
992 value
.Printf( _T("Spin control down: current = %d\n"),
993 m_spinbutton
->GetValue());
995 if ( m_spinbutton
->GetValue() < -17 )
997 value
+= _T("Preventing the spin button from going below -17.\n");
1002 m_text
->AppendText(value
);
1005 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1008 value
.Printf( _T("%d"), event
.GetPosition() );
1009 m_spintext
->SetValue( value
);
1011 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1012 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1013 m_spinbutton
->GetValue());
1015 m_text
->AppendText(value
);
1018 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1020 event
.Enable( m_spinbutton
->GetValue() > 0 );
1023 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1025 int max
= m_spinbutton
->GetValue();
1026 wxProgressDialog
dialog("Progress dialog example",
1027 "An informative message",
1033 wxPD_ESTIMATED_TIME
|
1034 wxPD_REMAINING_TIME
);
1038 for ( int i
= 0; i
< max
&& cont
; i
++ )
1043 cont
= dialog
.Update(i
, "That's all, folks!");
1045 else if ( i
== max
/ 2 )
1047 cont
= dialog
.Update(i
, "Only a half left!");
1051 cont
= dialog
.Update(i
);
1057 *m_text
<< "Progress dialog aborted!\n";
1061 *m_text
<< "Countdown from " << max
<< " finished.\n";
1065 #endif // wxUSE_SPINBUTTON
1069 delete m_notebook
->GetImageList();
1072 //----------------------------------------------------------------------
1074 //----------------------------------------------------------------------
1076 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1077 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1078 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1080 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1081 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1082 #endif // wxUSE_TOOLTIPS
1084 EVT_MENU(MINIMAL_ENABLE_ALL
, MyFrame::OnEnableAll
)
1086 EVT_SIZE(MyFrame::OnSize
)
1087 EVT_IDLE(MyFrame::OnIdle
)
1090 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1091 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1095 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1098 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1103 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1105 wxBeginBusyCursor();
1107 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1114 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1116 static long s_delay
= 5000;
1119 delay
.Printf( _T("%ld"), s_delay
);
1121 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1122 "Set tooltip delay",
1126 return; // cancelled
1128 wxSscanf(delay
, _T("%ld"), &s_delay
);
1130 wxToolTip::SetDelay(s_delay
);
1132 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1135 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1137 static bool s_enabled
= TRUE
;
1139 s_enabled
= !s_enabled
;
1141 wxToolTip::Enable(s_enabled
);
1143 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1147 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1149 static bool s_enable
= TRUE
;
1151 s_enable
= !s_enable
;
1152 m_panel
->Enable(s_enable
);
1155 void MyFrame::OnSize( wxSizeEvent
& event
)
1158 msg
.Printf( _("%dx%d"), event
.GetSize().x
, event
.GetSize().y
);
1159 SetStatusText(msg
, 1);
1164 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1166 // track the window which has the focus in the status bar
1167 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1168 wxWindow
*focus
= wxWindow::FindFocus();
1169 if ( focus
&& (focus
!= s_windowFocus
) )
1171 s_windowFocus
= focus
;
1176 _T("Focus: wxWindow = %p, HWND = %08x"),
1178 _T("Focus: wxWindow = %p"),
1182 , s_windowFocus
->GetHWND()
1190 static void SetControlClientData(const char *name
,
1191 wxControlWithItems
*control
)
1193 size_t count
= control
->GetCount();
1194 for ( size_t n
= 0; n
< count
; n
++ )
1197 s
.Printf("%s client data for '%s'",
1198 name
, control
->GetString(n
).c_str());
1200 control
->SetClientObject(n
, new wxStringClientData(s
));