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
);
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_SPINBTN
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 wxLog
*m_logTargetOld
;
146 DECLARE_EVENT_TABLE()
149 class MyFrame
: public wxFrame
152 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
154 void OnQuit(wxCommandEvent
& event
);
155 void OnAbout(wxCommandEvent
& event
);
156 void OnClearLog(wxCommandEvent
& event
);
159 void OnSetTooltipDelay(wxCommandEvent
& event
);
160 void OnToggleTooltips(wxCommandEvent
& event
);
161 #endif // wxUSE_TOOLTIPS
163 void OnEnableAll(wxCommandEvent
& event
);
165 void OnIdle( wxIdleEvent
& event
);
166 void OnSize( wxSizeEvent
& event
);
167 void OnMove( wxMoveEvent
& event
);
169 MyPanel
*GetPanel() const { return m_panel
; }
172 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
175 msg
.Printf(_("pos=(%d, %d), size=%dx%d"),
176 pos
.x
, pos
.y
, size
.x
, size
.y
);
177 SetStatusText(msg
, 1);
182 DECLARE_EVENT_TABLE()
185 //----------------------------------------------------------------------
187 //----------------------------------------------------------------------
189 static void SetControlClientData(const char *name
,
190 wxControlWithItems
*control
);
194 //----------------------------------------------------------------------
196 //----------------------------------------------------------------------
206 CONTROLS_SET_TOOLTIP_DELAY
= 200,
207 CONTROLS_ENABLE_TOOLTIPS
,
215 // parse the cmd line
220 wxSscanf(argv
[1], "%d", &x
);
221 wxSscanf(argv
[2], "%d", &y
);
224 // Create the main frame window
225 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
226 "Controls wxWindows App",
229 frame
->SetSizeHints( 500, 425 );
232 // The wxICON() macros loads an icon from a resource under Windows
233 // and uses an #included XPM image under GTK+ and Motif
235 frame
->SetIcon( wxICON(mondrian
) );
237 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
239 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
240 file_menu
->AppendSeparator();
241 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
242 file_menu
->AppendSeparator();
243 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
245 wxMenuBar
*menu_bar
= new wxMenuBar
;
246 menu_bar
->Append(file_menu
, "&File");
249 wxMenu
*tooltip_menu
= new wxMenu
;
250 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
251 tooltip_menu
->AppendSeparator();
252 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
253 "enable/disable tooltips", TRUE
);
254 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
255 menu_bar
->Append(tooltip_menu
, "&Tooltips");
256 #endif // wxUSE_TOOLTIPS
258 wxMenu
*panel_menu
= new wxMenu
;
259 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
260 "Enable/disable all panel controls", TRUE
);
261 menu_bar
->Append(panel_menu
, "&Panel");
263 frame
->SetMenuBar(menu_bar
);
266 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
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;
332 const int ID_CHANGE_COLOUR
= 200;
334 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
335 EVT_SIZE ( MyPanel::OnSize
)
336 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
337 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
338 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
339 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
340 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
341 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
342 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
343 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
344 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
345 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
346 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
347 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
348 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
349 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
350 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
351 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
352 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
353 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
354 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
355 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
356 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
357 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
358 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
359 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
360 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
361 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
362 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
363 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
364 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
365 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
366 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
367 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
368 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
369 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
370 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
371 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
373 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
374 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
375 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
376 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
377 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
378 #endif // wxUSE_SPINBTN
380 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
381 #endif // wxUSE_SPINCTRL
382 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
383 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
384 EVT_BUTTON (ID_BUTTON_TEST1
, MyPanel::OnTestButton
)
385 EVT_BUTTON (ID_BUTTON_TEST2
, MyPanel::OnTestButton
)
388 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
389 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
390 m_text(NULL
), m_notebook(NULL
)
392 wxLayoutConstraints
*c
;
394 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
395 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
396 m_text
->SetBackgroundColour("wheat");
398 // wxLog::AddTraceMask(_T("focus"));
399 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
401 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
416 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
419 // fill the image list
420 wxImageList
*imagelist
= new wxImageList(32, 32);
422 imagelist
-> Add( wxBitmap( list_xpm
));
423 imagelist
-> Add( wxBitmap( choice_xpm
));
424 imagelist
-> Add( wxBitmap( combo_xpm
));
425 imagelist
-> Add( wxBitmap( text_xpm
));
426 imagelist
-> Add( wxBitmap( radio_xpm
));
427 imagelist
-> Add( wxBitmap( gauge_xpm
));
428 m_notebook
->SetImageList(imagelist
);
429 #elif defined(__WXMSW__)
430 // load images from resources
433 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
435 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
437 static const char *s_iconNames
[Image_Max
] =
439 "list", "choice", "combo", "text", "radio", "gauge"
442 for ( size_t n
= 0; n
< Image_Max
; n
++ )
444 wxBitmap
bmp(s_iconNames
[n
]);
445 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
447 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
452 m_notebook
->SetImageList(imagelist
);
456 #define Image_List -1
457 #define Image_Choice -1
458 #define Image_Combo -1
459 #define Image_Text -1
460 #define Image_Radio -1
461 #define Image_Gauge -1
466 wxPanel
*panel
= new wxPanel(m_notebook
);
467 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
468 wxPoint(10,10), wxSize(120,70),
469 5, choices
, wxLB_ALWAYS_SB
);
470 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
471 wxPoint(10,90), wxSize(120,70),
472 5, choices
, wxLB_SORT
);
474 SetControlClientData("listbox", m_listbox
);
475 SetControlClientData("listbox", m_listboxSorted
);
477 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
479 m_listbox
->SetToolTip( "This is a list box" );
480 #endif // wxUSE_TOOLTIPS
482 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
483 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
484 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
485 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
486 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
487 wxButton
*button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
489 button
->SetDefault();
491 button
->SetForegroundColour(*wxBLUE
);
494 button
->SetToolTip( "Press here to set italic font" );
495 #endif // wxUSE_TOOLTIPS
497 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
498 m_checkbox
->SetValue(FALSE
);
500 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
501 #endif // wxUSE_TOOLTIPS
502 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
504 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
506 panel
= new wxPanel(m_notebook
);
507 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
508 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
509 5, choices
, wxCB_SORT
);
512 SetControlClientData("choice", m_choice
);
513 SetControlClientData("choice", m_choiceSorted
);
516 m_choice
->SetSelection(2);
517 m_choice
->SetBackgroundColour( "red" );
518 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
519 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
520 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
521 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
522 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
523 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
524 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
526 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
528 panel
= new wxPanel(m_notebook
);
529 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
530 wxPoint(5, 5), wxSize(150, 100));
531 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(20,25), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
532 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
533 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
534 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
535 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
536 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
537 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
538 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
539 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
541 wxString choices2
[] =
545 "Fourth", "Fifth", "Sixth",
546 "Seventh", "Eighth", "Nineth", "Tenth" */
549 panel
= new wxPanel(m_notebook
);
550 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
551 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
554 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
555 m_radio
->SetToolTip("Ever seen a radiobox?");
556 #endif // wxUSE_TOOLTIPS
558 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
559 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
560 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
561 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
562 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
563 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
564 rb
->SetValue( FALSE
);
565 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
566 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
568 panel
= new wxPanel(m_notebook
);
569 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
570 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
571 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
572 (void)new wxStaticBox( panel
, -1, "&Explanation", wxPoint(220,10), wxSize(270,130) );
574 // No wrapping text in wxStaticText yet :-(
575 (void)new wxStaticText( panel
, -1,
581 (void)new wxStaticText( panel
, -1,
582 "In order see the gauge (aka progress bar)\n"
583 "control do something you have to drag the\n"
584 "handle of the slider to the right.\n"
586 "This is also supposed to demonstrate how\n"
587 "to use static controls.\n",
592 int initialSpinValue
= -5;
594 s
<< initialSpinValue
;
595 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
597 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
598 m_spinbutton
->SetRange(-10,30);
599 m_spinbutton
->SetValue(initialSpinValue
);
601 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
603 #endif // wxUSE_SPINBTN
606 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
607 m_spinctrl
->SetRange(10,30);
608 m_spinctrl
->SetValue(15);
609 #endif // wxUSE_SPINCTRL
611 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
613 panel
= new wxPanel(m_notebook
);
615 #ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
616 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
617 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
620 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
621 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
624 wxBitmap
bitmap( 100, 100 );
626 dc
.SelectObject( bitmap
);
627 dc
.SetPen(*wxGREEN_PEN
);
629 dc
.DrawEllipse(5, 5, 90, 90);
630 dc
.DrawText("Bitmap", 30, 40);
631 dc
.SelectObject( wxNullBitmap
);
633 (void)new wxBitmapButton(panel
, -1, bitmap
, wxPoint(100, 20));
636 // test for masked bitmap display
637 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
640 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
641 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
645 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
646 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
647 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
648 wxBitmapButton
*bmpBtn
= new wxBitmapButton
654 bmpBtn
->SetBitmapSelected(bmp2
);
655 bmpBtn
->SetBitmapFocus(bmp3
);
657 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "&Toggle label", wxPoint(250, 20));
658 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
659 wxPoint(250, 60), wxDefaultSize
,
660 wxALIGN_RIGHT
| wxST_NO_AUTORESIZE
);
661 m_label
->SetForegroundColour( *wxBLUE
);
663 m_notebook
->AddPage(panel
, "wxBitmapXXX");
665 // layout constraints
667 panel
= new wxPanel(m_notebook
);
668 panel
->SetAutoLayout( TRUE
);
670 c
= new wxLayoutConstraints
;
671 c
->top
.SameAs( panel
, wxTop
, 10 );
673 c
->left
.SameAs( panel
, wxLeft
, 10 );
674 c
->width
.PercentOf( panel
, wxWidth
, 40 );
676 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
677 pMyButton
->SetConstraints( c
);
679 c
= new wxLayoutConstraints
;
680 c
->top
.SameAs( panel
, wxTop
, 10 );
681 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
682 c
->right
.SameAs( panel
, wxRight
, 10 );
683 c
->width
.PercentOf( panel
, wxWidth
, 40 );
685 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
686 pMyButton2
->SetConstraints( c
);
688 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
692 panel
= new wxPanel(m_notebook
);
693 panel
->SetAutoLayout( TRUE
);
695 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
697 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
698 sizer
->Add( 20,20, 1 );
699 sizer
->Add( new wxButton(panel
, -1, "Test Button &2" ), 3, wxGROW
|wxALL
, 10 );
701 panel
->SetSizer( sizer
);
703 m_notebook
->AddPage(panel
, "wxSizer");
706 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
710 GetClientSize( &x
, &y
);
712 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
713 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
716 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
718 int selOld
= event
.GetOldSelection();
721 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
722 "page change from taking place - if you select\n"
723 "[No] the current page will stay the third one\n",
725 wxICON_QUESTION
| wxYES_NO
) != wxYES
)
733 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
736 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
738 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
741 void MyPanel::OnTestButton(wxCommandEvent
& event
)
743 wxLogMessage(_T("Button %c clicked."),
744 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
747 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
749 static wxColour s_colOld
;
751 // test panel colour changing and propagation to the subcontrols
754 SetBackgroundColour(s_colOld
);
755 s_colOld
= wxNullColour
;
757 m_lbSelectThis
->SetForegroundColour("red");
758 m_lbSelectThis
->SetBackgroundColour("white");
762 s_colOld
= wxColour("red");
763 SetBackgroundColour("white");
765 m_lbSelectThis
->SetForegroundColour("white");
766 m_lbSelectThis
->SetBackgroundColour("red");
769 m_lbSelectThis
->Refresh();
773 void MyPanel::OnListBox( wxCommandEvent
&event
)
775 // GetParent()->Move(100, 100);
777 if (event
.GetInt() == -1)
779 m_text
->AppendText( "ListBox has no selections anymore\n" );
783 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
786 m_text
->AppendText( "ListBox event selection string is: '" );
787 m_text
->AppendText( event
.GetString() );
788 m_text
->AppendText( "'\n" );
789 m_text
->AppendText( "ListBox control selection string is: '" );
790 m_text
->AppendText( listbox
->GetStringSelection() );
791 m_text
->AppendText( "'\n" );
793 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
794 m_text
->AppendText( "ListBox event client data string is: '" );
795 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
796 m_text
->AppendText( obj
->GetData() );
798 m_text
->AppendText( wxString("none") );
800 m_text
->AppendText( "'\n" );
801 m_text
->AppendText( "ListBox control client data string is: '" );
802 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
804 m_text
->AppendText( obj
->GetData() );
806 m_text
->AppendText( wxString("none") );
807 m_text
->AppendText( "'\n" );
810 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
812 m_text
->AppendText( "ListBox double click string is: " );
813 m_text
->AppendText( event
.GetString() );
814 m_text
->AppendText( "\n" );
817 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
819 switch (event
.GetId())
821 case ID_LISTBOX_ENABLE
:
823 m_text
->AppendText("Checkbox clicked.\n");
824 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
827 cb
->SetToolTip( "Click to enable listbox" );
829 cb
->SetToolTip( "Click to disable listbox" );
830 #endif // wxUSE_TOOLTIPS
831 m_listbox
->Enable( event
.GetInt() == 0 );
832 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
833 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
834 m_listboxSorted
->Enable( event
.GetInt() == 0 );
835 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
838 case ID_LISTBOX_SEL_NUM
:
840 m_listbox
->SetSelection( 2 );
841 m_listboxSorted
->SetSelection( 2 );
842 m_lbSelectThis
->WarpPointer( 40, 14 );
845 case ID_LISTBOX_SEL_STR
:
847 m_listbox
->SetStringSelection( "This" );
848 m_listboxSorted
->SetStringSelection( "This" );
849 m_lbSelectNum
->WarpPointer( 40, 14 );
852 case ID_LISTBOX_CLEAR
:
855 m_listboxSorted
->Clear();
858 case ID_LISTBOX_APPEND
:
860 m_listbox
->Append( "Hi!" );
861 m_listboxSorted
->Append( "Hi!" );
864 case ID_LISTBOX_DELETE
:
867 idx
= m_listbox
->GetSelection();
868 m_listbox
->Delete( idx
);
869 idx
= m_listboxSorted
->GetSelection();
870 m_listboxSorted
->Delete( idx
);
873 case ID_LISTBOX_FONT
:
875 m_listbox
->SetFont( *wxITALIC_FONT
);
876 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
877 m_checkbox
->SetFont( *wxITALIC_FONT
);
883 void MyPanel::OnChoice( wxCommandEvent
&event
)
885 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
888 m_text
->AppendText( "Choice event selection string is: '" );
889 m_text
->AppendText( event
.GetString() );
890 m_text
->AppendText( "'\n" );
891 m_text
->AppendText( "Choice control selection string is: '" );
892 m_text
->AppendText( choice
->GetStringSelection() );
893 m_text
->AppendText( "'\n" );
895 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
896 m_text
->AppendText( "Choice event client data string is: '" );
899 m_text
->AppendText( obj
->GetData() );
901 m_text
->AppendText( wxString("none") );
903 m_text
->AppendText( "'\n" );
904 m_text
->AppendText( "Choice control client data string is: '" );
905 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
908 m_text
->AppendText( obj
->GetData() );
910 m_text
->AppendText( wxString("none") );
911 m_text
->AppendText( "'\n" );
914 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
916 switch (event
.GetId())
918 case ID_CHOICE_ENABLE
:
920 m_choice
->Enable( event
.GetInt() == 0 );
921 m_choiceSorted
->Enable( event
.GetInt() == 0 );
924 case ID_CHOICE_SEL_NUM
:
926 m_choice
->SetSelection( 2 );
927 m_choiceSorted
->SetSelection( 2 );
930 case ID_CHOICE_SEL_STR
:
932 m_choice
->SetStringSelection( "This" );
933 m_choiceSorted
->SetStringSelection( "This" );
936 case ID_CHOICE_CLEAR
:
939 m_choiceSorted
->Clear();
942 case ID_CHOICE_APPEND
:
944 m_choice
->Append( "Hi!" );
945 m_choiceSorted
->Append( "Hi!" );
948 case ID_CHOICE_DELETE
:
950 int idx
= m_choice
->GetSelection();
951 m_choice
->Delete( idx
);
952 idx
= m_choiceSorted
->GetSelection();
953 m_choiceSorted
->Delete( idx
);
958 m_choice
->SetFont( *wxITALIC_FONT
);
959 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
965 void MyPanel::OnCombo( wxCommandEvent
&event
)
967 m_text
->AppendText( "ComboBox event selection string is: " );
968 m_text
->AppendText( event
.GetString() );
969 m_text
->AppendText( "\n" );
970 m_text
->AppendText( "ComboBox control selection string is: " );
971 m_text
->AppendText( m_combo
->GetStringSelection() );
972 m_text
->AppendText( "\n" );
975 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
977 switch (event
.GetId())
979 case ID_COMBO_ENABLE
:
981 m_combo
->Enable( event
.GetInt() == 0 );
984 case ID_COMBO_SEL_NUM
:
986 m_combo
->SetSelection( 2 );
989 case ID_COMBO_SEL_STR
:
991 m_combo
->SetStringSelection( "This" );
999 case ID_COMBO_APPEND
:
1001 m_combo
->Append( "Hi!" );
1004 case ID_COMBO_DELETE
:
1006 int idx
= m_combo
->GetSelection();
1007 m_combo
->Delete( idx
);
1012 m_combo
->SetFont( *wxITALIC_FONT
);
1018 void MyPanel::OnRadio( wxCommandEvent
&event
)
1020 m_text
->AppendText( "RadioBox selection string is: " );
1021 m_text
->AppendText( event
.GetString() );
1022 m_text
->AppendText( "\n" );
1025 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1027 switch (event
.GetId())
1029 case ID_RADIOBOX_ENABLE
:
1031 m_radio
->Enable( event
.GetInt() == 0 );
1034 case ID_RADIOBOX_SEL_NUM
:
1036 m_radio
->SetSelection( 2 );
1039 case ID_RADIOBOX_SEL_STR
:
1041 m_radio
->SetStringSelection( "This" );
1044 case ID_RADIOBOX_FONT
:
1046 m_radio
->SetFont( *wxITALIC_FONT
);
1052 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1054 m_fontButton
->SetFont( *wxITALIC_FONT
);
1055 m_text
->SetFont( *wxITALIC_FONT
);
1058 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
1060 static bool s_long
= TRUE
;
1063 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
1066 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1068 m_gauge
->SetValue( m_slider
->GetValue() );
1073 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1076 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1077 m_spinctrl
->GetValue(), event
.GetInt());
1078 m_text
->AppendText(s
);
1081 #endif // wxUSE_SPINCTRL
1084 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1087 value
.Printf( _T("Spin control up: current = %d\n"),
1088 m_spinbutton
->GetValue());
1090 if ( m_spinbutton
->GetValue() > 17 )
1092 value
+= _T("Preventing the spin button from going above 17.\n");
1097 m_text
->AppendText(value
);
1100 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1103 value
.Printf( _T("Spin control down: current = %d\n"),
1104 m_spinbutton
->GetValue());
1106 if ( m_spinbutton
->GetValue() < -17 )
1108 value
+= _T("Preventing the spin button from going below -17.\n");
1113 m_text
->AppendText(value
);
1116 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1119 value
.Printf( _T("%d"), event
.GetPosition() );
1120 m_spintext
->SetValue( value
);
1122 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1123 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1124 m_spinbutton
->GetValue());
1126 m_text
->AppendText(value
);
1129 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1131 event
.Enable( m_spinbutton
->GetValue() > 0 );
1134 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1136 int max
= m_spinbutton
->GetValue();
1137 wxProgressDialog
dialog("Progress dialog example",
1138 "An informative message",
1144 wxPD_ESTIMATED_TIME
|
1145 wxPD_REMAINING_TIME
);
1149 for ( int i
= 0; i
< max
&& cont
; i
++ )
1154 cont
= dialog
.Update(i
, "That's all, folks!");
1156 else if ( i
== max
/ 2 )
1158 cont
= dialog
.Update(i
, "Only a half left!");
1162 cont
= dialog
.Update(i
);
1168 *m_text
<< "Progress dialog aborted!\n";
1172 *m_text
<< "Countdown from " << max
<< " finished.\n";
1176 #endif // wxUSE_SPINBTN
1180 //wxLog::RemoveTraceMask(_T("focus"));
1181 delete wxLog::SetActiveTarget(m_logTargetOld
);
1183 delete m_notebook
->GetImageList();
1186 //----------------------------------------------------------------------
1188 //----------------------------------------------------------------------
1190 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1191 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1192 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1193 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1195 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1196 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1197 #endif // wxUSE_TOOLTIPS
1199 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1201 EVT_SIZE(MyFrame::OnSize
)
1202 EVT_MOVE(MyFrame::OnMove
)
1204 EVT_IDLE(MyFrame::OnIdle
)
1207 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1208 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1212 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1215 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1220 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1222 wxBeginBusyCursor();
1224 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1230 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1232 m_panel
->m_text
->Clear();
1236 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1238 static long s_delay
= 5000;
1241 delay
.Printf( _T("%ld"), s_delay
);
1243 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1244 "Set tooltip delay",
1248 return; // cancelled
1250 wxSscanf(delay
, _T("%ld"), &s_delay
);
1252 wxToolTip::SetDelay(s_delay
);
1254 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1257 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1259 static bool s_enabled
= TRUE
;
1261 s_enabled
= !s_enabled
;
1263 wxToolTip::Enable(s_enabled
);
1265 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1269 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1271 static bool s_enable
= TRUE
;
1273 s_enable
= !s_enable
;
1274 m_panel
->Enable(s_enable
);
1277 void MyFrame::OnMove( wxMoveEvent
& event
)
1279 UpdateStatusBar(event
.GetPosition(), GetSize());
1284 void MyFrame::OnSize( wxSizeEvent
& event
)
1286 UpdateStatusBar(GetPosition(), event
.GetSize());
1291 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1293 // track the window which has the focus in the status bar
1294 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1295 wxWindow
*focus
= wxWindow::FindFocus();
1296 if ( focus
&& (focus
!= s_windowFocus
) )
1298 s_windowFocus
= focus
;
1303 _T("Focus: %s, HWND = %08x"),
1307 s_windowFocus
->GetClassInfo()->GetClassName()
1309 , s_windowFocus
->GetHWND()
1317 static void SetControlClientData(const char *name
,
1318 wxControlWithItems
*control
)
1320 size_t count
= control
->GetCount();
1321 for ( size_t n
= 0; n
< count
; n
++ )
1324 s
.Printf("%s client data for '%s'",
1325 name
, control
->GetString(n
).c_str());
1327 control
->SetClientObject(n
, new wxStringClientData(s
));