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
) { }
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
);
687 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
688 m_radio
->SetToolTip("Ever seen a radiobox?");
689 #endif // wxUSE_TOOLTIPS
691 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
692 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
693 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
694 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
695 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
696 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
697 rb
->SetValue( FALSE
);
698 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
699 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
701 panel
= new wxPanel(m_notebook
);
702 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
703 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
704 m_gauge
->SetBackgroundColour(*wxGREEN
);
705 m_gauge
->SetForegroundColour(*wxRED
);
706 m_gaugeVert
= new wxGauge( panel
, -1, 100,
707 wxPoint(195,35), wxSize(30, 90),
708 wxGA_VERTICAL
| wxGA_SMOOTH
| wxNO_BORDER
);
709 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
710 wxSL_AUTOTICKS
| wxSL_LABELS
);
711 m_slider
->SetTickFreq(40, 0);
712 (void)new wxStaticBox( panel
, -1, "&Explanation",
713 wxPoint(230,10), wxSize(270,130),
717 // No wrapping text in wxStaticText yet :-(
718 (void)new wxStaticText( panel
, -1,
724 (void)new wxStaticText( panel
, -1,
725 "In order see the gauge (aka progress bar)\n"
726 "control do something you have to drag the\n"
727 "handle of the slider to the right.\n"
729 "This is also supposed to demonstrate how\n"
730 "to use static controls.\n",
735 int initialSpinValue
= -5;
737 s
<< initialSpinValue
;
738 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
740 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
741 m_spinbutton
->SetRange(-40,30);
742 m_spinbutton
->SetValue(initialSpinValue
);
744 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
746 #endif // wxUSE_SPINBTN
749 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
750 m_spinctrl
->SetRange(10,30);
751 m_spinctrl
->SetValue(15);
752 #endif // wxUSE_SPINCTRL
754 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
756 panel
= new wxPanel(m_notebook
);
758 #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
759 wxIcon icon
= wxArtProvider::GetIcon(wxART_INFORMATION
);
760 (void) new wxStaticBitmap( panel
, -1, icon
, wxPoint(10, 10) );
762 // VZ: don't leak memory
763 // bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10));
764 // bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION));
767 wxBitmap
bitmap( 100, 100 );
769 dc
.SelectObject( bitmap
);
770 dc
.SetPen(*wxGREEN_PEN
);
772 dc
.DrawEllipse(5, 5, 90, 90);
773 dc
.DrawText("Bitmap", 30, 40);
774 dc
.SelectObject( wxNullBitmap
);
776 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
779 // test for masked bitmap display
780 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
783 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
785 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
789 wxBitmap
bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION
)),
790 bmp2(wxArtProvider::GetBitmap(wxART_WARNING
)),
791 bmp3(wxArtProvider::GetBitmap(wxART_QUESTION
));
792 wxBitmapButton
*bmpBtn
= new wxBitmapButton
799 bmpBtn
->SetBitmapSelected(bmp2
);
800 bmpBtn
->SetBitmapFocus(bmp3
);
803 (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
,
804 "&Toggle label", wxPoint(250, 20));
805 #endif // wxUSE_TOGGLEBTN
807 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
808 wxPoint(250, 60), wxDefaultSize
,
809 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
810 m_label
->SetForegroundColour( *wxBLUE
);
812 m_notebook
->AddPage(panel
, "wxBitmapXXX");
814 // layout constraints
815 #if wxUSE_CONSTRAINTS
816 wxLayoutConstraints
*c
;
818 panel
= new wxPanel(m_notebook
);
819 panel
->SetAutoLayout( TRUE
);
821 c
= new wxLayoutConstraints
;
822 c
->top
.SameAs( panel
, wxTop
, 10 );
824 c
->left
.SameAs( panel
, wxLeft
, 10 );
825 c
->width
.PercentOf( panel
, wxWidth
, 40 );
827 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
828 pMyButton
->SetConstraints( c
);
830 c
= new wxLayoutConstraints
;
831 c
->top
.SameAs( panel
, wxTop
, 10 );
832 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
833 c
->right
.SameAs( panel
, wxRight
, 10 );
834 c
->width
.PercentOf( panel
, wxWidth
, 40 );
836 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
837 pMyButton2
->SetConstraints( c
);
839 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
844 panel
= new wxPanel(m_notebook
);
845 panel
->SetAutoLayout( TRUE
);
847 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
849 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
850 sizer
->Add( 20,20, 1 );
851 sizer
->Add( new wxButton(panel
, -1, "Multiline\nbutton" ), 3, wxGROW
|wxALL
, 10 );
853 panel
->SetSizer( sizer
);
855 m_notebook
->AddPage(panel
, "wxSizer");
858 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
862 GetClientSize( &x
, &y
);
864 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
865 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
868 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
870 int selOld
= event
.GetOldSelection();
873 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
874 "page change from taking place - if you select\n"
875 "[No] the current page will stay the third one\n",
877 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
885 *m_text
<< "Notebook selection is being changed from " << selOld
886 << " to " << event
.GetSelection()
887 << " (current page from notebook is "
888 << m_notebook
->GetSelection() << ")\n";
891 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
893 *m_text
<< "Notebook selection is now " << event
.GetSelection()
894 << " (from notebook: " << m_notebook
->GetSelection() << ")\n";
897 void MyPanel::OnTestButton(wxCommandEvent
& event
)
899 wxLogMessage(_T("Button %c clicked."),
900 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
903 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
905 wxLogMessage(_T("Bitmap button clicked."));
908 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
910 static wxColour s_colOld
;
912 // test panel colour changing and propagation to the subcontrols
915 SetBackgroundColour(s_colOld
);
916 s_colOld
= wxNullColour
;
918 m_lbSelectThis
->SetForegroundColour(wxT("red"));
919 m_lbSelectThis
->SetBackgroundColour(wxT("white"));
923 s_colOld
= wxColour(wxT("red"));
924 SetBackgroundColour(wxT("white"));
926 m_lbSelectThis
->SetForegroundColour(wxT("white"));
927 m_lbSelectThis
->SetBackgroundColour(wxT("red"));
930 m_lbSelectThis
->Refresh();
934 void MyPanel::OnListBox( wxCommandEvent
&event
)
936 // GetParent()->Move(100, 100);
938 if (event
.GetInt() == -1)
940 m_text
->AppendText( "ListBox has no selections anymore\n" );
944 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
947 m_text
->AppendText( "ListBox event selection string is: '" );
948 m_text
->AppendText( event
.GetString() );
949 m_text
->AppendText( "'\n" );
950 m_text
->AppendText( "ListBox control selection string is: '" );
951 m_text
->AppendText( listbox
->GetStringSelection() );
952 m_text
->AppendText( "'\n" );
954 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
955 m_text
->AppendText( "ListBox event client data string is: '" );
956 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
957 m_text
->AppendText( obj
->GetData() );
959 m_text
->AppendText( wxString("none") );
961 m_text
->AppendText( "'\n" );
962 m_text
->AppendText( "ListBox control client data string is: '" );
963 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
965 m_text
->AppendText( obj
->GetData() );
967 m_text
->AppendText( wxString("none") );
968 m_text
->AppendText( "'\n" );
971 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
973 m_text
->AppendText( "ListBox double click string is: " );
974 m_text
->AppendText( event
.GetString() );
975 m_text
->AppendText( "\n" );
978 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
980 switch (event
.GetId())
982 case ID_LISTBOX_ENABLE
:
984 m_text
->AppendText("Checkbox clicked.\n");
986 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
988 cb
->SetToolTip( "Click to enable listbox" );
990 cb
->SetToolTip( "Click to disable listbox" );
991 #endif // wxUSE_TOOLTIPS
992 m_listbox
->Enable( event
.GetInt() == 0 );
993 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
994 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
995 m_listboxSorted
->Enable( event
.GetInt() == 0 );
996 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
999 case ID_LISTBOX_SEL_NUM
:
1001 m_listbox
->SetSelection( 2 );
1002 m_listboxSorted
->SetSelection( 2 );
1003 m_lbSelectThis
->WarpPointer( 40, 14 );
1006 case ID_LISTBOX_SEL_STR
:
1008 m_listbox
->SetStringSelection( "This" );
1009 m_listboxSorted
->SetStringSelection( "This" );
1010 m_lbSelectNum
->WarpPointer( 40, 14 );
1013 case ID_LISTBOX_CLEAR
:
1016 m_listboxSorted
->Clear();
1019 case ID_LISTBOX_APPEND
:
1021 m_listbox
->Append( "Hi!" );
1022 m_listboxSorted
->Append( "Hi!" );
1025 case ID_LISTBOX_DELETE
:
1028 idx
= m_listbox
->GetSelection();
1029 if ( idx
!= wxNOT_FOUND
)
1030 m_listbox
->Delete( idx
);
1031 idx
= m_listboxSorted
->GetSelection();
1032 if ( idx
!= wxNOT_FOUND
)
1033 m_listboxSorted
->Delete( idx
);
1036 case ID_LISTBOX_FONT
:
1038 m_listbox
->SetFont( *wxITALIC_FONT
);
1039 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1040 m_checkbox
->SetFont( *wxITALIC_FONT
);
1047 void MyPanel::OnChoice( wxCommandEvent
&event
)
1049 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1052 m_text
->AppendText( "Choice event selection string is: '" );
1053 m_text
->AppendText( event
.GetString() );
1054 m_text
->AppendText( "'\n" );
1055 m_text
->AppendText( "Choice control selection string is: '" );
1056 m_text
->AppendText( choice
->GetStringSelection() );
1057 m_text
->AppendText( "'\n" );
1059 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1060 m_text
->AppendText( "Choice event client data string is: '" );
1063 m_text
->AppendText( obj
->GetData() );
1065 m_text
->AppendText( wxString("none") );
1067 m_text
->AppendText( "'\n" );
1068 m_text
->AppendText( "Choice control client data string is: '" );
1069 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1072 m_text
->AppendText( obj
->GetData() );
1074 m_text
->AppendText( wxString("none") );
1075 m_text
->AppendText( "'\n" );
1078 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1080 switch (event
.GetId())
1082 case ID_CHOICE_ENABLE
:
1084 m_choice
->Enable( event
.GetInt() == 0 );
1085 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1088 case ID_CHOICE_SEL_NUM
:
1090 m_choice
->SetSelection( 2 );
1091 m_choiceSorted
->SetSelection( 2 );
1094 case ID_CHOICE_SEL_STR
:
1096 m_choice
->SetStringSelection( "This" );
1097 m_choiceSorted
->SetStringSelection( "This" );
1100 case ID_CHOICE_CLEAR
:
1103 m_choiceSorted
->Clear();
1106 case ID_CHOICE_APPEND
:
1108 m_choice
->Append( "Hi!" );
1109 m_choiceSorted
->Append( "Hi!" );
1112 case ID_CHOICE_DELETE
:
1114 int idx
= m_choice
->GetSelection();
1115 if ( idx
!= wxNOT_FOUND
)
1116 m_choice
->Delete( idx
);
1117 idx
= m_choiceSorted
->GetSelection();
1118 if ( idx
!= wxNOT_FOUND
)
1119 m_choiceSorted
->Delete( idx
);
1122 case ID_CHOICE_FONT
:
1124 m_choice
->SetFont( *wxITALIC_FONT
);
1125 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1130 #endif // wxUSE_CHOICE
1132 void MyPanel::OnCombo( wxCommandEvent
&event
)
1134 m_text
->AppendText( "ComboBox event selection string is: " );
1135 m_text
->AppendText( event
.GetString() );
1136 m_text
->AppendText( "\n" );
1137 m_text
->AppendText( "ComboBox control selection string is: " );
1138 m_text
->AppendText( m_combo
->GetStringSelection() );
1139 m_text
->AppendText( "\n" );
1142 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1144 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1145 m_combo
->GetValue().c_str());
1148 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1150 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1151 m_combo
->GetValue().c_str());
1154 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1156 switch (event
.GetId())
1158 case ID_COMBO_ENABLE
:
1160 m_combo
->Enable( event
.GetInt() == 0 );
1163 case ID_COMBO_SEL_NUM
:
1165 m_combo
->SetSelection( 2 );
1168 case ID_COMBO_SEL_STR
:
1170 m_combo
->SetStringSelection( "This" );
1173 case ID_COMBO_CLEAR
:
1178 case ID_COMBO_APPEND
:
1180 m_combo
->Append( "Hi!" );
1183 case ID_COMBO_DELETE
:
1185 int idx
= m_combo
->GetSelection();
1186 m_combo
->Delete( idx
);
1191 m_combo
->SetFont( *wxITALIC_FONT
);
1197 void MyPanel::OnRadio( wxCommandEvent
&event
)
1199 m_text
->AppendText( "RadioBox selection string is: " );
1200 m_text
->AppendText( event
.GetString() );
1201 m_text
->AppendText( "\n" );
1204 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1206 switch (event
.GetId())
1208 case ID_RADIOBOX_ENABLE
:
1210 m_radio
->Enable( event
.GetInt() == 0 );
1213 case ID_RADIOBOX_SEL_NUM
:
1215 m_radio
->SetSelection( 2 );
1218 case ID_RADIOBOX_SEL_STR
:
1220 m_radio
->SetStringSelection( "This" );
1223 case ID_RADIOBOX_FONT
:
1225 m_radio
->SetFont( *wxITALIC_FONT
);
1231 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1233 m_fontButton
->SetFont( *wxITALIC_FONT
);
1234 m_text
->SetFont( *wxITALIC_FONT
);
1237 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1239 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1243 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1245 m_gauge
->SetValue( m_slider
->GetValue() );
1246 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1251 void MyPanel::OnSpinCtrlText(wxCommandEvent
& event
)
1256 s
.Printf( _T("Spin ctrl text changed: now %d (from event: %s)\n"),
1257 m_spinctrl
->GetValue(), event
.GetString().c_str() );
1258 m_text
->AppendText(s
);
1262 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1267 s
.Printf( _T("Spin ctrl changed: now %d (from event: %ld)\n"),
1268 m_spinctrl
->GetValue(), event
.GetInt() );
1269 m_text
->AppendText(s
);
1273 void MyPanel::OnSpinCtrlUp(wxSpinEvent
& event
)
1277 m_text
->AppendText( wxString::Format(
1278 _T("Spin up: %d (from event: %ld)\n"),
1279 m_spinctrl
->GetValue(), event
.GetInt() ) );
1283 void MyPanel::OnSpinCtrlDown(wxSpinEvent
& event
)
1287 m_text
->AppendText( wxString::Format(
1288 _T("Spin down: %d (from event: %ld)\n"),
1289 m_spinctrl
->GetValue(), event
.GetInt() ) );
1293 #endif // wxUSE_SPINCTRL
1296 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1299 value
.Printf( _T("Spin control up: current = %d\n"),
1300 m_spinbutton
->GetValue());
1302 if ( event
.GetPosition() > 17 )
1304 value
+= _T("Preventing the spin button from going above 17.\n");
1309 m_text
->AppendText(value
);
1312 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1315 value
.Printf( _T("Spin control down: current = %d\n"),
1316 m_spinbutton
->GetValue());
1318 if ( event
.GetPosition() < -17 )
1320 value
+= _T("Preventing the spin button from going below -17.\n");
1325 m_text
->AppendText(value
);
1328 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1331 value
.Printf( _T("%d"), event
.GetPosition() );
1332 m_spintext
->SetValue( value
);
1334 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1335 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1336 m_spinbutton
->GetValue());
1338 m_text
->AppendText(value
);
1341 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1343 event
.Enable( m_spinbutton
->GetValue() > 0 );
1346 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1348 int max
= m_spinbutton
->GetValue();
1352 wxLogError(_T("You must set positive range!"));
1356 wxProgressDialog
dialog("Progress dialog example",
1357 "An informative message",
1364 wxPD_ESTIMATED_TIME
|
1365 wxPD_REMAINING_TIME
);
1369 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1374 cont
= dialog
.Update(i
, "That's all, folks!");
1376 else if ( i
== max
/ 2 )
1378 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1382 cont
= dialog
.Update(i
);
1388 *m_text
<< "Progress dialog aborted!\n";
1392 *m_text
<< "Countdown from " << max
<< " finished.\n";
1396 #endif // wxUSE_SPINBTN
1400 //wxLog::RemoveTraceMask(_T("focus"));
1401 delete wxLog::SetActiveTarget(m_logTargetOld
);
1403 delete m_notebook
->GetImageList();
1406 //----------------------------------------------------------------------
1408 //----------------------------------------------------------------------
1410 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1411 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1412 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1413 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1415 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1416 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1417 #endif // wxUSE_TOOLTIPS
1419 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1421 EVT_SIZE(MyFrame::OnSize
)
1422 EVT_MOVE(MyFrame::OnMove
)
1424 EVT_IDLE(MyFrame::OnIdle
)
1427 MyFrame::MyFrame(const char *title
, int x
, int y
)
1428 : wxFrame(NULL
, -1, title
, wxPoint(x
, y
), wxSize(500, 430))
1431 // The wxICON() macros loads an icon from a resource under Windows
1432 // and uses an #included XPM image under GTK+ and Motif
1434 SetIcon( wxICON(mondrian
) );
1436 wxMenu
*file_menu
= new wxMenu
;
1438 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
1439 file_menu
->AppendSeparator();
1440 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
1441 file_menu
->AppendSeparator();
1442 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
1444 wxMenuBar
*menu_bar
= new wxMenuBar
;
1445 menu_bar
->Append(file_menu
, "&File");
1448 wxMenu
*tooltip_menu
= new wxMenu
;
1449 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
1450 tooltip_menu
->AppendSeparator();
1451 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
1452 "enable/disable tooltips", TRUE
);
1453 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
1454 menu_bar
->Append(tooltip_menu
, "&Tooltips");
1455 #endif // wxUSE_TOOLTIPS
1457 wxMenu
*panel_menu
= new wxMenu
;
1458 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
1459 "Enable/disable all panel controls", TRUE
);
1460 menu_bar
->Append(panel_menu
, "&Panel");
1462 SetMenuBar(menu_bar
);
1466 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1468 SetSizeHints( 500, 425 );
1471 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1476 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1480 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1484 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1486 m_panel
->m_text
->Clear();
1490 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1492 static long s_delay
= 5000;
1495 delay
.Printf( _T("%ld"), s_delay
);
1497 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1498 "Set tooltip delay",
1502 return; // cancelled
1504 wxSscanf(delay
, _T("%ld"), &s_delay
);
1506 wxToolTip::SetDelay(s_delay
);
1508 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1511 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1513 static bool s_enabled
= TRUE
;
1515 s_enabled
= !s_enabled
;
1517 wxToolTip::Enable(s_enabled
);
1519 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1523 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1525 static bool s_enable
= TRUE
;
1527 s_enable
= !s_enable
;
1528 m_panel
->Enable(s_enable
);
1531 void MyFrame::OnMove( wxMoveEvent
& event
)
1533 UpdateStatusBar(event
.GetPosition(), GetSize());
1538 void MyFrame::OnSize( wxSizeEvent
& event
)
1540 UpdateStatusBar(GetPosition(), event
.GetSize());
1545 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1547 // track the window which has the focus in the status bar
1548 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1549 wxWindow
*focus
= wxWindow::FindFocus();
1550 if ( focus
&& (focus
!= s_windowFocus
) )
1552 s_windowFocus
= focus
;
1557 _T("Focus: %s, HWND = %08x"),
1561 s_windowFocus
->GetClassInfo()->GetClassName()
1563 , s_windowFocus
->GetHWND()
1571 void MyComboBox::OnChar(wxKeyEvent
& event
)
1573 wxLogMessage(_T("MyComboBox::OnChar"));
1575 if ( event
.KeyCode() == 'w' )
1576 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1581 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1583 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1585 if ( event
.KeyCode() == 'w' )
1586 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1591 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1593 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1598 static void SetListboxClientData(const wxChar
*name
, wxListBox
*control
)
1600 size_t count
= control
->GetCount();
1601 for ( size_t n
= 0; n
< count
; n
++ )
1604 s
.Printf(wxT("%s client data for '%s'"),
1605 name
, control
->GetString(n
).c_str());
1607 control
->SetClientObject(n
, new wxStringClientData(s
));
1611 static void SetChoiceClientData(const wxChar
*name
, wxChoice
*control
)
1613 size_t count
= control
->GetCount();
1614 for ( size_t n
= 0; n
< count
; n
++ )
1617 s
.Printf(wxT("%s client data for '%s'"),
1618 name
, control
->GetString(n
).c_str());
1620 control
->SetClientObject(n
, new wxStringClientData(s
));