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", wxPoint(230,10), wxSize(270,130) );
681 // No wrapping text in wxStaticText yet :-(
682 (void)new wxStaticText( panel
, -1,
688 (void)new wxStaticText( panel
, -1,
689 "In order see the gauge (aka progress bar)\n"
690 "control do something you have to drag the\n"
691 "handle of the slider to the right.\n"
693 "This is also supposed to demonstrate how\n"
694 "to use static controls.\n",
699 int initialSpinValue
= -5;
701 s
<< initialSpinValue
;
702 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
704 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
705 m_spinbutton
->SetRange(-10,30);
706 m_spinbutton
->SetValue(initialSpinValue
);
708 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
710 #endif // wxUSE_SPINBTN
713 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
714 m_spinctrl
->SetRange(10,30);
715 m_spinctrl
->SetValue(15);
716 #endif // wxUSE_SPINCTRL
718 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
720 panel
= new wxPanel(m_notebook
);
722 #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
723 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
724 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
727 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
728 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
731 wxBitmap
bitmap( 100, 100 );
733 dc
.SelectObject( bitmap
);
734 dc
.SetPen(*wxGREEN_PEN
);
736 dc
.DrawEllipse(5, 5, 90, 90);
737 dc
.DrawText("Bitmap", 30, 40);
738 dc
.SelectObject( wxNullBitmap
);
740 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
743 // test for masked bitmap display
744 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
747 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
749 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
753 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
754 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
755 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
756 wxBitmapButton
*bmpBtn
= new wxBitmapButton
763 bmpBtn
->SetBitmapSelected(bmp2
);
764 bmpBtn
->SetBitmapFocus(bmp3
);
767 (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
,
768 "&Toggle label", wxPoint(250, 20));
769 #endif // wxUSE_TOGGLEBTN
771 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
772 wxPoint(250, 60), wxDefaultSize
,
773 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
774 m_label
->SetForegroundColour( *wxBLUE
);
776 m_notebook
->AddPage(panel
, "wxBitmapXXX");
778 // layout constraints
780 panel
= new wxPanel(m_notebook
);
781 panel
->SetAutoLayout( TRUE
);
783 c
= new wxLayoutConstraints
;
784 c
->top
.SameAs( panel
, wxTop
, 10 );
786 c
->left
.SameAs( panel
, wxLeft
, 10 );
787 c
->width
.PercentOf( panel
, wxWidth
, 40 );
789 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
790 pMyButton
->SetConstraints( c
);
792 c
= new wxLayoutConstraints
;
793 c
->top
.SameAs( panel
, wxTop
, 10 );
794 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
795 c
->right
.SameAs( panel
, wxRight
, 10 );
796 c
->width
.PercentOf( panel
, wxWidth
, 40 );
798 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
799 pMyButton2
->SetConstraints( c
);
801 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
805 panel
= new wxPanel(m_notebook
);
806 panel
->SetAutoLayout( TRUE
);
808 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
810 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
811 sizer
->Add( 20,20, 1 );
812 sizer
->Add( new wxButton(panel
, -1, "Test Button &2" ), 3, wxGROW
|wxALL
, 10 );
814 panel
->SetSizer( sizer
);
816 m_notebook
->AddPage(panel
, "wxSizer");
819 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
823 GetClientSize( &x
, &y
);
825 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
826 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
829 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
831 int selOld
= event
.GetOldSelection();
834 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
835 "page change from taking place - if you select\n"
836 "[No] the current page will stay the third one\n",
838 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
846 *m_text
<< "Notebook selection is being changed from " << selOld
847 << " to " << event
.GetSelection()
848 << " (current page from notebook is "
849 << m_notebook
->GetSelection() << ")\n";
852 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
854 *m_text
<< "Notebook selection is now " << event
.GetSelection()
855 << " (from notebook: " << m_notebook
->GetSelection() << ")\n";
858 void MyPanel::OnTestButton(wxCommandEvent
& event
)
860 wxLogMessage(_T("Button %c clicked."),
861 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
864 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
866 wxLogMessage(_T("Bitmap button clicked."));
869 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
871 static wxColour s_colOld
;
873 // test panel colour changing and propagation to the subcontrols
876 SetBackgroundColour(s_colOld
);
877 s_colOld
= wxNullColour
;
879 m_lbSelectThis
->SetForegroundColour(wxT("red"));
880 m_lbSelectThis
->SetBackgroundColour(wxT("white"));
884 s_colOld
= wxColour(wxT("red"));
885 SetBackgroundColour(wxT("white"));
887 m_lbSelectThis
->SetForegroundColour(wxT("white"));
888 m_lbSelectThis
->SetBackgroundColour(wxT("red"));
891 m_lbSelectThis
->Refresh();
895 void MyPanel::OnListBox( wxCommandEvent
&event
)
897 // GetParent()->Move(100, 100);
899 if (event
.GetInt() == -1)
901 m_text
->AppendText( "ListBox has no selections anymore\n" );
905 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
908 m_text
->AppendText( "ListBox event selection string is: '" );
909 m_text
->AppendText( event
.GetString() );
910 m_text
->AppendText( "'\n" );
911 m_text
->AppendText( "ListBox control selection string is: '" );
912 m_text
->AppendText( listbox
->GetStringSelection() );
913 m_text
->AppendText( "'\n" );
915 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
916 m_text
->AppendText( "ListBox event client data string is: '" );
917 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
918 m_text
->AppendText( obj
->GetData() );
920 m_text
->AppendText( wxString("none") );
922 m_text
->AppendText( "'\n" );
923 m_text
->AppendText( "ListBox control client data string is: '" );
924 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
926 m_text
->AppendText( obj
->GetData() );
928 m_text
->AppendText( wxString("none") );
929 m_text
->AppendText( "'\n" );
932 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
934 m_text
->AppendText( "ListBox double click string is: " );
935 m_text
->AppendText( event
.GetString() );
936 m_text
->AppendText( "\n" );
939 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
941 switch (event
.GetId())
943 case ID_LISTBOX_ENABLE
:
945 m_text
->AppendText("Checkbox clicked.\n");
947 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
949 cb
->SetToolTip( "Click to enable listbox" );
951 cb
->SetToolTip( "Click to disable listbox" );
952 #endif // wxUSE_TOOLTIPS
953 m_listbox
->Enable( event
.GetInt() == 0 );
954 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
955 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
956 m_listboxSorted
->Enable( event
.GetInt() == 0 );
957 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
960 case ID_LISTBOX_SEL_NUM
:
962 m_listbox
->SetSelection( 2 );
963 m_listboxSorted
->SetSelection( 2 );
964 m_lbSelectThis
->WarpPointer( 40, 14 );
967 case ID_LISTBOX_SEL_STR
:
969 m_listbox
->SetStringSelection( "This" );
970 m_listboxSorted
->SetStringSelection( "This" );
971 m_lbSelectNum
->WarpPointer( 40, 14 );
974 case ID_LISTBOX_CLEAR
:
977 m_listboxSorted
->Clear();
980 case ID_LISTBOX_APPEND
:
982 m_listbox
->Append( "Hi!" );
983 m_listboxSorted
->Append( "Hi!" );
986 case ID_LISTBOX_DELETE
:
989 idx
= m_listbox
->GetSelection();
990 if ( idx
!= wxNOT_FOUND
)
991 m_listbox
->Delete( idx
);
992 idx
= m_listboxSorted
->GetSelection();
993 if ( idx
!= wxNOT_FOUND
)
994 m_listboxSorted
->Delete( idx
);
997 case ID_LISTBOX_FONT
:
999 m_listbox
->SetFont( *wxITALIC_FONT
);
1000 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1001 m_checkbox
->SetFont( *wxITALIC_FONT
);
1008 void MyPanel::OnChoice( wxCommandEvent
&event
)
1010 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1013 m_text
->AppendText( "Choice event selection string is: '" );
1014 m_text
->AppendText( event
.GetString() );
1015 m_text
->AppendText( "'\n" );
1016 m_text
->AppendText( "Choice control selection string is: '" );
1017 m_text
->AppendText( choice
->GetStringSelection() );
1018 m_text
->AppendText( "'\n" );
1020 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1021 m_text
->AppendText( "Choice event client data string is: '" );
1024 m_text
->AppendText( obj
->GetData() );
1026 m_text
->AppendText( wxString("none") );
1028 m_text
->AppendText( "'\n" );
1029 m_text
->AppendText( "Choice control client data string is: '" );
1030 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1033 m_text
->AppendText( obj
->GetData() );
1035 m_text
->AppendText( wxString("none") );
1036 m_text
->AppendText( "'\n" );
1039 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1041 switch (event
.GetId())
1043 case ID_CHOICE_ENABLE
:
1045 m_choice
->Enable( event
.GetInt() == 0 );
1046 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1049 case ID_CHOICE_SEL_NUM
:
1051 m_choice
->SetSelection( 2 );
1052 m_choiceSorted
->SetSelection( 2 );
1055 case ID_CHOICE_SEL_STR
:
1057 m_choice
->SetStringSelection( "This" );
1058 m_choiceSorted
->SetStringSelection( "This" );
1061 case ID_CHOICE_CLEAR
:
1064 m_choiceSorted
->Clear();
1067 case ID_CHOICE_APPEND
:
1069 m_choice
->Append( "Hi!" );
1070 m_choiceSorted
->Append( "Hi!" );
1073 case ID_CHOICE_DELETE
:
1075 int idx
= m_choice
->GetSelection();
1076 if ( idx
!= wxNOT_FOUND
)
1077 m_choice
->Delete( idx
);
1078 idx
= m_choiceSorted
->GetSelection();
1079 if ( idx
!= wxNOT_FOUND
)
1080 m_choiceSorted
->Delete( idx
);
1083 case ID_CHOICE_FONT
:
1085 m_choice
->SetFont( *wxITALIC_FONT
);
1086 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1091 #endif // wxUSE_CHOICE
1093 void MyPanel::OnCombo( wxCommandEvent
&event
)
1095 m_text
->AppendText( "ComboBox event selection string is: " );
1096 m_text
->AppendText( event
.GetString() );
1097 m_text
->AppendText( "\n" );
1098 m_text
->AppendText( "ComboBox control selection string is: " );
1099 m_text
->AppendText( m_combo
->GetStringSelection() );
1100 m_text
->AppendText( "\n" );
1103 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1105 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1106 m_combo
->GetValue().c_str());
1109 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1111 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1112 m_combo
->GetValue().c_str());
1115 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1117 switch (event
.GetId())
1119 case ID_COMBO_ENABLE
:
1121 m_combo
->Enable( event
.GetInt() == 0 );
1124 case ID_COMBO_SEL_NUM
:
1126 m_combo
->SetSelection( 2 );
1129 case ID_COMBO_SEL_STR
:
1131 m_combo
->SetStringSelection( "This" );
1134 case ID_COMBO_CLEAR
:
1139 case ID_COMBO_APPEND
:
1141 m_combo
->Append( "Hi!" );
1144 case ID_COMBO_DELETE
:
1146 int idx
= m_combo
->GetSelection();
1147 m_combo
->Delete( idx
);
1152 m_combo
->SetFont( *wxITALIC_FONT
);
1158 void MyPanel::OnRadio( wxCommandEvent
&event
)
1160 m_text
->AppendText( "RadioBox selection string is: " );
1161 m_text
->AppendText( event
.GetString() );
1162 m_text
->AppendText( "\n" );
1165 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1167 switch (event
.GetId())
1169 case ID_RADIOBOX_ENABLE
:
1171 m_radio
->Enable( event
.GetInt() == 0 );
1174 case ID_RADIOBOX_SEL_NUM
:
1176 m_radio
->SetSelection( 2 );
1179 case ID_RADIOBOX_SEL_STR
:
1181 m_radio
->SetStringSelection( "This" );
1184 case ID_RADIOBOX_FONT
:
1186 m_radio
->SetFont( *wxITALIC_FONT
);
1192 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1194 m_fontButton
->SetFont( *wxITALIC_FONT
);
1195 m_text
->SetFont( *wxITALIC_FONT
);
1198 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1200 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1204 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1206 m_gauge
->SetValue( m_slider
->GetValue() );
1207 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1212 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1215 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1216 m_spinctrl
->GetValue(), event
.GetInt());
1217 m_text
->AppendText(s
);
1220 #endif // wxUSE_SPINCTRL
1223 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1226 value
.Printf( _T("Spin control up: current = %d\n"),
1227 m_spinbutton
->GetValue());
1229 if ( m_spinbutton
->GetValue() > 17 )
1231 value
+= _T("Preventing the spin button from going above 17.\n");
1236 m_text
->AppendText(value
);
1239 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1242 value
.Printf( _T("Spin control down: current = %d\n"),
1243 m_spinbutton
->GetValue());
1245 if ( m_spinbutton
->GetValue() < -17 )
1247 value
+= _T("Preventing the spin button from going below -17.\n");
1252 m_text
->AppendText(value
);
1255 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1258 value
.Printf( _T("%d"), event
.GetPosition() );
1259 m_spintext
->SetValue( value
);
1261 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1262 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1263 m_spinbutton
->GetValue());
1265 m_text
->AppendText(value
);
1268 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1270 event
.Enable( m_spinbutton
->GetValue() > 0 );
1273 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1275 int max
= m_spinbutton
->GetValue();
1276 wxProgressDialog
dialog("Progress dialog example",
1277 "An informative message",
1284 wxPD_ESTIMATED_TIME
|
1285 wxPD_REMAINING_TIME
);
1289 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1294 cont
= dialog
.Update(i
, "That's all, folks!");
1296 else if ( i
== max
/ 2 )
1298 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1302 cont
= dialog
.Update(i
);
1308 *m_text
<< "Progress dialog aborted!\n";
1312 *m_text
<< "Countdown from " << max
<< " finished.\n";
1316 #endif // wxUSE_SPINBTN
1320 //wxLog::RemoveTraceMask(_T("focus"));
1321 delete wxLog::SetActiveTarget(m_logTargetOld
);
1323 delete m_notebook
->GetImageList();
1326 //----------------------------------------------------------------------
1328 //----------------------------------------------------------------------
1330 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1331 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1332 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1333 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1335 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1336 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1337 #endif // wxUSE_TOOLTIPS
1339 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1341 EVT_SIZE(MyFrame::OnSize
)
1342 EVT_MOVE(MyFrame::OnMove
)
1344 EVT_IDLE(MyFrame::OnIdle
)
1347 MyFrame::MyFrame(const char *title
, int x
, int y
)
1348 : wxFrame(NULL
, -1, title
, wxPoint(x
, y
), wxSize(500, 430))
1351 // The wxICON() macros loads an icon from a resource under Windows
1352 // and uses an #included XPM image under GTK+ and Motif
1354 SetIcon( wxICON(mondrian
) );
1356 wxMenu
*file_menu
= new wxMenu
;
1358 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
1359 file_menu
->AppendSeparator();
1360 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
1361 file_menu
->AppendSeparator();
1362 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
1364 wxMenuBar
*menu_bar
= new wxMenuBar
;
1365 menu_bar
->Append(file_menu
, "&File");
1368 wxMenu
*tooltip_menu
= new wxMenu
;
1369 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
1370 tooltip_menu
->AppendSeparator();
1371 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
1372 "enable/disable tooltips", TRUE
);
1373 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
1374 menu_bar
->Append(tooltip_menu
, "&Tooltips");
1375 #endif // wxUSE_TOOLTIPS
1377 wxMenu
*panel_menu
= new wxMenu
;
1378 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
1379 "Enable/disable all panel controls", TRUE
);
1380 menu_bar
->Append(panel_menu
, "&Panel");
1382 SetMenuBar(menu_bar
);
1386 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1388 SetSizeHints( 500, 425 );
1391 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1396 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1400 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1404 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1406 m_panel
->m_text
->Clear();
1410 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1412 static long s_delay
= 5000;
1415 delay
.Printf( _T("%ld"), s_delay
);
1417 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1418 "Set tooltip delay",
1422 return; // cancelled
1424 wxSscanf(delay
, _T("%ld"), &s_delay
);
1426 wxToolTip::SetDelay(s_delay
);
1428 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1431 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1433 static bool s_enabled
= TRUE
;
1435 s_enabled
= !s_enabled
;
1437 wxToolTip::Enable(s_enabled
);
1439 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1443 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1445 static bool s_enable
= TRUE
;
1447 s_enable
= !s_enable
;
1448 m_panel
->Enable(s_enable
);
1451 void MyFrame::OnMove( wxMoveEvent
& event
)
1453 UpdateStatusBar(event
.GetPosition(), GetSize());
1458 void MyFrame::OnSize( wxSizeEvent
& event
)
1460 UpdateStatusBar(GetPosition(), event
.GetSize());
1465 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1467 // track the window which has the focus in the status bar
1468 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1469 wxWindow
*focus
= wxWindow::FindFocus();
1470 if ( focus
&& (focus
!= s_windowFocus
) )
1472 s_windowFocus
= focus
;
1477 _T("Focus: %s, HWND = %08x"),
1481 s_windowFocus
->GetClassInfo()->GetClassName()
1483 , s_windowFocus
->GetHWND()
1491 void MyComboBox::OnChar(wxKeyEvent
& event
)
1493 wxLogMessage(_T("MyComboBox::OnChar"));
1495 if ( event
.KeyCode() == 'w' )
1496 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1501 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1503 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1505 if ( event
.KeyCode() == 'w' )
1506 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1511 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1513 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1518 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
)
1520 size_t count
= control
->GetCount();
1521 for ( size_t n
= 0; n
< count
; n
++ )
1524 s
.Printf(wxT("%s client data for '%s'"),
1525 name
, control
->GetString(n
).c_str());
1527 control
->SetClientObject(n
, new wxStringClientData(s
));
1531 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
)
1533 size_t count
= control
->GetCount();
1534 for ( size_t n
= 0; n
< count
; n
++ )
1537 s
.Printf(wxT("%s client data for '%s'"),
1538 name
, control
->GetString(n
).c_str());
1540 control
->SetClientObject(n
, new wxStringClientData(s
));