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/tglbtn.h"
30 #include "wx/notebook.h"
31 #include "wx/imaglist.h"
32 #include "wx/artprov.h"
35 #include "wx/tooltip.h"
38 #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
43 #include "mondrian.xpm"
44 #include "icons/choice.xpm"
45 #include "icons/combo.xpm"
46 #include "icons/list.xpm"
47 #include "icons/radio.xpm"
48 #include "icons/text.xpm"
49 #include "icons/gauge.xpm"
53 // Win16 doesn't have them
57 #define wxUSE_SPINBTN 0
60 #define wxUSE_SPINBTN 1
64 #include "wx/progdlg.h"
67 #include "wx/spinctrl.h"
68 #endif // wxUSE_SPINCTRL
70 //----------------------------------------------------------------------
72 //----------------------------------------------------------------------
74 class MyApp
: public wxApp
80 class MyPanel
: public wxPanel
83 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
86 void OnSize( wxSizeEvent
& event
);
87 void OnListBox( wxCommandEvent
&event
);
88 void OnListBoxDoubleClick( wxCommandEvent
&event
);
89 void OnListBoxButtons( wxCommandEvent
&event
);
91 void OnChoice( wxCommandEvent
&event
);
92 void OnChoiceButtons( wxCommandEvent
&event
);
94 void OnCombo( wxCommandEvent
&event
);
95 void OnComboTextChanged( wxCommandEvent
&event
);
96 void OnComboTextEnter( wxCommandEvent
&event
);
97 void OnComboButtons( wxCommandEvent
&event
);
98 void OnRadio( wxCommandEvent
&event
);
99 void OnRadioButtons( wxCommandEvent
&event
);
100 void OnSetFont( wxCommandEvent
&event
);
101 void OnPageChanged( wxNotebookEvent
&event
);
102 void OnPageChanging( wxNotebookEvent
&event
);
103 void OnSliderUpdate( wxCommandEvent
&event
);
104 void OnUpdateLabel( wxCommandEvent
&event
);
106 void OnSpinUp( wxSpinEvent
&event
);
107 void OnSpinDown( wxSpinEvent
&event
);
108 void OnSpinUpdate( wxSpinEvent
&event
);
109 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
110 void OnShowProgress( wxCommandEvent
&event
);
111 #endif // wxUSE_SPINBTN
114 void OnSpinCtrl(wxSpinEvent
& event
);
115 #endif // wxUSE_SPINCTRL
117 void OnEnableAll(wxCommandEvent
& event
);
118 void OnChangeColour(wxCommandEvent
& event
);
119 void OnTestButton(wxCommandEvent
& event
);
120 void OnBmpButton(wxCommandEvent
& event
);
122 wxListBox
*m_listbox
,
133 wxButton
*m_fontButton
;
134 wxButton
*m_lbSelectNum
;
135 wxButton
*m_lbSelectThis
;
137 wxSpinButton
*m_spinbutton
;
138 wxButton
*m_btnProgress
;
139 #endif // wxUSE_SPINBTN
142 wxSpinCtrl
*m_spinctrl
;
143 #endif // wxUSE_SPINCTRL
145 wxTextCtrl
*m_spintext
;
146 wxCheckBox
*m_checkbox
;
149 wxNotebook
*m_notebook
;
151 wxStaticText
*m_label
;
154 wxLog
*m_logTargetOld
;
156 DECLARE_EVENT_TABLE()
159 class MyFrame
: public wxFrame
162 MyFrame(const char *title
, int x
, int y
);
164 void OnQuit(wxCommandEvent
& event
);
165 void OnAbout(wxCommandEvent
& event
);
166 void OnClearLog(wxCommandEvent
& event
);
169 void OnSetTooltipDelay(wxCommandEvent
& event
);
170 void OnToggleTooltips(wxCommandEvent
& event
);
171 #endif // wxUSE_TOOLTIPS
173 void OnEnableAll(wxCommandEvent
& event
);
175 void OnIdle( wxIdleEvent
& event
);
176 void OnSize( wxSizeEvent
& event
);
177 void OnMove( wxMoveEvent
& event
);
179 MyPanel
*GetPanel() const { return m_panel
; }
182 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
184 if ( m_frameStatusBar
)
187 wxSize sizeAll
= GetSize(),
188 sizeCl
= GetClientSize();
189 msg
.Printf(_("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)"),
192 sizeAll
.x
, sizeAll
.y
,
194 SetStatusText(msg
, 1);
200 DECLARE_EVENT_TABLE()
203 // a button which intercepts double clicks (for testing...)
204 class MyButton
: public wxButton
207 MyButton(wxWindow
*parent
,
209 const wxString
& label
= wxEmptyString
,
210 const wxPoint
& pos
= wxDefaultPosition
,
211 const wxSize
& size
= wxDefaultSize
)
212 : wxButton(parent
, id
, label
, pos
, size
)
216 void OnDClick(wxMouseEvent
& event
)
218 wxLogMessage(_T("MyButton::OnDClick"));
224 DECLARE_EVENT_TABLE()
227 // a combo which intercepts chars (to test Windows behaviour)
228 class MyComboBox
: public wxComboBox
231 MyComboBox(wxWindow
*parent
, wxWindowID id
,
232 const wxString
& value
= wxEmptyString
,
233 const wxPoint
& pos
= wxDefaultPosition
,
234 const wxSize
& size
= wxDefaultSize
,
235 int n
= 0, const wxString choices
[] = NULL
,
237 const wxValidator
& validator
= wxDefaultValidator
,
238 const wxString
& name
= wxComboBoxNameStr
)
239 : wxComboBox(parent
, id
, value
, pos
, size
, n
, choices
, style
,
243 void OnChar(wxKeyEvent
& event
);
244 void OnKeyDown(wxKeyEvent
& event
);
245 void OnKeyUp(wxKeyEvent
& event
);
246 void OnFocusGot(wxFocusEvent
& event
)
248 wxLogMessage(_T("MyComboBox::OnFocusGot"));
254 DECLARE_EVENT_TABLE()
257 // a radiobox which handles focus set/kill (for testing)
258 class MyRadioBox
: public wxRadioBox
261 MyRadioBox(wxWindow
*parent
,
263 const wxString
& title
= wxEmptyString
,
264 const wxPoint
& pos
= wxDefaultPosition
,
265 const wxSize
& size
= wxDefaultSize
,
266 int n
= 0, const wxString choices
[] = NULL
,
268 long style
= wxRA_HORIZONTAL
,
269 const wxValidator
& validator
= wxDefaultValidator
,
270 const wxString
& name
= wxRadioBoxNameStr
)
271 : wxRadioBox(parent
, id
, title
, pos
, size
, n
, choices
, majorDim
,
272 style
, validator
, name
) { }
275 void OnFocusGot(wxFocusEvent
& event
)
277 wxLogMessage(_T("MyRadioBox::OnFocusGot"));
282 void OnFocusLost(wxFocusEvent
& event
)
284 wxLogMessage(_T("MyRadioBox::OnFocusLost"));
290 DECLARE_EVENT_TABLE()
293 //----------------------------------------------------------------------
295 //----------------------------------------------------------------------
297 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
);
298 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
);
302 //----------------------------------------------------------------------
304 //----------------------------------------------------------------------
314 CONTROLS_SET_TOOLTIP_DELAY
= 200,
315 CONTROLS_ENABLE_TOOLTIPS
,
323 // use standard command line handling:
324 if ( !wxApp::OnInit() )
327 // parse the cmd line
332 wxSscanf(wxString(argv
[1]), wxT("%d"), &x
);
333 wxSscanf(wxString(argv
[2]), wxT("%d"), &y
);
336 // Create the main frame window
337 MyFrame
*frame
= new MyFrame("Controls wxWindows App", x
, y
);
343 //----------------------------------------------------------------------
345 //----------------------------------------------------------------------
347 const int ID_NOTEBOOK
= 1000;
349 const int ID_LISTBOX
= 130;
350 const int ID_LISTBOX_SEL_NUM
= 131;
351 const int ID_LISTBOX_SEL_STR
= 132;
352 const int ID_LISTBOX_CLEAR
= 133;
353 const int ID_LISTBOX_APPEND
= 134;
354 const int ID_LISTBOX_DELETE
= 135;
355 const int ID_LISTBOX_FONT
= 136;
356 const int ID_LISTBOX_ENABLE
= 137;
357 const int ID_LISTBOX_SORTED
= 138;
359 const int ID_CHOICE
= 120;
360 const int ID_CHOICE_SEL_NUM
= 121;
361 const int ID_CHOICE_SEL_STR
= 122;
362 const int ID_CHOICE_CLEAR
= 123;
363 const int ID_CHOICE_APPEND
= 124;
364 const int ID_CHOICE_DELETE
= 125;
365 const int ID_CHOICE_FONT
= 126;
366 const int ID_CHOICE_ENABLE
= 127;
367 const int ID_CHOICE_SORTED
= 128;
369 const int ID_COMBO
= 140;
370 const int ID_COMBO_SEL_NUM
= 141;
371 const int ID_COMBO_SEL_STR
= 142;
372 const int ID_COMBO_CLEAR
= 143;
373 const int ID_COMBO_APPEND
= 144;
374 const int ID_COMBO_DELETE
= 145;
375 const int ID_COMBO_FONT
= 146;
376 const int ID_COMBO_ENABLE
= 147;
378 const int ID_RADIOBOX
= 160;
379 const int ID_RADIOBOX_SEL_NUM
= 161;
380 const int ID_RADIOBOX_SEL_STR
= 162;
381 const int ID_RADIOBOX_FONT
= 163;
382 const int ID_RADIOBOX_ENABLE
= 164;
384 const int ID_RADIOBUTTON_1
= 166;
385 const int ID_RADIOBUTTON_2
= 167;
387 const int ID_SET_FONT
= 170;
389 const int ID_GAUGE
= 180;
390 const int ID_SLIDER
= 181;
392 const int ID_SPIN
= 182;
393 const int ID_BTNPROGRESS
= 183;
394 const int ID_BUTTON_LABEL
= 184;
395 const int ID_SPINCTRL
= 185;
397 const int ID_BUTTON_TEST1
= 190;
398 const int ID_BUTTON_TEST2
= 191;
399 const int ID_BITMAP_BTN
= 192;
401 const int ID_CHANGE_COLOUR
= 200;
403 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
404 EVT_SIZE ( MyPanel::OnSize
)
405 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
406 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
407 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
408 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
409 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
410 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
411 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
412 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
413 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
414 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
415 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
416 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
418 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
419 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
420 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
421 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
422 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
423 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
424 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
425 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
426 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
428 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
429 EVT_TEXT (ID_COMBO
, MyPanel::OnComboTextChanged
)
430 EVT_TEXT_ENTER(ID_COMBO
, MyPanel::OnComboTextEnter
)
431 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
432 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
433 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
434 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
435 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
436 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
437 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
438 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
439 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
440 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
441 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
442 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
443 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
444 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
446 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
447 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
448 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
449 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
450 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
451 #endif // wxUSE_SPINBTN
453 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
454 #endif // wxUSE_SPINCTRL
456 EVT_TOGGLEBUTTON(ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
457 #endif // wxUSE_TOGGLEBTN
458 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
459 EVT_BUTTON (ID_BUTTON_TEST1
, MyPanel::OnTestButton
)
460 EVT_BUTTON (ID_BUTTON_TEST2
, MyPanel::OnTestButton
)
461 EVT_BUTTON (ID_BITMAP_BTN
, MyPanel::OnBmpButton
)
464 BEGIN_EVENT_TABLE(MyButton
, wxButton
)
465 EVT_LEFT_DCLICK(MyButton::OnDClick
)
468 BEGIN_EVENT_TABLE(MyComboBox
, wxComboBox
)
469 EVT_CHAR(MyComboBox::OnChar
)
470 EVT_KEY_DOWN(MyComboBox::OnKeyDown
)
471 EVT_KEY_UP(MyComboBox::OnKeyUp
)
473 EVT_SET_FOCUS(MyComboBox::OnFocusGot
)
476 BEGIN_EVENT_TABLE(MyRadioBox
, wxRadioBox
)
477 EVT_SET_FOCUS(MyRadioBox::OnFocusGot
)
478 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost
)
481 // ============================================================================
483 // ============================================================================
485 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
486 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
487 m_text(NULL
), m_notebook(NULL
)
489 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
490 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
491 m_text
->SetBackgroundColour(wxT("wheat"));
494 wxLog::AddTraceMask(_T("focus"));
495 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
497 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
512 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
515 // fill the image list
516 wxImageList
*imagelist
= new wxImageList(32, 32);
518 imagelist
-> Add( wxBitmap( list_xpm
));
519 imagelist
-> Add( wxBitmap( choice_xpm
));
520 imagelist
-> Add( wxBitmap( combo_xpm
));
521 imagelist
-> Add( wxBitmap( text_xpm
));
522 imagelist
-> Add( wxBitmap( radio_xpm
));
523 imagelist
-> Add( wxBitmap( gauge_xpm
));
524 m_notebook
->SetImageList(imagelist
);
525 #elif defined(__WXMSW__)
526 // load images from resources
529 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
531 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
533 static const char *s_iconNames
[Image_Max
] =
535 "list", "choice", "combo", "text", "radio", "gauge"
538 for ( size_t n
= 0; n
< Image_Max
; n
++ )
540 wxBitmap
bmp(s_iconNames
[n
]);
541 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
543 wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."),
548 m_notebook
->SetImageList(imagelist
);
552 #define Image_List -1
553 #define Image_Choice -1
554 #define Image_Combo -1
555 #define Image_Text -1
556 #define Image_Radio -1
557 #define Image_Gauge -1
562 wxPanel
*panel
= new wxPanel(m_notebook
);
563 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
564 wxPoint(10,10), wxSize(120,70),
565 5, choices
, wxLB_ALWAYS_SB
);
566 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
567 wxPoint(10,90), wxSize(120,70),
568 5, choices
, wxLB_SORT
);
570 SetListboxClientData(wxT("listbox"), m_listbox
);
571 SetListboxClientData(wxT("listbox"), m_listboxSorted
);
573 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
575 m_listbox
->SetToolTip( "This is a list box" );
576 #endif // wxUSE_TOOLTIPS
578 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
579 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
580 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
581 (void)new MyButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
582 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
583 wxButton
*button
= new MyButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
585 button
->SetDefault();
587 button
->SetForegroundColour(*wxBLUE
);
590 button
->SetToolTip( "Press here to set italic font" );
591 #endif // wxUSE_TOOLTIPS
593 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
594 m_checkbox
->SetValue(FALSE
);
596 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
597 #endif // wxUSE_TOOLTIPS
598 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
600 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
601 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
604 panel
= new wxPanel(m_notebook
);
605 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
606 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
607 5, choices
, wxCB_SORT
);
609 SetChoiceClientData(wxT("choice"), m_choice
);
610 SetChoiceClientData(wxT("choice"), m_choiceSorted
);
612 m_choice
->SetSelection(2);
613 m_choice
->SetBackgroundColour( wxT("red") );
614 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
615 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
616 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
617 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
618 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
619 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
620 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
622 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
623 #endif // wxUSE_CHOICE
625 panel
= new wxPanel(m_notebook
);
626 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
627 wxPoint(5, 5), wxSize(150, 100));
628 m_combo
= new MyComboBox( panel
, ID_COMBO
, "This",
629 wxPoint(20,25), wxSize(120, -1),
631 /* wxCB_READONLY | */ wxPROCESS_ENTER
);
633 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
634 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
635 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
636 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
637 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
638 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
639 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
640 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
642 wxString choices2
[] =
646 "Fourth", "Fifth", "Sixth",
647 "Seventh", "Eighth", "Nineth", "Tenth" */
650 panel
= new wxPanel(m_notebook
);
651 (void)new MyRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
652 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
655 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
656 m_radio
->SetToolTip("Ever seen a radiobox?");
657 #endif // wxUSE_TOOLTIPS
659 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
660 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
661 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
662 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
663 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
664 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
665 rb
->SetValue( FALSE
);
666 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
667 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
669 panel
= new wxPanel(m_notebook
);
670 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
671 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
672 m_gauge
->SetBackgroundColour(*wxGREEN
);
673 m_gauge
->SetForegroundColour(*wxRED
);
674 m_gaugeVert
= new wxGauge( panel
, -1, 100,
675 wxPoint(195,35), wxSize(30, 90),
676 wxGA_VERTICAL
| wxGA_SMOOTH
| wxNO_BORDER
);
677 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
678 wxSL_AUTOTICKS
| wxSL_LABELS
);
679 m_slider
->SetTickFreq(40, 0);
680 (void)new wxStaticBox( panel
, -1, "&Explanation",
681 wxPoint(230,10), wxSize(270,130),
685 // No wrapping text in wxStaticText yet :-(
686 (void)new wxStaticText( panel
, -1,
692 (void)new wxStaticText( panel
, -1,
693 "In order see the gauge (aka progress bar)\n"
694 "control do something you have to drag the\n"
695 "handle of the slider to the right.\n"
697 "This is also supposed to demonstrate how\n"
698 "to use static controls.\n",
703 int initialSpinValue
= -5;
705 s
<< initialSpinValue
;
706 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
708 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
709 m_spinbutton
->SetRange(-10,30);
710 m_spinbutton
->SetValue(initialSpinValue
);
712 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
714 #endif // wxUSE_SPINBTN
717 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
718 m_spinctrl
->SetRange(10,30);
719 m_spinctrl
->SetValue(15);
720 #endif // wxUSE_SPINCTRL
722 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
724 panel
= new wxPanel(m_notebook
);
726 #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
727 wxIcon icon
= wxArtProvider::GetIcon(wxART_INFORMATION
);
728 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
731 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
732 bmpStatic
->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION
));
735 wxBitmap
bitmap( 100, 100 );
737 dc
.SelectObject( bitmap
);
738 dc
.SetPen(*wxGREEN_PEN
);
740 dc
.DrawEllipse(5, 5, 90, 90);
741 dc
.DrawText("Bitmap", 30, 40);
742 dc
.SelectObject( wxNullBitmap
);
744 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
747 // test for masked bitmap display
748 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
751 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
753 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
757 wxBitmap
bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION
)),
758 bmp2(wxArtProvider::GetBitmap(wxART_WARNING
)),
759 bmp3(wxArtProvider::GetBitmap(wxART_QUESTION
));
760 wxBitmapButton
*bmpBtn
= new wxBitmapButton
767 bmpBtn
->SetBitmapSelected(bmp2
);
768 bmpBtn
->SetBitmapFocus(bmp3
);
771 (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
,
772 "&Toggle label", wxPoint(250, 20));
773 #endif // wxUSE_TOGGLEBTN
775 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
776 wxPoint(250, 60), wxDefaultSize
,
777 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
778 m_label
->SetForegroundColour( *wxBLUE
);
780 m_notebook
->AddPage(panel
, "wxBitmapXXX");
782 // layout constraints
783 #if wxUSE_CONSTRAINTS
784 wxLayoutConstraints
*c
;
786 panel
= new wxPanel(m_notebook
);
787 panel
->SetAutoLayout( TRUE
);
789 c
= new wxLayoutConstraints
;
790 c
->top
.SameAs( panel
, wxTop
, 10 );
792 c
->left
.SameAs( panel
, wxLeft
, 10 );
793 c
->width
.PercentOf( panel
, wxWidth
, 40 );
795 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
796 pMyButton
->SetConstraints( c
);
798 c
= new wxLayoutConstraints
;
799 c
->top
.SameAs( panel
, wxTop
, 10 );
800 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
801 c
->right
.SameAs( panel
, wxRight
, 10 );
802 c
->width
.PercentOf( panel
, wxWidth
, 40 );
804 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
805 pMyButton2
->SetConstraints( c
);
807 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
812 panel
= new wxPanel(m_notebook
);
813 panel
->SetAutoLayout( TRUE
);
815 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
817 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
818 sizer
->Add( 20,20, 1 );
819 sizer
->Add( new wxButton(panel
, -1, "Multiline\nbutton" ), 3, wxGROW
|wxALL
, 10 );
821 panel
->SetSizer( sizer
);
823 m_notebook
->AddPage(panel
, "wxSizer");
826 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
830 GetClientSize( &x
, &y
);
832 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
833 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
836 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
838 int selOld
= event
.GetOldSelection();
841 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
842 "page change from taking place - if you select\n"
843 "[No] the current page will stay the third one\n",
845 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
853 *m_text
<< "Notebook selection is being changed from " << selOld
854 << " to " << event
.GetSelection()
855 << " (current page from notebook is "
856 << m_notebook
->GetSelection() << ")\n";
859 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
861 *m_text
<< "Notebook selection is now " << event
.GetSelection()
862 << " (from notebook: " << m_notebook
->GetSelection() << ")\n";
865 void MyPanel::OnTestButton(wxCommandEvent
& event
)
867 wxLogMessage(_T("Button %c clicked."),
868 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
871 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
873 wxLogMessage(_T("Bitmap button clicked."));
876 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
878 static wxColour s_colOld
;
880 // test panel colour changing and propagation to the subcontrols
883 SetBackgroundColour(s_colOld
);
884 s_colOld
= wxNullColour
;
886 m_lbSelectThis
->SetForegroundColour(wxT("red"));
887 m_lbSelectThis
->SetBackgroundColour(wxT("white"));
891 s_colOld
= wxColour(wxT("red"));
892 SetBackgroundColour(wxT("white"));
894 m_lbSelectThis
->SetForegroundColour(wxT("white"));
895 m_lbSelectThis
->SetBackgroundColour(wxT("red"));
898 m_lbSelectThis
->Refresh();
902 void MyPanel::OnListBox( wxCommandEvent
&event
)
904 // GetParent()->Move(100, 100);
906 if (event
.GetInt() == -1)
908 m_text
->AppendText( "ListBox has no selections anymore\n" );
912 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
915 m_text
->AppendText( "ListBox event selection string is: '" );
916 m_text
->AppendText( event
.GetString() );
917 m_text
->AppendText( "'\n" );
918 m_text
->AppendText( "ListBox control selection string is: '" );
919 m_text
->AppendText( listbox
->GetStringSelection() );
920 m_text
->AppendText( "'\n" );
922 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
923 m_text
->AppendText( "ListBox event client data string is: '" );
924 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
925 m_text
->AppendText( obj
->GetData() );
927 m_text
->AppendText( wxString("none") );
929 m_text
->AppendText( "'\n" );
930 m_text
->AppendText( "ListBox control client data string is: '" );
931 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
933 m_text
->AppendText( obj
->GetData() );
935 m_text
->AppendText( wxString("none") );
936 m_text
->AppendText( "'\n" );
939 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
941 m_text
->AppendText( "ListBox double click string is: " );
942 m_text
->AppendText( event
.GetString() );
943 m_text
->AppendText( "\n" );
946 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
948 switch (event
.GetId())
950 case ID_LISTBOX_ENABLE
:
952 m_text
->AppendText("Checkbox clicked.\n");
954 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
956 cb
->SetToolTip( "Click to enable listbox" );
958 cb
->SetToolTip( "Click to disable listbox" );
959 #endif // wxUSE_TOOLTIPS
960 m_listbox
->Enable( event
.GetInt() == 0 );
961 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
962 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
963 m_listboxSorted
->Enable( event
.GetInt() == 0 );
964 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
967 case ID_LISTBOX_SEL_NUM
:
969 m_listbox
->SetSelection( 2 );
970 m_listboxSorted
->SetSelection( 2 );
971 m_lbSelectThis
->WarpPointer( 40, 14 );
974 case ID_LISTBOX_SEL_STR
:
976 m_listbox
->SetStringSelection( "This" );
977 m_listboxSorted
->SetStringSelection( "This" );
978 m_lbSelectNum
->WarpPointer( 40, 14 );
981 case ID_LISTBOX_CLEAR
:
984 m_listboxSorted
->Clear();
987 case ID_LISTBOX_APPEND
:
989 m_listbox
->Append( "Hi!" );
990 m_listboxSorted
->Append( "Hi!" );
993 case ID_LISTBOX_DELETE
:
996 idx
= m_listbox
->GetSelection();
997 if ( idx
!= wxNOT_FOUND
)
998 m_listbox
->Delete( idx
);
999 idx
= m_listboxSorted
->GetSelection();
1000 if ( idx
!= wxNOT_FOUND
)
1001 m_listboxSorted
->Delete( idx
);
1004 case ID_LISTBOX_FONT
:
1006 m_listbox
->SetFont( *wxITALIC_FONT
);
1007 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1008 m_checkbox
->SetFont( *wxITALIC_FONT
);
1015 void MyPanel::OnChoice( wxCommandEvent
&event
)
1017 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1020 m_text
->AppendText( "Choice event selection string is: '" );
1021 m_text
->AppendText( event
.GetString() );
1022 m_text
->AppendText( "'\n" );
1023 m_text
->AppendText( "Choice control selection string is: '" );
1024 m_text
->AppendText( choice
->GetStringSelection() );
1025 m_text
->AppendText( "'\n" );
1027 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1028 m_text
->AppendText( "Choice event client data string is: '" );
1031 m_text
->AppendText( obj
->GetData() );
1033 m_text
->AppendText( wxString("none") );
1035 m_text
->AppendText( "'\n" );
1036 m_text
->AppendText( "Choice control client data string is: '" );
1037 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1040 m_text
->AppendText( obj
->GetData() );
1042 m_text
->AppendText( wxString("none") );
1043 m_text
->AppendText( "'\n" );
1046 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1048 switch (event
.GetId())
1050 case ID_CHOICE_ENABLE
:
1052 m_choice
->Enable( event
.GetInt() == 0 );
1053 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1056 case ID_CHOICE_SEL_NUM
:
1058 m_choice
->SetSelection( 2 );
1059 m_choiceSorted
->SetSelection( 2 );
1062 case ID_CHOICE_SEL_STR
:
1064 m_choice
->SetStringSelection( "This" );
1065 m_choiceSorted
->SetStringSelection( "This" );
1068 case ID_CHOICE_CLEAR
:
1071 m_choiceSorted
->Clear();
1074 case ID_CHOICE_APPEND
:
1076 m_choice
->Append( "Hi!" );
1077 m_choiceSorted
->Append( "Hi!" );
1080 case ID_CHOICE_DELETE
:
1082 int idx
= m_choice
->GetSelection();
1083 if ( idx
!= wxNOT_FOUND
)
1084 m_choice
->Delete( idx
);
1085 idx
= m_choiceSorted
->GetSelection();
1086 if ( idx
!= wxNOT_FOUND
)
1087 m_choiceSorted
->Delete( idx
);
1090 case ID_CHOICE_FONT
:
1092 m_choice
->SetFont( *wxITALIC_FONT
);
1093 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1098 #endif // wxUSE_CHOICE
1100 void MyPanel::OnCombo( wxCommandEvent
&event
)
1102 m_text
->AppendText( "ComboBox event selection string is: " );
1103 m_text
->AppendText( event
.GetString() );
1104 m_text
->AppendText( "\n" );
1105 m_text
->AppendText( "ComboBox control selection string is: " );
1106 m_text
->AppendText( m_combo
->GetStringSelection() );
1107 m_text
->AppendText( "\n" );
1110 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1112 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1113 m_combo
->GetValue().c_str());
1116 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1118 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1119 m_combo
->GetValue().c_str());
1122 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1124 switch (event
.GetId())
1126 case ID_COMBO_ENABLE
:
1128 m_combo
->Enable( event
.GetInt() == 0 );
1131 case ID_COMBO_SEL_NUM
:
1133 m_combo
->SetSelection( 2 );
1136 case ID_COMBO_SEL_STR
:
1138 m_combo
->SetStringSelection( "This" );
1141 case ID_COMBO_CLEAR
:
1146 case ID_COMBO_APPEND
:
1148 m_combo
->Append( "Hi!" );
1151 case ID_COMBO_DELETE
:
1153 int idx
= m_combo
->GetSelection();
1154 m_combo
->Delete( idx
);
1159 m_combo
->SetFont( *wxITALIC_FONT
);
1165 void MyPanel::OnRadio( wxCommandEvent
&event
)
1167 m_text
->AppendText( "RadioBox selection string is: " );
1168 m_text
->AppendText( event
.GetString() );
1169 m_text
->AppendText( "\n" );
1172 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1174 switch (event
.GetId())
1176 case ID_RADIOBOX_ENABLE
:
1178 m_radio
->Enable( event
.GetInt() == 0 );
1181 case ID_RADIOBOX_SEL_NUM
:
1183 m_radio
->SetSelection( 2 );
1186 case ID_RADIOBOX_SEL_STR
:
1188 m_radio
->SetStringSelection( "This" );
1191 case ID_RADIOBOX_FONT
:
1193 m_radio
->SetFont( *wxITALIC_FONT
);
1199 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1201 m_fontButton
->SetFont( *wxITALIC_FONT
);
1202 m_text
->SetFont( *wxITALIC_FONT
);
1205 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1207 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1211 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1213 m_gauge
->SetValue( m_slider
->GetValue() );
1214 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1219 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1222 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1223 m_spinctrl
->GetValue(), event
.GetInt());
1224 m_text
->AppendText(s
);
1227 #endif // wxUSE_SPINCTRL
1230 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1233 value
.Printf( _T("Spin control up: current = %d\n"),
1234 m_spinbutton
->GetValue());
1236 if ( m_spinbutton
->GetValue() > 17 )
1238 value
+= _T("Preventing the spin button from going above 17.\n");
1243 m_text
->AppendText(value
);
1246 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1249 value
.Printf( _T("Spin control down: current = %d\n"),
1250 m_spinbutton
->GetValue());
1252 if ( m_spinbutton
->GetValue() < -17 )
1254 value
+= _T("Preventing the spin button from going below -17.\n");
1259 m_text
->AppendText(value
);
1262 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1265 value
.Printf( _T("%d"), event
.GetPosition() );
1266 m_spintext
->SetValue( value
);
1268 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1269 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1270 m_spinbutton
->GetValue());
1272 m_text
->AppendText(value
);
1275 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1277 event
.Enable( m_spinbutton
->GetValue() > 0 );
1280 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1282 int max
= m_spinbutton
->GetValue();
1286 wxLogError(_T("You must set positive range!"));
1290 wxProgressDialog
dialog("Progress dialog example",
1291 "An informative message",
1298 wxPD_ESTIMATED_TIME
|
1299 wxPD_REMAINING_TIME
);
1303 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1308 cont
= dialog
.Update(i
, "That's all, folks!");
1310 else if ( i
== max
/ 2 )
1312 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1316 cont
= dialog
.Update(i
);
1322 *m_text
<< "Progress dialog aborted!\n";
1326 *m_text
<< "Countdown from " << max
<< " finished.\n";
1330 #endif // wxUSE_SPINBTN
1334 //wxLog::RemoveTraceMask(_T("focus"));
1335 delete wxLog::SetActiveTarget(m_logTargetOld
);
1337 delete m_notebook
->GetImageList();
1340 //----------------------------------------------------------------------
1342 //----------------------------------------------------------------------
1344 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1345 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1346 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1347 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1349 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1350 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1351 #endif // wxUSE_TOOLTIPS
1353 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1355 EVT_SIZE(MyFrame::OnSize
)
1356 EVT_MOVE(MyFrame::OnMove
)
1358 EVT_IDLE(MyFrame::OnIdle
)
1361 MyFrame::MyFrame(const char *title
, int x
, int y
)
1362 : wxFrame(NULL
, -1, title
, wxPoint(x
, y
), wxSize(500, 430))
1365 // The wxICON() macros loads an icon from a resource under Windows
1366 // and uses an #included XPM image under GTK+ and Motif
1368 SetIcon( wxICON(mondrian
) );
1370 wxMenu
*file_menu
= new wxMenu
;
1372 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
1373 file_menu
->AppendSeparator();
1374 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
1375 file_menu
->AppendSeparator();
1376 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
1378 wxMenuBar
*menu_bar
= new wxMenuBar
;
1379 menu_bar
->Append(file_menu
, "&File");
1382 wxMenu
*tooltip_menu
= new wxMenu
;
1383 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
1384 tooltip_menu
->AppendSeparator();
1385 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
1386 "enable/disable tooltips", TRUE
);
1387 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
1388 menu_bar
->Append(tooltip_menu
, "&Tooltips");
1389 #endif // wxUSE_TOOLTIPS
1391 wxMenu
*panel_menu
= new wxMenu
;
1392 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
1393 "Enable/disable all panel controls", TRUE
);
1394 menu_bar
->Append(panel_menu
, "&Panel");
1396 SetMenuBar(menu_bar
);
1400 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1402 SetSizeHints( 500, 425 );
1405 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1410 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1414 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1418 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1420 m_panel
->m_text
->Clear();
1424 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1426 static long s_delay
= 5000;
1429 delay
.Printf( _T("%ld"), s_delay
);
1431 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1432 "Set tooltip delay",
1436 return; // cancelled
1438 wxSscanf(delay
, _T("%ld"), &s_delay
);
1440 wxToolTip::SetDelay(s_delay
);
1442 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1445 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1447 static bool s_enabled
= TRUE
;
1449 s_enabled
= !s_enabled
;
1451 wxToolTip::Enable(s_enabled
);
1453 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1457 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1459 static bool s_enable
= TRUE
;
1461 s_enable
= !s_enable
;
1462 m_panel
->Enable(s_enable
);
1465 void MyFrame::OnMove( wxMoveEvent
& event
)
1467 UpdateStatusBar(event
.GetPosition(), GetSize());
1472 void MyFrame::OnSize( wxSizeEvent
& event
)
1474 UpdateStatusBar(GetPosition(), event
.GetSize());
1479 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1481 // track the window which has the focus in the status bar
1482 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1483 wxWindow
*focus
= wxWindow::FindFocus();
1484 if ( focus
&& (focus
!= s_windowFocus
) )
1486 s_windowFocus
= focus
;
1491 _T("Focus: %s, HWND = %08x"),
1495 s_windowFocus
->GetClassInfo()->GetClassName()
1497 , s_windowFocus
->GetHWND()
1505 void MyComboBox::OnChar(wxKeyEvent
& event
)
1507 wxLogMessage(_T("MyComboBox::OnChar"));
1509 if ( event
.KeyCode() == 'w' )
1510 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1515 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1517 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1519 if ( event
.KeyCode() == 'w' )
1520 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1525 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1527 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1532 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
)
1534 size_t count
= control
->GetCount();
1535 for ( size_t n
= 0; n
< count
; n
++ )
1538 s
.Printf(wxT("%s client data for '%s'"),
1539 name
, control
->GetString(n
).c_str());
1541 control
->SetClientObject(n
, new wxStringClientData(s
));
1545 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
)
1547 size_t count
= control
->GetCount();
1548 for ( size_t n
= 0; n
< count
; n
++ )
1551 s
.Printf(wxT("%s client data for '%s'"),
1552 name
, control
->GetString(n
).c_str());
1554 control
->SetClientObject(n
, new wxStringClientData(s
));