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__)
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
);
89 void OnChoice( wxCommandEvent
&event
);
90 void OnChoiceButtons( wxCommandEvent
&event
);
91 void OnCombo( wxCommandEvent
&event
);
92 void OnComboTextChanged( wxCommandEvent
&event
);
93 void OnComboTextEnter( wxCommandEvent
&event
);
94 void OnComboButtons( wxCommandEvent
&event
);
95 void OnRadio( wxCommandEvent
&event
);
96 void OnRadioButtons( wxCommandEvent
&event
);
97 void OnSetFont( wxCommandEvent
&event
);
98 void OnPageChanged( wxNotebookEvent
&event
);
99 void OnPageChanging( wxNotebookEvent
&event
);
100 void OnSliderUpdate( wxCommandEvent
&event
);
101 void OnUpdateLabel( wxCommandEvent
&event
);
103 void OnSpinUp( wxSpinEvent
&event
);
104 void OnSpinDown( wxSpinEvent
&event
);
105 void OnSpinUpdate( wxSpinEvent
&event
);
106 void OnUpdateShowProgress( wxUpdateUIEvent
& event
);
107 void OnShowProgress( wxCommandEvent
&event
);
108 #endif // wxUSE_SPINBTN
111 void OnSpinCtrl(wxSpinEvent
& event
);
112 #endif // wxUSE_SPINCTRL
114 void OnEnableAll(wxCommandEvent
& event
);
115 void OnChangeColour(wxCommandEvent
& event
);
116 void OnTestButton(wxCommandEvent
& event
);
117 void OnBmpButton(wxCommandEvent
& event
);
119 wxListBox
*m_listbox
,
128 wxButton
*m_fontButton
;
129 wxButton
*m_lbSelectNum
;
130 wxButton
*m_lbSelectThis
;
132 wxSpinButton
*m_spinbutton
;
133 wxButton
*m_btnProgress
;
134 #endif // wxUSE_SPINBTN
137 wxSpinCtrl
*m_spinctrl
;
138 #endif // wxUSE_SPINCTRL
140 wxTextCtrl
*m_spintext
;
141 wxCheckBox
*m_checkbox
;
144 wxNotebook
*m_notebook
;
146 wxStaticText
*m_label
;
149 wxLog
*m_logTargetOld
;
151 DECLARE_EVENT_TABLE()
154 class MyFrame
: public wxFrame
157 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
159 void OnQuit(wxCommandEvent
& event
);
160 void OnAbout(wxCommandEvent
& event
);
161 void OnClearLog(wxCommandEvent
& event
);
164 void OnSetTooltipDelay(wxCommandEvent
& event
);
165 void OnToggleTooltips(wxCommandEvent
& event
);
166 #endif // wxUSE_TOOLTIPS
168 void OnEnableAll(wxCommandEvent
& event
);
170 void OnIdle( wxIdleEvent
& event
);
171 void OnSize( wxSizeEvent
& event
);
172 void OnMove( wxMoveEvent
& event
);
174 MyPanel
*GetPanel() const { return m_panel
; }
177 void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
)
180 wxSize sizeCl
= GetClientSize();
181 msg
.Printf(_("pos=(%d, %d), size=%dx%d (client=%dx%d)"),
185 SetStatusText(msg
, 1);
190 DECLARE_EVENT_TABLE()
193 // a button which intercepts double clicks (for testing...)
194 class MyButton
: public wxButton
197 MyButton(wxWindow
*parent
,
199 const wxString
& label
= wxEmptyString
,
200 const wxPoint
& pos
= wxDefaultPosition
,
201 const wxSize
& size
= wxDefaultSize
)
202 : wxButton(parent
, id
, label
, pos
, size
)
206 void OnDClick(wxMouseEvent
& event
)
208 wxLogMessage(_T("MyButton::OnDClick"));
214 DECLARE_EVENT_TABLE()
217 // a combo which intercepts chars (to test Windows behaviour)
218 class MyComboBox
: public wxComboBox
221 MyComboBox(wxWindow
*parent
, wxWindowID id
,
222 const wxString
& value
= wxEmptyString
,
223 const wxPoint
& pos
= wxDefaultPosition
,
224 const wxSize
& size
= wxDefaultSize
,
225 int n
= 0, const wxString choices
[] = NULL
,
227 const wxValidator
& validator
= wxDefaultValidator
,
228 const wxString
& name
= wxComboBoxNameStr
)
229 : wxComboBox(parent
, id
, value
, pos
, size
, n
, choices
, style
,
233 void OnChar(wxKeyEvent
& event
);
234 void OnKeyDown(wxKeyEvent
& event
);
235 void OnKeyUp(wxKeyEvent
& event
);
236 void OnFocusGot(wxFocusEvent
& event
)
238 wxLogMessage(_T("MyComboBox::OnFocusGot"));
244 DECLARE_EVENT_TABLE()
247 // a radiobox which handles focus set/kill (for testing)
248 class MyRadioBox
: public wxRadioBox
251 MyRadioBox(wxWindow
*parent
,
253 const wxString
& title
= wxEmptyString
,
254 const wxPoint
& pos
= wxDefaultPosition
,
255 const wxSize
& size
= wxDefaultSize
,
256 int n
= 0, const wxString choices
[] = NULL
,
258 long style
= wxRA_HORIZONTAL
,
259 const wxValidator
& validator
= wxDefaultValidator
,
260 const wxString
& name
= wxRadioBoxNameStr
)
261 : wxRadioBox(parent
, id
, title
, pos
, size
, n
, choices
, majorDim
,
262 style
, validator
, name
) { }
265 void OnFocusGot(wxFocusEvent
& event
)
267 wxLogMessage(_T("MyRadioBox::OnFocusGot"));
272 void OnFocusLost(wxFocusEvent
& event
)
274 wxLogMessage(_T("MyRadioBox::OnFocusLost"));
280 DECLARE_EVENT_TABLE()
283 //----------------------------------------------------------------------
285 //----------------------------------------------------------------------
287 static void SetControlClientData(const char *name
,
288 wxControlWithItems
*control
);
292 //----------------------------------------------------------------------
294 //----------------------------------------------------------------------
304 CONTROLS_SET_TOOLTIP_DELAY
= 200,
305 CONTROLS_ENABLE_TOOLTIPS
,
313 // parse the cmd line
318 wxSscanf(argv
[1], "%d", &x
);
319 wxSscanf(argv
[2], "%d", &y
);
322 // Create the main frame window
323 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
324 "Controls wxWindows App",
327 frame
->SetSizeHints( 500, 425 );
330 // The wxICON() macros loads an icon from a resource under Windows
331 // and uses an #included XPM image under GTK+ and Motif
333 frame
->SetIcon( wxICON(mondrian
) );
335 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
337 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
338 file_menu
->AppendSeparator();
339 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
340 file_menu
->AppendSeparator();
341 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
343 wxMenuBar
*menu_bar
= new wxMenuBar
;
344 menu_bar
->Append(file_menu
, "&File");
347 wxMenu
*tooltip_menu
= new wxMenu
;
348 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
349 tooltip_menu
->AppendSeparator();
350 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
351 "enable/disable tooltips", TRUE
);
352 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
353 menu_bar
->Append(tooltip_menu
, "&Tooltips");
354 #endif // wxUSE_TOOLTIPS
356 wxMenu
*panel_menu
= new wxMenu
;
357 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
358 "Enable/disable all panel controls", TRUE
);
359 menu_bar
->Append(panel_menu
, "&Panel");
361 frame
->SetMenuBar(menu_bar
);
365 //frame->GetPanel()->m_notebook->SetSelection(6);
372 //----------------------------------------------------------------------
374 //----------------------------------------------------------------------
376 const int ID_NOTEBOOK
= 1000;
378 const int ID_LISTBOX
= 130;
379 const int ID_LISTBOX_SEL_NUM
= 131;
380 const int ID_LISTBOX_SEL_STR
= 132;
381 const int ID_LISTBOX_CLEAR
= 133;
382 const int ID_LISTBOX_APPEND
= 134;
383 const int ID_LISTBOX_DELETE
= 135;
384 const int ID_LISTBOX_FONT
= 136;
385 const int ID_LISTBOX_ENABLE
= 137;
386 const int ID_LISTBOX_SORTED
= 138;
388 const int ID_CHOICE
= 120;
389 const int ID_CHOICE_SEL_NUM
= 121;
390 const int ID_CHOICE_SEL_STR
= 122;
391 const int ID_CHOICE_CLEAR
= 123;
392 const int ID_CHOICE_APPEND
= 124;
393 const int ID_CHOICE_DELETE
= 125;
394 const int ID_CHOICE_FONT
= 126;
395 const int ID_CHOICE_ENABLE
= 127;
396 const int ID_CHOICE_SORTED
= 128;
398 const int ID_COMBO
= 140;
399 const int ID_COMBO_SEL_NUM
= 141;
400 const int ID_COMBO_SEL_STR
= 142;
401 const int ID_COMBO_CLEAR
= 143;
402 const int ID_COMBO_APPEND
= 144;
403 const int ID_COMBO_DELETE
= 145;
404 const int ID_COMBO_FONT
= 146;
405 const int ID_COMBO_ENABLE
= 147;
407 const int ID_RADIOBOX
= 160;
408 const int ID_RADIOBOX_SEL_NUM
= 161;
409 const int ID_RADIOBOX_SEL_STR
= 162;
410 const int ID_RADIOBOX_FONT
= 163;
411 const int ID_RADIOBOX_ENABLE
= 164;
413 const int ID_RADIOBUTTON_1
= 166;
414 const int ID_RADIOBUTTON_2
= 167;
416 const int ID_SET_FONT
= 170;
418 const int ID_GAUGE
= 180;
419 const int ID_SLIDER
= 181;
421 const int ID_SPIN
= 182;
422 const int ID_BTNPROGRESS
= 183;
423 const int ID_BUTTON_LABEL
= 184;
424 const int ID_SPINCTRL
= 185;
426 const int ID_BUTTON_TEST1
= 190;
427 const int ID_BUTTON_TEST2
= 191;
428 const int ID_BITMAP_BTN
= 192;
430 const int ID_CHANGE_COLOUR
= 200;
432 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
433 EVT_SIZE ( MyPanel::OnSize
)
434 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
435 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
436 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
437 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
438 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
439 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
440 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
441 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
442 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
443 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
444 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
445 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
446 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
447 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
448 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
449 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
450 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
451 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
452 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
453 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
454 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
455 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
456 EVT_TEXT (ID_COMBO
, MyPanel::OnComboTextChanged
)
457 EVT_TEXT_ENTER(ID_COMBO
, MyPanel::OnComboTextEnter
)
458 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
459 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
460 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
461 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
462 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
463 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
464 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
465 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
466 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
467 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
468 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
469 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
470 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
471 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
473 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
474 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
475 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
476 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
477 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
478 #endif // wxUSE_SPINBTN
480 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
481 #endif // wxUSE_SPINCTRL
483 EVT_TOGGLEBUTTON(ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
484 #endif // wxUSE_TOGGLEBTN
485 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
486 EVT_BUTTON (ID_BUTTON_TEST1
, MyPanel::OnTestButton
)
487 EVT_BUTTON (ID_BUTTON_TEST2
, MyPanel::OnTestButton
)
488 EVT_BUTTON (ID_BITMAP_BTN
, MyPanel::OnBmpButton
)
491 BEGIN_EVENT_TABLE(MyButton
, wxButton
)
492 EVT_LEFT_DCLICK(MyButton::OnDClick
)
495 BEGIN_EVENT_TABLE(MyComboBox
, wxComboBox
)
496 EVT_CHAR(MyComboBox::OnChar
)
497 EVT_KEY_DOWN(MyComboBox::OnKeyDown
)
498 EVT_KEY_UP(MyComboBox::OnKeyUp
)
500 EVT_SET_FOCUS(MyComboBox::OnFocusGot
)
503 BEGIN_EVENT_TABLE(MyRadioBox
, wxRadioBox
)
504 EVT_SET_FOCUS(MyRadioBox::OnFocusGot
)
505 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost
)
508 // ============================================================================
510 // ============================================================================
512 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
513 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
514 m_text(NULL
), m_notebook(NULL
)
516 wxLayoutConstraints
*c
;
518 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
519 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
520 m_text
->SetBackgroundColour("wheat");
523 wxLog::AddTraceMask(_T("focus"));
524 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
526 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
541 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
544 // fill the image list
545 wxImageList
*imagelist
= new wxImageList(32, 32);
547 imagelist
-> Add( wxBitmap( list_xpm
));
548 imagelist
-> Add( wxBitmap( choice_xpm
));
549 imagelist
-> Add( wxBitmap( combo_xpm
));
550 imagelist
-> Add( wxBitmap( text_xpm
));
551 imagelist
-> Add( wxBitmap( radio_xpm
));
552 imagelist
-> Add( wxBitmap( gauge_xpm
));
553 m_notebook
->SetImageList(imagelist
);
554 #elif defined(__WXMSW__)
555 // load images from resources
558 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
560 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
562 static const char *s_iconNames
[Image_Max
] =
564 "list", "choice", "combo", "text", "radio", "gauge"
567 for ( size_t n
= 0; n
< Image_Max
; n
++ )
569 wxBitmap
bmp(s_iconNames
[n
]);
570 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
572 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
577 m_notebook
->SetImageList(imagelist
);
581 #define Image_List -1
582 #define Image_Choice -1
583 #define Image_Combo -1
584 #define Image_Text -1
585 #define Image_Radio -1
586 #define Image_Gauge -1
591 wxPanel
*panel
= new wxPanel(m_notebook
);
592 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
593 wxPoint(10,10), wxSize(120,70),
594 5, choices
, wxLB_ALWAYS_SB
);
595 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
596 wxPoint(10,90), wxSize(120,70),
597 5, choices
, wxLB_SORT
);
599 SetControlClientData("listbox", m_listbox
);
600 SetControlClientData("listbox", m_listboxSorted
);
602 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
604 m_listbox
->SetToolTip( "This is a list box" );
605 #endif // wxUSE_TOOLTIPS
607 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
608 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
609 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
610 (void)new MyButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
611 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
612 wxButton
*button
= new MyButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
614 button
->SetDefault();
616 button
->SetForegroundColour(*wxBLUE
);
619 button
->SetToolTip( "Press here to set italic font" );
620 #endif // wxUSE_TOOLTIPS
622 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
623 m_checkbox
->SetValue(FALSE
);
625 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
626 #endif // wxUSE_TOOLTIPS
627 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
629 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
630 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
632 panel
= new wxPanel(m_notebook
);
633 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
634 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
635 5, choices
, wxCB_SORT
);
637 SetControlClientData("choice", m_choice
);
638 SetControlClientData("choice", m_choiceSorted
);
640 m_choice
->SetSelection(2);
641 m_choice
->SetBackgroundColour( "red" );
642 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
643 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
644 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
645 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
646 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
647 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
648 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
650 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
652 panel
= new wxPanel(m_notebook
);
653 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
654 wxPoint(5, 5), wxSize(150, 100));
655 m_combo
= new MyComboBox( panel
, ID_COMBO
, "This",
656 wxPoint(20,25), wxSize(120, -1),
658 /* wxCB_READONLY | */ wxPROCESS_ENTER
);
660 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
661 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
662 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
663 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
664 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
665 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
666 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
667 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
669 wxString choices2
[] =
673 "Fourth", "Fifth", "Sixth",
674 "Seventh", "Eighth", "Nineth", "Tenth" */
677 panel
= new wxPanel(m_notebook
);
678 (void)new MyRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
679 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
682 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
683 m_radio
->SetToolTip("Ever seen a radiobox?");
684 #endif // wxUSE_TOOLTIPS
686 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
687 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
688 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
689 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
690 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
691 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
692 rb
->SetValue( FALSE
);
693 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
694 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
696 panel
= new wxPanel(m_notebook
);
697 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
698 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
699 m_gauge
->SetBackgroundColour(*wxGREEN
);
700 m_gauge
->SetForegroundColour(*wxRED
);
701 m_gaugeVert
= new wxGauge( panel
, -1, 100,
702 wxPoint(195,35), wxSize(30, 90),
703 wxGA_VERTICAL
| wxGA_SMOOTH
| wxNO_BORDER
);
704 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
705 (void)new wxStaticBox( panel
, -1, "&Explanation", wxPoint(230,10), wxSize(270,130) );
707 // No wrapping text in wxStaticText yet :-(
708 (void)new wxStaticText( panel
, -1,
714 (void)new wxStaticText( panel
, -1,
715 "In order see the gauge (aka progress bar)\n"
716 "control do something you have to drag the\n"
717 "handle of the slider to the right.\n"
719 "This is also supposed to demonstrate how\n"
720 "to use static controls.\n",
725 int initialSpinValue
= -5;
727 s
<< initialSpinValue
;
728 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
730 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
731 m_spinbutton
->SetRange(-10,30);
732 m_spinbutton
->SetValue(initialSpinValue
);
734 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
736 #endif // wxUSE_SPINBTN
739 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
740 m_spinctrl
->SetRange(10,30);
741 m_spinctrl
->SetValue(15);
742 #endif // wxUSE_SPINCTRL
744 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
746 panel
= new wxPanel(m_notebook
);
748 #if !defined(__WXMOTIF__) && !defined(__WXMAC__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
749 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
750 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
753 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
754 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
757 wxBitmap
bitmap( 100, 100 );
759 dc
.SelectObject( bitmap
);
760 dc
.SetPen(*wxGREEN_PEN
);
762 dc
.DrawEllipse(5, 5, 90, 90);
763 dc
.DrawText("Bitmap", 30, 40);
764 dc
.SelectObject( wxNullBitmap
);
766 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
769 // test for masked bitmap display
770 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
773 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
775 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
779 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
780 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
781 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
782 wxBitmapButton
*bmpBtn
= new wxBitmapButton
788 bmpBtn
->SetBitmapSelected(bmp2
);
789 bmpBtn
->SetBitmapFocus(bmp3
);
792 (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
,
793 "&Toggle label", wxPoint(250, 20));
794 #endif // wxUSE_TOGGLEBTN
795 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
796 wxPoint(250, 60), wxDefaultSize
,
797 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
798 m_label
->SetForegroundColour( *wxBLUE
);
800 m_notebook
->AddPage(panel
, "wxBitmapXXX");
802 // layout constraints
804 panel
= new wxPanel(m_notebook
);
805 panel
->SetAutoLayout( TRUE
);
807 c
= new wxLayoutConstraints
;
808 c
->top
.SameAs( panel
, wxTop
, 10 );
810 c
->left
.SameAs( panel
, wxLeft
, 10 );
811 c
->width
.PercentOf( panel
, wxWidth
, 40 );
813 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
814 pMyButton
->SetConstraints( c
);
816 c
= new wxLayoutConstraints
;
817 c
->top
.SameAs( panel
, wxTop
, 10 );
818 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
819 c
->right
.SameAs( panel
, wxRight
, 10 );
820 c
->width
.PercentOf( panel
, wxWidth
, 40 );
822 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
823 pMyButton2
->SetConstraints( c
);
825 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
829 panel
= new wxPanel(m_notebook
);
830 panel
->SetAutoLayout( TRUE
);
832 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
834 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
835 sizer
->Add( 20,20, 1 );
836 sizer
->Add( new wxButton(panel
, -1, "Test Button &2" ), 3, wxGROW
|wxALL
, 10 );
838 panel
->SetSizer( sizer
);
840 m_notebook
->AddPage(panel
, "wxSizer");
843 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
847 GetClientSize( &x
, &y
);
849 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
850 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
853 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
855 int selOld
= event
.GetOldSelection();
858 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
859 "page change from taking place - if you select\n"
860 "[No] the current page will stay the third one\n",
862 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
870 *m_text
<< "Notebook selection is being changed from " << selOld
<< "\n";
873 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
875 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
878 void MyPanel::OnTestButton(wxCommandEvent
& event
)
880 wxLogMessage(_T("Button %c clicked."),
881 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
884 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
886 wxLogMessage(_T("Bitmap button clicked."));
889 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
891 static wxColour s_colOld
;
893 // test panel colour changing and propagation to the subcontrols
896 SetBackgroundColour(s_colOld
);
897 s_colOld
= wxNullColour
;
899 m_lbSelectThis
->SetForegroundColour("red");
900 m_lbSelectThis
->SetBackgroundColour("white");
904 s_colOld
= wxColour("red");
905 SetBackgroundColour("white");
907 m_lbSelectThis
->SetForegroundColour("white");
908 m_lbSelectThis
->SetBackgroundColour("red");
911 m_lbSelectThis
->Refresh();
915 void MyPanel::OnListBox( wxCommandEvent
&event
)
917 // GetParent()->Move(100, 100);
919 if (event
.GetInt() == -1)
921 m_text
->AppendText( "ListBox has no selections anymore\n" );
925 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
928 m_text
->AppendText( "ListBox event selection string is: '" );
929 m_text
->AppendText( event
.GetString() );
930 m_text
->AppendText( "'\n" );
931 m_text
->AppendText( "ListBox control selection string is: '" );
932 m_text
->AppendText( listbox
->GetStringSelection() );
933 m_text
->AppendText( "'\n" );
935 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
936 m_text
->AppendText( "ListBox event client data string is: '" );
937 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
938 m_text
->AppendText( obj
->GetData() );
940 m_text
->AppendText( wxString("none") );
942 m_text
->AppendText( "'\n" );
943 m_text
->AppendText( "ListBox control client data string is: '" );
944 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
946 m_text
->AppendText( obj
->GetData() );
948 m_text
->AppendText( wxString("none") );
949 m_text
->AppendText( "'\n" );
952 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
954 m_text
->AppendText( "ListBox double click string is: " );
955 m_text
->AppendText( event
.GetString() );
956 m_text
->AppendText( "\n" );
959 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
961 switch (event
.GetId())
963 case ID_LISTBOX_ENABLE
:
965 m_text
->AppendText("Checkbox clicked.\n");
966 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
969 cb
->SetToolTip( "Click to enable listbox" );
971 cb
->SetToolTip( "Click to disable listbox" );
972 #endif // wxUSE_TOOLTIPS
973 m_listbox
->Enable( event
.GetInt() == 0 );
974 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
975 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
976 m_listboxSorted
->Enable( event
.GetInt() == 0 );
977 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
980 case ID_LISTBOX_SEL_NUM
:
982 m_listbox
->SetSelection( 2 );
983 m_listboxSorted
->SetSelection( 2 );
984 m_lbSelectThis
->WarpPointer( 40, 14 );
987 case ID_LISTBOX_SEL_STR
:
989 m_listbox
->SetStringSelection( "This" );
990 m_listboxSorted
->SetStringSelection( "This" );
991 m_lbSelectNum
->WarpPointer( 40, 14 );
994 case ID_LISTBOX_CLEAR
:
997 m_listboxSorted
->Clear();
1000 case ID_LISTBOX_APPEND
:
1002 m_listbox
->Append( "Hi!" );
1003 m_listboxSorted
->Append( "Hi!" );
1006 case ID_LISTBOX_DELETE
:
1009 idx
= m_listbox
->GetSelection();
1010 if ( idx
!= wxNOT_FOUND
)
1011 m_listbox
->Delete( idx
);
1012 idx
= m_listboxSorted
->GetSelection();
1013 if ( idx
!= wxNOT_FOUND
)
1014 m_listboxSorted
->Delete( idx
);
1017 case ID_LISTBOX_FONT
:
1019 m_listbox
->SetFont( *wxITALIC_FONT
);
1020 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1021 m_checkbox
->SetFont( *wxITALIC_FONT
);
1027 void MyPanel::OnChoice( wxCommandEvent
&event
)
1029 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1032 m_text
->AppendText( "Choice event selection string is: '" );
1033 m_text
->AppendText( event
.GetString() );
1034 m_text
->AppendText( "'\n" );
1035 m_text
->AppendText( "Choice control selection string is: '" );
1036 m_text
->AppendText( choice
->GetStringSelection() );
1037 m_text
->AppendText( "'\n" );
1039 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1040 m_text
->AppendText( "Choice event client data string is: '" );
1043 m_text
->AppendText( obj
->GetData() );
1045 m_text
->AppendText( wxString("none") );
1047 m_text
->AppendText( "'\n" );
1048 m_text
->AppendText( "Choice control client data string is: '" );
1049 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1052 m_text
->AppendText( obj
->GetData() );
1054 m_text
->AppendText( wxString("none") );
1055 m_text
->AppendText( "'\n" );
1058 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1060 switch (event
.GetId())
1062 case ID_CHOICE_ENABLE
:
1064 m_choice
->Enable( event
.GetInt() == 0 );
1065 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1068 case ID_CHOICE_SEL_NUM
:
1070 m_choice
->SetSelection( 2 );
1071 m_choiceSorted
->SetSelection( 2 );
1074 case ID_CHOICE_SEL_STR
:
1076 m_choice
->SetStringSelection( "This" );
1077 m_choiceSorted
->SetStringSelection( "This" );
1080 case ID_CHOICE_CLEAR
:
1083 m_choiceSorted
->Clear();
1086 case ID_CHOICE_APPEND
:
1088 m_choice
->Append( "Hi!" );
1089 m_choiceSorted
->Append( "Hi!" );
1092 case ID_CHOICE_DELETE
:
1094 int idx
= m_choice
->GetSelection();
1095 if ( idx
!= wxNOT_FOUND
)
1096 m_choice
->Delete( idx
);
1097 idx
= m_choiceSorted
->GetSelection();
1098 if ( idx
!= wxNOT_FOUND
)
1099 m_choiceSorted
->Delete( idx
);
1102 case ID_CHOICE_FONT
:
1104 m_choice
->SetFont( *wxITALIC_FONT
);
1105 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1111 void MyPanel::OnCombo( wxCommandEvent
&event
)
1113 m_text
->AppendText( "ComboBox event selection string is: " );
1114 m_text
->AppendText( event
.GetString() );
1115 m_text
->AppendText( "\n" );
1116 m_text
->AppendText( "ComboBox control selection string is: " );
1117 m_text
->AppendText( m_combo
->GetStringSelection() );
1118 m_text
->AppendText( "\n" );
1121 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1123 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1124 m_combo
->GetValue().c_str());
1127 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1129 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1130 m_combo
->GetValue().c_str());
1133 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1135 switch (event
.GetId())
1137 case ID_COMBO_ENABLE
:
1139 m_combo
->Enable( event
.GetInt() == 0 );
1142 case ID_COMBO_SEL_NUM
:
1144 m_combo
->SetSelection( 2 );
1147 case ID_COMBO_SEL_STR
:
1149 m_combo
->SetStringSelection( "This" );
1152 case ID_COMBO_CLEAR
:
1157 case ID_COMBO_APPEND
:
1159 m_combo
->Append( "Hi!" );
1162 case ID_COMBO_DELETE
:
1164 int idx
= m_combo
->GetSelection();
1165 m_combo
->Delete( idx
);
1170 m_combo
->SetFont( *wxITALIC_FONT
);
1176 void MyPanel::OnRadio( wxCommandEvent
&event
)
1178 m_text
->AppendText( "RadioBox selection string is: " );
1179 m_text
->AppendText( event
.GetString() );
1180 m_text
->AppendText( "\n" );
1183 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1185 switch (event
.GetId())
1187 case ID_RADIOBOX_ENABLE
:
1189 m_radio
->Enable( event
.GetInt() == 0 );
1192 case ID_RADIOBOX_SEL_NUM
:
1194 m_radio
->SetSelection( 2 );
1197 case ID_RADIOBOX_SEL_STR
:
1199 m_radio
->SetStringSelection( "This" );
1202 case ID_RADIOBOX_FONT
:
1204 m_radio
->SetFont( *wxITALIC_FONT
);
1210 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1212 m_fontButton
->SetFont( *wxITALIC_FONT
);
1213 m_text
->SetFont( *wxITALIC_FONT
);
1216 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1218 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1222 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1224 m_gauge
->SetValue( m_slider
->GetValue() );
1225 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1230 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1233 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1234 m_spinctrl
->GetValue(), event
.GetInt());
1235 m_text
->AppendText(s
);
1238 #endif // wxUSE_SPINCTRL
1241 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1244 value
.Printf( _T("Spin control up: current = %d\n"),
1245 m_spinbutton
->GetValue());
1247 if ( m_spinbutton
->GetValue() > 17 )
1249 value
+= _T("Preventing the spin button from going above 17.\n");
1254 m_text
->AppendText(value
);
1257 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1260 value
.Printf( _T("Spin control down: current = %d\n"),
1261 m_spinbutton
->GetValue());
1263 if ( m_spinbutton
->GetValue() < -17 )
1265 value
+= _T("Preventing the spin button from going below -17.\n");
1270 m_text
->AppendText(value
);
1273 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1276 value
.Printf( _T("%d"), event
.GetPosition() );
1277 m_spintext
->SetValue( value
);
1279 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1280 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1281 m_spinbutton
->GetValue());
1283 m_text
->AppendText(value
);
1286 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1288 event
.Enable( m_spinbutton
->GetValue() > 0 );
1291 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1293 int max
= m_spinbutton
->GetValue();
1294 wxProgressDialog
dialog("Progress dialog example",
1295 "An informative message",
1302 wxPD_ESTIMATED_TIME
|
1303 wxPD_REMAINING_TIME
);
1307 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1312 cont
= dialog
.Update(i
, "That's all, folks!");
1314 else if ( i
== max
/ 2 )
1316 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1320 cont
= dialog
.Update(i
);
1326 *m_text
<< "Progress dialog aborted!\n";
1330 *m_text
<< "Countdown from " << max
<< " finished.\n";
1334 #endif // wxUSE_SPINBTN
1338 //wxLog::RemoveTraceMask(_T("focus"));
1339 delete wxLog::SetActiveTarget(m_logTargetOld
);
1341 delete m_notebook
->GetImageList();
1344 //----------------------------------------------------------------------
1346 //----------------------------------------------------------------------
1348 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1349 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1350 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1351 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1353 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1354 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1355 #endif // wxUSE_TOOLTIPS
1357 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1359 EVT_SIZE(MyFrame::OnSize
)
1360 EVT_MOVE(MyFrame::OnMove
)
1362 EVT_IDLE(MyFrame::OnIdle
)
1365 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1366 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1370 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1373 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1378 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1382 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1386 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1388 m_panel
->m_text
->Clear();
1392 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1394 static long s_delay
= 5000;
1397 delay
.Printf( _T("%ld"), s_delay
);
1399 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1400 "Set tooltip delay",
1404 return; // cancelled
1406 wxSscanf(delay
, _T("%ld"), &s_delay
);
1408 wxToolTip::SetDelay(s_delay
);
1410 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1413 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1415 static bool s_enabled
= TRUE
;
1417 s_enabled
= !s_enabled
;
1419 wxToolTip::Enable(s_enabled
);
1421 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1425 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1427 static bool s_enable
= TRUE
;
1429 s_enable
= !s_enable
;
1430 m_panel
->Enable(s_enable
);
1433 void MyFrame::OnMove( wxMoveEvent
& event
)
1435 UpdateStatusBar(event
.GetPosition(), GetSize());
1440 void MyFrame::OnSize( wxSizeEvent
& event
)
1442 UpdateStatusBar(GetPosition(), event
.GetSize());
1447 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1449 // track the window which has the focus in the status bar
1450 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1451 wxWindow
*focus
= wxWindow::FindFocus();
1452 if ( focus
&& (focus
!= s_windowFocus
) )
1454 s_windowFocus
= focus
;
1459 _T("Focus: %s, HWND = %08x"),
1463 s_windowFocus
->GetClassInfo()->GetClassName()
1465 , s_windowFocus
->GetHWND()
1473 void MyComboBox::OnChar(wxKeyEvent
& event
)
1475 wxLogMessage(_T("MyComboBox::OnChar"));
1477 if ( event
.KeyCode() == 'w' )
1478 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1483 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1485 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1487 if ( event
.KeyCode() == 'w' )
1488 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1493 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1495 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1500 static void SetControlClientData(const char *name
,
1501 wxControlWithItems
*control
)
1503 size_t count
= control
->GetCount();
1504 for ( size_t n
= 0; n
< count
; n
++ )
1507 s
.Printf("%s client data for '%s'",
1508 name
, control
->GetString(n
).c_str());
1510 control
->SetClientObject(n
, new wxStringClientData(s
));