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/notebook.h"
30 #include "wx/imaglist.h"
33 #include "wx/tooltip.h"
36 #if defined(__WXGTK__) || defined(__WXMOTIF__)
41 #include "mondrian.xpm"
42 #include "icons/choice.xpm"
43 #include "icons/combo.xpm"
44 #include "icons/list.xpm"
45 #include "icons/radio.xpm"
46 #include "icons/text.xpm"
47 #include "icons/gauge.xpm"
51 // Win16 doesn't have them
55 #define wxUSE_SPINBTN 0
58 #define wxUSE_SPINBTN 1
62 #include "wx/progdlg.h"
65 #include "wx/spinctrl.h"
66 #endif // wxUSE_SPINCTRL
68 //----------------------------------------------------------------------
70 //----------------------------------------------------------------------
72 class MyApp
: public wxApp
78 class MyPanel
: public wxPanel
81 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
84 void OnSize( wxSizeEvent
& event
);
85 void OnListBox( wxCommandEvent
&event
);
86 void OnListBoxDoubleClick( wxCommandEvent
&event
);
87 void OnListBoxButtons( wxCommandEvent
&event
);
88 void OnChoice( wxCommandEvent
&event
);
89 void OnChoiceButtons( wxCommandEvent
&event
);
90 void OnCombo( wxCommandEvent
&event
);
91 void OnComboTextChanged( wxCommandEvent
&event
);
92 void OnComboTextEnter( wxCommandEvent
&event
);
93 void OnComboButtons( wxCommandEvent
&event
);
94 void OnRadio( wxCommandEvent
&event
);
95 void OnRadioButtons( wxCommandEvent
&event
);
96 void OnSetFont( wxCommandEvent
&event
);
97 void OnPageChanged( wxNotebookEvent
&event
);
98 void OnPageChanging( wxNotebookEvent
&event
);
99 void OnSliderUpdate( wxCommandEvent
&event
);
100 void OnUpdateLabel( wxCommandEvent
&event
);
102 void OnSpinUp( wxSpinEvent
&event
);
103 void OnSpinDown( wxSpinEvent
&event
);
104 void OnSpinUpdate( wxSpinEvent
&event
);
105 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
106 void OnShowProgress( wxCommandEvent
&event
);
107 #endif // wxUSE_SPINBTN
110 void OnSpinCtrl(wxSpinEvent
& event
);
111 #endif // wxUSE_SPINCTRL
113 void OnEnableAll(wxCommandEvent
& event
);
114 void OnChangeColour(wxCommandEvent
& event
);
115 void OnTestButton(wxCommandEvent
& event
);
116 void OnBmpButton(wxCommandEvent
& event
);
118 wxListBox
*m_listbox
,
126 wxButton
*m_fontButton
;
127 wxButton
*m_lbSelectNum
;
128 wxButton
*m_lbSelectThis
;
130 wxSpinButton
*m_spinbutton
;
131 wxButton
*m_btnProgress
;
132 #endif // wxUSE_SPINBTN
135 wxSpinCtrl
*m_spinctrl
;
136 #endif // wxUSE_SPINCTRL
138 wxTextCtrl
*m_spintext
;
139 wxCheckBox
*m_checkbox
;
142 wxNotebook
*m_notebook
;
144 wxStaticText
*m_label
;
147 wxLog
*m_logTargetOld
;
149 DECLARE_EVENT_TABLE()
152 class MyFrame
: public wxFrame
155 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
157 void OnQuit(wxCommandEvent
& event
);
158 void OnAbout(wxCommandEvent
& event
);
159 void OnClearLog(wxCommandEvent
& event
);
162 void OnSetTooltipDelay(wxCommandEvent
& event
);
163 void OnToggleTooltips(wxCommandEvent
& event
);
164 #endif // wxUSE_TOOLTIPS
166 void OnEnableAll(wxCommandEvent
& event
);
168 void OnIdle( wxIdleEvent
& event
);
169 void OnSize( wxSizeEvent
& event
);
170 void OnMove( wxMoveEvent
& event
);
172 MyPanel
*GetPanel() const { return m_panel
; }
175 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
178 wxSize sizeCl
= GetClientSize();
179 msg
.Printf(_("pos=(%d, %d), size=%dx%d (client=%dx%d)"),
183 SetStatusText(msg
, 1);
188 DECLARE_EVENT_TABLE()
191 // a button which intercepts double clicks (for testing...)
192 class MyButton
: public wxButton
195 MyButton(wxWindow
*parent
,
197 const wxString
& label
= wxEmptyString
,
198 const wxPoint
& pos
= wxDefaultPosition
,
199 const wxSize
& size
= wxDefaultSize
)
200 : wxButton(parent
, id
, label
, pos
, size
)
204 void OnDClick(wxMouseEvent
& event
)
206 wxLogMessage(_T("MyButton::OnDClick"));
212 DECLARE_EVENT_TABLE()
215 // a combo which intercepts chars (to test Windows behaviour)
216 class MyComboBox
: public wxComboBox
219 MyComboBox(wxWindow
*parent
, wxWindowID id
,
220 const wxString
& value
= wxEmptyString
,
221 const wxPoint
& pos
= wxDefaultPosition
,
222 const wxSize
& size
= wxDefaultSize
,
223 int n
= 0, const wxString choices
[] = NULL
,
225 const wxValidator
& validator
= wxDefaultValidator
,
226 const wxString
& name
= wxComboBoxNameStr
)
227 : wxComboBox(parent
, id
, value
, pos
, size
, n
, choices
, style
,
231 void OnChar(wxKeyEvent
& event
);
232 void OnKeyDown(wxKeyEvent
& event
);
233 void OnKeyUp(wxKeyEvent
& event
);
234 void OnFocusGot(wxFocusEvent
& event
)
236 wxLogMessage(_T("MyComboBox::OnFocusGot"));
242 DECLARE_EVENT_TABLE()
245 // a radiobox which handles focus set/kill (for testing)
246 class MyRadioBox
: public wxRadioBox
249 MyRadioBox(wxWindow
*parent
,
251 const wxString
& title
= wxEmptyString
,
252 const wxPoint
& pos
= wxDefaultPosition
,
253 const wxSize
& size
= wxDefaultSize
,
254 int n
= 0, const wxString choices
[] = NULL
,
256 long style
= wxRA_HORIZONTAL
,
257 const wxValidator
& validator
= wxDefaultValidator
,
258 const wxString
& name
= wxComboBoxNameStr
)
259 : wxRadioBox(parent
, id
, title
, pos
, size
, n
, choices
, majorDim
,
260 style
, validator
, name
) { }
263 void OnFocusGot(wxFocusEvent
& event
)
265 wxLogMessage(_T("MyRadioBox::OnFocusGot"));
270 void OnFocusLost(wxFocusEvent
& event
)
272 wxLogMessage(_T("MyRadioBox::OnFocusLost"));
278 DECLARE_EVENT_TABLE()
281 //----------------------------------------------------------------------
283 //----------------------------------------------------------------------
285 static void SetControlClientData(const char *name
,
286 wxControlWithItems
*control
);
290 //----------------------------------------------------------------------
292 //----------------------------------------------------------------------
302 CONTROLS_SET_TOOLTIP_DELAY
= 200,
303 CONTROLS_ENABLE_TOOLTIPS
,
311 // parse the cmd line
316 wxSscanf(argv
[1], "%d", &x
);
317 wxSscanf(argv
[2], "%d", &y
);
320 // Create the main frame window
321 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
322 "Controls wxWindows App",
325 frame
->SetSizeHints( 500, 425 );
328 // The wxICON() macros loads an icon from a resource under Windows
329 // and uses an #included XPM image under GTK+ and Motif
331 frame
->SetIcon( wxICON(mondrian
) );
333 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
335 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
336 file_menu
->AppendSeparator();
337 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
338 file_menu
->AppendSeparator();
339 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
341 wxMenuBar
*menu_bar
= new wxMenuBar
;
342 menu_bar
->Append(file_menu
, "&File");
345 wxMenu
*tooltip_menu
= new wxMenu
;
346 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
347 tooltip_menu
->AppendSeparator();
348 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
349 "enable/disable tooltips", TRUE
);
350 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
351 menu_bar
->Append(tooltip_menu
, "&Tooltips");
352 #endif // wxUSE_TOOLTIPS
354 wxMenu
*panel_menu
= new wxMenu
;
355 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
356 "Enable/disable all panel controls", TRUE
);
357 menu_bar
->Append(panel_menu
, "&Panel");
359 frame
->SetMenuBar(menu_bar
);
363 //frame->GetPanel()->m_notebook->SetSelection(6);
370 //----------------------------------------------------------------------
372 //----------------------------------------------------------------------
374 const int ID_NOTEBOOK
= 1000;
376 const int ID_LISTBOX
= 130;
377 const int ID_LISTBOX_SEL_NUM
= 131;
378 const int ID_LISTBOX_SEL_STR
= 132;
379 const int ID_LISTBOX_CLEAR
= 133;
380 const int ID_LISTBOX_APPEND
= 134;
381 const int ID_LISTBOX_DELETE
= 135;
382 const int ID_LISTBOX_FONT
= 136;
383 const int ID_LISTBOX_ENABLE
= 137;
384 const int ID_LISTBOX_SORTED
= 138;
386 const int ID_CHOICE
= 120;
387 const int ID_CHOICE_SEL_NUM
= 121;
388 const int ID_CHOICE_SEL_STR
= 122;
389 const int ID_CHOICE_CLEAR
= 123;
390 const int ID_CHOICE_APPEND
= 124;
391 const int ID_CHOICE_DELETE
= 125;
392 const int ID_CHOICE_FONT
= 126;
393 const int ID_CHOICE_ENABLE
= 127;
394 const int ID_CHOICE_SORTED
= 128;
396 const int ID_COMBO
= 140;
397 const int ID_COMBO_SEL_NUM
= 141;
398 const int ID_COMBO_SEL_STR
= 142;
399 const int ID_COMBO_CLEAR
= 143;
400 const int ID_COMBO_APPEND
= 144;
401 const int ID_COMBO_DELETE
= 145;
402 const int ID_COMBO_FONT
= 146;
403 const int ID_COMBO_ENABLE
= 147;
405 const int ID_RADIOBOX
= 160;
406 const int ID_RADIOBOX_SEL_NUM
= 161;
407 const int ID_RADIOBOX_SEL_STR
= 162;
408 const int ID_RADIOBOX_FONT
= 163;
409 const int ID_RADIOBOX_ENABLE
= 164;
411 const int ID_RADIOBUTTON_1
= 166;
412 const int ID_RADIOBUTTON_2
= 167;
414 const int ID_SET_FONT
= 170;
416 const int ID_GAUGE
= 180;
417 const int ID_SLIDER
= 181;
419 const int ID_SPIN
= 182;
420 const int ID_BTNPROGRESS
= 183;
421 const int ID_BUTTON_LABEL
= 184;
422 const int ID_SPINCTRL
= 185;
424 const int ID_BUTTON_TEST1
= 190;
425 const int ID_BUTTON_TEST2
= 191;
426 const int ID_BITMAP_BTN
= 192;
428 const int ID_CHANGE_COLOUR
= 200;
430 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
431 EVT_SIZE ( MyPanel::OnSize
)
432 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
433 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
434 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
435 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
436 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
437 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
438 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
439 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
440 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
441 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
442 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
443 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
444 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
445 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
446 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
447 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
448 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
449 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
450 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
451 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
452 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
453 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
454 EVT_TEXT (ID_COMBO
, MyPanel::OnComboTextChanged
)
455 EVT_TEXT_ENTER(ID_COMBO
, MyPanel::OnComboTextEnter
)
456 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
457 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
458 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
459 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
460 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
461 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
462 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
463 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
464 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
465 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
466 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
467 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
468 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
469 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
471 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
472 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
473 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
474 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
475 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
476 #endif // wxUSE_SPINBTN
478 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
479 #endif // wxUSE_SPINCTRL
480 EVT_BUTTON (ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
481 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
482 EVT_BUTTON (ID_BUTTON_TEST1
, MyPanel::OnTestButton
)
483 EVT_BUTTON (ID_BUTTON_TEST2
, MyPanel::OnTestButton
)
484 EVT_BUTTON (ID_BITMAP_BTN
, MyPanel::OnBmpButton
)
487 BEGIN_EVENT_TABLE(MyButton
, wxButton
)
488 EVT_LEFT_DCLICK(MyButton::OnDClick
)
491 BEGIN_EVENT_TABLE(MyComboBox
, wxComboBox
)
492 EVT_CHAR(MyComboBox::OnChar
)
493 EVT_KEY_DOWN(MyComboBox::OnKeyDown
)
494 EVT_KEY_UP(MyComboBox::OnKeyUp
)
496 EVT_SET_FOCUS(MyComboBox::OnFocusGot
)
499 BEGIN_EVENT_TABLE(MyRadioBox
, wxRadioBox
)
500 EVT_SET_FOCUS(MyRadioBox::OnFocusGot
)
501 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost
)
504 // ============================================================================
506 // ============================================================================
508 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
509 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
510 m_text(NULL
), m_notebook(NULL
)
512 wxLayoutConstraints
*c
;
514 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
515 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
516 m_text
->SetBackgroundColour("wheat");
519 wxLog::AddTraceMask(_T("focus"));
520 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
522 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
537 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
540 // fill the image list
541 wxImageList
*imagelist
= new wxImageList(32, 32);
543 imagelist
-> Add( wxBitmap( list_xpm
));
544 imagelist
-> Add( wxBitmap( choice_xpm
));
545 imagelist
-> Add( wxBitmap( combo_xpm
));
546 imagelist
-> Add( wxBitmap( text_xpm
));
547 imagelist
-> Add( wxBitmap( radio_xpm
));
548 imagelist
-> Add( wxBitmap( gauge_xpm
));
549 m_notebook
->SetImageList(imagelist
);
550 #elif defined(__WXMSW__)
551 // load images from resources
554 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
556 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
558 static const char *s_iconNames
[Image_Max
] =
560 "list", "choice", "combo", "text", "radio", "gauge"
563 for ( size_t n
= 0; n
< Image_Max
; n
++ )
565 wxBitmap
bmp(s_iconNames
[n
]);
566 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
568 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
573 m_notebook
->SetImageList(imagelist
);
577 #define Image_List -1
578 #define Image_Choice -1
579 #define Image_Combo -1
580 #define Image_Text -1
581 #define Image_Radio -1
582 #define Image_Gauge -1
587 wxPanel
*panel
= new wxPanel(m_notebook
);
588 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
589 wxPoint(10,10), wxSize(120,70),
590 5, choices
, wxLB_ALWAYS_SB
);
591 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
592 wxPoint(10,90), wxSize(120,70),
593 5, choices
, wxLB_SORT
);
595 SetControlClientData("listbox", m_listbox
);
596 SetControlClientData("listbox", m_listboxSorted
);
598 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
600 m_listbox
->SetToolTip( "This is a list box" );
601 #endif // wxUSE_TOOLTIPS
603 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
604 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
605 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
606 (void)new MyButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
607 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
608 wxButton
*button
= new MyButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
610 button
->SetDefault();
612 button
->SetForegroundColour(*wxBLUE
);
615 button
->SetToolTip( "Press here to set italic font" );
616 #endif // wxUSE_TOOLTIPS
618 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
619 m_checkbox
->SetValue(FALSE
);
621 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
622 #endif // wxUSE_TOOLTIPS
623 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
625 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
626 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
628 panel
= new wxPanel(m_notebook
);
629 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
630 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
631 5, choices
, wxCB_SORT
);
633 SetControlClientData("choice", m_choice
);
634 SetControlClientData("choice", m_choiceSorted
);
636 m_choice
->SetSelection(2);
637 m_choice
->SetBackgroundColour( "red" );
638 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
639 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
640 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
641 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
642 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
643 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
644 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
646 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
648 panel
= new wxPanel(m_notebook
);
649 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
650 wxPoint(5, 5), wxSize(150, 100));
651 m_combo
= new MyComboBox( panel
, ID_COMBO
, "This",
652 wxPoint(20,25), wxSize(120, -1),
654 /* wxCB_READONLY | */ wxPROCESS_ENTER
);
656 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
657 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
658 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
659 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
660 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
661 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
662 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
663 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
665 wxString choices2
[] =
669 "Fourth", "Fifth", "Sixth",
670 "Seventh", "Eighth", "Nineth", "Tenth" */
673 panel
= new wxPanel(m_notebook
);
674 (void)new MyRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
675 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
678 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
679 m_radio
->SetToolTip("Ever seen a radiobox?");
680 #endif // wxUSE_TOOLTIPS
682 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
683 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
684 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
685 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
686 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
687 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
688 rb
->SetValue( FALSE
);
689 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
690 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
692 panel
= new wxPanel(m_notebook
);
693 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(200,130) );
694 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
695 m_gauge
->SetBackgroundColour(*wxGREEN
);
696 m_gauge
->SetForegroundColour(*wxRED
);
697 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
698 (void)new wxStaticBox( panel
, -1, "&Explanation", wxPoint(220,10), wxSize(270,130) );
700 // No wrapping text in wxStaticText yet :-(
701 (void)new wxStaticText( panel
, -1,
707 (void)new wxStaticText( panel
, -1,
708 "In order see the gauge (aka progress bar)\n"
709 "control do something you have to drag the\n"
710 "handle of the slider to the right.\n"
712 "This is also supposed to demonstrate how\n"
713 "to use static controls.\n",
718 int initialSpinValue
= -5;
720 s
<< initialSpinValue
;
721 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
723 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
724 m_spinbutton
->SetRange(-10,30);
725 m_spinbutton
->SetValue(initialSpinValue
);
727 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
729 #endif // wxUSE_SPINBTN
732 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
733 m_spinctrl
->SetRange(10,30);
734 m_spinctrl
->SetValue(15);
735 #endif // wxUSE_SPINCTRL
737 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
739 panel
= new wxPanel(m_notebook
);
741 #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
742 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
743 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
746 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
747 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
750 wxBitmap
bitmap( 100, 100 );
752 dc
.SelectObject( bitmap
);
753 dc
.SetPen(*wxGREEN_PEN
);
755 dc
.DrawEllipse(5, 5, 90, 90);
756 dc
.DrawText("Bitmap", 30, 40);
757 dc
.SelectObject( wxNullBitmap
);
759 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
762 // test for masked bitmap display
763 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
766 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
768 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
772 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
773 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
774 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
775 wxBitmapButton
*bmpBtn
= new wxBitmapButton
781 bmpBtn
->SetBitmapSelected(bmp2
);
782 bmpBtn
->SetBitmapFocus(bmp3
);
784 (void)new wxButton(panel
, ID_BUTTON_LABEL
, "&Toggle label", wxPoint(250, 20));
785 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
786 wxPoint(250, 60), wxDefaultSize
,
787 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
788 m_label
->SetForegroundColour( *wxBLUE
);
790 m_notebook
->AddPage(panel
, "wxBitmapXXX");
792 // layout constraints
794 panel
= new wxPanel(m_notebook
);
795 panel
->SetAutoLayout( TRUE
);
797 c
= new wxLayoutConstraints
;
798 c
->top
.SameAs( panel
, wxTop
, 10 );
800 c
->left
.SameAs( panel
, wxLeft
, 10 );
801 c
->width
.PercentOf( panel
, wxWidth
, 40 );
803 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
804 pMyButton
->SetConstraints( c
);
806 c
= new wxLayoutConstraints
;
807 c
->top
.SameAs( panel
, wxTop
, 10 );
808 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
809 c
->right
.SameAs( panel
, wxRight
, 10 );
810 c
->width
.PercentOf( panel
, wxWidth
, 40 );
812 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
813 pMyButton2
->SetConstraints( c
);
815 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
819 panel
= new wxPanel(m_notebook
);
820 panel
->SetAutoLayout( TRUE
);
822 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
824 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
825 sizer
->Add( 20,20, 1 );
826 sizer
->Add( new wxButton(panel
, -1, "Test Button &2" ), 3, wxGROW
|wxALL
, 10 );
828 panel
->SetSizer( sizer
);
830 m_notebook
->AddPage(panel
, "wxSizer");
833 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
837 GetClientSize( &x
, &y
);
839 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
840 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
843 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
845 int selOld
= event
.GetOldSelection();
848 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
849 "page change from taking place - if you select\n"
850 "[No] the current page will stay the third one\n",
852 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
860 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
863 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
865 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
868 void MyPanel::OnTestButton(wxCommandEvent
& event
)
870 wxLogMessage(_T("Button %c clicked."),
871 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
874 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
876 wxLogMessage(_T("Bitmap button clicked."));
879 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
881 static wxColour s_colOld
;
883 // test panel colour changing and propagation to the subcontrols
886 SetBackgroundColour(s_colOld
);
887 s_colOld
= wxNullColour
;
889 m_lbSelectThis
->SetForegroundColour("red");
890 m_lbSelectThis
->SetBackgroundColour("white");
894 s_colOld
= wxColour("red");
895 SetBackgroundColour("white");
897 m_lbSelectThis
->SetForegroundColour("white");
898 m_lbSelectThis
->SetBackgroundColour("red");
901 m_lbSelectThis
->Refresh();
905 void MyPanel::OnListBox( wxCommandEvent
&event
)
907 // GetParent()->Move(100, 100);
909 if (event
.GetInt() == -1)
911 m_text
->AppendText( "ListBox has no selections anymore\n" );
915 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
918 m_text
->AppendText( "ListBox event selection string is: '" );
919 m_text
->AppendText( event
.GetString() );
920 m_text
->AppendText( "'\n" );
921 m_text
->AppendText( "ListBox control selection string is: '" );
922 m_text
->AppendText( listbox
->GetStringSelection() );
923 m_text
->AppendText( "'\n" );
925 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
926 m_text
->AppendText( "ListBox event client data string is: '" );
927 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
928 m_text
->AppendText( obj
->GetData() );
930 m_text
->AppendText( wxString("none") );
932 m_text
->AppendText( "'\n" );
933 m_text
->AppendText( "ListBox control client data string is: '" );
934 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
936 m_text
->AppendText( obj
->GetData() );
938 m_text
->AppendText( wxString("none") );
939 m_text
->AppendText( "'\n" );
942 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
944 m_text
->AppendText( "ListBox double click string is: " );
945 m_text
->AppendText( event
.GetString() );
946 m_text
->AppendText( "\n" );
949 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
951 switch (event
.GetId())
953 case ID_LISTBOX_ENABLE
:
955 m_text
->AppendText("Checkbox clicked.\n");
956 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
959 cb
->SetToolTip( "Click to enable listbox" );
961 cb
->SetToolTip( "Click to disable listbox" );
962 #endif // wxUSE_TOOLTIPS
963 m_listbox
->Enable( event
.GetInt() == 0 );
964 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
965 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
966 m_listboxSorted
->Enable( event
.GetInt() == 0 );
967 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
970 case ID_LISTBOX_SEL_NUM
:
972 m_listbox
->SetSelection( 2 );
973 m_listboxSorted
->SetSelection( 2 );
974 m_lbSelectThis
->WarpPointer( 40, 14 );
977 case ID_LISTBOX_SEL_STR
:
979 m_listbox
->SetStringSelection( "This" );
980 m_listboxSorted
->SetStringSelection( "This" );
981 m_lbSelectNum
->WarpPointer( 40, 14 );
984 case ID_LISTBOX_CLEAR
:
987 m_listboxSorted
->Clear();
990 case ID_LISTBOX_APPEND
:
992 m_listbox
->Append( "Hi!" );
993 m_listboxSorted
->Append( "Hi!" );
996 case ID_LISTBOX_DELETE
:
999 idx
= m_listbox
->GetSelection();
1000 if ( idx
!= wxNOT_FOUND
)
1001 m_listbox
->Delete( idx
);
1002 idx
= m_listboxSorted
->GetSelection();
1003 if ( idx
!= wxNOT_FOUND
)
1004 m_listboxSorted
->Delete( idx
);
1007 case ID_LISTBOX_FONT
:
1009 m_listbox
->SetFont( *wxITALIC_FONT
);
1010 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1011 m_checkbox
->SetFont( *wxITALIC_FONT
);
1017 void MyPanel::OnChoice( wxCommandEvent
&event
)
1019 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1022 m_text
->AppendText( "Choice event selection string is: '" );
1023 m_text
->AppendText( event
.GetString() );
1024 m_text
->AppendText( "'\n" );
1025 m_text
->AppendText( "Choice control selection string is: '" );
1026 m_text
->AppendText( choice
->GetStringSelection() );
1027 m_text
->AppendText( "'\n" );
1029 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1030 m_text
->AppendText( "Choice event client data string is: '" );
1033 m_text
->AppendText( obj
->GetData() );
1035 m_text
->AppendText( wxString("none") );
1037 m_text
->AppendText( "'\n" );
1038 m_text
->AppendText( "Choice control client data string is: '" );
1039 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1042 m_text
->AppendText( obj
->GetData() );
1044 m_text
->AppendText( wxString("none") );
1045 m_text
->AppendText( "'\n" );
1048 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1050 switch (event
.GetId())
1052 case ID_CHOICE_ENABLE
:
1054 m_choice
->Enable( event
.GetInt() == 0 );
1055 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1058 case ID_CHOICE_SEL_NUM
:
1060 m_choice
->SetSelection( 2 );
1061 m_choiceSorted
->SetSelection( 2 );
1064 case ID_CHOICE_SEL_STR
:
1066 m_choice
->SetStringSelection( "This" );
1067 m_choiceSorted
->SetStringSelection( "This" );
1070 case ID_CHOICE_CLEAR
:
1073 m_choiceSorted
->Clear();
1076 case ID_CHOICE_APPEND
:
1078 m_choice
->Append( "Hi!" );
1079 m_choiceSorted
->Append( "Hi!" );
1082 case ID_CHOICE_DELETE
:
1084 int idx
= m_choice
->GetSelection();
1085 if ( idx
!= wxNOT_FOUND
)
1086 m_choice
->Delete( idx
);
1087 idx
= m_choiceSorted
->GetSelection();
1088 if ( idx
!= wxNOT_FOUND
)
1089 m_choiceSorted
->Delete( idx
);
1092 case ID_CHOICE_FONT
:
1094 m_choice
->SetFont( *wxITALIC_FONT
);
1095 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1101 void MyPanel::OnCombo( wxCommandEvent
&event
)
1103 m_text
->AppendText( "ComboBox event selection string is: " );
1104 m_text
->AppendText( event
.GetString() );
1105 m_text
->AppendText( "\n" );
1106 m_text
->AppendText( "ComboBox control selection string is: " );
1107 m_text
->AppendText( m_combo
->GetStringSelection() );
1108 m_text
->AppendText( "\n" );
1111 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1113 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1114 m_combo
->GetValue().c_str());
1117 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1119 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1120 m_combo
->GetValue().c_str());
1123 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1125 switch (event
.GetId())
1127 case ID_COMBO_ENABLE
:
1129 m_combo
->Enable( event
.GetInt() == 0 );
1132 case ID_COMBO_SEL_NUM
:
1134 m_combo
->SetSelection( 2 );
1137 case ID_COMBO_SEL_STR
:
1139 m_combo
->SetStringSelection( "This" );
1142 case ID_COMBO_CLEAR
:
1147 case ID_COMBO_APPEND
:
1149 m_combo
->Append( "Hi!" );
1152 case ID_COMBO_DELETE
:
1154 int idx
= m_combo
->GetSelection();
1155 m_combo
->Delete( idx
);
1160 m_combo
->SetFont( *wxITALIC_FONT
);
1166 void MyPanel::OnRadio( wxCommandEvent
&event
)
1168 m_text
->AppendText( "RadioBox selection string is: " );
1169 m_text
->AppendText( event
.GetString() );
1170 m_text
->AppendText( "\n" );
1173 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1175 switch (event
.GetId())
1177 case ID_RADIOBOX_ENABLE
:
1179 m_radio
->Enable( event
.GetInt() == 0 );
1182 case ID_RADIOBOX_SEL_NUM
:
1184 m_radio
->SetSelection( 2 );
1187 case ID_RADIOBOX_SEL_STR
:
1189 m_radio
->SetStringSelection( "This" );
1192 case ID_RADIOBOX_FONT
:
1194 m_radio
->SetFont( *wxITALIC_FONT
);
1200 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1202 m_fontButton
->SetFont( *wxITALIC_FONT
);
1203 m_text
->SetFont( *wxITALIC_FONT
);
1206 void MyPanel::OnUpdateLabel( wxCommandEvent
&WXUNUSED(event
) )
1208 static bool s_long
= TRUE
;
1211 m_label
->SetLabel(s_long
? "Very very very very very long text." : "Shorter text.");
1214 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1216 m_gauge
->SetValue( m_slider
->GetValue() );
1221 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1224 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1225 m_spinctrl
->GetValue(), event
.GetInt());
1226 m_text
->AppendText(s
);
1229 #endif // wxUSE_SPINCTRL
1232 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1235 value
.Printf( _T("Spin control up: current = %d\n"),
1236 m_spinbutton
->GetValue());
1238 if ( m_spinbutton
->GetValue() > 17 )
1240 value
+= _T("Preventing the spin button from going above 17.\n");
1245 m_text
->AppendText(value
);
1248 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1251 value
.Printf( _T("Spin control down: current = %d\n"),
1252 m_spinbutton
->GetValue());
1254 if ( m_spinbutton
->GetValue() < -17 )
1256 value
+= _T("Preventing the spin button from going below -17.\n");
1261 m_text
->AppendText(value
);
1264 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1267 value
.Printf( _T("%d"), event
.GetPosition() );
1268 m_spintext
->SetValue( value
);
1270 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1271 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1272 m_spinbutton
->GetValue());
1274 m_text
->AppendText(value
);
1277 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1279 event
.Enable( m_spinbutton
->GetValue() > 0 );
1282 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1284 int max
= m_spinbutton
->GetValue();
1285 wxProgressDialog
dialog("Progress dialog example",
1286 "An informative message",
1293 wxPD_ESTIMATED_TIME
|
1294 wxPD_REMAINING_TIME
);
1298 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1303 cont
= dialog
.Update(i
, "That's all, folks!");
1305 else if ( i
== max
/ 2 )
1307 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1311 cont
= dialog
.Update(i
);
1317 *m_text
<< "Progress dialog aborted!\n";
1321 *m_text
<< "Countdown from " << max
<< " finished.\n";
1325 #endif // wxUSE_SPINBTN
1329 //wxLog::RemoveTraceMask(_T("focus"));
1330 delete wxLog::SetActiveTarget(m_logTargetOld
);
1332 delete m_notebook
->GetImageList();
1335 //----------------------------------------------------------------------
1337 //----------------------------------------------------------------------
1339 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1340 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1341 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1342 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1344 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1345 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1346 #endif // wxUSE_TOOLTIPS
1348 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1350 EVT_SIZE(MyFrame::OnSize
)
1351 EVT_MOVE(MyFrame::OnMove
)
1353 EVT_IDLE(MyFrame::OnIdle
)
1356 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1357 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1361 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1364 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1369 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1373 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1377 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1379 m_panel
->m_text
->Clear();
1383 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1385 static long s_delay
= 5000;
1388 delay
.Printf( _T("%ld"), s_delay
);
1390 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1391 "Set tooltip delay",
1395 return; // cancelled
1397 wxSscanf(delay
, _T("%ld"), &s_delay
);
1399 wxToolTip::SetDelay(s_delay
);
1401 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1404 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1406 static bool s_enabled
= TRUE
;
1408 s_enabled
= !s_enabled
;
1410 wxToolTip::Enable(s_enabled
);
1412 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1416 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1418 static bool s_enable
= TRUE
;
1420 s_enable
= !s_enable
;
1421 m_panel
->Enable(s_enable
);
1424 void MyFrame::OnMove( wxMoveEvent
& event
)
1426 UpdateStatusBar(event
.GetPosition(), GetSize());
1431 void MyFrame::OnSize( wxSizeEvent
& event
)
1433 UpdateStatusBar(GetPosition(), event
.GetSize());
1438 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1440 // track the window which has the focus in the status bar
1441 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1442 wxWindow
*focus
= wxWindow::FindFocus();
1443 if ( focus
&& (focus
!= s_windowFocus
) )
1445 s_windowFocus
= focus
;
1450 _T("Focus: %s, HWND = %08x"),
1454 s_windowFocus
->GetClassInfo()->GetClassName()
1456 , s_windowFocus
->GetHWND()
1464 void MyComboBox::OnChar(wxKeyEvent
& event
)
1466 wxLogMessage(_T("MyComboBox::OnChar"));
1468 if ( event
.KeyCode() == 'w' )
1469 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1474 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1476 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1478 if ( event
.KeyCode() == 'w' )
1479 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1484 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1486 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1491 static void SetControlClientData(const char *name
,
1492 wxControlWithItems
*control
)
1494 size_t count
= control
->GetCount();
1495 for ( size_t n
= 0; n
< count
; n
++ )
1498 s
.Printf("%s client data for '%s'",
1499 name
, control
->GetString(n
).c_str());
1501 control
->SetClientObject(n
, new wxStringClientData(s
));