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",
224 frame
->SetSizeHints( 500, 425 );
227 // The wxICON() macros loads an icon from a resource under Windows
228 // and uses an #included XPM image under GTK+ and Motif
230 frame
->SetIcon( wxICON(mondrian
) );
232 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
234 file_menu
->Append(MINIMAL_ABOUT
, "&About\tF1");
235 file_menu
->AppendSeparator();
236 file_menu
->Append(MINIMAL_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
238 wxMenuBar
*menu_bar
= new wxMenuBar
;
239 menu_bar
->Append(file_menu
, "&File");
242 wxMenu
*tooltip_menu
= new wxMenu
;
243 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
244 tooltip_menu
->AppendSeparator();
245 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
246 "enable/disable tooltips", TRUE
);
247 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
248 menu_bar
->Append(tooltip_menu
, "&Tooltips");
249 #endif // wxUSE_TOOLTIPS
251 wxMenu
*panel_menu
= new wxMenu
;
252 panel_menu
->Append(MINIMAL_ENABLE_ALL
, "&Disable all\tCtrl-E",
253 "Enable/disable all panel controls", TRUE
);
254 menu_bar
->Append(panel_menu
, "&Panel");
256 frame
->SetMenuBar(menu_bar
);
259 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
261 frame
->GetPanel()->m_notebook
->SetSelection(3);
268 //----------------------------------------------------------------------
270 //----------------------------------------------------------------------
272 const int ID_NOTEBOOK
= 1000;
274 const int ID_LISTBOX
= 130;
275 const int ID_LISTBOX_SEL_NUM
= 131;
276 const int ID_LISTBOX_SEL_STR
= 132;
277 const int ID_LISTBOX_CLEAR
= 133;
278 const int ID_LISTBOX_APPEND
= 134;
279 const int ID_LISTBOX_DELETE
= 135;
280 const int ID_LISTBOX_FONT
= 136;
281 const int ID_LISTBOX_ENABLE
= 137;
282 const int ID_LISTBOX_SORTED
= 138;
284 const int ID_CHOICE
= 120;
285 const int ID_CHOICE_SEL_NUM
= 121;
286 const int ID_CHOICE_SEL_STR
= 122;
287 const int ID_CHOICE_CLEAR
= 123;
288 const int ID_CHOICE_APPEND
= 124;
289 const int ID_CHOICE_DELETE
= 125;
290 const int ID_CHOICE_FONT
= 126;
291 const int ID_CHOICE_ENABLE
= 127;
292 const int ID_CHOICE_SORTED
= 128;
294 const int ID_COMBO
= 140;
295 const int ID_COMBO_SEL_NUM
= 141;
296 const int ID_COMBO_SEL_STR
= 142;
297 const int ID_COMBO_CLEAR
= 143;
298 const int ID_COMBO_APPEND
= 144;
299 const int ID_COMBO_DELETE
= 145;
300 const int ID_COMBO_FONT
= 146;
301 const int ID_COMBO_ENABLE
= 147;
303 const int ID_RADIOBOX
= 160;
304 const int ID_RADIOBOX_SEL_NUM
= 161;
305 const int ID_RADIOBOX_SEL_STR
= 162;
306 const int ID_RADIOBOX_FONT
= 163;
307 const int ID_RADIOBOX_ENABLE
= 164;
309 const int ID_RADIOBUTTON_1
= 166;
310 const int ID_RADIOBUTTON_2
= 167;
312 const int ID_SET_FONT
= 170;
314 const int ID_GAUGE
= 180;
315 const int ID_SLIDER
= 181;
317 const int ID_SPIN
= 182;
318 const int ID_BTNPROGRESS
= 183;
319 const int ID_BUTTON_LABEL
= 184;
320 const int ID_SPINCTRL
= 185;
322 const int ID_CHANGE_COLOUR
= 200;
324 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
325 EVT_SIZE ( MyPanel::OnSize
)
326 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
327 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
328 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
329 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
330 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
331 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
332 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
333 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
334 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
335 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
336 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
337 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
338 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
339 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
340 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
341 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
342 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
343 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
344 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
345 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
346 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
347 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
348 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
349 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
350 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
351 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
352 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
353 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
354 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
355 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
356 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
357 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
358 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
359 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
360 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
361 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
363 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
364 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
365 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
366 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
367 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
368 #endif // wxUSE_SPINBTN
370 EVT_SPIN (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
371 #endif // wxUSE_SPINCTRL
372 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
373 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
376 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
377 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
378 m_text(NULL
), m_notebook(NULL
)
380 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
381 // m_text->SetBackgroundColour("wheat");
383 delete wxLog::SetActiveTarget(new wxLogStderr
);
385 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
400 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
403 // fill the image list
404 wxImageList
*imagelist
= new wxImageList(32, 32);
406 imagelist
-> Add( wxBitmap( list_xpm
));
407 imagelist
-> Add( wxBitmap( choice_xpm
));
408 imagelist
-> Add( wxBitmap( combo_xpm
));
409 imagelist
-> Add( wxBitmap( text_xpm
));
410 imagelist
-> Add( wxBitmap( radio_xpm
));
411 imagelist
-> Add( wxBitmap( gauge_xpm
));
412 m_notebook
->SetImageList(imagelist
);
413 #elif defined(__WXMSW__)
414 // load images from resources
417 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
419 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
421 static const char *s_iconNames
[Image_Max
] =
423 "list", "choice", "combo", "text", "radio", "gauge"
426 for ( size_t n
= 0; n
< Image_Max
; n
++ )
428 wxBitmap
bmp(s_iconNames
[n
]);
429 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
431 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
436 m_notebook
->SetImageList(imagelist
);
440 #define Image_List -1
441 #define Image_Choice -1
442 #define Image_Combo -1
443 #define Image_Text -1
444 #define Image_Radio -1
445 #define Image_Gauge -1
450 wxPanel
*panel
= new wxPanel(m_notebook
);
451 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
452 wxPoint(10,10), wxSize(120,70),
453 5, choices
, wxLB_ALWAYS_SB
);
454 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
455 wxPoint(10,90), wxSize(120,70),
456 5, choices
, wxLB_SORT
);
458 SetControlClientData("listbox", m_listbox
);
459 SetControlClientData("listbox", m_listboxSorted
);
461 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
463 m_listbox
->SetToolTip( "This is a list box" );
464 #endif // wxUSE_TOOLTIPS
466 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
467 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
468 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
469 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
470 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
471 wxButton
*button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
473 button
->SetToolTip( "Press here to set italic font" );
474 #endif // wxUSE_TOOLTIPS
476 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
477 m_checkbox
->SetValue(FALSE
);
479 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
480 #endif // wxUSE_TOOLTIPS
481 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
483 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
485 panel
= new wxPanel(m_notebook
);
486 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
487 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
488 5, choices
, wxCB_SORT
);
491 SetControlClientData("choice", m_choice
);
492 SetControlClientData("choice", m_choiceSorted
);
495 m_choice
->SetSelection(2);
496 m_choice
->SetBackgroundColour( "red" );
497 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
498 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
499 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
500 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
501 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
502 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
503 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
505 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
507 panel
= new wxPanel(m_notebook
);
508 (void)new wxStaticBox( panel
, -1, "Box around combobox",
509 wxPoint(5, 5), wxSize(150, 100));
510 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(20,20), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
511 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
512 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
513 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
514 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
515 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
516 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
517 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
518 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
520 wxString choices2
[] =
524 "Fourth", "Fifth", "Sixth",
525 "Seventh", "Eighth", "Nineth", "Tenth" */
528 panel
= new wxPanel(m_notebook
);
529 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
530 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
533 m_radio
->SetToolTip("Ever seen a radiobox?");
534 #endif // wxUSE_TOOLTIPS
536 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
537 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
538 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
539 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
540 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
541 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30), wxRB_GROUP
);
542 rb
->SetValue( FALSE
);
543 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
544 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
546 panel
= new wxPanel(m_notebook
);
547 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
548 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
549 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
550 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(220,10), wxSize(270,130) );
552 // No wrapping text in wxStaticText yet :-(
553 (void)new wxStaticText( panel
, -1,
559 (void)new wxStaticText( panel
, -1,
560 "In order see the gauge (aka progress bar)\n"
561 "control do something you have to drag the\n"
562 "handle of the slider to the right.\n"
564 "This is also supposed to demonstrate how\n"
565 "to use static controls.\n",
570 int initialSpinValue
= -5;
572 s
<< initialSpinValue
;
573 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
575 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
576 m_spinbutton
->SetRange(-10,30);
577 m_spinbutton
->SetValue(initialSpinValue
);
579 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "Show progress dialog",
581 #endif // wxUSE_SPINBTN
584 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
585 m_spinctrl
->SetRange(10,30);
586 m_spinctrl
->SetValue(15);
587 #endif // wxUSE_SPINCTRL
589 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
591 panel
= new wxPanel(m_notebook
);
593 #ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
594 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
595 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
598 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
599 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
602 wxBitmap
bitmap( 100, 100 );
604 dc
.SelectObject( bitmap
);
605 dc
.SetPen(*wxGREEN_PEN
);
607 dc
.DrawEllipse(5, 5, 90, 90);
608 dc
.DrawText("Bitmap", 30, 40);
609 dc
.SelectObject( wxNullBitmap
);
611 (void)new wxBitmapButton(panel
, -1, bitmap
, wxPoint(100, 20));
613 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
614 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
615 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
616 wxBitmapButton
*bmpBtn
= new wxBitmapButton
622 bmpBtn
->SetBitmapSelected(bmp2
);
623 bmpBtn
->SetBitmapFocus(bmp3
);
625 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "Toggle label", wxPoint(250, 20));
626 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
627 wxPoint(250, 60), wxDefaultSize
,
628 wxALIGN_RIGHT
| wxST_NO_AUTORESIZE
);
630 m_notebook
->AddPage(panel
, "wxBitmapXXX");
632 // --------------- TEST CODE ----------------------
634 // layout constraints
636 panel
= new wxPanel(m_notebook
);
637 panel
->SetAutoLayout( TRUE
);
639 wxLayoutConstraints
*c
;
640 c
= new wxLayoutConstraints
;
641 c
->top
.SameAs( panel
, wxTop
, 10 );
643 c
->left
.SameAs( panel
, wxLeft
, 10 );
644 c
->width
.PercentOf( panel
, wxWidth
, 40 );
646 wxButton
*pMyButton
= new wxButton(panel
, -1, "Test Button" );
647 pMyButton
->SetConstraints( c
);
649 c
= new wxLayoutConstraints
;
650 c
->top
.SameAs( panel
, wxTop
, 10 );
651 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
652 c
->right
.SameAs( panel
, wxRight
, 10 );
653 c
->width
.PercentOf( panel
, wxWidth
, 40 );
655 wxButton
*pMyButton2
= new wxButton(panel
, -1, "Test Button 2" );
656 pMyButton2
->SetConstraints( c
);
658 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
662 panel
= new wxPanel(m_notebook
);
663 panel
->SetAutoLayout( TRUE
);
665 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
667 sizer
->Add( new wxButton(panel
, -1, "Test Button" ), 3, wxALL
, 10 );
668 sizer
->Add( 20,20, 1 );
669 sizer
->Add( new wxButton(panel
, -1, "Test Button 2" ), 3, wxGROW
|wxALL
, 10 );
671 panel
->SetSizer( sizer
);
673 m_notebook
->AddPage(panel
, "wxSizer");
675 // --------------- TEST CODE ----------------------
679 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
683 GetClientSize( &x
, &y
);
685 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
686 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
689 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
691 int selOld
= event
.GetOldSelection();
694 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
695 "page change from taking place - if you select\n"
696 "[No] the current page will stay the third one\n",
698 wxICON_QUESTION
| wxYES_NO
) != wxYES
)
706 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
709 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
711 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
714 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
716 static wxColour s_colOld
;
718 // test panel colour changing and propagation to the subcontrols
721 SetBackgroundColour(s_colOld
);
722 s_colOld
= wxNullColour
;
724 m_lbSelectThis
->SetBackgroundColour("blue");
728 s_colOld
= GetBackgroundColour();
729 SetBackgroundColour("green");
731 m_lbSelectThis
->SetBackgroundColour("red");
734 m_lbSelectThis
->Refresh();
738 void MyPanel::OnListBox( wxCommandEvent
&event
)
740 // GetParent()->Move(100, 100);
742 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
745 m_text
->AppendText( "ListBox event selection string is: '" );
746 m_text
->AppendText( event
.GetString() );
747 m_text
->AppendText( "'\n" );
748 m_text
->AppendText( "ListBox control selection string is: '" );
749 m_text
->AppendText( listbox
->GetStringSelection() );
750 m_text
->AppendText( "'\n" );
752 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
753 m_text
->AppendText( "ListBox event client data string is: '" );
754 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
755 m_text
->AppendText( obj
->GetData() );
757 m_text
->AppendText( wxString("none") );
759 m_text
->AppendText( "'\n" );
760 m_text
->AppendText( "ListBox control client data string is: '" );
761 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
763 m_text
->AppendText( obj
->GetData() );
765 m_text
->AppendText( wxString("none") );
766 m_text
->AppendText( "'\n" );
769 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
771 m_text
->AppendText( "ListBox double click string is: " );
772 m_text
->AppendText( event
.GetString() );
773 m_text
->AppendText( "\n" );
776 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
778 switch (event
.GetId())
780 case ID_LISTBOX_ENABLE
:
782 m_text
->AppendText("Checkbox clicked.\n");
783 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
786 cb
->SetToolTip( "Click to enable listbox" );
788 cb
->SetToolTip( "Click to disable listbox" );
789 #endif // wxUSE_TOOLTIPS
790 m_listbox
->Enable( event
.GetInt() == 0 );
791 m_listboxSorted
->Enable( event
.GetInt() == 0 );
794 case ID_LISTBOX_SEL_NUM
:
796 m_listbox
->SetSelection( 2 );
797 m_listboxSorted
->SetSelection( 2 );
798 m_lbSelectThis
->WarpPointer( 40, 14 );
801 case ID_LISTBOX_SEL_STR
:
803 m_listbox
->SetStringSelection( "This" );
804 m_listboxSorted
->SetStringSelection( "This" );
805 m_lbSelectNum
->WarpPointer( 40, 14 );
808 case ID_LISTBOX_CLEAR
:
811 m_listboxSorted
->Clear();
814 case ID_LISTBOX_APPEND
:
816 m_listbox
->Append( "Hi!" );
817 m_listboxSorted
->Append( "Hi!" );
820 case ID_LISTBOX_DELETE
:
823 idx
= m_listbox
->GetSelection();
824 m_listbox
->Delete( idx
);
825 idx
= m_listboxSorted
->GetSelection();
826 m_listboxSorted
->Delete( idx
);
829 case ID_LISTBOX_FONT
:
831 m_listbox
->SetFont( *wxITALIC_FONT
);
832 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
833 m_checkbox
->SetFont( *wxITALIC_FONT
);
839 void MyPanel::OnChoice( wxCommandEvent
&event
)
841 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
844 m_text
->AppendText( "Choice event selection string is: '" );
845 m_text
->AppendText( event
.GetString() );
846 m_text
->AppendText( "'\n" );
847 m_text
->AppendText( "Choice control selection string is: '" );
848 m_text
->AppendText( choice
->GetStringSelection() );
849 m_text
->AppendText( "'\n" );
851 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
852 m_text
->AppendText( "Choice event client data string is: '" );
855 m_text
->AppendText( obj
->GetData() );
857 m_text
->AppendText( wxString("none") );
859 m_text
->AppendText( "'\n" );
860 m_text
->AppendText( "Choice control client data string is: '" );
861 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
864 m_text
->AppendText( obj
->GetData() );
866 m_text
->AppendText( wxString("none") );
867 m_text
->AppendText( "'\n" );
870 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
872 switch (event
.GetId())
874 case ID_CHOICE_ENABLE
:
876 m_choice
->Enable( event
.GetInt() == 0 );
877 m_choiceSorted
->Enable( event
.GetInt() == 0 );
880 case ID_CHOICE_SEL_NUM
:
882 m_choice
->SetSelection( 2 );
883 m_choiceSorted
->SetSelection( 2 );
886 case ID_CHOICE_SEL_STR
:
888 m_choice
->SetStringSelection( "This" );
889 m_choiceSorted
->SetStringSelection( "This" );
892 case ID_CHOICE_CLEAR
:
895 m_choiceSorted
->Clear();
898 case ID_CHOICE_APPEND
:
900 m_choice
->Append( "Hi!" );
901 m_choiceSorted
->Append( "Hi!" );
904 case ID_CHOICE_DELETE
:
906 int idx
= m_choice
->GetSelection();
907 m_choice
->Delete( idx
);
908 idx
= m_choiceSorted
->GetSelection();
909 m_choiceSorted
->Delete( idx
);
914 m_choice
->SetFont( *wxITALIC_FONT
);
915 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
921 void MyPanel::OnCombo( wxCommandEvent
&event
)
923 m_text
->AppendText( "ComboBox event selection string is: " );
924 m_text
->AppendText( event
.GetString() );
925 m_text
->AppendText( "\n" );
926 m_text
->AppendText( "ComboBox control selection string is: " );
927 m_text
->AppendText( m_combo
->GetStringSelection() );
928 m_text
->AppendText( "\n" );
931 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
933 switch (event
.GetId())
935 case ID_COMBO_ENABLE
:
937 m_combo
->Enable( event
.GetInt() == 0 );
940 case ID_COMBO_SEL_NUM
:
942 m_combo
->SetSelection( 2 );
945 case ID_COMBO_SEL_STR
:
947 m_combo
->SetStringSelection( "This" );
955 case ID_COMBO_APPEND
:
957 m_combo
->Append( "Hi!" );
960 case ID_COMBO_DELETE
:
962 int idx
= m_combo
->GetSelection();
963 m_combo
->Delete( idx
);
968 m_combo
->SetFont( *wxITALIC_FONT
);
974 void MyPanel::OnRadio( wxCommandEvent
&event
)
976 m_text
->AppendText( "RadioBox selection string is: " );
977 m_text
->AppendText( event
.GetString() );
978 m_text
->AppendText( "\n" );
981 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
983 switch (event
.GetId())
985 case ID_RADIOBOX_ENABLE
:
987 m_radio
->Enable( event
.GetInt() == 0 );
990 case ID_RADIOBOX_SEL_NUM
:
992 m_radio
->SetSelection( 2 );
995 case ID_RADIOBOX_SEL_STR
:
997 m_radio
->SetStringSelection( "This" );
1000 case ID_RADIOBOX_FONT
:
1002 m_radio
->SetFont( *wxITALIC_FONT
);
1008 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1010 m_fontButton
->SetFont( *wxITALIC_FONT
);
1011 m_text
->SetFont( *wxITALIC_FONT
);
1014 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
1016 static bool s_long
= TRUE
;
1019 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
1022 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1024 m_gauge
->SetValue( m_slider
->GetValue() );
1029 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1032 s
.Printf(_T("Current value of spin ctrl is %d\n"), m_spinctrl
->GetValue());
1033 m_text
->AppendText(s
);
1036 #endif // wxUSE_SPINCTRL
1039 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1042 value
.Printf( _T("Spin control up: current = %d\n"),
1043 m_spinbutton
->GetValue());
1045 if ( m_spinbutton
->GetValue() > 17 )
1047 value
+= _T("Preventing the spin button from going above 17.\n");
1052 m_text
->AppendText(value
);
1055 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1058 value
.Printf( _T("Spin control down: current = %d\n"),
1059 m_spinbutton
->GetValue());
1061 if ( m_spinbutton
->GetValue() < -17 )
1063 value
+= _T("Preventing the spin button from going below -17.\n");
1068 m_text
->AppendText(value
);
1071 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1074 value
.Printf( _T("%d"), event
.GetPosition() );
1075 m_spintext
->SetValue( value
);
1077 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1078 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1079 m_spinbutton
->GetValue());
1081 m_text
->AppendText(value
);
1084 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1086 event
.Enable( m_spinbutton
->GetValue() > 0 );
1089 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1091 int max
= m_spinbutton
->GetValue();
1092 wxProgressDialog
dialog("Progress dialog example",
1093 "An informative message",
1099 wxPD_ESTIMATED_TIME
|
1100 wxPD_REMAINING_TIME
);
1104 for ( int i
= 0; i
< max
&& cont
; i
++ )
1109 cont
= dialog
.Update(i
, "That's all, folks!");
1111 else if ( i
== max
/ 2 )
1113 cont
= dialog
.Update(i
, "Only a half left!");
1117 cont
= dialog
.Update(i
);
1123 *m_text
<< "Progress dialog aborted!\n";
1127 *m_text
<< "Countdown from " << max
<< " finished.\n";
1131 #endif // wxUSE_SPINBTN
1135 delete m_notebook
->GetImageList();
1138 //----------------------------------------------------------------------
1140 //----------------------------------------------------------------------
1142 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1143 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1144 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1146 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1147 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1148 #endif // wxUSE_TOOLTIPS
1150 EVT_MENU(MINIMAL_ENABLE_ALL
, MyFrame::OnEnableAll
)
1152 EVT_SIZE(MyFrame::OnSize
)
1153 EVT_MOVE(MyFrame::OnMove
)
1155 EVT_IDLE(MyFrame::OnIdle
)
1158 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1159 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1163 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1166 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1171 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1173 wxBeginBusyCursor();
1175 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1182 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1184 static long s_delay
= 5000;
1187 delay
.Printf( _T("%ld"), s_delay
);
1189 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1190 "Set tooltip delay",
1194 return; // cancelled
1196 wxSscanf(delay
, _T("%ld"), &s_delay
);
1198 wxToolTip::SetDelay(s_delay
);
1200 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1203 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1205 static bool s_enabled
= TRUE
;
1207 s_enabled
= !s_enabled
;
1209 wxToolTip::Enable(s_enabled
);
1211 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1215 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1217 static bool s_enable
= TRUE
;
1219 s_enable
= !s_enable
;
1220 m_panel
->Enable(s_enable
);
1223 void MyFrame::OnMove( wxMoveEvent
& event
)
1225 UpdateStatusBar(event
.GetPosition(), GetSize());
1230 void MyFrame::OnSize( wxSizeEvent
& event
)
1232 UpdateStatusBar(GetPosition(), event
.GetSize());
1237 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1239 // track the window which has the focus in the status bar
1240 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1241 wxWindow
*focus
= wxWindow::FindFocus();
1242 if ( focus
&& (focus
!= s_windowFocus
) )
1244 s_windowFocus
= focus
;
1249 _T("Focus: wxWindow = %p, HWND = %08x"),
1251 _T("Focus: wxWindow = %p"),
1255 , s_windowFocus
->GetHWND()
1263 static void SetControlClientData(const char *name
,
1264 wxControlWithItems
*control
)
1266 size_t count
= control
->GetCount();
1267 for ( size_t n
= 0; n
< count
; n
++ )
1270 s
.Printf("%s client data for '%s'",
1271 name
, control
->GetString(n
).c_str());
1273 control
->SetClientObject(n
, new wxStringClientData(s
));