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
55 #define wxUSE_SPINBTN 0
58 #define wxUSE_SPINBTN 1
62 #include "wx/progdlg.h"
65 #include "wx/spinctrl.h"
66 #endif // wxUSE_SPINCTRL
68 //----------------------------------------------------------------------
70 //----------------------------------------------------------------------
72 class MyApp
: public wxApp
78 class MyPanel
: public wxPanel
81 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
84 void OnSize( wxSizeEvent
& event
);
85 void OnListBox( wxCommandEvent
&event
);
86 void OnListBoxDoubleClick( wxCommandEvent
&event
);
87 void OnListBoxButtons( wxCommandEvent
&event
);
88 void OnChoice( wxCommandEvent
&event
);
89 void OnChoiceButtons( wxCommandEvent
&event
);
90 void OnCombo( wxCommandEvent
&event
);
91 void OnComboButtons( wxCommandEvent
&event
);
92 void OnRadio( wxCommandEvent
&event
);
93 void OnRadioButtons( wxCommandEvent
&event
);
94 void OnSetFont( wxCommandEvent
&event
);
95 void OnPageChanged( wxNotebookEvent
&event
);
96 void OnPageChanging( wxNotebookEvent
&event
);
97 void OnSliderUpdate( wxCommandEvent
&event
);
98 void OnUpdateLabel( wxCommandEvent
&event
);
100 void OnSpinUp( wxSpinEvent
&event
);
101 void OnSpinDown( wxSpinEvent
&event
);
102 void OnSpinUpdate( wxSpinEvent
&event
);
103 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
104 void OnShowProgress( wxCommandEvent
&event
);
105 #endif // wxUSE_SPINBTN
108 void OnSpinCtrl(wxSpinEvent
& event
);
109 #endif // wxUSE_SPINCTRL
111 void OnEnableAll(wxCommandEvent
& event
);
112 void OnChangeColour(wxCommandEvent
& event
);
114 wxListBox
*m_listbox
,
122 wxButton
*m_fontButton
;
123 wxButton
*m_lbSelectNum
;
124 wxButton
*m_lbSelectThis
;
126 wxSpinButton
*m_spinbutton
;
127 wxButton
*m_btnProgress
;
128 #endif // wxUSE_SPINBTN
131 wxSpinCtrl
*m_spinctrl
;
132 #endif // wxUSE_SPINCTRL
134 wxTextCtrl
*m_spintext
;
135 wxCheckBox
*m_checkbox
;
138 wxNotebook
*m_notebook
;
140 wxStaticText
*m_label
;
143 DECLARE_EVENT_TABLE()
146 class MyFrame
: public wxFrame
149 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
151 void OnQuit(wxCommandEvent
& event
);
152 void OnAbout(wxCommandEvent
& event
);
155 void OnSetTooltipDelay(wxCommandEvent
& event
);
156 void OnToggleTooltips(wxCommandEvent
& event
);
157 #endif // wxUSE_TOOLTIPS
159 void OnEnableAll(wxCommandEvent
& event
);
161 void OnIdle( wxIdleEvent
& event
);
162 void OnSize( wxSizeEvent
& event
);
163 void OnMove( wxMoveEvent
& event
);
165 MyPanel
*GetPanel() const { return m_panel
; }
168 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
171 msg
.Printf(_("pos=(%d, %d), size=%dx%d"),
172 pos
.x
, pos
.y
, size
.x
, size
.y
);
173 SetStatusText(msg
, 1);
178 DECLARE_EVENT_TABLE()
181 //----------------------------------------------------------------------
183 //----------------------------------------------------------------------
185 static void SetControlClientData(const char *name
,
186 wxControlWithItems
*control
);
190 //----------------------------------------------------------------------
192 //----------------------------------------------------------------------
201 MINIMAL_SET_TOOLTIP_DELAY
= 200,
202 MINIMAL_ENABLE_TOOLTIPS
,
210 // parse the cmd line
215 wxSscanf(argv
[1], "%d", &x
);
216 wxSscanf(argv
[2], "%d", &y
);
219 // Create the main frame window
220 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
221 "Controls wxWindows App",
225 // The wxICON() macros loads an icon from a resource under Windows
226 // and uses an #included XPM image under GTK+ and Motif
228 frame
->SetIcon( wxICON(mondrian
) );
230 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
232 file_menu
->Append(MINIMAL_ABOUT
, "&About\tF1");
233 file_menu
->AppendSeparator();
234 file_menu
->Append(MINIMAL_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
236 wxMenuBar
*menu_bar
= new wxMenuBar
;
237 menu_bar
->Append(file_menu
, "&File");
240 wxMenu
*tooltip_menu
= new wxMenu
;
241 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
242 tooltip_menu
->AppendSeparator();
243 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
244 "enable/disable tooltips", TRUE
);
245 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
246 menu_bar
->Append(tooltip_menu
, "&Tooltips");
247 #endif // wxUSE_TOOLTIPS
249 wxMenu
*panel_menu
= new wxMenu
;
250 panel_menu
->Append(MINIMAL_ENABLE_ALL
, "&Disable all\tCtrl-E",
251 "Enable/disable all panel controls", TRUE
);
252 menu_bar
->Append(panel_menu
, "&Panel");
254 frame
->SetMenuBar(menu_bar
);
257 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
259 frame
->GetPanel()->m_notebook
->SetSelection(3);
266 //----------------------------------------------------------------------
268 //----------------------------------------------------------------------
270 const int ID_NOTEBOOK
= 1000;
272 const int ID_LISTBOX
= 130;
273 const int ID_LISTBOX_SEL_NUM
= 131;
274 const int ID_LISTBOX_SEL_STR
= 132;
275 const int ID_LISTBOX_CLEAR
= 133;
276 const int ID_LISTBOX_APPEND
= 134;
277 const int ID_LISTBOX_DELETE
= 135;
278 const int ID_LISTBOX_FONT
= 136;
279 const int ID_LISTBOX_ENABLE
= 137;
280 const int ID_LISTBOX_SORTED
= 138;
282 const int ID_CHOICE
= 120;
283 const int ID_CHOICE_SEL_NUM
= 121;
284 const int ID_CHOICE_SEL_STR
= 122;
285 const int ID_CHOICE_CLEAR
= 123;
286 const int ID_CHOICE_APPEND
= 124;
287 const int ID_CHOICE_DELETE
= 125;
288 const int ID_CHOICE_FONT
= 126;
289 const int ID_CHOICE_ENABLE
= 127;
290 const int ID_CHOICE_SORTED
= 128;
292 const int ID_COMBO
= 140;
293 const int ID_COMBO_SEL_NUM
= 141;
294 const int ID_COMBO_SEL_STR
= 142;
295 const int ID_COMBO_CLEAR
= 143;
296 const int ID_COMBO_APPEND
= 144;
297 const int ID_COMBO_DELETE
= 145;
298 const int ID_COMBO_FONT
= 146;
299 const int ID_COMBO_ENABLE
= 147;
301 const int ID_RADIOBOX
= 160;
302 const int ID_RADIOBOX_SEL_NUM
= 161;
303 const int ID_RADIOBOX_SEL_STR
= 162;
304 const int ID_RADIOBOX_FONT
= 163;
305 const int ID_RADIOBOX_ENABLE
= 164;
307 const int ID_RADIOBUTTON_1
= 166;
308 const int ID_RADIOBUTTON_2
= 167;
310 const int ID_SET_FONT
= 170;
312 const int ID_GAUGE
= 180;
313 const int ID_SLIDER
= 181;
315 const int ID_SPIN
= 182;
316 const int ID_BTNPROGRESS
= 183;
317 const int ID_BUTTON_LABEL
= 184;
318 const int ID_SPINCTRL
= 185;
320 const int ID_CHANGE_COLOUR
= 200;
322 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
323 EVT_SIZE ( MyPanel::OnSize
)
324 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
325 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
326 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
327 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
328 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
329 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
330 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
331 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
332 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
333 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
334 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
335 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
336 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
337 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
338 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
339 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
340 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
341 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
342 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
343 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
344 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
345 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
346 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
347 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
348 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
349 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
350 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
351 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
352 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
353 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
354 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
355 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
356 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
357 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
358 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
359 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
361 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
362 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
363 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
364 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
365 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
366 #endif // wxUSE_SPINBTN
368 EVT_SPIN (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
369 #endif // wxUSE_SPINCTRL
370 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
371 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
374 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
375 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
376 m_text(NULL
), m_notebook(NULL
)
378 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
379 // m_text->SetBackgroundColour("wheat");
381 delete wxLog::SetActiveTarget(new wxLogStderr
);
383 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
398 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
401 // fill the image list
402 wxImageList
*imagelist
= new wxImageList(32, 32);
404 imagelist
-> Add( wxBitmap( list_xpm
));
405 imagelist
-> Add( wxBitmap( choice_xpm
));
406 imagelist
-> Add( wxBitmap( combo_xpm
));
407 imagelist
-> Add( wxBitmap( text_xpm
));
408 imagelist
-> Add( wxBitmap( radio_xpm
));
409 imagelist
-> Add( wxBitmap( gauge_xpm
));
410 m_notebook
->SetImageList(imagelist
);
411 #elif defined(__WXMSW__)
412 // load images from resources
415 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
417 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
419 static const char *s_iconNames
[Image_Max
] =
421 "list", "choice", "combo", "text", "radio", "gauge"
424 for ( size_t n
= 0; n
< Image_Max
; n
++ )
426 wxBitmap
bmp(s_iconNames
[n
]);
427 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
429 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
434 m_notebook
->SetImageList(imagelist
);
438 #define Image_List -1
439 #define Image_Choice -1
440 #define Image_Combo -1
441 #define Image_Text -1
442 #define Image_Radio -1
443 #define Image_Gauge -1
448 wxPanel
*panel
= new wxPanel(m_notebook
);
449 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
450 wxPoint(10,10), wxSize(120,70),
451 5, choices
, wxLB_ALWAYS_SB
);
452 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
453 wxPoint(10,90), wxSize(120,70),
454 5, choices
, wxLB_SORT
);
456 SetControlClientData("listbox", m_listbox
);
457 SetControlClientData("listbox", m_listboxSorted
);
459 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
461 m_listbox
->SetToolTip( "This is a list box" );
462 #endif // wxUSE_TOOLTIPS
464 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
465 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
466 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
467 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
468 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
469 wxButton
*button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
471 button
->SetToolTip( "Press here to set italic font" );
472 #endif // wxUSE_TOOLTIPS
474 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
475 m_checkbox
->SetValue(FALSE
);
477 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
478 #endif // wxUSE_TOOLTIPS
479 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
481 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
483 panel
= new wxPanel(m_notebook
);
484 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
485 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
486 5, choices
, wxCB_SORT
);
489 SetControlClientData("choice", m_choice
);
490 SetControlClientData("choice", m_choiceSorted
);
493 m_choice
->SetSelection(2);
494 m_choice
->SetBackgroundColour( "red" );
495 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
496 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
497 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
498 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
499 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
500 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
501 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
503 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
505 panel
= new wxPanel(m_notebook
);
506 (void)new wxStaticBox( panel
, -1, "Box around combobox",
507 wxPoint(5, 5), wxSize(150, 100));
508 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(20,20), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
509 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
510 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
511 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
512 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
513 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
514 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
515 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
516 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
518 wxString choices2
[] =
522 "Fourth", "Fifth", "Sixth",
523 "Seventh", "Eighth", "Nineth", "Tenth" */
526 panel
= new wxPanel(m_notebook
);
527 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
528 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
531 m_radio
->SetToolTip("Ever seen a radiobox?");
532 #endif // wxUSE_TOOLTIPS
534 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
535 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
536 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
537 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
538 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
539 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30), wxRB_GROUP
);
540 rb
->SetValue( FALSE
);
541 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
542 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
544 panel
= new wxPanel(m_notebook
);
545 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
546 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
547 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
548 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(220,10), wxSize(270,130) );
550 // No wrapping text in wxStaticText yet :-(
551 (void)new wxStaticText( panel
, -1,
557 (void)new wxStaticText( panel
, -1,
558 "In order see the gauge (aka progress bar)\n"
559 "control do something you have to drag the\n"
560 "handle of the slider to the right.\n"
562 "This is also supposed to demonstrate how\n"
563 "to use static controls.\n",
568 int initialSpinValue
= -5;
570 s
<< initialSpinValue
;
571 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
573 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
574 m_spinbutton
->SetRange(-10,30);
575 m_spinbutton
->SetValue(initialSpinValue
);
577 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "Show progress dialog",
579 #endif // wxUSE_SPINBTN
582 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
583 m_spinctrl
->SetRange(10,30);
584 m_spinctrl
->SetValue(15);
585 #endif // wxUSE_SPINCTRL
587 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
589 panel
= new wxPanel(m_notebook
);
591 #ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
592 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
593 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
596 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
597 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
600 wxBitmap
bitmap( 100, 100 );
602 dc
.SelectObject( bitmap
);
603 dc
.SetPen(*wxGREEN_PEN
);
605 dc
.DrawEllipse(5, 5, 90, 90);
606 dc
.DrawText("Bitmap", 30, 40);
607 dc
.SelectObject( wxNullBitmap
);
609 (void)new wxBitmapButton(panel
, -1, bitmap
, wxPoint(100, 20));
611 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
612 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
613 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
614 wxBitmapButton
*bmpBtn
= new wxBitmapButton
620 bmpBtn
->SetBitmapSelected(bmp2
);
621 bmpBtn
->SetBitmapFocus(bmp3
);
623 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "Toggle label", wxPoint(250, 20));
624 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
625 wxPoint(250, 60), wxDefaultSize
,
626 wxALIGN_RIGHT
| wxST_NO_AUTORESIZE
);
628 m_notebook
->AddPage(panel
, "wxBitmapXXX");
630 // --------------- TEST CODE ----------------------
632 // layout constraints
634 panel
= new wxPanel(m_notebook
);
635 panel
->SetAutoLayout( TRUE
);
637 wxLayoutConstraints
*c
;
638 c
= new wxLayoutConstraints
;
639 c
->top
.SameAs( panel
, wxTop
, 10 );
641 c
->left
.SameAs( panel
, wxLeft
, 10 );
642 c
->width
.PercentOf( panel
, wxWidth
, 40 );
644 wxButton
*pMyButton
= new wxButton(panel
, -1, "Test Button" );
645 pMyButton
->SetConstraints( c
);
647 c
= new wxLayoutConstraints
;
648 c
->top
.SameAs( panel
, wxTop
, 10 );
649 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
650 c
->right
.SameAs( panel
, wxRight
, 10 );
651 c
->width
.PercentOf( panel
, wxWidth
, 40 );
653 wxButton
*pMyButton2
= new wxButton(panel
, -1, "Test Button 2" );
654 pMyButton2
->SetConstraints( c
);
656 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
660 panel
= new wxPanel(m_notebook
);
661 panel
->SetAutoLayout( TRUE
);
663 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
665 sizer
->Add( new wxButton(panel
, -1, "Test Button" ), 3, wxALL
, 10 );
666 sizer
->Add( 20,20, 1 );
667 sizer
->Add( new wxButton(panel
, -1, "Test Button 2" ), 3, wxGROW
|wxALL
, 10 );
669 panel
->SetSizer( sizer
);
671 m_notebook
->AddPage(panel
, "wxSizer");
673 // --------------- TEST CODE ----------------------
677 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
681 GetClientSize( &x
, &y
);
683 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
684 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
687 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
689 int selOld
= event
.GetOldSelection();
692 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
693 "page change from taking place - if you select\n"
694 "[No] the current page will stay the third one\n",
696 wxICON_QUESTION
| wxYES_NO
) != wxYES
)
704 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
707 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
709 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
712 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
714 static wxColour s_colOld
;
716 // test panel colour changing and propagation to the subcontrols
719 SetBackgroundColour(s_colOld
);
720 s_colOld
= wxNullColour
;
722 m_lbSelectThis
->SetBackgroundColour("blue");
726 s_colOld
= GetBackgroundColour();
727 SetBackgroundColour("green");
729 m_lbSelectThis
->SetBackgroundColour("red");
732 m_lbSelectThis
->Refresh();
736 void MyPanel::OnListBox( wxCommandEvent
&event
)
738 // GetParent()->Move(100, 100);
740 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
743 m_text
->AppendText( "ListBox event selection string is: '" );
744 m_text
->AppendText( event
.GetString() );
745 m_text
->AppendText( "'\n" );
746 m_text
->AppendText( "ListBox control selection string is: '" );
747 m_text
->AppendText( listbox
->GetStringSelection() );
748 m_text
->AppendText( "'\n" );
750 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
751 m_text
->AppendText( "ListBox event client data string is: '" );
752 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
753 m_text
->AppendText( obj
->GetData() );
755 m_text
->AppendText( wxString("none") );
757 m_text
->AppendText( "'\n" );
758 m_text
->AppendText( "ListBox control client data string is: '" );
759 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
761 m_text
->AppendText( obj
->GetData() );
763 m_text
->AppendText( wxString("none") );
764 m_text
->AppendText( "'\n" );
767 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
769 m_text
->AppendText( "ListBox double click string is: " );
770 m_text
->AppendText( event
.GetString() );
771 m_text
->AppendText( "\n" );
774 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
776 switch (event
.GetId())
778 case ID_LISTBOX_ENABLE
:
780 m_text
->AppendText("Checkbox clicked.\n");
781 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
784 cb
->SetToolTip( "Click to enable listbox" );
786 cb
->SetToolTip( "Click to disable listbox" );
787 #endif // wxUSE_TOOLTIPS
788 m_listbox
->Enable( event
.GetInt() == 0 );
789 m_listboxSorted
->Enable( event
.GetInt() == 0 );
792 case ID_LISTBOX_SEL_NUM
:
794 m_listbox
->SetSelection( 2 );
795 m_listboxSorted
->SetSelection( 2 );
796 m_lbSelectThis
->WarpPointer( 40, 14 );
799 case ID_LISTBOX_SEL_STR
:
801 m_listbox
->SetStringSelection( "This" );
802 m_listboxSorted
->SetStringSelection( "This" );
803 m_lbSelectNum
->WarpPointer( 40, 14 );
806 case ID_LISTBOX_CLEAR
:
809 m_listboxSorted
->Clear();
812 case ID_LISTBOX_APPEND
:
814 m_listbox
->Append( "Hi!" );
815 m_listboxSorted
->Append( "Hi!" );
818 case ID_LISTBOX_DELETE
:
821 idx
= m_listbox
->GetSelection();
822 m_listbox
->Delete( idx
);
823 idx
= m_listboxSorted
->GetSelection();
824 m_listboxSorted
->Delete( idx
);
827 case ID_LISTBOX_FONT
:
829 m_listbox
->SetFont( *wxITALIC_FONT
);
830 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
831 m_checkbox
->SetFont( *wxITALIC_FONT
);
837 void MyPanel::OnChoice( wxCommandEvent
&event
)
839 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
842 m_text
->AppendText( "Choice event selection string is: '" );
843 m_text
->AppendText( event
.GetString() );
844 m_text
->AppendText( "'\n" );
845 m_text
->AppendText( "Choice control selection string is: '" );
846 m_text
->AppendText( choice
->GetStringSelection() );
847 m_text
->AppendText( "'\n" );
849 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
850 m_text
->AppendText( "Choice event client data string is: '" );
853 m_text
->AppendText( obj
->GetData() );
855 m_text
->AppendText( wxString("none") );
857 m_text
->AppendText( "'\n" );
858 m_text
->AppendText( "Choice control client data string is: '" );
859 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
862 m_text
->AppendText( obj
->GetData() );
864 m_text
->AppendText( wxString("none") );
865 m_text
->AppendText( "'\n" );
868 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
870 switch (event
.GetId())
872 case ID_CHOICE_ENABLE
:
874 m_choice
->Enable( event
.GetInt() == 0 );
875 m_choiceSorted
->Enable( event
.GetInt() == 0 );
878 case ID_CHOICE_SEL_NUM
:
880 m_choice
->SetSelection( 2 );
881 m_choiceSorted
->SetSelection( 2 );
884 case ID_CHOICE_SEL_STR
:
886 m_choice
->SetStringSelection( "This" );
887 m_choiceSorted
->SetStringSelection( "This" );
890 case ID_CHOICE_CLEAR
:
893 m_choiceSorted
->Clear();
896 case ID_CHOICE_APPEND
:
898 m_choice
->Append( "Hi!" );
899 m_choiceSorted
->Append( "Hi!" );
902 case ID_CHOICE_DELETE
:
904 int idx
= m_choice
->GetSelection();
905 m_choice
->Delete( idx
);
906 idx
= m_choiceSorted
->GetSelection();
907 m_choiceSorted
->Delete( idx
);
912 m_choice
->SetFont( *wxITALIC_FONT
);
913 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
919 void MyPanel::OnCombo( wxCommandEvent
&event
)
921 m_text
->AppendText( "ComboBox event selection string is: " );
922 m_text
->AppendText( event
.GetString() );
923 m_text
->AppendText( "\n" );
924 m_text
->AppendText( "ComboBox control selection string is: " );
925 m_text
->AppendText( m_combo
->GetStringSelection() );
926 m_text
->AppendText( "\n" );
929 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
931 switch (event
.GetId())
933 case ID_COMBO_ENABLE
:
935 m_combo
->Enable( event
.GetInt() == 0 );
938 case ID_COMBO_SEL_NUM
:
940 m_combo
->SetSelection( 2 );
943 case ID_COMBO_SEL_STR
:
945 m_combo
->SetStringSelection( "This" );
953 case ID_COMBO_APPEND
:
955 m_combo
->Append( "Hi!" );
958 case ID_COMBO_DELETE
:
960 int idx
= m_combo
->GetSelection();
961 m_combo
->Delete( idx
);
966 m_combo
->SetFont( *wxITALIC_FONT
);
972 void MyPanel::OnRadio( wxCommandEvent
&event
)
974 m_text
->AppendText( "RadioBox selection string is: " );
975 m_text
->AppendText( event
.GetString() );
976 m_text
->AppendText( "\n" );
979 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
981 switch (event
.GetId())
983 case ID_RADIOBOX_ENABLE
:
985 m_radio
->Enable( event
.GetInt() == 0 );
988 case ID_RADIOBOX_SEL_NUM
:
990 m_radio
->SetSelection( 2 );
993 case ID_RADIOBOX_SEL_STR
:
995 m_radio
->SetStringSelection( "This" );
998 case ID_RADIOBOX_FONT
:
1000 m_radio
->SetFont( *wxITALIC_FONT
);
1006 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1008 m_fontButton
->SetFont( *wxITALIC_FONT
);
1009 m_text
->SetFont( *wxITALIC_FONT
);
1012 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
1014 static bool s_long
= TRUE
;
1017 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
1020 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1022 m_gauge
->SetValue( m_slider
->GetValue() );
1027 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1030 s
.Printf(_T("Current value of spin ctrl is %d\n"), m_spinctrl
->GetValue());
1031 m_text
->AppendText(s
);
1034 #endif // wxUSE_SPINCTRL
1037 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1040 value
.Printf( _T("Spin control up: current = %d\n"),
1041 m_spinbutton
->GetValue());
1043 if ( m_spinbutton
->GetValue() > 17 )
1045 value
+= _T("Preventing the spin button from going above 17.\n");
1050 m_text
->AppendText(value
);
1053 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1056 value
.Printf( _T("Spin control down: current = %d\n"),
1057 m_spinbutton
->GetValue());
1059 if ( m_spinbutton
->GetValue() < -17 )
1061 value
+= _T("Preventing the spin button from going below -17.\n");
1066 m_text
->AppendText(value
);
1069 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1072 value
.Printf( _T("%d"), event
.GetPosition() );
1073 m_spintext
->SetValue( value
);
1075 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1076 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1077 m_spinbutton
->GetValue());
1079 m_text
->AppendText(value
);
1082 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1084 event
.Enable( m_spinbutton
->GetValue() > 0 );
1087 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1089 int max
= m_spinbutton
->GetValue();
1090 wxProgressDialog
dialog("Progress dialog example",
1091 "An informative message",
1097 wxPD_ESTIMATED_TIME
|
1098 wxPD_REMAINING_TIME
);
1102 for ( int i
= 0; i
< max
&& cont
; i
++ )
1107 cont
= dialog
.Update(i
, "That's all, folks!");
1109 else if ( i
== max
/ 2 )
1111 cont
= dialog
.Update(i
, "Only a half left!");
1115 cont
= dialog
.Update(i
);
1121 *m_text
<< "Progress dialog aborted!\n";
1125 *m_text
<< "Countdown from " << max
<< " finished.\n";
1129 #endif // wxUSE_SPINBTN
1133 delete m_notebook
->GetImageList();
1136 //----------------------------------------------------------------------
1138 //----------------------------------------------------------------------
1140 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1141 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1142 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1144 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1145 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1146 #endif // wxUSE_TOOLTIPS
1148 EVT_MENU(MINIMAL_ENABLE_ALL
, MyFrame::OnEnableAll
)
1150 EVT_SIZE(MyFrame::OnSize
)
1151 EVT_MOVE(MyFrame::OnMove
)
1153 EVT_IDLE(MyFrame::OnIdle
)
1156 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1157 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1161 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1164 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1169 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1171 wxBeginBusyCursor();
1173 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1180 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1182 static long s_delay
= 5000;
1185 delay
.Printf( _T("%ld"), s_delay
);
1187 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1188 "Set tooltip delay",
1192 return; // cancelled
1194 wxSscanf(delay
, _T("%ld"), &s_delay
);
1196 wxToolTip::SetDelay(s_delay
);
1198 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1201 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1203 static bool s_enabled
= TRUE
;
1205 s_enabled
= !s_enabled
;
1207 wxToolTip::Enable(s_enabled
);
1209 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1213 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1215 static bool s_enable
= TRUE
;
1217 s_enable
= !s_enable
;
1218 m_panel
->Enable(s_enable
);
1221 void MyFrame::OnMove( wxMoveEvent
& event
)
1223 UpdateStatusBar(event
.GetPosition(), GetSize());
1228 void MyFrame::OnSize( wxSizeEvent
& event
)
1230 UpdateStatusBar(GetPosition(), event
.GetSize());
1235 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1237 // track the window which has the focus in the status bar
1238 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1239 wxWindow
*focus
= wxWindow::FindFocus();
1240 if ( focus
&& (focus
!= s_windowFocus
) )
1242 s_windowFocus
= focus
;
1247 _T("Focus: wxWindow = %p, HWND = %08x"),
1249 _T("Focus: wxWindow = %p"),
1253 , s_windowFocus
->GetHWND()
1261 static void SetControlClientData(const char *name
,
1262 wxControlWithItems
*control
)
1264 size_t count
= control
->GetCount();
1265 for ( size_t n
= 0; n
< count
; n
++ )
1268 s
.Printf("%s client data for '%s'",
1269 name
, control
->GetString(n
).c_str());
1271 control
->SetClientObject(n
, new wxStringClientData(s
));