1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Controls wxWindows sample
4 // Author: Robert Roebling
7 // Copyright: (c) Robert Roebling, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
12 #pragma implementation "controls.h"
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
26 #if !defined( __WXMSW__ ) || defined( __WIN95__ )
27 #include "wx/spinbutt.h"
29 #include "wx/tglbtn.h"
30 #include "wx/notebook.h"
31 #include "wx/imaglist.h"
34 #include "wx/tooltip.h"
37 #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__)
42 #include "mondrian.xpm"
43 #include "icons/choice.xpm"
44 #include "icons/combo.xpm"
45 #include "icons/list.xpm"
46 #include "icons/radio.xpm"
47 #include "icons/text.xpm"
48 #include "icons/gauge.xpm"
52 // Win16 doesn't have them
56 #define wxUSE_SPINBTN 0
59 #define wxUSE_SPINBTN 1
63 #include "wx/progdlg.h"
66 #include "wx/spinctrl.h"
67 #endif // wxUSE_SPINCTRL
69 //----------------------------------------------------------------------
71 //----------------------------------------------------------------------
73 class MyApp
: public wxApp
79 class MyPanel
: public wxPanel
82 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
85 void OnSize( wxSizeEvent
& event
);
86 void OnListBox( wxCommandEvent
&event
);
87 void OnListBoxDoubleClick( wxCommandEvent
&event
);
88 void OnListBoxButtons( wxCommandEvent
&event
);
90 void OnChoice( wxCommandEvent
&event
);
91 void OnChoiceButtons( wxCommandEvent
&event
);
93 void OnCombo( wxCommandEvent
&event
);
94 void OnComboTextChanged( wxCommandEvent
&event
);
95 void OnComboTextEnter( wxCommandEvent
&event
);
96 void OnComboButtons( wxCommandEvent
&event
);
97 void OnRadio( wxCommandEvent
&event
);
98 void OnRadioButtons( wxCommandEvent
&event
);
99 void OnSetFont( wxCommandEvent
&event
);
100 void OnPageChanged( wxNotebookEvent
&event
);
101 void OnPageChanging( wxNotebookEvent
&event
);
102 void OnSliderUpdate( wxCommandEvent
&event
);
103 void OnUpdateLabel( wxCommandEvent
&event
);
105 void OnSpinUp( wxSpinEvent
&event
);
106 void OnSpinDown( wxSpinEvent
&event
);
107 void OnSpinUpdate( wxSpinEvent
&event
);
108 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
109 void OnShowProgress( wxCommandEvent
&event
);
110 #endif // wxUSE_SPINBTN
113 void OnSpinCtrl(wxSpinEvent
& event
);
114 #endif // wxUSE_SPINCTRL
116 void OnEnableAll(wxCommandEvent
& event
);
117 void OnChangeColour(wxCommandEvent
& event
);
118 void OnTestButton(wxCommandEvent
& event
);
119 void OnBmpButton(wxCommandEvent
& event
);
121 wxListBox
*m_listbox
,
132 wxButton
*m_fontButton
;
133 wxButton
*m_lbSelectNum
;
134 wxButton
*m_lbSelectThis
;
136 wxSpinButton
*m_spinbutton
;
137 wxButton
*m_btnProgress
;
138 #endif // wxUSE_SPINBTN
141 wxSpinCtrl
*m_spinctrl
;
142 #endif // wxUSE_SPINCTRL
144 wxTextCtrl
*m_spintext
;
145 wxCheckBox
*m_checkbox
;
148 wxNotebook
*m_notebook
;
150 wxStaticText
*m_label
;
153 wxLog
*m_logTargetOld
;
155 DECLARE_EVENT_TABLE()
158 class MyFrame
: public wxFrame
161 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
163 void OnQuit(wxCommandEvent
& event
);
164 void OnAbout(wxCommandEvent
& event
);
165 void OnClearLog(wxCommandEvent
& event
);
168 void OnSetTooltipDelay(wxCommandEvent
& event
);
169 void OnToggleTooltips(wxCommandEvent
& event
);
170 #endif // wxUSE_TOOLTIPS
172 void OnEnableAll(wxCommandEvent
& event
);
174 void OnIdle( wxIdleEvent
& event
);
175 void OnSize( wxSizeEvent
& event
);
176 void OnMove( wxMoveEvent
& event
);
178 MyPanel
*GetPanel() const { return m_panel
; }
181 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
184 wxSize sizeCl
= GetClientSize();
185 msg
.Printf(_("pos=(%d, %d), size=%dx%d (client=%dx%d)"),
189 SetStatusText(msg
, 1);
194 DECLARE_EVENT_TABLE()
197 // a button which intercepts double clicks (for testing...)
198 class MyButton
: public wxButton
201 MyButton(wxWindow
*parent
,
203 const wxString
& label
= wxEmptyString
,
204 const wxPoint
& pos
= wxDefaultPosition
,
205 const wxSize
& size
= wxDefaultSize
)
206 : wxButton(parent
, id
, label
, pos
, size
)
210 void OnDClick(wxMouseEvent
& event
)
212 wxLogMessage(_T("MyButton::OnDClick"));
218 DECLARE_EVENT_TABLE()
221 // a combo which intercepts chars (to test Windows behaviour)
222 class MyComboBox
: public wxComboBox
225 MyComboBox(wxWindow
*parent
, wxWindowID id
,
226 const wxString
& value
= wxEmptyString
,
227 const wxPoint
& pos
= wxDefaultPosition
,
228 const wxSize
& size
= wxDefaultSize
,
229 int n
= 0, const wxString choices
[] = NULL
,
231 const wxValidator
& validator
= wxDefaultValidator
,
232 const wxString
& name
= wxComboBoxNameStr
)
233 : wxComboBox(parent
, id
, value
, pos
, size
, n
, choices
, style
,
237 void OnChar(wxKeyEvent
& event
);
238 void OnKeyDown(wxKeyEvent
& event
);
239 void OnKeyUp(wxKeyEvent
& event
);
240 void OnFocusGot(wxFocusEvent
& event
)
242 wxLogMessage(_T("MyComboBox::OnFocusGot"));
248 DECLARE_EVENT_TABLE()
251 // a radiobox which handles focus set/kill (for testing)
252 class MyRadioBox
: public wxRadioBox
255 MyRadioBox(wxWindow
*parent
,
257 const wxString
& title
= wxEmptyString
,
258 const wxPoint
& pos
= wxDefaultPosition
,
259 const wxSize
& size
= wxDefaultSize
,
260 int n
= 0, const wxString choices
[] = NULL
,
262 long style
= wxRA_HORIZONTAL
,
263 const wxValidator
& validator
= wxDefaultValidator
,
264 const wxString
& name
= wxRadioBoxNameStr
)
265 : wxRadioBox(parent
, id
, title
, pos
, size
, n
, choices
, majorDim
,
266 style
, validator
, name
) { }
269 void OnFocusGot(wxFocusEvent
& event
)
271 wxLogMessage(_T("MyRadioBox::OnFocusGot"));
276 void OnFocusLost(wxFocusEvent
& event
)
278 wxLogMessage(_T("MyRadioBox::OnFocusLost"));
284 DECLARE_EVENT_TABLE()
287 //----------------------------------------------------------------------
289 //----------------------------------------------------------------------
291 static void SetControlClientData(const wxChar
*name
,
292 wxControlWithItems
*control
);
296 //----------------------------------------------------------------------
298 //----------------------------------------------------------------------
308 CONTROLS_SET_TOOLTIP_DELAY
= 200,
309 CONTROLS_ENABLE_TOOLTIPS
,
317 // parse the cmd line
322 //wxSscanf(argv[1], "%d", &x);
323 //wxSscanf(argv[2], "%d", &y);
326 // Create the main frame window
327 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
328 "Controls wxWindows App",
331 frame
->SetSizeHints( 500, 425 );
334 // The wxICON() macros loads an icon from a resource under Windows
335 // and uses an #included XPM image under GTK+ and Motif
337 frame
->SetIcon( wxICON(mondrian
) );
339 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
341 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
342 file_menu
->AppendSeparator();
343 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
344 file_menu
->AppendSeparator();
345 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
347 wxMenuBar
*menu_bar
= new wxMenuBar
;
348 menu_bar
->Append(file_menu
, "&File");
351 wxMenu
*tooltip_menu
= new wxMenu
;
352 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
353 tooltip_menu
->AppendSeparator();
354 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
355 "enable/disable tooltips", TRUE
);
356 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
357 menu_bar
->Append(tooltip_menu
, "&Tooltips");
358 #endif // wxUSE_TOOLTIPS
360 wxMenu
*panel_menu
= new wxMenu
;
361 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
362 "Enable/disable all panel controls", TRUE
);
363 menu_bar
->Append(panel_menu
, "&Panel");
365 frame
->SetMenuBar(menu_bar
);
369 //frame->GetPanel()->m_notebook->SetSelection(6);
376 //----------------------------------------------------------------------
378 //----------------------------------------------------------------------
380 const int ID_NOTEBOOK
= 1000;
382 const int ID_LISTBOX
= 130;
383 const int ID_LISTBOX_SEL_NUM
= 131;
384 const int ID_LISTBOX_SEL_STR
= 132;
385 const int ID_LISTBOX_CLEAR
= 133;
386 const int ID_LISTBOX_APPEND
= 134;
387 const int ID_LISTBOX_DELETE
= 135;
388 const int ID_LISTBOX_FONT
= 136;
389 const int ID_LISTBOX_ENABLE
= 137;
390 const int ID_LISTBOX_SORTED
= 138;
392 const int ID_CHOICE
= 120;
393 const int ID_CHOICE_SEL_NUM
= 121;
394 const int ID_CHOICE_SEL_STR
= 122;
395 const int ID_CHOICE_CLEAR
= 123;
396 const int ID_CHOICE_APPEND
= 124;
397 const int ID_CHOICE_DELETE
= 125;
398 const int ID_CHOICE_FONT
= 126;
399 const int ID_CHOICE_ENABLE
= 127;
400 const int ID_CHOICE_SORTED
= 128;
402 const int ID_COMBO
= 140;
403 const int ID_COMBO_SEL_NUM
= 141;
404 const int ID_COMBO_SEL_STR
= 142;
405 const int ID_COMBO_CLEAR
= 143;
406 const int ID_COMBO_APPEND
= 144;
407 const int ID_COMBO_DELETE
= 145;
408 const int ID_COMBO_FONT
= 146;
409 const int ID_COMBO_ENABLE
= 147;
411 const int ID_RADIOBOX
= 160;
412 const int ID_RADIOBOX_SEL_NUM
= 161;
413 const int ID_RADIOBOX_SEL_STR
= 162;
414 const int ID_RADIOBOX_FONT
= 163;
415 const int ID_RADIOBOX_ENABLE
= 164;
417 const int ID_RADIOBUTTON_1
= 166;
418 const int ID_RADIOBUTTON_2
= 167;
420 const int ID_SET_FONT
= 170;
422 const int ID_GAUGE
= 180;
423 const int ID_SLIDER
= 181;
425 const int ID_SPIN
= 182;
426 const int ID_BTNPROGRESS
= 183;
427 const int ID_BUTTON_LABEL
= 184;
428 const int ID_SPINCTRL
= 185;
430 const int ID_BUTTON_TEST1
= 190;
431 const int ID_BUTTON_TEST2
= 191;
432 const int ID_BITMAP_BTN
= 192;
434 const int ID_CHANGE_COLOUR
= 200;
436 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
437 EVT_SIZE ( MyPanel::OnSize
)
438 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
439 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
440 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
441 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
442 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
443 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
444 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
445 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
446 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
447 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
448 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
449 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
451 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
452 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
453 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
454 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
455 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
456 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
457 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
458 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
459 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
461 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
462 EVT_TEXT (ID_COMBO
, MyPanel::OnComboTextChanged
)
463 EVT_TEXT_ENTER(ID_COMBO
, MyPanel::OnComboTextEnter
)
464 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
465 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
466 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
467 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
468 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
469 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
470 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
471 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
472 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
473 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
474 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
475 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
476 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
477 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
479 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
480 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
481 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
482 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
483 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
484 #endif // wxUSE_SPINBTN
486 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
487 #endif // wxUSE_SPINCTRL
489 EVT_TOGGLEBUTTON(ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
490 #endif // wxUSE_TOGGLEBTN
491 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
492 EVT_BUTTON (ID_BUTTON_TEST1
, MyPanel::OnTestButton
)
493 EVT_BUTTON (ID_BUTTON_TEST2
, MyPanel::OnTestButton
)
494 EVT_BUTTON (ID_BITMAP_BTN
, MyPanel::OnBmpButton
)
497 BEGIN_EVENT_TABLE(MyButton
, wxButton
)
498 EVT_LEFT_DCLICK(MyButton::OnDClick
)
501 BEGIN_EVENT_TABLE(MyComboBox
, wxComboBox
)
502 EVT_CHAR(MyComboBox::OnChar
)
503 EVT_KEY_DOWN(MyComboBox::OnKeyDown
)
504 EVT_KEY_UP(MyComboBox::OnKeyUp
)
506 EVT_SET_FOCUS(MyComboBox::OnFocusGot
)
509 BEGIN_EVENT_TABLE(MyRadioBox
, wxRadioBox
)
510 EVT_SET_FOCUS(MyRadioBox::OnFocusGot
)
511 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost
)
514 // ============================================================================
516 // ============================================================================
518 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
519 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
520 m_text(NULL
), m_notebook(NULL
)
522 wxLayoutConstraints
*c
;
524 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
525 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
526 m_text
->SetBackgroundColour("wheat");
529 wxLog::AddTraceMask(_T("focus"));
530 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
532 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
547 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
550 // fill the image list
551 wxImageList
*imagelist
= new wxImageList(32, 32);
553 imagelist
-> Add( wxBitmap( list_xpm
));
554 imagelist
-> Add( wxBitmap( choice_xpm
));
555 imagelist
-> Add( wxBitmap( combo_xpm
));
556 imagelist
-> Add( wxBitmap( text_xpm
));
557 imagelist
-> Add( wxBitmap( radio_xpm
));
558 imagelist
-> Add( wxBitmap( gauge_xpm
));
559 m_notebook
->SetImageList(imagelist
);
560 #elif defined(__WXMSW__)
561 // load images from resources
564 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
566 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
568 static const char *s_iconNames
[Image_Max
] =
570 "list", "choice", "combo", "text", "radio", "gauge"
573 for ( size_t n
= 0; n
< Image_Max
; n
++ )
575 wxBitmap
bmp(s_iconNames
[n
]);
576 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
578 wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."),
583 m_notebook
->SetImageList(imagelist
);
587 #define Image_List -1
588 #define Image_Choice -1
589 #define Image_Combo -1
590 #define Image_Text -1
591 #define Image_Radio -1
592 #define Image_Gauge -1
597 wxPanel
*panel
= new wxPanel(m_notebook
);
598 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
599 wxPoint(10,10), wxSize(120,70),
600 5, choices
, wxLB_ALWAYS_SB
);
601 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
602 wxPoint(10,90), wxSize(120,70),
603 5, choices
, wxLB_SORT
);
605 SetControlClientData(wxT("listbox"), m_listbox
);
606 SetControlClientData(wxT("listbox"), m_listboxSorted
);
608 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
610 m_listbox
->SetToolTip( "This is a list box" );
611 #endif // wxUSE_TOOLTIPS
613 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
614 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
615 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
616 (void)new MyButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
617 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
618 wxButton
*button
= new MyButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
620 button
->SetDefault();
622 button
->SetForegroundColour(*wxBLUE
);
625 button
->SetToolTip( "Press here to set italic font" );
626 #endif // wxUSE_TOOLTIPS
628 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
629 m_checkbox
->SetValue(FALSE
);
631 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
632 #endif // wxUSE_TOOLTIPS
633 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
635 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
636 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
639 panel
= new wxPanel(m_notebook
);
640 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
641 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
642 5, choices
, wxCB_SORT
);
644 SetControlClientData(wxT("choice"), m_choice
);
645 SetControlClientData(wxT("choice"), m_choiceSorted
);
647 m_choice
->SetSelection(2);
648 m_choice
->SetBackgroundColour( "red" );
649 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
650 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
651 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
652 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
653 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
654 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
655 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
657 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
658 #endif // wxUSE_CHOICE
660 panel
= new wxPanel(m_notebook
);
661 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
662 wxPoint(5, 5), wxSize(150, 100));
663 m_combo
= new MyComboBox( panel
, ID_COMBO
, "This",
664 wxPoint(20,25), wxSize(120, -1),
666 /* wxCB_READONLY | */ wxPROCESS_ENTER
);
668 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
669 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
670 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
671 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
672 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
673 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
674 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
675 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
677 wxString choices2
[] =
681 "Fourth", "Fifth", "Sixth",
682 "Seventh", "Eighth", "Nineth", "Tenth" */
685 panel
= new wxPanel(m_notebook
);
686 (void)new MyRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
687 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
690 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
691 m_radio
->SetToolTip("Ever seen a radiobox?");
692 #endif // wxUSE_TOOLTIPS
694 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
695 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
696 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
697 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
698 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
699 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
700 rb
->SetValue( FALSE
);
701 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
702 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
704 panel
= new wxPanel(m_notebook
);
705 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
706 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
707 m_gauge
->SetBackgroundColour(*wxGREEN
);
708 m_gauge
->SetForegroundColour(*wxRED
);
709 m_gaugeVert
= new wxGauge( panel
, -1, 100,
710 wxPoint(195,35), wxSize(30, 90),
711 wxGA_VERTICAL
| wxGA_SMOOTH
| wxNO_BORDER
);
712 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
713 wxSL_AUTOTICKS
| wxSL_LABELS
);
714 m_slider
->SetTickFreq(40, 0);
715 (void)new wxStaticBox( panel
, -1, "&Explanation", 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(-10,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
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
760 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
763 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
764 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_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(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
790 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
791 bmp3(wxTheApp
->GetStdIcon(wxICON_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
816 panel
= new wxPanel(m_notebook
);
817 panel
->SetAutoLayout( TRUE
);
819 c
= new wxLayoutConstraints
;
820 c
->top
.SameAs( panel
, wxTop
, 10 );
822 c
->left
.SameAs( panel
, wxLeft
, 10 );
823 c
->width
.PercentOf( panel
, wxWidth
, 40 );
825 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
826 pMyButton
->SetConstraints( c
);
828 c
= new wxLayoutConstraints
;
829 c
->top
.SameAs( panel
, wxTop
, 10 );
830 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
831 c
->right
.SameAs( panel
, wxRight
, 10 );
832 c
->width
.PercentOf( panel
, wxWidth
, 40 );
834 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
835 pMyButton2
->SetConstraints( c
);
837 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
841 panel
= new wxPanel(m_notebook
);
842 panel
->SetAutoLayout( TRUE
);
844 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
846 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
847 sizer
->Add( 20,20, 1 );
848 sizer
->Add( new wxButton(panel
, -1, "Test Button &2" ), 3, wxGROW
|wxALL
, 10 );
850 panel
->SetSizer( sizer
);
852 m_notebook
->AddPage(panel
, "wxSizer");
855 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
859 GetClientSize( &x
, &y
);
861 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
862 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
865 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
867 int selOld
= event
.GetOldSelection();
870 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
871 "page change from taking place - if you select\n"
872 "[No] the current page will stay the third one\n",
874 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
882 *m_text
<< "Notebook selection is being changed from " << selOld
883 << " to " << event
.GetSelection()
884 << " (current page from notebook is "
885 << m_notebook
->GetSelection() << ")\n";
888 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
890 *m_text
<< "Notebook selection is now " << event
.GetSelection()
891 << " (from notebook: " << m_notebook
->GetSelection() << ")\n";
894 void MyPanel::OnTestButton(wxCommandEvent
& event
)
896 wxLogMessage(_T("Button %c clicked."),
897 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
900 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
902 wxLogMessage(_T("Bitmap button clicked."));
905 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
907 static wxColour s_colOld
;
909 // test panel colour changing and propagation to the subcontrols
912 SetBackgroundColour(s_colOld
);
913 s_colOld
= wxNullColour
;
915 m_lbSelectThis
->SetForegroundColour("red");
916 m_lbSelectThis
->SetBackgroundColour("white");
920 s_colOld
= wxColour("red");
921 SetBackgroundColour("white");
923 m_lbSelectThis
->SetForegroundColour("white");
924 m_lbSelectThis
->SetBackgroundColour("red");
927 m_lbSelectThis
->Refresh();
931 void MyPanel::OnListBox( wxCommandEvent
&event
)
933 // GetParent()->Move(100, 100);
935 if (event
.GetInt() == -1)
937 m_text
->AppendText( "ListBox has no selections anymore\n" );
941 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
944 m_text
->AppendText( "ListBox event selection string is: '" );
945 m_text
->AppendText( event
.GetString() );
946 m_text
->AppendText( "'\n" );
947 m_text
->AppendText( "ListBox control selection string is: '" );
948 m_text
->AppendText( listbox
->GetStringSelection() );
949 m_text
->AppendText( "'\n" );
951 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
952 m_text
->AppendText( "ListBox event client data string is: '" );
953 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
954 m_text
->AppendText( obj
->GetData() );
956 m_text
->AppendText( wxString("none") );
958 m_text
->AppendText( "'\n" );
959 m_text
->AppendText( "ListBox control client data string is: '" );
960 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
962 m_text
->AppendText( obj
->GetData() );
964 m_text
->AppendText( wxString("none") );
965 m_text
->AppendText( "'\n" );
968 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
970 m_text
->AppendText( "ListBox double click string is: " );
971 m_text
->AppendText( event
.GetString() );
972 m_text
->AppendText( "\n" );
975 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
977 switch (event
.GetId())
979 case ID_LISTBOX_ENABLE
:
981 m_text
->AppendText("Checkbox clicked.\n");
982 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
985 cb
->SetToolTip( "Click to enable listbox" );
987 cb
->SetToolTip( "Click to disable listbox" );
988 #endif // wxUSE_TOOLTIPS
989 m_listbox
->Enable( event
.GetInt() == 0 );
990 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
991 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
992 m_listboxSorted
->Enable( event
.GetInt() == 0 );
993 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
996 case ID_LISTBOX_SEL_NUM
:
998 m_listbox
->SetSelection( 2 );
999 m_listboxSorted
->SetSelection( 2 );
1000 m_lbSelectThis
->WarpPointer( 40, 14 );
1003 case ID_LISTBOX_SEL_STR
:
1005 m_listbox
->SetStringSelection( "This" );
1006 m_listboxSorted
->SetStringSelection( "This" );
1007 m_lbSelectNum
->WarpPointer( 40, 14 );
1010 case ID_LISTBOX_CLEAR
:
1013 m_listboxSorted
->Clear();
1016 case ID_LISTBOX_APPEND
:
1018 m_listbox
->Append( "Hi!" );
1019 m_listboxSorted
->Append( "Hi!" );
1022 case ID_LISTBOX_DELETE
:
1025 idx
= m_listbox
->GetSelection();
1026 if ( idx
!= wxNOT_FOUND
)
1027 m_listbox
->Delete( idx
);
1028 idx
= m_listboxSorted
->GetSelection();
1029 if ( idx
!= wxNOT_FOUND
)
1030 m_listboxSorted
->Delete( idx
);
1033 case ID_LISTBOX_FONT
:
1035 m_listbox
->SetFont( *wxITALIC_FONT
);
1036 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1037 m_checkbox
->SetFont( *wxITALIC_FONT
);
1044 void MyPanel::OnChoice( wxCommandEvent
&event
)
1046 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1049 m_text
->AppendText( "Choice event selection string is: '" );
1050 m_text
->AppendText( event
.GetString() );
1051 m_text
->AppendText( "'\n" );
1052 m_text
->AppendText( "Choice control selection string is: '" );
1053 m_text
->AppendText( choice
->GetStringSelection() );
1054 m_text
->AppendText( "'\n" );
1056 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1057 m_text
->AppendText( "Choice event client data string is: '" );
1060 m_text
->AppendText( obj
->GetData() );
1062 m_text
->AppendText( wxString("none") );
1064 m_text
->AppendText( "'\n" );
1065 m_text
->AppendText( "Choice control client data string is: '" );
1066 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1069 m_text
->AppendText( obj
->GetData() );
1071 m_text
->AppendText( wxString("none") );
1072 m_text
->AppendText( "'\n" );
1075 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1077 switch (event
.GetId())
1079 case ID_CHOICE_ENABLE
:
1081 m_choice
->Enable( event
.GetInt() == 0 );
1082 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1085 case ID_CHOICE_SEL_NUM
:
1087 m_choice
->SetSelection( 2 );
1088 m_choiceSorted
->SetSelection( 2 );
1091 case ID_CHOICE_SEL_STR
:
1093 m_choice
->SetStringSelection( "This" );
1094 m_choiceSorted
->SetStringSelection( "This" );
1097 case ID_CHOICE_CLEAR
:
1100 m_choiceSorted
->Clear();
1103 case ID_CHOICE_APPEND
:
1105 m_choice
->Append( "Hi!" );
1106 m_choiceSorted
->Append( "Hi!" );
1109 case ID_CHOICE_DELETE
:
1111 int idx
= m_choice
->GetSelection();
1112 if ( idx
!= wxNOT_FOUND
)
1113 m_choice
->Delete( idx
);
1114 idx
= m_choiceSorted
->GetSelection();
1115 if ( idx
!= wxNOT_FOUND
)
1116 m_choiceSorted
->Delete( idx
);
1119 case ID_CHOICE_FONT
:
1121 m_choice
->SetFont( *wxITALIC_FONT
);
1122 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1127 #endif // wxUSE_CHOICE
1129 void MyPanel::OnCombo( wxCommandEvent
&event
)
1131 m_text
->AppendText( "ComboBox event selection string is: " );
1132 m_text
->AppendText( event
.GetString() );
1133 m_text
->AppendText( "\n" );
1134 m_text
->AppendText( "ComboBox control selection string is: " );
1135 m_text
->AppendText( m_combo
->GetStringSelection() );
1136 m_text
->AppendText( "\n" );
1139 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1141 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1142 m_combo
->GetValue().c_str());
1145 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1147 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1148 m_combo
->GetValue().c_str());
1151 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1153 switch (event
.GetId())
1155 case ID_COMBO_ENABLE
:
1157 m_combo
->Enable( event
.GetInt() == 0 );
1160 case ID_COMBO_SEL_NUM
:
1162 m_combo
->SetSelection( 2 );
1165 case ID_COMBO_SEL_STR
:
1167 m_combo
->SetStringSelection( "This" );
1170 case ID_COMBO_CLEAR
:
1175 case ID_COMBO_APPEND
:
1177 m_combo
->Append( "Hi!" );
1180 case ID_COMBO_DELETE
:
1182 int idx
= m_combo
->GetSelection();
1183 m_combo
->Delete( idx
);
1188 m_combo
->SetFont( *wxITALIC_FONT
);
1194 void MyPanel::OnRadio( wxCommandEvent
&event
)
1196 m_text
->AppendText( "RadioBox selection string is: " );
1197 m_text
->AppendText( event
.GetString() );
1198 m_text
->AppendText( "\n" );
1201 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1203 switch (event
.GetId())
1205 case ID_RADIOBOX_ENABLE
:
1207 m_radio
->Enable( event
.GetInt() == 0 );
1210 case ID_RADIOBOX_SEL_NUM
:
1212 m_radio
->SetSelection( 2 );
1215 case ID_RADIOBOX_SEL_STR
:
1217 m_radio
->SetStringSelection( "This" );
1220 case ID_RADIOBOX_FONT
:
1222 m_radio
->SetFont( *wxITALIC_FONT
);
1228 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1230 m_fontButton
->SetFont( *wxITALIC_FONT
);
1231 m_text
->SetFont( *wxITALIC_FONT
);
1234 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1236 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1240 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1242 m_gauge
->SetValue( m_slider
->GetValue() );
1243 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1248 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1251 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1252 m_spinctrl
->GetValue(), event
.GetInt());
1253 m_text
->AppendText(s
);
1256 #endif // wxUSE_SPINCTRL
1259 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1262 value
.Printf( _T("Spin control up: current = %d\n"),
1263 m_spinbutton
->GetValue());
1265 if ( m_spinbutton
->GetValue() > 17 )
1267 value
+= _T("Preventing the spin button from going above 17.\n");
1272 m_text
->AppendText(value
);
1275 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1278 value
.Printf( _T("Spin control down: current = %d\n"),
1279 m_spinbutton
->GetValue());
1281 if ( m_spinbutton
->GetValue() < -17 )
1283 value
+= _T("Preventing the spin button from going below -17.\n");
1288 m_text
->AppendText(value
);
1291 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1294 value
.Printf( _T("%d"), event
.GetPosition() );
1295 m_spintext
->SetValue( value
);
1297 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1298 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1299 m_spinbutton
->GetValue());
1301 m_text
->AppendText(value
);
1304 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1306 event
.Enable( m_spinbutton
->GetValue() > 0 );
1309 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1311 int max
= m_spinbutton
->GetValue();
1312 wxProgressDialog
dialog("Progress dialog example",
1313 "An informative message",
1320 wxPD_ESTIMATED_TIME
|
1321 wxPD_REMAINING_TIME
);
1325 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1330 cont
= dialog
.Update(i
, "That's all, folks!");
1332 else if ( i
== max
/ 2 )
1334 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1338 cont
= dialog
.Update(i
);
1344 *m_text
<< "Progress dialog aborted!\n";
1348 *m_text
<< "Countdown from " << max
<< " finished.\n";
1352 #endif // wxUSE_SPINBTN
1356 //wxLog::RemoveTraceMask(_T("focus"));
1357 delete wxLog::SetActiveTarget(m_logTargetOld
);
1359 delete m_notebook
->GetImageList();
1362 //----------------------------------------------------------------------
1364 //----------------------------------------------------------------------
1366 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1367 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1368 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1369 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1371 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1372 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1373 #endif // wxUSE_TOOLTIPS
1375 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1377 EVT_SIZE(MyFrame::OnSize
)
1378 EVT_MOVE(MyFrame::OnMove
)
1380 EVT_IDLE(MyFrame::OnIdle
)
1383 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1384 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1388 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1391 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1396 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1400 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1404 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1406 m_panel
->m_text
->Clear();
1410 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1412 static long s_delay
= 5000;
1415 delay
.Printf( _T("%ld"), s_delay
);
1417 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1418 "Set tooltip delay",
1422 return; // cancelled
1424 wxSscanf(delay
, _T("%ld"), &s_delay
);
1426 wxToolTip::SetDelay(s_delay
);
1428 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1431 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1433 static bool s_enabled
= TRUE
;
1435 s_enabled
= !s_enabled
;
1437 wxToolTip::Enable(s_enabled
);
1439 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1443 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1445 static bool s_enable
= TRUE
;
1447 s_enable
= !s_enable
;
1448 m_panel
->Enable(s_enable
);
1451 void MyFrame::OnMove( wxMoveEvent
& event
)
1453 UpdateStatusBar(event
.GetPosition(), GetSize());
1458 void MyFrame::OnSize( wxSizeEvent
& event
)
1460 UpdateStatusBar(GetPosition(), event
.GetSize());
1465 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1467 // track the window which has the focus in the status bar
1468 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1469 wxWindow
*focus
= wxWindow::FindFocus();
1470 if ( focus
&& (focus
!= s_windowFocus
) )
1472 s_windowFocus
= focus
;
1477 _T("Focus: %s, HWND = %08x"),
1481 s_windowFocus
->GetClassInfo()->GetClassName()
1483 , s_windowFocus
->GetHWND()
1491 void MyComboBox::OnChar(wxKeyEvent
& event
)
1493 wxLogMessage(_T("MyComboBox::OnChar"));
1495 if ( event
.KeyCode() == 'w' )
1496 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1501 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1503 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1505 if ( event
.KeyCode() == 'w' )
1506 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1511 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1513 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1518 static void SetControlClientData(const wxChar
*name
,
1519 wxControlWithItems
*control
)
1521 size_t count
= control
->GetCount();
1522 for ( size_t n
= 0; n
< count
; n
++ )
1525 s
.Printf(wxT("%s client data for '%s'"),
1526 name
, control
->GetString(n
).c_str());
1528 control
->SetClientObject(n
, new wxStringClientData(s
));