1///////////////////////////////////////////////////////////////////////////// 2// Name: controls.cpp 3// Purpose: Controls wxWidgets sample 4// Author: Robert Roebling 5// Modified by: 6// RCS-ID: $Id: controls.cpp 43062 2006-11-04 20:39:49Z VZ $ 7// Copyright: (c) Robert Roebling, Julian Smart 8// Licence: wxWindows license 9///////////////////////////////////////////////////////////////////////////// 10 11// For compilers that support precompilation, includes "wx/wx.h". 12#include "wx/wxprec.h" 13 14#ifdef __BORLANDC__ 15 #pragma hdrstop 16#endif 17 18#ifndef WX_PRECOMP 19 #include "wx/wx.h" 20#endif 21 22#include "wx/spinbutt.h" 23#include "wx/tglbtn.h" 24#include "wx/bookctrl.h" 25#include "wx/imaglist.h" 26#include "wx/artprov.h" 27#include "wx/cshelp.h" 28 29#if wxUSE_TOOLTIPS 30 #include "wx/tooltip.h" 31#endif 32 33#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__) 34 #define USE_XPM 35#endif 36 37#ifdef USE_XPM 38 #include "mondrian.xpm" 39 #include "icons/choice.xpm" 40 #include "icons/combo.xpm" 41 #include "icons/list.xpm" 42 #include "icons/radio.xpm" 43 #include "icons/text.xpm" 44 #include "icons/gauge.xpm" 45#endif 46 47#ifndef wxUSE_SPINBTN 48 #define wxUSE_SPINBTN 1 49#endif 50 51#include "wx/progdlg.h" 52 53#if wxUSE_SPINCTRL 54 #include "wx/spinctrl.h" 55#endif // wxUSE_SPINCTRL 56 57#if !wxUSE_TOGGLEBTN 58 #define wxToggleButton wxCheckBox 59 #define EVT_TOGGLEBUTTON EVT_CHECKBOX 60#endif 61 62//---------------------------------------------------------------------- 63// class definitions 64//---------------------------------------------------------------------- 65 66class MyApp: public wxApp 67{ 68public: 69 bool OnInit(); 70}; 71 72class MyPanel: public wxPanel 73{ 74public: 75 MyPanel(wxFrame *frame, int x, int y, int w, int h); 76 virtual ~MyPanel(); 77 78 void OnIdle( wxIdleEvent &event ); 79 void OnListBox( wxCommandEvent &event ); 80 void OnListBoxDoubleClick( wxCommandEvent &event ); 81 void OnListBoxButtons( wxCommandEvent &event ); 82#if wxUSE_CHOICE 83 void OnChoice( wxCommandEvent &event ); 84 void OnChoiceButtons( wxCommandEvent &event ); 85#endif 86 void OnCombo( wxCommandEvent &event ); 87 void OnComboTextChanged( wxCommandEvent &event ); 88 void OnComboTextEnter( wxCommandEvent &event ); 89 void OnComboButtons( wxCommandEvent &event ); 90 void OnRadio( wxCommandEvent &event ); 91 void OnRadioButtons( wxCommandEvent &event ); 92 void OnRadioButton1( wxCommandEvent &event ); 93 void OnRadioButton2( wxCommandEvent &event ); 94 void OnSetFont( wxCommandEvent &event ); 95 void OnPageChanged( wxBookCtrlEvent &event ); 96 void OnPageChanging( wxBookCtrlEvent &event ); 97 void OnSliderUpdate( wxCommandEvent &event ); 98 void OnUpdateLabel( wxCommandEvent &event ); 99#if wxUSE_SPINBTN 100 void OnSpinUp( wxSpinEvent &event ); 101 void OnSpinDown( wxSpinEvent &event ); 102 void OnSpinUpdate( wxSpinEvent &event ); 103#if wxUSE_PROGRESSDLG 104 void OnUpdateShowProgress( wxUpdateUIEvent& event ); 105 void OnShowProgress( wxCommandEvent &event ); 106#endif // wxUSE_PROGRESSDLG 107#endif // wxUSE_SPINBTN 108 void OnNewText( wxCommandEvent &event ); 109#if wxUSE_SPINCTRL 110 void OnSpinCtrl(wxSpinEvent& event); 111 void OnSpinCtrlUp(wxSpinEvent& event); 112 void OnSpinCtrlDown(wxSpinEvent& event); 113 void OnSpinCtrlText(wxCommandEvent& event); 114#endif // wxUSE_SPINCTRL 115 116 void OnEnableAll(wxCommandEvent& event); 117 void OnChangeColour(wxCommandEvent& event); 118 void OnTestButton(wxCommandEvent& event); 119 void OnBmpButton(wxCommandEvent& event); 120 void OnBmpButtonToggle(wxCommandEvent& event); 121 122 void OnSizerCheck (wxCommandEvent &event); 123 124 wxListBox *m_listbox, 125 *m_listboxSorted; 126#if wxUSE_CHOICE 127 wxChoice *m_choice, 128 *m_choiceSorted; 129#endif // wxUSE_CHOICE 130 131 wxComboBox *m_combo; 132 wxRadioBox *m_radio; 133#if wxUSE_GAUGE 134 wxGauge *m_gauge, 135 *m_gaugeVert; 136#endif // wxUSE_GAUGE 137#if wxUSE_SLIDER 138 wxSlider *m_slider; 139#endif // wxUSE_SLIDER 140 wxButton *m_fontButton; 141 wxButton *m_lbSelectNum; 142 wxButton *m_lbSelectThis; 143#if wxUSE_SPINBTN 144 wxSpinButton *m_spinbutton; 145#if wxUSE_PROGRESSDLG 146 wxButton *m_btnProgress; 147#endif // wxUSE_PROGRESSDLG 148#endif // wxUSE_SPINBTN 149 wxStaticText *m_wrappingText; 150 wxStaticText *m_nonWrappingText; 151 152#if wxUSE_SPINCTRL 153 wxSpinCtrl *m_spinctrl; 154#endif // wxUSE_SPINCTRL 155 156 wxTextCtrl *m_spintext; 157 wxCheckBox *m_checkbox; 158 159 wxTextCtrl *m_text; 160 wxBookCtrl *m_book; 161 162 wxStaticText *m_label; 163 164 wxBoxSizer *m_buttonSizer; 165 wxButton *m_sizerBtn1; 166 wxButton *m_sizerBtn2; 167 wxButton *m_sizerBtn3; 168 wxButton *m_sizerBtn4; 169 wxBoxSizer *m_hsizer; 170 wxButton *m_bigBtn; 171 172private: 173 wxLog *m_logTargetOld; 174 175 DECLARE_EVENT_TABLE() 176}; 177 178class MyFrame: public wxFrame 179{ 180public: 181 MyFrame(const wxChar *title, int x, int y); 182 183 void OnQuit(wxCommandEvent& event); 184 void OnAbout(wxCommandEvent& event); 185 void OnClearLog(wxCommandEvent& event); 186 187#if wxUSE_TOOLTIPS 188 void OnSetTooltipDelay(wxCommandEvent& event); 189 void OnToggleTooltips(wxCommandEvent& event); 190#endif // wxUSE_TOOLTIPS 191 192 void OnEnableAll(wxCommandEvent& event); 193 void OnContextHelp(wxCommandEvent& event); 194 195 void OnIdle( wxIdleEvent& event ); 196 void OnIconized( wxIconizeEvent& event ); 197 void OnMaximized( wxMaximizeEvent& event ); 198 void OnSize( wxSizeEvent& event ); 199 void OnMove( wxMoveEvent& event ); 200 201 MyPanel *GetPanel() const { return m_panel; } 202 203private: 204#if wxUSE_STATUSBAR 205 void UpdateStatusBar(const wxPoint& pos, const wxSize& size) 206 { 207 if ( m_frameStatusBar ) 208 { 209 wxString msg; 210 wxSize sizeAll = GetSize(), 211 sizeCl = GetClientSize(); 212 msg.Printf(_("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)"), 213 pos.x, pos.y, 214 size.x, size.y, 215 sizeAll.x, sizeAll.y, 216 sizeCl.x, sizeCl.y); 217 SetStatusText(msg, 1); 218 } 219 } 220#endif // wxUSE_STATUSBAR 221 222 MyPanel *m_panel; 223 224 DECLARE_EVENT_TABLE() 225}; 226 227// a button which intercepts double clicks (for testing...) 228class MyButton : public wxButton 229{ 230public: 231 MyButton(wxWindow *parent, 232 wxWindowID id, 233 const wxString& label = wxEmptyString, 234 const wxPoint& pos = wxDefaultPosition, 235 const wxSize& size = wxDefaultSize) 236 : wxButton(parent, id, label, pos, size) 237 { 238 } 239 240 void OnDClick(wxMouseEvent& event) 241 { 242 wxLogMessage(_T("MyButton::OnDClick")); 243 244 event.Skip(); 245 } 246 247private: 248 DECLARE_EVENT_TABLE() 249}; 250 251// a combo which intercepts chars (to test Windows behaviour) 252class MyComboBox : public wxComboBox 253{ 254public: 255 MyComboBox(wxWindow *parent, wxWindowID id, 256 const wxString& value = wxEmptyString, 257 const wxPoint& pos = wxDefaultPosition, 258 const wxSize& size = wxDefaultSize, 259 int n = 0, const wxString choices[] = NULL, 260 long style = 0, 261 const wxValidator& validator = wxDefaultValidator, 262 const wxString& name = wxComboBoxNameStr) 263 : wxComboBox(parent, id, value, pos, size, n, choices, style, 264 validator, name) { } 265 266protected: 267 void OnChar(wxKeyEvent& event); 268 void OnKeyDown(wxKeyEvent& event); 269 void OnKeyUp(wxKeyEvent& event); 270 void OnFocusGot(wxFocusEvent& event) 271 { 272 wxLogMessage(_T("MyComboBox::OnFocusGot")); 273 274 event.Skip(); 275 } 276 277private: 278 DECLARE_EVENT_TABLE() 279}; 280 281// a radiobox which handles focus set/kill (for testing) 282class MyRadioBox : public wxRadioBox 283{ 284public: 285 MyRadioBox(wxWindow *parent, 286 wxWindowID id, 287 const wxString& title = wxEmptyString, 288 const wxPoint& pos = wxDefaultPosition, 289 const wxSize& size = wxDefaultSize, 290 int n = 0, const wxString choices[] = NULL, 291 int majorDim = 1, 292 long style = wxRA_HORIZONTAL, 293 const wxValidator& validator = wxDefaultValidator, 294 const wxString& name = wxRadioBoxNameStr) 295 : wxRadioBox(parent, id, title, pos, size, n, choices, majorDim, 296 style, validator, name) 297 { 298 } 299 300protected: 301 void OnFocusGot(wxFocusEvent& event) 302 { 303 wxLogMessage(_T("MyRadioBox::OnFocusGot")); 304 305 event.Skip(); 306 } 307 308 void OnFocusLost(wxFocusEvent& event) 309 { 310 wxLogMessage(_T("MyRadioBox::OnFocusLost")); 311 312 event.Skip(); 313 } 314 315private: 316 DECLARE_EVENT_TABLE() 317}; 318 319// a choice which handles focus set/kill (for testing) 320class MyChoice : public wxChoice 321{ 322public: 323 MyChoice(wxWindow *parent, 324 wxWindowID id, 325 const wxPoint& pos = wxDefaultPosition, 326 const wxSize& size = wxDefaultSize, 327 int n = 0, const wxString choices[] = NULL, 328 long style = 0, 329 const wxValidator& validator = wxDefaultValidator, 330 const wxString& name = wxChoiceNameStr ) 331 : wxChoice(parent, id, pos, size, n, choices, 332 style, validator, name) { } 333 334protected: 335 void OnFocusGot(wxFocusEvent& event) 336 { 337 wxLogMessage(_T("MyChoice::OnFocusGot")); 338 339 event.Skip(); 340 } 341 342 void OnFocusLost(wxFocusEvent& event) 343 { 344 wxLogMessage(_T("MyChoice::OnFocusLost")); 345 346 event.Skip(); 347 } 348 349private: 350 DECLARE_EVENT_TABLE() 351}; 352 353 354 355//---------------------------------------------------------------------- 356// other 357//---------------------------------------------------------------------- 358 359static void SetListboxClientData(const wxChar *name, wxListBox *control); 360 361#if wxUSE_CHOICE 362static void SetChoiceClientData(const wxChar *name, wxChoice *control); 363#endif // wxUSE_CHOICE 364 365IMPLEMENT_APP(MyApp) 366 367//---------------------------------------------------------------------- 368// MyApp 369//---------------------------------------------------------------------- 370 371enum 372{ 373 CONTROLS_QUIT = wxID_EXIT, 374 CONTROLS_ABOUT = wxID_ABOUT, 375 CONTROLS_TEXT = 100, 376 CONTROLS_CLEAR_LOG, 377 378 // tooltip menu 379 CONTROLS_SET_TOOLTIP_DELAY = 200, 380 CONTROLS_ENABLE_TOOLTIPS, 381 382 // panel menu 383 CONTROLS_ENABLE_ALL, 384 CONTROLS_CONTEXT_HELP 385}; 386 387bool MyApp::OnInit() 388{ 389 // use standard command line handling: 390 if ( !wxApp::OnInit() ) 391 return false; 392 393 // parse the cmd line 394 int x = 50, 395 y = 50; 396 if ( argc == 3 ) 397 { 398 wxSscanf(wxString(argv[1]), wxT("%d"), &x); 399 wxSscanf(wxString(argv[2]), wxT("%d"), &y); 400 } 401 402#if wxUSE_HELP 403 wxHelpProvider::Set( new wxSimpleHelpProvider ); 404#endif // wxUSE_HELP 405 406 // Create the main frame window 407 MyFrame *frame = new MyFrame(_T("Controls wxWidgets App"), x, y); 408 frame->Show(true); 409 410 return true; 411} 412 413//---------------------------------------------------------------------- 414// MyPanel 415//---------------------------------------------------------------------- 416 417const int ID_BOOK = 1000; 418 419const int ID_LISTBOX = 130; 420const int ID_LISTBOX_SEL_NUM = 131; 421const int ID_LISTBOX_SEL_STR = 132; 422const int ID_LISTBOX_CLEAR = 133; 423const int ID_LISTBOX_APPEND = 134; 424const int ID_LISTBOX_DELETE = 135; 425const int ID_LISTBOX_FONT = 136; 426const int ID_LISTBOX_ENABLE = 137; 427const int ID_LISTBOX_SORTED = 138; 428 429const int ID_CHOICE = 120; 430const int ID_CHOICE_SEL_NUM = 121; 431const int ID_CHOICE_SEL_STR = 122; 432const int ID_CHOICE_CLEAR = 123; 433const int ID_CHOICE_APPEND = 124; 434const int ID_CHOICE_DELETE = 125; 435const int ID_CHOICE_FONT = 126; 436const int ID_CHOICE_ENABLE = 127; 437const int ID_CHOICE_SORTED = 128; 438 439const int ID_COMBO = 140; 440const int ID_COMBO_SEL_NUM = 141; 441const int ID_COMBO_SEL_STR = 142; 442const int ID_COMBO_CLEAR = 143; 443const int ID_COMBO_APPEND = 144; 444const int ID_COMBO_DELETE = 145; 445const int ID_COMBO_FONT = 146; 446const int ID_COMBO_ENABLE = 147; 447const int ID_COMBO_SET_TEXT = 148; 448 449const int ID_RADIOBOX = 160; 450const int ID_RADIOBOX_SEL_NUM = 161; 451const int ID_RADIOBOX_SEL_STR = 162; 452const int ID_RADIOBOX_FONT = 163; 453const int ID_RADIOBOX_ENABLE = 164; 454 455const int ID_RADIOBUTTON_1 = 166; 456const int ID_RADIOBUTTON_2 = 167; 457 458const int ID_SET_FONT = 170; 459 460#if wxUSE_GAUGE 461const int ID_GAUGE = 180; 462#endif // wxUSE_GAUGE 463 464#if wxUSE_SLIDER 465const int ID_SLIDER = 181; 466#endif // wxUSE_SLIDER 467 468const int ID_SPIN = 182; 469#if wxUSE_PROGRESSDLG 470const int ID_BTNPROGRESS = 183; 471#endif // wxUSE_PROGRESSDLG 472const int ID_BUTTON_LABEL = 184; 473const int ID_SPINCTRL = 185; 474const int ID_BTNNEWTEXT = 186; 475 476const int ID_BUTTON_TEST1 = 190; 477const int ID_BUTTON_TEST2 = 191; 478const int ID_BITMAP_BTN = 192; 479const int ID_BITMAP_BTN_ENABLE = 193; 480 481const int ID_CHANGE_COLOUR = 200; 482 483const int ID_SIZER_CHECK1 = 201; 484const int ID_SIZER_CHECK2 = 202; 485const int ID_SIZER_CHECK3 = 203; 486const int ID_SIZER_CHECK4 = 204; 487const int ID_SIZER_CHECK14 = 205; 488const int ID_SIZER_CHECKBIG = 206; 489 490const int ID_HYPERLINK = 300; 491 492BEGIN_EVENT_TABLE(MyPanel, wxPanel) 493EVT_IDLE ( MyPanel::OnIdle) 494EVT_BOOKCTRL_PAGE_CHANGING(ID_BOOK, MyPanel::OnPageChanging) 495EVT_BOOKCTRL_PAGE_CHANGED(ID_BOOK, MyPanel::OnPageChanged) 496EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox) 497EVT_LISTBOX (ID_LISTBOX_SORTED, MyPanel::OnListBox) 498EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick) 499EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons) 500EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons) 501EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons) 502EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons) 503EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons) 504EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons) 505EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons) 506#if wxUSE_CHOICE 507EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice) 508EVT_CHOICE (ID_CHOICE_SORTED, MyPanel::OnChoice) 509EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons) 510EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons) 511EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons) 512EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons) 513EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons) 514EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons) 515EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons) 516#endif 517EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo) 518EVT_TEXT (ID_COMBO, MyPanel::OnComboTextChanged) 519EVT_TEXT_ENTER(ID_COMBO, MyPanel::OnComboTextEnter) 520EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons) 521EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons) 522EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons) 523EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons) 524EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons) 525EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons) 526EVT_BUTTON (ID_COMBO_SET_TEXT, MyPanel::OnComboButtons) 527EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons) 528EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio) 529EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons) 530EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons) 531EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons) 532EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons) 533EVT_RADIOBUTTON(ID_RADIOBUTTON_1, MyPanel::OnRadioButton1) 534EVT_RADIOBUTTON(ID_RADIOBUTTON_2, MyPanel::OnRadioButton2) 535EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont) 536#if wxUSE_SLIDER 537EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate) 538#endif // wxUSE_SLIDER 539#if wxUSE_SPINBTN 540EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate) 541EVT_SPIN_UP (ID_SPIN, MyPanel::OnSpinUp) 542EVT_SPIN_DOWN (ID_SPIN, MyPanel::OnSpinDown) 543#if wxUSE_PROGRESSDLG 544EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress) 545EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress) 546#endif // wxUSE_PROGRESSDLG 547#endif // wxUSE_SPINBTN 548#if wxUSE_SPINCTRL 549EVT_SPINCTRL (ID_SPINCTRL, MyPanel::OnSpinCtrl) 550EVT_SPIN_UP (ID_SPINCTRL, MyPanel::OnSpinCtrlUp) 551EVT_SPIN_DOWN (ID_SPINCTRL, MyPanel::OnSpinCtrlDown) 552EVT_TEXT (ID_SPINCTRL, MyPanel::OnSpinCtrlText) 553#endif // wxUSE_SPINCTRL 554EVT_BUTTON (ID_BTNNEWTEXT, MyPanel::OnNewText) 555EVT_TOGGLEBUTTON(ID_BUTTON_LABEL, MyPanel::OnUpdateLabel) 556EVT_CHECKBOX (ID_CHANGE_COLOUR, MyPanel::OnChangeColour) 557EVT_BUTTON (ID_BUTTON_TEST1, MyPanel::OnTestButton) 558EVT_BUTTON (ID_BUTTON_TEST2, MyPanel::OnTestButton) 559EVT_BUTTON (ID_BITMAP_BTN, MyPanel::OnBmpButton) 560EVT_TOGGLEBUTTON(ID_BITMAP_BTN_ENABLE, MyPanel::OnBmpButtonToggle) 561 562EVT_CHECKBOX (ID_SIZER_CHECK1, MyPanel::OnSizerCheck) 563EVT_CHECKBOX (ID_SIZER_CHECK2, MyPanel::OnSizerCheck) 564EVT_CHECKBOX (ID_SIZER_CHECK3, MyPanel::OnSizerCheck) 565EVT_CHECKBOX (ID_SIZER_CHECK4, MyPanel::OnSizerCheck) 566EVT_CHECKBOX (ID_SIZER_CHECK14, MyPanel::OnSizerCheck) 567EVT_CHECKBOX (ID_SIZER_CHECKBIG, MyPanel::OnSizerCheck) 568 569END_EVENT_TABLE() 570 571BEGIN_EVENT_TABLE(MyButton, wxButton) 572 EVT_LEFT_DCLICK(MyButton::OnDClick) 573END_EVENT_TABLE() 574 575BEGIN_EVENT_TABLE(MyComboBox, wxComboBox) 576 EVT_CHAR(MyComboBox::OnChar) 577 EVT_KEY_DOWN(MyComboBox::OnKeyDown) 578 EVT_KEY_UP(MyComboBox::OnKeyUp) 579 580 EVT_SET_FOCUS(MyComboBox::OnFocusGot) 581END_EVENT_TABLE() 582 583BEGIN_EVENT_TABLE(MyRadioBox, wxRadioBox) 584 EVT_SET_FOCUS(MyRadioBox::OnFocusGot) 585 EVT_KILL_FOCUS(MyRadioBox::OnFocusLost) 586END_EVENT_TABLE() 587 588BEGIN_EVENT_TABLE(MyChoice, wxChoice) 589 EVT_SET_FOCUS(MyChoice::OnFocusGot) 590 EVT_KILL_FOCUS(MyChoice::OnFocusLost) 591END_EVENT_TABLE() 592 593// ============================================================================ 594// implementation 595// ============================================================================ 596 597MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) 598 : wxPanel( frame, wxID_ANY, wxPoint(x, y), wxSize(w, h) ) 599{ 600 m_listbox = NULL; 601 m_listboxSorted = NULL; 602#if wxUSE_CHOICE 603 m_choice = NULL; 604 m_choiceSorted = NULL; 605#endif // wxUSE_CHOICE 606 m_combo = NULL; 607 m_radio = NULL; 608#if wxUSE_GAUGE 609 m_gauge = NULL; 610 m_gaugeVert = NULL; 611#endif // wxUSE_GAUGE 612#if wxUSE_SLIDER 613 m_slider = NULL; 614#endif // wxUSE_SLIDER 615 m_fontButton = NULL; 616 m_lbSelectNum = NULL; 617 m_lbSelectThis = NULL; 618#if wxUSE_SPINBTN 619 m_spinbutton = NULL; 620#if wxUSE_PROGRESSDLG 621 m_btnProgress = NULL; 622#endif // wxUSE_PROGRESSDLG 623#endif // wxUSE_SPINBTN 624#if wxUSE_SPINCTRL 625 m_spinctrl = NULL; 626#endif // wxUSE_SPINCTRL 627 m_spintext = NULL; 628 m_checkbox = NULL; 629 m_text = NULL; 630 m_book = NULL; 631 m_label = NULL; 632 633 m_text = new wxTextCtrl(this, wxID_ANY, _T("This is the log window.\n"), 634 wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE); 635 636 m_logTargetOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_text)); 637 638 m_book = new wxBookCtrl(this, ID_BOOK); 639 640 wxString choices[] = 641 { 642 _T("This"), 643 _T("is one of my"), 644 _T("really"), 645 _T("wonderful"), 646 _T("examples.") 647 }; 648 649#ifdef USE_XPM 650 // image ids 651 enum 652 { 653 Image_List, 654 Image_Choice, 655 Image_Combo, 656 Image_Text, 657 Image_Radio, 658#if wxUSE_GAUGE 659 Image_Gauge, 660#endif // wxUSE_GAUGE 661 Image_Max 662 }; 663 664 // fill the image list 665 wxBitmap bmp(list_xpm); 666 667 wxImageList *imagelist = new wxImageList(bmp.GetWidth(), bmp.GetHeight()); 668 669 imagelist-> Add( bmp ); 670 imagelist-> Add( wxBitmap( choice_xpm )); 671 imagelist-> Add( wxBitmap( combo_xpm )); 672 imagelist-> Add( wxBitmap( text_xpm )); 673 imagelist-> Add( wxBitmap( radio_xpm )); 674#if wxUSE_GAUGE 675 imagelist-> Add( wxBitmap( gauge_xpm )); 676#endif // wxUSE_GAUGE 677 m_book->SetImageList(imagelist); 678#elif defined(__WXMSW__) 679 // load images from resources 680 enum 681 { 682 Image_List, 683 Image_Choice, 684 Image_Combo, 685 Image_Text, 686 Image_Radio, 687#if wxUSE_GAUGE 688 Image_Gauge, 689#endif // wxUSE_GAUGE 690 Image_Max 691 }; 692 wxImageList *imagelist = new wxImageList(16, 16, false, Image_Max); 693 694 static const wxChar *s_iconNames[Image_Max] = 695 { 696 _T("list") 697 , _T("choice") 698 , _T("combo") 699 , _T("text") 700 , _T("radio") 701#if wxUSE_GAUGE 702 , _T("gauge") 703#endif // wxUSE_GAUGE 704 }; 705 706 for ( size_t n = 0; n < Image_Max; n++ ) 707 { 708 wxBitmap bmp(s_iconNames[n]); 709 if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) ) 710 { 711 wxLogWarning(wxT("Couldn't load the image '%s' for the book control page %d."), 712 s_iconNames[n], n); 713 } 714 } 715 716 m_book->SetImageList(imagelist); 717#else 718 719 // No images for now 720#define Image_List -1 721#define Image_Choice -1 722#define Image_Combo -1 723#define Image_Text -1 724#define Image_Radio -1 725#if wxUSE_GAUGE 726#define Image_Gauge -1 727#endif // wxUSE_GAUGE 728#define Image_Max -1 729 730#endif 731 732 wxPanel *panel = new wxPanel(m_book); 733 m_listbox = new wxListBox( panel, ID_LISTBOX, 734 wxPoint(10,10), wxSize(120,70), 735 5, choices, wxLB_MULTIPLE |wxLB_ALWAYS_SB ); 736 m_listboxSorted = new wxListBox( panel, ID_LISTBOX_SORTED, 737 wxPoint(10,90), wxSize(120,70), 738 5, choices, wxLB_SORT ); 739 740 SetListboxClientData(wxT("listbox"), m_listbox); 741 SetListboxClientData(wxT("listbox"), m_listboxSorted); 742 743 m_listbox->SetCursor(*wxCROSS_CURSOR); 744#if wxUSE_TOOLTIPS 745 m_listbox->SetToolTip( _T("This is a list box") ); 746#endif // wxUSE_TOOLTIPS 747 748 m_lbSelectNum = new wxButton( panel, ID_LISTBOX_SEL_NUM, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 749 m_lbSelectThis = new wxButton( panel, ID_LISTBOX_SEL_STR, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); 750 (void)new wxButton( panel, ID_LISTBOX_CLEAR, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); 751 (void)new MyButton( panel, ID_LISTBOX_APPEND, _T("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) ); 752 (void)new wxButton( panel, ID_LISTBOX_DELETE, _T("D&elete selected item"), wxPoint(180,130), wxSize(140,30) ); 753 wxButton *button = new MyButton( panel, ID_LISTBOX_FONT, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); 754 755 button->SetDefault(); 756 757#if wxUSE_TOOLTIPS 758 button->SetToolTip( _T("Press here to set italic font") ); 759#endif // wxUSE_TOOLTIPS 760 761 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, _T("&Disable"), wxPoint(20,170) ); 762 m_checkbox->SetValue(false); 763 button->MoveAfterInTabOrder(m_checkbox); 764#if wxUSE_TOOLTIPS 765 m_checkbox->SetToolTip( _T("Click here to disable the listbox") ); 766#endif // wxUSE_TOOLTIPS 767 (void)new wxCheckBox( panel, ID_CHANGE_COLOUR, _T("&Toggle colour"), 768 wxPoint(110,170) ); 769 panel->SetCursor(wxCursor(wxCURSOR_HAND)); 770 m_book->AddPage(panel, _T("wxListBox"), true, Image_List); 771 772#if wxUSE_CHOICE 773 panel = new wxPanel(m_book); 774 m_choice = new MyChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,wxDefaultCoord), 5, choices ); 775 m_choiceSorted = new MyChoice( panel, ID_CHOICE_SORTED, wxPoint(10,70), wxSize(120,wxDefaultCoord), 776 5, choices, wxCB_SORT ); 777 778 SetChoiceClientData(wxT("choice"), m_choice); 779 SetChoiceClientData(wxT("choice"), m_choiceSorted); 780 781 m_choice->SetSelection(2); 782 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 783 (void)new wxButton( panel, ID_CHOICE_SEL_STR, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); 784 (void)new wxButton( panel, ID_CHOICE_CLEAR, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); 785 (void)new wxButton( panel, ID_CHOICE_APPEND, _T("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) ); 786 (void)new wxButton( panel, ID_CHOICE_DELETE, _T("D&elete selected item"), wxPoint(180,130), wxSize(140,30) ); 787 (void)new wxButton( panel, ID_CHOICE_FONT, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); 788 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, _T("&Disable"), wxPoint(20,130), wxSize(140,30) ); 789 790 m_book->AddPage(panel, _T("wxChoice"), false, Image_Choice); 791#endif // wxUSE_CHOICE 792 793 panel = new wxPanel(m_book); 794 (void)new wxStaticBox( panel, wxID_ANY, _T("&Box around combobox"), 795 wxPoint(5, 5), wxSize(150, 100)); 796 m_combo = new MyComboBox( panel, ID_COMBO, _T("This"), 797 wxPoint(20,25), wxSize(120, wxDefaultCoord), 798 5, choices, 799 wxTE_PROCESS_ENTER); 800 801 (void)new wxButton( panel, ID_COMBO_SEL_NUM, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 802 (void)new wxButton( panel, ID_COMBO_SEL_STR, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); 803 (void)new wxButton( panel, ID_COMBO_CLEAR, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); 804 (void)new wxButton( panel, ID_COMBO_APPEND, _T("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) ); 805 (void)new wxButton( panel, ID_COMBO_DELETE, _T("D&elete selected item"), wxPoint(180,130), wxSize(140,30) ); 806 (void)new wxButton( panel, ID_COMBO_FONT, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); 807 (void)new wxButton( panel, ID_COMBO_SET_TEXT, _T("Set 'Hi!' at #2"), wxPoint(340,180), wxSize(140,30) ); 808 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, _T("&Disable"), wxPoint(20,130), wxSize(140,30) ); 809 m_book->AddPage(panel, _T("wxComboBox"), false, Image_Combo); 810 811 wxString choices2[] = 812 { 813 _T("First"), _T("Second"), 814 /* "Third", 815 "Fourth", "Fifth", "Sixth", 816 "Seventh", "Eighth", "Nineth", "Tenth" */ 817 }; 818 819 panel = new wxPanel(m_book); 820 wxRadioBox *radio2 = new MyRadioBox( panel, ID_RADIOBOX, _T("&That"), wxPoint(10,160), wxDefaultSize, WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS ); 821 m_radio = new wxRadioBox( panel, ID_RADIOBOX, _T("T&his"), wxPoint(10,10), wxDefaultSize, WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS ); 822 823#if wxUSE_TOOLTIPS 824 m_combo->SetToolTip(_T("This is a natural\ncombobox - can you believe me?")); 825 radio2->SetToolTip(_T("Ever seen a radiobox?")); 826 827 //m_radio->SetToolTip(_T("Tooltip for the entire radiobox")); 828 for ( unsigned int nb = 0; nb < WXSIZEOF(choices); nb++ ) 829 { 830 m_radio->SetItemToolTip(nb, _T("tooltip for\n") + choices[nb]); 831 } 832 833 // remove the tooltip for one of the items 834 m_radio->SetItemToolTip(2, _T("")); 835#endif // wxUSE_TOOLTIPS 836 837#if wxUSE_HELP 838 for( unsigned int item = 0; item < WXSIZEOF(choices); ++item ) 839 m_radio->SetItemHelpText( item, wxString::Format( _T("Help text for \"%s\""), choices[item].c_str() ) ); 840 841 // erase help text for the second item 842 m_radio->SetItemHelpText( 1, _T("") ); 843 // set default help text for control 844 m_radio->SetHelpText( _T("Default helptext for wxRadioBox") ); 845#endif // wxUSE_HELP 846 847 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 848 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, _T("&Select 'This'"), wxPoint(180,80), wxSize(140,30) ); 849 m_fontButton = new wxButton( panel, ID_SET_FONT, _T("Set &more Italic font"), wxPoint(340,30), wxSize(140,30) ); 850 (void)new wxButton( panel, ID_RADIOBOX_FONT, _T("Set &Italic font"), wxPoint(340,80), wxSize(140,30) ); 851 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, _T("&Disable"), wxPoint(340,130), wxDefaultSize ); 852 853 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, _T("Radiobutton1"), wxPoint(210,170), wxDefaultSize, wxRB_GROUP ); 854 rb->SetValue( false ); 855 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, _T("&Radiobutton2"), wxPoint(340,170), wxDefaultSize ); 856 m_book->AddPage(panel, _T("wxRadioBox"), false, Image_Radio); 857 858 859#if wxUSE_SLIDER && wxUSE_GAUGE 860 panel = new wxPanel(m_book); 861 862 wxBoxSizer *main_sizer = new wxBoxSizer( wxHORIZONTAL ); 863 panel->SetSizer( main_sizer ); 864 865 wxStaticBoxSizer *gauge_sizer = new wxStaticBoxSizer( wxHORIZONTAL, panel, _T("&wxGauge and wxSlider") ); 866 main_sizer->Add( gauge_sizer, 0, wxALL, 5 ); 867 wxBoxSizer *sz = new wxBoxSizer( wxVERTICAL ); 868 gauge_sizer->Add( sz ); 869 m_gauge = new wxGauge( panel, wxID_ANY, 200, wxDefaultPosition, wxSize(155, 30), wxGA_HORIZONTAL|wxNO_BORDER ); 870 sz->Add( m_gauge, 0, wxALL, 10 ); 871 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, 872 wxDefaultPosition, wxSize(155,wxDefaultCoord), 873 wxSL_AUTOTICKS | wxSL_LABELS); 874 m_slider->SetTickFreq(40, 0); 875#if wxUSE_TOOLTIPS 876 m_slider->SetToolTip(_T("This is a sliding slider")); 877#endif // wxUSE_TOOLTIPS 878 sz->Add( m_slider, 0, wxALL, 10 ); 879 880 m_gaugeVert = new wxGauge( panel, wxID_ANY, 100, 881 wxDefaultPosition, wxSize(wxDefaultCoord, 90), 882 wxGA_VERTICAL | wxGA_SMOOTH | wxNO_BORDER ); 883 gauge_sizer->Add( m_gaugeVert, 0, wxALL, 10 ); 884 885 886 887 wxStaticBox *sb = new wxStaticBox( panel, wxID_ANY, _T("&Explanation"), 888 wxDefaultPosition, wxDefaultSize ); //, wxALIGN_CENTER ); 889 wxStaticBoxSizer *wrapping_sizer = new wxStaticBoxSizer( sb, wxVERTICAL ); 890 main_sizer->Add( wrapping_sizer, 0, wxALL, 5 ); 891 892#ifdef __WXMOTIF__ 893 // No wrapping text in wxStaticText yet :-( 894 m_wrappingText = new wxStaticText( panel, wxID_ANY, 895 _T("Drag the slider!"), 896 wxPoint(250,30), 897 wxSize(240, wxDefaultCoord) 898 ); 899#else 900 m_wrappingText = new wxStaticText( panel, wxID_ANY, 901 _T("In order see the gauge (aka progress bar) ") 902 _T("control do something you have to drag the ") 903 _T("handle of the slider to the right.") 904 _T("\n\n") 905 _T("This is also supposed to demonstrate how ") 906 _T("to use static controls with line wrapping."), 907 wxDefaultPosition, 908 wxSize(240, wxDefaultCoord) 909 ); 910#endif 911 wrapping_sizer->Add( m_wrappingText ); 912 913 wxStaticBoxSizer *non_wrapping_sizer = new wxStaticBoxSizer( wxVERTICAL, panel, wxT("Non-wrapping") ); 914 main_sizer->Add( non_wrapping_sizer, 0, wxALL, 5 ); 915 916 m_nonWrappingText = new wxStaticText( panel, wxID_ANY, 917 _T("This static text has two lines.\nThey do not wrap."), 918 wxDefaultPosition, 919 wxDefaultSize 920 ); 921 non_wrapping_sizer->Add( m_nonWrappingText ); 922 923 (void)new wxButton( panel, ID_BTNNEWTEXT, wxT("New text"), wxPoint(450, 160) ); 924 925 int initialSpinValue = -5; 926 wxString s; 927 s << initialSpinValue; 928 m_spintext = new wxTextCtrl( panel, wxID_ANY, s, wxPoint(20,160), wxSize(80,wxDefaultCoord) ); 929#if wxUSE_SPINBTN 930 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,160) ); 931 m_spinbutton->SetRange(-40,30); 932 m_spinbutton->SetValue(initialSpinValue); 933 934#if wxUSE_PROGRESSDLG 935 m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, _T("&Show progress dialog"), 936 wxPoint(300, 160) ); 937#endif // wxUSE_PROGRESSDLG 938#endif // wxUSE_SPINBTN 939 940#if wxUSE_SPINCTRL 941 m_spinctrl = new wxSpinCtrl( panel, ID_SPINCTRL, wxEmptyString, wxPoint(200, 160), wxSize(80, wxDefaultCoord) ); 942 m_spinctrl->SetRange(-10,30); 943 m_spinctrl->SetValue(15); 944#endif // wxUSE_SPINCTRL 945 946 m_book->AddPage(panel, _T("wxGauge"), false, Image_Gauge); 947#endif // wxUSE_SLIDER && wxUSE_GAUGE 948 949 950 panel = new wxPanel(m_book); 951 952#if !defined(__WXMOTIF__) // wxStaticBitmap not working under Motif yet. 953 wxIcon icon = wxArtProvider::GetIcon(wxART_INFORMATION); 954 (void) new wxStaticBitmap( panel, wxID_ANY, icon, wxPoint(10, 10) ); 955 956 // VZ: don't leak memory 957 // bmpStatic = new wxStaticBitmap(panel, wxID_ANY, wxNullIcon, wxPoint(50, 10)); 958 // bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION)); 959#endif // !Motif 960 961 wxBitmap bitmap( 100, 100 ); 962 wxMemoryDC dc; 963 dc.SelectObject( bitmap ); 964 dc.SetBackground(*wxGREEN); 965 dc.SetPen(*wxRED_PEN); 966 dc.Clear(); 967 dc.DrawEllipse(5, 5, 90, 90); 968 dc.DrawText(_T("Bitmap"), 30, 40); 969 dc.SelectObject( wxNullBitmap ); 970 971 (void)new wxBitmapButton(panel, ID_BITMAP_BTN, bitmap, wxPoint(100, 20)); 972 (void)new wxToggleButton(panel, ID_BITMAP_BTN_ENABLE, 973 _T("Enable/disable &bitmap"), wxPoint(100, 140)); 974 975#if defined(__WXMSW__) || defined(__WXMOTIF__) 976 // test for masked bitmap display 977 bitmap = wxBitmap(_T("test2.bmp"), wxBITMAP_TYPE_BMP); 978 if (bitmap.Ok()) 979 { 980 bitmap.SetMask(new wxMask(bitmap, *wxBLUE)); 981 982 (void)new wxStaticBitmap(panel, wxID_ANY, bitmap, wxPoint(300, 120)); 983 } 984#endif 985 986 wxBitmap bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION)), 987 bmp2(wxArtProvider::GetBitmap(wxART_WARNING)), 988 bmp3(wxArtProvider::GetBitmap(wxART_QUESTION)); 989 wxBitmapButton *bmpBtn = new wxBitmapButton 990 ( 991 panel, wxID_ANY, 992 bmp1, 993 wxPoint(30, 70) 994 ); 995 996 bmpBtn->SetBitmapSelected(bmp2); 997 bmpBtn->SetBitmapFocus(bmp3); 998 999 (void)new wxToggleButton(panel, ID_BUTTON_LABEL, 1000 _T("&Toggle label"), wxPoint(250, 20)); 1001 1002 m_label = new wxStaticText(panel, wxID_ANY, _T("Label with some long text"), 1003 wxPoint(250, 60), wxDefaultSize, 1004 wxALIGN_RIGHT /*| wxST_NO_AUTORESIZE*/); 1005 m_label->SetForegroundColour( *wxBLUE ); 1006 1007 m_book->AddPage(panel, _T("wxBitmapXXX")); 1008 1009 // sizer 1010 panel = new wxPanel(m_book); 1011 panel->SetAutoLayout( true ); 1012 1013 wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL ); 1014 1015 wxStaticBoxSizer *csizer = 1016 new wxStaticBoxSizer (new wxStaticBox (panel, wxID_ANY, _T("Show Buttons")), wxHORIZONTAL ); 1017 1018 wxCheckBox *check1, *check2, *check3, *check4, *check14, *checkBig; 1019 check1 = new wxCheckBox (panel, ID_SIZER_CHECK1, _T("1")); 1020 check1->SetValue (true); 1021 csizer->Add (check1); 1022 check2 = new wxCheckBox (panel, ID_SIZER_CHECK2, _T("2")); 1023 check2->SetValue (true); 1024 csizer->Add (check2); 1025 check3 = new wxCheckBox (panel, ID_SIZER_CHECK3, _T("3")); 1026 check3->SetValue (true); 1027 csizer->Add (check3); 1028 check4 = new wxCheckBox (panel, ID_SIZER_CHECK4, _T("4")); 1029 check4->SetValue (true); 1030 csizer->Add (check4); 1031 check14 = new wxCheckBox (panel, ID_SIZER_CHECK14, _T("1-4")); 1032 check14->SetValue (true); 1033 csizer->Add (check14); 1034 checkBig = new wxCheckBox (panel, ID_SIZER_CHECKBIG, _T("Big")); 1035 checkBig->SetValue (true); 1036 csizer->Add (checkBig); 1037 1038 sizer->Add (csizer); 1039 1040 m_hsizer = new wxBoxSizer( wxHORIZONTAL ); 1041 1042 m_buttonSizer = new wxBoxSizer (wxVERTICAL); 1043 1044 m_sizerBtn1 = new wxButton(panel, wxID_ANY, _T("Test Button &1 (tab order 1)") ); 1045 m_buttonSizer->Add( m_sizerBtn1, 0, wxALL, 10 ); 1046 m_sizerBtn2 = new wxButton(panel, wxID_ANY, _T("Test Button &2 (tab order 3)") ); 1047 m_buttonSizer->Add( m_sizerBtn2, 0, wxALL, 10 ); 1048 m_sizerBtn3 = new wxButton(panel, wxID_ANY, _T("Test Button &3 (tab order 2)") ); 1049 m_buttonSizer->Add( m_sizerBtn3, 0, wxALL, 10 ); 1050 m_sizerBtn4 = new wxButton(panel, wxID_ANY, _T("Test Button &4 (tab order 4)") ); 1051 m_buttonSizer->Add( m_sizerBtn4, 0, wxALL, 10 ); 1052 1053 m_sizerBtn3->MoveBeforeInTabOrder(m_sizerBtn2); 1054 1055 m_hsizer->Add (m_buttonSizer); 1056 m_hsizer->Add( 20,20, 1 ); 1057 m_bigBtn = new wxButton(panel, wxID_ANY, _T("Multiline\nbutton") ); 1058 m_hsizer->Add( m_bigBtn , 3, wxGROW|wxALL, 10 ); 1059 1060 sizer->Add (m_hsizer, 1, wxGROW); 1061 1062 panel->SetSizer( sizer ); 1063 1064 m_book->AddPage(panel, _T("wxSizer")); 1065 1066 // set the sizer for the panel itself 1067 sizer = new wxBoxSizer(wxVERTICAL); 1068 sizer->Add(m_book, wxSizerFlags().Border().Expand()); 1069 sizer->Add(m_text, wxSizerFlags(1).Border().Expand()); 1070 SetSizer(sizer); 1071} 1072 1073void MyPanel::OnIdle(wxIdleEvent& event) 1074{ 1075 static const int INVALID_SELECTION = -2; 1076 1077 static int s_selCombo = INVALID_SELECTION; 1078 1079 if (!m_combo || !m_choice) 1080 { 1081 event.Skip(); 1082 return; 1083 } 1084 1085 int sel = m_combo->GetSelection(); 1086 if ( sel != s_selCombo ) 1087 { 1088 if ( s_selCombo != INVALID_SELECTION ) 1089 { 1090 wxLogMessage(_T("EVT_IDLE: combobox selection changed from %d to %d"), 1091 s_selCombo, sel); 1092 } 1093 1094 s_selCombo = sel; 1095 } 1096 1097 static int s_selChoice = INVALID_SELECTION; 1098 sel = m_choice->GetSelection(); 1099 if ( sel != s_selChoice ) 1100 { 1101 if ( s_selChoice != INVALID_SELECTION ) 1102 { 1103 wxLogMessage(_T("EVT_IDLE: choice selection changed from %d to %d"), 1104 s_selChoice, sel); 1105 } 1106 1107 s_selChoice = sel; 1108 } 1109 1110 event.Skip(); 1111} 1112 1113void MyPanel::OnPageChanging( wxBookCtrlEvent &event ) 1114{ 1115 int selOld = event.GetOldSelection(); 1116 if ( selOld == 2 ) 1117 { 1118 if ( wxMessageBox(_T("This demonstrates how a program may prevent the\n") 1119 _T("page change from taking place - if you select\n") 1120 _T("[No] the current page will stay the third one\n"), 1121 _T("Control sample"), 1122 wxICON_QUESTION | wxYES_NO, this) != wxYES ) 1123 { 1124 event.Veto(); 1125 1126 return; 1127 } 1128 } 1129 1130 *m_text << _T("Book selection is being changed from ") << selOld 1131 << _T(" to ") << event.GetSelection() 1132 << _T(" (current page from book is ") 1133 << m_book->GetSelection() << _T(")\n"); 1134} 1135 1136void MyPanel::OnPageChanged( wxBookCtrlEvent &event ) 1137{ 1138 *m_text << _T("Book selection is now ") << event.GetSelection() 1139 << _T(" (from book: ") << m_book->GetSelection() 1140 << _T(")\n"); 1141} 1142 1143void MyPanel::OnTestButton(wxCommandEvent& event) 1144{ 1145 wxLogMessage(_T("Button %c clicked."), 1146 event.GetId() == ID_BUTTON_TEST1 ? _T('1') : _T('2')); 1147} 1148 1149void MyPanel::OnBmpButton(wxCommandEvent& WXUNUSED(event)) 1150{ 1151 wxLogMessage(_T("Bitmap button clicked.")); 1152} 1153 1154void MyPanel::OnBmpButtonToggle(wxCommandEvent& event) 1155{ 1156 FindWindow(ID_BITMAP_BTN)->Enable(!event.IsChecked()); 1157} 1158 1159void MyPanel::OnChangeColour(wxCommandEvent& WXUNUSED(event)) 1160{ 1161 static wxColour s_colOld; 1162 1163 SetThemeEnabled(false); 1164 // test panel colour changing and propagation to the subcontrols 1165 if ( s_colOld.Ok() ) 1166 { 1167 SetBackgroundColour(s_colOld); 1168 s_colOld = wxNullColour; 1169 1170 m_lbSelectThis->SetForegroundColour(wxNullColour); 1171 m_lbSelectThis->SetBackgroundColour(wxNullColour); 1172 } 1173 else 1174 { 1175 s_colOld = wxColour(wxT("red")); 1176 SetBackgroundColour(wxT("white")); 1177 1178 m_lbSelectThis->SetForegroundColour(wxT("white")); 1179 m_lbSelectThis->SetBackgroundColour(wxT("red")); 1180 } 1181 1182 m_lbSelectThis->Refresh(); 1183 Refresh(); 1184} 1185 1186void MyPanel::OnListBox( wxCommandEvent &event ) 1187{ 1188 if (event.GetInt() == -1) 1189 { 1190 m_text->AppendText( _T("ListBox has no selections anymore\n") ); 1191 return; 1192 } 1193 1194 wxListBox *listbox = event.GetId() == ID_LISTBOX ? m_listbox 1195 : m_listboxSorted; 1196 1197 m_text->AppendText( _T("ListBox event selection string is: '") ); 1198 m_text->AppendText( event.GetString() ); 1199 m_text->AppendText( _T("'\n") ); 1200 1201 // can't use GetStringSelection() with multiple selections, there could be 1202 // more than one of them 1203 if ( !listbox->HasFlag(wxLB_MULTIPLE) ) 1204 { 1205 m_text->AppendText( _T("ListBox control selection string is: '") ); 1206 m_text->AppendText( listbox->GetStringSelection() ); 1207 m_text->AppendText( _T("'\n") ); 1208 } 1209 1210 wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject()); 1211 m_text->AppendText( _T("ListBox event client data string is: '") ); 1212 if (obj) // BC++ doesn't like use of '? .. : .. ' in this context 1213 m_text->AppendText( obj->GetData() ); 1214 else 1215 m_text->AppendText( wxString(_T("none")) ); 1216 1217 m_text->AppendText( _T("'\n") ); 1218 m_text->AppendText( _T("ListBox control client data string is: '") ); 1219 obj = (wxStringClientData *)listbox->GetClientObject(event.GetInt()); 1220 if (obj) 1221 m_text->AppendText( obj->GetData() ); 1222 else 1223 m_text->AppendText( wxString(_T("none")) ); 1224 m_text->AppendText( _T("'\n") ); 1225} 1226 1227void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event ) 1228{ 1229 m_text->AppendText( _T("ListBox double click string is: ") ); 1230 m_text->AppendText( event.GetString() ); 1231 m_text->AppendText( _T("\n") ); 1232} 1233 1234void MyPanel::OnListBoxButtons( wxCommandEvent &event ) 1235{ 1236 switch (event.GetId()) 1237 { 1238 case ID_LISTBOX_ENABLE: 1239 { 1240 m_text->AppendText(_T("Checkbox clicked.\n")); 1241#if wxUSE_TOOLTIPS 1242 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject(); 1243 if (event.GetInt()) 1244 cb->SetToolTip( _T("Click to enable listbox") ); 1245 else 1246 cb->SetToolTip( _T("Click to disable listbox") ); 1247#endif // wxUSE_TOOLTIPS 1248 m_listbox->Enable( event.GetInt() == 0 ); 1249 m_lbSelectThis->Enable( event.GetInt() == 0 ); 1250 m_lbSelectNum->Enable( event.GetInt() == 0 ); 1251 m_listboxSorted->Enable( event.GetInt() == 0 ); 1252 FindWindow(ID_CHANGE_COLOUR)->Enable( event.GetInt() == 0 ); 1253 break; 1254 } 1255 case ID_LISTBOX_SEL_NUM: 1256 { 1257 if (m_listbox->GetCount() > 2) 1258 m_listbox->SetSelection( 2 ); 1259 if (m_listboxSorted->GetCount() > 2) 1260 m_listboxSorted->SetSelection( 2 ); 1261 m_lbSelectThis->WarpPointer( 40, 14 ); 1262 break; 1263 } 1264 case ID_LISTBOX_SEL_STR: 1265 { 1266 if (m_listbox->FindString(_T("This")) != wxNOT_FOUND) 1267 m_listbox->SetStringSelection( _T("This") ); 1268 if (m_listboxSorted->FindString(_T("This")) != wxNOT_FOUND) 1269 m_listboxSorted->SetStringSelection( _T("This") ); 1270 m_lbSelectNum->WarpPointer( 40, 14 ); 1271 break; 1272 } 1273 case ID_LISTBOX_CLEAR: 1274 { 1275 m_listbox->Clear(); 1276 m_listboxSorted->Clear(); 1277 break; 1278 } 1279 case ID_LISTBOX_APPEND: 1280 { 1281 m_listbox->Append( _T("Hi!") ); 1282 m_listboxSorted->Append( _T("Hi!") ); 1283 break; 1284 } 1285 case ID_LISTBOX_DELETE: 1286 { 1287 int idx; 1288 idx = m_listbox->GetSelection(); 1289 if ( idx != wxNOT_FOUND ) 1290 m_listbox->Delete( idx ); 1291 idx = m_listboxSorted->GetSelection(); 1292 if ( idx != wxNOT_FOUND ) 1293 m_listboxSorted->Delete( idx ); 1294 break; 1295 } 1296 case ID_LISTBOX_FONT: 1297 { 1298 m_listbox->SetFont( *wxITALIC_FONT ); 1299 m_listboxSorted->SetFont( *wxITALIC_FONT ); 1300 m_checkbox->SetFont( *wxITALIC_FONT ); 1301 break; 1302 } 1303 } 1304} 1305 1306#if wxUSE_CHOICE 1307 1308static const wxChar *GetDataString(wxClientData *data) 1309{ 1310 return data ? wx_static_cast(wxStringClientData *, data)->GetData().c_str() 1311 : _T("none"); 1312} 1313 1314void MyPanel::OnChoice( wxCommandEvent &event ) 1315{ 1316 wxChoice *choice = event.GetId() == ID_CHOICE ? m_choice 1317 : m_choiceSorted; 1318 1319 const int sel = choice->GetSelection(); 1320 1321 wxClientData *dataEvt = event.GetClientObject(), 1322 *dataCtrl = choice->GetClientObject(sel); 1323 1324 wxLogMessage(_T("EVT_CHOICE: item %d/%d (event/control), ") 1325 _T("string \"%s\"/\"%s\", ") 1326 _T("data \"%s\"/\"%s\""), 1327 (int)event.GetInt(), 1328 sel, 1329 event.GetString().c_str(), 1330 choice->GetStringSelection().c_str(), 1331 GetDataString(dataEvt), 1332 GetDataString(dataCtrl)); 1333} 1334 1335void MyPanel::OnChoiceButtons( wxCommandEvent &event ) 1336{ 1337 switch (event.GetId()) 1338 { 1339 case ID_CHOICE_ENABLE: 1340 { 1341 m_choice->Enable( event.GetInt() == 0 ); 1342 m_choiceSorted->Enable( event.GetInt() == 0 ); 1343 break; 1344 } 1345 case ID_CHOICE_SEL_NUM: 1346 { 1347 m_choice->SetSelection( 2 ); 1348 m_choiceSorted->SetSelection( 2 ); 1349 break; 1350 } 1351 case ID_CHOICE_SEL_STR: 1352 { 1353 m_choice->SetStringSelection( _T("This") ); 1354 m_choiceSorted->SetStringSelection( _T("This") ); 1355 break; 1356 } 1357 case ID_CHOICE_CLEAR: 1358 { 1359 m_choice->Clear(); 1360 m_choiceSorted->Clear(); 1361 break; 1362 } 1363 case ID_CHOICE_APPEND: 1364 { 1365 m_choice->Append( _T("Hi!") ); 1366 m_choiceSorted->Append( _T("Hi!") ); 1367 break; 1368 } 1369 case ID_CHOICE_DELETE: 1370 { 1371 int idx = m_choice->GetSelection(); 1372 if ( idx != wxNOT_FOUND ) 1373 m_choice->Delete( idx ); 1374 idx = m_choiceSorted->GetSelection(); 1375 if ( idx != wxNOT_FOUND ) 1376 m_choiceSorted->Delete( idx ); 1377 break; 1378 } 1379 case ID_CHOICE_FONT: 1380 { 1381 m_choice->SetFont( *wxITALIC_FONT ); 1382 m_choiceSorted->SetFont( *wxITALIC_FONT ); 1383 break; 1384 } 1385 } 1386} 1387#endif // wxUSE_CHOICE 1388 1389void MyPanel::OnCombo( wxCommandEvent &event ) 1390{ 1391 if (!m_combo) 1392 return; 1393 1394 wxLogMessage(_T("EVT_COMBOBOX: item %d/%d (event/control), string \"%s\"/\"%s\""), 1395 (int)event.GetInt(), 1396 m_combo->GetSelection(), 1397 event.GetString().c_str(), 1398 m_combo->GetStringSelection().c_str()); 1399} 1400 1401void MyPanel::OnComboTextChanged(wxCommandEvent& event) 1402{ 1403 if (m_combo) 1404 wxLogMessage(wxT("EVT_TEXT for the combobox: \"%s\" (event) or \"%s\" (control)."), 1405 event.GetString().c_str(), 1406 m_combo->GetValue().c_str()); 1407} 1408 1409void MyPanel::OnComboTextEnter(wxCommandEvent& WXUNUSED(event)) 1410{ 1411 if (m_combo) 1412 wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."), 1413 m_combo->GetValue().c_str()); 1414} 1415 1416void MyPanel::OnComboButtons( wxCommandEvent &event ) 1417{ 1418 switch (event.GetId()) 1419 { 1420 case ID_COMBO_ENABLE: 1421 { 1422 m_combo->Enable( event.GetInt() == 0 ); 1423 break; 1424 } 1425 case ID_COMBO_SEL_NUM: 1426 { 1427 m_combo->SetSelection( 2 ); 1428 break; 1429 } 1430 case ID_COMBO_SEL_STR: 1431 { 1432 m_combo->SetStringSelection( _T("This") ); 1433 break; 1434 } 1435 case ID_COMBO_CLEAR: 1436 { 1437 m_combo->Clear(); 1438 break; 1439 } 1440 case ID_COMBO_APPEND: 1441 { 1442 m_combo->Append( _T("Hi!") ); 1443 break; 1444 } 1445 case ID_COMBO_DELETE: 1446 { 1447 int idx = m_combo->GetSelection(); 1448 m_combo->Delete( idx ); 1449 break; 1450 } 1451 case ID_COMBO_FONT: 1452 { 1453 m_combo->SetFont( *wxITALIC_FONT ); 1454 break; 1455 } 1456 case ID_COMBO_SET_TEXT: 1457 { 1458 m_combo->SetString( 2, wxT("Hi!") ); 1459 break; 1460 } 1461 } 1462} 1463 1464void MyPanel::OnRadio( wxCommandEvent &event ) 1465{ 1466 m_text->AppendText( _T("RadioBox selection string is: ") ); 1467 m_text->AppendText( event.GetString() ); 1468 m_text->AppendText( _T("\n") ); 1469} 1470 1471void MyPanel::OnRadioButton1( wxCommandEvent & WXUNUSED(event) ) 1472{ 1473 wxMessageBox(_T("First wxRadioButton selected."), _T("wxControl sample")); 1474} 1475 1476void MyPanel::OnRadioButton2( wxCommandEvent & WXUNUSED(event) ) 1477{ 1478 m_text->AppendText(_T("Second wxRadioButton selected.\n")); 1479} 1480 1481void MyPanel::OnRadioButtons( wxCommandEvent &event ) 1482{ 1483 switch (event.GetId()) 1484 { 1485 case ID_RADIOBOX_ENABLE: 1486 m_radio->Enable( event.GetInt() == 0 ); 1487 break; 1488 1489 case ID_RADIOBOX_SEL_NUM: 1490 m_radio->SetSelection( 2 ); 1491 break; 1492 1493 case ID_RADIOBOX_SEL_STR: 1494 m_radio->SetStringSelection( _T("This") ); 1495 break; 1496 1497 case ID_RADIOBOX_FONT: 1498 m_radio->SetFont( *wxITALIC_FONT ); 1499 break; 1500 } 1501} 1502 1503void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) ) 1504{ 1505 m_fontButton->SetFont( *wxITALIC_FONT ); 1506 m_text->SetFont( *wxITALIC_FONT ); 1507} 1508 1509void MyPanel::OnUpdateLabel( wxCommandEvent &event ) 1510{ 1511 m_label->SetLabel(event.GetInt() ? _T("Very very very very very long text.") 1512 : _T("Shorter text.")); 1513} 1514 1515#if wxUSE_SLIDER 1516 1517void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) ) 1518{ 1519#if wxUSE_GAUGE 1520 m_gauge->SetValue( m_slider->GetValue() ); 1521 m_gaugeVert->SetValue( m_slider->GetValue() / 2 ); 1522#endif // wxUSE_GAUGE 1523} 1524 1525#endif // wxUSE_SLIDER 1526 1527#if wxUSE_SPINCTRL 1528 1529void MyPanel::OnSpinCtrlText(wxCommandEvent& event) 1530{ 1531 if ( m_spinctrl ) 1532 { 1533 wxString s; 1534 s.Printf( _T("Spin ctrl text changed: now %d (from event: %s)\n"), 1535 m_spinctrl->GetValue(), event.GetString().c_str() ); 1536 m_text->AppendText(s); 1537 } 1538} 1539 1540void MyPanel::OnSpinCtrl(wxSpinEvent& event) 1541{ 1542 if ( m_spinctrl ) 1543 { 1544 wxString s; 1545 s.Printf( _T("Spin ctrl changed: now %d (from event: %d)\n"), 1546 m_spinctrl->GetValue(), event.GetInt() ); 1547 m_text->AppendText(s); 1548 } 1549} 1550 1551void MyPanel::OnSpinCtrlUp(wxSpinEvent& event) 1552{ 1553 if ( m_spinctrl ) 1554 { 1555 m_text->AppendText( wxString::Format( 1556 _T("Spin up: %d (from event: %d)\n"), 1557 m_spinctrl->GetValue(), event.GetInt() ) ); 1558 } 1559} 1560 1561void MyPanel::OnSpinCtrlDown(wxSpinEvent& event) 1562{ 1563 if ( m_spinctrl ) 1564 { 1565 m_text->AppendText( wxString::Format( 1566 _T("Spin down: %d (from event: %d)\n"), 1567 m_spinctrl->GetValue(), event.GetInt() ) ); 1568 } 1569} 1570 1571#endif // wxUSE_SPINCTRL 1572 1573#if wxUSE_SPINBTN 1574void MyPanel::OnSpinUp( wxSpinEvent &event ) 1575{ 1576 wxString value; 1577 value.Printf( _T("Spin control up: current = %d\n"), 1578 m_spinbutton->GetValue()); 1579 1580 if ( event.GetPosition() > 17 ) 1581 { 1582 value += _T("Preventing the spin button from going above 17.\n"); 1583 1584 event.Veto(); 1585 } 1586 1587 m_text->AppendText(value); 1588} 1589 1590void MyPanel::OnSpinDown( wxSpinEvent &event ) 1591{ 1592 wxString value; 1593 value.Printf( _T("Spin control down: current = %d\n"), 1594 m_spinbutton->GetValue()); 1595 1596 if ( event.GetPosition() < -17 ) 1597 { 1598 value += _T("Preventing the spin button from going below -17.\n"); 1599 1600 event.Veto(); 1601 } 1602 1603 m_text->AppendText(value); 1604} 1605 1606void MyPanel::OnSpinUpdate( wxSpinEvent &event ) 1607{ 1608 wxString value; 1609 value.Printf( _T("%d"), event.GetPosition() ); 1610 m_spintext->SetValue( value ); 1611 1612 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"), 1613 m_spinbutton->GetMin(), m_spinbutton->GetMax(), 1614 m_spinbutton->GetValue()); 1615 1616 m_text->AppendText(value); 1617} 1618 1619void MyPanel::OnNewText( wxCommandEvent& /* event */) 1620{ 1621 m_nonWrappingText->SetLabel( wxT("This text is short\nbut still spans\nover three lines.") ); 1622 m_wrappingText->SetLabel( wxT("This text is short but will still be wrapped if it is too long.") ); 1623 m_wrappingText->GetParent()->Layout(); 1624} 1625 1626#if wxUSE_PROGRESSDLG 1627 1628void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event ) 1629{ 1630 event.Enable( m_spinbutton->GetValue() > 0 ); 1631} 1632 1633void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) ) 1634{ 1635 int max = m_spinbutton->GetValue(); 1636 1637 if ( max <= 0 ) 1638 { 1639 wxLogError(_T("You must set positive range!")); 1640 return; 1641 } 1642 1643 wxProgressDialog dialog(_T("Progress dialog example"), 1644 _T("An informative message"), 1645 max, // range 1646 this, // parent 1647 wxPD_CAN_ABORT | 1648 wxPD_AUTO_HIDE | 1649 wxPD_APP_MODAL | 1650 wxPD_ELAPSED_TIME | 1651 wxPD_ESTIMATED_TIME | 1652 wxPD_REMAINING_TIME); 1653 1654 1655 bool cont = true; 1656 for ( int i = 0; i <= max && cont; i++ ) 1657 { 1658 wxSleep(1); 1659 if ( i == max ) 1660 { 1661 cont = dialog.Update(i, _T("That's all, folks!")); 1662 } 1663 else if ( i == max / 2 ) 1664 { 1665 cont = dialog.Update(i, _T("Only a half left (very long message)!")); 1666 } 1667 else 1668 { 1669 cont = dialog.Update(i); 1670 } 1671 } 1672 1673 if ( !cont ) 1674 { 1675 *m_text << _T("Progress dialog aborted!\n"); 1676 } 1677 else 1678 { 1679 *m_text << _T("Countdown from ") << max << _T(" finished.\n"); 1680 } 1681} 1682 1683#endif // wxUSE_PROGRESSDLG 1684#endif // wxUSE_SPINBTN 1685 1686void MyPanel::OnSizerCheck( wxCommandEvent &event) 1687{ 1688 switch (event.GetId ()) { 1689 case ID_SIZER_CHECK1: 1690 m_buttonSizer->Show (m_sizerBtn1, event.IsChecked ()); 1691 m_buttonSizer->Layout (); 1692 break; 1693 case ID_SIZER_CHECK2: 1694 m_buttonSizer->Show (m_sizerBtn2, event.IsChecked ()); 1695 m_buttonSizer->Layout (); 1696 break; 1697 case ID_SIZER_CHECK3: 1698 m_buttonSizer->Show (m_sizerBtn3, event.IsChecked ()); 1699 m_buttonSizer->Layout (); 1700 break; 1701 case ID_SIZER_CHECK4: 1702 m_buttonSizer->Show (m_sizerBtn4, event.IsChecked ()); 1703 m_buttonSizer->Layout (); 1704 break; 1705 case ID_SIZER_CHECK14: 1706 m_hsizer->Show (m_buttonSizer, event.IsChecked ()); 1707 m_hsizer->Layout (); 1708 break; 1709 case ID_SIZER_CHECKBIG: 1710 m_hsizer->Show (m_bigBtn, event.IsChecked ()); 1711 m_hsizer->Layout (); 1712 break; 1713 } 1714 1715} 1716 1717MyPanel::~MyPanel() 1718{ 1719 //wxLog::RemoveTraceMask(_T("focus")); 1720 delete wxLog::SetActiveTarget(m_logTargetOld); 1721 1722 delete m_book->GetImageList(); 1723} 1724 1725//---------------------------------------------------------------------- 1726// MyFrame 1727//---------------------------------------------------------------------- 1728 1729BEGIN_EVENT_TABLE(MyFrame, wxFrame) 1730 EVT_MENU(CONTROLS_QUIT, MyFrame::OnQuit) 1731 EVT_MENU(CONTROLS_ABOUT, MyFrame::OnAbout) 1732 EVT_MENU(CONTROLS_CLEAR_LOG, MyFrame::OnClearLog) 1733#if wxUSE_TOOLTIPS 1734 EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay) 1735 EVT_MENU(CONTROLS_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips) 1736#endif // wxUSE_TOOLTIPS 1737 1738 EVT_MENU(CONTROLS_ENABLE_ALL, MyFrame::OnEnableAll) 1739 EVT_MENU(CONTROLS_CONTEXT_HELP, MyFrame::OnContextHelp) 1740 1741 EVT_ICONIZE(MyFrame::OnIconized) 1742 EVT_MAXIMIZE(MyFrame::OnMaximized) 1743 EVT_SIZE(MyFrame::OnSize) 1744 EVT_MOVE(MyFrame::OnMove) 1745 1746 EVT_IDLE(MyFrame::OnIdle) 1747END_EVENT_TABLE() 1748 1749MyFrame::MyFrame(const wxChar *title, int x, int y) 1750 : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y), wxSize(700, 450)) 1751{ 1752 SetHelpText( _T("Controls sample demonstrating various widgets") ); 1753 1754 // Give it an icon 1755 // The wxICON() macros loads an icon from a resource under Windows 1756 // and uses an #included XPM image under GTK+ and Motif 1757 1758#ifdef USE_XPM 1759 SetIcon( wxICON(mondrian) ); 1760#endif 1761 1762 wxMenu *file_menu = new wxMenu; 1763 1764 file_menu->Append(CONTROLS_CLEAR_LOG, _T("&Clear log\tCtrl-L")); 1765 file_menu->AppendSeparator(); 1766 file_menu->Append(CONTROLS_ABOUT, _T("&About\tF1")); 1767 file_menu->AppendSeparator(); 1768 file_menu->Append(CONTROLS_QUIT, _T("E&xit\tAlt-X"), _T("Quit controls sample")); 1769 1770 wxMenuBar *menu_bar = new wxMenuBar; 1771 menu_bar->Append(file_menu, _T("&File")); 1772 1773#if wxUSE_TOOLTIPS 1774 wxMenu *tooltip_menu = new wxMenu; 1775 tooltip_menu->Append(CONTROLS_SET_TOOLTIP_DELAY, _T("Set &delay\tCtrl-D")); 1776 tooltip_menu->AppendSeparator(); 1777 tooltip_menu->Append(CONTROLS_ENABLE_TOOLTIPS, _T("&Toggle tooltips\tCtrl-T"), 1778 _T("enable/disable tooltips"), true); 1779 tooltip_menu->Check(CONTROLS_ENABLE_TOOLTIPS, true); 1780 menu_bar->Append(tooltip_menu, _T("&Tooltips")); 1781#endif // wxUSE_TOOLTIPS 1782 1783 wxMenu *panel_menu = new wxMenu; 1784 panel_menu->Append(CONTROLS_ENABLE_ALL, _T("&Disable all\tCtrl-E"), 1785 _T("Enable/disable all panel controls"), true); 1786 panel_menu->Append(CONTROLS_CONTEXT_HELP, _T("&Context help...\tCtrl-H"), 1787 _T("Get context help for a control")); 1788 menu_bar->Append(panel_menu, _T("&Panel")); 1789 1790 SetMenuBar(menu_bar); 1791 1792#if wxUSE_STATUSBAR 1793 CreateStatusBar(2); 1794#endif // wxUSE_STATUSBAR 1795 1796 m_panel = new MyPanel( this, 10, 10, 300, 100 ); 1797} 1798 1799void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) ) 1800{ 1801 Close(true); 1802} 1803 1804void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) ) 1805{ 1806 wxBusyCursor bc; 1807 1808 wxMessageDialog dialog(this, _T("This is a control sample"), _T("About Controls"), wxOK ); 1809 dialog.ShowModal(); 1810} 1811 1812void MyFrame::OnClearLog(wxCommandEvent& WXUNUSED(event)) 1813{ 1814 m_panel->m_text->Clear(); 1815} 1816 1817#if wxUSE_TOOLTIPS 1818void MyFrame::OnSetTooltipDelay(wxCommandEvent& WXUNUSED(event)) 1819{ 1820 static long s_delay = 5000; 1821 1822 wxString delay; 1823 delay.Printf( _T("%ld"), s_delay); 1824 1825 delay = wxGetTextFromUser(_T("Enter delay (in milliseconds)"), 1826 _T("Set tooltip delay"), 1827 delay, 1828 this); 1829 if ( !delay ) 1830 return; // cancelled 1831 1832 wxSscanf(delay, _T("%ld"), &s_delay); 1833 1834 wxToolTip::SetDelay(s_delay); 1835 1836 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay); 1837} 1838 1839void MyFrame::OnToggleTooltips(wxCommandEvent& WXUNUSED(event)) 1840{ 1841 static bool s_enabled = true; 1842 1843 s_enabled = !s_enabled; 1844 1845 wxToolTip::Enable(s_enabled); 1846 1847 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") ); 1848} 1849#endif // tooltips 1850 1851void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event)) 1852{ 1853 static bool s_enable = true; 1854 1855 s_enable = !s_enable; 1856 m_panel->Enable(s_enable); 1857} 1858 1859void MyFrame::OnContextHelp(wxCommandEvent& WXUNUSED(event)) 1860{ 1861 // starts a local event loop 1862 wxContextHelp chelp(this); 1863} 1864 1865void MyFrame::OnMove( wxMoveEvent& event ) 1866{ 1867#if wxUSE_STATUSBAR 1868 UpdateStatusBar(event.GetPosition(), GetSize()); 1869#endif // wxUSE_STATUSBAR 1870 1871 event.Skip(); 1872} 1873 1874void MyFrame::OnIconized( wxIconizeEvent& event ) 1875{ 1876 wxLogMessage(_T("Frame %s"), event.Iconized() ? _T("iconized") 1877 : _T("restored")); 1878 event.Skip(); 1879} 1880 1881void MyFrame::OnMaximized( wxMaximizeEvent& WXUNUSED(event) ) 1882{ 1883 wxLogMessage(_T("Frame maximized")); 1884} 1885 1886void MyFrame::OnSize( wxSizeEvent& event ) 1887{ 1888#if wxUSE_STATUSBAR 1889 UpdateStatusBar(GetPosition(), event.GetSize()); 1890#endif // wxUSE_STATUSBAR 1891 1892 event.Skip(); 1893} 1894 1895void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) ) 1896{ 1897 // track the window which has the focus in the status bar 1898 static wxWindow *s_windowFocus = (wxWindow *)NULL; 1899 wxWindow *focus = wxWindow::FindFocus(); 1900 if ( focus && (focus != s_windowFocus) ) 1901 { 1902 s_windowFocus = focus; 1903 1904 wxString msg; 1905 msg.Printf( 1906#ifdef __WXMSW__ 1907 _T("Focus: %s, HWND = %08x"), 1908#else 1909 _T("Focus: %s"), 1910#endif 1911 s_windowFocus->GetClassInfo()->GetClassName() 1912#ifdef __WXMSW__ 1913 , (unsigned int) s_windowFocus->GetHWND() 1914#endif 1915 ); 1916 1917#if wxUSE_STATUSBAR 1918 SetStatusText(msg); 1919#endif // wxUSE_STATUSBAR 1920 } 1921} 1922 1923void MyComboBox::OnChar(wxKeyEvent& event) 1924{ 1925 wxLogMessage(_T("MyComboBox::OnChar")); 1926 1927 if ( event.GetKeyCode() == 'w' ) 1928 wxLogMessage(_T("MyComboBox: 'w' will be ignored.")); 1929 else 1930 event.Skip(); 1931} 1932 1933void MyComboBox::OnKeyDown(wxKeyEvent& event) 1934{ 1935 wxLogMessage(_T("MyComboBox::OnKeyDown")); 1936 1937 if ( event.GetKeyCode() == 'w' ) 1938 wxLogMessage(_T("MyComboBox: 'w' will be ignored.")); 1939 else 1940 event.Skip(); 1941} 1942 1943void MyComboBox::OnKeyUp(wxKeyEvent& event) 1944{ 1945 wxLogMessage(_T("MyComboBox::OnKeyUp")); 1946 1947 event.Skip(); 1948} 1949 1950static void SetListboxClientData(const wxChar *name, wxListBox *control) 1951{ 1952 size_t count = control->GetCount(); 1953 for ( size_t n = 0; n < count; n++ ) 1954 { 1955 wxString s; 1956 s.Printf(wxT("%s client data for '%s'"), 1957 name, control->GetString(n).c_str()); 1958 1959 control->SetClientObject(n, new wxStringClientData(s)); 1960 } 1961} 1962 1963#if wxUSE_CHOICE 1964 1965static void SetChoiceClientData(const wxChar *name, wxChoice *control) 1966{ 1967 size_t count = control->GetCount(); 1968 for ( size_t n = 0; n < count; n++ ) 1969 { 1970 wxString s; 1971 s.Printf(wxT("%s client data for '%s'"), 1972 name, control->GetString(n).c_str()); 1973 1974 control->SetClientObject(n, new wxStringClientData(s)); 1975 } 1976} 1977 1978#endif // wxUSE_CHOICE 1979