1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     Controls wxWidgets sample 
   4 // Author:      Robert Roebling 
   7 // Copyright:   (c) Robert Roebling, Julian Smart 
   8 // Licence:     wxWindows license 
   9 ///////////////////////////////////////////////////////////////////////////// 
  11 // For compilers that support precompilation, includes "wx/wx.h". 
  12 #include "wx/wxprec.h" 
  22 #if !defined( __WXMSW__ ) || defined( __WIN95__ ) 
  23 #include "wx/spinbutt.h" 
  25 #include "wx/tglbtn.h" 
  26 #include "wx/notebook.h" 
  27 #include "wx/imaglist.h" 
  28 #include "wx/artprov.h" 
  31     #include "wx/tooltip.h" 
  34 #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__) 
  39     #include "mondrian.xpm" 
  40     #include "icons/choice.xpm" 
  41     #include "icons/combo.xpm" 
  42     #include "icons/list.xpm" 
  43     #include "icons/radio.xpm" 
  44     #include "icons/text.xpm" 
  45     #include "icons/gauge.xpm" 
  49     #define wxUSE_SPINBTN 1 
  52 #include "wx/progdlg.h" 
  55     #include "wx/spinctrl.h" 
  56 #endif // wxUSE_SPINCTRL 
  58 //---------------------------------------------------------------------- 
  60 //---------------------------------------------------------------------- 
  62 class MyApp
: public wxApp
 
  68 class MyPanel
: public wxPanel
 
  71     MyPanel(wxFrame 
*frame
, int x
, int y
, int w
, int h
); 
  74     void OnSize( wxSizeEvent
& event 
); 
  75     void OnListBox( wxCommandEvent 
&event 
); 
  76     void OnListBoxDoubleClick( wxCommandEvent 
&event 
); 
  77     void OnListBoxButtons( wxCommandEvent 
&event 
); 
  79     void OnChoice( wxCommandEvent 
&event 
); 
  80     void OnChoiceButtons( wxCommandEvent 
&event 
); 
  82     void OnCombo( wxCommandEvent 
&event 
); 
  83     void OnComboTextChanged( wxCommandEvent 
&event 
); 
  84     void OnComboTextEnter( wxCommandEvent 
&event 
); 
  85     void OnComboButtons( wxCommandEvent 
&event 
); 
  86     void OnRadio( wxCommandEvent 
&event 
); 
  87     void OnRadioButtons( wxCommandEvent 
&event 
); 
  88     void OnRadioButton1( wxCommandEvent 
&event 
); 
  89     void OnRadioButton2( wxCommandEvent 
&event 
); 
  90     void OnSetFont( wxCommandEvent 
&event 
); 
  91     void OnPageChanged( wxNotebookEvent 
&event 
); 
  92     void OnPageChanging( wxNotebookEvent 
&event 
); 
  93     void OnSliderUpdate( wxCommandEvent 
&event 
); 
  94     void OnUpdateLabel( wxCommandEvent 
&event 
); 
  96     void OnSpinUp( wxSpinEvent 
&event 
); 
  97     void OnSpinDown( wxSpinEvent 
&event 
); 
  98     void OnSpinUpdate( wxSpinEvent 
&event 
); 
  99     void OnUpdateShowProgress( wxUpdateUIEvent
& event 
); 
 100     void OnShowProgress( wxCommandEvent 
&event 
); 
 101 #endif // wxUSE_SPINBTN 
 104     void OnSpinCtrl(wxSpinEvent
& event
); 
 105     void OnSpinCtrlUp(wxSpinEvent
& event
); 
 106     void OnSpinCtrlDown(wxSpinEvent
& event
); 
 107     void OnSpinCtrlText(wxCommandEvent
& event
); 
 108 #endif // wxUSE_SPINCTRL 
 110     void OnEnableAll(wxCommandEvent
& event
); 
 111     void OnChangeColour(wxCommandEvent
& event
); 
 112     void OnTestButton(wxCommandEvent
& event
); 
 113     void OnBmpButton(wxCommandEvent
& event
); 
 115     void OnSizerCheck (wxCommandEvent 
&event
); 
 117     wxListBox     
*m_listbox
, 
 122 #endif // wxUSE_CHOICE 
 129     wxButton      
*m_fontButton
; 
 130     wxButton      
*m_lbSelectNum
; 
 131     wxButton      
*m_lbSelectThis
; 
 133     wxSpinButton  
*m_spinbutton
; 
 134     wxButton      
*m_btnProgress
; 
 135 #endif // wxUSE_SPINBTN 
 138     wxSpinCtrl    
*m_spinctrl
; 
 139 #endif // wxUSE_SPINCTRL 
 141     wxTextCtrl    
*m_spintext
; 
 142     wxCheckBox    
*m_checkbox
; 
 145     wxNotebook    
*m_notebook
; 
 147     wxStaticText  
*m_label
; 
 149     wxBoxSizer    
*m_buttonSizer
; 
 150     wxButton      
*m_sizerBtn1
; 
 151     wxButton      
*m_sizerBtn2
; 
 152     wxButton      
*m_sizerBtn3
; 
 153     wxButton      
*m_sizerBtn4
; 
 154     wxBoxSizer    
*m_hsizer
; 
 158     wxLog 
*m_logTargetOld
; 
 160     DECLARE_EVENT_TABLE() 
 163 class MyFrame
: public wxFrame
 
 166     MyFrame(const wxChar 
*title
, int x
, int y
); 
 168     void OnQuit(wxCommandEvent
& event
); 
 169     void OnAbout(wxCommandEvent
& event
); 
 170     void OnClearLog(wxCommandEvent
& event
); 
 173     void OnSetTooltipDelay(wxCommandEvent
& event
); 
 174     void OnToggleTooltips(wxCommandEvent
& event
); 
 175 #endif // wxUSE_TOOLTIPS 
 177     void OnEnableAll(wxCommandEvent
& event
); 
 179     void OnIdle( wxIdleEvent
& event 
); 
 180     void OnSize( wxSizeEvent
& event 
); 
 181     void OnMove( wxMoveEvent
& event 
); 
 183     MyPanel 
*GetPanel() const { return m_panel
; } 
 186     void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
) 
 188         if ( m_frameStatusBar 
) 
 191             wxSize sizeAll 
= GetSize(), 
 192                    sizeCl 
= GetClientSize(); 
 193             msg
.Printf(_("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)"), 
 196                        sizeAll
.x
, sizeAll
.y
, 
 198             SetStatusText(msg
, 1); 
 204     DECLARE_EVENT_TABLE() 
 207 // a button which intercepts double clicks (for testing...) 
 208 class MyButton 
: public wxButton
 
 211     MyButton(wxWindow 
*parent
, 
 213              const wxString
& label 
= wxEmptyString
, 
 214              const wxPoint
& pos 
= wxDefaultPosition
, 
 215              const wxSize
& size 
= wxDefaultSize
) 
 216         : wxButton(parent
, id
, label
, pos
, size
) 
 220     void OnDClick(wxMouseEvent
& event
) 
 222         wxLogMessage(_T("MyButton::OnDClick")); 
 228     DECLARE_EVENT_TABLE() 
 231 // a combo which intercepts chars (to test Windows behaviour) 
 232 class MyComboBox 
: public wxComboBox
 
 235     MyComboBox(wxWindow 
*parent
, wxWindowID id
, 
 236                const wxString
& value 
= wxEmptyString
, 
 237                const wxPoint
& pos 
= wxDefaultPosition
, 
 238                const wxSize
& size 
= wxDefaultSize
, 
 239                int n 
= 0, const wxString choices
[] = NULL
, 
 241                const wxValidator
& validator 
= wxDefaultValidator
, 
 242                const wxString
& name 
= wxComboBoxNameStr
) 
 243         : wxComboBox(parent
, id
, value
, pos
, size
, n
, choices
, style
, 
 247     void OnChar(wxKeyEvent
& event
); 
 248     void OnKeyDown(wxKeyEvent
& event
); 
 249     void OnKeyUp(wxKeyEvent
& event
); 
 250     void OnFocusGot(wxFocusEvent
& event
) 
 252         wxLogMessage(_T("MyComboBox::OnFocusGot")); 
 258     DECLARE_EVENT_TABLE() 
 261 // a radiobox which handles focus set/kill (for testing) 
 262 class MyRadioBox 
: public wxRadioBox
 
 265     MyRadioBox(wxWindow 
*parent
, 
 267                const wxString
& title 
= wxEmptyString
, 
 268                const wxPoint
& pos 
= wxDefaultPosition
, 
 269                const wxSize
& size 
= wxDefaultSize
, 
 270                int n 
= 0, const wxString choices
[] = NULL
, 
 272                long style 
= wxRA_HORIZONTAL
, 
 273                const wxValidator
& validator 
= wxDefaultValidator
, 
 274                const wxString
& name 
= wxRadioBoxNameStr
) 
 275         : wxRadioBox(parent
, id
, title
, pos
, size
, n
, choices
, majorDim
, 
 276                      style
, validator
, name
) { SetForegroundColour(*wxRED
); } 
 279     void OnFocusGot(wxFocusEvent
& event
) 
 281         wxLogMessage(_T("MyRadioBox::OnFocusGot")); 
 286     void OnFocusLost(wxFocusEvent
& event
) 
 288         wxLogMessage(_T("MyRadioBox::OnFocusLost")); 
 294     DECLARE_EVENT_TABLE() 
 297 //---------------------------------------------------------------------- 
 299 //---------------------------------------------------------------------- 
 301 static void SetListboxClientData(const wxChar 
*name
, wxListBox 
*control
); 
 304 static void SetChoiceClientData(const wxChar 
*name
, wxChoice 
*control
); 
 305 #endif // wxUSE_CHOICE 
 309 //---------------------------------------------------------------------- 
 311 //---------------------------------------------------------------------- 
 321     CONTROLS_SET_TOOLTIP_DELAY 
= 200, 
 322     CONTROLS_ENABLE_TOOLTIPS
, 
 330     // use standard command line handling: 
 331     if ( !wxApp::OnInit() ) 
 334     // parse the cmd line 
 339         wxSscanf(wxString(argv
[1]), wxT("%d"), &x
); 
 340         wxSscanf(wxString(argv
[2]), wxT("%d"), &y
); 
 343     // Create the main frame window 
 344     MyFrame 
*frame 
= new MyFrame(_T("Controls wxWidgets App"), x
, y
); 
 350 //---------------------------------------------------------------------- 
 352 //---------------------------------------------------------------------- 
 354 const int  ID_NOTEBOOK          
= 1000; 
 356 const int  ID_LISTBOX           
= 130; 
 357 const int  ID_LISTBOX_SEL_NUM   
= 131; 
 358 const int  ID_LISTBOX_SEL_STR   
= 132; 
 359 const int  ID_LISTBOX_CLEAR     
= 133; 
 360 const int  ID_LISTBOX_APPEND    
= 134; 
 361 const int  ID_LISTBOX_DELETE    
= 135; 
 362 const int  ID_LISTBOX_FONT      
= 136; 
 363 const int  ID_LISTBOX_ENABLE    
= 137; 
 364 const int  ID_LISTBOX_SORTED    
= 138; 
 366 const int  ID_CHOICE            
= 120; 
 367 const int  ID_CHOICE_SEL_NUM    
= 121; 
 368 const int  ID_CHOICE_SEL_STR    
= 122; 
 369 const int  ID_CHOICE_CLEAR      
= 123; 
 370 const int  ID_CHOICE_APPEND     
= 124; 
 371 const int  ID_CHOICE_DELETE     
= 125; 
 372 const int  ID_CHOICE_FONT       
= 126; 
 373 const int  ID_CHOICE_ENABLE     
= 127; 
 374 const int  ID_CHOICE_SORTED     
= 128; 
 376 const int  ID_COMBO             
= 140; 
 377 const int  ID_COMBO_SEL_NUM     
= 141; 
 378 const int  ID_COMBO_SEL_STR     
= 142; 
 379 const int  ID_COMBO_CLEAR       
= 143; 
 380 const int  ID_COMBO_APPEND      
= 144; 
 381 const int  ID_COMBO_DELETE      
= 145; 
 382 const int  ID_COMBO_FONT        
= 146; 
 383 const int  ID_COMBO_ENABLE      
= 147; 
 385 const int  ID_RADIOBOX          
= 160; 
 386 const int  ID_RADIOBOX_SEL_NUM  
= 161; 
 387 const int  ID_RADIOBOX_SEL_STR  
= 162; 
 388 const int  ID_RADIOBOX_FONT     
= 163; 
 389 const int  ID_RADIOBOX_ENABLE   
= 164; 
 391 const int  ID_RADIOBUTTON_1     
= 166; 
 392 const int  ID_RADIOBUTTON_2     
= 167; 
 394 const int  ID_SET_FONT          
= 170; 
 396 const int  ID_GAUGE             
= 180; 
 397 const int  ID_SLIDER            
= 181; 
 399 const int  ID_SPIN              
= 182; 
 400 const int  ID_BTNPROGRESS       
= 183; 
 401 const int  ID_BUTTON_LABEL      
= 184; 
 402 const int  ID_SPINCTRL          
= 185; 
 404 const int  ID_BUTTON_TEST1      
= 190; 
 405 const int  ID_BUTTON_TEST2      
= 191; 
 406 const int  ID_BITMAP_BTN        
= 192; 
 408 const int  ID_CHANGE_COLOUR     
= 200; 
 410 const int  ID_SIZER_CHECK1      
= 201; 
 411 const int  ID_SIZER_CHECK2      
= 202; 
 412 const int  ID_SIZER_CHECK3      
= 203; 
 413 const int  ID_SIZER_CHECK4      
= 204; 
 414 const int  ID_SIZER_CHECK14     
= 205; 
 415 const int  ID_SIZER_CHECKBIG    
= 206; 
 417 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
) 
 418 EVT_SIZE      (                         MyPanel::OnSize
) 
 419 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
) 
 420 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
,  MyPanel::OnPageChanged
) 
 421 EVT_LISTBOX   (ID_LISTBOX
,              MyPanel::OnListBox
) 
 422 EVT_LISTBOX   (ID_LISTBOX_SORTED
,       MyPanel::OnListBox
) 
 423 EVT_LISTBOX_DCLICK(ID_LISTBOX
,          MyPanel::OnListBoxDoubleClick
) 
 424 EVT_BUTTON    (ID_LISTBOX_SEL_NUM
,      MyPanel::OnListBoxButtons
) 
 425 EVT_BUTTON    (ID_LISTBOX_SEL_STR
,      MyPanel::OnListBoxButtons
) 
 426 EVT_BUTTON    (ID_LISTBOX_CLEAR
,        MyPanel::OnListBoxButtons
) 
 427 EVT_BUTTON    (ID_LISTBOX_APPEND
,       MyPanel::OnListBoxButtons
) 
 428 EVT_BUTTON    (ID_LISTBOX_DELETE
,       MyPanel::OnListBoxButtons
) 
 429 EVT_BUTTON    (ID_LISTBOX_FONT
,         MyPanel::OnListBoxButtons
) 
 430 EVT_CHECKBOX  (ID_LISTBOX_ENABLE
,       MyPanel::OnListBoxButtons
) 
 432 EVT_CHOICE    (ID_CHOICE
,               MyPanel::OnChoice
) 
 433 EVT_CHOICE    (ID_CHOICE_SORTED
,        MyPanel::OnChoice
) 
 434 EVT_BUTTON    (ID_CHOICE_SEL_NUM
,       MyPanel::OnChoiceButtons
) 
 435 EVT_BUTTON    (ID_CHOICE_SEL_STR
,       MyPanel::OnChoiceButtons
) 
 436 EVT_BUTTON    (ID_CHOICE_CLEAR
,         MyPanel::OnChoiceButtons
) 
 437 EVT_BUTTON    (ID_CHOICE_APPEND
,        MyPanel::OnChoiceButtons
) 
 438 EVT_BUTTON    (ID_CHOICE_DELETE
,        MyPanel::OnChoiceButtons
) 
 439 EVT_BUTTON    (ID_CHOICE_FONT
,          MyPanel::OnChoiceButtons
) 
 440 EVT_CHECKBOX  (ID_CHOICE_ENABLE
,        MyPanel::OnChoiceButtons
) 
 442 EVT_COMBOBOX  (ID_COMBO
,                MyPanel::OnCombo
) 
 443 EVT_TEXT      (ID_COMBO
,                MyPanel::OnComboTextChanged
) 
 444 EVT_TEXT_ENTER(ID_COMBO
,                MyPanel::OnComboTextEnter
) 
 445 EVT_BUTTON    (ID_COMBO_SEL_NUM
,        MyPanel::OnComboButtons
) 
 446 EVT_BUTTON    (ID_COMBO_SEL_STR
,        MyPanel::OnComboButtons
) 
 447 EVT_BUTTON    (ID_COMBO_CLEAR
,          MyPanel::OnComboButtons
) 
 448 EVT_BUTTON    (ID_COMBO_APPEND
,         MyPanel::OnComboButtons
) 
 449 EVT_BUTTON    (ID_COMBO_DELETE
,         MyPanel::OnComboButtons
) 
 450 EVT_BUTTON    (ID_COMBO_FONT
,           MyPanel::OnComboButtons
) 
 451 EVT_CHECKBOX  (ID_COMBO_ENABLE
,         MyPanel::OnComboButtons
) 
 452 EVT_RADIOBOX  (ID_RADIOBOX
,             MyPanel::OnRadio
) 
 453 EVT_BUTTON    (ID_RADIOBOX_SEL_NUM
,     MyPanel::OnRadioButtons
) 
 454 EVT_BUTTON    (ID_RADIOBOX_SEL_STR
,     MyPanel::OnRadioButtons
) 
 455 EVT_BUTTON    (ID_RADIOBOX_FONT
,        MyPanel::OnRadioButtons
) 
 456 EVT_CHECKBOX  (ID_RADIOBOX_ENABLE
,      MyPanel::OnRadioButtons
) 
 457 EVT_RADIOBUTTON(ID_RADIOBUTTON_1
,       MyPanel::OnRadioButton1
) 
 458 EVT_RADIOBUTTON(ID_RADIOBUTTON_2
,       MyPanel::OnRadioButton2
) 
 459 EVT_BUTTON    (ID_SET_FONT
,             MyPanel::OnSetFont
) 
 460 EVT_SLIDER    (ID_SLIDER
,               MyPanel::OnSliderUpdate
) 
 462 EVT_SPIN      (ID_SPIN
,                 MyPanel::OnSpinUpdate
) 
 463 EVT_SPIN_UP   (ID_SPIN
,                 MyPanel::OnSpinUp
) 
 464 EVT_SPIN_DOWN (ID_SPIN
,                 MyPanel::OnSpinDown
) 
 465 EVT_UPDATE_UI (ID_BTNPROGRESS
,          MyPanel::OnUpdateShowProgress
) 
 466 EVT_BUTTON    (ID_BTNPROGRESS
,          MyPanel::OnShowProgress
) 
 467 #endif // wxUSE_SPINBTN 
 469 EVT_SPINCTRL  (ID_SPINCTRL
,             MyPanel::OnSpinCtrl
) 
 470 EVT_SPIN_UP   (ID_SPINCTRL
,             MyPanel::OnSpinCtrlUp
) 
 471 EVT_SPIN_DOWN (ID_SPINCTRL
,             MyPanel::OnSpinCtrlDown
) 
 472 EVT_TEXT      (ID_SPINCTRL
,             MyPanel::OnSpinCtrlText
) 
 473 #endif // wxUSE_SPINCTRL 
 475 EVT_TOGGLEBUTTON(ID_BUTTON_LABEL
,       MyPanel::OnUpdateLabel
) 
 477 EVT_CHECKBOX(ID_BUTTON_LABEL
,       MyPanel::OnUpdateLabel
) 
 478 #endif // wxUSE_TOGGLEBTN 
 479 EVT_CHECKBOX  (ID_CHANGE_COLOUR
,        MyPanel::OnChangeColour
) 
 480 EVT_BUTTON    (ID_BUTTON_TEST1
,         MyPanel::OnTestButton
) 
 481 EVT_BUTTON    (ID_BUTTON_TEST2
,         MyPanel::OnTestButton
) 
 482 EVT_BUTTON    (ID_BITMAP_BTN
,           MyPanel::OnBmpButton
) 
 484 EVT_CHECKBOX  (ID_SIZER_CHECK1
,         MyPanel::OnSizerCheck
) 
 485 EVT_CHECKBOX  (ID_SIZER_CHECK2
,         MyPanel::OnSizerCheck
) 
 486 EVT_CHECKBOX  (ID_SIZER_CHECK3
,         MyPanel::OnSizerCheck
) 
 487 EVT_CHECKBOX  (ID_SIZER_CHECK4
,         MyPanel::OnSizerCheck
) 
 488 EVT_CHECKBOX  (ID_SIZER_CHECK14
,        MyPanel::OnSizerCheck
) 
 489 EVT_CHECKBOX  (ID_SIZER_CHECKBIG
,       MyPanel::OnSizerCheck
) 
 493 BEGIN_EVENT_TABLE(MyButton
, wxButton
) 
 494     EVT_LEFT_DCLICK(MyButton::OnDClick
) 
 497 BEGIN_EVENT_TABLE(MyComboBox
, wxComboBox
) 
 498     EVT_CHAR(MyComboBox::OnChar
) 
 499     EVT_KEY_DOWN(MyComboBox::OnKeyDown
) 
 500     EVT_KEY_UP(MyComboBox::OnKeyUp
) 
 502     EVT_SET_FOCUS(MyComboBox::OnFocusGot
) 
 505 BEGIN_EVENT_TABLE(MyRadioBox
, wxRadioBox
) 
 506     EVT_SET_FOCUS(MyRadioBox::OnFocusGot
) 
 507     EVT_KILL_FOCUS(MyRadioBox::OnFocusLost
) 
 510 // ============================================================================ 
 512 // ============================================================================ 
 514 MyPanel::MyPanel( wxFrame 
*frame
, int x
, int y
, int w
, int h 
) 
 515        : wxPanel( frame
, wxID_ANY
, wxPoint(x
, y
), wxSize(w
, h
) ) 
 518     m_listboxSorted 
= NULL
; 
 521     m_choiceSorted 
= NULL
; 
 529     m_lbSelectNum 
= NULL
; 
 530     m_lbSelectThis 
= NULL
; 
 533     m_btnProgress 
= NULL
; 
 534 #endif // wxUSE_SPINBTN 
 537 #endif // wxUSE_SPINCTRL 
 544     m_text 
= new wxTextCtrl(this, wxID_ANY
, _T("This is the log window.\n"), 
 545                             wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
); 
 546     m_text
->SetBackgroundColour(wxT("wheat")); 
 548     m_logTargetOld 
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
)); 
 550     m_notebook 
= new wxNotebook(this, ID_NOTEBOOK
); 
 565         Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
 
 568     // fill the image list 
 569     wxBitmap 
bmp(list_xpm
); 
 571     wxImageList 
*imagelist 
= new wxImageList(bmp
.GetWidth(), bmp
.GetHeight()); 
 573     imagelist
-> Add( bmp 
); 
 574     imagelist
-> Add( wxBitmap( choice_xpm 
)); 
 575     imagelist
-> Add( wxBitmap( combo_xpm 
)); 
 576     imagelist
-> Add( wxBitmap( text_xpm 
)); 
 577     imagelist
-> Add( wxBitmap( radio_xpm 
)); 
 578     imagelist
-> Add( wxBitmap( gauge_xpm 
)); 
 579     m_notebook
->SetImageList(imagelist
); 
 580 #elif defined(__WXMSW__) 
 581     // load images from resources 
 584         Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
 
 586     wxImageList 
*imagelist 
= new wxImageList(16, 16, false, Image_Max
); 
 588     static const wxChar 
*s_iconNames
[Image_Max
] = 
 590         _T("list"), _T("choice"), _T("combo"), _T("text"), _T("radio"), 
 594     for ( size_t n 
= 0; n 
< Image_Max
; n
++ ) 
 596         wxBitmap 
bmp(s_iconNames
[n
]); 
 597         if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) ) 
 599             wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."), 
 604     m_notebook
->SetImageList(imagelist
); 
 608 #define    Image_List -1 
 609 #define    Image_Choice -1 
 610 #define    Image_Combo -1 
 611 #define    Image_Text -1 
 612 #define    Image_Radio -1 
 613 #define    Image_Gauge -1 
 618     wxPanel 
*panel 
= new wxPanel(m_notebook
); 
 619     m_listbox 
= new wxListBox( panel
, ID_LISTBOX
, 
 620                                wxPoint(10,10), wxSize(120,70), 
 621                                5, choices
, wxLB_ALWAYS_SB 
); 
 622     m_listboxSorted 
= new wxListBox( panel
, ID_LISTBOX_SORTED
, 
 623                                      wxPoint(10,90), wxSize(120,70), 
 624                                      5, choices
, wxLB_SORT 
); 
 626     SetListboxClientData(wxT("listbox"), m_listbox
); 
 627     SetListboxClientData(wxT("listbox"), m_listboxSorted
); 
 629     m_listbox
->SetCursor(*wxCROSS_CURSOR
); 
 631     m_listbox
->SetToolTip( _T("This is a list box") ); 
 632 #endif // wxUSE_TOOLTIPS 
 634     m_lbSelectNum 
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 
 635     m_lbSelectThis 
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); 
 636     (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); 
 637     (void)new MyButton( panel
, ID_LISTBOX_APPEND
, _T("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) ); 
 638     (void)new wxButton( panel
, ID_LISTBOX_DELETE
, _T("D&elete selected item"), wxPoint(180,130), wxSize(140,30) ); 
 639     wxButton 
*button 
= new MyButton( panel
, ID_LISTBOX_FONT
, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); 
 641     button
->SetDefault(); 
 643     button
->SetForegroundColour(*wxBLUE
); 
 646     button
->SetToolTip( _T("Press here to set italic font") ); 
 647 #endif // wxUSE_TOOLTIPS 
 649     m_checkbox 
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, _T("&Disable"), wxPoint(20,170) ); 
 650     m_checkbox
->SetValue(false); 
 652     m_checkbox
->SetToolTip( _T("Click here to disable the listbox") ); 
 653 #endif // wxUSE_TOOLTIPS 
 654     (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, _T("&Toggle colour"), 
 656     panel
->SetCursor(wxCursor(wxCURSOR_HAND
)); 
 657     m_notebook
->AddPage(panel
, _T("wxListBox"), true, Image_List
); 
 660     panel 
= new wxPanel(m_notebook
); 
 661     m_choice 
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,wxDefaultSize
.y
), 5, choices 
); 
 662     m_choiceSorted 
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,wxDefaultSize
.y
), 
 663                                    5, choices
, wxCB_SORT 
); 
 665     SetChoiceClientData(wxT("choice"), m_choice
); 
 666     SetChoiceClientData(wxT("choice"), m_choiceSorted
); 
 668     m_choice
->SetSelection(2); 
 669     m_choice
->SetBackgroundColour( wxT("red") ); 
 670     (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 
 671     (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); 
 672     (void)new wxButton( panel
, ID_CHOICE_CLEAR
, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); 
 673     (void)new wxButton( panel
, ID_CHOICE_APPEND
, _T("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) ); 
 674     (void)new wxButton( panel
, ID_CHOICE_DELETE
, _T("D&elete selected item"), wxPoint(180,130), wxSize(140,30) ); 
 675     (void)new wxButton( panel
, ID_CHOICE_FONT
, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); 
 676     (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, _T("&Disable"), wxPoint(20,130), wxSize(140,30) ); 
 678     m_notebook
->AddPage(panel
, _T("wxChoice"), false, Image_Choice
); 
 679 #endif // wxUSE_CHOICE 
 681     panel 
= new wxPanel(m_notebook
); 
 682     (void)new wxStaticBox( panel
, wxID_ANY
, _T("&Box around combobox"), 
 683                            wxPoint(5, 5), wxSize(150, 100)); 
 684     m_combo 
= new MyComboBox( panel
, ID_COMBO
, _T("This"), 
 685                               wxPoint(20,25), wxSize(120, wxDefaultSize
.y
), 
 687                               wxCB_READONLY 
| wxPROCESS_ENTER
); 
 688     m_combo
->SetBackgroundColour(*wxBLUE
); 
 690     (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 
 691     (void)new wxButton( panel
, ID_COMBO_SEL_STR
, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); 
 692     (void)new wxButton( panel
, ID_COMBO_CLEAR
, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); 
 693     (void)new wxButton( panel
, ID_COMBO_APPEND
, _T("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) ); 
 694     (void)new wxButton( panel
, ID_COMBO_DELETE
, _T("D&elete selected item"), wxPoint(180,130), wxSize(140,30) ); 
 695     (void)new wxButton( panel
, ID_COMBO_FONT
, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); 
 696     (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, _T("&Disable"), wxPoint(20,130), wxSize(140,30) ); 
 697     m_notebook
->AddPage(panel
, _T("wxComboBox"), false, Image_Combo
); 
 699     wxString choices2
[] = 
 701         _T("First"), _T("Second"), 
 703         "Fourth", "Fifth", "Sixth", 
 704         "Seventh", "Eighth", "Nineth", "Tenth" */ 
 707     panel 
= new wxPanel(m_notebook
); 
 708     (void)new MyRadioBox( panel
, ID_RADIOBOX
, _T("&That"), wxPoint(10,160), wxDefaultSize
, WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS 
); 
 709     m_radio 
= new wxRadioBox( panel
, ID_RADIOBOX
, _T("T&his"), wxPoint(10,10), wxDefaultSize
, WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS 
); 
 710     m_radio
->SetForegroundColour(*wxRED
); 
 713     m_combo
->SetToolTip(_T("This is a natural\ncombobox - can you believe me?")); 
 714     m_radio
->SetToolTip(_T("Ever seen a radiobox?")); 
 715 #endif // wxUSE_TOOLTIPS 
 717     (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 
 718     (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, _T("&Select 'This'"), wxPoint(180,80), wxSize(140,30) ); 
 719     m_fontButton 
= new wxButton( panel
, ID_SET_FONT
, _T("Set &more Italic font"), wxPoint(340,30), wxSize(140,30) ); 
 720     (void)new wxButton( panel
, ID_RADIOBOX_FONT
, _T("Set &Italic font"), wxPoint(340,80), wxSize(140,30) ); 
 721     (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, _T("&Disable"), wxPoint(340,130), wxDefaultSize 
); 
 722     wxRadioButton 
*rb 
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, _T("Radiobutton1"), wxPoint(210,170), wxDefaultSize
, wxRB_GROUP 
); 
 723     rb
->SetValue( false ); 
 724     (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, _T("&Radiobutton2"), wxPoint(340,170), wxDefaultSize 
); 
 725     m_notebook
->AddPage(panel
, _T("wxRadioBox"), false, Image_Radio
); 
 727     panel 
= new wxPanel(m_notebook
); 
 728     (void)new wxStaticBox( panel
, wxID_ANY
, _T("&wxGauge and wxSlider"), wxPoint(10,10), wxSize(222,130) ); 
 729     m_gauge 
= new wxGauge( panel
, wxID_ANY
, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER 
); 
 730     m_gauge
->SetBackgroundColour(*wxGREEN
); 
 731     m_gauge
->SetForegroundColour(*wxRED
); 
 732     m_gaugeVert 
= new wxGauge( panel
, wxID_ANY
, 100, 
 733                                wxPoint(195,35), wxSize(30, 90), 
 734                                wxGA_VERTICAL 
| wxGA_SMOOTH 
| wxNO_BORDER 
); 
 735     m_slider 
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,wxDefaultSize
.y
), 
 736                              wxSL_AUTOTICKS 
| wxSL_LABELS 
); 
 737     m_slider
->SetTickFreq(40, 0); 
 739     m_slider
->SetToolTip(_T("This is a sliding slider")); 
 740 #endif // wxUSE_TOOLTIPS 
 742     (void)new wxStaticBox( panel
, wxID_ANY
, _T("&Explanation"), 
 743                            wxPoint(230,10), wxSize(270,130), 
 747     // No wrapping text in wxStaticText yet :-( 
 748     (void)new wxStaticText( panel
, wxID_ANY
, 
 749                             _T("Drag the slider!"), 
 751                             wxSize(240, wxDefaultSize
.y
) 
 754     (void)new wxStaticText( panel
, wxID_ANY
, 
 755                             _T("In order see the gauge (aka progress bar)\n") 
 756                             _T("control do something you have to drag the\n") 
 757                             _T("handle of the slider to the right.\n") 
 759                             _T("This is also supposed to demonstrate how\n") 
 760                             _T("to use static controls.\n"), 
 765     int initialSpinValue 
= -5; 
 767     s 
<< initialSpinValue
; 
 768     m_spintext 
= new wxTextCtrl( panel
, wxID_ANY
, s
, wxPoint(20,160), wxSize(80,wxDefaultSize
.y
) ); 
 770     m_spinbutton 
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, wxDefaultSize
.y
) ); 
 771     m_spinbutton
->SetRange(-40,30); 
 772     m_spinbutton
->SetValue(initialSpinValue
); 
 774     m_btnProgress 
= new wxButton( panel
, ID_BTNPROGRESS
, _T("&Show progress dialog"), 
 776 #endif // wxUSE_SPINBTN 
 779     m_spinctrl 
= new wxSpinCtrl( panel
, ID_SPINCTRL
, _T(""), wxPoint(200, 160), wxSize(80, wxDefaultSize
.y
) ); 
 780     m_spinctrl
->SetRange(10,30); 
 781     m_spinctrl
->SetValue(15); 
 782 #endif // wxUSE_SPINCTRL 
 784     m_notebook
->AddPage(panel
, _T("wxGauge"), false, Image_Gauge
); 
 786     panel 
= new wxPanel(m_notebook
); 
 788 #if !defined(__WXMOTIF__) // wxStaticBitmap not working under Motif yet. 
 789     wxIcon icon 
= wxArtProvider::GetIcon(wxART_INFORMATION
); 
 790     (void) new wxStaticBitmap( panel
, wxID_ANY
, icon
, wxPoint(10, 10) ); 
 792     // VZ: don't leak memory 
 793     // bmpStatic = new wxStaticBitmap(panel, wxID_ANY, wxNullIcon, wxPoint(50, 10)); 
 794     // bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION)); 
 797     wxBitmap 
bitmap( 100, 100 ); 
 799     dc
.SelectObject( bitmap 
); 
 800     dc
.SetPen(*wxGREEN_PEN
); 
 802     dc
.DrawEllipse(5, 5, 90, 90); 
 803     dc
.DrawText(_T("Bitmap"), 30, 40); 
 804     dc
.SelectObject( wxNullBitmap 
); 
 806     (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20)); 
 808 #if defined(__WXMSW__) || defined(__WXMOTIF__) 
 809     // test for masked bitmap display 
 810     bitmap 
= wxBitmap(_T("test2.bmp"), wxBITMAP_TYPE_BMP
); 
 813        bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
)); 
 815        (void)new wxStaticBitmap 
/* wxBitmapButton */ (panel
, wxID_ANY
, bitmap
, wxPoint(300, 120)); 
 819     wxBitmap 
bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION
)), 
 820              bmp2(wxArtProvider::GetBitmap(wxART_WARNING
)), 
 821              bmp3(wxArtProvider::GetBitmap(wxART_QUESTION
)); 
 822     wxBitmapButton 
*bmpBtn 
= new wxBitmapButton
 
 829     bmpBtn
->SetBitmapSelected(bmp2
); 
 830     bmpBtn
->SetBitmapFocus(bmp3
); 
 833     (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
, 
 834                              _T("&Toggle label"), wxPoint(250, 20)); 
 836     (void)new wxCheckBox(panel
, ID_BUTTON_LABEL
, 
 837                          _T("&Toggle label"), wxPoint(250, 20)); 
 838 #endif // wxUSE_TOGGLEBTN 
 840     m_label 
= new wxStaticText(panel
, wxID_ANY
, _T("Label with some long text"), 
 841                                wxPoint(250, 60), wxDefaultSize
, 
 842                                wxALIGN_RIGHT 
/*| wxST_NO_AUTORESIZE*/); 
 843     m_label
->SetForegroundColour( *wxBLUE 
); 
 845     m_notebook
->AddPage(panel
, _T("wxBitmapXXX")); 
 849     panel 
= new wxPanel(m_notebook
); 
 850     panel
->SetAutoLayout( true ); 
 852     wxBoxSizer 
*sizer 
= new wxBoxSizer( wxVERTICAL 
); 
 854     wxStaticBoxSizer 
*csizer 
= 
 855       new wxStaticBoxSizer (new wxStaticBox (panel
, wxID_ANY
, _T("Show Buttons")), wxHORIZONTAL 
); 
 857     wxCheckBox 
*check1
, *check2
, *check3
, *check4
, *check14
, *checkBig
; 
 858     check1 
= new wxCheckBox (panel
, ID_SIZER_CHECK1
, _T("1")); 
 859     check1
->SetValue (true); 
 860     csizer
->Add (check1
); 
 861     check2 
= new wxCheckBox (panel
, ID_SIZER_CHECK2
, _T("2")); 
 862     check2
->SetValue (true); 
 863     csizer
->Add (check2
); 
 864     check3 
= new wxCheckBox (panel
, ID_SIZER_CHECK3
, _T("3")); 
 865     check3
->SetValue (true); 
 866     csizer
->Add (check3
); 
 867     check4 
= new wxCheckBox (panel
, ID_SIZER_CHECK4
, _T("4")); 
 868     check4
->SetValue (true); 
 869     csizer
->Add (check4
); 
 870     check14 
= new wxCheckBox (panel
, ID_SIZER_CHECK14
, _T("1-4")); 
 871     check14
->SetValue (true); 
 872     csizer
->Add (check14
); 
 873     checkBig 
= new wxCheckBox (panel
, ID_SIZER_CHECKBIG
, _T("Big")); 
 874     checkBig
->SetValue (true); 
 875     csizer
->Add (checkBig
); 
 879     m_hsizer 
= new wxBoxSizer( wxHORIZONTAL 
); 
 881     m_buttonSizer 
= new wxBoxSizer (wxVERTICAL
); 
 883     m_sizerBtn1 
= new wxButton(panel
, wxID_ANY
, _T("Test Button &1") ); 
 884     m_buttonSizer
->Add( m_sizerBtn1
, 0, wxALL
, 10 ); 
 885     m_sizerBtn2 
= new wxButton(panel
, wxID_ANY
, _T("Test Button &2") ); 
 886     m_buttonSizer
->Add( m_sizerBtn2
, 0, wxALL
, 10 ); 
 887     m_sizerBtn3 
= new wxButton(panel
, wxID_ANY
, _T("Test Button &3") ); 
 888     m_buttonSizer
->Add( m_sizerBtn3
, 0, wxALL
, 10 ); 
 889     m_sizerBtn4 
= new wxButton(panel
, wxID_ANY
, _T("Test Button &4") ); 
 890     m_buttonSizer
->Add( m_sizerBtn4
, 0, wxALL
, 10 ); 
 892     m_hsizer
->Add (m_buttonSizer
); 
 893     m_hsizer
->Add( 20,20, 1 ); 
 894     m_bigBtn 
= new wxButton(panel
, wxID_ANY
, _T("Multiline\nbutton") ); 
 895     m_hsizer
->Add( m_bigBtn 
, 3, wxGROW
|wxALL
, 10 ); 
 897     sizer
->Add (m_hsizer
, 1, wxGROW
); 
 899     panel
->SetSizer( sizer 
); 
 901     m_notebook
->AddPage(panel
, _T("wxSizer")); 
 904 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) ) 
 908     GetClientSize( &x
, &y 
); 
 910     if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 ); 
 911     if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 ); 
 914 void MyPanel::OnPageChanging( wxNotebookEvent 
&event 
) 
 916     int selOld 
= event
.GetOldSelection(); 
 919         if ( wxMessageBox(_T("This demonstrates how a program may prevent the\n") 
 920                           _T("page change from taking place - if you select\n") 
 921                           _T("[No] the current page will stay the third one\n"), 
 922                           _T("Control sample"), 
 923                           wxICON_QUESTION 
| wxYES_NO
, this) != wxYES 
) 
 931     *m_text 
<< _T("Notebook selection is being changed from ") << selOld
 
 932             << _T(" to ") << event
.GetSelection() 
 933             << _T(" (current page from notebook is ") 
 934             << m_notebook
->GetSelection() << _T(")\n"); 
 937 void MyPanel::OnPageChanged( wxNotebookEvent 
&event 
) 
 939     *m_text 
<< _T("Notebook selection is now ") << event
.GetSelection() 
 940             << _T(" (from notebook: ") << m_notebook
->GetSelection() 
 944 void MyPanel::OnTestButton(wxCommandEvent
& event
) 
 946     wxLogMessage(_T("Button %c clicked."), 
 947                  event
.GetId() == ID_BUTTON_TEST1 
? _T('1') : _T('2')); 
 950 void MyPanel::OnBmpButton(wxCommandEvent
& WXUNUSED(event
)) 
 952     wxLogMessage(_T("Bitmap button clicked.")); 
 955 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
)) 
 957     static wxColour s_colOld
; 
 959     SetThemeEnabled(false); 
 960     // test panel colour changing and propagation to the subcontrols 
 963         SetBackgroundColour(s_colOld
); 
 964         s_colOld 
= wxNullColour
; 
 966         m_lbSelectThis
->SetForegroundColour(wxNullColour
); 
 967         m_lbSelectThis
->SetBackgroundColour(wxNullColour
); 
 971         s_colOld 
= wxColour(wxT("red")); 
 972         SetBackgroundColour(wxT("white")); 
 974         m_lbSelectThis
->SetForegroundColour(wxT("white")); 
 975         m_lbSelectThis
->SetBackgroundColour(wxT("red")); 
 978     m_lbSelectThis
->Refresh(); 
 982 void MyPanel::OnListBox( wxCommandEvent 
&event 
) 
 984 //    GetParent()->Move(100, 100); 
 986     if (event
.GetInt() == -1) 
 988         m_text
->AppendText( _T("ListBox has no selections anymore\n") ); 
 992     wxListBox 
*listbox 
= event
.GetId() == ID_LISTBOX 
? m_listbox
 
 995     m_text
->AppendText( _T("ListBox event selection string is: '") ); 
 996     m_text
->AppendText( event
.GetString() ); 
 997     m_text
->AppendText( _T("'\n") ); 
 998     m_text
->AppendText( _T("ListBox control selection string is: '") ); 
 999     m_text
->AppendText( listbox
->GetStringSelection() ); 
1000     m_text
->AppendText( _T("'\n") ); 
1002     wxStringClientData 
*obj 
= ((wxStringClientData 
*)event
.GetClientObject()); 
1003     m_text
->AppendText( _T("ListBox event client data string is: '") ); 
1004     if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context 
1005         m_text
->AppendText( obj
->GetData() ); 
1007         m_text
->AppendText( wxString(_T("none")) ); 
1009     m_text
->AppendText( _T("'\n") ); 
1010     m_text
->AppendText( _T("ListBox control client data string is: '") ); 
1011     obj 
= (wxStringClientData 
*)listbox
->GetClientObject(listbox
->GetSelection()); 
1013         m_text
->AppendText( obj
->GetData() ); 
1015         m_text
->AppendText( wxString(_T("none")) ); 
1016     m_text
->AppendText( _T("'\n") ); 
1019 void MyPanel::OnListBoxDoubleClick( wxCommandEvent 
&event 
) 
1021     m_text
->AppendText( _T("ListBox double click string is: ") ); 
1022     m_text
->AppendText( event
.GetString() ); 
1023     m_text
->AppendText( _T("\n") ); 
1026 void MyPanel::OnListBoxButtons( wxCommandEvent 
&event 
) 
1028     switch (event
.GetId()) 
1030         case ID_LISTBOX_ENABLE
: 
1032                 m_text
->AppendText(_T("Checkbox clicked.\n")); 
1034                 wxCheckBox 
*cb 
= (wxCheckBox
*)event
.GetEventObject(); 
1036                     cb
->SetToolTip( _T("Click to enable listbox") ); 
1038                     cb
->SetToolTip( _T("Click to disable listbox") ); 
1039 #endif // wxUSE_TOOLTIPS 
1040                 m_listbox
->Enable( event
.GetInt() == 0 ); 
1041                 m_lbSelectThis
->Enable( event
.GetInt() == 0 ); 
1042                 m_lbSelectNum
->Enable( event
.GetInt() == 0 ); 
1043                 m_listboxSorted
->Enable( event
.GetInt() == 0 ); 
1044                 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 ); 
1047         case ID_LISTBOX_SEL_NUM
: 
1049                 if (m_listbox
->GetCount() > 2) 
1050                     m_listbox
->SetSelection( 2 ); 
1051                 if (m_listboxSorted
->GetCount() > 2) 
1052                     m_listboxSorted
->SetSelection( 2 ); 
1053                 m_lbSelectThis
->WarpPointer( 40, 14 ); 
1056         case ID_LISTBOX_SEL_STR
: 
1058                 if (m_listbox
->FindString(_T("This")) != wxNOT_FOUND
) 
1059                     m_listbox
->SetStringSelection( _T("This") ); 
1060                 if (m_listboxSorted
->FindString(_T("This")) != wxNOT_FOUND
) 
1061                     m_listboxSorted
->SetStringSelection( _T("This") ); 
1062                 m_lbSelectNum
->WarpPointer( 40, 14 ); 
1065         case ID_LISTBOX_CLEAR
: 
1068                 m_listboxSorted
->Clear(); 
1071         case ID_LISTBOX_APPEND
: 
1073                 m_listbox
->Append( _T("Hi!") ); 
1074                 m_listboxSorted
->Append( _T("Hi!") ); 
1077         case ID_LISTBOX_DELETE
: 
1080                 idx 
= m_listbox
->GetSelection(); 
1081                 if ( idx 
!= wxNOT_FOUND 
) 
1082                     m_listbox
->Delete( idx 
); 
1083                 idx 
= m_listboxSorted
->GetSelection(); 
1084                 if ( idx 
!= wxNOT_FOUND 
) 
1085                     m_listboxSorted
->Delete( idx 
); 
1088         case ID_LISTBOX_FONT
: 
1090                 m_listbox
->SetFont( *wxITALIC_FONT 
); 
1091                 m_listboxSorted
->SetFont( *wxITALIC_FONT 
); 
1092                 m_checkbox
->SetFont( *wxITALIC_FONT 
); 
1099 void MyPanel::OnChoice( wxCommandEvent 
&event 
) 
1101     wxChoice 
*choice 
= event
.GetId() == ID_CHOICE 
? m_choice
 
1104     m_text
->AppendText( _T("Choice event selection string is: '") ); 
1105     m_text
->AppendText( event
.GetString() ); 
1106     m_text
->AppendText( _T("'\n") ); 
1107     m_text
->AppendText( _T("Choice control selection string is: '") ); 
1108     m_text
->AppendText( choice
->GetStringSelection() ); 
1109     m_text
->AppendText( _T("'\n") ); 
1111     wxStringClientData 
*obj 
= ((wxStringClientData 
*)event
.GetClientObject()); 
1112     m_text
->AppendText( _T("Choice event client data string is: '") ); 
1115        m_text
->AppendText( obj
->GetData() ); 
1117        m_text
->AppendText( wxString(_T("none")) ); 
1119     m_text
->AppendText( _T("'\n") ); 
1120     m_text
->AppendText( _T("Choice control client data string is: '") ); 
1121     obj 
= (wxStringClientData 
*)choice
->GetClientObject(choice
->GetSelection()); 
1124        m_text
->AppendText( obj
->GetData() ); 
1126        m_text
->AppendText( wxString(_T("none")) ); 
1127     m_text
->AppendText( _T("'\n") ); 
1130 void MyPanel::OnChoiceButtons( wxCommandEvent 
&event 
) 
1132     switch (event
.GetId()) 
1134         case ID_CHOICE_ENABLE
: 
1136                 m_choice
->Enable( event
.GetInt() == 0 ); 
1137                 m_choiceSorted
->Enable( event
.GetInt() == 0 ); 
1140         case ID_CHOICE_SEL_NUM
: 
1142                 m_choice
->SetSelection( 2 ); 
1143                 m_choiceSorted
->SetSelection( 2 ); 
1146         case ID_CHOICE_SEL_STR
: 
1148                 m_choice
->SetStringSelection( _T("This") ); 
1149                 m_choiceSorted
->SetStringSelection( _T("This") ); 
1152         case ID_CHOICE_CLEAR
: 
1155                 m_choiceSorted
->Clear(); 
1158         case ID_CHOICE_APPEND
: 
1160                 m_choice
->Append( _T("Hi!") ); 
1161                 m_choiceSorted
->Append( _T("Hi!") ); 
1164         case ID_CHOICE_DELETE
: 
1166                 int idx 
= m_choice
->GetSelection(); 
1167                 if ( idx 
!= wxNOT_FOUND 
) 
1168                     m_choice
->Delete( idx 
); 
1169                 idx 
= m_choiceSorted
->GetSelection(); 
1170                 if ( idx 
!= wxNOT_FOUND 
) 
1171                     m_choiceSorted
->Delete( idx 
); 
1174         case ID_CHOICE_FONT
: 
1176                 m_choice
->SetFont( *wxITALIC_FONT 
); 
1177                 m_choiceSorted
->SetFont( *wxITALIC_FONT 
); 
1182 #endif // wxUSE_CHOICE 
1184 void MyPanel::OnCombo( wxCommandEvent 
&event 
) 
1186     m_text
->AppendText( _T("ComboBox event selection string is: ") ); 
1187     m_text
->AppendText( event
.GetString() ); 
1188     m_text
->AppendText( _T("\n") ); 
1189     m_text
->AppendText( _T("ComboBox control selection string is: ") ); 
1190     m_text
->AppendText( m_combo
->GetStringSelection() ); 
1191     m_text
->AppendText( _T("\n") ); 
1194 void MyPanel::OnComboTextChanged(wxCommandEvent
& event
) 
1197     str
.Printf( wxT("Text in the combobox changed: now is '%s'."), 
1198                 event
.GetString().c_str() ); 
1199     wxLogMessage( str
.c_str() ); 
1202 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
)) 
1204     wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."), 
1205                  m_combo
->GetValue().c_str()); 
1208 void MyPanel::OnComboButtons( wxCommandEvent 
&event 
) 
1210     switch (event
.GetId()) 
1212         case ID_COMBO_ENABLE
: 
1214                 m_combo
->Enable( event
.GetInt() == 0 ); 
1217         case ID_COMBO_SEL_NUM
: 
1219                 m_combo
->SetSelection( 2 ); 
1222         case ID_COMBO_SEL_STR
: 
1224                 m_combo
->SetStringSelection( _T("This") ); 
1227         case ID_COMBO_CLEAR
: 
1232         case ID_COMBO_APPEND
: 
1234                 m_combo
->Append( _T("Hi!") ); 
1237         case ID_COMBO_DELETE
: 
1239                 int idx 
= m_combo
->GetSelection(); 
1240                 m_combo
->Delete( idx 
); 
1245                 m_combo
->SetFont( *wxITALIC_FONT 
); 
1251 void MyPanel::OnRadio( wxCommandEvent 
&event 
) 
1253     m_text
->AppendText( _T("RadioBox selection string is: ") ); 
1254     m_text
->AppendText( event
.GetString() ); 
1255     m_text
->AppendText( _T("\n") ); 
1258 void MyPanel::OnRadioButton1( wxCommandEvent 
& WXUNUSED(event
) ) 
1260     wxMessageBox(_T("First wxRadioButton selected."), _T("wxControl sample")); 
1263 void MyPanel::OnRadioButton2( wxCommandEvent 
& WXUNUSED(event
) ) 
1265     m_text
->AppendText(_T("Second wxRadioButton selected.\n")); 
1268 void MyPanel::OnRadioButtons( wxCommandEvent 
&event 
) 
1270     switch (event
.GetId()) 
1272         case ID_RADIOBOX_ENABLE
: 
1274                 m_radio
->Enable( event
.GetInt() == 0 ); 
1277         case ID_RADIOBOX_SEL_NUM
: 
1279                 m_radio
->SetSelection( 2 ); 
1282         case ID_RADIOBOX_SEL_STR
: 
1284                 m_radio
->SetStringSelection( _T("This") ); 
1287         case ID_RADIOBOX_FONT
: 
1289                     m_radio
->SetForegroundColour(*wxGREEN
); 
1291                 m_radio
->SetFont( *wxITALIC_FONT 
); 
1297 void MyPanel::OnSetFont( wxCommandEvent 
&WXUNUSED(event
) ) 
1299     m_fontButton
->SetFont( *wxITALIC_FONT 
); 
1300     m_text
->SetFont( *wxITALIC_FONT 
); 
1303 void MyPanel::OnUpdateLabel( wxCommandEvent 
&event 
) 
1305     m_label
->SetLabel(event
.GetInt() ? _T("Very very very very very long text.") 
1306                                      : _T("Shorter text.")); 
1309 void MyPanel::OnSliderUpdate( wxCommandEvent 
&WXUNUSED(event
) ) 
1311     m_gauge
->SetValue( m_slider
->GetValue() ); 
1312     m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 ); 
1317 void MyPanel::OnSpinCtrlText(wxCommandEvent
& event
) 
1322         s
.Printf( _T("Spin ctrl text changed: now %d (from event: %s)\n"), 
1323                  m_spinctrl
->GetValue(), event
.GetString().c_str() ); 
1324         m_text
->AppendText(s
); 
1328 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
) 
1333         s
.Printf( _T("Spin ctrl changed: now %d (from event: %ld)\n"), 
1334                  m_spinctrl
->GetValue(), event
.GetInt() ); 
1335         m_text
->AppendText(s
); 
1339 void MyPanel::OnSpinCtrlUp(wxSpinEvent
& event
) 
1343         m_text
->AppendText( wxString::Format( 
1344             _T("Spin up: %d (from event: %ld)\n"), 
1345             m_spinctrl
->GetValue(), event
.GetInt() ) ); 
1349 void MyPanel::OnSpinCtrlDown(wxSpinEvent
& event
) 
1353         m_text
->AppendText( wxString::Format( 
1354             _T("Spin down: %d (from event: %ld)\n"), 
1355             m_spinctrl
->GetValue(), event
.GetInt() ) ); 
1359 #endif // wxUSE_SPINCTRL 
1362 void MyPanel::OnSpinUp( wxSpinEvent 
&event 
) 
1365     value
.Printf( _T("Spin control up: current = %d\n"), 
1366                  m_spinbutton
->GetValue()); 
1368     if ( event
.GetPosition() > 17 ) 
1370         value 
+= _T("Preventing the spin button from going above 17.\n"); 
1375     m_text
->AppendText(value
); 
1378 void MyPanel::OnSpinDown( wxSpinEvent 
&event 
) 
1381     value
.Printf( _T("Spin control down: current = %d\n"), 
1382                  m_spinbutton
->GetValue()); 
1384     if ( event
.GetPosition() < -17 ) 
1386         value 
+= _T("Preventing the spin button from going below -17.\n"); 
1391     m_text
->AppendText(value
); 
1394 void MyPanel::OnSpinUpdate( wxSpinEvent 
&event 
) 
1397     value
.Printf( _T("%d"), event
.GetPosition() ); 
1398     m_spintext
->SetValue( value 
); 
1400     value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"), 
1401                  m_spinbutton
->GetMin(), m_spinbutton
->GetMax(), 
1402                  m_spinbutton
->GetValue()); 
1404     m_text
->AppendText(value
); 
1407 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event 
) 
1409     event
.Enable( m_spinbutton
->GetValue() > 0 ); 
1412 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) ) 
1414     int max 
= m_spinbutton
->GetValue(); 
1418         wxLogError(_T("You must set positive range!")); 
1422     wxProgressDialog 
dialog(_T("Progress dialog example"), 
1423                             _T("An informative message"), 
1430                             wxPD_ESTIMATED_TIME 
| 
1431                             wxPD_REMAINING_TIME
); 
1435     for ( int i 
= 0; i 
<= max 
&& cont
; i
++ ) 
1440             cont 
= dialog
.Update(i
, _T("That's all, folks!")); 
1442         else if ( i 
== max 
/ 2 ) 
1444             cont 
= dialog
.Update(i
, _T("Only a half left (very long message)!")); 
1448             cont 
= dialog
.Update(i
); 
1454         *m_text 
<< _T("Progress dialog aborted!\n"); 
1458         *m_text 
<< _T("Countdown from ") << max 
<< _T(" finished.\n"); 
1462 #endif // wxUSE_SPINBTN 
1464 void MyPanel::OnSizerCheck( wxCommandEvent 
&event
) 
1466   switch (event
.GetId ()) { 
1467   case ID_SIZER_CHECK1
: 
1468     m_buttonSizer
->Show (m_sizerBtn1
, event
.IsChecked ()); 
1469     m_buttonSizer
->Layout (); 
1471   case ID_SIZER_CHECK2
: 
1472     m_buttonSizer
->Show (m_sizerBtn2
, event
.IsChecked ()); 
1473     m_buttonSizer
->Layout (); 
1475   case ID_SIZER_CHECK3
: 
1476     m_buttonSizer
->Show (m_sizerBtn3
, event
.IsChecked ()); 
1477     m_buttonSizer
->Layout (); 
1479   case ID_SIZER_CHECK4
: 
1480     m_buttonSizer
->Show (m_sizerBtn4
, event
.IsChecked ()); 
1481     m_buttonSizer
->Layout (); 
1483   case ID_SIZER_CHECK14
: 
1484     m_hsizer
->Show (m_buttonSizer
, event
.IsChecked ()); 
1485     m_hsizer
->Layout (); 
1487   case ID_SIZER_CHECKBIG
: 
1488     m_hsizer
->Show (m_bigBtn
, event
.IsChecked ()); 
1489     m_hsizer
->Layout (); 
1497     //wxLog::RemoveTraceMask(_T("focus")); 
1498     delete wxLog::SetActiveTarget(m_logTargetOld
); 
1500     delete m_notebook
->GetImageList(); 
1503 //---------------------------------------------------------------------- 
1505 //---------------------------------------------------------------------- 
1507 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
) 
1508     EVT_MENU(CONTROLS_QUIT
,   MyFrame::OnQuit
) 
1509     EVT_MENU(CONTROLS_ABOUT
,  MyFrame::OnAbout
) 
1510     EVT_MENU(CONTROLS_CLEAR_LOG
,  MyFrame::OnClearLog
) 
1512     EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
,  MyFrame::OnSetTooltipDelay
) 
1513     EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
,  MyFrame::OnToggleTooltips
) 
1514 #endif // wxUSE_TOOLTIPS 
1516     EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
) 
1518     EVT_SIZE(MyFrame::OnSize
) 
1519     EVT_MOVE(MyFrame::OnMove
) 
1521     EVT_IDLE(MyFrame::OnIdle
) 
1524 MyFrame::MyFrame(const wxChar 
*title
, int x
, int y
) 
1525        : wxFrame(NULL
, wxID_ANY
, title
, wxPoint(x
, y
), wxSize(500, 430)) 
1528     // The wxICON() macros loads an icon from a resource under Windows 
1529     // and uses an #included XPM image under GTK+ and Motif 
1532     SetIcon( wxICON(mondrian
) ); 
1535     wxMenu 
*file_menu 
= new wxMenu
; 
1537     file_menu
->Append(CONTROLS_CLEAR_LOG
, _T("&Clear log\tCtrl-L")); 
1538     file_menu
->AppendSeparator(); 
1539     file_menu
->Append(CONTROLS_ABOUT
, _T("&About\tF1")); 
1540     file_menu
->AppendSeparator(); 
1541     file_menu
->Append(CONTROLS_QUIT
, _T("E&xit\tAlt-X"), _T("Quit controls sample")); 
1543     wxMenuBar 
*menu_bar 
= new wxMenuBar
; 
1544     menu_bar
->Append(file_menu
, _T("&File")); 
1547     wxMenu 
*tooltip_menu 
= new wxMenu
; 
1548     tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, _T("Set &delay\tCtrl-D")); 
1549     tooltip_menu
->AppendSeparator(); 
1550     tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, _T("&Toggle tooltips\tCtrl-T"), 
1551             _T("enable/disable tooltips"), true); 
1552     tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, true); 
1553     menu_bar
->Append(tooltip_menu
, _T("&Tooltips")); 
1554 #endif // wxUSE_TOOLTIPS 
1556     wxMenu 
*panel_menu 
= new wxMenu
; 
1557     panel_menu
->Append(CONTROLS_ENABLE_ALL
, _T("&Disable all\tCtrl-E"), 
1558                        _T("Enable/disable all panel controls"), true); 
1559     menu_bar
->Append(panel_menu
, _T("&Panel")); 
1561     SetMenuBar(menu_bar
); 
1565     m_panel 
= new MyPanel( this, 10, 10, 300, 100 ); 
1567     SetSizeHints( 500, 425 ); 
1570 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) ) 
1575 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) ) 
1579     wxMessageDialog 
dialog(this, _T("This is a control sample"), _T("About Controls"), wxOK 
); 
1583 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
)) 
1585     m_panel
->m_text
->Clear(); 
1589 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& WXUNUSED(event
)) 
1591     static long s_delay 
= 5000; 
1594     delay
.Printf( _T("%ld"), s_delay
); 
1596     delay 
= wxGetTextFromUser(_T("Enter delay (in milliseconds)"), 
1597             _T("Set tooltip delay"), 
1601         return; // cancelled 
1603     wxSscanf(delay
, _T("%ld"), &s_delay
); 
1605     wxToolTip::SetDelay(s_delay
); 
1607     wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
); 
1610 void MyFrame::OnToggleTooltips(wxCommandEvent
& WXUNUSED(event
)) 
1612     static bool s_enabled 
= true; 
1614     s_enabled 
= !s_enabled
; 
1616     wxToolTip::Enable(s_enabled
); 
1618     wxLogStatus(this, _T("Tooltips %sabled"), s_enabled 
? _T("en") : _T("dis") ); 
1622 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
)) 
1624     static bool s_enable 
= true; 
1626     s_enable 
= !s_enable
; 
1627     m_panel
->Enable(s_enable
); 
1630 void MyFrame::OnMove( wxMoveEvent
& event 
) 
1632     UpdateStatusBar(event
.GetPosition(), GetSize()); 
1637 void MyFrame::OnSize( wxSizeEvent
& event 
) 
1639     UpdateStatusBar(GetPosition(), event
.GetSize()); 
1644 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) ) 
1646     // track the window which has the focus in the status bar 
1647     static wxWindow 
*s_windowFocus 
= (wxWindow 
*)NULL
; 
1648     wxWindow 
*focus 
= wxWindow::FindFocus(); 
1649     if ( focus 
&& (focus 
!= s_windowFocus
) ) 
1651         s_windowFocus 
= focus
; 
1656                 _T("Focus: %s, HWND = %08x"), 
1660                 s_windowFocus
->GetClassInfo()->GetClassName() 
1662                 , (unsigned int) s_windowFocus
->GetHWND() 
1670 void MyComboBox::OnChar(wxKeyEvent
& event
) 
1672     wxLogMessage(_T("MyComboBox::OnChar")); 
1674     if ( event
.GetKeyCode() == 'w' ) 
1675         wxLogMessage(_T("MyComboBox: 'w' will be ignored.")); 
1680 void MyComboBox::OnKeyDown(wxKeyEvent
& event
) 
1682     wxLogMessage(_T("MyComboBox::OnKeyDown")); 
1684     if ( event
.GetKeyCode() == 'w' ) 
1685         wxLogMessage(_T("MyComboBox: 'w' will be ignored.")); 
1690 void MyComboBox::OnKeyUp(wxKeyEvent
& event
) 
1692     wxLogMessage(_T("MyComboBox::OnKeyUp")); 
1697 static void SetListboxClientData(const wxChar 
*name
, wxListBox 
*control
) 
1699     size_t count 
= control
->GetCount(); 
1700     for ( size_t n 
= 0; n 
< count
; n
++ ) 
1703         s
.Printf(wxT("%s client data for '%s'"), 
1704                  name
, control
->GetString(n
).c_str()); 
1706         control
->SetClientObject(n
, new wxStringClientData(s
)); 
1712 static void SetChoiceClientData(const wxChar 
*name
, wxChoice 
*control
) 
1714     size_t count 
= control
->GetCount(); 
1715     for ( size_t n 
= 0; n 
< count
; n
++ ) 
1718         s
.Printf(wxT("%s client data for '%s'"), 
1719                  name
, control
->GetString(n
).c_str()); 
1721         control
->SetClientObject(n
, new wxStringClientData(s
)); 
1725 #endif // wxUSE_CHOICE