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
) )
489 m_listboxSorted
= NULL
;
492 m_choiceSorted
= NULL
;
500 m_lbSelectNum
= NULL
;
501 m_lbSelectThis
= NULL
;
504 m_btnProgress
= NULL
;
505 #endif // wxUSE_SPINBTN
508 #endif // wxUSE_SPINCTRL
515 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
516 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
517 m_text
->SetBackgroundColour(wxT("wheat"));
520 wxLog::AddTraceMask(_T("focus"));
521 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
523 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
538 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
541 // fill the image list
542 wxImageList
*imagelist
= new wxImageList(32, 32);
544 imagelist
-> Add( wxBitmap( list_xpm
));
545 imagelist
-> Add( wxBitmap( choice_xpm
));
546 imagelist
-> Add( wxBitmap( combo_xpm
));
547 imagelist
-> Add( wxBitmap( text_xpm
));
548 imagelist
-> Add( wxBitmap( radio_xpm
));
549 imagelist
-> Add( wxBitmap( gauge_xpm
));
550 m_notebook
->SetImageList(imagelist
);
551 #elif defined(__WXMSW__)
552 // load images from resources
555 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
557 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
559 static const char *s_iconNames
[Image_Max
] =
561 "list", "choice", "combo", "text", "radio", "gauge"
564 for ( size_t n
= 0; n
< Image_Max
; n
++ )
566 wxBitmap
bmp(s_iconNames
[n
]);
567 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
569 wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."),
574 m_notebook
->SetImageList(imagelist
);
578 #define Image_List -1
579 #define Image_Choice -1
580 #define Image_Combo -1
581 #define Image_Text -1
582 #define Image_Radio -1
583 #define Image_Gauge -1
588 wxPanel
*panel
= new wxPanel(m_notebook
);
589 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
590 wxPoint(10,10), wxSize(120,70),
591 5, choices
, wxLB_ALWAYS_SB
);
592 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
593 wxPoint(10,90), wxSize(120,70),
594 5, choices
, wxLB_SORT
);
596 SetListboxClientData(wxT("listbox"), m_listbox
);
597 SetListboxClientData(wxT("listbox"), m_listboxSorted
);
599 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
601 m_listbox
->SetToolTip( "This is a list box" );
602 #endif // wxUSE_TOOLTIPS
604 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
605 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
606 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
607 (void)new MyButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
608 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
609 wxButton
*button
= new MyButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
611 button
->SetDefault();
613 button
->SetForegroundColour(*wxBLUE
);
616 button
->SetToolTip( "Press here to set italic font" );
617 #endif // wxUSE_TOOLTIPS
619 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
620 m_checkbox
->SetValue(FALSE
);
622 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
623 #endif // wxUSE_TOOLTIPS
624 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
626 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
627 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
630 panel
= new wxPanel(m_notebook
);
631 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
632 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
633 5, choices
, wxCB_SORT
);
635 SetChoiceClientData(wxT("choice"), m_choice
);
636 SetChoiceClientData(wxT("choice"), m_choiceSorted
);
638 m_choice
->SetSelection(2);
639 m_choice
->SetBackgroundColour( wxT("red") );
640 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
641 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
642 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
643 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
644 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
645 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
646 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
648 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
649 #endif // wxUSE_CHOICE
651 panel
= new wxPanel(m_notebook
);
652 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
653 wxPoint(5, 5), wxSize(150, 100));
654 m_combo
= new MyComboBox( panel
, ID_COMBO
, "This",
655 wxPoint(20,25), wxSize(120, -1),
657 /* wxCB_READONLY | */ wxPROCESS_ENTER
);
659 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
660 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
661 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
662 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
663 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
664 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
665 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
666 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
668 wxString choices2
[] =
672 "Fourth", "Fifth", "Sixth",
673 "Seventh", "Eighth", "Nineth", "Tenth" */
676 panel
= new wxPanel(m_notebook
);
677 (void)new MyRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
678 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
681 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
682 m_radio
->SetToolTip("Ever seen a radiobox?");
683 #endif // wxUSE_TOOLTIPS
685 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
686 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
687 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
688 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
689 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
690 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
691 rb
->SetValue( FALSE
);
692 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
693 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
695 panel
= new wxPanel(m_notebook
);
696 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
697 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
698 m_gauge
->SetBackgroundColour(*wxGREEN
);
699 m_gauge
->SetForegroundColour(*wxRED
);
700 m_gaugeVert
= new wxGauge( panel
, -1, 100,
701 wxPoint(195,35), wxSize(30, 90),
702 wxGA_VERTICAL
| wxGA_SMOOTH
| wxNO_BORDER
);
703 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
704 wxSL_AUTOTICKS
| wxSL_LABELS
);
705 m_slider
->SetTickFreq(40, 0);
706 (void)new wxStaticBox( panel
, -1, "&Explanation",
707 wxPoint(230,10), wxSize(270,130),
711 // No wrapping text in wxStaticText yet :-(
712 (void)new wxStaticText( panel
, -1,
718 (void)new wxStaticText( panel
, -1,
719 "In order see the gauge (aka progress bar)\n"
720 "control do something you have to drag the\n"
721 "handle of the slider to the right.\n"
723 "This is also supposed to demonstrate how\n"
724 "to use static controls.\n",
729 int initialSpinValue
= -5;
731 s
<< initialSpinValue
;
732 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
734 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
735 m_spinbutton
->SetRange(-40,30);
736 m_spinbutton
->SetValue(initialSpinValue
);
738 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
740 #endif // wxUSE_SPINBTN
743 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
744 m_spinctrl
->SetRange(10,30);
745 m_spinctrl
->SetValue(15);
746 #endif // wxUSE_SPINCTRL
748 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
750 panel
= new wxPanel(m_notebook
);
752 #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
753 wxIcon icon
= wxArtProvider::GetIcon(wxART_INFORMATION
);
754 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
757 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
758 bmpStatic
->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION
));
761 wxBitmap
bitmap( 100, 100 );
763 dc
.SelectObject( bitmap
);
764 dc
.SetPen(*wxGREEN_PEN
);
766 dc
.DrawEllipse(5, 5, 90, 90);
767 dc
.DrawText("Bitmap", 30, 40);
768 dc
.SelectObject( wxNullBitmap
);
770 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
773 // test for masked bitmap display
774 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
777 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
779 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
783 wxBitmap
bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION
)),
784 bmp2(wxArtProvider::GetBitmap(wxART_WARNING
)),
785 bmp3(wxArtProvider::GetBitmap(wxART_QUESTION
));
786 wxBitmapButton
*bmpBtn
= new wxBitmapButton
793 bmpBtn
->SetBitmapSelected(bmp2
);
794 bmpBtn
->SetBitmapFocus(bmp3
);
797 (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
,
798 "&Toggle label", wxPoint(250, 20));
799 #endif // wxUSE_TOGGLEBTN
801 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
802 wxPoint(250, 60), wxDefaultSize
,
803 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
804 m_label
->SetForegroundColour( *wxBLUE
);
806 m_notebook
->AddPage(panel
, "wxBitmapXXX");
808 // layout constraints
809 #if wxUSE_CONSTRAINTS
810 wxLayoutConstraints
*c
;
812 panel
= new wxPanel(m_notebook
);
813 panel
->SetAutoLayout( TRUE
);
815 c
= new wxLayoutConstraints
;
816 c
->top
.SameAs( panel
, wxTop
, 10 );
818 c
->left
.SameAs( panel
, wxLeft
, 10 );
819 c
->width
.PercentOf( panel
, wxWidth
, 40 );
821 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
822 pMyButton
->SetConstraints( c
);
824 c
= new wxLayoutConstraints
;
825 c
->top
.SameAs( panel
, wxTop
, 10 );
826 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
827 c
->right
.SameAs( panel
, wxRight
, 10 );
828 c
->width
.PercentOf( panel
, wxWidth
, 40 );
830 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
831 pMyButton2
->SetConstraints( c
);
833 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
838 panel
= new wxPanel(m_notebook
);
839 panel
->SetAutoLayout( TRUE
);
841 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
843 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
844 sizer
->Add( 20,20, 1 );
845 sizer
->Add( new wxButton(panel
, -1, "Multiline\nbutton" ), 3, wxGROW
|wxALL
, 10 );
847 panel
->SetSizer( sizer
);
849 m_notebook
->AddPage(panel
, "wxSizer");
852 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
856 GetClientSize( &x
, &y
);
858 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
859 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
862 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
864 int selOld
= event
.GetOldSelection();
867 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
868 "page change from taking place - if you select\n"
869 "[No] the current page will stay the third one\n",
871 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
879 *m_text
<< "Notebook selection is being changed from " << selOld
880 << " to " << event
.GetSelection()
881 << " (current page from notebook is "
882 << m_notebook
->GetSelection() << ")\n";
885 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
887 *m_text
<< "Notebook selection is now " << event
.GetSelection()
888 << " (from notebook: " << m_notebook
->GetSelection() << ")\n";
891 void MyPanel::OnTestButton(wxCommandEvent
& event
)
893 wxLogMessage(_T("Button %c clicked."),
894 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
897 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
899 wxLogMessage(_T("Bitmap button clicked."));
902 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
904 static wxColour s_colOld
;
906 // test panel colour changing and propagation to the subcontrols
909 SetBackgroundColour(s_colOld
);
910 s_colOld
= wxNullColour
;
912 m_lbSelectThis
->SetForegroundColour(wxT("red"));
913 m_lbSelectThis
->SetBackgroundColour(wxT("white"));
917 s_colOld
= wxColour(wxT("red"));
918 SetBackgroundColour(wxT("white"));
920 m_lbSelectThis
->SetForegroundColour(wxT("white"));
921 m_lbSelectThis
->SetBackgroundColour(wxT("red"));
924 m_lbSelectThis
->Refresh();
928 void MyPanel::OnListBox( wxCommandEvent
&event
)
930 // GetParent()->Move(100, 100);
932 if (event
.GetInt() == -1)
934 m_text
->AppendText( "ListBox has no selections anymore\n" );
938 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
941 m_text
->AppendText( "ListBox event selection string is: '" );
942 m_text
->AppendText( event
.GetString() );
943 m_text
->AppendText( "'\n" );
944 m_text
->AppendText( "ListBox control selection string is: '" );
945 m_text
->AppendText( listbox
->GetStringSelection() );
946 m_text
->AppendText( "'\n" );
948 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
949 m_text
->AppendText( "ListBox event client data string is: '" );
950 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
951 m_text
->AppendText( obj
->GetData() );
953 m_text
->AppendText( wxString("none") );
955 m_text
->AppendText( "'\n" );
956 m_text
->AppendText( "ListBox control client data string is: '" );
957 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
959 m_text
->AppendText( obj
->GetData() );
961 m_text
->AppendText( wxString("none") );
962 m_text
->AppendText( "'\n" );
965 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
967 m_text
->AppendText( "ListBox double click string is: " );
968 m_text
->AppendText( event
.GetString() );
969 m_text
->AppendText( "\n" );
972 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
974 switch (event
.GetId())
976 case ID_LISTBOX_ENABLE
:
978 m_text
->AppendText("Checkbox clicked.\n");
980 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
982 cb
->SetToolTip( "Click to enable listbox" );
984 cb
->SetToolTip( "Click to disable listbox" );
985 #endif // wxUSE_TOOLTIPS
986 m_listbox
->Enable( event
.GetInt() == 0 );
987 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
988 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
989 m_listboxSorted
->Enable( event
.GetInt() == 0 );
990 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
993 case ID_LISTBOX_SEL_NUM
:
995 m_listbox
->SetSelection( 2 );
996 m_listboxSorted
->SetSelection( 2 );
997 m_lbSelectThis
->WarpPointer( 40, 14 );
1000 case ID_LISTBOX_SEL_STR
:
1002 m_listbox
->SetStringSelection( "This" );
1003 m_listboxSorted
->SetStringSelection( "This" );
1004 m_lbSelectNum
->WarpPointer( 40, 14 );
1007 case ID_LISTBOX_CLEAR
:
1010 m_listboxSorted
->Clear();
1013 case ID_LISTBOX_APPEND
:
1015 m_listbox
->Append( "Hi!" );
1016 m_listboxSorted
->Append( "Hi!" );
1019 case ID_LISTBOX_DELETE
:
1022 idx
= m_listbox
->GetSelection();
1023 if ( idx
!= wxNOT_FOUND
)
1024 m_listbox
->Delete( idx
);
1025 idx
= m_listboxSorted
->GetSelection();
1026 if ( idx
!= wxNOT_FOUND
)
1027 m_listboxSorted
->Delete( idx
);
1030 case ID_LISTBOX_FONT
:
1032 m_listbox
->SetFont( *wxITALIC_FONT
);
1033 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1034 m_checkbox
->SetFont( *wxITALIC_FONT
);
1041 void MyPanel::OnChoice( wxCommandEvent
&event
)
1043 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1046 m_text
->AppendText( "Choice event selection string is: '" );
1047 m_text
->AppendText( event
.GetString() );
1048 m_text
->AppendText( "'\n" );
1049 m_text
->AppendText( "Choice control selection string is: '" );
1050 m_text
->AppendText( choice
->GetStringSelection() );
1051 m_text
->AppendText( "'\n" );
1053 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1054 m_text
->AppendText( "Choice event client data string is: '" );
1057 m_text
->AppendText( obj
->GetData() );
1059 m_text
->AppendText( wxString("none") );
1061 m_text
->AppendText( "'\n" );
1062 m_text
->AppendText( "Choice control client data string is: '" );
1063 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1066 m_text
->AppendText( obj
->GetData() );
1068 m_text
->AppendText( wxString("none") );
1069 m_text
->AppendText( "'\n" );
1072 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1074 switch (event
.GetId())
1076 case ID_CHOICE_ENABLE
:
1078 m_choice
->Enable( event
.GetInt() == 0 );
1079 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1082 case ID_CHOICE_SEL_NUM
:
1084 m_choice
->SetSelection( 2 );
1085 m_choiceSorted
->SetSelection( 2 );
1088 case ID_CHOICE_SEL_STR
:
1090 m_choice
->SetStringSelection( "This" );
1091 m_choiceSorted
->SetStringSelection( "This" );
1094 case ID_CHOICE_CLEAR
:
1097 m_choiceSorted
->Clear();
1100 case ID_CHOICE_APPEND
:
1102 m_choice
->Append( "Hi!" );
1103 m_choiceSorted
->Append( "Hi!" );
1106 case ID_CHOICE_DELETE
:
1108 int idx
= m_choice
->GetSelection();
1109 if ( idx
!= wxNOT_FOUND
)
1110 m_choice
->Delete( idx
);
1111 idx
= m_choiceSorted
->GetSelection();
1112 if ( idx
!= wxNOT_FOUND
)
1113 m_choiceSorted
->Delete( idx
);
1116 case ID_CHOICE_FONT
:
1118 m_choice
->SetFont( *wxITALIC_FONT
);
1119 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1124 #endif // wxUSE_CHOICE
1126 void MyPanel::OnCombo( wxCommandEvent
&event
)
1128 m_text
->AppendText( "ComboBox event selection string is: " );
1129 m_text
->AppendText( event
.GetString() );
1130 m_text
->AppendText( "\n" );
1131 m_text
->AppendText( "ComboBox control selection string is: " );
1132 m_text
->AppendText( m_combo
->GetStringSelection() );
1133 m_text
->AppendText( "\n" );
1136 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1138 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1139 m_combo
->GetValue().c_str());
1142 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1144 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1145 m_combo
->GetValue().c_str());
1148 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1150 switch (event
.GetId())
1152 case ID_COMBO_ENABLE
:
1154 m_combo
->Enable( event
.GetInt() == 0 );
1157 case ID_COMBO_SEL_NUM
:
1159 m_combo
->SetSelection( 2 );
1162 case ID_COMBO_SEL_STR
:
1164 m_combo
->SetStringSelection( "This" );
1167 case ID_COMBO_CLEAR
:
1172 case ID_COMBO_APPEND
:
1174 m_combo
->Append( "Hi!" );
1177 case ID_COMBO_DELETE
:
1179 int idx
= m_combo
->GetSelection();
1180 m_combo
->Delete( idx
);
1185 m_combo
->SetFont( *wxITALIC_FONT
);
1191 void MyPanel::OnRadio( wxCommandEvent
&event
)
1193 m_text
->AppendText( "RadioBox selection string is: " );
1194 m_text
->AppendText( event
.GetString() );
1195 m_text
->AppendText( "\n" );
1198 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1200 switch (event
.GetId())
1202 case ID_RADIOBOX_ENABLE
:
1204 m_radio
->Enable( event
.GetInt() == 0 );
1207 case ID_RADIOBOX_SEL_NUM
:
1209 m_radio
->SetSelection( 2 );
1212 case ID_RADIOBOX_SEL_STR
:
1214 m_radio
->SetStringSelection( "This" );
1217 case ID_RADIOBOX_FONT
:
1219 m_radio
->SetFont( *wxITALIC_FONT
);
1225 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1227 m_fontButton
->SetFont( *wxITALIC_FONT
);
1228 m_text
->SetFont( *wxITALIC_FONT
);
1231 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1233 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1237 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1239 m_gauge
->SetValue( m_slider
->GetValue() );
1240 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1245 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1250 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1251 m_spinctrl
->GetValue(), event
.GetInt());
1252 m_text
->AppendText(s
);
1255 #endif // wxUSE_SPINCTRL
1258 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1261 value
.Printf( _T("Spin control up: current = %d\n"),
1262 m_spinbutton
->GetValue());
1264 if ( event
.GetPosition() > 17 )
1266 value
+= _T("Preventing the spin button from going above 17.\n");
1271 m_text
->AppendText(value
);
1274 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1277 value
.Printf( _T("Spin control down: current = %d\n"),
1278 m_spinbutton
->GetValue());
1280 if ( event
.GetPosition() < -17 )
1282 value
+= _T("Preventing the spin button from going below -17.\n");
1287 m_text
->AppendText(value
);
1290 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1293 value
.Printf( _T("%d"), event
.GetPosition() );
1294 m_spintext
->SetValue( value
);
1296 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1297 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1298 m_spinbutton
->GetValue());
1300 m_text
->AppendText(value
);
1303 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1305 event
.Enable( m_spinbutton
->GetValue() > 0 );
1308 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1310 int max
= m_spinbutton
->GetValue();
1314 wxLogError(_T("You must set positive range!"));
1318 wxProgressDialog
dialog("Progress dialog example",
1319 "An informative message",
1326 wxPD_ESTIMATED_TIME
|
1327 wxPD_REMAINING_TIME
);
1331 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1336 cont
= dialog
.Update(i
, "That's all, folks!");
1338 else if ( i
== max
/ 2 )
1340 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1344 cont
= dialog
.Update(i
);
1350 *m_text
<< "Progress dialog aborted!\n";
1354 *m_text
<< "Countdown from " << max
<< " finished.\n";
1358 #endif // wxUSE_SPINBTN
1362 //wxLog::RemoveTraceMask(_T("focus"));
1363 delete wxLog::SetActiveTarget(m_logTargetOld
);
1365 delete m_notebook
->GetImageList();
1368 //----------------------------------------------------------------------
1370 //----------------------------------------------------------------------
1372 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1373 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1374 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1375 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1377 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1378 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1379 #endif // wxUSE_TOOLTIPS
1381 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1383 EVT_SIZE(MyFrame::OnSize
)
1384 EVT_MOVE(MyFrame::OnMove
)
1386 EVT_IDLE(MyFrame::OnIdle
)
1389 MyFrame::MyFrame(const char *title
, int x
, int y
)
1390 : wxFrame(NULL
, -1, title
, wxPoint(x
, y
), wxSize(500, 430))
1393 // The wxICON() macros loads an icon from a resource under Windows
1394 // and uses an #included XPM image under GTK+ and Motif
1396 SetIcon( wxICON(mondrian
) );
1398 wxMenu
*file_menu
= new wxMenu
;
1400 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
1401 file_menu
->AppendSeparator();
1402 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
1403 file_menu
->AppendSeparator();
1404 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
1406 wxMenuBar
*menu_bar
= new wxMenuBar
;
1407 menu_bar
->Append(file_menu
, "&File");
1410 wxMenu
*tooltip_menu
= new wxMenu
;
1411 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
1412 tooltip_menu
->AppendSeparator();
1413 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
1414 "enable/disable tooltips", TRUE
);
1415 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
1416 menu_bar
->Append(tooltip_menu
, "&Tooltips");
1417 #endif // wxUSE_TOOLTIPS
1419 wxMenu
*panel_menu
= new wxMenu
;
1420 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
1421 "Enable/disable all panel controls", TRUE
);
1422 menu_bar
->Append(panel_menu
, "&Panel");
1424 SetMenuBar(menu_bar
);
1428 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1430 SetSizeHints( 500, 425 );
1433 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1438 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1442 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1446 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1448 m_panel
->m_text
->Clear();
1452 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1454 static long s_delay
= 5000;
1457 delay
.Printf( _T("%ld"), s_delay
);
1459 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1460 "Set tooltip delay",
1464 return; // cancelled
1466 wxSscanf(delay
, _T("%ld"), &s_delay
);
1468 wxToolTip::SetDelay(s_delay
);
1470 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1473 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1475 static bool s_enabled
= TRUE
;
1477 s_enabled
= !s_enabled
;
1479 wxToolTip::Enable(s_enabled
);
1481 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1485 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1487 static bool s_enable
= TRUE
;
1489 s_enable
= !s_enable
;
1490 m_panel
->Enable(s_enable
);
1493 void MyFrame::OnMove( wxMoveEvent
& event
)
1495 UpdateStatusBar(event
.GetPosition(), GetSize());
1500 void MyFrame::OnSize( wxSizeEvent
& event
)
1502 UpdateStatusBar(GetPosition(), event
.GetSize());
1507 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1509 // track the window which has the focus in the status bar
1510 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1511 wxWindow
*focus
= wxWindow::FindFocus();
1512 if ( focus
&& (focus
!= s_windowFocus
) )
1514 s_windowFocus
= focus
;
1519 _T("Focus: %s, HWND = %08x"),
1523 s_windowFocus
->GetClassInfo()->GetClassName()
1525 , s_windowFocus
->GetHWND()
1533 void MyComboBox::OnChar(wxKeyEvent
& event
)
1535 wxLogMessage(_T("MyComboBox::OnChar"));
1537 if ( event
.KeyCode() == 'w' )
1538 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1543 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1545 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1547 if ( event
.KeyCode() == 'w' )
1548 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1553 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1555 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1560 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
)
1562 size_t count
= control
->GetCount();
1563 for ( size_t n
= 0; n
< count
; n
++ )
1566 s
.Printf(wxT("%s client data for '%s'"),
1567 name
, control
->GetString(n
).c_str());
1569 control
->SetClientObject(n
, new wxStringClientData(s
));
1573 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
)
1575 size_t count
= control
->GetCount();
1576 for ( size_t n
= 0; n
< count
; n
++ )
1579 s
.Printf(wxT("%s client data for '%s'"),
1580 name
, control
->GetString(n
).c_str());
1582 control
->SetClientObject(n
, new wxStringClientData(s
));