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
54 #define wxUSE_SPINBTN 0
56 #if !defined(wxUSE_SPINBTN)
57 #define wxUSE_SPINBTN 1
61 #include "wx/progdlg.h"
63 // VZ: this is a temp. hack, will remove soon
64 #ifndef wxUSE_SPINCTRL
65 #define wxUSE_SPINCTRL 1
69 #include "wx/spinctrl.h"
70 #endif // wxUSE_SPINCTRL
72 //----------------------------------------------------------------------
74 //----------------------------------------------------------------------
76 class MyApp
: public wxApp
82 class MyPanel
: public wxPanel
85 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
88 void OnSize( wxSizeEvent
& event
);
89 void OnListBox( wxCommandEvent
&event
);
90 void OnListBoxDoubleClick( wxCommandEvent
&event
);
91 void OnListBoxButtons( wxCommandEvent
&event
);
92 void OnChoice( wxCommandEvent
&event
);
93 void OnChoiceButtons( wxCommandEvent
&event
);
94 void OnCombo( wxCommandEvent
&event
);
95 void OnComboButtons( wxCommandEvent
&event
);
96 void OnRadio( wxCommandEvent
&event
);
97 void OnRadioButtons( wxCommandEvent
&event
);
98 void OnSetFont( wxCommandEvent
&event
);
99 void OnPageChanged( wxNotebookEvent
&event
);
100 void OnPageChanging( wxNotebookEvent
&event
);
101 void OnSliderUpdate( wxCommandEvent
&event
);
102 void OnUpdateLabel( wxCommandEvent
&event
);
104 void OnSpinUp( wxSpinEvent
&event
);
105 void OnSpinDown( wxSpinEvent
&event
);
106 void OnSpinUpdate( wxSpinEvent
&event
);
107 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
108 void OnShowProgress( wxCommandEvent
&event
);
109 #endif // wxUSE_SPINBTN
112 void OnSpinCtrl(wxSpinEvent
& event
);
113 #endif // wxUSE_SPINCTRL
115 void OnEnableAll(wxCommandEvent
& event
);
116 void OnChangeColour(wxCommandEvent
& event
);
118 wxListBox
*m_listbox
,
126 wxButton
*m_fontButton
;
127 wxButton
*m_lbSelectNum
;
128 wxButton
*m_lbSelectThis
;
130 wxSpinButton
*m_spinbutton
;
131 wxButton
*m_btnProgress
;
132 #endif // wxUSE_SPINBTN
135 wxSpinCtrl
*m_spinctrl
;
136 #endif // wxUSE_SPINCTRL
138 wxTextCtrl
*m_spintext
;
139 wxCheckBox
*m_checkbox
;
142 wxNotebook
*m_notebook
;
144 wxStaticText
*m_label
;
147 DECLARE_EVENT_TABLE()
150 class MyFrame
: public wxFrame
153 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
155 void OnQuit(wxCommandEvent
& event
);
156 void OnAbout(wxCommandEvent
& event
);
159 void OnSetTooltipDelay(wxCommandEvent
& event
);
160 void OnToggleTooltips(wxCommandEvent
& event
);
161 #endif // wxUSE_TOOLTIPS
163 void OnEnableAll(wxCommandEvent
& event
);
165 void OnIdle( wxIdleEvent
& event
);
166 void OnSize( wxSizeEvent
& event
);
167 void OnMove( wxMoveEvent
& event
);
170 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
173 msg
.Printf(_("pos=(%d, %d), size=%dx%d"),
174 pos
.x
, pos
.y
, size
.x
, size
.y
);
175 SetStatusText(msg
, 1);
180 DECLARE_EVENT_TABLE()
183 //----------------------------------------------------------------------
185 //----------------------------------------------------------------------
187 static void SetControlClientData(const char *name
,
188 wxControlWithItems
*control
);
192 //----------------------------------------------------------------------
194 //----------------------------------------------------------------------
203 MINIMAL_SET_TOOLTIP_DELAY
= 200,
204 MINIMAL_ENABLE_TOOLTIPS
,
212 // Create the main frame window
213 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
214 "Controls wxWindows App",
218 // The wxICON() macros loads an icon from a resource under Windows
219 // and uses an #included XPM image under GTK+ and Motif
221 frame
->SetIcon( wxICON(mondrian
) );
223 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
224 file_menu
->Append(MINIMAL_ABOUT
, "&About\tF1");
225 file_menu
->AppendSeparator();
226 file_menu
->Append(MINIMAL_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
228 wxMenuBar
*menu_bar
= new wxMenuBar
;
229 menu_bar
->Append(file_menu
, "&File");
232 wxMenu
*tooltip_menu
= new wxMenu
;
233 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
234 tooltip_menu
->AppendSeparator();
235 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
236 "enable/disable tooltips", TRUE
);
237 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
238 menu_bar
->Append(tooltip_menu
, "&Tooltips");
239 #endif // wxUSE_TOOLTIPS
241 wxMenu
*panel_menu
= new wxMenu
;
242 panel_menu
->Append(MINIMAL_ENABLE_ALL
, "&Disable all\tCtrl-E",
243 "Enable/disable all panel controls", TRUE
);
244 menu_bar
->Append(panel_menu
, "&Panel");
246 frame
->SetMenuBar(menu_bar
);
249 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
256 //----------------------------------------------------------------------
258 //----------------------------------------------------------------------
260 const int ID_NOTEBOOK
= 1000;
262 const int ID_LISTBOX
= 130;
263 const int ID_LISTBOX_SEL_NUM
= 131;
264 const int ID_LISTBOX_SEL_STR
= 132;
265 const int ID_LISTBOX_CLEAR
= 133;
266 const int ID_LISTBOX_APPEND
= 134;
267 const int ID_LISTBOX_DELETE
= 135;
268 const int ID_LISTBOX_FONT
= 136;
269 const int ID_LISTBOX_ENABLE
= 137;
270 const int ID_LISTBOX_SORTED
= 138;
272 const int ID_CHOICE
= 120;
273 const int ID_CHOICE_SEL_NUM
= 121;
274 const int ID_CHOICE_SEL_STR
= 122;
275 const int ID_CHOICE_CLEAR
= 123;
276 const int ID_CHOICE_APPEND
= 124;
277 const int ID_CHOICE_DELETE
= 125;
278 const int ID_CHOICE_FONT
= 126;
279 const int ID_CHOICE_ENABLE
= 127;
280 const int ID_CHOICE_SORTED
= 128;
282 const int ID_COMBO
= 140;
283 const int ID_COMBO_SEL_NUM
= 141;
284 const int ID_COMBO_SEL_STR
= 142;
285 const int ID_COMBO_CLEAR
= 143;
286 const int ID_COMBO_APPEND
= 144;
287 const int ID_COMBO_DELETE
= 145;
288 const int ID_COMBO_FONT
= 146;
289 const int ID_COMBO_ENABLE
= 147;
291 const int ID_RADIOBOX
= 160;
292 const int ID_RADIOBOX_SEL_NUM
= 161;
293 const int ID_RADIOBOX_SEL_STR
= 162;
294 const int ID_RADIOBOX_FONT
= 163;
295 const int ID_RADIOBOX_ENABLE
= 164;
297 const int ID_RADIOBUTTON_1
= 166;
298 const int ID_RADIOBUTTON_2
= 167;
300 const int ID_SET_FONT
= 170;
302 const int ID_GAUGE
= 180;
303 const int ID_SLIDER
= 181;
305 const int ID_SPIN
= 182;
306 const int ID_BTNPROGRESS
= 183;
307 const int ID_BUTTON_LABEL
= 184;
308 const int ID_SPINCTRL
= 185;
310 const int ID_CHANGE_COLOUR
= 200;
312 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
313 EVT_SIZE ( MyPanel::OnSize
)
314 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
315 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
316 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
317 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
318 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
319 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
320 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
321 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
322 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
323 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
324 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
325 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
326 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
327 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
328 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
329 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
330 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
331 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
332 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
333 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
334 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
335 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
336 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
337 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
338 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
339 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
340 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
341 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
342 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
343 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
344 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
345 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
346 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
347 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
348 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
349 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
351 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
352 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
353 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
354 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
355 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
356 #endif // wxUSE_SPINBTN
358 EVT_SPIN (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
359 #endif // wxUSE_SPINCTRL
360 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
361 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
364 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
365 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
366 m_text(NULL
), m_notebook(NULL
)
368 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
369 // m_text->SetBackgroundColour("wheat");
371 delete wxLog::SetActiveTarget(new wxLogStderr
);
373 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
388 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
391 // fill the image list
392 wxImageList
*imagelist
= new wxImageList(32, 32);
394 imagelist
-> Add( wxBitmap( list_xpm
));
395 imagelist
-> Add( wxBitmap( choice_xpm
));
396 imagelist
-> Add( wxBitmap( combo_xpm
));
397 imagelist
-> Add( wxBitmap( text_xpm
));
398 imagelist
-> Add( wxBitmap( radio_xpm
));
399 imagelist
-> Add( wxBitmap( gauge_xpm
));
400 m_notebook
->SetImageList(imagelist
);
401 #elif defined(__WXMSW__)
402 // load images from resources
405 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
407 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
409 static const char *s_iconNames
[Image_Max
] =
411 "list", "choice", "combo", "text", "radio", "gauge"
414 for ( size_t n
= 0; n
< Image_Max
; n
++ )
416 wxBitmap
bmp(s_iconNames
[n
]);
417 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
419 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
424 m_notebook
->SetImageList(imagelist
);
428 #define Image_List -1
429 #define Image_Choice -1
430 #define Image_Combo -1
431 #define Image_Text -1
432 #define Image_Radio -1
433 #define Image_Gauge -1
438 wxPanel
*panel
= new wxPanel(m_notebook
);
439 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
440 wxPoint(10,10), wxSize(120,70),
441 5, choices
, wxLB_ALWAYS_SB
);
442 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
443 wxPoint(10,90), wxSize(120,70),
444 5, choices
, wxLB_SORT
);
446 SetControlClientData("listbox", m_listbox
);
447 SetControlClientData("listbox", m_listboxSorted
);
449 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
451 m_listbox
->SetToolTip( "This is a list box" );
452 #endif // wxUSE_TOOLTIPS
454 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
455 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
456 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
457 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
458 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
459 wxButton
*button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
461 button
->SetToolTip( "Press here to set italic font" );
462 #endif // wxUSE_TOOLTIPS
464 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
465 m_checkbox
->SetValue(FALSE
);
467 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
468 #endif // wxUSE_TOOLTIPS
469 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
471 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
473 panel
= new wxPanel(m_notebook
);
474 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
475 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
476 5, choices
, wxCB_SORT
);
478 SetControlClientData("choice", m_choice
);
479 SetControlClientData("choice", m_choiceSorted
);
481 m_choice
->SetSelection(2);
482 m_choice
->SetBackgroundColour( "red" );
483 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
484 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
485 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
486 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
487 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
488 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
489 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
491 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
493 panel
= new wxPanel(m_notebook
);
494 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(10,10), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
495 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
496 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
497 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
498 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
499 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
500 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
501 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
502 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
504 wxString choices2
[] =
508 "Fourth", "Fifth", "Sixth",
509 "Seventh", "Eighth", "Nineth", "Tenth" */
512 panel
= new wxPanel(m_notebook
);
513 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
514 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
515 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
516 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
517 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
518 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
519 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
520 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30), wxRB_GROUP
);
521 rb
->SetValue( FALSE
);
522 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
523 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
525 panel
= new wxPanel(m_notebook
);
526 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
527 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
528 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
529 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(220,10), wxSize(270,130) );
531 // No wrapping text in wxStaticText yet :-(
532 (void)new wxStaticText( panel
, -1,
538 (void)new wxStaticText( panel
, -1,
539 "In order see the gauge (aka progress bar)\n"
540 "control do something you have to drag the\n"
541 "handle of the slider to the right.\n"
543 "This is also supposed to demonstrate how\n"
544 "to use static controls.\n",
549 int initialSpinValue
= -5;
551 s
<< initialSpinValue
;
552 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
554 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
555 m_spinbutton
->SetRange(-10,30);
556 m_spinbutton
->SetValue(initialSpinValue
);
558 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "Show progress dialog",
560 #endif // wxUSE_SPINBTN
563 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
564 m_spinctrl
->SetRange(10,30);
565 m_spinctrl
->SetValue(15);
566 #endif // wxUSE_SPINCTRL
568 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
570 panel
= new wxPanel(m_notebook
);
572 #ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
573 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
574 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
, wxPoint(10, 10));
576 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
577 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
580 wxBitmap
bitmap( 100, 100 );
582 dc
.SelectObject( bitmap
);
583 dc
.SetPen(*wxGREEN_PEN
);
584 dc
.DrawEllipse(5, 5, 90, 90);
585 dc
.DrawText("Bitmap", 20, 20);
586 dc
.SelectObject( wxNullBitmap
);
588 (void)new wxBitmapButton(panel
, -1, bitmap
, wxPoint(100, 20));
589 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "Toggle label", wxPoint(250, 20));
590 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
591 wxPoint(250, 60), wxDefaultSize
,
592 wxALIGN_RIGHT
| wxST_NO_AUTORESIZE
);
594 m_notebook
->AddPage(panel
, "wxBitmapXXX");
596 // --------------- TEST CODE ----------------------
598 // layout constraints
600 panel
= new wxPanel(m_notebook
);
601 panel
->SetAutoLayout( TRUE
);
603 wxLayoutConstraints
*c
;
604 c
= new wxLayoutConstraints
;
605 c
->top
.SameAs( panel
, wxTop
, 10 );
607 c
->left
.SameAs( panel
, wxLeft
, 10 );
608 c
->width
.PercentOf( panel
, wxWidth
, 40 );
610 wxButton
*pMyButton
= new wxButton(panel
, -1, "Test Button" );
611 pMyButton
->SetConstraints( c
);
613 c
= new wxLayoutConstraints
;
614 c
->top
.SameAs( panel
, wxTop
, 10 );
615 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
616 c
->right
.SameAs( panel
, wxRight
, 10 );
617 c
->width
.PercentOf( panel
, wxWidth
, 40 );
619 wxButton
*pMyButton2
= new wxButton(panel
, -1, "Test Button 2" );
620 pMyButton2
->SetConstraints( c
);
622 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
626 panel
= new wxPanel(m_notebook
);
627 panel
->SetAutoLayout( TRUE
);
629 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
631 sizer
->Add( new wxButton(panel
, -1, "Test Button" ), 3, wxALL
, 10 );
632 sizer
->Add( 20,20, 1 );
633 sizer
->Add( new wxButton(panel
, -1, "Test Button 2" ), 3, wxGROW
|wxALL
, 10 );
635 panel
->SetSizer( sizer
);
637 m_notebook
->AddPage(panel
, "wxSizer");
639 // --------------- TEST CODE ----------------------
643 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
647 GetClientSize( &x
, &y
);
649 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
650 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
653 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
655 int selOld
= event
.GetOldSelection();
658 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
659 "page change from taking place - if you select\n"
660 "[No] the current page will stay the third one\n",
662 wxICON_QUESTION
| wxYES_NO
) != wxYES
)
670 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
673 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
675 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
678 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
680 static wxColour s_colOld
;
682 // test panel colour changing and propagation to the subcontrols
685 SetBackgroundColour(s_colOld
);
686 s_colOld
= wxNullColour
;
688 m_lbSelectThis
->SetBackgroundColour("blue");
692 s_colOld
= GetBackgroundColour();
693 SetBackgroundColour("green");
695 m_lbSelectThis
->SetBackgroundColour("red");
698 m_lbSelectThis
->Refresh();
702 void MyPanel::OnListBox( wxCommandEvent
&event
)
704 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
707 m_text
->AppendText( "ListBox event selection string is: '" );
708 m_text
->AppendText( event
.GetString() );
709 m_text
->AppendText( "'\n" );
710 m_text
->AppendText( "ListBox control selection string is: '" );
711 m_text
->AppendText( listbox
->GetStringSelection() );
712 m_text
->AppendText( "'\n" );
714 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
715 m_text
->AppendText( "ListBox event client data string is: '" );
716 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
717 m_text
->AppendText( obj
->GetData() );
719 m_text
->AppendText( wxString("none") );
721 m_text
->AppendText( "'\n" );
722 m_text
->AppendText( "ListBox control client data string is: '" );
723 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
725 m_text
->AppendText( obj
->GetData() );
727 m_text
->AppendText( wxString("none") );
728 m_text
->AppendText( "'\n" );
731 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
733 m_text
->AppendText( "ListBox double click string is: " );
734 m_text
->AppendText( event
.GetString() );
735 m_text
->AppendText( "\n" );
738 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
740 switch (event
.GetId())
742 case ID_LISTBOX_ENABLE
:
744 m_text
->AppendText("Checkbox clicked.\n");
745 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
748 cb
->SetToolTip( "Click to enable listbox" );
750 cb
->SetToolTip( "Click to disable listbox" );
751 #endif // wxUSE_TOOLTIPS
752 m_listbox
->Enable( event
.GetInt() == 0 );
753 m_listboxSorted
->Enable( event
.GetInt() == 0 );
756 case ID_LISTBOX_SEL_NUM
:
758 m_listbox
->SetSelection( 2 );
759 m_listboxSorted
->SetSelection( 2 );
760 m_lbSelectThis
->WarpPointer( 40, 14 );
763 case ID_LISTBOX_SEL_STR
:
765 m_listbox
->SetStringSelection( "This" );
766 m_listboxSorted
->SetStringSelection( "This" );
767 m_lbSelectNum
->WarpPointer( 40, 14 );
770 case ID_LISTBOX_CLEAR
:
773 m_listboxSorted
->Clear();
776 case ID_LISTBOX_APPEND
:
778 m_listbox
->Append( "Hi!" );
779 m_listboxSorted
->Append( "Hi!" );
782 case ID_LISTBOX_DELETE
:
785 idx
= m_listbox
->GetSelection();
786 m_listbox
->Delete( idx
);
787 idx
= m_listboxSorted
->GetSelection();
788 m_listboxSorted
->Delete( idx
);
791 case ID_LISTBOX_FONT
:
793 m_listbox
->SetFont( *wxITALIC_FONT
);
794 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
795 m_checkbox
->SetFont( *wxITALIC_FONT
);
801 void MyPanel::OnChoice( wxCommandEvent
&event
)
803 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
806 m_text
->AppendText( "Choice event selection string is: '" );
807 m_text
->AppendText( event
.GetString() );
808 m_text
->AppendText( "'\n" );
809 m_text
->AppendText( "Choice control selection string is: '" );
810 m_text
->AppendText( choice
->GetStringSelection() );
811 m_text
->AppendText( "'\n" );
813 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
814 m_text
->AppendText( "Choice event client data string is: '" );
817 m_text
->AppendText( obj
->GetData() );
819 m_text
->AppendText( wxString("none") );
821 m_text
->AppendText( "'\n" );
822 m_text
->AppendText( "Choice control client data string is: '" );
823 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
826 m_text
->AppendText( obj
->GetData() );
828 m_text
->AppendText( wxString("none") );
829 m_text
->AppendText( "'\n" );
832 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
834 switch (event
.GetId())
836 case ID_CHOICE_ENABLE
:
838 m_choice
->Enable( event
.GetInt() == 0 );
839 m_choiceSorted
->Enable( event
.GetInt() == 0 );
842 case ID_CHOICE_SEL_NUM
:
844 m_choice
->SetSelection( 2 );
845 m_choiceSorted
->SetSelection( 2 );
848 case ID_CHOICE_SEL_STR
:
850 m_choice
->SetStringSelection( "This" );
851 m_choiceSorted
->SetStringSelection( "This" );
854 case ID_CHOICE_CLEAR
:
857 m_choiceSorted
->Clear();
860 case ID_CHOICE_APPEND
:
862 m_choice
->Append( "Hi!" );
863 m_choiceSorted
->Append( "Hi!" );
866 case ID_CHOICE_DELETE
:
868 int idx
= m_choice
->GetSelection();
869 m_choice
->Delete( idx
);
870 idx
= m_choiceSorted
->GetSelection();
871 m_choiceSorted
->Delete( idx
);
876 m_choice
->SetFont( *wxITALIC_FONT
);
877 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
883 void MyPanel::OnCombo( wxCommandEvent
&event
)
885 m_text
->AppendText( "ComboBox event selection string is: " );
886 m_text
->AppendText( event
.GetString() );
887 m_text
->AppendText( "\n" );
888 m_text
->AppendText( "ComboBox control selection string is: " );
889 m_text
->AppendText( m_combo
->GetStringSelection() );
890 m_text
->AppendText( "\n" );
893 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
895 switch (event
.GetId())
897 case ID_COMBO_ENABLE
:
899 m_combo
->Enable( event
.GetInt() == 0 );
902 case ID_COMBO_SEL_NUM
:
904 m_combo
->SetSelection( 2 );
907 case ID_COMBO_SEL_STR
:
909 m_combo
->SetStringSelection( "This" );
917 case ID_COMBO_APPEND
:
919 m_combo
->Append( "Hi!" );
922 case ID_COMBO_DELETE
:
924 int idx
= m_combo
->GetSelection();
925 m_combo
->Delete( idx
);
930 m_combo
->SetFont( *wxITALIC_FONT
);
936 void MyPanel::OnRadio( wxCommandEvent
&event
)
938 m_text
->AppendText( "RadioBox selection string is: " );
939 m_text
->AppendText( event
.GetString() );
940 m_text
->AppendText( "\n" );
943 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
945 switch (event
.GetId())
947 case ID_RADIOBOX_ENABLE
:
949 m_radio
->Enable( event
.GetInt() == 0 );
952 case ID_RADIOBOX_SEL_NUM
:
954 m_radio
->SetSelection( 2 );
957 case ID_RADIOBOX_SEL_STR
:
959 m_radio
->SetStringSelection( "This" );
962 case ID_RADIOBOX_FONT
:
964 m_radio
->SetFont( *wxITALIC_FONT
);
970 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
972 m_fontButton
->SetFont( *wxITALIC_FONT
);
973 m_text
->SetFont( *wxITALIC_FONT
);
976 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
978 static bool s_long
= TRUE
;
981 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
984 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
986 m_gauge
->SetValue( m_slider
->GetValue() );
991 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
994 s
.Printf(_T("Current value of spin ctrl is %d\n"), m_spinctrl
->GetValue());
995 m_text
->AppendText(s
);
998 #endif // wxUSE_SPINCTRL
1001 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1004 value
.Printf( _T("Spin control up: current = %d\n"),
1005 m_spinbutton
->GetValue());
1007 if ( m_spinbutton
->GetValue() > 17 )
1009 value
+= _T("Preventing the spin button from going above 17.\n");
1014 m_text
->AppendText(value
);
1017 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1020 value
.Printf( _T("Spin control down: current = %d\n"),
1021 m_spinbutton
->GetValue());
1023 if ( m_spinbutton
->GetValue() < -17 )
1025 value
+= _T("Preventing the spin button from going below -17.\n");
1030 m_text
->AppendText(value
);
1033 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1036 value
.Printf( _T("%d"), event
.GetPosition() );
1037 m_spintext
->SetValue( value
);
1039 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1040 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1041 m_spinbutton
->GetValue());
1043 m_text
->AppendText(value
);
1046 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1048 event
.Enable( m_spinbutton
->GetValue() > 0 );
1051 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1053 int max
= m_spinbutton
->GetValue();
1054 wxProgressDialog
dialog("Progress dialog example",
1055 "An informative message",
1061 wxPD_ESTIMATED_TIME
|
1062 wxPD_REMAINING_TIME
);
1066 for ( int i
= 0; i
< max
&& cont
; i
++ )
1071 cont
= dialog
.Update(i
, "That's all, folks!");
1073 else if ( i
== max
/ 2 )
1075 cont
= dialog
.Update(i
, "Only a half left!");
1079 cont
= dialog
.Update(i
);
1085 *m_text
<< "Progress dialog aborted!\n";
1089 *m_text
<< "Countdown from " << max
<< " finished.\n";
1093 #endif // wxUSE_SPINBTN
1097 delete m_notebook
->GetImageList();
1100 //----------------------------------------------------------------------
1102 //----------------------------------------------------------------------
1104 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1105 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1106 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1108 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1109 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1110 #endif // wxUSE_TOOLTIPS
1112 EVT_MENU(MINIMAL_ENABLE_ALL
, MyFrame::OnEnableAll
)
1114 EVT_SIZE(MyFrame::OnSize
)
1115 EVT_MOVE(MyFrame::OnMove
)
1117 EVT_IDLE(MyFrame::OnIdle
)
1120 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1121 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1125 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1128 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1133 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1135 wxBeginBusyCursor();
1137 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1144 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1146 static long s_delay
= 5000;
1149 delay
.Printf( _T("%ld"), s_delay
);
1151 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1152 "Set tooltip delay",
1156 return; // cancelled
1158 wxSscanf(delay
, _T("%ld"), &s_delay
);
1160 wxToolTip::SetDelay(s_delay
);
1162 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1165 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1167 static bool s_enabled
= TRUE
;
1169 s_enabled
= !s_enabled
;
1171 wxToolTip::Enable(s_enabled
);
1173 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1177 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1179 static bool s_enable
= TRUE
;
1181 s_enable
= !s_enable
;
1182 m_panel
->Enable(s_enable
);
1185 void MyFrame::OnMove( wxMoveEvent
& event
)
1187 UpdateStatusBar(event
.GetPosition(), GetSize());
1192 void MyFrame::OnSize( wxSizeEvent
& event
)
1194 UpdateStatusBar(GetPosition(), event
.GetSize());
1199 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1201 // track the window which has the focus in the status bar
1202 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1203 wxWindow
*focus
= wxWindow::FindFocus();
1204 if ( focus
&& (focus
!= s_windowFocus
) )
1206 s_windowFocus
= focus
;
1211 _T("Focus: wxWindow = %p, HWND = %08x"),
1213 _T("Focus: wxWindow = %p"),
1217 , s_windowFocus
->GetHWND()
1225 static void SetControlClientData(const char *name
,
1226 wxControlWithItems
*control
)
1228 size_t count
= control
->GetCount();
1229 for ( size_t n
= 0; n
< count
; n
++ )
1232 s
.Printf("%s client data for '%s'",
1233 name
, control
->GetString(n
).c_str());
1235 control
->SetClientObject(n
, new wxStringClientData(s
));