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 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
705 m_text
->AppendText( obj
->GetData() );
707 m_text
->AppendText( wxString("none") );
709 m_text
->AppendText( "'\n" );
710 m_text
->AppendText( "ListBox control client data string is: '" );
711 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
713 m_text
->AppendText( obj
->GetData() );
715 m_text
->AppendText( wxString("none") );
716 m_text
->AppendText( "'\n" );
719 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
721 m_text
->AppendText( "ListBox double click string is: " );
722 m_text
->AppendText( event
.GetString() );
723 m_text
->AppendText( "\n" );
726 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
728 switch (event
.GetId())
730 case ID_LISTBOX_ENABLE
:
732 m_text
->AppendText("Checkbox clicked.\n");
733 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
736 cb
->SetToolTip( "Click to enable listbox" );
738 cb
->SetToolTip( "Click to disable listbox" );
739 #endif // wxUSE_TOOLTIPS
740 m_listbox
->Enable( event
.GetInt() == 0 );
741 m_listboxSorted
->Enable( event
.GetInt() == 0 );
744 case ID_LISTBOX_SEL_NUM
:
746 m_listbox
->SetSelection( 2 );
747 m_listboxSorted
->SetSelection( 2 );
748 m_lbSelectThis
->WarpPointer( 40, 14 );
751 case ID_LISTBOX_SEL_STR
:
753 m_listbox
->SetStringSelection( "This" );
754 m_listboxSorted
->SetStringSelection( "This" );
755 m_lbSelectNum
->WarpPointer( 40, 14 );
758 case ID_LISTBOX_CLEAR
:
761 m_listboxSorted
->Clear();
764 case ID_LISTBOX_APPEND
:
766 m_listbox
->Append( "Hi!" );
767 m_listboxSorted
->Append( "Hi!" );
770 case ID_LISTBOX_DELETE
:
773 idx
= m_listbox
->GetSelection();
774 m_listbox
->Delete( idx
);
775 idx
= m_listboxSorted
->GetSelection();
776 m_listboxSorted
->Delete( idx
);
779 case ID_LISTBOX_FONT
:
781 m_listbox
->SetFont( *wxITALIC_FONT
);
782 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
783 m_checkbox
->SetFont( *wxITALIC_FONT
);
789 void MyPanel::OnChoice( wxCommandEvent
&event
)
791 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
794 m_text
->AppendText( "Choice event selection string is: '" );
795 m_text
->AppendText( event
.GetString() );
796 m_text
->AppendText( "'\n" );
797 m_text
->AppendText( "Choice control selection string is: '" );
798 m_text
->AppendText( choice
->GetStringSelection() );
799 m_text
->AppendText( "'\n" );
801 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
802 m_text
->AppendText( "Choice event client data string is: '" );
805 m_text
->AppendText( obj
->GetData() );
807 m_text
->AppendText( wxString("none") );
809 m_text
->AppendText( "'\n" );
810 m_text
->AppendText( "Choice control client data string is: '" );
811 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
814 m_text
->AppendText( obj
->GetData() );
816 m_text
->AppendText( wxString("none") );
817 m_text
->AppendText( "'\n" );
820 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
822 switch (event
.GetId())
824 case ID_CHOICE_ENABLE
:
826 m_choice
->Enable( event
.GetInt() == 0 );
827 m_choiceSorted
->Enable( event
.GetInt() == 0 );
830 case ID_CHOICE_SEL_NUM
:
832 m_choice
->SetSelection( 2 );
833 m_choiceSorted
->SetSelection( 2 );
836 case ID_CHOICE_SEL_STR
:
838 m_choice
->SetStringSelection( "This" );
839 m_choiceSorted
->SetStringSelection( "This" );
842 case ID_CHOICE_CLEAR
:
845 m_choiceSorted
->Clear();
848 case ID_CHOICE_APPEND
:
850 m_choice
->Append( "Hi!" );
851 m_choiceSorted
->Append( "Hi!" );
854 case ID_CHOICE_DELETE
:
856 int idx
= m_choice
->GetSelection();
857 m_choice
->Delete( idx
);
858 idx
= m_choiceSorted
->GetSelection();
859 m_choiceSorted
->Delete( idx
);
864 m_choice
->SetFont( *wxITALIC_FONT
);
865 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
871 void MyPanel::OnCombo( wxCommandEvent
&event
)
873 m_text
->AppendText( "ComboBox event selection string is: " );
874 m_text
->AppendText( event
.GetString() );
875 m_text
->AppendText( "\n" );
876 m_text
->AppendText( "ComboBox control selection string is: " );
877 m_text
->AppendText( m_combo
->GetStringSelection() );
878 m_text
->AppendText( "\n" );
881 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
883 switch (event
.GetId())
885 case ID_COMBO_ENABLE
:
887 m_combo
->Enable( event
.GetInt() == 0 );
890 case ID_COMBO_SEL_NUM
:
892 m_combo
->SetSelection( 2 );
895 case ID_COMBO_SEL_STR
:
897 m_combo
->SetStringSelection( "This" );
905 case ID_COMBO_APPEND
:
907 m_combo
->Append( "Hi!" );
910 case ID_COMBO_DELETE
:
912 int idx
= m_combo
->GetSelection();
913 m_combo
->Delete( idx
);
918 m_combo
->SetFont( *wxITALIC_FONT
);
924 void MyPanel::OnRadio( wxCommandEvent
&event
)
926 m_text
->AppendText( "RadioBox selection string is: " );
927 m_text
->AppendText( event
.GetString() );
928 m_text
->AppendText( "\n" );
931 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
933 switch (event
.GetId())
935 case ID_RADIOBOX_ENABLE
:
937 m_radio
->Enable( event
.GetInt() == 0 );
940 case ID_RADIOBOX_SEL_NUM
:
942 m_radio
->SetSelection( 2 );
945 case ID_RADIOBOX_SEL_STR
:
947 m_radio
->SetStringSelection( "This" );
950 case ID_RADIOBOX_FONT
:
952 m_radio
->SetFont( *wxITALIC_FONT
);
958 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
960 m_fontButton
->SetFont( *wxITALIC_FONT
);
961 m_text
->SetFont( *wxITALIC_FONT
);
964 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
966 static bool s_long
= TRUE
;
969 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
972 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
974 m_gauge
->SetValue( m_slider
->GetValue() );
979 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
982 s
.Printf(_T("Current value of spin ctrl is %d\n"), m_spinctrl
->GetValue());
983 m_text
->AppendText(s
);
986 #endif // wxUSE_SPINCTRL
989 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
992 value
.Printf( _T("Spin control up: current = %d\n"),
993 m_spinbutton
->GetValue());
995 if ( m_spinbutton
->GetValue() > 17 )
997 value
+= _T("Preventing the spin button from going above 17.\n");
1002 m_text
->AppendText(value
);
1005 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1008 value
.Printf( _T("Spin control down: current = %d\n"),
1009 m_spinbutton
->GetValue());
1011 if ( m_spinbutton
->GetValue() < -17 )
1013 value
+= _T("Preventing the spin button from going below -17.\n");
1018 m_text
->AppendText(value
);
1021 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1024 value
.Printf( _T("%d"), event
.GetPosition() );
1025 m_spintext
->SetValue( value
);
1027 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1028 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1029 m_spinbutton
->GetValue());
1031 m_text
->AppendText(value
);
1034 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1036 event
.Enable( m_spinbutton
->GetValue() > 0 );
1039 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1041 int max
= m_spinbutton
->GetValue();
1042 wxProgressDialog
dialog("Progress dialog example",
1043 "An informative message",
1049 wxPD_ESTIMATED_TIME
|
1050 wxPD_REMAINING_TIME
);
1054 for ( int i
= 0; i
< max
&& cont
; i
++ )
1059 cont
= dialog
.Update(i
, "That's all, folks!");
1061 else if ( i
== max
/ 2 )
1063 cont
= dialog
.Update(i
, "Only a half left!");
1067 cont
= dialog
.Update(i
);
1073 *m_text
<< "Progress dialog aborted!\n";
1077 *m_text
<< "Countdown from " << max
<< " finished.\n";
1081 #endif // wxUSE_SPINBUTTON
1085 delete m_notebook
->GetImageList();
1088 //----------------------------------------------------------------------
1090 //----------------------------------------------------------------------
1092 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1093 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1094 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1096 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1097 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1098 #endif // wxUSE_TOOLTIPS
1100 EVT_MENU(MINIMAL_ENABLE_ALL
, MyFrame::OnEnableAll
)
1102 EVT_SIZE(MyFrame::OnSize
)
1103 EVT_IDLE(MyFrame::OnIdle
)
1106 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1107 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1111 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1114 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1119 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1121 wxBeginBusyCursor();
1123 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1130 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1132 static long s_delay
= 5000;
1135 delay
.Printf( _T("%ld"), s_delay
);
1137 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1138 "Set tooltip delay",
1142 return; // cancelled
1144 wxSscanf(delay
, _T("%ld"), &s_delay
);
1146 wxToolTip::SetDelay(s_delay
);
1148 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1151 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1153 static bool s_enabled
= TRUE
;
1155 s_enabled
= !s_enabled
;
1157 wxToolTip::Enable(s_enabled
);
1159 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1163 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1165 static bool s_enable
= TRUE
;
1167 s_enable
= !s_enable
;
1168 m_panel
->Enable(s_enable
);
1171 void MyFrame::OnSize( wxSizeEvent
& event
)
1174 msg
.Printf( _("%dx%d"), event
.GetSize().x
, event
.GetSize().y
);
1175 SetStatusText(msg
, 1);
1180 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1182 // track the window which has the focus in the status bar
1183 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1184 wxWindow
*focus
= wxWindow::FindFocus();
1185 if ( focus
&& (focus
!= s_windowFocus
) )
1187 s_windowFocus
= focus
;
1192 _T("Focus: wxWindow = %p, HWND = %08x"),
1194 _T("Focus: wxWindow = %p"),
1198 , s_windowFocus
->GetHWND()
1206 static void SetControlClientData(const char *name
,
1207 wxControlWithItems
*control
)
1209 size_t count
= control
->GetCount();
1210 for ( size_t n
= 0; n
< count
; n
++ )
1213 s
.Printf("%s client data for '%s'",
1214 name
, control
->GetString(n
).c_str());
1216 control
->SetClientObject(n
, new wxStringClientData(s
));