1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Controls wxWindows sample
4 // Author: Robert Roebling
7 // Copyright: (c) Robert Roebling, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
12 #pragma implementation "controls.h"
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
26 #if !defined( __WXMSW__ ) || defined( __WIN95__ )
27 #include "wx/spinbutt.h"
29 #include "wx/notebook.h"
30 #include "wx/imaglist.h"
33 #include "wx/tooltip.h"
36 #if defined(__WXGTK__) || defined(__WXMOTIF__)
41 #include "mondrian.xpm"
42 #include "icons/choice.xpm"
43 #include "icons/combo.xpm"
44 #include "icons/list.xpm"
45 #include "icons/radio.xpm"
46 #include "icons/text.xpm"
47 #include "icons/gauge.xpm"
51 // Win16 doesn't have them
52 #undef wxUSE_SPINBUTTON
53 #define wxUSE_SPINBUTTON 0
55 #if !defined(wxUSE_SPINBUTTON)
56 #define wxUSE_SPINBUTTON 1
60 #include "wx/progdlg.h"
62 // VZ: this is a temp. hack, will remove soon
63 #define wxUSE_SPINCTRL 1
66 #include "wx/spinctrl.h"
67 #endif // wxUSE_SPINCTRL
69 //----------------------------------------------------------------------
71 //----------------------------------------------------------------------
73 class MyApp
: public wxApp
79 class MyPanel
: public wxPanel
82 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
85 void OnSize( wxSizeEvent
& event
);
86 void OnListBox( wxCommandEvent
&event
);
87 void OnListBoxDoubleClick( wxCommandEvent
&event
);
88 void OnListBoxButtons( wxCommandEvent
&event
);
89 void OnChoice( wxCommandEvent
&event
);
90 void OnChoiceButtons( wxCommandEvent
&event
);
91 void OnCombo( wxCommandEvent
&event
);
92 void OnComboButtons( wxCommandEvent
&event
);
93 void OnRadio( wxCommandEvent
&event
);
94 void OnRadioButtons( wxCommandEvent
&event
);
95 void OnSetFont( wxCommandEvent
&event
);
96 void OnPageChanged( wxNotebookEvent
&event
);
97 void OnPageChanging( wxNotebookEvent
&event
);
98 void OnSliderUpdate( wxCommandEvent
&event
);
99 void OnUpdateLabel( wxCommandEvent
&event
);
101 void OnSpinUp( wxSpinEvent
&event
);
102 void OnSpinDown( wxSpinEvent
&event
);
103 void OnSpinUpdate( wxSpinEvent
&event
);
104 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
105 void OnShowProgress( wxCommandEvent
&event
);
106 #endif // wxUSE_SPINBUTTON
109 void OnSpinCtrl(wxSpinEvent
& event
);
110 #endif // wxUSE_SPINCTRL
112 void OnEnableAll(wxCommandEvent
& event
);
113 void OnChangeColour(wxCommandEvent
& event
);
115 wxListBox
*m_listbox
,
123 wxButton
*m_fontButton
;
124 wxButton
*m_lbSelectNum
;
125 wxButton
*m_lbSelectThis
;
127 wxSpinButton
*m_spinbutton
;
128 wxButton
*m_btnProgress
;
129 #endif // wxUSE_SPINBUTTON
132 wxSpinCtrl
*m_spinctrl
;
133 #endif // wxUSE_SPINCTRL
135 wxTextCtrl
*m_spintext
;
136 wxCheckBox
*m_checkbox
;
139 wxNotebook
*m_notebook
;
141 wxStaticText
*m_label
;
144 DECLARE_EVENT_TABLE()
147 class MyFrame
: public wxFrame
150 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
152 void OnQuit(wxCommandEvent
& event
);
153 void OnAbout(wxCommandEvent
& event
);
156 void OnSetTooltipDelay(wxCommandEvent
& event
);
157 void OnToggleTooltips(wxCommandEvent
& event
);
158 #endif // wxUSE_TOOLTIPS
160 void OnEnableAll(wxCommandEvent
& event
);
162 void OnIdle( wxIdleEvent
& event
);
163 void OnSize( wxSizeEvent
& event
);
164 void OnMove( wxMoveEvent
& event
);
167 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
170 msg
.Printf(_("pos=(%d, %d), size=%dx%d"),
171 pos
.x
, pos
.y
, size
.x
, size
.y
);
172 SetStatusText(msg
, 1);
177 DECLARE_EVENT_TABLE()
180 //----------------------------------------------------------------------
182 //----------------------------------------------------------------------
184 static void SetControlClientData(const char *name
,
185 wxControlWithItems
*control
);
189 //----------------------------------------------------------------------
191 //----------------------------------------------------------------------
200 MINIMAL_SET_TOOLTIP_DELAY
= 200,
201 MINIMAL_ENABLE_TOOLTIPS
,
209 // Create the main frame window
210 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
211 "Controls wxWindows App",
215 // The wxICON() macros loads an icon from a resource under Windows
216 // and uses an #included XPM image under GTK+ and Motif
218 frame
->SetIcon( wxICON(mondrian
) );
220 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
221 file_menu
->Append(MINIMAL_ABOUT
, "&About\tF1");
222 file_menu
->AppendSeparator();
223 file_menu
->Append(MINIMAL_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
225 wxMenuBar
*menu_bar
= new wxMenuBar
;
226 menu_bar
->Append(file_menu
, "&File");
229 wxMenu
*tooltip_menu
= new wxMenu
;
230 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
231 tooltip_menu
->AppendSeparator();
232 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
233 "enable/disable tooltips", TRUE
);
234 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
235 menu_bar
->Append(tooltip_menu
, "&Tooltips");
236 #endif // wxUSE_TOOLTIPS
238 wxMenu
*panel_menu
= new wxMenu
;
239 panel_menu
->Append(MINIMAL_ENABLE_ALL
, "&Disable all\tCtrl-E",
240 "Enable/disable all panel controls", TRUE
);
241 menu_bar
->Append(panel_menu
, "&Panel");
243 frame
->SetMenuBar(menu_bar
);
246 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
253 //----------------------------------------------------------------------
255 //----------------------------------------------------------------------
257 const int ID_NOTEBOOK
= 1000;
259 const int ID_LISTBOX
= 130;
260 const int ID_LISTBOX_SEL_NUM
= 131;
261 const int ID_LISTBOX_SEL_STR
= 132;
262 const int ID_LISTBOX_CLEAR
= 133;
263 const int ID_LISTBOX_APPEND
= 134;
264 const int ID_LISTBOX_DELETE
= 135;
265 const int ID_LISTBOX_FONT
= 136;
266 const int ID_LISTBOX_ENABLE
= 137;
267 const int ID_LISTBOX_SORTED
= 138;
269 const int ID_CHOICE
= 120;
270 const int ID_CHOICE_SEL_NUM
= 121;
271 const int ID_CHOICE_SEL_STR
= 122;
272 const int ID_CHOICE_CLEAR
= 123;
273 const int ID_CHOICE_APPEND
= 124;
274 const int ID_CHOICE_DELETE
= 125;
275 const int ID_CHOICE_FONT
= 126;
276 const int ID_CHOICE_ENABLE
= 127;
277 const int ID_CHOICE_SORTED
= 128;
279 const int ID_COMBO
= 140;
280 const int ID_COMBO_SEL_NUM
= 141;
281 const int ID_COMBO_SEL_STR
= 142;
282 const int ID_COMBO_CLEAR
= 143;
283 const int ID_COMBO_APPEND
= 144;
284 const int ID_COMBO_DELETE
= 145;
285 const int ID_COMBO_FONT
= 146;
286 const int ID_COMBO_ENABLE
= 147;
288 const int ID_RADIOBOX
= 160;
289 const int ID_RADIOBOX_SEL_NUM
= 161;
290 const int ID_RADIOBOX_SEL_STR
= 162;
291 const int ID_RADIOBOX_FONT
= 163;
292 const int ID_RADIOBOX_ENABLE
= 164;
294 const int ID_RADIOBUTTON_1
= 166;
295 const int ID_RADIOBUTTON_2
= 167;
297 const int ID_SET_FONT
= 170;
299 const int ID_GAUGE
= 180;
300 const int ID_SLIDER
= 181;
302 const int ID_SPIN
= 182;
303 const int ID_BTNPROGRESS
= 183;
304 const int ID_BUTTON_LABEL
= 184;
305 const int ID_SPINCTRL
= 185;
307 const int ID_CHANGE_COLOUR
= 200;
309 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
310 EVT_SIZE ( MyPanel::OnSize
)
311 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
312 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
313 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
314 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
315 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
316 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
317 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
318 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
319 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
320 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
321 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
322 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
323 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
324 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
325 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
326 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
327 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
328 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
329 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
330 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
331 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
332 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
333 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
334 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
335 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
336 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
337 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
338 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
339 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
340 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
341 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
342 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
343 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
344 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
345 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
346 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
348 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
349 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
350 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
351 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
352 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
353 #endif // wxUSE_SPINBUTTON
355 EVT_SPIN (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
356 #endif // wxUSE_SPINCTRL
357 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
358 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
361 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
362 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
363 m_text(NULL
), m_notebook(NULL
)
365 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
366 // m_text->SetBackgroundColour("wheat");
368 delete wxLog::SetActiveTarget(new wxLogStderr
);
370 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
385 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
388 // fill the image list
389 wxImageList
*imagelist
= new wxImageList(32, 32);
391 imagelist
-> Add( wxBitmap( list_xpm
));
392 imagelist
-> Add( wxBitmap( choice_xpm
));
393 imagelist
-> Add( wxBitmap( combo_xpm
));
394 imagelist
-> Add( wxBitmap( text_xpm
));
395 imagelist
-> Add( wxBitmap( radio_xpm
));
396 imagelist
-> Add( wxBitmap( gauge_xpm
));
397 m_notebook
->SetImageList(imagelist
);
398 #elif defined(__WXMSW__)
399 // load images from resources
402 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
404 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
406 static const char *s_iconNames
[Image_Max
] =
408 "list", "choice", "combo", "text", "radio", "gauge"
411 for ( size_t n
= 0; n
< Image_Max
; n
++ )
413 wxBitmap
bmp(s_iconNames
[n
]);
414 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
416 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
421 m_notebook
->SetImageList(imagelist
);
425 #define Image_List -1
426 #define Image_Choice -1
427 #define Image_Combo -1
428 #define Image_Text -1
429 #define Image_Radio -1
430 #define Image_Gauge -1
435 wxPanel
*panel
= new wxPanel(m_notebook
);
436 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
437 wxPoint(10,10), wxSize(120,70),
438 5, choices
, wxLB_ALWAYS_SB
);
439 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
440 wxPoint(10,90), wxSize(120,70),
441 5, choices
, wxLB_SORT
);
443 SetControlClientData("listbox", m_listbox
);
444 SetControlClientData("listbox", m_listboxSorted
);
446 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
448 m_listbox
->SetToolTip( "This is a list box" );
449 #endif // wxUSE_TOOLTIPS
451 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
452 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
453 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
454 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
455 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
456 wxButton
*button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
458 button
->SetToolTip( "Press here to set italic font" );
459 #endif // wxUSE_TOOLTIPS
461 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
462 m_checkbox
->SetValue(FALSE
);
464 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
465 #endif // wxUSE_TOOLTIPS
466 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
468 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
470 panel
= new wxPanel(m_notebook
);
471 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
472 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
473 5, choices
, wxCB_SORT
);
475 SetControlClientData("choice", m_choice
);
476 SetControlClientData("choice", m_choiceSorted
);
478 m_choice
->SetSelection(2);
479 m_choice
->SetBackgroundColour( "red" );
480 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
481 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
482 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
483 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
484 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
485 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
486 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
488 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
490 panel
= new wxPanel(m_notebook
);
491 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(10,10), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
492 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
493 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
494 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
495 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
496 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
497 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
498 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
499 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
501 wxString choices2
[] =
505 "Fourth", "Fifth", "Sixth",
506 "Seventh", "Eighth", "Nineth", "Tenth" */
509 panel
= new wxPanel(m_notebook
);
510 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
511 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
512 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
513 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
514 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
515 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
516 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
517 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30), wxRB_GROUP
);
518 rb
->SetValue( FALSE
);
519 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
520 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
522 panel
= new wxPanel(m_notebook
);
523 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
524 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
525 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
526 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(220,10), wxSize(270,130) );
528 // No wrapping text in wxStaticText yet :-(
529 (void)new wxStaticText( panel
, -1,
535 (void)new wxStaticText( panel
, -1,
536 "In order see the gauge (aka progress bar)\n"
537 "control do something you have to drag the\n"
538 "handle of the slider to the right.\n"
540 "This is also supposed to demonstrate how\n"
541 "to use static controls.\n",
546 int initialSpinValue
= -5;
548 s
<< initialSpinValue
;
549 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
551 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
552 m_spinbutton
->SetRange(-10,30);
553 m_spinbutton
->SetValue(initialSpinValue
);
555 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "Show progress dialog",
557 #endif // wxUSE_SPINBUTTON
560 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
561 m_spinctrl
->SetRange(10,30);
562 m_spinctrl
->SetValue(15);
563 #endif // wxUSE_SPINCTRL
565 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
567 panel
= new wxPanel(m_notebook
);
569 #ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
570 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
571 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
, wxPoint(10, 10));
573 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
574 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
577 wxBitmap
bitmap( 100, 100 );
579 dc
.SelectObject( bitmap
);
580 dc
.SetPen(*wxGREEN_PEN
);
581 dc
.DrawEllipse(5, 5, 90, 90);
582 dc
.DrawText("Bitmap", 20, 20);
583 dc
.SelectObject( wxNullBitmap
);
585 (void)new wxBitmapButton(panel
, -1, bitmap
, wxPoint(100, 20));
586 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "Toggle label", wxPoint(250, 20));
587 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
588 wxPoint(250, 60), wxDefaultSize
,
589 wxALIGN_RIGHT
| wxST_NO_AUTORESIZE
);
591 m_notebook
->AddPage(panel
, "wxBitmapXXX");
593 // --------------- TEST CODE ----------------------
595 // layout constraints
597 panel
= new wxPanel(m_notebook
);
598 panel
->SetAutoLayout( TRUE
);
600 wxLayoutConstraints
*c
;
601 c
= new wxLayoutConstraints
;
602 c
->top
.SameAs( panel
, wxTop
, 10 );
604 c
->left
.SameAs( panel
, wxLeft
, 10 );
605 c
->width
.PercentOf( panel
, wxWidth
, 40 );
607 wxButton
*pMyButton
= new wxButton(panel
, -1, "Test Button" );
608 pMyButton
->SetConstraints( c
);
610 c
= new wxLayoutConstraints
;
611 c
->top
.SameAs( panel
, wxTop
, 10 );
612 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
613 c
->right
.SameAs( panel
, wxRight
, 10 );
614 c
->width
.PercentOf( panel
, wxWidth
, 40 );
616 wxButton
*pMyButton2
= new wxButton(panel
, -1, "Test Button 2" );
617 pMyButton2
->SetConstraints( c
);
619 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
623 panel
= new wxPanel(m_notebook
);
624 panel
->SetAutoLayout( TRUE
);
626 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
628 sizer
->Add( new wxButton(panel
, -1, "Test Button" ), 3, wxALL
, 10 );
629 sizer
->Add( 20,20, 1 );
630 sizer
->Add( new wxButton(panel
, -1, "Test Button 2" ), 3, wxGROW
|wxALL
, 10 );
632 panel
->SetSizer( sizer
);
634 m_notebook
->AddPage(panel
, "wxSizer");
636 // --------------- TEST CODE ----------------------
640 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
644 GetClientSize( &x
, &y
);
646 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
647 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
650 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
652 int selOld
= event
.GetOldSelection();
655 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
656 "page change from taking place - if you select\n"
657 "[No] the current page will stay the third one\n",
659 wxICON_QUESTION
| wxYES_NO
) != wxYES
)
667 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
670 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
672 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
675 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
677 static wxColour s_colOld
;
679 // test panel colour changing and propagation to the subcontrols
682 SetBackgroundColour(s_colOld
);
683 s_colOld
= wxNullColour
;
685 m_lbSelectThis
->SetBackgroundColour("blue");
689 s_colOld
= GetBackgroundColour();
690 SetBackgroundColour("green");
692 m_lbSelectThis
->SetBackgroundColour("red");
695 m_lbSelectThis
->Refresh();
699 void MyPanel::OnListBox( wxCommandEvent
&event
)
701 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
704 m_text
->AppendText( "ListBox event selection string is: '" );
705 m_text
->AppendText( event
.GetString() );
706 m_text
->AppendText( "'\n" );
707 m_text
->AppendText( "ListBox control selection string is: '" );
708 m_text
->AppendText( listbox
->GetStringSelection() );
709 m_text
->AppendText( "'\n" );
711 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
712 m_text
->AppendText( "ListBox event client data string is: '" );
713 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
714 m_text
->AppendText( obj
->GetData() );
716 m_text
->AppendText( wxString("none") );
718 m_text
->AppendText( "'\n" );
719 m_text
->AppendText( "ListBox control client data string is: '" );
720 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
722 m_text
->AppendText( obj
->GetData() );
724 m_text
->AppendText( wxString("none") );
725 m_text
->AppendText( "'\n" );
728 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
730 m_text
->AppendText( "ListBox double click string is: " );
731 m_text
->AppendText( event
.GetString() );
732 m_text
->AppendText( "\n" );
735 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
737 switch (event
.GetId())
739 case ID_LISTBOX_ENABLE
:
741 m_text
->AppendText("Checkbox clicked.\n");
742 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
745 cb
->SetToolTip( "Click to enable listbox" );
747 cb
->SetToolTip( "Click to disable listbox" );
748 #endif // wxUSE_TOOLTIPS
749 m_listbox
->Enable( event
.GetInt() == 0 );
750 m_listboxSorted
->Enable( event
.GetInt() == 0 );
753 case ID_LISTBOX_SEL_NUM
:
755 m_listbox
->SetSelection( 2 );
756 m_listboxSorted
->SetSelection( 2 );
757 m_lbSelectThis
->WarpPointer( 40, 14 );
760 case ID_LISTBOX_SEL_STR
:
762 m_listbox
->SetStringSelection( "This" );
763 m_listboxSorted
->SetStringSelection( "This" );
764 m_lbSelectNum
->WarpPointer( 40, 14 );
767 case ID_LISTBOX_CLEAR
:
770 m_listboxSorted
->Clear();
773 case ID_LISTBOX_APPEND
:
775 m_listbox
->Append( "Hi!" );
776 m_listboxSorted
->Append( "Hi!" );
779 case ID_LISTBOX_DELETE
:
782 idx
= m_listbox
->GetSelection();
783 m_listbox
->Delete( idx
);
784 idx
= m_listboxSorted
->GetSelection();
785 m_listboxSorted
->Delete( idx
);
788 case ID_LISTBOX_FONT
:
790 m_listbox
->SetFont( *wxITALIC_FONT
);
791 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
792 m_checkbox
->SetFont( *wxITALIC_FONT
);
798 void MyPanel::OnChoice( wxCommandEvent
&event
)
800 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
803 m_text
->AppendText( "Choice event selection string is: '" );
804 m_text
->AppendText( event
.GetString() );
805 m_text
->AppendText( "'\n" );
806 m_text
->AppendText( "Choice control selection string is: '" );
807 m_text
->AppendText( choice
->GetStringSelection() );
808 m_text
->AppendText( "'\n" );
810 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
811 m_text
->AppendText( "Choice event client data string is: '" );
814 m_text
->AppendText( obj
->GetData() );
816 m_text
->AppendText( wxString("none") );
818 m_text
->AppendText( "'\n" );
819 m_text
->AppendText( "Choice control client data string is: '" );
820 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
823 m_text
->AppendText( obj
->GetData() );
825 m_text
->AppendText( wxString("none") );
826 m_text
->AppendText( "'\n" );
829 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
831 switch (event
.GetId())
833 case ID_CHOICE_ENABLE
:
835 m_choice
->Enable( event
.GetInt() == 0 );
836 m_choiceSorted
->Enable( event
.GetInt() == 0 );
839 case ID_CHOICE_SEL_NUM
:
841 m_choice
->SetSelection( 2 );
842 m_choiceSorted
->SetSelection( 2 );
845 case ID_CHOICE_SEL_STR
:
847 m_choice
->SetStringSelection( "This" );
848 m_choiceSorted
->SetStringSelection( "This" );
851 case ID_CHOICE_CLEAR
:
854 m_choiceSorted
->Clear();
857 case ID_CHOICE_APPEND
:
859 m_choice
->Append( "Hi!" );
860 m_choiceSorted
->Append( "Hi!" );
863 case ID_CHOICE_DELETE
:
865 int idx
= m_choice
->GetSelection();
866 m_choice
->Delete( idx
);
867 idx
= m_choiceSorted
->GetSelection();
868 m_choiceSorted
->Delete( idx
);
873 m_choice
->SetFont( *wxITALIC_FONT
);
874 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
880 void MyPanel::OnCombo( wxCommandEvent
&event
)
882 m_text
->AppendText( "ComboBox event selection string is: " );
883 m_text
->AppendText( event
.GetString() );
884 m_text
->AppendText( "\n" );
885 m_text
->AppendText( "ComboBox control selection string is: " );
886 m_text
->AppendText( m_combo
->GetStringSelection() );
887 m_text
->AppendText( "\n" );
890 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
892 switch (event
.GetId())
894 case ID_COMBO_ENABLE
:
896 m_combo
->Enable( event
.GetInt() == 0 );
899 case ID_COMBO_SEL_NUM
:
901 m_combo
->SetSelection( 2 );
904 case ID_COMBO_SEL_STR
:
906 m_combo
->SetStringSelection( "This" );
914 case ID_COMBO_APPEND
:
916 m_combo
->Append( "Hi!" );
919 case ID_COMBO_DELETE
:
921 int idx
= m_combo
->GetSelection();
922 m_combo
->Delete( idx
);
927 m_combo
->SetFont( *wxITALIC_FONT
);
933 void MyPanel::OnRadio( wxCommandEvent
&event
)
935 m_text
->AppendText( "RadioBox selection string is: " );
936 m_text
->AppendText( event
.GetString() );
937 m_text
->AppendText( "\n" );
940 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
942 switch (event
.GetId())
944 case ID_RADIOBOX_ENABLE
:
946 m_radio
->Enable( event
.GetInt() == 0 );
949 case ID_RADIOBOX_SEL_NUM
:
951 m_radio
->SetSelection( 2 );
954 case ID_RADIOBOX_SEL_STR
:
956 m_radio
->SetStringSelection( "This" );
959 case ID_RADIOBOX_FONT
:
961 m_radio
->SetFont( *wxITALIC_FONT
);
967 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
969 m_fontButton
->SetFont( *wxITALIC_FONT
);
970 m_text
->SetFont( *wxITALIC_FONT
);
973 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
975 static bool s_long
= TRUE
;
978 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
981 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
983 m_gauge
->SetValue( m_slider
->GetValue() );
988 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
991 s
.Printf(_T("Current value of spin ctrl is %d\n"), m_spinctrl
->GetValue());
992 m_text
->AppendText(s
);
995 #endif // wxUSE_SPINCTRL
998 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1001 value
.Printf( _T("Spin control up: current = %d\n"),
1002 m_spinbutton
->GetValue());
1004 if ( m_spinbutton
->GetValue() > 17 )
1006 value
+= _T("Preventing the spin button from going above 17.\n");
1011 m_text
->AppendText(value
);
1014 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1017 value
.Printf( _T("Spin control down: current = %d\n"),
1018 m_spinbutton
->GetValue());
1020 if ( m_spinbutton
->GetValue() < -17 )
1022 value
+= _T("Preventing the spin button from going below -17.\n");
1027 m_text
->AppendText(value
);
1030 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1033 value
.Printf( _T("%d"), event
.GetPosition() );
1034 m_spintext
->SetValue( value
);
1036 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1037 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1038 m_spinbutton
->GetValue());
1040 m_text
->AppendText(value
);
1043 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1045 event
.Enable( m_spinbutton
->GetValue() > 0 );
1048 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1050 int max
= m_spinbutton
->GetValue();
1051 wxProgressDialog
dialog("Progress dialog example",
1052 "An informative message",
1058 wxPD_ESTIMATED_TIME
|
1059 wxPD_REMAINING_TIME
);
1063 for ( int i
= 0; i
< max
&& cont
; i
++ )
1068 cont
= dialog
.Update(i
, "That's all, folks!");
1070 else if ( i
== max
/ 2 )
1072 cont
= dialog
.Update(i
, "Only a half left!");
1076 cont
= dialog
.Update(i
);
1082 *m_text
<< "Progress dialog aborted!\n";
1086 *m_text
<< "Countdown from " << max
<< " finished.\n";
1090 #endif // wxUSE_SPINBUTTON
1094 delete m_notebook
->GetImageList();
1097 //----------------------------------------------------------------------
1099 //----------------------------------------------------------------------
1101 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1102 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1103 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1105 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1106 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1107 #endif // wxUSE_TOOLTIPS
1109 EVT_MENU(MINIMAL_ENABLE_ALL
, MyFrame::OnEnableAll
)
1111 EVT_SIZE(MyFrame::OnSize
)
1112 EVT_MOVE(MyFrame::OnMove
)
1114 EVT_IDLE(MyFrame::OnIdle
)
1117 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1118 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1122 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1125 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1130 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1132 wxBeginBusyCursor();
1134 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1141 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1143 static long s_delay
= 5000;
1146 delay
.Printf( _T("%ld"), s_delay
);
1148 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1149 "Set tooltip delay",
1153 return; // cancelled
1155 wxSscanf(delay
, _T("%ld"), &s_delay
);
1157 wxToolTip::SetDelay(s_delay
);
1159 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1162 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1164 static bool s_enabled
= TRUE
;
1166 s_enabled
= !s_enabled
;
1168 wxToolTip::Enable(s_enabled
);
1170 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1174 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1176 static bool s_enable
= TRUE
;
1178 s_enable
= !s_enable
;
1179 m_panel
->Enable(s_enable
);
1182 void MyFrame::OnMove( wxMoveEvent
& event
)
1184 UpdateStatusBar(event
.GetPosition(), GetSize());
1189 void MyFrame::OnSize( wxSizeEvent
& event
)
1191 UpdateStatusBar(GetPosition(), event
.GetSize());
1196 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1198 // track the window which has the focus in the status bar
1199 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1200 wxWindow
*focus
= wxWindow::FindFocus();
1201 if ( focus
&& (focus
!= s_windowFocus
) )
1203 s_windowFocus
= focus
;
1208 _T("Focus: wxWindow = %p, HWND = %08x"),
1210 _T("Focus: wxWindow = %p"),
1214 , s_windowFocus
->GetHWND()
1222 static void SetControlClientData(const char *name
,
1223 wxControlWithItems
*control
)
1225 size_t count
= control
->GetCount();
1226 for ( size_t n
= 0; n
< count
; n
++ )
1229 s
.Printf("%s client data for '%s'",
1230 name
, control
->GetString(n
).c_str());
1232 control
->SetClientObject(n
, new wxStringClientData(s
));