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 wxLayoutConstraints
*c
;
488 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
489 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
490 m_text
->SetBackgroundColour(wxT("wheat"));
493 wxLog::AddTraceMask(_T("focus"));
494 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
496 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
511 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
514 // fill the image list
515 wxImageList
*imagelist
= new wxImageList(32, 32);
517 imagelist
-> Add( wxBitmap( list_xpm
));
518 imagelist
-> Add( wxBitmap( choice_xpm
));
519 imagelist
-> Add( wxBitmap( combo_xpm
));
520 imagelist
-> Add( wxBitmap( text_xpm
));
521 imagelist
-> Add( wxBitmap( radio_xpm
));
522 imagelist
-> Add( wxBitmap( gauge_xpm
));
523 m_notebook
->SetImageList(imagelist
);
524 #elif defined(__WXMSW__)
525 // load images from resources
528 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
530 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
532 static const char *s_iconNames
[Image_Max
] =
534 "list", "choice", "combo", "text", "radio", "gauge"
537 for ( size_t n
= 0; n
< Image_Max
; n
++ )
539 wxBitmap
bmp(s_iconNames
[n
]);
540 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
542 wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."),
547 m_notebook
->SetImageList(imagelist
);
551 #define Image_List -1
552 #define Image_Choice -1
553 #define Image_Combo -1
554 #define Image_Text -1
555 #define Image_Radio -1
556 #define Image_Gauge -1
561 wxPanel
*panel
= new wxPanel(m_notebook
);
562 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
563 wxPoint(10,10), wxSize(120,70),
564 5, choices
, wxLB_ALWAYS_SB
);
565 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
566 wxPoint(10,90), wxSize(120,70),
567 5, choices
, wxLB_SORT
);
569 SetListboxClientData(wxT("listbox"), m_listbox
);
570 SetListboxClientData(wxT("listbox"), m_listboxSorted
);
572 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
574 m_listbox
->SetToolTip( "This is a list box" );
575 #endif // wxUSE_TOOLTIPS
577 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
578 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
579 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
580 (void)new MyButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
581 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
582 wxButton
*button
= new MyButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
584 button
->SetDefault();
586 button
->SetForegroundColour(*wxBLUE
);
589 button
->SetToolTip( "Press here to set italic font" );
590 #endif // wxUSE_TOOLTIPS
592 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
593 m_checkbox
->SetValue(FALSE
);
595 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
596 #endif // wxUSE_TOOLTIPS
597 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
599 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
600 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
603 panel
= new wxPanel(m_notebook
);
604 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
605 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
606 5, choices
, wxCB_SORT
);
608 SetChoiceClientData(wxT("choice"), m_choice
);
609 SetChoiceClientData(wxT("choice"), m_choiceSorted
);
611 m_choice
->SetSelection(2);
612 m_choice
->SetBackgroundColour( wxT("red") );
613 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
614 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
615 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
616 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
617 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
618 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
619 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
621 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
622 #endif // wxUSE_CHOICE
624 panel
= new wxPanel(m_notebook
);
625 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
626 wxPoint(5, 5), wxSize(150, 100));
627 m_combo
= new MyComboBox( panel
, ID_COMBO
, "This",
628 wxPoint(20,25), wxSize(120, -1),
630 /* wxCB_READONLY | */ wxPROCESS_ENTER
);
632 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
633 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
634 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
635 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
636 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
637 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
638 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
639 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
641 wxString choices2
[] =
645 "Fourth", "Fifth", "Sixth",
646 "Seventh", "Eighth", "Nineth", "Tenth" */
649 panel
= new wxPanel(m_notebook
);
650 (void)new MyRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
651 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
654 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
655 m_radio
->SetToolTip("Ever seen a radiobox?");
656 #endif // wxUSE_TOOLTIPS
658 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
659 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
660 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
661 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
662 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
663 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
664 rb
->SetValue( FALSE
);
665 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
666 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
668 panel
= new wxPanel(m_notebook
);
669 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
670 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
671 m_gauge
->SetBackgroundColour(*wxGREEN
);
672 m_gauge
->SetForegroundColour(*wxRED
);
673 m_gaugeVert
= new wxGauge( panel
, -1, 100,
674 wxPoint(195,35), wxSize(30, 90),
675 wxGA_VERTICAL
| wxGA_SMOOTH
| wxNO_BORDER
);
676 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
677 wxSL_AUTOTICKS
| wxSL_LABELS
);
678 m_slider
->SetTickFreq(40, 0);
679 (void)new wxStaticBox( panel
, -1, "&Explanation",
680 wxPoint(230,10), wxSize(270,130),
684 // No wrapping text in wxStaticText yet :-(
685 (void)new wxStaticText( panel
, -1,
691 (void)new wxStaticText( panel
, -1,
692 "In order see the gauge (aka progress bar)\n"
693 "control do something you have to drag the\n"
694 "handle of the slider to the right.\n"
696 "This is also supposed to demonstrate how\n"
697 "to use static controls.\n",
702 int initialSpinValue
= -5;
704 s
<< initialSpinValue
;
705 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
707 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
708 m_spinbutton
->SetRange(-10,30);
709 m_spinbutton
->SetValue(initialSpinValue
);
711 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
713 #endif // wxUSE_SPINBTN
716 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
717 m_spinctrl
->SetRange(10,30);
718 m_spinctrl
->SetValue(15);
719 #endif // wxUSE_SPINCTRL
721 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
723 panel
= new wxPanel(m_notebook
);
725 #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
726 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
727 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
730 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
731 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
734 wxBitmap
bitmap( 100, 100 );
736 dc
.SelectObject( bitmap
);
737 dc
.SetPen(*wxGREEN_PEN
);
739 dc
.DrawEllipse(5, 5, 90, 90);
740 dc
.DrawText("Bitmap", 30, 40);
741 dc
.SelectObject( wxNullBitmap
);
743 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
746 // test for masked bitmap display
747 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
750 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
752 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
756 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
757 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
758 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
759 wxBitmapButton
*bmpBtn
= new wxBitmapButton
766 bmpBtn
->SetBitmapSelected(bmp2
);
767 bmpBtn
->SetBitmapFocus(bmp3
);
770 (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
,
771 "&Toggle label", wxPoint(250, 20));
772 #endif // wxUSE_TOGGLEBTN
774 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
775 wxPoint(250, 60), wxDefaultSize
,
776 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
777 m_label
->SetForegroundColour( *wxBLUE
);
779 m_notebook
->AddPage(panel
, "wxBitmapXXX");
781 // layout constraints
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");
808 panel
= new wxPanel(m_notebook
);
809 panel
->SetAutoLayout( TRUE
);
811 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
813 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
814 sizer
->Add( 20,20, 1 );
815 sizer
->Add( new wxButton(panel
, -1, "Test Button &2" ), 3, wxGROW
|wxALL
, 10 );
817 panel
->SetSizer( sizer
);
819 m_notebook
->AddPage(panel
, "wxSizer");
822 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
826 GetClientSize( &x
, &y
);
828 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
829 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
832 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
834 int selOld
= event
.GetOldSelection();
837 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
838 "page change from taking place - if you select\n"
839 "[No] the current page will stay the third one\n",
841 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
849 *m_text
<< "Notebook selection is being changed from " << selOld
850 << " to " << event
.GetSelection()
851 << " (current page from notebook is "
852 << m_notebook
->GetSelection() << ")\n";
855 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
857 *m_text
<< "Notebook selection is now " << event
.GetSelection()
858 << " (from notebook: " << m_notebook
->GetSelection() << ")\n";
861 void MyPanel::OnTestButton(wxCommandEvent
& event
)
863 wxLogMessage(_T("Button %c clicked."),
864 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
867 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
869 wxLogMessage(_T("Bitmap button clicked."));
872 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
874 static wxColour s_colOld
;
876 // test panel colour changing and propagation to the subcontrols
879 SetBackgroundColour(s_colOld
);
880 s_colOld
= wxNullColour
;
882 m_lbSelectThis
->SetForegroundColour(wxT("red"));
883 m_lbSelectThis
->SetBackgroundColour(wxT("white"));
887 s_colOld
= wxColour(wxT("red"));
888 SetBackgroundColour(wxT("white"));
890 m_lbSelectThis
->SetForegroundColour(wxT("white"));
891 m_lbSelectThis
->SetBackgroundColour(wxT("red"));
894 m_lbSelectThis
->Refresh();
898 void MyPanel::OnListBox( wxCommandEvent
&event
)
900 // GetParent()->Move(100, 100);
902 if (event
.GetInt() == -1)
904 m_text
->AppendText( "ListBox has no selections anymore\n" );
908 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
911 m_text
->AppendText( "ListBox event selection string is: '" );
912 m_text
->AppendText( event
.GetString() );
913 m_text
->AppendText( "'\n" );
914 m_text
->AppendText( "ListBox control selection string is: '" );
915 m_text
->AppendText( listbox
->GetStringSelection() );
916 m_text
->AppendText( "'\n" );
918 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
919 m_text
->AppendText( "ListBox event client data string is: '" );
920 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
921 m_text
->AppendText( obj
->GetData() );
923 m_text
->AppendText( wxString("none") );
925 m_text
->AppendText( "'\n" );
926 m_text
->AppendText( "ListBox control client data string is: '" );
927 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
929 m_text
->AppendText( obj
->GetData() );
931 m_text
->AppendText( wxString("none") );
932 m_text
->AppendText( "'\n" );
935 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
937 m_text
->AppendText( "ListBox double click string is: " );
938 m_text
->AppendText( event
.GetString() );
939 m_text
->AppendText( "\n" );
942 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
944 switch (event
.GetId())
946 case ID_LISTBOX_ENABLE
:
948 m_text
->AppendText("Checkbox clicked.\n");
950 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
952 cb
->SetToolTip( "Click to enable listbox" );
954 cb
->SetToolTip( "Click to disable listbox" );
955 #endif // wxUSE_TOOLTIPS
956 m_listbox
->Enable( event
.GetInt() == 0 );
957 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
958 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
959 m_listboxSorted
->Enable( event
.GetInt() == 0 );
960 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
963 case ID_LISTBOX_SEL_NUM
:
965 m_listbox
->SetSelection( 2 );
966 m_listboxSorted
->SetSelection( 2 );
967 m_lbSelectThis
->WarpPointer( 40, 14 );
970 case ID_LISTBOX_SEL_STR
:
972 m_listbox
->SetStringSelection( "This" );
973 m_listboxSorted
->SetStringSelection( "This" );
974 m_lbSelectNum
->WarpPointer( 40, 14 );
977 case ID_LISTBOX_CLEAR
:
980 m_listboxSorted
->Clear();
983 case ID_LISTBOX_APPEND
:
985 m_listbox
->Append( "Hi!" );
986 m_listboxSorted
->Append( "Hi!" );
989 case ID_LISTBOX_DELETE
:
992 idx
= m_listbox
->GetSelection();
993 if ( idx
!= wxNOT_FOUND
)
994 m_listbox
->Delete( idx
);
995 idx
= m_listboxSorted
->GetSelection();
996 if ( idx
!= wxNOT_FOUND
)
997 m_listboxSorted
->Delete( idx
);
1000 case ID_LISTBOX_FONT
:
1002 m_listbox
->SetFont( *wxITALIC_FONT
);
1003 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1004 m_checkbox
->SetFont( *wxITALIC_FONT
);
1011 void MyPanel::OnChoice( wxCommandEvent
&event
)
1013 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1016 m_text
->AppendText( "Choice event selection string is: '" );
1017 m_text
->AppendText( event
.GetString() );
1018 m_text
->AppendText( "'\n" );
1019 m_text
->AppendText( "Choice control selection string is: '" );
1020 m_text
->AppendText( choice
->GetStringSelection() );
1021 m_text
->AppendText( "'\n" );
1023 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1024 m_text
->AppendText( "Choice event client data string is: '" );
1027 m_text
->AppendText( obj
->GetData() );
1029 m_text
->AppendText( wxString("none") );
1031 m_text
->AppendText( "'\n" );
1032 m_text
->AppendText( "Choice control client data string is: '" );
1033 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1036 m_text
->AppendText( obj
->GetData() );
1038 m_text
->AppendText( wxString("none") );
1039 m_text
->AppendText( "'\n" );
1042 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1044 switch (event
.GetId())
1046 case ID_CHOICE_ENABLE
:
1048 m_choice
->Enable( event
.GetInt() == 0 );
1049 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1052 case ID_CHOICE_SEL_NUM
:
1054 m_choice
->SetSelection( 2 );
1055 m_choiceSorted
->SetSelection( 2 );
1058 case ID_CHOICE_SEL_STR
:
1060 m_choice
->SetStringSelection( "This" );
1061 m_choiceSorted
->SetStringSelection( "This" );
1064 case ID_CHOICE_CLEAR
:
1067 m_choiceSorted
->Clear();
1070 case ID_CHOICE_APPEND
:
1072 m_choice
->Append( "Hi!" );
1073 m_choiceSorted
->Append( "Hi!" );
1076 case ID_CHOICE_DELETE
:
1078 int idx
= m_choice
->GetSelection();
1079 if ( idx
!= wxNOT_FOUND
)
1080 m_choice
->Delete( idx
);
1081 idx
= m_choiceSorted
->GetSelection();
1082 if ( idx
!= wxNOT_FOUND
)
1083 m_choiceSorted
->Delete( idx
);
1086 case ID_CHOICE_FONT
:
1088 m_choice
->SetFont( *wxITALIC_FONT
);
1089 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1094 #endif // wxUSE_CHOICE
1096 void MyPanel::OnCombo( wxCommandEvent
&event
)
1098 m_text
->AppendText( "ComboBox event selection string is: " );
1099 m_text
->AppendText( event
.GetString() );
1100 m_text
->AppendText( "\n" );
1101 m_text
->AppendText( "ComboBox control selection string is: " );
1102 m_text
->AppendText( m_combo
->GetStringSelection() );
1103 m_text
->AppendText( "\n" );
1106 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1108 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1109 m_combo
->GetValue().c_str());
1112 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1114 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1115 m_combo
->GetValue().c_str());
1118 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1120 switch (event
.GetId())
1122 case ID_COMBO_ENABLE
:
1124 m_combo
->Enable( event
.GetInt() == 0 );
1127 case ID_COMBO_SEL_NUM
:
1129 m_combo
->SetSelection( 2 );
1132 case ID_COMBO_SEL_STR
:
1134 m_combo
->SetStringSelection( "This" );
1137 case ID_COMBO_CLEAR
:
1142 case ID_COMBO_APPEND
:
1144 m_combo
->Append( "Hi!" );
1147 case ID_COMBO_DELETE
:
1149 int idx
= m_combo
->GetSelection();
1150 m_combo
->Delete( idx
);
1155 m_combo
->SetFont( *wxITALIC_FONT
);
1161 void MyPanel::OnRadio( wxCommandEvent
&event
)
1163 m_text
->AppendText( "RadioBox selection string is: " );
1164 m_text
->AppendText( event
.GetString() );
1165 m_text
->AppendText( "\n" );
1168 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1170 switch (event
.GetId())
1172 case ID_RADIOBOX_ENABLE
:
1174 m_radio
->Enable( event
.GetInt() == 0 );
1177 case ID_RADIOBOX_SEL_NUM
:
1179 m_radio
->SetSelection( 2 );
1182 case ID_RADIOBOX_SEL_STR
:
1184 m_radio
->SetStringSelection( "This" );
1187 case ID_RADIOBOX_FONT
:
1189 m_radio
->SetFont( *wxITALIC_FONT
);
1195 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1197 m_fontButton
->SetFont( *wxITALIC_FONT
);
1198 m_text
->SetFont( *wxITALIC_FONT
);
1201 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1203 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1207 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1209 m_gauge
->SetValue( m_slider
->GetValue() );
1210 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1215 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1218 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1219 m_spinctrl
->GetValue(), event
.GetInt());
1220 m_text
->AppendText(s
);
1223 #endif // wxUSE_SPINCTRL
1226 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1229 value
.Printf( _T("Spin control up: current = %d\n"),
1230 m_spinbutton
->GetValue());
1232 if ( m_spinbutton
->GetValue() > 17 )
1234 value
+= _T("Preventing the spin button from going above 17.\n");
1239 m_text
->AppendText(value
);
1242 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1245 value
.Printf( _T("Spin control down: current = %d\n"),
1246 m_spinbutton
->GetValue());
1248 if ( m_spinbutton
->GetValue() < -17 )
1250 value
+= _T("Preventing the spin button from going below -17.\n");
1255 m_text
->AppendText(value
);
1258 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1261 value
.Printf( _T("%d"), event
.GetPosition() );
1262 m_spintext
->SetValue( value
);
1264 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1265 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1266 m_spinbutton
->GetValue());
1268 m_text
->AppendText(value
);
1271 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1273 event
.Enable( m_spinbutton
->GetValue() > 0 );
1276 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1278 int max
= m_spinbutton
->GetValue();
1282 wxLogError(_T("You must set positive range!"));
1286 wxProgressDialog
dialog("Progress dialog example",
1287 "An informative message",
1294 wxPD_ESTIMATED_TIME
|
1295 wxPD_REMAINING_TIME
);
1299 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1304 cont
= dialog
.Update(i
, "That's all, folks!");
1306 else if ( i
== max
/ 2 )
1308 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1312 cont
= dialog
.Update(i
);
1318 *m_text
<< "Progress dialog aborted!\n";
1322 *m_text
<< "Countdown from " << max
<< " finished.\n";
1326 #endif // wxUSE_SPINBTN
1330 //wxLog::RemoveTraceMask(_T("focus"));
1331 delete wxLog::SetActiveTarget(m_logTargetOld
);
1333 delete m_notebook
->GetImageList();
1336 //----------------------------------------------------------------------
1338 //----------------------------------------------------------------------
1340 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1341 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1342 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1343 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1345 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1346 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1347 #endif // wxUSE_TOOLTIPS
1349 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1351 EVT_SIZE(MyFrame::OnSize
)
1352 EVT_MOVE(MyFrame::OnMove
)
1354 EVT_IDLE(MyFrame::OnIdle
)
1357 MyFrame::MyFrame(const char *title
, int x
, int y
)
1358 : wxFrame(NULL
, -1, title
, wxPoint(x
, y
), wxSize(500, 430))
1361 // The wxICON() macros loads an icon from a resource under Windows
1362 // and uses an #included XPM image under GTK+ and Motif
1364 SetIcon( wxICON(mondrian
) );
1366 wxMenu
*file_menu
= new wxMenu
;
1368 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
1369 file_menu
->AppendSeparator();
1370 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
1371 file_menu
->AppendSeparator();
1372 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
1374 wxMenuBar
*menu_bar
= new wxMenuBar
;
1375 menu_bar
->Append(file_menu
, "&File");
1378 wxMenu
*tooltip_menu
= new wxMenu
;
1379 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
1380 tooltip_menu
->AppendSeparator();
1381 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
1382 "enable/disable tooltips", TRUE
);
1383 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
1384 menu_bar
->Append(tooltip_menu
, "&Tooltips");
1385 #endif // wxUSE_TOOLTIPS
1387 wxMenu
*panel_menu
= new wxMenu
;
1388 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
1389 "Enable/disable all panel controls", TRUE
);
1390 menu_bar
->Append(panel_menu
, "&Panel");
1392 SetMenuBar(menu_bar
);
1396 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1398 SetSizeHints( 500, 425 );
1401 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1406 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1410 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1414 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1416 m_panel
->m_text
->Clear();
1420 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1422 static long s_delay
= 5000;
1425 delay
.Printf( _T("%ld"), s_delay
);
1427 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1428 "Set tooltip delay",
1432 return; // cancelled
1434 wxSscanf(delay
, _T("%ld"), &s_delay
);
1436 wxToolTip::SetDelay(s_delay
);
1438 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1441 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1443 static bool s_enabled
= TRUE
;
1445 s_enabled
= !s_enabled
;
1447 wxToolTip::Enable(s_enabled
);
1449 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1453 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1455 static bool s_enable
= TRUE
;
1457 s_enable
= !s_enable
;
1458 m_panel
->Enable(s_enable
);
1461 void MyFrame::OnMove( wxMoveEvent
& event
)
1463 UpdateStatusBar(event
.GetPosition(), GetSize());
1468 void MyFrame::OnSize( wxSizeEvent
& event
)
1470 UpdateStatusBar(GetPosition(), event
.GetSize());
1475 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1477 // track the window which has the focus in the status bar
1478 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1479 wxWindow
*focus
= wxWindow::FindFocus();
1480 if ( focus
&& (focus
!= s_windowFocus
) )
1482 s_windowFocus
= focus
;
1487 _T("Focus: %s, HWND = %08x"),
1491 s_windowFocus
->GetClassInfo()->GetClassName()
1493 , s_windowFocus
->GetHWND()
1501 void MyComboBox::OnChar(wxKeyEvent
& event
)
1503 wxLogMessage(_T("MyComboBox::OnChar"));
1505 if ( event
.KeyCode() == 'w' )
1506 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1511 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1513 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1515 if ( event
.KeyCode() == 'w' )
1516 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1521 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1523 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1528 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
)
1530 size_t count
= control
->GetCount();
1531 for ( size_t n
= 0; n
< count
; n
++ )
1534 s
.Printf(wxT("%s client data for '%s'"),
1535 name
, control
->GetString(n
).c_str());
1537 control
->SetClientObject(n
, new wxStringClientData(s
));
1541 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
)
1543 size_t count
= control
->GetCount();
1544 for ( size_t n
= 0; n
< count
; n
++ )
1547 s
.Printf(wxT("%s client data for '%s'"),
1548 name
, control
->GetString(n
).c_str());
1550 control
->SetClientObject(n
, new wxStringClientData(s
));