1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Controls wxWindows sample
4 // Author: Robert Roebling
7 // Copyright: (c) Robert Roebling, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
12 #pragma implementation "controls.h"
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
26 #if !defined( __WXMSW__ ) || defined( __WIN95__ )
27 #include "wx/spinbutt.h"
29 #include "wx/tglbtn.h"
30 #include "wx/notebook.h"
31 #include "wx/imaglist.h"
32 #include "wx/artprov.h"
35 #include "wx/tooltip.h"
38 #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
43 #include "mondrian.xpm"
44 #include "icons/choice.xpm"
45 #include "icons/combo.xpm"
46 #include "icons/list.xpm"
47 #include "icons/radio.xpm"
48 #include "icons/text.xpm"
49 #include "icons/gauge.xpm"
53 // Win16 doesn't have them
57 #define wxUSE_SPINBTN 0
60 #define wxUSE_SPINBTN 1
64 #include "wx/progdlg.h"
67 #include "wx/spinctrl.h"
68 #endif // wxUSE_SPINCTRL
70 //----------------------------------------------------------------------
72 //----------------------------------------------------------------------
74 class MyApp
: public wxApp
80 class MyPanel
: public wxPanel
83 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
86 void OnSize( wxSizeEvent
& event
);
87 void OnListBox( wxCommandEvent
&event
);
88 void OnListBoxDoubleClick( wxCommandEvent
&event
);
89 void OnListBoxButtons( wxCommandEvent
&event
);
91 void OnChoice( wxCommandEvent
&event
);
92 void OnChoiceButtons( wxCommandEvent
&event
);
94 void OnCombo( wxCommandEvent
&event
);
95 void OnComboTextChanged( wxCommandEvent
&event
);
96 void OnComboTextEnter( wxCommandEvent
&event
);
97 void OnComboButtons( wxCommandEvent
&event
);
98 void OnRadio( wxCommandEvent
&event
);
99 void OnRadioButtons( wxCommandEvent
&event
);
100 void OnSetFont( wxCommandEvent
&event
);
101 void OnPageChanged( wxNotebookEvent
&event
);
102 void OnPageChanging( wxNotebookEvent
&event
);
103 void OnSliderUpdate( wxCommandEvent
&event
);
104 void OnUpdateLabel( wxCommandEvent
&event
);
106 void OnSpinUp( wxSpinEvent
&event
);
107 void OnSpinDown( wxSpinEvent
&event
);
108 void OnSpinUpdate( wxSpinEvent
&event
);
109 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
110 void OnShowProgress( wxCommandEvent
&event
);
111 #endif // wxUSE_SPINBTN
114 void OnSpinCtrl(wxSpinEvent
& event
);
115 void OnSpinCtrlUp(wxSpinEvent
& event
);
116 void OnSpinCtrlDown(wxSpinEvent
& event
);
117 void OnSpinCtrlText(wxCommandEvent
& event
);
118 #endif // wxUSE_SPINCTRL
120 void OnEnableAll(wxCommandEvent
& event
);
121 void OnChangeColour(wxCommandEvent
& event
);
122 void OnTestButton(wxCommandEvent
& event
);
123 void OnBmpButton(wxCommandEvent
& event
);
125 wxListBox
*m_listbox
,
136 wxButton
*m_fontButton
;
137 wxButton
*m_lbSelectNum
;
138 wxButton
*m_lbSelectThis
;
140 wxSpinButton
*m_spinbutton
;
141 wxButton
*m_btnProgress
;
142 #endif // wxUSE_SPINBTN
145 wxSpinCtrl
*m_spinctrl
;
146 #endif // wxUSE_SPINCTRL
148 wxTextCtrl
*m_spintext
;
149 wxCheckBox
*m_checkbox
;
152 wxNotebook
*m_notebook
;
154 wxStaticText
*m_label
;
157 wxLog
*m_logTargetOld
;
159 DECLARE_EVENT_TABLE()
162 class MyFrame
: public wxFrame
165 MyFrame(const char *title
, int x
, int y
);
167 void OnQuit(wxCommandEvent
& event
);
168 void OnAbout(wxCommandEvent
& event
);
169 void OnClearLog(wxCommandEvent
& event
);
172 void OnSetTooltipDelay(wxCommandEvent
& event
);
173 void OnToggleTooltips(wxCommandEvent
& event
);
174 #endif // wxUSE_TOOLTIPS
176 void OnEnableAll(wxCommandEvent
& event
);
178 void OnIdle( wxIdleEvent
& event
);
179 void OnSize( wxSizeEvent
& event
);
180 void OnMove( wxMoveEvent
& event
);
182 MyPanel
*GetPanel() const { return m_panel
; }
185 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
187 if ( m_frameStatusBar
)
190 wxSize sizeAll
= GetSize(),
191 sizeCl
= GetClientSize();
192 msg
.Printf(_("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)"),
195 sizeAll
.x
, sizeAll
.y
,
197 SetStatusText(msg
, 1);
203 DECLARE_EVENT_TABLE()
206 // a button which intercepts double clicks (for testing...)
207 class MyButton
: public wxButton
210 MyButton(wxWindow
*parent
,
212 const wxString
& label
= wxEmptyString
,
213 const wxPoint
& pos
= wxDefaultPosition
,
214 const wxSize
& size
= wxDefaultSize
)
215 : wxButton(parent
, id
, label
, pos
, size
)
219 void OnDClick(wxMouseEvent
& event
)
221 wxLogMessage(_T("MyButton::OnDClick"));
227 DECLARE_EVENT_TABLE()
230 // a combo which intercepts chars (to test Windows behaviour)
231 class MyComboBox
: public wxComboBox
234 MyComboBox(wxWindow
*parent
, wxWindowID id
,
235 const wxString
& value
= wxEmptyString
,
236 const wxPoint
& pos
= wxDefaultPosition
,
237 const wxSize
& size
= wxDefaultSize
,
238 int n
= 0, const wxString choices
[] = NULL
,
240 const wxValidator
& validator
= wxDefaultValidator
,
241 const wxString
& name
= wxComboBoxNameStr
)
242 : wxComboBox(parent
, id
, value
, pos
, size
, n
, choices
, style
,
246 void OnChar(wxKeyEvent
& event
);
247 void OnKeyDown(wxKeyEvent
& event
);
248 void OnKeyUp(wxKeyEvent
& event
);
249 void OnFocusGot(wxFocusEvent
& event
)
251 wxLogMessage(_T("MyComboBox::OnFocusGot"));
257 DECLARE_EVENT_TABLE()
260 // a radiobox which handles focus set/kill (for testing)
261 class MyRadioBox
: public wxRadioBox
264 MyRadioBox(wxWindow
*parent
,
266 const wxString
& title
= wxEmptyString
,
267 const wxPoint
& pos
= wxDefaultPosition
,
268 const wxSize
& size
= wxDefaultSize
,
269 int n
= 0, const wxString choices
[] = NULL
,
271 long style
= wxRA_HORIZONTAL
,
272 const wxValidator
& validator
= wxDefaultValidator
,
273 const wxString
& name
= wxRadioBoxNameStr
)
274 : wxRadioBox(parent
, id
, title
, pos
, size
, n
, choices
, majorDim
,
275 style
, validator
, name
) { SetForegroundColour(*wxRED
); }
278 void OnFocusGot(wxFocusEvent
& event
)
280 wxLogMessage(_T("MyRadioBox::OnFocusGot"));
285 void OnFocusLost(wxFocusEvent
& event
)
287 wxLogMessage(_T("MyRadioBox::OnFocusLost"));
293 DECLARE_EVENT_TABLE()
296 //----------------------------------------------------------------------
298 //----------------------------------------------------------------------
300 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
);
301 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
);
305 //----------------------------------------------------------------------
307 //----------------------------------------------------------------------
317 CONTROLS_SET_TOOLTIP_DELAY
= 200,
318 CONTROLS_ENABLE_TOOLTIPS
,
326 // use standard command line handling:
327 if ( !wxApp::OnInit() )
330 // parse the cmd line
335 wxSscanf(wxString(argv
[1]), wxT("%d"), &x
);
336 wxSscanf(wxString(argv
[2]), wxT("%d"), &y
);
339 // Create the main frame window
340 MyFrame
*frame
= new MyFrame("Controls wxWindows App", x
, y
);
346 //----------------------------------------------------------------------
348 //----------------------------------------------------------------------
350 const int ID_NOTEBOOK
= 1000;
352 const int ID_LISTBOX
= 130;
353 const int ID_LISTBOX_SEL_NUM
= 131;
354 const int ID_LISTBOX_SEL_STR
= 132;
355 const int ID_LISTBOX_CLEAR
= 133;
356 const int ID_LISTBOX_APPEND
= 134;
357 const int ID_LISTBOX_DELETE
= 135;
358 const int ID_LISTBOX_FONT
= 136;
359 const int ID_LISTBOX_ENABLE
= 137;
360 const int ID_LISTBOX_SORTED
= 138;
362 const int ID_CHOICE
= 120;
363 const int ID_CHOICE_SEL_NUM
= 121;
364 const int ID_CHOICE_SEL_STR
= 122;
365 const int ID_CHOICE_CLEAR
= 123;
366 const int ID_CHOICE_APPEND
= 124;
367 const int ID_CHOICE_DELETE
= 125;
368 const int ID_CHOICE_FONT
= 126;
369 const int ID_CHOICE_ENABLE
= 127;
370 const int ID_CHOICE_SORTED
= 128;
372 const int ID_COMBO
= 140;
373 const int ID_COMBO_SEL_NUM
= 141;
374 const int ID_COMBO_SEL_STR
= 142;
375 const int ID_COMBO_CLEAR
= 143;
376 const int ID_COMBO_APPEND
= 144;
377 const int ID_COMBO_DELETE
= 145;
378 const int ID_COMBO_FONT
= 146;
379 const int ID_COMBO_ENABLE
= 147;
381 const int ID_RADIOBOX
= 160;
382 const int ID_RADIOBOX_SEL_NUM
= 161;
383 const int ID_RADIOBOX_SEL_STR
= 162;
384 const int ID_RADIOBOX_FONT
= 163;
385 const int ID_RADIOBOX_ENABLE
= 164;
387 const int ID_RADIOBUTTON_1
= 166;
388 const int ID_RADIOBUTTON_2
= 167;
390 const int ID_SET_FONT
= 170;
392 const int ID_GAUGE
= 180;
393 const int ID_SLIDER
= 181;
395 const int ID_SPIN
= 182;
396 const int ID_BTNPROGRESS
= 183;
397 const int ID_BUTTON_LABEL
= 184;
398 const int ID_SPINCTRL
= 185;
400 const int ID_BUTTON_TEST1
= 190;
401 const int ID_BUTTON_TEST2
= 191;
402 const int ID_BITMAP_BTN
= 192;
404 const int ID_CHANGE_COLOUR
= 200;
406 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
407 EVT_SIZE ( MyPanel::OnSize
)
408 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
409 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
410 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
411 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
412 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
413 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
414 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
415 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
416 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
417 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
418 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
419 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
421 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
422 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
423 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
424 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
425 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
426 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
427 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
428 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
429 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
431 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
432 EVT_TEXT (ID_COMBO
, MyPanel::OnComboTextChanged
)
433 EVT_TEXT_ENTER(ID_COMBO
, MyPanel::OnComboTextEnter
)
434 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
435 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
436 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
437 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
438 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
439 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
440 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
441 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
442 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
443 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
444 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
445 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
446 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
447 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
449 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
450 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
451 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
452 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
453 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
454 #endif // wxUSE_SPINBTN
456 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
457 EVT_SPIN_UP (ID_SPINCTRL
, MyPanel::OnSpinCtrlUp
)
458 EVT_SPIN_DOWN (ID_SPINCTRL
, MyPanel::OnSpinCtrlDown
)
459 EVT_TEXT (ID_SPINCTRL
, MyPanel::OnSpinCtrlText
)
460 #endif // wxUSE_SPINCTRL
462 EVT_TOGGLEBUTTON(ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
463 #endif // wxUSE_TOGGLEBTN
464 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
465 EVT_BUTTON (ID_BUTTON_TEST1
, MyPanel::OnTestButton
)
466 EVT_BUTTON (ID_BUTTON_TEST2
, MyPanel::OnTestButton
)
467 EVT_BUTTON (ID_BITMAP_BTN
, MyPanel::OnBmpButton
)
470 BEGIN_EVENT_TABLE(MyButton
, wxButton
)
471 EVT_LEFT_DCLICK(MyButton::OnDClick
)
474 BEGIN_EVENT_TABLE(MyComboBox
, wxComboBox
)
475 EVT_CHAR(MyComboBox::OnChar
)
476 EVT_KEY_DOWN(MyComboBox::OnKeyDown
)
477 EVT_KEY_UP(MyComboBox::OnKeyUp
)
479 EVT_SET_FOCUS(MyComboBox::OnFocusGot
)
482 BEGIN_EVENT_TABLE(MyRadioBox
, wxRadioBox
)
483 EVT_SET_FOCUS(MyRadioBox::OnFocusGot
)
484 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost
)
487 // ============================================================================
489 // ============================================================================
491 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
492 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) )
495 m_listboxSorted
= NULL
;
498 m_choiceSorted
= NULL
;
506 m_lbSelectNum
= NULL
;
507 m_lbSelectThis
= NULL
;
510 m_btnProgress
= NULL
;
511 #endif // wxUSE_SPINBTN
514 #endif // wxUSE_SPINCTRL
521 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
522 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
523 m_text
->SetBackgroundColour(wxT("wheat"));
526 wxLog::AddTraceMask(_T("focus"));
527 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
529 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
544 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
547 // fill the image list
548 wxImageList
*imagelist
= new wxImageList(32, 32);
550 imagelist
-> Add( wxBitmap( list_xpm
));
551 imagelist
-> Add( wxBitmap( choice_xpm
));
552 imagelist
-> Add( wxBitmap( combo_xpm
));
553 imagelist
-> Add( wxBitmap( text_xpm
));
554 imagelist
-> Add( wxBitmap( radio_xpm
));
555 imagelist
-> Add( wxBitmap( gauge_xpm
));
556 m_notebook
->SetImageList(imagelist
);
557 #elif defined(__WXMSW__)
558 // load images from resources
561 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
563 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
565 static const char *s_iconNames
[Image_Max
] =
567 "list", "choice", "combo", "text", "radio", "gauge"
570 for ( size_t n
= 0; n
< Image_Max
; n
++ )
572 wxBitmap
bmp(s_iconNames
[n
]);
573 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
575 wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."),
580 m_notebook
->SetImageList(imagelist
);
584 #define Image_List -1
585 #define Image_Choice -1
586 #define Image_Combo -1
587 #define Image_Text -1
588 #define Image_Radio -1
589 #define Image_Gauge -1
594 wxPanel
*panel
= new wxPanel(m_notebook
);
595 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
596 wxPoint(10,10), wxSize(120,70),
597 5, choices
, wxLB_ALWAYS_SB
);
598 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
599 wxPoint(10,90), wxSize(120,70),
600 5, choices
, wxLB_SORT
);
602 SetListboxClientData(wxT("listbox"), m_listbox
);
603 SetListboxClientData(wxT("listbox"), m_listboxSorted
);
605 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
607 m_listbox
->SetToolTip( "This is a list box" );
608 #endif // wxUSE_TOOLTIPS
610 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
611 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
612 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
613 (void)new MyButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
614 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
615 wxButton
*button
= new MyButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
617 button
->SetDefault();
619 button
->SetForegroundColour(*wxBLUE
);
622 button
->SetToolTip( "Press here to set italic font" );
623 #endif // wxUSE_TOOLTIPS
625 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
626 m_checkbox
->SetValue(FALSE
);
628 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
629 #endif // wxUSE_TOOLTIPS
630 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
632 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
633 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
636 panel
= new wxPanel(m_notebook
);
637 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
638 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
639 5, choices
, wxCB_SORT
);
641 SetChoiceClientData(wxT("choice"), m_choice
);
642 SetChoiceClientData(wxT("choice"), m_choiceSorted
);
644 m_choice
->SetSelection(2);
645 m_choice
->SetBackgroundColour( wxT("red") );
646 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
647 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
648 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
649 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
650 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
651 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
652 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
654 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
655 #endif // wxUSE_CHOICE
657 panel
= new wxPanel(m_notebook
);
658 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
659 wxPoint(5, 5), wxSize(150, 100));
660 m_combo
= new MyComboBox( panel
, ID_COMBO
, "This",
661 wxPoint(20,25), wxSize(120, -1),
663 /* wxCB_READONLY | */ wxPROCESS_ENTER
);
665 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
666 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
667 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
668 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
669 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
670 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
671 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
672 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
674 wxString choices2
[] =
678 "Fourth", "Fifth", "Sixth",
679 "Seventh", "Eighth", "Nineth", "Tenth" */
682 panel
= new wxPanel(m_notebook
);
683 (void)new MyRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
684 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
685 m_radio
->SetForegroundColour(*wxRED
);
688 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
689 m_radio
->SetToolTip("Ever seen a radiobox?");
690 #endif // wxUSE_TOOLTIPS
692 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
693 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
694 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
695 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
696 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
697 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
698 rb
->SetValue( FALSE
);
699 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
700 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
702 panel
= new wxPanel(m_notebook
);
703 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
704 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
705 m_gauge
->SetBackgroundColour(*wxGREEN
);
706 m_gauge
->SetForegroundColour(*wxRED
);
707 m_gaugeVert
= new wxGauge( panel
, -1, 100,
708 wxPoint(195,35), wxSize(30, 90),
709 wxGA_VERTICAL
| wxGA_SMOOTH
| wxNO_BORDER
);
710 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
711 wxSL_AUTOTICKS
| wxSL_LABELS
);
712 m_slider
->SetTickFreq(40, 0);
714 m_slider
->SetToolTip(_T("This is a sliding slider"));
715 #endif // wxUSE_TOOLTIPS
717 (void)new wxStaticBox( panel
, -1, "&Explanation",
718 wxPoint(230,10), wxSize(270,130),
722 // No wrapping text in wxStaticText yet :-(
723 (void)new wxStaticText( panel
, -1,
729 (void)new wxStaticText( panel
, -1,
730 "In order see the gauge (aka progress bar)\n"
731 "control do something you have to drag the\n"
732 "handle of the slider to the right.\n"
734 "This is also supposed to demonstrate how\n"
735 "to use static controls.\n",
740 int initialSpinValue
= -5;
742 s
<< initialSpinValue
;
743 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
745 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
746 m_spinbutton
->SetRange(-40,30);
747 m_spinbutton
->SetValue(initialSpinValue
);
749 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
751 #endif // wxUSE_SPINBTN
754 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
755 m_spinctrl
->SetRange(10,30);
756 m_spinctrl
->SetValue(15);
757 #endif // wxUSE_SPINCTRL
759 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
761 panel
= new wxPanel(m_notebook
);
763 #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
764 wxIcon icon
= wxArtProvider::GetIcon(wxART_INFORMATION
);
765 (void) new wxStaticBitmap( panel
, -1, icon
, wxPoint(10, 10) );
767 // VZ: don't leak memory
768 // bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10));
769 // bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION));
772 wxBitmap
bitmap( 100, 100 );
774 dc
.SelectObject( bitmap
);
775 dc
.SetPen(*wxGREEN_PEN
);
777 dc
.DrawEllipse(5, 5, 90, 90);
778 dc
.DrawText("Bitmap", 30, 40);
779 dc
.SelectObject( wxNullBitmap
);
781 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
784 // test for masked bitmap display
785 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
788 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
790 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
794 wxBitmap
bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION
)),
795 bmp2(wxArtProvider::GetBitmap(wxART_WARNING
)),
796 bmp3(wxArtProvider::GetBitmap(wxART_QUESTION
));
797 wxBitmapButton
*bmpBtn
= new wxBitmapButton
804 bmpBtn
->SetBitmapSelected(bmp2
);
805 bmpBtn
->SetBitmapFocus(bmp3
);
808 (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
,
809 "&Toggle label", wxPoint(250, 20));
810 #endif // wxUSE_TOGGLEBTN
812 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
813 wxPoint(250, 60), wxDefaultSize
,
814 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
815 m_label
->SetForegroundColour( *wxBLUE
);
817 m_notebook
->AddPage(panel
, "wxBitmapXXX");
819 // layout constraints
820 #if wxUSE_CONSTRAINTS
821 wxLayoutConstraints
*c
;
823 panel
= new wxPanel(m_notebook
);
824 panel
->SetAutoLayout( TRUE
);
826 c
= new wxLayoutConstraints
;
827 c
->top
.SameAs( panel
, wxTop
, 10 );
829 c
->left
.SameAs( panel
, wxLeft
, 10 );
830 c
->width
.PercentOf( panel
, wxWidth
, 40 );
832 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
833 pMyButton
->SetConstraints( c
);
835 c
= new wxLayoutConstraints
;
836 c
->top
.SameAs( panel
, wxTop
, 10 );
837 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
838 c
->right
.SameAs( panel
, wxRight
, 10 );
839 c
->width
.PercentOf( panel
, wxWidth
, 40 );
841 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
842 pMyButton2
->SetConstraints( c
);
844 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
849 panel
= new wxPanel(m_notebook
);
850 panel
->SetAutoLayout( TRUE
);
852 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
854 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
855 sizer
->Add( 20,20, 1 );
856 sizer
->Add( new wxButton(panel
, -1, "Multiline\nbutton" ), 3, wxGROW
|wxALL
, 10 );
858 panel
->SetSizer( sizer
);
860 m_notebook
->AddPage(panel
, "wxSizer");
863 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
867 GetClientSize( &x
, &y
);
869 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
870 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
873 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
875 int selOld
= event
.GetOldSelection();
878 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
879 "page change from taking place - if you select\n"
880 "[No] the current page will stay the third one\n",
882 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
890 *m_text
<< "Notebook selection is being changed from " << selOld
891 << " to " << event
.GetSelection()
892 << " (current page from notebook is "
893 << m_notebook
->GetSelection() << ")\n";
896 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
898 *m_text
<< "Notebook selection is now " << event
.GetSelection()
899 << " (from notebook: " << m_notebook
->GetSelection() << ")\n";
902 void MyPanel::OnTestButton(wxCommandEvent
& event
)
904 wxLogMessage(_T("Button %c clicked."),
905 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
908 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
910 wxLogMessage(_T("Bitmap button clicked."));
913 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
915 static wxColour s_colOld
;
917 // test panel colour changing and propagation to the subcontrols
920 SetBackgroundColour(s_colOld
);
921 s_colOld
= wxNullColour
;
923 m_lbSelectThis
->SetForegroundColour(wxT("red"));
924 m_lbSelectThis
->SetBackgroundColour(wxT("white"));
928 s_colOld
= wxColour(wxT("red"));
929 SetBackgroundColour(wxT("white"));
931 m_lbSelectThis
->SetForegroundColour(wxT("white"));
932 m_lbSelectThis
->SetBackgroundColour(wxT("red"));
935 m_lbSelectThis
->Refresh();
939 void MyPanel::OnListBox( wxCommandEvent
&event
)
941 // GetParent()->Move(100, 100);
943 if (event
.GetInt() == -1)
945 m_text
->AppendText( "ListBox has no selections anymore\n" );
949 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
952 m_text
->AppendText( "ListBox event selection string is: '" );
953 m_text
->AppendText( event
.GetString() );
954 m_text
->AppendText( "'\n" );
955 m_text
->AppendText( "ListBox control selection string is: '" );
956 m_text
->AppendText( listbox
->GetStringSelection() );
957 m_text
->AppendText( "'\n" );
959 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
960 m_text
->AppendText( "ListBox event client data string is: '" );
961 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
962 m_text
->AppendText( obj
->GetData() );
964 m_text
->AppendText( wxString("none") );
966 m_text
->AppendText( "'\n" );
967 m_text
->AppendText( "ListBox control client data string is: '" );
968 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
970 m_text
->AppendText( obj
->GetData() );
972 m_text
->AppendText( wxString("none") );
973 m_text
->AppendText( "'\n" );
976 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
978 m_text
->AppendText( "ListBox double click string is: " );
979 m_text
->AppendText( event
.GetString() );
980 m_text
->AppendText( "\n" );
983 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
985 switch (event
.GetId())
987 case ID_LISTBOX_ENABLE
:
989 m_text
->AppendText("Checkbox clicked.\n");
991 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
993 cb
->SetToolTip( "Click to enable listbox" );
995 cb
->SetToolTip( "Click to disable listbox" );
996 #endif // wxUSE_TOOLTIPS
997 m_listbox
->Enable( event
.GetInt() == 0 );
998 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
999 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
1000 m_listboxSorted
->Enable( event
.GetInt() == 0 );
1001 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
1004 case ID_LISTBOX_SEL_NUM
:
1006 m_listbox
->SetSelection( 2 );
1007 m_listboxSorted
->SetSelection( 2 );
1008 m_lbSelectThis
->WarpPointer( 40, 14 );
1011 case ID_LISTBOX_SEL_STR
:
1013 m_listbox
->SetStringSelection( "This" );
1014 m_listboxSorted
->SetStringSelection( "This" );
1015 m_lbSelectNum
->WarpPointer( 40, 14 );
1018 case ID_LISTBOX_CLEAR
:
1021 m_listboxSorted
->Clear();
1024 case ID_LISTBOX_APPEND
:
1026 m_listbox
->Append( "Hi!" );
1027 m_listboxSorted
->Append( "Hi!" );
1030 case ID_LISTBOX_DELETE
:
1033 idx
= m_listbox
->GetSelection();
1034 if ( idx
!= wxNOT_FOUND
)
1035 m_listbox
->Delete( idx
);
1036 idx
= m_listboxSorted
->GetSelection();
1037 if ( idx
!= wxNOT_FOUND
)
1038 m_listboxSorted
->Delete( idx
);
1041 case ID_LISTBOX_FONT
:
1043 m_listbox
->SetFont( *wxITALIC_FONT
);
1044 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1045 m_checkbox
->SetFont( *wxITALIC_FONT
);
1052 void MyPanel::OnChoice( wxCommandEvent
&event
)
1054 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1057 m_text
->AppendText( "Choice event selection string is: '" );
1058 m_text
->AppendText( event
.GetString() );
1059 m_text
->AppendText( "'\n" );
1060 m_text
->AppendText( "Choice control selection string is: '" );
1061 m_text
->AppendText( choice
->GetStringSelection() );
1062 m_text
->AppendText( "'\n" );
1064 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1065 m_text
->AppendText( "Choice event client data string is: '" );
1068 m_text
->AppendText( obj
->GetData() );
1070 m_text
->AppendText( wxString("none") );
1072 m_text
->AppendText( "'\n" );
1073 m_text
->AppendText( "Choice control client data string is: '" );
1074 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1077 m_text
->AppendText( obj
->GetData() );
1079 m_text
->AppendText( wxString("none") );
1080 m_text
->AppendText( "'\n" );
1083 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1085 switch (event
.GetId())
1087 case ID_CHOICE_ENABLE
:
1089 m_choice
->Enable( event
.GetInt() == 0 );
1090 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1093 case ID_CHOICE_SEL_NUM
:
1095 m_choice
->SetSelection( 2 );
1096 m_choiceSorted
->SetSelection( 2 );
1099 case ID_CHOICE_SEL_STR
:
1101 m_choice
->SetStringSelection( "This" );
1102 m_choiceSorted
->SetStringSelection( "This" );
1105 case ID_CHOICE_CLEAR
:
1108 m_choiceSorted
->Clear();
1111 case ID_CHOICE_APPEND
:
1113 m_choice
->Append( "Hi!" );
1114 m_choiceSorted
->Append( "Hi!" );
1117 case ID_CHOICE_DELETE
:
1119 int idx
= m_choice
->GetSelection();
1120 if ( idx
!= wxNOT_FOUND
)
1121 m_choice
->Delete( idx
);
1122 idx
= m_choiceSorted
->GetSelection();
1123 if ( idx
!= wxNOT_FOUND
)
1124 m_choiceSorted
->Delete( idx
);
1127 case ID_CHOICE_FONT
:
1129 m_choice
->SetFont( *wxITALIC_FONT
);
1130 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1135 #endif // wxUSE_CHOICE
1137 void MyPanel::OnCombo( wxCommandEvent
&event
)
1139 m_text
->AppendText( "ComboBox event selection string is: " );
1140 m_text
->AppendText( event
.GetString() );
1141 m_text
->AppendText( "\n" );
1142 m_text
->AppendText( "ComboBox control selection string is: " );
1143 m_text
->AppendText( m_combo
->GetStringSelection() );
1144 m_text
->AppendText( "\n" );
1147 void MyPanel::OnComboTextChanged(wxCommandEvent
& event
)
1150 str
.Printf( wxT("Text in the combobox changed: now is '%s'."),
1151 event
.GetString().c_str() );
1152 wxLogMessage( str
.c_str() );
1155 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1157 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1158 m_combo
->GetValue().c_str());
1161 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1163 switch (event
.GetId())
1165 case ID_COMBO_ENABLE
:
1167 m_combo
->Enable( event
.GetInt() == 0 );
1170 case ID_COMBO_SEL_NUM
:
1172 m_combo
->SetSelection( 2 );
1175 case ID_COMBO_SEL_STR
:
1177 m_combo
->SetStringSelection( "This" );
1180 case ID_COMBO_CLEAR
:
1185 case ID_COMBO_APPEND
:
1187 m_combo
->Append( "Hi!" );
1190 case ID_COMBO_DELETE
:
1192 int idx
= m_combo
->GetSelection();
1193 m_combo
->Delete( idx
);
1198 m_combo
->SetFont( *wxITALIC_FONT
);
1204 void MyPanel::OnRadio( wxCommandEvent
&event
)
1206 m_text
->AppendText( "RadioBox selection string is: " );
1207 m_text
->AppendText( event
.GetString() );
1208 m_text
->AppendText( "\n" );
1211 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1213 switch (event
.GetId())
1215 case ID_RADIOBOX_ENABLE
:
1217 m_radio
->Enable( event
.GetInt() == 0 );
1220 case ID_RADIOBOX_SEL_NUM
:
1222 m_radio
->SetSelection( 2 );
1225 case ID_RADIOBOX_SEL_STR
:
1227 m_radio
->SetStringSelection( "This" );
1230 case ID_RADIOBOX_FONT
:
1232 m_radio
->SetForegroundColour(*wxGREEN
);
1234 m_radio
->SetFont( *wxITALIC_FONT
);
1240 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1242 m_fontButton
->SetFont( *wxITALIC_FONT
);
1243 m_text
->SetFont( *wxITALIC_FONT
);
1246 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1248 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1252 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1254 m_gauge
->SetValue( m_slider
->GetValue() );
1255 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1260 void MyPanel::OnSpinCtrlText(wxCommandEvent
& event
)
1265 s
.Printf( _T("Spin ctrl text changed: now %d (from event: %s)\n"),
1266 m_spinctrl
->GetValue(), event
.GetString().c_str() );
1267 m_text
->AppendText(s
);
1271 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1276 s
.Printf( _T("Spin ctrl changed: now %d (from event: %ld)\n"),
1277 m_spinctrl
->GetValue(), event
.GetInt() );
1278 m_text
->AppendText(s
);
1282 void MyPanel::OnSpinCtrlUp(wxSpinEvent
& event
)
1286 m_text
->AppendText( wxString::Format(
1287 _T("Spin up: %d (from event: %ld)\n"),
1288 m_spinctrl
->GetValue(), event
.GetInt() ) );
1292 void MyPanel::OnSpinCtrlDown(wxSpinEvent
& event
)
1296 m_text
->AppendText( wxString::Format(
1297 _T("Spin down: %d (from event: %ld)\n"),
1298 m_spinctrl
->GetValue(), event
.GetInt() ) );
1302 #endif // wxUSE_SPINCTRL
1305 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1308 value
.Printf( _T("Spin control up: current = %d\n"),
1309 m_spinbutton
->GetValue());
1311 if ( event
.GetPosition() > 17 )
1313 value
+= _T("Preventing the spin button from going above 17.\n");
1318 m_text
->AppendText(value
);
1321 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1324 value
.Printf( _T("Spin control down: current = %d\n"),
1325 m_spinbutton
->GetValue());
1327 if ( event
.GetPosition() < -17 )
1329 value
+= _T("Preventing the spin button from going below -17.\n");
1334 m_text
->AppendText(value
);
1337 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1340 value
.Printf( _T("%d"), event
.GetPosition() );
1341 m_spintext
->SetValue( value
);
1343 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1344 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1345 m_spinbutton
->GetValue());
1347 m_text
->AppendText(value
);
1350 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1352 event
.Enable( m_spinbutton
->GetValue() > 0 );
1355 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1357 int max
= m_spinbutton
->GetValue();
1361 wxLogError(_T("You must set positive range!"));
1365 wxProgressDialog
dialog("Progress dialog example",
1366 "An informative message",
1373 wxPD_ESTIMATED_TIME
|
1374 wxPD_REMAINING_TIME
);
1378 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1383 cont
= dialog
.Update(i
, "That's all, folks!");
1385 else if ( i
== max
/ 2 )
1387 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1391 cont
= dialog
.Update(i
);
1397 *m_text
<< "Progress dialog aborted!\n";
1401 *m_text
<< "Countdown from " << max
<< " finished.\n";
1405 #endif // wxUSE_SPINBTN
1409 //wxLog::RemoveTraceMask(_T("focus"));
1410 delete wxLog::SetActiveTarget(m_logTargetOld
);
1412 delete m_notebook
->GetImageList();
1415 //----------------------------------------------------------------------
1417 //----------------------------------------------------------------------
1419 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1420 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1421 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1422 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1424 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1425 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1426 #endif // wxUSE_TOOLTIPS
1428 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1430 EVT_SIZE(MyFrame::OnSize
)
1431 EVT_MOVE(MyFrame::OnMove
)
1433 EVT_IDLE(MyFrame::OnIdle
)
1436 MyFrame::MyFrame(const char *title
, int x
, int y
)
1437 : wxFrame(NULL
, -1, title
, wxPoint(x
, y
), wxSize(500, 430))
1440 // The wxICON() macros loads an icon from a resource under Windows
1441 // and uses an #included XPM image under GTK+ and Motif
1443 SetIcon( wxICON(mondrian
) );
1445 wxMenu
*file_menu
= new wxMenu
;
1447 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
1448 file_menu
->AppendSeparator();
1449 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
1450 file_menu
->AppendSeparator();
1451 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
1453 wxMenuBar
*menu_bar
= new wxMenuBar
;
1454 menu_bar
->Append(file_menu
, "&File");
1457 wxMenu
*tooltip_menu
= new wxMenu
;
1458 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
1459 tooltip_menu
->AppendSeparator();
1460 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
1461 "enable/disable tooltips", TRUE
);
1462 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
1463 menu_bar
->Append(tooltip_menu
, "&Tooltips");
1464 #endif // wxUSE_TOOLTIPS
1466 wxMenu
*panel_menu
= new wxMenu
;
1467 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
1468 "Enable/disable all panel controls", TRUE
);
1469 menu_bar
->Append(panel_menu
, "&Panel");
1471 SetMenuBar(menu_bar
);
1475 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1477 SetSizeHints( 500, 425 );
1480 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1485 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1489 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1493 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1495 m_panel
->m_text
->Clear();
1499 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1501 static long s_delay
= 5000;
1504 delay
.Printf( _T("%ld"), s_delay
);
1506 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1507 "Set tooltip delay",
1511 return; // cancelled
1513 wxSscanf(delay
, _T("%ld"), &s_delay
);
1515 wxToolTip::SetDelay(s_delay
);
1517 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1520 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1522 static bool s_enabled
= TRUE
;
1524 s_enabled
= !s_enabled
;
1526 wxToolTip::Enable(s_enabled
);
1528 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1532 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1534 static bool s_enable
= TRUE
;
1536 s_enable
= !s_enable
;
1537 m_panel
->Enable(s_enable
);
1540 void MyFrame::OnMove( wxMoveEvent
& event
)
1542 UpdateStatusBar(event
.GetPosition(), GetSize());
1547 void MyFrame::OnSize( wxSizeEvent
& event
)
1549 UpdateStatusBar(GetPosition(), event
.GetSize());
1554 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1556 // track the window which has the focus in the status bar
1557 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1558 wxWindow
*focus
= wxWindow::FindFocus();
1559 if ( focus
&& (focus
!= s_windowFocus
) )
1561 s_windowFocus
= focus
;
1566 _T("Focus: %s, HWND = %08x"),
1570 s_windowFocus
->GetClassInfo()->GetClassName()
1572 , (unsigned int) s_windowFocus
->GetHWND()
1580 void MyComboBox::OnChar(wxKeyEvent
& event
)
1582 wxLogMessage(_T("MyComboBox::OnChar"));
1584 if ( event
.KeyCode() == 'w' )
1585 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1590 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1592 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1594 if ( event
.KeyCode() == 'w' )
1595 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1600 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1602 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1607 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
)
1609 size_t count
= control
->GetCount();
1610 for ( size_t n
= 0; n
< count
; n
++ )
1613 s
.Printf(wxT("%s client data for '%s'"),
1614 name
, control
->GetString(n
).c_str());
1616 control
->SetClientObject(n
, new wxStringClientData(s
));
1620 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
)
1622 size_t count
= control
->GetCount();
1623 for ( size_t n
= 0; n
< count
; n
++ )
1626 s
.Printf(wxT("%s client data for '%s'"),
1627 name
, control
->GetString(n
).c_str());
1629 control
->SetClientObject(n
, new wxStringClientData(s
));