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
);
113 void OnTestButton(wxCommandEvent
& event
);
114 void OnBmpButton(wxCommandEvent
& event
);
116 wxListBox
*m_listbox
,
124 wxButton
*m_fontButton
;
125 wxButton
*m_lbSelectNum
;
126 wxButton
*m_lbSelectThis
;
128 wxSpinButton
*m_spinbutton
;
129 wxButton
*m_btnProgress
;
130 #endif // wxUSE_SPINBTN
133 wxSpinCtrl
*m_spinctrl
;
134 #endif // wxUSE_SPINCTRL
136 wxTextCtrl
*m_spintext
;
137 wxCheckBox
*m_checkbox
;
140 wxNotebook
*m_notebook
;
142 wxStaticText
*m_label
;
145 wxLog
*m_logTargetOld
;
147 DECLARE_EVENT_TABLE()
150 class MyFrame
: public wxFrame
153 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
155 void OnQuit(wxCommandEvent
& event
);
156 void OnAbout(wxCommandEvent
& event
);
157 void OnClearLog(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
);
170 MyPanel
*GetPanel() const { return m_panel
; }
173 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
176 msg
.Printf(_("pos=(%d, %d), size=%dx%d"),
177 pos
.x
, pos
.y
, size
.x
, size
.y
);
178 SetStatusText(msg
, 1);
183 DECLARE_EVENT_TABLE()
186 //----------------------------------------------------------------------
188 //----------------------------------------------------------------------
190 static void SetControlClientData(const char *name
,
191 wxControlWithItems
*control
);
195 //----------------------------------------------------------------------
197 //----------------------------------------------------------------------
207 CONTROLS_SET_TOOLTIP_DELAY
= 200,
208 CONTROLS_ENABLE_TOOLTIPS
,
216 // parse the cmd line
221 wxSscanf(argv
[1], "%d", &x
);
222 wxSscanf(argv
[2], "%d", &y
);
225 // Create the main frame window
226 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
227 "Controls wxWindows App",
230 frame
->SetSizeHints( 500, 425 );
233 // The wxICON() macros loads an icon from a resource under Windows
234 // and uses an #included XPM image under GTK+ and Motif
236 frame
->SetIcon( wxICON(mondrian
) );
238 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
240 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
241 file_menu
->AppendSeparator();
242 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
243 file_menu
->AppendSeparator();
244 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
246 wxMenuBar
*menu_bar
= new wxMenuBar
;
247 menu_bar
->Append(file_menu
, "&File");
250 wxMenu
*tooltip_menu
= new wxMenu
;
251 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
252 tooltip_menu
->AppendSeparator();
253 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
254 "enable/disable tooltips", TRUE
);
255 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
256 menu_bar
->Append(tooltip_menu
, "&Tooltips");
257 #endif // wxUSE_TOOLTIPS
259 wxMenu
*panel_menu
= new wxMenu
;
260 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
261 "Enable/disable all panel controls", TRUE
);
262 menu_bar
->Append(panel_menu
, "&Panel");
264 frame
->SetMenuBar(menu_bar
);
268 //frame->GetPanel()->m_notebook->SetSelection(6);
275 //----------------------------------------------------------------------
277 //----------------------------------------------------------------------
279 const int ID_NOTEBOOK
= 1000;
281 const int ID_LISTBOX
= 130;
282 const int ID_LISTBOX_SEL_NUM
= 131;
283 const int ID_LISTBOX_SEL_STR
= 132;
284 const int ID_LISTBOX_CLEAR
= 133;
285 const int ID_LISTBOX_APPEND
= 134;
286 const int ID_LISTBOX_DELETE
= 135;
287 const int ID_LISTBOX_FONT
= 136;
288 const int ID_LISTBOX_ENABLE
= 137;
289 const int ID_LISTBOX_SORTED
= 138;
291 const int ID_CHOICE
= 120;
292 const int ID_CHOICE_SEL_NUM
= 121;
293 const int ID_CHOICE_SEL_STR
= 122;
294 const int ID_CHOICE_CLEAR
= 123;
295 const int ID_CHOICE_APPEND
= 124;
296 const int ID_CHOICE_DELETE
= 125;
297 const int ID_CHOICE_FONT
= 126;
298 const int ID_CHOICE_ENABLE
= 127;
299 const int ID_CHOICE_SORTED
= 128;
301 const int ID_COMBO
= 140;
302 const int ID_COMBO_SEL_NUM
= 141;
303 const int ID_COMBO_SEL_STR
= 142;
304 const int ID_COMBO_CLEAR
= 143;
305 const int ID_COMBO_APPEND
= 144;
306 const int ID_COMBO_DELETE
= 145;
307 const int ID_COMBO_FONT
= 146;
308 const int ID_COMBO_ENABLE
= 147;
310 const int ID_RADIOBOX
= 160;
311 const int ID_RADIOBOX_SEL_NUM
= 161;
312 const int ID_RADIOBOX_SEL_STR
= 162;
313 const int ID_RADIOBOX_FONT
= 163;
314 const int ID_RADIOBOX_ENABLE
= 164;
316 const int ID_RADIOBUTTON_1
= 166;
317 const int ID_RADIOBUTTON_2
= 167;
319 const int ID_SET_FONT
= 170;
321 const int ID_GAUGE
= 180;
322 const int ID_SLIDER
= 181;
324 const int ID_SPIN
= 182;
325 const int ID_BTNPROGRESS
= 183;
326 const int ID_BUTTON_LABEL
= 184;
327 const int ID_SPINCTRL
= 185;
329 const int ID_BUTTON_TEST1
= 190;
330 const int ID_BUTTON_TEST2
= 191;
331 const int ID_BITMAP_BTN
= 192;
333 const int ID_CHANGE_COLOUR
= 200;
335 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
336 EVT_SIZE ( MyPanel::OnSize
)
337 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
338 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
339 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
340 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
341 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
342 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
343 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
344 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
345 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
346 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
347 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
348 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
349 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
350 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
351 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
352 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
353 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
354 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
355 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
356 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
357 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
358 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
359 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
360 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
361 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
362 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
363 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
364 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
365 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
366 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
367 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
368 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
369 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
370 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
371 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
372 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
374 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
375 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
376 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
377 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
378 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
379 #endif // wxUSE_SPINBTN
381 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
382 #endif // wxUSE_SPINCTRL
383 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
384 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
385 EVT_BUTTON (ID_BUTTON_TEST1
, MyPanel::OnTestButton
)
386 EVT_BUTTON (ID_BUTTON_TEST2
, MyPanel::OnTestButton
)
387 EVT_BUTTON (ID_BITMAP_BTN
, MyPanel::OnBmpButton
)
390 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
391 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
392 m_text(NULL
), m_notebook(NULL
)
394 wxLayoutConstraints
*c
;
396 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
397 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
398 m_text
->SetBackgroundColour("wheat");
401 wxLog::AddTraceMask(_T("focus"));
402 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
404 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
419 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
422 // fill the image list
423 wxImageList
*imagelist
= new wxImageList(32, 32);
425 imagelist
-> Add( wxBitmap( list_xpm
));
426 imagelist
-> Add( wxBitmap( choice_xpm
));
427 imagelist
-> Add( wxBitmap( combo_xpm
));
428 imagelist
-> Add( wxBitmap( text_xpm
));
429 imagelist
-> Add( wxBitmap( radio_xpm
));
430 imagelist
-> Add( wxBitmap( gauge_xpm
));
431 m_notebook
->SetImageList(imagelist
);
432 #elif defined(__WXMSW__)
433 // load images from resources
436 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
438 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
440 static const char *s_iconNames
[Image_Max
] =
442 "list", "choice", "combo", "text", "radio", "gauge"
445 for ( size_t n
= 0; n
< Image_Max
; n
++ )
447 wxBitmap
bmp(s_iconNames
[n
]);
448 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
450 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
455 m_notebook
->SetImageList(imagelist
);
459 #define Image_List -1
460 #define Image_Choice -1
461 #define Image_Combo -1
462 #define Image_Text -1
463 #define Image_Radio -1
464 #define Image_Gauge -1
469 wxPanel
*panel
= new wxPanel(m_notebook
);
470 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
471 wxPoint(10,10), wxSize(120,70),
472 5, choices
, wxLB_ALWAYS_SB
);
473 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
474 wxPoint(10,90), wxSize(120,70),
475 5, choices
, wxLB_SORT
);
477 SetControlClientData("listbox", m_listbox
);
478 SetControlClientData("listbox", m_listboxSorted
);
480 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
482 m_listbox
->SetToolTip( "This is a list box" );
483 #endif // wxUSE_TOOLTIPS
485 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
486 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
487 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
488 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
489 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
490 wxButton
*button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
492 button
->SetDefault();
494 button
->SetForegroundColour(*wxBLUE
);
497 button
->SetToolTip( "Press here to set italic font" );
498 #endif // wxUSE_TOOLTIPS
500 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
501 m_checkbox
->SetValue(FALSE
);
503 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
504 #endif // wxUSE_TOOLTIPS
505 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
507 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
508 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
510 panel
= new wxPanel(m_notebook
);
511 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
512 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
513 5, choices
, wxCB_SORT
);
516 SetControlClientData("choice", m_choice
);
517 SetControlClientData("choice", m_choiceSorted
);
520 m_choice
->SetSelection(2);
521 m_choice
->SetBackgroundColour( "red" );
522 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
523 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
524 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
525 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
526 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
527 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
528 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
530 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
532 panel
= new wxPanel(m_notebook
);
533 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
534 wxPoint(5, 5), wxSize(150, 100));
535 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(20,25), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
536 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
537 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
538 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
539 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
540 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
541 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
542 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
543 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
545 wxString choices2
[] =
549 "Fourth", "Fifth", "Sixth",
550 "Seventh", "Eighth", "Nineth", "Tenth" */
553 panel
= new wxPanel(m_notebook
);
554 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
555 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
558 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
559 m_radio
->SetToolTip("Ever seen a radiobox?");
560 #endif // wxUSE_TOOLTIPS
562 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
563 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
564 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
565 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
566 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
567 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
568 rb
->SetValue( FALSE
);
569 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
570 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
572 panel
= new wxPanel(m_notebook
);
573 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
574 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
575 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
576 (void)new wxStaticBox( panel
, -1, "&Explanation", wxPoint(220,10), wxSize(270,130) );
578 // No wrapping text in wxStaticText yet :-(
579 (void)new wxStaticText( panel
, -1,
585 (void)new wxStaticText( panel
, -1,
586 "In order see the gauge (aka progress bar)\n"
587 "control do something you have to drag the\n"
588 "handle of the slider to the right.\n"
590 "This is also supposed to demonstrate how\n"
591 "to use static controls.\n",
596 int initialSpinValue
= -5;
598 s
<< initialSpinValue
;
599 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
601 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
602 m_spinbutton
->SetRange(-10,30);
603 m_spinbutton
->SetValue(initialSpinValue
);
605 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
607 #endif // wxUSE_SPINBTN
610 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
611 m_spinctrl
->SetRange(10,30);
612 m_spinctrl
->SetValue(15);
613 #endif // wxUSE_SPINCTRL
615 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
617 panel
= new wxPanel(m_notebook
);
619 #ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
620 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
621 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
624 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
625 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
628 wxBitmap
bitmap( 100, 100 );
630 dc
.SelectObject( bitmap
);
631 dc
.SetPen(*wxGREEN_PEN
);
633 dc
.DrawEllipse(5, 5, 90, 90);
634 dc
.DrawText("Bitmap", 30, 40);
635 dc
.SelectObject( wxNullBitmap
);
637 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
640 // test for masked bitmap display
641 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
644 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
645 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
649 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
650 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
651 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
652 wxBitmapButton
*bmpBtn
= new wxBitmapButton
658 bmpBtn
->SetBitmapSelected(bmp2
);
659 bmpBtn
->SetBitmapFocus(bmp3
);
661 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "&Toggle label", wxPoint(250, 20));
662 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
663 wxPoint(250, 60), wxDefaultSize
,
664 wxALIGN_RIGHT
| wxST_NO_AUTORESIZE
);
665 m_label
->SetForegroundColour( *wxBLUE
);
667 m_notebook
->AddPage(panel
, "wxBitmapXXX");
669 // layout constraints
671 panel
= new wxPanel(m_notebook
);
672 panel
->SetAutoLayout( TRUE
);
674 c
= new wxLayoutConstraints
;
675 c
->top
.SameAs( panel
, wxTop
, 10 );
677 c
->left
.SameAs( panel
, wxLeft
, 10 );
678 c
->width
.PercentOf( panel
, wxWidth
, 40 );
680 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
681 pMyButton
->SetConstraints( c
);
683 c
= new wxLayoutConstraints
;
684 c
->top
.SameAs( panel
, wxTop
, 10 );
685 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
686 c
->right
.SameAs( panel
, wxRight
, 10 );
687 c
->width
.PercentOf( panel
, wxWidth
, 40 );
689 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
690 pMyButton2
->SetConstraints( c
);
692 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
696 panel
= new wxPanel(m_notebook
);
697 panel
->SetAutoLayout( TRUE
);
699 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
701 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
702 sizer
->Add( 20,20, 1 );
703 sizer
->Add( new wxButton(panel
, -1, "Test Button &2" ), 3, wxGROW
|wxALL
, 10 );
705 panel
->SetSizer( sizer
);
707 m_notebook
->AddPage(panel
, "wxSizer");
710 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
714 GetClientSize( &x
, &y
);
716 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
717 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
720 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
722 int selOld
= event
.GetOldSelection();
725 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
726 "page change from taking place - if you select\n"
727 "[No] the current page will stay the third one\n",
729 wxICON_QUESTION
| wxYES_NO
) != wxYES
)
737 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
740 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
742 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
745 void MyPanel::OnTestButton(wxCommandEvent
& event
)
747 wxLogMessage(_T("Button %c clicked."),
748 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
751 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
753 wxLogMessage(_T("Bitmap button clicked."));
756 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
758 static wxColour s_colOld
;
760 // test panel colour changing and propagation to the subcontrols
763 SetBackgroundColour(s_colOld
);
764 s_colOld
= wxNullColour
;
766 m_lbSelectThis
->SetForegroundColour("red");
767 m_lbSelectThis
->SetBackgroundColour("white");
771 s_colOld
= wxColour("red");
772 SetBackgroundColour("white");
774 m_lbSelectThis
->SetForegroundColour("white");
775 m_lbSelectThis
->SetBackgroundColour("red");
778 m_lbSelectThis
->Refresh();
782 void MyPanel::OnListBox( wxCommandEvent
&event
)
784 // GetParent()->Move(100, 100);
786 if (event
.GetInt() == -1)
788 m_text
->AppendText( "ListBox has no selections anymore\n" );
792 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
795 m_text
->AppendText( "ListBox event selection string is: '" );
796 m_text
->AppendText( event
.GetString() );
797 m_text
->AppendText( "'\n" );
798 m_text
->AppendText( "ListBox control selection string is: '" );
799 m_text
->AppendText( listbox
->GetStringSelection() );
800 m_text
->AppendText( "'\n" );
802 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
803 m_text
->AppendText( "ListBox event client data string is: '" );
804 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
805 m_text
->AppendText( obj
->GetData() );
807 m_text
->AppendText( wxString("none") );
809 m_text
->AppendText( "'\n" );
810 m_text
->AppendText( "ListBox control client data string is: '" );
811 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
813 m_text
->AppendText( obj
->GetData() );
815 m_text
->AppendText( wxString("none") );
816 m_text
->AppendText( "'\n" );
819 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
821 m_text
->AppendText( "ListBox double click string is: " );
822 m_text
->AppendText( event
.GetString() );
823 m_text
->AppendText( "\n" );
826 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
828 switch (event
.GetId())
830 case ID_LISTBOX_ENABLE
:
832 m_text
->AppendText("Checkbox clicked.\n");
833 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
836 cb
->SetToolTip( "Click to enable listbox" );
838 cb
->SetToolTip( "Click to disable listbox" );
839 #endif // wxUSE_TOOLTIPS
840 m_listbox
->Enable( event
.GetInt() == 0 );
841 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
842 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
843 m_listboxSorted
->Enable( event
.GetInt() == 0 );
844 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
847 case ID_LISTBOX_SEL_NUM
:
849 m_listbox
->SetSelection( 2 );
850 m_listboxSorted
->SetSelection( 2 );
851 m_lbSelectThis
->WarpPointer( 40, 14 );
854 case ID_LISTBOX_SEL_STR
:
856 m_listbox
->SetStringSelection( "This" );
857 m_listboxSorted
->SetStringSelection( "This" );
858 m_lbSelectNum
->WarpPointer( 40, 14 );
861 case ID_LISTBOX_CLEAR
:
864 m_listboxSorted
->Clear();
867 case ID_LISTBOX_APPEND
:
869 m_listbox
->Append( "Hi!" );
870 m_listboxSorted
->Append( "Hi!" );
873 case ID_LISTBOX_DELETE
:
876 idx
= m_listbox
->GetSelection();
877 m_listbox
->Delete( idx
);
878 idx
= m_listboxSorted
->GetSelection();
879 m_listboxSorted
->Delete( idx
);
882 case ID_LISTBOX_FONT
:
884 m_listbox
->SetFont( *wxITALIC_FONT
);
885 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
886 m_checkbox
->SetFont( *wxITALIC_FONT
);
892 void MyPanel::OnChoice( wxCommandEvent
&event
)
894 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
897 m_text
->AppendText( "Choice event selection string is: '" );
898 m_text
->AppendText( event
.GetString() );
899 m_text
->AppendText( "'\n" );
900 m_text
->AppendText( "Choice control selection string is: '" );
901 m_text
->AppendText( choice
->GetStringSelection() );
902 m_text
->AppendText( "'\n" );
904 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
905 m_text
->AppendText( "Choice event client data string is: '" );
908 m_text
->AppendText( obj
->GetData() );
910 m_text
->AppendText( wxString("none") );
912 m_text
->AppendText( "'\n" );
913 m_text
->AppendText( "Choice control client data string is: '" );
914 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
917 m_text
->AppendText( obj
->GetData() );
919 m_text
->AppendText( wxString("none") );
920 m_text
->AppendText( "'\n" );
923 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
925 switch (event
.GetId())
927 case ID_CHOICE_ENABLE
:
929 m_choice
->Enable( event
.GetInt() == 0 );
930 m_choiceSorted
->Enable( event
.GetInt() == 0 );
933 case ID_CHOICE_SEL_NUM
:
935 m_choice
->SetSelection( 2 );
936 m_choiceSorted
->SetSelection( 2 );
939 case ID_CHOICE_SEL_STR
:
941 m_choice
->SetStringSelection( "This" );
942 m_choiceSorted
->SetStringSelection( "This" );
945 case ID_CHOICE_CLEAR
:
948 m_choiceSorted
->Clear();
951 case ID_CHOICE_APPEND
:
953 m_choice
->Append( "Hi!" );
954 m_choiceSorted
->Append( "Hi!" );
957 case ID_CHOICE_DELETE
:
959 int idx
= m_choice
->GetSelection();
960 m_choice
->Delete( idx
);
961 idx
= m_choiceSorted
->GetSelection();
962 m_choiceSorted
->Delete( idx
);
967 m_choice
->SetFont( *wxITALIC_FONT
);
968 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
974 void MyPanel::OnCombo( wxCommandEvent
&event
)
976 m_text
->AppendText( "ComboBox event selection string is: " );
977 m_text
->AppendText( event
.GetString() );
978 m_text
->AppendText( "\n" );
979 m_text
->AppendText( "ComboBox control selection string is: " );
980 m_text
->AppendText( m_combo
->GetStringSelection() );
981 m_text
->AppendText( "\n" );
984 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
986 switch (event
.GetId())
988 case ID_COMBO_ENABLE
:
990 m_combo
->Enable( event
.GetInt() == 0 );
993 case ID_COMBO_SEL_NUM
:
995 m_combo
->SetSelection( 2 );
998 case ID_COMBO_SEL_STR
:
1000 m_combo
->SetStringSelection( "This" );
1003 case ID_COMBO_CLEAR
:
1008 case ID_COMBO_APPEND
:
1010 m_combo
->Append( "Hi!" );
1013 case ID_COMBO_DELETE
:
1015 int idx
= m_combo
->GetSelection();
1016 m_combo
->Delete( idx
);
1021 m_combo
->SetFont( *wxITALIC_FONT
);
1027 void MyPanel::OnRadio( wxCommandEvent
&event
)
1029 m_text
->AppendText( "RadioBox selection string is: " );
1030 m_text
->AppendText( event
.GetString() );
1031 m_text
->AppendText( "\n" );
1034 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1036 switch (event
.GetId())
1038 case ID_RADIOBOX_ENABLE
:
1040 m_radio
->Enable( event
.GetInt() == 0 );
1043 case ID_RADIOBOX_SEL_NUM
:
1045 m_radio
->SetSelection( 2 );
1048 case ID_RADIOBOX_SEL_STR
:
1050 m_radio
->SetStringSelection( "This" );
1053 case ID_RADIOBOX_FONT
:
1055 m_radio
->SetFont( *wxITALIC_FONT
);
1061 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1063 m_fontButton
->SetFont( *wxITALIC_FONT
);
1064 m_text
->SetFont( *wxITALIC_FONT
);
1067 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
1069 static bool s_long
= TRUE
;
1072 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
1075 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1077 m_gauge
->SetValue( m_slider
->GetValue() );
1082 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1085 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1086 m_spinctrl
->GetValue(), event
.GetInt());
1087 m_text
->AppendText(s
);
1090 #endif // wxUSE_SPINCTRL
1093 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1096 value
.Printf( _T("Spin control up: current = %d\n"),
1097 m_spinbutton
->GetValue());
1099 if ( m_spinbutton
->GetValue() > 17 )
1101 value
+= _T("Preventing the spin button from going above 17.\n");
1106 m_text
->AppendText(value
);
1109 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1112 value
.Printf( _T("Spin control down: current = %d\n"),
1113 m_spinbutton
->GetValue());
1115 if ( m_spinbutton
->GetValue() < -17 )
1117 value
+= _T("Preventing the spin button from going below -17.\n");
1122 m_text
->AppendText(value
);
1125 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1128 value
.Printf( _T("%d"), event
.GetPosition() );
1129 m_spintext
->SetValue( value
);
1131 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1132 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1133 m_spinbutton
->GetValue());
1135 m_text
->AppendText(value
);
1138 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1140 event
.Enable( m_spinbutton
->GetValue() > 0 );
1143 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1145 int max
= m_spinbutton
->GetValue();
1146 wxProgressDialog
dialog("Progress dialog example",
1147 "An informative message",
1154 wxPD_ESTIMATED_TIME
|
1155 wxPD_REMAINING_TIME
);
1159 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1164 cont
= dialog
.Update(i
, "That's all, folks!");
1166 else if ( i
== max
/ 2 )
1168 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1172 cont
= dialog
.Update(i
);
1178 *m_text
<< "Progress dialog aborted!\n";
1182 *m_text
<< "Countdown from " << max
<< " finished.\n";
1186 #endif // wxUSE_SPINBTN
1190 //wxLog::RemoveTraceMask(_T("focus"));
1191 delete wxLog::SetActiveTarget(m_logTargetOld
);
1193 delete m_notebook
->GetImageList();
1196 //----------------------------------------------------------------------
1198 //----------------------------------------------------------------------
1200 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1201 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1202 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1203 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1205 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1206 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1207 #endif // wxUSE_TOOLTIPS
1209 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1211 EVT_SIZE(MyFrame::OnSize
)
1212 EVT_MOVE(MyFrame::OnMove
)
1214 EVT_IDLE(MyFrame::OnIdle
)
1217 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1218 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1222 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1225 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1230 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1234 #if 1 // VZ: my temp test code, will remove
1235 wxGetTextFromUser("msg", "caption", "val", this);
1239 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1243 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1245 m_panel
->m_text
->Clear();
1249 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1251 static long s_delay
= 5000;
1254 delay
.Printf( _T("%ld"), s_delay
);
1256 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1257 "Set tooltip delay",
1261 return; // cancelled
1263 wxSscanf(delay
, _T("%ld"), &s_delay
);
1265 wxToolTip::SetDelay(s_delay
);
1267 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1270 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1272 static bool s_enabled
= TRUE
;
1274 s_enabled
= !s_enabled
;
1276 wxToolTip::Enable(s_enabled
);
1278 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1282 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1284 static bool s_enable
= TRUE
;
1286 s_enable
= !s_enable
;
1287 m_panel
->Enable(s_enable
);
1290 void MyFrame::OnMove( wxMoveEvent
& event
)
1292 UpdateStatusBar(event
.GetPosition(), GetSize());
1297 void MyFrame::OnSize( wxSizeEvent
& event
)
1299 UpdateStatusBar(GetPosition(), event
.GetSize());
1304 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1306 // track the window which has the focus in the status bar
1307 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1308 wxWindow
*focus
= wxWindow::FindFocus();
1309 if ( focus
&& (focus
!= s_windowFocus
) )
1311 s_windowFocus
= focus
;
1316 _T("Focus: %s, HWND = %08x"),
1320 s_windowFocus
->GetClassInfo()->GetClassName()
1322 , s_windowFocus
->GetHWND()
1330 static void SetControlClientData(const char *name
,
1331 wxControlWithItems
*control
)
1333 size_t count
= control
->GetCount();
1334 for ( size_t n
= 0; n
< count
; n
++ )
1337 s
.Printf("%s client data for '%s'",
1338 name
, control
->GetString(n
).c_str());
1340 control
->SetClientObject(n
, new wxStringClientData(s
));