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"
64 // VZ: this is a temp. hack, will remove soon
65 #ifndef wxUSE_SPINCTRL
66 #define wxUSE_SPINCTRL 1
70 #include "wx/spinctrl.h"
71 #endif // wxUSE_SPINCTRL
73 //----------------------------------------------------------------------
75 //----------------------------------------------------------------------
77 class MyApp
: public wxApp
83 class MyPanel
: public wxPanel
86 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
89 void OnSize( wxSizeEvent
& event
);
90 void OnListBox( wxCommandEvent
&event
);
91 void OnListBoxDoubleClick( wxCommandEvent
&event
);
92 void OnListBoxButtons( wxCommandEvent
&event
);
93 void OnChoice( wxCommandEvent
&event
);
94 void OnChoiceButtons( wxCommandEvent
&event
);
95 void OnCombo( wxCommandEvent
&event
);
96 void OnComboButtons( wxCommandEvent
&event
);
97 void OnRadio( wxCommandEvent
&event
);
98 void OnRadioButtons( wxCommandEvent
&event
);
99 void OnSetFont( wxCommandEvent
&event
);
100 void OnPageChanged( wxNotebookEvent
&event
);
101 void OnPageChanging( wxNotebookEvent
&event
);
102 void OnSliderUpdate( wxCommandEvent
&event
);
103 void OnUpdateLabel( wxCommandEvent
&event
);
105 void OnSpinUp( wxSpinEvent
&event
);
106 void OnSpinDown( wxSpinEvent
&event
);
107 void OnSpinUpdate( wxSpinEvent
&event
);
108 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
109 void OnShowProgress( wxCommandEvent
&event
);
110 #endif // wxUSE_SPINBTN
113 void OnSpinCtrl(wxSpinEvent
& event
);
114 #endif // wxUSE_SPINCTRL
116 void OnEnableAll(wxCommandEvent
& event
);
117 void OnChangeColour(wxCommandEvent
& event
);
119 wxListBox
*m_listbox
,
127 wxButton
*m_fontButton
;
128 wxButton
*m_lbSelectNum
;
129 wxButton
*m_lbSelectThis
;
131 wxSpinButton
*m_spinbutton
;
132 wxButton
*m_btnProgress
;
133 #endif // wxUSE_SPINBTN
136 wxSpinCtrl
*m_spinctrl
;
137 #endif // wxUSE_SPINCTRL
139 wxTextCtrl
*m_spintext
;
140 wxCheckBox
*m_checkbox
;
143 wxNotebook
*m_notebook
;
145 wxStaticText
*m_label
;
148 DECLARE_EVENT_TABLE()
151 class MyFrame
: public wxFrame
154 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
156 void OnQuit(wxCommandEvent
& event
);
157 void OnAbout(wxCommandEvent
& event
);
160 void OnSetTooltipDelay(wxCommandEvent
& event
);
161 void OnToggleTooltips(wxCommandEvent
& event
);
162 #endif // wxUSE_TOOLTIPS
164 void OnEnableAll(wxCommandEvent
& event
);
166 void OnIdle( wxIdleEvent
& event
);
167 void OnSize( wxSizeEvent
& event
);
168 void OnMove( wxMoveEvent
& event
);
171 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
174 msg
.Printf(_("pos=(%d, %d), size=%dx%d"),
175 pos
.x
, pos
.y
, size
.x
, size
.y
);
176 SetStatusText(msg
, 1);
181 DECLARE_EVENT_TABLE()
184 //----------------------------------------------------------------------
186 //----------------------------------------------------------------------
188 static void SetControlClientData(const char *name
,
189 wxControlWithItems
*control
);
193 //----------------------------------------------------------------------
195 //----------------------------------------------------------------------
204 MINIMAL_SET_TOOLTIP_DELAY
= 200,
205 MINIMAL_ENABLE_TOOLTIPS
,
213 // Create the main frame window
214 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
215 "Controls wxWindows App",
219 // The wxICON() macros loads an icon from a resource under Windows
220 // and uses an #included XPM image under GTK+ and Motif
222 frame
->SetIcon( wxICON(mondrian
) );
224 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
225 file_menu
->Append(MINIMAL_ABOUT
, "&About\tF1");
226 file_menu
->AppendSeparator();
227 file_menu
->Append(MINIMAL_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
229 wxMenuBar
*menu_bar
= new wxMenuBar
;
230 menu_bar
->Append(file_menu
, "&File");
233 wxMenu
*tooltip_menu
= new wxMenu
;
234 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
235 tooltip_menu
->AppendSeparator();
236 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
237 "enable/disable tooltips", TRUE
);
238 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
239 menu_bar
->Append(tooltip_menu
, "&Tooltips");
240 #endif // wxUSE_TOOLTIPS
242 wxMenu
*panel_menu
= new wxMenu
;
243 panel_menu
->Append(MINIMAL_ENABLE_ALL
, "&Disable all\tCtrl-E",
244 "Enable/disable all panel controls", TRUE
);
245 menu_bar
->Append(panel_menu
, "&Panel");
247 frame
->SetMenuBar(menu_bar
);
250 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
257 //----------------------------------------------------------------------
259 //----------------------------------------------------------------------
261 const int ID_NOTEBOOK
= 1000;
263 const int ID_LISTBOX
= 130;
264 const int ID_LISTBOX_SEL_NUM
= 131;
265 const int ID_LISTBOX_SEL_STR
= 132;
266 const int ID_LISTBOX_CLEAR
= 133;
267 const int ID_LISTBOX_APPEND
= 134;
268 const int ID_LISTBOX_DELETE
= 135;
269 const int ID_LISTBOX_FONT
= 136;
270 const int ID_LISTBOX_ENABLE
= 137;
271 const int ID_LISTBOX_SORTED
= 138;
273 const int ID_CHOICE
= 120;
274 const int ID_CHOICE_SEL_NUM
= 121;
275 const int ID_CHOICE_SEL_STR
= 122;
276 const int ID_CHOICE_CLEAR
= 123;
277 const int ID_CHOICE_APPEND
= 124;
278 const int ID_CHOICE_DELETE
= 125;
279 const int ID_CHOICE_FONT
= 126;
280 const int ID_CHOICE_ENABLE
= 127;
281 const int ID_CHOICE_SORTED
= 128;
283 const int ID_COMBO
= 140;
284 const int ID_COMBO_SEL_NUM
= 141;
285 const int ID_COMBO_SEL_STR
= 142;
286 const int ID_COMBO_CLEAR
= 143;
287 const int ID_COMBO_APPEND
= 144;
288 const int ID_COMBO_DELETE
= 145;
289 const int ID_COMBO_FONT
= 146;
290 const int ID_COMBO_ENABLE
= 147;
292 const int ID_RADIOBOX
= 160;
293 const int ID_RADIOBOX_SEL_NUM
= 161;
294 const int ID_RADIOBOX_SEL_STR
= 162;
295 const int ID_RADIOBOX_FONT
= 163;
296 const int ID_RADIOBOX_ENABLE
= 164;
298 const int ID_RADIOBUTTON_1
= 166;
299 const int ID_RADIOBUTTON_2
= 167;
301 const int ID_SET_FONT
= 170;
303 const int ID_GAUGE
= 180;
304 const int ID_SLIDER
= 181;
306 const int ID_SPIN
= 182;
307 const int ID_BTNPROGRESS
= 183;
308 const int ID_BUTTON_LABEL
= 184;
309 const int ID_SPINCTRL
= 185;
311 const int ID_CHANGE_COLOUR
= 200;
313 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
314 EVT_SIZE ( MyPanel::OnSize
)
315 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
316 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
317 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
318 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
319 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
320 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
321 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
322 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
323 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
324 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
325 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
326 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
327 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
328 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
329 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
330 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
331 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
332 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
333 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
334 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
335 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
336 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
337 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
338 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
339 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
340 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
341 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
342 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
343 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
344 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
345 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
346 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
347 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
348 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
349 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
350 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
352 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
353 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
354 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
355 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
356 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
357 #endif // wxUSE_SPINBTN
359 EVT_SPIN (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
360 #endif // wxUSE_SPINCTRL
361 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
362 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
365 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
366 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
367 m_text(NULL
), m_notebook(NULL
)
369 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
370 // m_text->SetBackgroundColour("wheat");
372 delete wxLog::SetActiveTarget(new wxLogStderr
);
374 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
389 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
392 // fill the image list
393 wxImageList
*imagelist
= new wxImageList(32, 32);
395 imagelist
-> Add( wxBitmap( list_xpm
));
396 imagelist
-> Add( wxBitmap( choice_xpm
));
397 imagelist
-> Add( wxBitmap( combo_xpm
));
398 imagelist
-> Add( wxBitmap( text_xpm
));
399 imagelist
-> Add( wxBitmap( radio_xpm
));
400 imagelist
-> Add( wxBitmap( gauge_xpm
));
401 m_notebook
->SetImageList(imagelist
);
402 #elif defined(__WXMSW__)
403 // load images from resources
406 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
408 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
410 static const char *s_iconNames
[Image_Max
] =
412 "list", "choice", "combo", "text", "radio", "gauge"
415 for ( size_t n
= 0; n
< Image_Max
; n
++ )
417 wxBitmap
bmp(s_iconNames
[n
]);
418 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
420 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
425 m_notebook
->SetImageList(imagelist
);
429 #define Image_List -1
430 #define Image_Choice -1
431 #define Image_Combo -1
432 #define Image_Text -1
433 #define Image_Radio -1
434 #define Image_Gauge -1
439 wxPanel
*panel
= new wxPanel(m_notebook
);
440 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
441 wxPoint(10,10), wxSize(120,70),
442 5, choices
, wxLB_ALWAYS_SB
);
443 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
444 wxPoint(10,90), wxSize(120,70),
445 5, choices
, wxLB_SORT
);
447 SetControlClientData("listbox", m_listbox
);
448 SetControlClientData("listbox", m_listboxSorted
);
450 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
452 m_listbox
->SetToolTip( "This is a list box" );
453 #endif // wxUSE_TOOLTIPS
455 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
456 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
457 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
458 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
459 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
460 wxButton
*button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
462 button
->SetToolTip( "Press here to set italic font" );
463 #endif // wxUSE_TOOLTIPS
465 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
466 m_checkbox
->SetValue(FALSE
);
468 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
469 #endif // wxUSE_TOOLTIPS
470 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
472 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
474 panel
= new wxPanel(m_notebook
);
475 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
476 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
477 5, choices
, wxCB_SORT
);
479 SetControlClientData("choice", m_choice
);
480 SetControlClientData("choice", m_choiceSorted
);
482 m_choice
->SetSelection(2);
483 m_choice
->SetBackgroundColour( "red" );
484 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
485 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
486 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
487 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
488 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
489 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
490 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
492 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
494 panel
= new wxPanel(m_notebook
);
495 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(10,10), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
496 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
497 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
498 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
499 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
500 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
501 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
502 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
503 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
505 wxString choices2
[] =
509 "Fourth", "Fifth", "Sixth",
510 "Seventh", "Eighth", "Nineth", "Tenth" */
513 panel
= new wxPanel(m_notebook
);
514 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
515 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
516 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
517 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
518 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
519 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
520 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
521 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30), wxRB_GROUP
);
522 rb
->SetValue( FALSE
);
523 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
524 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
526 panel
= new wxPanel(m_notebook
);
527 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
528 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
529 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
530 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(220,10), wxSize(270,130) );
532 // No wrapping text in wxStaticText yet :-(
533 (void)new wxStaticText( panel
, -1,
539 (void)new wxStaticText( panel
, -1,
540 "In order see the gauge (aka progress bar)\n"
541 "control do something you have to drag the\n"
542 "handle of the slider to the right.\n"
544 "This is also supposed to demonstrate how\n"
545 "to use static controls.\n",
550 int initialSpinValue
= -5;
552 s
<< initialSpinValue
;
553 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
555 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
556 m_spinbutton
->SetRange(-10,30);
557 m_spinbutton
->SetValue(initialSpinValue
);
559 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "Show progress dialog",
561 #endif // wxUSE_SPINBTN
564 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
565 m_spinctrl
->SetRange(10,30);
566 m_spinctrl
->SetValue(15);
567 #endif // wxUSE_SPINCTRL
569 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
571 panel
= new wxPanel(m_notebook
);
573 #ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
574 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
575 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
, wxPoint(10, 10));
577 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
578 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
581 wxBitmap
bitmap( 100, 100 );
583 dc
.SelectObject( bitmap
);
584 dc
.SetPen(*wxGREEN_PEN
);
585 dc
.DrawEllipse(5, 5, 90, 90);
586 dc
.DrawText("Bitmap", 20, 20);
587 dc
.SelectObject( wxNullBitmap
);
589 (void)new wxBitmapButton(panel
, -1, bitmap
, wxPoint(100, 20));
590 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "Toggle label", wxPoint(250, 20));
591 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
592 wxPoint(250, 60), wxDefaultSize
,
593 wxALIGN_RIGHT
| wxST_NO_AUTORESIZE
);
595 m_notebook
->AddPage(panel
, "wxBitmapXXX");
597 // --------------- TEST CODE ----------------------
599 // layout constraints
601 panel
= new wxPanel(m_notebook
);
602 panel
->SetAutoLayout( TRUE
);
604 wxLayoutConstraints
*c
;
605 c
= new wxLayoutConstraints
;
606 c
->top
.SameAs( panel
, wxTop
, 10 );
608 c
->left
.SameAs( panel
, wxLeft
, 10 );
609 c
->width
.PercentOf( panel
, wxWidth
, 40 );
611 wxButton
*pMyButton
= new wxButton(panel
, -1, "Test Button" );
612 pMyButton
->SetConstraints( c
);
614 c
= new wxLayoutConstraints
;
615 c
->top
.SameAs( panel
, wxTop
, 10 );
616 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
617 c
->right
.SameAs( panel
, wxRight
, 10 );
618 c
->width
.PercentOf( panel
, wxWidth
, 40 );
620 wxButton
*pMyButton2
= new wxButton(panel
, -1, "Test Button 2" );
621 pMyButton2
->SetConstraints( c
);
623 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
627 panel
= new wxPanel(m_notebook
);
628 panel
->SetAutoLayout( TRUE
);
630 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
632 sizer
->Add( new wxButton(panel
, -1, "Test Button" ), 3, wxALL
, 10 );
633 sizer
->Add( 20,20, 1 );
634 sizer
->Add( new wxButton(panel
, -1, "Test Button 2" ), 3, wxGROW
|wxALL
, 10 );
636 panel
->SetSizer( sizer
);
638 m_notebook
->AddPage(panel
, "wxSizer");
640 // --------------- TEST CODE ----------------------
644 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
648 GetClientSize( &x
, &y
);
650 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
651 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
654 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
656 int selOld
= event
.GetOldSelection();
659 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
660 "page change from taking place - if you select\n"
661 "[No] the current page will stay the third one\n",
663 wxICON_QUESTION
| wxYES_NO
) != wxYES
)
671 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
674 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
676 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
679 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
681 static wxColour s_colOld
;
683 // test panel colour changing and propagation to the subcontrols
686 SetBackgroundColour(s_colOld
);
687 s_colOld
= wxNullColour
;
689 m_lbSelectThis
->SetBackgroundColour("blue");
693 s_colOld
= GetBackgroundColour();
694 SetBackgroundColour("green");
696 m_lbSelectThis
->SetBackgroundColour("red");
699 m_lbSelectThis
->Refresh();
703 void MyPanel::OnListBox( wxCommandEvent
&event
)
705 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
708 m_text
->AppendText( "ListBox event selection string is: '" );
709 m_text
->AppendText( event
.GetString() );
710 m_text
->AppendText( "'\n" );
711 m_text
->AppendText( "ListBox control selection string is: '" );
712 m_text
->AppendText( listbox
->GetStringSelection() );
713 m_text
->AppendText( "'\n" );
715 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
716 m_text
->AppendText( "ListBox event client data string is: '" );
717 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
718 m_text
->AppendText( obj
->GetData() );
720 m_text
->AppendText( wxString("none") );
722 m_text
->AppendText( "'\n" );
723 m_text
->AppendText( "ListBox control client data string is: '" );
724 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
726 m_text
->AppendText( obj
->GetData() );
728 m_text
->AppendText( wxString("none") );
729 m_text
->AppendText( "'\n" );
732 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
734 m_text
->AppendText( "ListBox double click string is: " );
735 m_text
->AppendText( event
.GetString() );
736 m_text
->AppendText( "\n" );
739 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
741 switch (event
.GetId())
743 case ID_LISTBOX_ENABLE
:
745 m_text
->AppendText("Checkbox clicked.\n");
746 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
749 cb
->SetToolTip( "Click to enable listbox" );
751 cb
->SetToolTip( "Click to disable listbox" );
752 #endif // wxUSE_TOOLTIPS
753 m_listbox
->Enable( event
.GetInt() == 0 );
754 m_listboxSorted
->Enable( event
.GetInt() == 0 );
757 case ID_LISTBOX_SEL_NUM
:
759 m_listbox
->SetSelection( 2 );
760 m_listboxSorted
->SetSelection( 2 );
761 m_lbSelectThis
->WarpPointer( 40, 14 );
764 case ID_LISTBOX_SEL_STR
:
766 m_listbox
->SetStringSelection( "This" );
767 m_listboxSorted
->SetStringSelection( "This" );
768 m_lbSelectNum
->WarpPointer( 40, 14 );
771 case ID_LISTBOX_CLEAR
:
774 m_listboxSorted
->Clear();
777 case ID_LISTBOX_APPEND
:
779 m_listbox
->Append( "Hi!" );
780 m_listboxSorted
->Append( "Hi!" );
783 case ID_LISTBOX_DELETE
:
786 idx
= m_listbox
->GetSelection();
787 m_listbox
->Delete( idx
);
788 idx
= m_listboxSorted
->GetSelection();
789 m_listboxSorted
->Delete( idx
);
792 case ID_LISTBOX_FONT
:
794 m_listbox
->SetFont( *wxITALIC_FONT
);
795 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
796 m_checkbox
->SetFont( *wxITALIC_FONT
);
802 void MyPanel::OnChoice( wxCommandEvent
&event
)
804 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
807 m_text
->AppendText( "Choice event selection string is: '" );
808 m_text
->AppendText( event
.GetString() );
809 m_text
->AppendText( "'\n" );
810 m_text
->AppendText( "Choice control selection string is: '" );
811 m_text
->AppendText( choice
->GetStringSelection() );
812 m_text
->AppendText( "'\n" );
814 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
815 m_text
->AppendText( "Choice event client data string is: '" );
818 m_text
->AppendText( obj
->GetData() );
820 m_text
->AppendText( wxString("none") );
822 m_text
->AppendText( "'\n" );
823 m_text
->AppendText( "Choice control client data string is: '" );
824 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
827 m_text
->AppendText( obj
->GetData() );
829 m_text
->AppendText( wxString("none") );
830 m_text
->AppendText( "'\n" );
833 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
835 switch (event
.GetId())
837 case ID_CHOICE_ENABLE
:
839 m_choice
->Enable( event
.GetInt() == 0 );
840 m_choiceSorted
->Enable( event
.GetInt() == 0 );
843 case ID_CHOICE_SEL_NUM
:
845 m_choice
->SetSelection( 2 );
846 m_choiceSorted
->SetSelection( 2 );
849 case ID_CHOICE_SEL_STR
:
851 m_choice
->SetStringSelection( "This" );
852 m_choiceSorted
->SetStringSelection( "This" );
855 case ID_CHOICE_CLEAR
:
858 m_choiceSorted
->Clear();
861 case ID_CHOICE_APPEND
:
863 m_choice
->Append( "Hi!" );
864 m_choiceSorted
->Append( "Hi!" );
867 case ID_CHOICE_DELETE
:
869 int idx
= m_choice
->GetSelection();
870 m_choice
->Delete( idx
);
871 idx
= m_choiceSorted
->GetSelection();
872 m_choiceSorted
->Delete( idx
);
877 m_choice
->SetFont( *wxITALIC_FONT
);
878 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
884 void MyPanel::OnCombo( wxCommandEvent
&event
)
886 m_text
->AppendText( "ComboBox event selection string is: " );
887 m_text
->AppendText( event
.GetString() );
888 m_text
->AppendText( "\n" );
889 m_text
->AppendText( "ComboBox control selection string is: " );
890 m_text
->AppendText( m_combo
->GetStringSelection() );
891 m_text
->AppendText( "\n" );
894 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
896 switch (event
.GetId())
898 case ID_COMBO_ENABLE
:
900 m_combo
->Enable( event
.GetInt() == 0 );
903 case ID_COMBO_SEL_NUM
:
905 m_combo
->SetSelection( 2 );
908 case ID_COMBO_SEL_STR
:
910 m_combo
->SetStringSelection( "This" );
918 case ID_COMBO_APPEND
:
920 m_combo
->Append( "Hi!" );
923 case ID_COMBO_DELETE
:
925 int idx
= m_combo
->GetSelection();
926 m_combo
->Delete( idx
);
931 m_combo
->SetFont( *wxITALIC_FONT
);
937 void MyPanel::OnRadio( wxCommandEvent
&event
)
939 m_text
->AppendText( "RadioBox selection string is: " );
940 m_text
->AppendText( event
.GetString() );
941 m_text
->AppendText( "\n" );
944 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
946 switch (event
.GetId())
948 case ID_RADIOBOX_ENABLE
:
950 m_radio
->Enable( event
.GetInt() == 0 );
953 case ID_RADIOBOX_SEL_NUM
:
955 m_radio
->SetSelection( 2 );
958 case ID_RADIOBOX_SEL_STR
:
960 m_radio
->SetStringSelection( "This" );
963 case ID_RADIOBOX_FONT
:
965 m_radio
->SetFont( *wxITALIC_FONT
);
971 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
973 m_fontButton
->SetFont( *wxITALIC_FONT
);
974 m_text
->SetFont( *wxITALIC_FONT
);
977 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
979 static bool s_long
= TRUE
;
982 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
985 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
987 m_gauge
->SetValue( m_slider
->GetValue() );
992 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
995 s
.Printf(_T("Current value of spin ctrl is %d\n"), m_spinctrl
->GetValue());
996 m_text
->AppendText(s
);
999 #endif // wxUSE_SPINCTRL
1002 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1005 value
.Printf( _T("Spin control up: current = %d\n"),
1006 m_spinbutton
->GetValue());
1008 if ( m_spinbutton
->GetValue() > 17 )
1010 value
+= _T("Preventing the spin button from going above 17.\n");
1015 m_text
->AppendText(value
);
1018 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1021 value
.Printf( _T("Spin control down: current = %d\n"),
1022 m_spinbutton
->GetValue());
1024 if ( m_spinbutton
->GetValue() < -17 )
1026 value
+= _T("Preventing the spin button from going below -17.\n");
1031 m_text
->AppendText(value
);
1034 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1037 value
.Printf( _T("%d"), event
.GetPosition() );
1038 m_spintext
->SetValue( value
);
1040 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1041 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1042 m_spinbutton
->GetValue());
1044 m_text
->AppendText(value
);
1047 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1049 event
.Enable( m_spinbutton
->GetValue() > 0 );
1052 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1054 int max
= m_spinbutton
->GetValue();
1055 wxProgressDialog
dialog("Progress dialog example",
1056 "An informative message",
1062 wxPD_ESTIMATED_TIME
|
1063 wxPD_REMAINING_TIME
);
1067 for ( int i
= 0; i
< max
&& cont
; i
++ )
1072 cont
= dialog
.Update(i
, "That's all, folks!");
1074 else if ( i
== max
/ 2 )
1076 cont
= dialog
.Update(i
, "Only a half left!");
1080 cont
= dialog
.Update(i
);
1086 *m_text
<< "Progress dialog aborted!\n";
1090 *m_text
<< "Countdown from " << max
<< " finished.\n";
1094 #endif // wxUSE_SPINBTN
1098 delete m_notebook
->GetImageList();
1101 //----------------------------------------------------------------------
1103 //----------------------------------------------------------------------
1105 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1106 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1107 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1109 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1110 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1111 #endif // wxUSE_TOOLTIPS
1113 EVT_MENU(MINIMAL_ENABLE_ALL
, MyFrame::OnEnableAll
)
1115 EVT_SIZE(MyFrame::OnSize
)
1116 EVT_MOVE(MyFrame::OnMove
)
1118 EVT_IDLE(MyFrame::OnIdle
)
1121 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1122 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1126 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1129 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1134 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1136 wxBeginBusyCursor();
1138 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1145 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1147 static long s_delay
= 5000;
1150 delay
.Printf( _T("%ld"), s_delay
);
1152 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1153 "Set tooltip delay",
1157 return; // cancelled
1159 wxSscanf(delay
, _T("%ld"), &s_delay
);
1161 wxToolTip::SetDelay(s_delay
);
1163 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1166 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1168 static bool s_enabled
= TRUE
;
1170 s_enabled
= !s_enabled
;
1172 wxToolTip::Enable(s_enabled
);
1174 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1178 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1180 static bool s_enable
= TRUE
;
1182 s_enable
= !s_enable
;
1183 m_panel
->Enable(s_enable
);
1186 void MyFrame::OnMove( wxMoveEvent
& event
)
1188 UpdateStatusBar(event
.GetPosition(), GetSize());
1193 void MyFrame::OnSize( wxSizeEvent
& event
)
1195 UpdateStatusBar(GetPosition(), event
.GetSize());
1200 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1202 // track the window which has the focus in the status bar
1203 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1204 wxWindow
*focus
= wxWindow::FindFocus();
1205 if ( focus
&& (focus
!= s_windowFocus
) )
1207 s_windowFocus
= focus
;
1212 _T("Focus: wxWindow = %p, HWND = %08x"),
1214 _T("Focus: wxWindow = %p"),
1218 , s_windowFocus
->GetHWND()
1226 static void SetControlClientData(const char *name
,
1227 wxControlWithItems
*control
)
1229 size_t count
= control
->GetCount();
1230 for ( size_t n
= 0; n
< count
; n
++ )
1233 s
.Printf("%s client data for '%s'",
1234 name
, control
->GetString(n
).c_str());
1236 control
->SetClientObject(n
, new wxStringClientData(s
));