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 // use standard command line handling:
318 if ( !wxApp::OnInit() )
321 // parse the cmd line
326 //wxSscanf(argv[1], "%d", &x);
327 //wxSscanf(argv[2], "%d", &y);
330 // Create the main frame window
331 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
332 "Controls wxWindows App",
335 frame
->SetSizeHints( 500, 425 );
338 // The wxICON() macros loads an icon from a resource under Windows
339 // and uses an #included XPM image under GTK+ and Motif
341 frame
->SetIcon( wxICON(mondrian
) );
343 wxMenu
*file_menu
= new wxMenu("", wxMENU_TEAROFF
);
345 file_menu
->Append(CONTROLS_CLEAR_LOG
, "&Clear log\tCtrl-L");
346 file_menu
->AppendSeparator();
347 file_menu
->Append(CONTROLS_ABOUT
, "&About\tF1");
348 file_menu
->AppendSeparator();
349 file_menu
->Append(CONTROLS_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
351 wxMenuBar
*menu_bar
= new wxMenuBar
;
352 menu_bar
->Append(file_menu
, "&File");
355 wxMenu
*tooltip_menu
= new wxMenu
;
356 tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
357 tooltip_menu
->AppendSeparator();
358 tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCtrl-T",
359 "enable/disable tooltips", TRUE
);
360 tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, TRUE
);
361 menu_bar
->Append(tooltip_menu
, "&Tooltips");
362 #endif // wxUSE_TOOLTIPS
364 wxMenu
*panel_menu
= new wxMenu
;
365 panel_menu
->Append(CONTROLS_ENABLE_ALL
, "&Disable all\tCtrl-E",
366 "Enable/disable all panel controls", TRUE
);
367 menu_bar
->Append(panel_menu
, "&Panel");
369 frame
->SetMenuBar(menu_bar
);
373 //frame->GetPanel()->m_notebook->SetSelection(6);
380 //----------------------------------------------------------------------
382 //----------------------------------------------------------------------
384 const int ID_NOTEBOOK
= 1000;
386 const int ID_LISTBOX
= 130;
387 const int ID_LISTBOX_SEL_NUM
= 131;
388 const int ID_LISTBOX_SEL_STR
= 132;
389 const int ID_LISTBOX_CLEAR
= 133;
390 const int ID_LISTBOX_APPEND
= 134;
391 const int ID_LISTBOX_DELETE
= 135;
392 const int ID_LISTBOX_FONT
= 136;
393 const int ID_LISTBOX_ENABLE
= 137;
394 const int ID_LISTBOX_SORTED
= 138;
396 const int ID_CHOICE
= 120;
397 const int ID_CHOICE_SEL_NUM
= 121;
398 const int ID_CHOICE_SEL_STR
= 122;
399 const int ID_CHOICE_CLEAR
= 123;
400 const int ID_CHOICE_APPEND
= 124;
401 const int ID_CHOICE_DELETE
= 125;
402 const int ID_CHOICE_FONT
= 126;
403 const int ID_CHOICE_ENABLE
= 127;
404 const int ID_CHOICE_SORTED
= 128;
406 const int ID_COMBO
= 140;
407 const int ID_COMBO_SEL_NUM
= 141;
408 const int ID_COMBO_SEL_STR
= 142;
409 const int ID_COMBO_CLEAR
= 143;
410 const int ID_COMBO_APPEND
= 144;
411 const int ID_COMBO_DELETE
= 145;
412 const int ID_COMBO_FONT
= 146;
413 const int ID_COMBO_ENABLE
= 147;
415 const int ID_RADIOBOX
= 160;
416 const int ID_RADIOBOX_SEL_NUM
= 161;
417 const int ID_RADIOBOX_SEL_STR
= 162;
418 const int ID_RADIOBOX_FONT
= 163;
419 const int ID_RADIOBOX_ENABLE
= 164;
421 const int ID_RADIOBUTTON_1
= 166;
422 const int ID_RADIOBUTTON_2
= 167;
424 const int ID_SET_FONT
= 170;
426 const int ID_GAUGE
= 180;
427 const int ID_SLIDER
= 181;
429 const int ID_SPIN
= 182;
430 const int ID_BTNPROGRESS
= 183;
431 const int ID_BUTTON_LABEL
= 184;
432 const int ID_SPINCTRL
= 185;
434 const int ID_BUTTON_TEST1
= 190;
435 const int ID_BUTTON_TEST2
= 191;
436 const int ID_BITMAP_BTN
= 192;
438 const int ID_CHANGE_COLOUR
= 200;
440 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
441 EVT_SIZE ( MyPanel::OnSize
)
442 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
443 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
444 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
445 EVT_LISTBOX (ID_LISTBOX_SORTED
, MyPanel::OnListBox
)
446 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
447 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
448 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
449 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
450 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
451 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
452 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
453 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
455 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
456 EVT_CHOICE (ID_CHOICE_SORTED
, MyPanel::OnChoice
)
457 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
458 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
459 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
460 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
461 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
462 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
463 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
465 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
466 EVT_TEXT (ID_COMBO
, MyPanel::OnComboTextChanged
)
467 EVT_TEXT_ENTER(ID_COMBO
, MyPanel::OnComboTextEnter
)
468 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
469 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
470 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
471 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
472 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
473 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
474 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
475 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
476 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
477 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
478 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
479 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
480 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
481 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
483 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
484 EVT_SPIN_UP (ID_SPIN
, MyPanel::OnSpinUp
)
485 EVT_SPIN_DOWN (ID_SPIN
, MyPanel::OnSpinDown
)
486 EVT_UPDATE_UI (ID_BTNPROGRESS
, MyPanel::OnUpdateShowProgress
)
487 EVT_BUTTON (ID_BTNPROGRESS
, MyPanel::OnShowProgress
)
488 #endif // wxUSE_SPINBTN
490 EVT_SPINCTRL (ID_SPINCTRL
, MyPanel::OnSpinCtrl
)
491 #endif // wxUSE_SPINCTRL
493 EVT_TOGGLEBUTTON(ID_BUTTON_LABEL
, MyPanel::OnUpdateLabel
)
494 #endif // wxUSE_TOGGLEBTN
495 EVT_CHECKBOX (ID_CHANGE_COLOUR
, MyPanel::OnChangeColour
)
496 EVT_BUTTON (ID_BUTTON_TEST1
, MyPanel::OnTestButton
)
497 EVT_BUTTON (ID_BUTTON_TEST2
, MyPanel::OnTestButton
)
498 EVT_BUTTON (ID_BITMAP_BTN
, MyPanel::OnBmpButton
)
501 BEGIN_EVENT_TABLE(MyButton
, wxButton
)
502 EVT_LEFT_DCLICK(MyButton::OnDClick
)
505 BEGIN_EVENT_TABLE(MyComboBox
, wxComboBox
)
506 EVT_CHAR(MyComboBox::OnChar
)
507 EVT_KEY_DOWN(MyComboBox::OnKeyDown
)
508 EVT_KEY_UP(MyComboBox::OnKeyUp
)
510 EVT_SET_FOCUS(MyComboBox::OnFocusGot
)
513 BEGIN_EVENT_TABLE(MyRadioBox
, wxRadioBox
)
514 EVT_SET_FOCUS(MyRadioBox::OnFocusGot
)
515 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost
)
518 // ============================================================================
520 // ============================================================================
522 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
523 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
524 m_text(NULL
), m_notebook(NULL
)
526 wxLayoutConstraints
*c
;
528 m_text
= new wxTextCtrl(this, -1, "This is the log window.\n",
529 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
);
530 m_text
->SetBackgroundColour("wheat");
533 wxLog::AddTraceMask(_T("focus"));
534 m_logTargetOld
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
536 m_notebook
= new wxNotebook(this, ID_NOTEBOOK
);
551 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
554 // fill the image list
555 wxImageList
*imagelist
= new wxImageList(32, 32);
557 imagelist
-> Add( wxBitmap( list_xpm
));
558 imagelist
-> Add( wxBitmap( choice_xpm
));
559 imagelist
-> Add( wxBitmap( combo_xpm
));
560 imagelist
-> Add( wxBitmap( text_xpm
));
561 imagelist
-> Add( wxBitmap( radio_xpm
));
562 imagelist
-> Add( wxBitmap( gauge_xpm
));
563 m_notebook
->SetImageList(imagelist
);
564 #elif defined(__WXMSW__)
565 // load images from resources
568 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
570 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
572 static const char *s_iconNames
[Image_Max
] =
574 "list", "choice", "combo", "text", "radio", "gauge"
577 for ( size_t n
= 0; n
< Image_Max
; n
++ )
579 wxBitmap
bmp(s_iconNames
[n
]);
580 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
582 wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."),
587 m_notebook
->SetImageList(imagelist
);
591 #define Image_List -1
592 #define Image_Choice -1
593 #define Image_Combo -1
594 #define Image_Text -1
595 #define Image_Radio -1
596 #define Image_Gauge -1
601 wxPanel
*panel
= new wxPanel(m_notebook
);
602 m_listbox
= new wxListBox( panel
, ID_LISTBOX
,
603 wxPoint(10,10), wxSize(120,70),
604 5, choices
, wxLB_ALWAYS_SB
);
605 m_listboxSorted
= new wxListBox( panel
, ID_LISTBOX_SORTED
,
606 wxPoint(10,90), wxSize(120,70),
607 5, choices
, wxLB_SORT
);
609 SetControlClientData(wxT("listbox"), m_listbox
);
610 SetControlClientData(wxT("listbox"), m_listboxSorted
);
612 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
614 m_listbox
->SetToolTip( "This is a list box" );
615 #endif // wxUSE_TOOLTIPS
617 m_lbSelectNum
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
618 m_lbSelectThis
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
619 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
620 (void)new MyButton( panel
, ID_LISTBOX_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
621 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
622 wxButton
*button
= new MyButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
624 button
->SetDefault();
626 button
->SetForegroundColour(*wxBLUE
);
629 button
->SetToolTip( "Press here to set italic font" );
630 #endif // wxUSE_TOOLTIPS
632 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,170) );
633 m_checkbox
->SetValue(FALSE
);
635 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
636 #endif // wxUSE_TOOLTIPS
637 (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, "&Toggle colour",
639 panel
->SetCursor(wxCursor(wxCURSOR_HAND
));
640 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
643 panel
= new wxPanel(m_notebook
);
644 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
645 m_choiceSorted
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,-1),
646 5, choices
, wxCB_SORT
);
648 SetControlClientData(wxT("choice"), m_choice
);
649 SetControlClientData(wxT("choice"), m_choiceSorted
);
651 m_choice
->SetSelection(2);
652 m_choice
->SetBackgroundColour( "red" );
653 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
654 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
655 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
656 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
657 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
658 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
659 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
661 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
662 #endif // wxUSE_CHOICE
664 panel
= new wxPanel(m_notebook
);
665 (void)new wxStaticBox( panel
, -1, "&Box around combobox",
666 wxPoint(5, 5), wxSize(150, 100));
667 m_combo
= new MyComboBox( panel
, ID_COMBO
, "This",
668 wxPoint(20,25), wxSize(120, -1),
670 /* wxCB_READONLY | */ wxPROCESS_ENTER
);
672 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
673 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "&Select 'This'", wxPoint(340,30), wxSize(140,30) );
674 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "&Clear", wxPoint(180,80), wxSize(140,30) );
675 (void)new wxButton( panel
, ID_COMBO_APPEND
, "&Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
676 (void)new wxButton( panel
, ID_COMBO_DELETE
, "D&elete selected item", wxPoint(180,130), wxSize(140,30) );
677 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
678 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "&Disable", wxPoint(20,130), wxSize(140,30) );
679 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
681 wxString choices2
[] =
685 "Fourth", "Fifth", "Sixth",
686 "Seventh", "Eighth", "Nineth", "Tenth" */
689 panel
= new wxPanel(m_notebook
);
690 (void)new MyRadioBox( panel
, ID_RADIOBOX
, "&That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
691 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "T&his", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
694 m_combo
->SetToolTip("This is a natural\ncombobox - can you believe me?");
695 m_radio
->SetToolTip("Ever seen a radiobox?");
696 #endif // wxUSE_TOOLTIPS
698 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #&2", wxPoint(180,30), wxSize(140,30) );
699 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "&Select 'This'", wxPoint(180,80), wxSize(140,30) );
700 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set &more Italic font", wxPoint(340,30), wxSize(140,30) );
701 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set &Italic font", wxPoint(340,80), wxSize(140,30) );
702 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "&Disable", wxPoint(340,130), wxDefaultSize
);
703 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxDefaultSize
, wxRB_GROUP
);
704 rb
->SetValue( FALSE
);
705 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "&Radiobutton2", wxPoint(340,170), wxDefaultSize
);
706 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
708 panel
= new wxPanel(m_notebook
);
709 (void)new wxStaticBox( panel
, -1, "&wxGauge and wxSlider", wxPoint(10,10), wxSize(222,130) );
710 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER
);
711 m_gauge
->SetBackgroundColour(*wxGREEN
);
712 m_gauge
->SetForegroundColour(*wxRED
);
713 m_gaugeVert
= new wxGauge( panel
, -1, 100,
714 wxPoint(195,35), wxSize(30, 90),
715 wxGA_VERTICAL
| wxGA_SMOOTH
| wxNO_BORDER
);
716 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1),
717 wxSL_AUTOTICKS
| wxSL_LABELS
);
718 m_slider
->SetTickFreq(40, 0);
719 (void)new wxStaticBox( panel
, -1, "&Explanation", wxPoint(230,10), wxSize(270,130) );
721 // No wrapping text in wxStaticText yet :-(
722 (void)new wxStaticText( panel
, -1,
728 (void)new wxStaticText( panel
, -1,
729 "In order see the gauge (aka progress bar)\n"
730 "control do something you have to drag the\n"
731 "handle of the slider to the right.\n"
733 "This is also supposed to demonstrate how\n"
734 "to use static controls.\n",
739 int initialSpinValue
= -5;
741 s
<< initialSpinValue
;
742 m_spintext
= new wxTextCtrl( panel
, -1, s
, wxPoint(20,160), wxSize(80,-1) );
744 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, -1) );
745 m_spinbutton
->SetRange(-10,30);
746 m_spinbutton
->SetValue(initialSpinValue
);
748 m_btnProgress
= new wxButton( panel
, ID_BTNPROGRESS
, "&Show progress dialog",
750 #endif // wxUSE_SPINBTN
753 m_spinctrl
= new wxSpinCtrl( panel
, ID_SPINCTRL
, "", wxPoint(200, 160), wxSize(80, -1) );
754 m_spinctrl
->SetRange(10,30);
755 m_spinctrl
->SetValue(15);
756 #endif // wxUSE_SPINCTRL
758 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
760 panel
= new wxPanel(m_notebook
);
762 #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16.
763 wxIcon icon
= wxTheApp
->GetStdIcon(wxICON_INFORMATION
);
764 wxStaticBitmap
*bmpStatic
= new wxStaticBitmap(panel
, -1, icon
,
767 bmpStatic
= new wxStaticBitmap(panel
, -1, wxNullIcon
, wxPoint(50, 10));
768 bmpStatic
->SetIcon(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
771 wxBitmap
bitmap( 100, 100 );
773 dc
.SelectObject( bitmap
);
774 dc
.SetPen(*wxGREEN_PEN
);
776 dc
.DrawEllipse(5, 5, 90, 90);
777 dc
.DrawText("Bitmap", 30, 40);
778 dc
.SelectObject( wxNullBitmap
);
780 (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20));
783 // test for masked bitmap display
784 bitmap
= wxBitmap("test2.bmp", wxBITMAP_TYPE_BMP
);
787 bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
));
789 (void)new wxStaticBitmap
/* wxBitmapButton */ (panel
, -1, bitmap
, wxPoint(300, 120));
793 wxBitmap
bmp1(wxTheApp
->GetStdIcon(wxICON_INFORMATION
)),
794 bmp2(wxTheApp
->GetStdIcon(wxICON_WARNING
)),
795 bmp3(wxTheApp
->GetStdIcon(wxICON_QUESTION
));
796 wxBitmapButton
*bmpBtn
= new wxBitmapButton
803 bmpBtn
->SetBitmapSelected(bmp2
);
804 bmpBtn
->SetBitmapFocus(bmp3
);
807 (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
,
808 "&Toggle label", wxPoint(250, 20));
809 #endif // wxUSE_TOGGLEBTN
811 m_label
= new wxStaticText(panel
, -1, "Label with some long text",
812 wxPoint(250, 60), wxDefaultSize
,
813 wxALIGN_RIGHT
/*| wxST_NO_AUTORESIZE*/);
814 m_label
->SetForegroundColour( *wxBLUE
);
816 m_notebook
->AddPage(panel
, "wxBitmapXXX");
818 // layout constraints
820 panel
= new wxPanel(m_notebook
);
821 panel
->SetAutoLayout( TRUE
);
823 c
= new wxLayoutConstraints
;
824 c
->top
.SameAs( panel
, wxTop
, 10 );
826 c
->left
.SameAs( panel
, wxLeft
, 10 );
827 c
->width
.PercentOf( panel
, wxWidth
, 40 );
829 wxButton
*pMyButton
= new wxButton(panel
, ID_BUTTON_TEST1
, "Test Button &1" );
830 pMyButton
->SetConstraints( c
);
832 c
= new wxLayoutConstraints
;
833 c
->top
.SameAs( panel
, wxTop
, 10 );
834 c
->bottom
.SameAs( panel
, wxBottom
, 10 );
835 c
->right
.SameAs( panel
, wxRight
, 10 );
836 c
->width
.PercentOf( panel
, wxWidth
, 40 );
838 wxButton
*pMyButton2
= new wxButton(panel
, ID_BUTTON_TEST2
, "Test Button &2" );
839 pMyButton2
->SetConstraints( c
);
841 m_notebook
->AddPage(panel
, "wxLayoutConstraint");
845 panel
= new wxPanel(m_notebook
);
846 panel
->SetAutoLayout( TRUE
);
848 wxBoxSizer
*sizer
= new wxBoxSizer( wxHORIZONTAL
);
850 sizer
->Add( new wxButton(panel
, -1, "Test Button &1" ), 3, wxALL
, 10 );
851 sizer
->Add( 20,20, 1 );
852 sizer
->Add( new wxButton(panel
, -1, "Test Button &2" ), 3, wxGROW
|wxALL
, 10 );
854 panel
->SetSizer( sizer
);
856 m_notebook
->AddPage(panel
, "wxSizer");
859 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
863 GetClientSize( &x
, &y
);
865 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
866 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
869 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
871 int selOld
= event
.GetOldSelection();
874 if ( wxMessageBox("This demonstrates how a program may prevent the\n"
875 "page change from taking place - if you select\n"
876 "[No] the current page will stay the third one\n",
878 wxICON_QUESTION
| wxYES_NO
, this) != wxYES
)
886 *m_text
<< "Notebook selection is being changed from " << selOld
887 << " to " << event
.GetSelection()
888 << " (current page from notebook is "
889 << m_notebook
->GetSelection() << ")\n";
892 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
894 *m_text
<< "Notebook selection is now " << event
.GetSelection()
895 << " (from notebook: " << m_notebook
->GetSelection() << ")\n";
898 void MyPanel::OnTestButton(wxCommandEvent
& event
)
900 wxLogMessage(_T("Button %c clicked."),
901 event
.GetId() == ID_BUTTON_TEST1
? _T('1') : _T('2'));
904 void MyPanel::OnBmpButton(wxCommandEvent
& event
)
906 wxLogMessage(_T("Bitmap button clicked."));
909 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
))
911 static wxColour s_colOld
;
913 // test panel colour changing and propagation to the subcontrols
916 SetBackgroundColour(s_colOld
);
917 s_colOld
= wxNullColour
;
919 m_lbSelectThis
->SetForegroundColour("red");
920 m_lbSelectThis
->SetBackgroundColour("white");
924 s_colOld
= wxColour("red");
925 SetBackgroundColour("white");
927 m_lbSelectThis
->SetForegroundColour("white");
928 m_lbSelectThis
->SetBackgroundColour("red");
931 m_lbSelectThis
->Refresh();
935 void MyPanel::OnListBox( wxCommandEvent
&event
)
937 // GetParent()->Move(100, 100);
939 if (event
.GetInt() == -1)
941 m_text
->AppendText( "ListBox has no selections anymore\n" );
945 wxListBox
*listbox
= event
.GetId() == ID_LISTBOX
? m_listbox
948 m_text
->AppendText( "ListBox event selection string is: '" );
949 m_text
->AppendText( event
.GetString() );
950 m_text
->AppendText( "'\n" );
951 m_text
->AppendText( "ListBox control selection string is: '" );
952 m_text
->AppendText( listbox
->GetStringSelection() );
953 m_text
->AppendText( "'\n" );
955 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
956 m_text
->AppendText( "ListBox event client data string is: '" );
957 if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context
958 m_text
->AppendText( obj
->GetData() );
960 m_text
->AppendText( wxString("none") );
962 m_text
->AppendText( "'\n" );
963 m_text
->AppendText( "ListBox control client data string is: '" );
964 obj
= (wxStringClientData
*)listbox
->GetClientObject(listbox
->GetSelection());
966 m_text
->AppendText( obj
->GetData() );
968 m_text
->AppendText( wxString("none") );
969 m_text
->AppendText( "'\n" );
972 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
974 m_text
->AppendText( "ListBox double click string is: " );
975 m_text
->AppendText( event
.GetString() );
976 m_text
->AppendText( "\n" );
979 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
981 switch (event
.GetId())
983 case ID_LISTBOX_ENABLE
:
985 m_text
->AppendText("Checkbox clicked.\n");
986 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
989 cb
->SetToolTip( "Click to enable listbox" );
991 cb
->SetToolTip( "Click to disable listbox" );
992 #endif // wxUSE_TOOLTIPS
993 m_listbox
->Enable( event
.GetInt() == 0 );
994 m_lbSelectThis
->Enable( event
.GetInt() == 0 );
995 m_lbSelectNum
->Enable( event
.GetInt() == 0 );
996 m_listboxSorted
->Enable( event
.GetInt() == 0 );
997 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 );
1000 case ID_LISTBOX_SEL_NUM
:
1002 m_listbox
->SetSelection( 2 );
1003 m_listboxSorted
->SetSelection( 2 );
1004 m_lbSelectThis
->WarpPointer( 40, 14 );
1007 case ID_LISTBOX_SEL_STR
:
1009 m_listbox
->SetStringSelection( "This" );
1010 m_listboxSorted
->SetStringSelection( "This" );
1011 m_lbSelectNum
->WarpPointer( 40, 14 );
1014 case ID_LISTBOX_CLEAR
:
1017 m_listboxSorted
->Clear();
1020 case ID_LISTBOX_APPEND
:
1022 m_listbox
->Append( "Hi!" );
1023 m_listboxSorted
->Append( "Hi!" );
1026 case ID_LISTBOX_DELETE
:
1029 idx
= m_listbox
->GetSelection();
1030 if ( idx
!= wxNOT_FOUND
)
1031 m_listbox
->Delete( idx
);
1032 idx
= m_listboxSorted
->GetSelection();
1033 if ( idx
!= wxNOT_FOUND
)
1034 m_listboxSorted
->Delete( idx
);
1037 case ID_LISTBOX_FONT
:
1039 m_listbox
->SetFont( *wxITALIC_FONT
);
1040 m_listboxSorted
->SetFont( *wxITALIC_FONT
);
1041 m_checkbox
->SetFont( *wxITALIC_FONT
);
1048 void MyPanel::OnChoice( wxCommandEvent
&event
)
1050 wxChoice
*choice
= event
.GetId() == ID_CHOICE
? m_choice
1053 m_text
->AppendText( "Choice event selection string is: '" );
1054 m_text
->AppendText( event
.GetString() );
1055 m_text
->AppendText( "'\n" );
1056 m_text
->AppendText( "Choice control selection string is: '" );
1057 m_text
->AppendText( choice
->GetStringSelection() );
1058 m_text
->AppendText( "'\n" );
1060 wxStringClientData
*obj
= ((wxStringClientData
*)event
.GetClientObject());
1061 m_text
->AppendText( "Choice event client data string is: '" );
1064 m_text
->AppendText( obj
->GetData() );
1066 m_text
->AppendText( wxString("none") );
1068 m_text
->AppendText( "'\n" );
1069 m_text
->AppendText( "Choice control client data string is: '" );
1070 obj
= (wxStringClientData
*)choice
->GetClientObject(choice
->GetSelection());
1073 m_text
->AppendText( obj
->GetData() );
1075 m_text
->AppendText( wxString("none") );
1076 m_text
->AppendText( "'\n" );
1079 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
1081 switch (event
.GetId())
1083 case ID_CHOICE_ENABLE
:
1085 m_choice
->Enable( event
.GetInt() == 0 );
1086 m_choiceSorted
->Enable( event
.GetInt() == 0 );
1089 case ID_CHOICE_SEL_NUM
:
1091 m_choice
->SetSelection( 2 );
1092 m_choiceSorted
->SetSelection( 2 );
1095 case ID_CHOICE_SEL_STR
:
1097 m_choice
->SetStringSelection( "This" );
1098 m_choiceSorted
->SetStringSelection( "This" );
1101 case ID_CHOICE_CLEAR
:
1104 m_choiceSorted
->Clear();
1107 case ID_CHOICE_APPEND
:
1109 m_choice
->Append( "Hi!" );
1110 m_choiceSorted
->Append( "Hi!" );
1113 case ID_CHOICE_DELETE
:
1115 int idx
= m_choice
->GetSelection();
1116 if ( idx
!= wxNOT_FOUND
)
1117 m_choice
->Delete( idx
);
1118 idx
= m_choiceSorted
->GetSelection();
1119 if ( idx
!= wxNOT_FOUND
)
1120 m_choiceSorted
->Delete( idx
);
1123 case ID_CHOICE_FONT
:
1125 m_choice
->SetFont( *wxITALIC_FONT
);
1126 m_choiceSorted
->SetFont( *wxITALIC_FONT
);
1131 #endif // wxUSE_CHOICE
1133 void MyPanel::OnCombo( wxCommandEvent
&event
)
1135 m_text
->AppendText( "ComboBox event selection string is: " );
1136 m_text
->AppendText( event
.GetString() );
1137 m_text
->AppendText( "\n" );
1138 m_text
->AppendText( "ComboBox control selection string is: " );
1139 m_text
->AppendText( m_combo
->GetStringSelection() );
1140 m_text
->AppendText( "\n" );
1143 void MyPanel::OnComboTextChanged(wxCommandEvent
& WXUNUSED(event
))
1145 wxLogMessage(_T("Text in the combobox changed: now is '%s'."),
1146 m_combo
->GetValue().c_str());
1149 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
))
1151 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."),
1152 m_combo
->GetValue().c_str());
1155 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
1157 switch (event
.GetId())
1159 case ID_COMBO_ENABLE
:
1161 m_combo
->Enable( event
.GetInt() == 0 );
1164 case ID_COMBO_SEL_NUM
:
1166 m_combo
->SetSelection( 2 );
1169 case ID_COMBO_SEL_STR
:
1171 m_combo
->SetStringSelection( "This" );
1174 case ID_COMBO_CLEAR
:
1179 case ID_COMBO_APPEND
:
1181 m_combo
->Append( "Hi!" );
1184 case ID_COMBO_DELETE
:
1186 int idx
= m_combo
->GetSelection();
1187 m_combo
->Delete( idx
);
1192 m_combo
->SetFont( *wxITALIC_FONT
);
1198 void MyPanel::OnRadio( wxCommandEvent
&event
)
1200 m_text
->AppendText( "RadioBox selection string is: " );
1201 m_text
->AppendText( event
.GetString() );
1202 m_text
->AppendText( "\n" );
1205 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1207 switch (event
.GetId())
1209 case ID_RADIOBOX_ENABLE
:
1211 m_radio
->Enable( event
.GetInt() == 0 );
1214 case ID_RADIOBOX_SEL_NUM
:
1216 m_radio
->SetSelection( 2 );
1219 case ID_RADIOBOX_SEL_STR
:
1221 m_radio
->SetStringSelection( "This" );
1224 case ID_RADIOBOX_FONT
:
1226 m_radio
->SetFont( *wxITALIC_FONT
);
1232 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1234 m_fontButton
->SetFont( *wxITALIC_FONT
);
1235 m_text
->SetFont( *wxITALIC_FONT
);
1238 void MyPanel::OnUpdateLabel( wxCommandEvent
&event
)
1240 m_label
->SetLabel(event
.GetInt() ? "Very very very very very long text."
1244 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1246 m_gauge
->SetValue( m_slider
->GetValue() );
1247 m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 );
1252 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
)
1255 s
.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"),
1256 m_spinctrl
->GetValue(), event
.GetInt());
1257 m_text
->AppendText(s
);
1260 #endif // wxUSE_SPINCTRL
1263 void MyPanel::OnSpinUp( wxSpinEvent
&event
)
1266 value
.Printf( _T("Spin control up: current = %d\n"),
1267 m_spinbutton
->GetValue());
1269 if ( m_spinbutton
->GetValue() > 17 )
1271 value
+= _T("Preventing the spin button from going above 17.\n");
1276 m_text
->AppendText(value
);
1279 void MyPanel::OnSpinDown( wxSpinEvent
&event
)
1282 value
.Printf( _T("Spin control down: current = %d\n"),
1283 m_spinbutton
->GetValue());
1285 if ( m_spinbutton
->GetValue() < -17 )
1287 value
+= _T("Preventing the spin button from going below -17.\n");
1292 m_text
->AppendText(value
);
1295 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1298 value
.Printf( _T("%d"), event
.GetPosition() );
1299 m_spintext
->SetValue( value
);
1301 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1302 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1303 m_spinbutton
->GetValue());
1305 m_text
->AppendText(value
);
1308 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event
)
1310 event
.Enable( m_spinbutton
->GetValue() > 0 );
1313 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) )
1315 int max
= m_spinbutton
->GetValue();
1316 wxProgressDialog
dialog("Progress dialog example",
1317 "An informative message",
1324 wxPD_ESTIMATED_TIME
|
1325 wxPD_REMAINING_TIME
);
1329 for ( int i
= 0; i
<= max
&& cont
; i
++ )
1334 cont
= dialog
.Update(i
, "That's all, folks!");
1336 else if ( i
== max
/ 2 )
1338 cont
= dialog
.Update(i
, "Only a half left (very long message)!");
1342 cont
= dialog
.Update(i
);
1348 *m_text
<< "Progress dialog aborted!\n";
1352 *m_text
<< "Countdown from " << max
<< " finished.\n";
1356 #endif // wxUSE_SPINBTN
1360 //wxLog::RemoveTraceMask(_T("focus"));
1361 delete wxLog::SetActiveTarget(m_logTargetOld
);
1363 delete m_notebook
->GetImageList();
1366 //----------------------------------------------------------------------
1368 //----------------------------------------------------------------------
1370 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1371 EVT_MENU(CONTROLS_QUIT
, MyFrame::OnQuit
)
1372 EVT_MENU(CONTROLS_ABOUT
, MyFrame::OnAbout
)
1373 EVT_MENU(CONTROLS_CLEAR_LOG
, MyFrame::OnClearLog
)
1375 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1376 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1377 #endif // wxUSE_TOOLTIPS
1379 EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
)
1381 EVT_SIZE(MyFrame::OnSize
)
1382 EVT_MOVE(MyFrame::OnMove
)
1384 EVT_IDLE(MyFrame::OnIdle
)
1387 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1388 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1392 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
1395 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1400 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1404 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1408 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
))
1410 m_panel
->m_text
->Clear();
1414 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1416 static long s_delay
= 5000;
1419 delay
.Printf( _T("%ld"), s_delay
);
1421 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1422 "Set tooltip delay",
1426 return; // cancelled
1428 wxSscanf(delay
, _T("%ld"), &s_delay
);
1430 wxToolTip::SetDelay(s_delay
);
1432 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1435 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1437 static bool s_enabled
= TRUE
;
1439 s_enabled
= !s_enabled
;
1441 wxToolTip::Enable(s_enabled
);
1443 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1447 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
))
1449 static bool s_enable
= TRUE
;
1451 s_enable
= !s_enable
;
1452 m_panel
->Enable(s_enable
);
1455 void MyFrame::OnMove( wxMoveEvent
& event
)
1457 UpdateStatusBar(event
.GetPosition(), GetSize());
1462 void MyFrame::OnSize( wxSizeEvent
& event
)
1464 UpdateStatusBar(GetPosition(), event
.GetSize());
1469 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1471 // track the window which has the focus in the status bar
1472 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1473 wxWindow
*focus
= wxWindow::FindFocus();
1474 if ( focus
&& (focus
!= s_windowFocus
) )
1476 s_windowFocus
= focus
;
1481 _T("Focus: %s, HWND = %08x"),
1485 s_windowFocus
->GetClassInfo()->GetClassName()
1487 , s_windowFocus
->GetHWND()
1495 void MyComboBox::OnChar(wxKeyEvent
& event
)
1497 wxLogMessage(_T("MyComboBox::OnChar"));
1499 if ( event
.KeyCode() == 'w' )
1500 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1505 void MyComboBox::OnKeyDown(wxKeyEvent
& event
)
1507 wxLogMessage(_T("MyComboBox::OnKeyDown"));
1509 if ( event
.KeyCode() == 'w' )
1510 wxLogMessage(_T("MyComboBox: 'w' will be ignored."));
1515 void MyComboBox::OnKeyUp(wxKeyEvent
& event
)
1517 wxLogMessage(_T("MyComboBox::OnKeyUp"));
1522 static void SetControlClientData(const wxChar
*name
,
1523 wxControlWithItems
*control
)
1525 size_t count
= control
->GetCount();
1526 for ( size_t n
= 0; n
< count
; n
++ )
1529 s
.Printf(wxT("%s client data for '%s'"),
1530 name
, control
->GetString(n
).c_str());
1532 control
->SetClientObject(n
, new wxStringClientData(s
));