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"
34 #include "wx/tooltip.h"
37 #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__)
42 #include "mondrian.xpm"
43 #include "icons/choice.xpm"
44 #include "icons/combo.xpm"
45 #include "icons/list.xpm"
46 #include "icons/radio.xpm"
47 #include "icons/text.xpm"
48 #include "icons/gauge.xpm"
52 // Win16 doesn't have them
56 #define wxUSE_SPINBTN 0
59 #define wxUSE_SPINBTN 1
63 #include "wx/progdlg.h"
66 #include "wx/spinctrl.h"
67 #endif // wxUSE_SPINCTRL
69 //----------------------------------------------------------------------
71 //----------------------------------------------------------------------
73 class MyApp
: public wxApp
79 class MyPanel
: public wxPanel
82 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
85 void OnSize( wxSizeEvent
& event
);
86 void OnListBox( wxCommandEvent
&event
);
87 void OnListBoxDoubleClick( wxCommandEvent
&event
);
88 void OnListBoxButtons( wxCommandEvent
&event
);
90 void OnChoice( wxCommandEvent
&event
);
91 void OnChoiceButtons( wxCommandEvent
&event
);
93 void OnCombo( wxCommandEvent
&event
);
94 void OnComboTextChanged( wxCommandEvent
&event
);
95 void OnComboTextEnter( wxCommandEvent
&event
);
96 void OnComboButtons( wxCommandEvent
&event
);
97 void OnRadio( wxCommandEvent
&event
);
98 void OnRadioButtons( wxCommandEvent
&event
);
99 void OnSetFont( wxCommandEvent
&event
);
100 void OnPageChanged( wxNotebookEvent
&event
);
101 void OnPageChanging( wxNotebookEvent
&event
);
102 void OnSliderUpdate( wxCommandEvent
&event
);
103 void OnUpdateLabel( wxCommandEvent
&event
);
105 void OnSpinUp( wxSpinEvent
&event
);
106 void OnSpinDown( wxSpinEvent
&event
);
107 void OnSpinUpdate( wxSpinEvent
&event
);
108 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
109 void OnShowProgress( wxCommandEvent
&event
);
110 #endif // wxUSE_SPINBTN
113 void OnSpinCtrl(wxSpinEvent
& event
);
114 #endif // wxUSE_SPINCTRL
116 void OnEnableAll(wxCommandEvent
& event
);
117 void OnChangeColour(wxCommandEvent
& event
);
118 void OnTestButton(wxCommandEvent
& event
);
119 void OnBmpButton(wxCommandEvent
& event
);
121 wxListBox
*m_listbox
,
132 wxButton
*m_fontButton
;
133 wxButton
*m_lbSelectNum
;
134 wxButton
*m_lbSelectThis
;
136 wxSpinButton
*m_spinbutton
;
137 wxButton
*m_btnProgress
;
138 #endif // wxUSE_SPINBTN
141 wxSpinCtrl
*m_spinctrl
;
142 #endif // wxUSE_SPINCTRL
144 wxTextCtrl
*m_spintext
;
145 wxCheckBox
*m_checkbox
;
148 wxNotebook
*m_notebook
;
150 wxStaticText
*m_label
;
153 wxLog
*m_logTargetOld
;
155 DECLARE_EVENT_TABLE()
158 class MyFrame
: public wxFrame
161 MyFrame(const char *title
, int x
, int y
);
163 void OnQuit(wxCommandEvent
& event
);
164 void OnAbout(wxCommandEvent
& event
);
165 void OnClearLog(wxCommandEvent
& event
);
168 void OnSetTooltipDelay(wxCommandEvent
& event
);
169 void OnToggleTooltips(wxCommandEvent
& event
);
170 #endif // wxUSE_TOOLTIPS
172 void OnEnableAll(wxCommandEvent
& event
);
174 void OnIdle( wxIdleEvent
& event
);
175 void OnSize( wxSizeEvent
& event
);
176 void OnMove( wxMoveEvent
& event
);
178 MyPanel
*GetPanel() const { return m_panel
; }
181 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
183 if ( m_frameStatusBar
)
186 wxSize sizeCl
= GetClientSize();
187 msg
.Printf(_("pos=(%d, %d), size=%dx%d (client=%dx%d)"),
191 SetStatusText(msg
, 1);
197 DECLARE_EVENT_TABLE()
200 // a button which intercepts double clicks (for testing...)
201 class MyButton
: public wxButton
204 MyButton(wxWindow
*parent
,
206 const wxString
& label
= wxEmptyString
,
207 const wxPoint
& pos
= wxDefaultPosition
,
208 const wxSize
& size
= wxDefaultSize
)
209 : wxButton(parent
, id
, label
, pos
, size
)
213 void OnDClick(wxMouseEvent
& event
)
215 wxLogMessage(_T("MyButton::OnDClick"));
221 DECLARE_EVENT_TABLE()
224 // a combo which intercepts chars (to test Windows behaviour)
225 class MyComboBox
: public wxComboBox
228 MyComboBox(wxWindow
*parent
, wxWindowID id
,
229 const wxString
& value
= wxEmptyString
,
230 const wxPoint
& pos
= wxDefaultPosition
,
231 const wxSize
& size
= wxDefaultSize
,
232 int n
= 0, const wxString choices
[] = NULL
,
234 const wxValidator
& validator
= wxDefaultValidator
,
235 const wxString
& name
= wxComboBoxNameStr
)
236 : wxComboBox(parent
, id
, value
, pos
, size
, n
, choices
, style
,
240 void OnChar(wxKeyEvent
& event
);
241 void OnKeyDown(wxKeyEvent
& event
);
242 void OnKeyUp(wxKeyEvent
& event
);
243 void OnFocusGot(wxFocusEvent
& event
)
245 wxLogMessage(_T("MyComboBox::OnFocusGot"));
251 DECLARE_EVENT_TABLE()
254 // a radiobox which handles focus set/kill (for testing)
255 class MyRadioBox
: public wxRadioBox
258 MyRadioBox(wxWindow
*parent
,
260 const wxString
& title
= wxEmptyString
,
261 const wxPoint
& pos
= wxDefaultPosition
,
262 const wxSize
& size
= wxDefaultSize
,
263 int n
= 0, const wxString choices
[] = NULL
,
265 long style
= wxRA_HORIZONTAL
,
266 const wxValidator
& validator
= wxDefaultValidator
,
267 const wxString
& name
= wxRadioBoxNameStr
)
268 : wxRadioBox(parent
, id
, title
, pos
, size
, n
, choices
, majorDim
,
269 style
, validator
, name
) { }
272 void OnFocusGot(wxFocusEvent
& event
)
274 wxLogMessage(_T("MyRadioBox::OnFocusGot"));
279 void OnFocusLost(wxFocusEvent
& event
)
281 wxLogMessage(_T("MyRadioBox::OnFocusLost"));
287 DECLARE_EVENT_TABLE()
290 //----------------------------------------------------------------------
292 //----------------------------------------------------------------------
294 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
);
295 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
);
299 //----------------------------------------------------------------------
301 //----------------------------------------------------------------------
311 CONTROLS_SET_TOOLTIP_DELAY
= 200,
312 CONTROLS_ENABLE_TOOLTIPS
,
320 // use standard command line handling:
321 if ( !wxApp::OnInit() )
324 // parse the cmd line
329 wxSscanf(wxString(argv
[1]), wxT("%d"), &x
);
330 wxSscanf(wxString(argv
[2]), wxT("%d"), &y
);
333 // Create the main frame window
334 MyFrame
*frame
= new MyFrame("Controls wxWindows App", x
, y
);
340 //----------------------------------------------------------------------
342 //----------------------------------------------------------------------
344 const int ID_NOTEBOOK
= 1000;
346 const int ID_LISTBOX
= 130;
347 const int ID_LISTBOX_SEL_NUM
= 131;
348 const int ID_LISTBOX_SEL_STR
= 132;
349 const int ID_LISTBOX_CLEAR
= 133;
350 const int ID_LISTBOX_APPEND
= 134;
351 const int ID_LISTBOX_DELETE
= 135;
352 const int ID_LISTBOX_FONT
= 136;
353 const int ID_LISTBOX_ENABLE
= 137;
354 const int ID_LISTBOX_SORTED
= 138;
356 const int ID_CHOICE
= 120;
357 const int ID_CHOICE_SEL_NUM
= 121;
358 const int ID_CHOICE_SEL_STR
= 122;
359 const int ID_CHOICE_CLEAR
= 123;
360 const int ID_CHOICE_APPEND
= 124;
361 const int ID_CHOICE_DELETE
= 125;
362 const int ID_CHOICE_FONT
= 126;
363 const int ID_CHOICE_ENABLE
= 127;
364 const int ID_CHOICE_SORTED
= 128;
366 const int ID_COMBO
= 140;
367 const int ID_COMBO_SEL_NUM
= 141;
368 const int ID_COMBO_SEL_STR
= 142;
369 const int ID_COMBO_CLEAR
= 143;
370 const int ID_COMBO_APPEND
= 144;
371 const int ID_COMBO_DELETE
= 145;
372 const int ID_COMBO_FONT
= 146;
373 const int ID_COMBO_ENABLE
= 147;
375 const int ID_RADIOBOX
= 160;
376 const int ID_RADIOBOX_SEL_NUM
= 161;
377 const int ID_RADIOBOX_SEL_STR
= 162;
378 const int ID_RADIOBOX_FONT
= 163;
379 const int ID_RADIOBOX_ENABLE
= 164;
381 const int ID_RADIOBUTTON_1
= 166;
382 const int ID_RADIOBUTTON_2
= 167;
384 const int ID_SET_FONT
= 170;
386 const int ID_GAUGE
= 180;
387 const int ID_SLIDER
= 181;
389 const int ID_SPIN
= 182;
390 const int ID_BTNPROGRESS
= 183;
391 const int ID_BUTTON_LABEL
= 184;
392 const int ID_SPINCTRL
= 185;
394 const int ID_BUTTON_TEST1
= 190;
395 const int ID_BUTTON_TEST2
= 191;
396 const int ID_BITMAP_BTN
= 192;
398 const int ID_CHANGE_COLOUR
= 200;
400 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
401 EVT_SIZE ( MyPanel::OnSize
)
402 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
403 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
404 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
405 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
406 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
407 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
408 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
409 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
410 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
411 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
412 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
413 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
415 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
416 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
417 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
418 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
419 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
420 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
421 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
422 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
423 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
425 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
426 EVT_TEXT (ID_COMBO
, MyPanel::OnComboTextChanged
)
427 EVT_TEXT_ENTER(ID_COMBO
, MyPanel::OnComboTextEnter
)
428 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
429 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
430 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
431 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
432 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
433 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
434 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
435 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
436 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
437 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
438 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
439 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
440 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
441 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
443 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
444 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
445 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
446 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
447 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
448 #endif // wxUSE_SPINBTN
450 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
451 #endif // wxUSE_SPINCTRL
453 EVT_TOGGLEBUTTON(ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
454 #endif // wxUSE_TOGGLEBTN
455 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
456 EVT_BUTTON (ID_BUTTON_TEST1
, MyPanel::OnTestButton
)
457 EVT_BUTTON (ID_BUTTON_TEST2
, MyPanel::OnTestButton
)
458 EVT_BUTTON (ID_BITMAP_BTN
, MyPanel::OnBmpButton
)
461 BEGIN_EVENT_TABLE(MyButton
, wxButton
)
462 EVT_LEFT_DCLICK(MyButton::OnDClick
)
465 BEGIN_EVENT_TABLE(MyComboBox
, wxComboBox
)
466 EVT_CHAR(MyComboBox::OnChar
)
467 EVT_KEY_DOWN(MyComboBox::OnKeyDown
)
468 EVT_KEY_UP(MyComboBox::OnKeyUp
)
470 EVT_SET_FOCUS(MyComboBox::OnFocusGot
)
473 BEGIN_EVENT_TABLE(MyRadioBox
, wxRadioBox
)
474 EVT_SET_FOCUS(MyRadioBox::OnFocusGot
)
475 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost
)
478 // ============================================================================
480 // ============================================================================
482 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
483 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
484 m_text(NULL
), m_notebook(NULL
)
486 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
487 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
488 m_text
->SetBackgroundColour(wxT("wheat"));
491 wxLog::AddTraceMask(_T("focus"));
492 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
494 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
509 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
512 // fill the image list
513 wxImageList
*imagelist
= new wxImageList(32, 32);
515 imagelist
-> Add( wxBitmap( list_xpm
));
516 imagelist
-> Add( wxBitmap( choice_xpm
));
517 imagelist
-> Add( wxBitmap( combo_xpm
));
518 imagelist
-> Add( wxBitmap( text_xpm
));
519 imagelist
-> Add( wxBitmap( radio_xpm
));
520 imagelist
-> Add( wxBitmap( gauge_xpm
));
521 m_notebook
->SetImageList(imagelist
);
522 #elif defined(__WXMSW__)
523 // load images from resources
526 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
528 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
530 static const char *s_iconNames
[Image_Max
] =
532 "list", "choice", "combo", "text", "radio", "gauge"
535 for ( size_t n
= 0; n
< Image_Max
; n
++ )
537 wxBitmap
bmp(s_iconNames
[n
]);
538 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
540 wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."),
545 m_notebook
->SetImageList(imagelist
);
549 #define Image_List -1
550 #define Image_Choice -1
551 #define Image_Combo -1
552 #define Image_Text -1
553 #define Image_Radio -1
554 #define Image_Gauge -1
559 wxPanel
*panel
= new wxPanel(m_notebook
);
560 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
561 wxPoint(10,10), wxSize(120,70),
562 5, choices
, wxLB_ALWAYS_SB
);
563 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
564 wxPoint(10,90), wxSize(120,70),
565 5, choices
, wxLB_SORT
);
567 SetListboxClientData(wxT("listbox"), m_listbox
);
568 SetListboxClientData(wxT("listbox"), m_listboxSorted
);
570 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
572 m_listbox
->SetToolTip( "This is a list box" );
573 #endif // wxUSE_TOOLTIPS
575 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
576 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
577 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
578 (void)new MyButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
579 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
580 wxButton
*button
= new MyButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
582 button
->SetDefault();
584 button
->SetForegroundColour(*wxBLUE
);
587 button
->SetToolTip( "Press here to set italic font" );
588 #endif // wxUSE_TOOLTIPS
590 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
591 m_checkbox
->SetValue(FALSE
);
593 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
594 #endif // wxUSE_TOOLTIPS
595 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
597 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
598 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
601 panel
= new wxPanel(m_notebook
);
602 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
603 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
604 5, choices
, wxCB_SORT
);
606 SetChoiceClientData(wxT("choice"), m_choice
);
607 SetChoiceClientData(wxT("choice"), m_choiceSorted
);
609 m_choice
->SetSelection(2);
610 m_choice
->SetBackgroundColour( wxT("red") );
611 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
612 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
613 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
614 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
615 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
616 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
617 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
619 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
620 #endif // wxUSE_CHOICE
622 panel
= new wxPanel(m_notebook
);
623 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
624 wxPoint(5, 5), wxSize(150, 100));
625 m_combo
= new MyComboBox( panel
, ID_COMBO
, "This",
626 wxPoint(20,25), wxSize(120, -1),
628 /* wxCB_READONLY | */ wxPROCESS_ENTER
);
630 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
631 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
632 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
633 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
634 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
635 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
636 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
637 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
639 wxString choices2
[] =
643 "Fourth", "Fifth", "Sixth",
644 "Seventh", "Eighth", "Nineth", "Tenth" */
647 panel
= new wxPanel(m_notebook
);
648 (void)new MyRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
649 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
652 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
653 m_radio
->SetToolTip("Ever seen a radiobox?");
654 #endif // wxUSE_TOOLTIPS
656 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
657 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
658 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
659 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
660 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
661 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
662 rb
->SetValue( FALSE
);
663 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
664 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
666 panel
= new wxPanel(m_notebook
);
667 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
668 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
669 m_gauge
->SetBackgroundColour(*wxGREEN
);
670 m_gauge
->SetForegroundColour(*wxRED
);
671 m_gaugeVert
= new wxGauge( panel
, -1, 100,
672 wxPoint(195,35), wxSize(30, 90),
673 wxGA_VERTICAL
| wxGA_SMOOTH
| wxNO_BORDER
);
674 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
675 wxSL_AUTOTICKS
| wxSL_LABELS
);
676 m_slider
->SetTickFreq(40, 0);
677 (void)new wxStaticBox( panel
, -1, "&Explanation",
678 wxPoint(230,10), wxSize(270,130),
682 // No wrapping text in wxStaticText yet :-(
683 (void)new wxStaticText( panel
, -1,
689 (void)new wxStaticText( panel
, -1,
690 "In order see the gauge (aka progress bar)\n"
691 "control do something you have to drag the\n"
692 "handle of the slider to the right.\n"
694 "This is also supposed to demonstrate how\n"
695 "to use static controls.\n",
700 int initialSpinValue
= -5;
702 s
<< initialSpinValue
;
703 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
705 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
706 m_spinbutton
->SetRange(-10,30);
707 m_spinbutton
->SetValue(initialSpinValue
);
709 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
711 #endif // wxUSE_SPINBTN
714 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
715 m_spinctrl
->SetRange(10,30);
716 m_spinctrl
->SetValue(15);
717 #endif // wxUSE_SPINCTRL
719 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
721 panel
= new wxPanel(m_notebook
);
723 #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
724 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
725 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
728 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
729 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
732 wxBitmap
bitmap( 100, 100 );
734 dc
.SelectObject( bitmap
);
735 dc
.SetPen(*wxGREEN_PEN
);
737 dc
.DrawEllipse(5, 5, 90, 90);
738 dc
.DrawText("Bitmap", 30, 40);
739 dc
.SelectObject( wxNullBitmap
);
741 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
744 // test for masked bitmap display
745 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
748 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
750 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
754 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
755 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
756 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
757 wxBitmapButton
*bmpBtn
= new wxBitmapButton
764 bmpBtn
->SetBitmapSelected(bmp2
);
765 bmpBtn
->SetBitmapFocus(bmp3
);
768 (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
,
769 "&Toggle label", wxPoint(250, 20));
770 #endif // wxUSE_TOGGLEBTN
772 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
773 wxPoint(250, 60), wxDefaultSize
,
774 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
775 m_label
->SetForegroundColour( *wxBLUE
);
777 m_notebook
->AddPage(panel
, "wxBitmapXXX");
779 // layout constraints
780 #if wxUSE_CONSTRAINTS
781 wxLayoutConstraints
*c
;
783 panel
= new wxPanel(m_notebook
);
784 panel
->SetAutoLayout( TRUE
);
786 c
= new wxLayoutConstraints
;
787 c
->top
.SameAs( panel
, wxTop
, 10 );
789 c
->left
.SameAs( panel
, wxLeft
, 10 );
790 c
->width
.PercentOf( panel
, wxWidth
, 40 );
792 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
793 pMyButton
->SetConstraints( c
);
795 c
= new wxLayoutConstraints
;
796 c
->top
.SameAs( panel
, wxTop
, 10 );
797 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
798 c
->right
.SameAs( panel
, wxRight
, 10 );
799 c
->width
.PercentOf( panel
, wxWidth
, 40 );
801 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
802 pMyButton2
->SetConstraints( c
);
804 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
809 panel
= new wxPanel(m_notebook
);
810 panel
->SetAutoLayout( TRUE
);
812 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
814 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
815 sizer
->Add( 20,20, 1 );
816 sizer
->Add( new wxButton(panel
, -1, "Test Button &2" ), 3, wxGROW
|wxALL
, 10 );
818 panel
->SetSizer( sizer
);
820 m_notebook
->AddPage(panel
, "wxSizer");
823 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
827 GetClientSize( &x
, &y
);
829 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
830 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
833 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
835 int selOld
= event
.GetOldSelection();
838 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
839 "page change from taking place - if you select\n"
840 "[No] the current page will stay the third one\n",
842 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
850 *m_text
<< "Notebook selection is being changed from " << selOld
851 << " to " << event
.GetSelection()
852 << " (current page from notebook is "
853 << m_notebook
->GetSelection() << ")\n";
856 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
858 *m_text
<< "Notebook selection is now " << event
.GetSelection()
859 << " (from notebook: " << m_notebook
->GetSelection() << ")\n";
862 void MyPanel::OnTestButton(wxCommandEvent
& event
)
864 wxLogMessage(_T("Button %c clicked."),
865 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
868 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
870 wxLogMessage(_T("Bitmap button clicked."));
873 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
875 static wxColour s_colOld
;
877 // test panel colour changing and propagation to the subcontrols
880 SetBackgroundColour(s_colOld
);
881 s_colOld
= wxNullColour
;
883 m_lbSelectThis
->SetForegroundColour(wxT("red"));
884 m_lbSelectThis
->SetBackgroundColour(wxT("white"));
888 s_colOld
= wxColour(wxT("red"));
889 SetBackgroundColour(wxT("white"));
891 m_lbSelectThis
->SetForegroundColour(wxT("white"));
892 m_lbSelectThis
->SetBackgroundColour(wxT("red"));
895 m_lbSelectThis
->Refresh();
899 void MyPanel::OnListBox( wxCommandEvent
&event
)
901 // GetParent()->Move(100, 100);
903 if (event
.GetInt() == -1)
905 m_text
->AppendText( "ListBox has no selections anymore\n" );
909 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
912 m_text
->AppendText( "ListBox event selection string is: '" );
913 m_text
->AppendText( event
.GetString() );
914 m_text
->AppendText( "'\n" );
915 m_text
->AppendText( "ListBox control selection string is: '" );
916 m_text
->AppendText( listbox
->GetStringSelection() );
917 m_text
->AppendText( "'\n" );
919 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
920 m_text
->AppendText( "ListBox event client data string is: '" );
921 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
922 m_text
->AppendText( obj
->GetData() );
924 m_text
->AppendText( wxString("none") );
926 m_text
->AppendText( "'\n" );
927 m_text
->AppendText( "ListBox control client data string is: '" );
928 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
930 m_text
->AppendText( obj
->GetData() );
932 m_text
->AppendText( wxString("none") );
933 m_text
->AppendText( "'\n" );
936 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
938 m_text
->AppendText( "ListBox double click string is: " );
939 m_text
->AppendText( event
.GetString() );
940 m_text
->AppendText( "\n" );
943 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
945 switch (event
.GetId())
947 case ID_LISTBOX_ENABLE
:
949 m_text
->AppendText("Checkbox clicked.\n");
951 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
953 cb
->SetToolTip( "Click to enable listbox" );
955 cb
->SetToolTip( "Click to disable listbox" );
956 #endif // wxUSE_TOOLTIPS
957 m_listbox
->Enable( event
.GetInt() == 0 );
958 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
959 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
960 m_listboxSorted
->Enable( event
.GetInt() == 0 );
961 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
964 case ID_LISTBOX_SEL_NUM
:
966 m_listbox
->SetSelection( 2 );
967 m_listboxSorted
->SetSelection( 2 );
968 m_lbSelectThis
->WarpPointer( 40, 14 );
971 case ID_LISTBOX_SEL_STR
:
973 m_listbox
->SetStringSelection( "This" );
974 m_listboxSorted
->SetStringSelection( "This" );
975 m_lbSelectNum
->WarpPointer( 40, 14 );
978 case ID_LISTBOX_CLEAR
:
981 m_listboxSorted
->Clear();
984 case ID_LISTBOX_APPEND
:
986 m_listbox
->Append( "Hi!" );
987 m_listboxSorted
->Append( "Hi!" );
990 case ID_LISTBOX_DELETE
:
993 idx
= m_listbox
->GetSelection();
994 if ( idx
!= wxNOT_FOUND
)
995 m_listbox
->Delete( idx
);
996 idx
= m_listboxSorted
->GetSelection();
997 if ( idx
!= wxNOT_FOUND
)
998 m_listboxSorted
->Delete( idx
);
1001 case ID_LISTBOX_FONT
:
1003 m_listbox
->SetFont( *wxITALIC_FONT
);
1004 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1005 m_checkbox
->SetFont( *wxITALIC_FONT
);
1012 void MyPanel::OnChoice( wxCommandEvent
&event
)
1014 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1017 m_text
->AppendText( "Choice event selection string is: '" );
1018 m_text
->AppendText( event
.GetString() );
1019 m_text
->AppendText( "'\n" );
1020 m_text
->AppendText( "Choice control selection string is: '" );
1021 m_text
->AppendText( choice
->GetStringSelection() );
1022 m_text
->AppendText( "'\n" );
1024 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1025 m_text
->AppendText( "Choice event client data string is: '" );
1028 m_text
->AppendText( obj
->GetData() );
1030 m_text
->AppendText( wxString("none") );
1032 m_text
->AppendText( "'\n" );
1033 m_text
->AppendText( "Choice control client data string is: '" );
1034 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1037 m_text
->AppendText( obj
->GetData() );
1039 m_text
->AppendText( wxString("none") );
1040 m_text
->AppendText( "'\n" );
1043 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1045 switch (event
.GetId())
1047 case ID_CHOICE_ENABLE
:
1049 m_choice
->Enable( event
.GetInt() == 0 );
1050 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1053 case ID_CHOICE_SEL_NUM
:
1055 m_choice
->SetSelection( 2 );
1056 m_choiceSorted
->SetSelection( 2 );
1059 case ID_CHOICE_SEL_STR
:
1061 m_choice
->SetStringSelection( "This" );
1062 m_choiceSorted
->SetStringSelection( "This" );
1065 case ID_CHOICE_CLEAR
:
1068 m_choiceSorted
->Clear();
1071 case ID_CHOICE_APPEND
:
1073 m_choice
->Append( "Hi!" );
1074 m_choiceSorted
->Append( "Hi!" );
1077 case ID_CHOICE_DELETE
:
1079 int idx
= m_choice
->GetSelection();
1080 if ( idx
!= wxNOT_FOUND
)
1081 m_choice
->Delete( idx
);
1082 idx
= m_choiceSorted
->GetSelection();
1083 if ( idx
!= wxNOT_FOUND
)
1084 m_choiceSorted
->Delete( idx
);
1087 case ID_CHOICE_FONT
:
1089 m_choice
->SetFont( *wxITALIC_FONT
);
1090 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1095 #endif // wxUSE_CHOICE
1097 void MyPanel::OnCombo( wxCommandEvent
&event
)
1099 m_text
->AppendText( "ComboBox event selection string is: " );
1100 m_text
->AppendText( event
.GetString() );
1101 m_text
->AppendText( "\n" );
1102 m_text
->AppendText( "ComboBox control selection string is: " );
1103 m_text
->AppendText( m_combo
->GetStringSelection() );
1104 m_text
->AppendText( "\n" );
1107 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1109 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1110 m_combo
->GetValue().c_str());
1113 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1115 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1116 m_combo
->GetValue().c_str());
1119 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1121 switch (event
.GetId())
1123 case ID_COMBO_ENABLE
:
1125 m_combo
->Enable( event
.GetInt() == 0 );
1128 case ID_COMBO_SEL_NUM
:
1130 m_combo
->SetSelection( 2 );
1133 case ID_COMBO_SEL_STR
:
1135 m_combo
->SetStringSelection( "This" );
1138 case ID_COMBO_CLEAR
:
1143 case ID_COMBO_APPEND
:
1145 m_combo
->Append( "Hi!" );
1148 case ID_COMBO_DELETE
:
1150 int idx
= m_combo
->GetSelection();
1151 m_combo
->Delete( idx
);
1156 m_combo
->SetFont( *wxITALIC_FONT
);
1162 void MyPanel::OnRadio( wxCommandEvent
&event
)
1164 m_text
->AppendText( "RadioBox selection string is: " );
1165 m_text
->AppendText( event
.GetString() );
1166 m_text
->AppendText( "\n" );
1169 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1171 switch (event
.GetId())
1173 case ID_RADIOBOX_ENABLE
:
1175 m_radio
->Enable( event
.GetInt() == 0 );
1178 case ID_RADIOBOX_SEL_NUM
:
1180 m_radio
->SetSelection( 2 );
1183 case ID_RADIOBOX_SEL_STR
:
1185 m_radio
->SetStringSelection( "This" );
1188 case ID_RADIOBOX_FONT
:
1190 m_radio
->SetFont( *wxITALIC_FONT
);
1196 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1198 m_fontButton
->SetFont( *wxITALIC_FONT
);
1199 m_text
->SetFont( *wxITALIC_FONT
);
1202 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1204 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1208 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1210 m_gauge
->SetValue( m_slider
->GetValue() );
1211 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1216 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1219 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1220 m_spinctrl
->GetValue(), event
.GetInt());
1221 m_text
->AppendText(s
);
1224 #endif // wxUSE_SPINCTRL
1227 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1230 value
.Printf( _T("Spin control up: current = %d\n"),
1231 m_spinbutton
->GetValue());
1233 if ( m_spinbutton
->GetValue() > 17 )
1235 value
+= _T("Preventing the spin button from going above 17.\n");
1240 m_text
->AppendText(value
);
1243 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1246 value
.Printf( _T("Spin control down: current = %d\n"),
1247 m_spinbutton
->GetValue());
1249 if ( m_spinbutton
->GetValue() < -17 )
1251 value
+= _T("Preventing the spin button from going below -17.\n");
1256 m_text
->AppendText(value
);
1259 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1262 value
.Printf( _T("%d"), event
.GetPosition() );
1263 m_spintext
->SetValue( value
);
1265 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1266 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1267 m_spinbutton
->GetValue());
1269 m_text
->AppendText(value
);
1272 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1274 event
.Enable( m_spinbutton
->GetValue() > 0 );
1277 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1279 int max
= m_spinbutton
->GetValue();
1283 wxLogError(_T("You must set positive range!"));
1287 wxProgressDialog
dialog("Progress dialog example",
1288 "An informative message",
1295 wxPD_ESTIMATED_TIME
|
1296 wxPD_REMAINING_TIME
);
1300 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1305 cont
= dialog
.Update(i
, "That's all, folks!");
1307 else if ( i
== max
/ 2 )
1309 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1313 cont
= dialog
.Update(i
);
1319 *m_text
<< "Progress dialog aborted!\n";
1323 *m_text
<< "Countdown from " << max
<< " finished.\n";
1327 #endif // wxUSE_SPINBTN
1331 //wxLog::RemoveTraceMask(_T("focus"));
1332 delete wxLog::SetActiveTarget(m_logTargetOld
);
1334 delete m_notebook
->GetImageList();
1337 //----------------------------------------------------------------------
1339 //----------------------------------------------------------------------
1341 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1342 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1343 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1344 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1346 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1347 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1348 #endif // wxUSE_TOOLTIPS
1350 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1352 EVT_SIZE(MyFrame::OnSize
)
1353 EVT_MOVE(MyFrame::OnMove
)
1355 EVT_IDLE(MyFrame::OnIdle
)
1358 MyFrame::MyFrame(const char *title
, int x
, int y
)
1359 : wxFrame(NULL
, -1, title
, wxPoint(x
, y
), wxSize(500, 430))
1362 // The wxICON() macros loads an icon from a resource under Windows
1363 // and uses an #included XPM image under GTK+ and Motif
1365 SetIcon( wxICON(mondrian
) );
1367 wxMenu
*file_menu
= new wxMenu
;
1369 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
1370 file_menu
->AppendSeparator();
1371 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
1372 file_menu
->AppendSeparator();
1373 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
1375 wxMenuBar
*menu_bar
= new wxMenuBar
;
1376 menu_bar
->Append(file_menu
, "&File");
1379 wxMenu
*tooltip_menu
= new wxMenu
;
1380 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
1381 tooltip_menu
->AppendSeparator();
1382 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
1383 "enable/disable tooltips", TRUE
);
1384 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
1385 menu_bar
->Append(tooltip_menu
, "&Tooltips");
1386 #endif // wxUSE_TOOLTIPS
1388 wxMenu
*panel_menu
= new wxMenu
;
1389 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
1390 "Enable/disable all panel controls", TRUE
);
1391 menu_bar
->Append(panel_menu
, "&Panel");
1393 SetMenuBar(menu_bar
);
1397 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1399 SetSizeHints( 500, 425 );
1402 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1407 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1411 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1415 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1417 m_panel
->m_text
->Clear();
1421 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1423 static long s_delay
= 5000;
1426 delay
.Printf( _T("%ld"), s_delay
);
1428 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1429 "Set tooltip delay",
1433 return; // cancelled
1435 wxSscanf(delay
, _T("%ld"), &s_delay
);
1437 wxToolTip::SetDelay(s_delay
);
1439 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1442 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1444 static bool s_enabled
= TRUE
;
1446 s_enabled
= !s_enabled
;
1448 wxToolTip::Enable(s_enabled
);
1450 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1454 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1456 static bool s_enable
= TRUE
;
1458 s_enable
= !s_enable
;
1459 m_panel
->Enable(s_enable
);
1462 void MyFrame::OnMove( wxMoveEvent
& event
)
1464 UpdateStatusBar(event
.GetPosition(), GetSize());
1469 void MyFrame::OnSize( wxSizeEvent
& event
)
1471 UpdateStatusBar(GetPosition(), event
.GetSize());
1476 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1478 // track the window which has the focus in the status bar
1479 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1480 wxWindow
*focus
= wxWindow::FindFocus();
1481 if ( focus
&& (focus
!= s_windowFocus
) )
1483 s_windowFocus
= focus
;
1488 _T("Focus: %s, HWND = %08x"),
1492 s_windowFocus
->GetClassInfo()->GetClassName()
1494 , s_windowFocus
->GetHWND()
1502 void MyComboBox::OnChar(wxKeyEvent
& event
)
1504 wxLogMessage(_T("MyComboBox::OnChar"));
1506 if ( event
.KeyCode() == 'w' )
1507 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1512 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1514 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1516 if ( event
.KeyCode() == 'w' )
1517 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1522 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1524 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1529 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
)
1531 size_t count
= control
->GetCount();
1532 for ( size_t n
= 0; n
< count
; n
++ )
1535 s
.Printf(wxT("%s client data for '%s'"),
1536 name
, control
->GetString(n
).c_str());
1538 control
->SetClientObject(n
, new wxStringClientData(s
));
1542 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
)
1544 size_t count
= control
->GetCount();
1545 for ( size_t n
= 0; n
< count
; n
++ )
1548 s
.Printf(wxT("%s client data for '%s'"),
1549 name
, control
->GetString(n
).c_str());
1551 control
->SetClientObject(n
, new wxStringClientData(s
));