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(wxCommandEvent
& event
);
109 #endif // wxUSE_SPINCTRL
111 void OnEnableAll(wxCommandEvent
& event
);
112 void OnChangeColour(wxCommandEvent
& event
);
114 wxListBox
*m_listbox
,
122 wxButton
*m_fontButton
;
123 wxButton
*m_lbSelectNum
;
124 wxButton
*m_lbSelectThis
;
126 wxSpinButton
*m_spinbutton
;
127 wxButton
*m_btnProgress
;
128 #endif // wxUSE_SPINBTN
131 wxSpinCtrl
*m_spinctrl
;
132 #endif // wxUSE_SPINCTRL
134 wxTextCtrl
*m_spintext
;
135 wxCheckBox
*m_checkbox
;
138 wxNotebook
*m_notebook
;
140 wxStaticText
*m_label
;
143 DECLARE_EVENT_TABLE()
146 class MyFrame
: public wxFrame
149 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
151 void OnQuit(wxCommandEvent
& event
);
152 void OnAbout(wxCommandEvent
& event
);
155 void OnSetTooltipDelay(wxCommandEvent
& event
);
156 void OnToggleTooltips(wxCommandEvent
& event
);
157 #endif // wxUSE_TOOLTIPS
159 void OnEnableAll(wxCommandEvent
& event
);
161 void OnIdle( wxIdleEvent
& event
);
162 void OnSize( wxSizeEvent
& event
);
163 void OnMove( wxMoveEvent
& event
);
165 MyPanel
*GetPanel() const { return m_panel
; }
168 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
171 msg
.Printf(_("pos=(%d, %d), size=%dx%d"),
172 pos
.x
, pos
.y
, size
.x
, size
.y
);
173 SetStatusText(msg
, 1);
178 DECLARE_EVENT_TABLE()
181 //----------------------------------------------------------------------
183 //----------------------------------------------------------------------
185 static void SetControlClientData(const char *name
,
186 wxControlWithItems
*control
);
190 //----------------------------------------------------------------------
192 //----------------------------------------------------------------------
201 MINIMAL_SET_TOOLTIP_DELAY
= 200,
202 MINIMAL_ENABLE_TOOLTIPS
,
210 // parse the cmd line
215 wxSscanf(argv
[1], "%d", &x
);
216 wxSscanf(argv
[2], "%d", &y
);
219 // Create the main frame window
220 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
221 "Controls wxWindows App",
224 frame
->SetSizeHints( 500, 425 );
227 // The wxICON() macros loads an icon from a resource under Windows
228 // and uses an #included XPM image under GTK+ and Motif
230 frame
->SetIcon( wxICON(mondrian
) );
232 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
234 file_menu
->Append(MINIMAL_ABOUT
, "&About\tF1");
235 file_menu
->AppendSeparator();
236 file_menu
->Append(MINIMAL_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
238 wxMenuBar
*menu_bar
= new wxMenuBar
;
239 menu_bar
->Append(file_menu
, "&File");
242 wxMenu
*tooltip_menu
= new wxMenu
;
243 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
244 tooltip_menu
->AppendSeparator();
245 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
246 "enable/disable tooltips", TRUE
);
247 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
248 menu_bar
->Append(tooltip_menu
, "&Tooltips");
249 #endif // wxUSE_TOOLTIPS
251 wxMenu
*panel_menu
= new wxMenu
;
252 panel_menu
->Append(MINIMAL_ENABLE_ALL
, "&Disable all\tCtrl-E",
253 "Enable/disable all panel controls", TRUE
);
254 menu_bar
->Append(panel_menu
, "&Panel");
256 frame
->SetMenuBar(menu_bar
);
259 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
261 //frame->GetPanel()->m_notebook->SetSelection(3);
268 //----------------------------------------------------------------------
270 //----------------------------------------------------------------------
272 const int ID_NOTEBOOK
= 1000;
274 const int ID_LISTBOX
= 130;
275 const int ID_LISTBOX_SEL_NUM
= 131;
276 const int ID_LISTBOX_SEL_STR
= 132;
277 const int ID_LISTBOX_CLEAR
= 133;
278 const int ID_LISTBOX_APPEND
= 134;
279 const int ID_LISTBOX_DELETE
= 135;
280 const int ID_LISTBOX_FONT
= 136;
281 const int ID_LISTBOX_ENABLE
= 137;
282 const int ID_LISTBOX_SORTED
= 138;
284 const int ID_CHOICE
= 120;
285 const int ID_CHOICE_SEL_NUM
= 121;
286 const int ID_CHOICE_SEL_STR
= 122;
287 const int ID_CHOICE_CLEAR
= 123;
288 const int ID_CHOICE_APPEND
= 124;
289 const int ID_CHOICE_DELETE
= 125;
290 const int ID_CHOICE_FONT
= 126;
291 const int ID_CHOICE_ENABLE
= 127;
292 const int ID_CHOICE_SORTED
= 128;
294 const int ID_COMBO
= 140;
295 const int ID_COMBO_SEL_NUM
= 141;
296 const int ID_COMBO_SEL_STR
= 142;
297 const int ID_COMBO_CLEAR
= 143;
298 const int ID_COMBO_APPEND
= 144;
299 const int ID_COMBO_DELETE
= 145;
300 const int ID_COMBO_FONT
= 146;
301 const int ID_COMBO_ENABLE
= 147;
303 const int ID_RADIOBOX
= 160;
304 const int ID_RADIOBOX_SEL_NUM
= 161;
305 const int ID_RADIOBOX_SEL_STR
= 162;
306 const int ID_RADIOBOX_FONT
= 163;
307 const int ID_RADIOBOX_ENABLE
= 164;
309 const int ID_RADIOBUTTON_1
= 166;
310 const int ID_RADIOBUTTON_2
= 167;
312 const int ID_SET_FONT
= 170;
314 const int ID_GAUGE
= 180;
315 const int ID_SLIDER
= 181;
317 const int ID_SPIN
= 182;
318 const int ID_BTNPROGRESS
= 183;
319 const int ID_BUTTON_LABEL
= 184;
320 const int ID_SPINCTRL
= 185;
322 const int ID_CHANGE_COLOUR
= 200;
324 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
325 EVT_SIZE ( MyPanel::OnSize
)
326 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
327 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
328 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
329 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
330 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
331 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
332 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
333 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
334 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
335 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
336 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
337 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
338 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
339 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
340 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
341 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
342 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
343 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
344 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
345 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
346 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
347 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
348 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
349 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
350 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
351 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
352 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
353 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
354 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
355 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
356 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
357 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
358 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
359 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
360 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
361 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
363 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
364 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
365 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
366 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
367 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
368 #endif // wxUSE_SPINBTN
370 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
371 #endif // wxUSE_SPINCTRL
372 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
373 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
376 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
377 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
378 m_text(NULL
), m_notebook(NULL
)
380 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
381 // m_text->SetBackgroundColour("wheat");
383 //delete wxLog::SetActiveTarget(new wxLogStderr);
385 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
400 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
403 // fill the image list
404 wxImageList
*imagelist
= new wxImageList(32, 32);
406 imagelist
-> Add( wxBitmap( list_xpm
));
407 imagelist
-> Add( wxBitmap( choice_xpm
));
408 imagelist
-> Add( wxBitmap( combo_xpm
));
409 imagelist
-> Add( wxBitmap( text_xpm
));
410 imagelist
-> Add( wxBitmap( radio_xpm
));
411 imagelist
-> Add( wxBitmap( gauge_xpm
));
412 m_notebook
->SetImageList(imagelist
);
413 #elif defined(__WXMSW__)
414 // load images from resources
417 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
419 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
421 static const char *s_iconNames
[Image_Max
] =
423 "list", "choice", "combo", "text", "radio", "gauge"
426 for ( size_t n
= 0; n
< Image_Max
; n
++ )
428 wxBitmap
bmp(s_iconNames
[n
]);
429 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
431 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
436 m_notebook
->SetImageList(imagelist
);
440 #define Image_List -1
441 #define Image_Choice -1
442 #define Image_Combo -1
443 #define Image_Text -1
444 #define Image_Radio -1
445 #define Image_Gauge -1
450 wxPanel
*panel
= new wxPanel(m_notebook
);
451 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
452 wxPoint(10,10), wxSize(120,70),
453 5, choices
, wxLB_ALWAYS_SB
);
454 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
455 wxPoint(10,90), wxSize(120,70),
456 5, choices
, wxLB_SORT
);
458 SetControlClientData("listbox", m_listbox
);
459 SetControlClientData("listbox", m_listboxSorted
);
461 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
463 m_listbox
->SetToolTip( "This is a list box" );
464 #endif // wxUSE_TOOLTIPS
466 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
467 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
468 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
469 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
470 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
471 wxButton
*button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
473 button
->SetDefault();
475 button
->SetForegroundColour(*wxBLUE
);
478 button
->SetToolTip( "Press here to set italic font" );
479 #endif // wxUSE_TOOLTIPS
481 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
482 m_checkbox
->SetValue(FALSE
);
484 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
485 #endif // wxUSE_TOOLTIPS
486 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
488 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
490 panel
= new wxPanel(m_notebook
);
491 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
492 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
493 5, choices
, wxCB_SORT
);
496 SetControlClientData("choice", m_choice
);
497 SetControlClientData("choice", m_choiceSorted
);
500 m_choice
->SetSelection(2);
501 m_choice
->SetBackgroundColour( "red" );
502 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
503 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
504 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
505 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
506 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
507 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
508 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
510 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
512 panel
= new wxPanel(m_notebook
);
513 (void)new wxStaticBox( panel
, -1, "Box around combobox",
514 wxPoint(5, 5), wxSize(150, 100));
515 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(20,20), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
516 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
517 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
518 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
519 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
520 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
521 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
522 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
523 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
525 wxString choices2
[] =
529 "Fourth", "Fifth", "Sixth",
530 "Seventh", "Eighth", "Nineth", "Tenth" */
533 panel
= new wxPanel(m_notebook
);
534 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
535 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
538 m_radio
->SetToolTip("Ever seen a radiobox?");
539 #endif // wxUSE_TOOLTIPS
541 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
542 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
543 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
544 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
545 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
546 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30), wxRB_GROUP
);
547 rb
->SetValue( FALSE
);
548 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
549 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
551 panel
= new wxPanel(m_notebook
);
552 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
553 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
554 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
555 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(220,10), wxSize(270,130) );
557 // No wrapping text in wxStaticText yet :-(
558 (void)new wxStaticText( panel
, -1,
564 (void)new wxStaticText( panel
, -1,
565 "In order see the gauge (aka progress bar)\n"
566 "control do something you have to drag the\n"
567 "handle of the slider to the right.\n"
569 "This is also supposed to demonstrate how\n"
570 "to use static controls.\n",
575 int initialSpinValue
= -5;
577 s
<< initialSpinValue
;
578 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
580 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
581 m_spinbutton
->SetRange(-10,30);
582 m_spinbutton
->SetValue(initialSpinValue
);
584 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "Show progress dialog",
586 #endif // wxUSE_SPINBTN
589 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
590 m_spinctrl
->SetRange(10,30);
591 m_spinctrl
->SetValue(15);
592 #endif // wxUSE_SPINCTRL
594 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
596 panel
= new wxPanel(m_notebook
);
598 #ifndef __WXMOTIF__ // wxStaticBitmap not working under Motif yet. MB
599 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
600 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
603 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
604 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
607 wxBitmap
bitmap( 100, 100 );
609 dc
.SelectObject( bitmap
);
610 dc
.SetPen(*wxGREEN_PEN
);
612 dc
.DrawEllipse(5, 5, 90, 90);
613 dc
.DrawText("Bitmap", 30, 40);
614 dc
.SelectObject( wxNullBitmap
);
616 (void)new wxBitmapButton(panel
, -1, bitmap
, wxPoint(100, 20));
619 bitmap
= wxBitmap("../../utils/wxPython/tests/bitmaps/test2.bmp",
621 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
622 (void)new wxBitmapButton(panel
, -1, bitmap
, wxPoint(300, 120));
625 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
626 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
627 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
628 wxBitmapButton
*bmpBtn
= new wxBitmapButton
634 bmpBtn
->SetBitmapSelected(bmp2
);
635 bmpBtn
->SetBitmapFocus(bmp3
);
637 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "Toggle label", wxPoint(250, 20));
638 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
639 wxPoint(250, 60), wxDefaultSize
,
640 wxALIGN_RIGHT
| wxST_NO_AUTORESIZE
);
642 m_notebook
->AddPage(panel
, "wxBitmapXXX");
644 // --------------- TEST CODE ----------------------
646 // layout constraints
648 panel
= new wxPanel(m_notebook
);
649 panel
->SetAutoLayout( TRUE
);
651 wxLayoutConstraints
*c
;
652 c
= new wxLayoutConstraints
;
653 c
->top
.SameAs( panel
, wxTop
, 10 );
655 c
->left
.SameAs( panel
, wxLeft
, 10 );
656 c
->width
.PercentOf( panel
, wxWidth
, 40 );
658 wxButton
*pMyButton
= new wxButton(panel
, -1, "Test Button" );
659 pMyButton
->SetConstraints( c
);
661 c
= new wxLayoutConstraints
;
662 c
->top
.SameAs( panel
, wxTop
, 10 );
663 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
664 c
->right
.SameAs( panel
, wxRight
, 10 );
665 c
->width
.PercentOf( panel
, wxWidth
, 40 );
667 wxButton
*pMyButton2
= new wxButton(panel
, -1, "Test Button 2" );
668 pMyButton2
->SetConstraints( c
);
670 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
674 panel
= new wxPanel(m_notebook
);
675 panel
->SetAutoLayout( TRUE
);
677 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
679 sizer
->Add( new wxButton(panel
, -1, "Test Button" ), 3, wxALL
, 10 );
680 sizer
->Add( 20,20, 1 );
681 sizer
->Add( new wxButton(panel
, -1, "Test Button 2" ), 3, wxGROW
|wxALL
, 10 );
683 panel
->SetSizer( sizer
);
685 m_notebook
->AddPage(panel
, "wxSizer");
687 // --------------- TEST CODE ----------------------
691 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
695 GetClientSize( &x
, &y
);
697 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
698 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
701 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
703 int selOld
= event
.GetOldSelection();
706 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
707 "page change from taking place - if you select\n"
708 "[No] the current page will stay the third one\n",
710 wxICON_QUESTION
| wxYES_NO
) != wxYES
)
718 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
721 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
723 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
726 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
728 static wxColour s_colOld
;
730 // test panel colour changing and propagation to the subcontrols
733 SetBackgroundColour(s_colOld
);
734 s_colOld
= wxNullColour
;
736 m_lbSelectThis
->SetForegroundColour("yellow");
737 m_lbSelectThis
->SetBackgroundColour("blue");
741 s_colOld
= GetBackgroundColour();
742 SetBackgroundColour("green");
744 m_lbSelectThis
->SetForegroundColour("white");
745 m_lbSelectThis
->SetBackgroundColour("red");
748 m_lbSelectThis
->Refresh();
752 void MyPanel::OnListBox( wxCommandEvent
&event
)
754 // GetParent()->Move(100, 100);
756 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
759 m_text
->AppendText( "ListBox event selection string is: '" );
760 m_text
->AppendText( event
.GetString() );
761 m_text
->AppendText( "'\n" );
762 m_text
->AppendText( "ListBox control selection string is: '" );
763 m_text
->AppendText( listbox
->GetStringSelection() );
764 m_text
->AppendText( "'\n" );
766 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
767 m_text
->AppendText( "ListBox event client data string is: '" );
768 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
769 m_text
->AppendText( obj
->GetData() );
771 m_text
->AppendText( wxString("none") );
773 m_text
->AppendText( "'\n" );
774 m_text
->AppendText( "ListBox control client data string is: '" );
775 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
777 m_text
->AppendText( obj
->GetData() );
779 m_text
->AppendText( wxString("none") );
780 m_text
->AppendText( "'\n" );
783 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
785 m_text
->AppendText( "ListBox double click string is: " );
786 m_text
->AppendText( event
.GetString() );
787 m_text
->AppendText( "\n" );
790 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
792 switch (event
.GetId())
794 case ID_LISTBOX_ENABLE
:
796 m_text
->AppendText("Checkbox clicked.\n");
797 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
800 cb
->SetToolTip( "Click to enable listbox" );
802 cb
->SetToolTip( "Click to disable listbox" );
803 #endif // wxUSE_TOOLTIPS
804 m_listbox
->Enable( event
.GetInt() == 0 );
805 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
806 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
807 m_listboxSorted
->Enable( event
.GetInt() == 0 );
810 case ID_LISTBOX_SEL_NUM
:
812 m_listbox
->SetSelection( 2 );
813 m_listboxSorted
->SetSelection( 2 );
814 m_lbSelectThis
->WarpPointer( 40, 14 );
817 case ID_LISTBOX_SEL_STR
:
819 m_listbox
->SetStringSelection( "This" );
820 m_listboxSorted
->SetStringSelection( "This" );
821 m_lbSelectNum
->WarpPointer( 40, 14 );
824 case ID_LISTBOX_CLEAR
:
827 m_listboxSorted
->Clear();
830 case ID_LISTBOX_APPEND
:
832 m_listbox
->Append( "Hi!" );
833 m_listboxSorted
->Append( "Hi!" );
836 case ID_LISTBOX_DELETE
:
839 idx
= m_listbox
->GetSelection();
840 m_listbox
->Delete( idx
);
841 idx
= m_listboxSorted
->GetSelection();
842 m_listboxSorted
->Delete( idx
);
845 case ID_LISTBOX_FONT
:
847 m_listbox
->SetFont( *wxITALIC_FONT
);
848 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
849 m_checkbox
->SetFont( *wxITALIC_FONT
);
855 void MyPanel::OnChoice( wxCommandEvent
&event
)
857 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
860 m_text
->AppendText( "Choice event selection string is: '" );
861 m_text
->AppendText( event
.GetString() );
862 m_text
->AppendText( "'\n" );
863 m_text
->AppendText( "Choice control selection string is: '" );
864 m_text
->AppendText( choice
->GetStringSelection() );
865 m_text
->AppendText( "'\n" );
867 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
868 m_text
->AppendText( "Choice event client data string is: '" );
871 m_text
->AppendText( obj
->GetData() );
873 m_text
->AppendText( wxString("none") );
875 m_text
->AppendText( "'\n" );
876 m_text
->AppendText( "Choice control client data string is: '" );
877 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
880 m_text
->AppendText( obj
->GetData() );
882 m_text
->AppendText( wxString("none") );
883 m_text
->AppendText( "'\n" );
886 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
888 switch (event
.GetId())
890 case ID_CHOICE_ENABLE
:
892 m_choice
->Enable( event
.GetInt() == 0 );
893 m_choiceSorted
->Enable( event
.GetInt() == 0 );
896 case ID_CHOICE_SEL_NUM
:
898 m_choice
->SetSelection( 2 );
899 m_choiceSorted
->SetSelection( 2 );
902 case ID_CHOICE_SEL_STR
:
904 m_choice
->SetStringSelection( "This" );
905 m_choiceSorted
->SetStringSelection( "This" );
908 case ID_CHOICE_CLEAR
:
911 m_choiceSorted
->Clear();
914 case ID_CHOICE_APPEND
:
916 m_choice
->Append( "Hi!" );
917 m_choiceSorted
->Append( "Hi!" );
920 case ID_CHOICE_DELETE
:
922 int idx
= m_choice
->GetSelection();
923 m_choice
->Delete( idx
);
924 idx
= m_choiceSorted
->GetSelection();
925 m_choiceSorted
->Delete( idx
);
930 m_choice
->SetFont( *wxITALIC_FONT
);
931 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
937 void MyPanel::OnCombo( wxCommandEvent
&event
)
939 m_text
->AppendText( "ComboBox event selection string is: " );
940 m_text
->AppendText( event
.GetString() );
941 m_text
->AppendText( "\n" );
942 m_text
->AppendText( "ComboBox control selection string is: " );
943 m_text
->AppendText( m_combo
->GetStringSelection() );
944 m_text
->AppendText( "\n" );
947 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
949 switch (event
.GetId())
951 case ID_COMBO_ENABLE
:
953 m_combo
->Enable( event
.GetInt() == 0 );
956 case ID_COMBO_SEL_NUM
:
958 m_combo
->SetSelection( 2 );
961 case ID_COMBO_SEL_STR
:
963 m_combo
->SetStringSelection( "This" );
971 case ID_COMBO_APPEND
:
973 m_combo
->Append( "Hi!" );
976 case ID_COMBO_DELETE
:
978 int idx
= m_combo
->GetSelection();
979 m_combo
->Delete( idx
);
984 m_combo
->SetFont( *wxITALIC_FONT
);
990 void MyPanel::OnRadio( wxCommandEvent
&event
)
992 m_text
->AppendText( "RadioBox selection string is: " );
993 m_text
->AppendText( event
.GetString() );
994 m_text
->AppendText( "\n" );
997 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
999 switch (event
.GetId())
1001 case ID_RADIOBOX_ENABLE
:
1003 m_radio
->Enable( event
.GetInt() == 0 );
1006 case ID_RADIOBOX_SEL_NUM
:
1008 m_radio
->SetSelection( 2 );
1011 case ID_RADIOBOX_SEL_STR
:
1013 m_radio
->SetStringSelection( "This" );
1016 case ID_RADIOBOX_FONT
:
1018 m_radio
->SetFont( *wxITALIC_FONT
);
1024 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1026 m_fontButton
->SetFont( *wxITALIC_FONT
);
1027 m_text
->SetFont( *wxITALIC_FONT
);
1030 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
1032 static bool s_long
= TRUE
;
1035 m_label
->SetLabel(s_long
? "very very very long text" : "shorter text");
1038 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1040 m_gauge
->SetValue( m_slider
->GetValue() );
1045 void MyPanel::OnSpinCtrl(wxCommandEvent
& event
)
1048 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1049 m_spinctrl
->GetValue(), event
.GetInt());
1050 m_text
->AppendText(s
);
1053 #endif // wxUSE_SPINCTRL
1056 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1059 value
.Printf( _T("Spin control up: current = %d\n"),
1060 m_spinbutton
->GetValue());
1062 if ( m_spinbutton
->GetValue() > 17 )
1064 value
+= _T("Preventing the spin button from going above 17.\n");
1069 m_text
->AppendText(value
);
1072 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1075 value
.Printf( _T("Spin control down: current = %d\n"),
1076 m_spinbutton
->GetValue());
1078 if ( m_spinbutton
->GetValue() < -17 )
1080 value
+= _T("Preventing the spin button from going below -17.\n");
1085 m_text
->AppendText(value
);
1088 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1091 value
.Printf( _T("%d"), event
.GetPosition() );
1092 m_spintext
->SetValue( value
);
1094 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1095 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1096 m_spinbutton
->GetValue());
1098 m_text
->AppendText(value
);
1101 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1103 event
.Enable( m_spinbutton
->GetValue() > 0 );
1106 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1108 int max
= m_spinbutton
->GetValue();
1109 wxProgressDialog
dialog("Progress dialog example",
1110 "An informative message",
1116 wxPD_ESTIMATED_TIME
|
1117 wxPD_REMAINING_TIME
);
1121 for ( int i
= 0; i
< max
&& cont
; i
++ )
1126 cont
= dialog
.Update(i
, "That's all, folks!");
1128 else if ( i
== max
/ 2 )
1130 cont
= dialog
.Update(i
, "Only a half left!");
1134 cont
= dialog
.Update(i
);
1140 *m_text
<< "Progress dialog aborted!\n";
1144 *m_text
<< "Countdown from " << max
<< " finished.\n";
1148 #endif // wxUSE_SPINBTN
1152 delete m_notebook
->GetImageList();
1155 //----------------------------------------------------------------------
1157 //----------------------------------------------------------------------
1159 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1160 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1161 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1163 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1164 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1165 #endif // wxUSE_TOOLTIPS
1167 EVT_MENU(MINIMAL_ENABLE_ALL
, MyFrame::OnEnableAll
)
1169 EVT_SIZE(MyFrame::OnSize
)
1170 EVT_MOVE(MyFrame::OnMove
)
1172 EVT_IDLE(MyFrame::OnIdle
)
1175 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1176 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1180 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1183 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1188 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1190 wxBeginBusyCursor();
1192 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1199 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1201 static long s_delay
= 5000;
1204 delay
.Printf( _T("%ld"), s_delay
);
1206 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1207 "Set tooltip delay",
1211 return; // cancelled
1213 wxSscanf(delay
, _T("%ld"), &s_delay
);
1215 wxToolTip::SetDelay(s_delay
);
1217 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1220 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1222 static bool s_enabled
= TRUE
;
1224 s_enabled
= !s_enabled
;
1226 wxToolTip::Enable(s_enabled
);
1228 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1232 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1234 static bool s_enable
= TRUE
;
1236 s_enable
= !s_enable
;
1237 m_panel
->Enable(s_enable
);
1240 void MyFrame::OnMove( wxMoveEvent
& event
)
1242 UpdateStatusBar(event
.GetPosition(), GetSize());
1247 void MyFrame::OnSize( wxSizeEvent
& event
)
1249 UpdateStatusBar(GetPosition(), event
.GetSize());
1254 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1256 // track the window which has the focus in the status bar
1257 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1258 wxWindow
*focus
= wxWindow::FindFocus();
1259 if ( focus
&& (focus
!= s_windowFocus
) )
1261 s_windowFocus
= focus
;
1266 _T("Focus: wxWindow = %p, HWND = %08x"),
1268 _T("Focus: wxWindow = %p"),
1272 , s_windowFocus
->GetHWND()
1280 static void SetControlClientData(const char *name
,
1281 wxControlWithItems
*control
)
1283 size_t count
= control
->GetCount();
1284 for ( size_t n
= 0; n
< count
; n
++ )
1287 s
.Printf("%s client data for '%s'",
1288 name
, control
->GetString(n
).c_str());
1290 control
->SetClientObject(n
, new wxStringClientData(s
));