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
; } 
 187     void UpdateStatusBar(const wxPoint
& pos
, const wxSize
& size
) 
 189         if ( m_frameStatusBar 
) 
 192             wxSize sizeAll 
= GetSize(), 
 193                    sizeCl 
= GetClientSize(); 
 194             msg
.Printf(_("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)"), 
 197                        sizeAll
.x
, sizeAll
.y
, 
 199             SetStatusText(msg
, 1); 
 202 #endif // wxUSE_STATUSBAR 
 206     DECLARE_EVENT_TABLE() 
 209 // a button which intercepts double clicks (for testing...) 
 210 class MyButton 
: public wxButton
 
 213     MyButton(wxWindow 
*parent
, 
 215              const wxString
& label 
= wxEmptyString
, 
 216              const wxPoint
& pos 
= wxDefaultPosition
, 
 217              const wxSize
& size 
= wxDefaultSize
) 
 218         : wxButton(parent
, id
, label
, pos
, size
) 
 222     void OnDClick(wxMouseEvent
& event
) 
 224         wxLogMessage(_T("MyButton::OnDClick")); 
 230     DECLARE_EVENT_TABLE() 
 233 // a combo which intercepts chars (to test Windows behaviour) 
 234 class MyComboBox 
: public wxComboBox
 
 237     MyComboBox(wxWindow 
*parent
, wxWindowID id
, 
 238                const wxString
& value 
= wxEmptyString
, 
 239                const wxPoint
& pos 
= wxDefaultPosition
, 
 240                const wxSize
& size 
= wxDefaultSize
, 
 241                int n 
= 0, const wxString choices
[] = NULL
, 
 243                const wxValidator
& validator 
= wxDefaultValidator
, 
 244                const wxString
& name 
= wxComboBoxNameStr
) 
 245         : wxComboBox(parent
, id
, value
, pos
, size
, n
, choices
, style
, 
 249     void OnChar(wxKeyEvent
& event
); 
 250     void OnKeyDown(wxKeyEvent
& event
); 
 251     void OnKeyUp(wxKeyEvent
& event
); 
 252     void OnFocusGot(wxFocusEvent
& event
) 
 254         wxLogMessage(_T("MyComboBox::OnFocusGot")); 
 260     DECLARE_EVENT_TABLE() 
 263 // a radiobox which handles focus set/kill (for testing) 
 264 class MyRadioBox 
: public wxRadioBox
 
 267     MyRadioBox(wxWindow 
*parent
, 
 269                const wxString
& title 
= wxEmptyString
, 
 270                const wxPoint
& pos 
= wxDefaultPosition
, 
 271                const wxSize
& size 
= wxDefaultSize
, 
 272                int n 
= 0, const wxString choices
[] = NULL
, 
 274                long style 
= wxRA_HORIZONTAL
, 
 275                const wxValidator
& validator 
= wxDefaultValidator
, 
 276                const wxString
& name 
= wxRadioBoxNameStr
) 
 277         : wxRadioBox(parent
, id
, title
, pos
, size
, n
, choices
, majorDim
, 
 278                      style
, validator
, name
) { SetForegroundColour(*wxRED
); } 
 281     void OnFocusGot(wxFocusEvent
& event
) 
 283         wxLogMessage(_T("MyRadioBox::OnFocusGot")); 
 288     void OnFocusLost(wxFocusEvent
& event
) 
 290         wxLogMessage(_T("MyRadioBox::OnFocusLost")); 
 296     DECLARE_EVENT_TABLE() 
 299 //---------------------------------------------------------------------- 
 301 //---------------------------------------------------------------------- 
 303 static void SetListboxClientData(const wxChar 
*name
, wxListBox 
*control
); 
 306 static void SetChoiceClientData(const wxChar 
*name
, wxChoice 
*control
); 
 307 #endif // wxUSE_CHOICE 
 311 //---------------------------------------------------------------------- 
 313 //---------------------------------------------------------------------- 
 323     CONTROLS_SET_TOOLTIP_DELAY 
= 200, 
 324     CONTROLS_ENABLE_TOOLTIPS
, 
 332     // use standard command line handling: 
 333     if ( !wxApp::OnInit() ) 
 336     // parse the cmd line 
 341         wxSscanf(wxString(argv
[1]), wxT("%d"), &x
); 
 342         wxSscanf(wxString(argv
[2]), wxT("%d"), &y
); 
 345     // Create the main frame window 
 346     MyFrame 
*frame 
= new MyFrame(_T("Controls wxWidgets App"), x
, y
); 
 352 //---------------------------------------------------------------------- 
 354 //---------------------------------------------------------------------- 
 356 const int  ID_NOTEBOOK          
= 1000; 
 358 const int  ID_LISTBOX           
= 130; 
 359 const int  ID_LISTBOX_SEL_NUM   
= 131; 
 360 const int  ID_LISTBOX_SEL_STR   
= 132; 
 361 const int  ID_LISTBOX_CLEAR     
= 133; 
 362 const int  ID_LISTBOX_APPEND    
= 134; 
 363 const int  ID_LISTBOX_DELETE    
= 135; 
 364 const int  ID_LISTBOX_FONT      
= 136; 
 365 const int  ID_LISTBOX_ENABLE    
= 137; 
 366 const int  ID_LISTBOX_SORTED    
= 138; 
 368 const int  ID_CHOICE            
= 120; 
 369 const int  ID_CHOICE_SEL_NUM    
= 121; 
 370 const int  ID_CHOICE_SEL_STR    
= 122; 
 371 const int  ID_CHOICE_CLEAR      
= 123; 
 372 const int  ID_CHOICE_APPEND     
= 124; 
 373 const int  ID_CHOICE_DELETE     
= 125; 
 374 const int  ID_CHOICE_FONT       
= 126; 
 375 const int  ID_CHOICE_ENABLE     
= 127; 
 376 const int  ID_CHOICE_SORTED     
= 128; 
 378 const int  ID_COMBO             
= 140; 
 379 const int  ID_COMBO_SEL_NUM     
= 141; 
 380 const int  ID_COMBO_SEL_STR     
= 142; 
 381 const int  ID_COMBO_CLEAR       
= 143; 
 382 const int  ID_COMBO_APPEND      
= 144; 
 383 const int  ID_COMBO_DELETE      
= 145; 
 384 const int  ID_COMBO_FONT        
= 146; 
 385 const int  ID_COMBO_ENABLE      
= 147; 
 387 const int  ID_RADIOBOX          
= 160; 
 388 const int  ID_RADIOBOX_SEL_NUM  
= 161; 
 389 const int  ID_RADIOBOX_SEL_STR  
= 162; 
 390 const int  ID_RADIOBOX_FONT     
= 163; 
 391 const int  ID_RADIOBOX_ENABLE   
= 164; 
 393 const int  ID_RADIOBUTTON_1     
= 166; 
 394 const int  ID_RADIOBUTTON_2     
= 167; 
 396 const int  ID_SET_FONT          
= 170; 
 398 const int  ID_GAUGE             
= 180; 
 399 const int  ID_SLIDER            
= 181; 
 401 const int  ID_SPIN              
= 182; 
 402 const int  ID_BTNPROGRESS       
= 183; 
 403 const int  ID_BUTTON_LABEL      
= 184; 
 404 const int  ID_SPINCTRL          
= 185; 
 406 const int  ID_BUTTON_TEST1      
= 190; 
 407 const int  ID_BUTTON_TEST2      
= 191; 
 408 const int  ID_BITMAP_BTN        
= 192; 
 410 const int  ID_CHANGE_COLOUR     
= 200; 
 412 const int  ID_SIZER_CHECK1      
= 201; 
 413 const int  ID_SIZER_CHECK2      
= 202; 
 414 const int  ID_SIZER_CHECK3      
= 203; 
 415 const int  ID_SIZER_CHECK4      
= 204; 
 416 const int  ID_SIZER_CHECK14     
= 205; 
 417 const int  ID_SIZER_CHECKBIG    
= 206; 
 419 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
) 
 420 EVT_SIZE      (                         MyPanel::OnSize
) 
 421 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
) 
 422 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
,  MyPanel::OnPageChanged
) 
 423 EVT_LISTBOX   (ID_LISTBOX
,              MyPanel::OnListBox
) 
 424 EVT_LISTBOX   (ID_LISTBOX_SORTED
,       MyPanel::OnListBox
) 
 425 EVT_LISTBOX_DCLICK(ID_LISTBOX
,          MyPanel::OnListBoxDoubleClick
) 
 426 EVT_BUTTON    (ID_LISTBOX_SEL_NUM
,      MyPanel::OnListBoxButtons
) 
 427 EVT_BUTTON    (ID_LISTBOX_SEL_STR
,      MyPanel::OnListBoxButtons
) 
 428 EVT_BUTTON    (ID_LISTBOX_CLEAR
,        MyPanel::OnListBoxButtons
) 
 429 EVT_BUTTON    (ID_LISTBOX_APPEND
,       MyPanel::OnListBoxButtons
) 
 430 EVT_BUTTON    (ID_LISTBOX_DELETE
,       MyPanel::OnListBoxButtons
) 
 431 EVT_BUTTON    (ID_LISTBOX_FONT
,         MyPanel::OnListBoxButtons
) 
 432 EVT_CHECKBOX  (ID_LISTBOX_ENABLE
,       MyPanel::OnListBoxButtons
) 
 434 EVT_CHOICE    (ID_CHOICE
,               MyPanel::OnChoice
) 
 435 EVT_CHOICE    (ID_CHOICE_SORTED
,        MyPanel::OnChoice
) 
 436 EVT_BUTTON    (ID_CHOICE_SEL_NUM
,       MyPanel::OnChoiceButtons
) 
 437 EVT_BUTTON    (ID_CHOICE_SEL_STR
,       MyPanel::OnChoiceButtons
) 
 438 EVT_BUTTON    (ID_CHOICE_CLEAR
,         MyPanel::OnChoiceButtons
) 
 439 EVT_BUTTON    (ID_CHOICE_APPEND
,        MyPanel::OnChoiceButtons
) 
 440 EVT_BUTTON    (ID_CHOICE_DELETE
,        MyPanel::OnChoiceButtons
) 
 441 EVT_BUTTON    (ID_CHOICE_FONT
,          MyPanel::OnChoiceButtons
) 
 442 EVT_CHECKBOX  (ID_CHOICE_ENABLE
,        MyPanel::OnChoiceButtons
) 
 444 EVT_COMBOBOX  (ID_COMBO
,                MyPanel::OnCombo
) 
 445 EVT_TEXT      (ID_COMBO
,                MyPanel::OnComboTextChanged
) 
 446 EVT_TEXT_ENTER(ID_COMBO
,                MyPanel::OnComboTextEnter
) 
 447 EVT_BUTTON    (ID_COMBO_SEL_NUM
,        MyPanel::OnComboButtons
) 
 448 EVT_BUTTON    (ID_COMBO_SEL_STR
,        MyPanel::OnComboButtons
) 
 449 EVT_BUTTON    (ID_COMBO_CLEAR
,          MyPanel::OnComboButtons
) 
 450 EVT_BUTTON    (ID_COMBO_APPEND
,         MyPanel::OnComboButtons
) 
 451 EVT_BUTTON    (ID_COMBO_DELETE
,         MyPanel::OnComboButtons
) 
 452 EVT_BUTTON    (ID_COMBO_FONT
,           MyPanel::OnComboButtons
) 
 453 EVT_CHECKBOX  (ID_COMBO_ENABLE
,         MyPanel::OnComboButtons
) 
 454 EVT_RADIOBOX  (ID_RADIOBOX
,             MyPanel::OnRadio
) 
 455 EVT_BUTTON    (ID_RADIOBOX_SEL_NUM
,     MyPanel::OnRadioButtons
) 
 456 EVT_BUTTON    (ID_RADIOBOX_SEL_STR
,     MyPanel::OnRadioButtons
) 
 457 EVT_BUTTON    (ID_RADIOBOX_FONT
,        MyPanel::OnRadioButtons
) 
 458 EVT_CHECKBOX  (ID_RADIOBOX_ENABLE
,      MyPanel::OnRadioButtons
) 
 459 EVT_RADIOBUTTON(ID_RADIOBUTTON_1
,       MyPanel::OnRadioButton1
) 
 460 EVT_RADIOBUTTON(ID_RADIOBUTTON_2
,       MyPanel::OnRadioButton2
) 
 461 EVT_BUTTON    (ID_SET_FONT
,             MyPanel::OnSetFont
) 
 462 EVT_SLIDER    (ID_SLIDER
,               MyPanel::OnSliderUpdate
) 
 464 EVT_SPIN      (ID_SPIN
,                 MyPanel::OnSpinUpdate
) 
 465 EVT_SPIN_UP   (ID_SPIN
,                 MyPanel::OnSpinUp
) 
 466 EVT_SPIN_DOWN (ID_SPIN
,                 MyPanel::OnSpinDown
) 
 467 EVT_UPDATE_UI (ID_BTNPROGRESS
,          MyPanel::OnUpdateShowProgress
) 
 468 EVT_BUTTON    (ID_BTNPROGRESS
,          MyPanel::OnShowProgress
) 
 469 #endif // wxUSE_SPINBTN 
 471 EVT_SPINCTRL  (ID_SPINCTRL
,             MyPanel::OnSpinCtrl
) 
 472 EVT_SPIN_UP   (ID_SPINCTRL
,             MyPanel::OnSpinCtrlUp
) 
 473 EVT_SPIN_DOWN (ID_SPINCTRL
,             MyPanel::OnSpinCtrlDown
) 
 474 EVT_TEXT      (ID_SPINCTRL
,             MyPanel::OnSpinCtrlText
) 
 475 #endif // wxUSE_SPINCTRL 
 477 EVT_TOGGLEBUTTON(ID_BUTTON_LABEL
,       MyPanel::OnUpdateLabel
) 
 479 EVT_CHECKBOX(ID_BUTTON_LABEL
,       MyPanel::OnUpdateLabel
) 
 480 #endif // wxUSE_TOGGLEBTN 
 481 EVT_CHECKBOX  (ID_CHANGE_COLOUR
,        MyPanel::OnChangeColour
) 
 482 EVT_BUTTON    (ID_BUTTON_TEST1
,         MyPanel::OnTestButton
) 
 483 EVT_BUTTON    (ID_BUTTON_TEST2
,         MyPanel::OnTestButton
) 
 484 EVT_BUTTON    (ID_BITMAP_BTN
,           MyPanel::OnBmpButton
) 
 486 EVT_CHECKBOX  (ID_SIZER_CHECK1
,         MyPanel::OnSizerCheck
) 
 487 EVT_CHECKBOX  (ID_SIZER_CHECK2
,         MyPanel::OnSizerCheck
) 
 488 EVT_CHECKBOX  (ID_SIZER_CHECK3
,         MyPanel::OnSizerCheck
) 
 489 EVT_CHECKBOX  (ID_SIZER_CHECK4
,         MyPanel::OnSizerCheck
) 
 490 EVT_CHECKBOX  (ID_SIZER_CHECK14
,        MyPanel::OnSizerCheck
) 
 491 EVT_CHECKBOX  (ID_SIZER_CHECKBIG
,       MyPanel::OnSizerCheck
) 
 495 BEGIN_EVENT_TABLE(MyButton
, wxButton
) 
 496     EVT_LEFT_DCLICK(MyButton::OnDClick
) 
 499 BEGIN_EVENT_TABLE(MyComboBox
, wxComboBox
) 
 500     EVT_CHAR(MyComboBox::OnChar
) 
 501     EVT_KEY_DOWN(MyComboBox::OnKeyDown
) 
 502     EVT_KEY_UP(MyComboBox::OnKeyUp
) 
 504     EVT_SET_FOCUS(MyComboBox::OnFocusGot
) 
 507 BEGIN_EVENT_TABLE(MyRadioBox
, wxRadioBox
) 
 508     EVT_SET_FOCUS(MyRadioBox::OnFocusGot
) 
 509     EVT_KILL_FOCUS(MyRadioBox::OnFocusLost
) 
 512 // ============================================================================ 
 514 // ============================================================================ 
 516 MyPanel::MyPanel( wxFrame 
*frame
, int x
, int y
, int w
, int h 
) 
 517        : wxPanel( frame
, wxID_ANY
, wxPoint(x
, y
), wxSize(w
, h
) ) 
 520     m_listboxSorted 
= NULL
; 
 523     m_choiceSorted 
= NULL
; 
 531     m_lbSelectNum 
= NULL
; 
 532     m_lbSelectThis 
= NULL
; 
 535     m_btnProgress 
= NULL
; 
 536 #endif // wxUSE_SPINBTN 
 539 #endif // wxUSE_SPINCTRL 
 546     m_text 
= new wxTextCtrl(this, wxID_ANY
, _T("This is the log window.\n"), 
 547                             wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE
); 
 548     m_text
->SetBackgroundColour(wxT("wheat")); 
 550     m_logTargetOld 
= wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
)); 
 552     m_notebook 
= new wxNotebook(this, ID_NOTEBOOK
); 
 567         Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
 
 570     // fill the image list 
 571     wxBitmap 
bmp(list_xpm
); 
 573     wxImageList 
*imagelist 
= new wxImageList(bmp
.GetWidth(), bmp
.GetHeight()); 
 575     imagelist
-> Add( bmp 
); 
 576     imagelist
-> Add( wxBitmap( choice_xpm 
)); 
 577     imagelist
-> Add( wxBitmap( combo_xpm 
)); 
 578     imagelist
-> Add( wxBitmap( text_xpm 
)); 
 579     imagelist
-> Add( wxBitmap( radio_xpm 
)); 
 580     imagelist
-> Add( wxBitmap( gauge_xpm 
)); 
 581     m_notebook
->SetImageList(imagelist
); 
 582 #elif defined(__WXMSW__) 
 583     // load images from resources 
 586         Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
 
 588     wxImageList 
*imagelist 
= new wxImageList(16, 16, false, Image_Max
); 
 590     static const wxChar 
*s_iconNames
[Image_Max
] = 
 592         _T("list"), _T("choice"), _T("combo"), _T("text"), _T("radio"), 
 596     for ( size_t n 
= 0; n 
< Image_Max
; n
++ ) 
 598         wxBitmap 
bmp(s_iconNames
[n
]); 
 599         if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) ) 
 601             wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."), 
 606     m_notebook
->SetImageList(imagelist
); 
 610 #define    Image_List -1 
 611 #define    Image_Choice -1 
 612 #define    Image_Combo -1 
 613 #define    Image_Text -1 
 614 #define    Image_Radio -1 
 615 #define    Image_Gauge -1 
 620     wxPanel 
*panel 
= new wxPanel(m_notebook
); 
 621     m_listbox 
= new wxListBox( panel
, ID_LISTBOX
, 
 622                                wxPoint(10,10), wxSize(120,70), 
 623                                5, choices
, wxLB_ALWAYS_SB 
); 
 624     m_listboxSorted 
= new wxListBox( panel
, ID_LISTBOX_SORTED
, 
 625                                      wxPoint(10,90), wxSize(120,70), 
 626                                      5, choices
, wxLB_SORT 
); 
 628     SetListboxClientData(wxT("listbox"), m_listbox
); 
 629     SetListboxClientData(wxT("listbox"), m_listboxSorted
); 
 631     m_listbox
->SetCursor(*wxCROSS_CURSOR
); 
 633     m_listbox
->SetToolTip( _T("This is a list box") ); 
 634 #endif // wxUSE_TOOLTIPS 
 636     m_lbSelectNum 
= new wxButton( panel
, ID_LISTBOX_SEL_NUM
, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 
 637     m_lbSelectThis 
= new wxButton( panel
, ID_LISTBOX_SEL_STR
, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); 
 638     (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); 
 639     (void)new MyButton( panel
, ID_LISTBOX_APPEND
, _T("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) ); 
 640     (void)new wxButton( panel
, ID_LISTBOX_DELETE
, _T("D&elete selected item"), wxPoint(180,130), wxSize(140,30) ); 
 641     wxButton 
*button 
= new MyButton( panel
, ID_LISTBOX_FONT
, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); 
 643     button
->SetDefault(); 
 645     button
->SetForegroundColour(*wxBLUE
); 
 648     button
->SetToolTip( _T("Press here to set italic font") ); 
 649 #endif // wxUSE_TOOLTIPS 
 651     m_checkbox 
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, _T("&Disable"), wxPoint(20,170) ); 
 652     m_checkbox
->SetValue(false); 
 654     m_checkbox
->SetToolTip( _T("Click here to disable the listbox") ); 
 655 #endif // wxUSE_TOOLTIPS 
 656     (void)new wxCheckBox( panel
, ID_CHANGE_COLOUR
, _T("&Toggle colour"), 
 658     panel
->SetCursor(wxCursor(wxCURSOR_HAND
)); 
 659     m_notebook
->AddPage(panel
, _T("wxListBox"), true, Image_List
); 
 662     panel 
= new wxPanel(m_notebook
); 
 663     m_choice 
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,wxDefaultCoord
), 5, choices 
); 
 664     m_choiceSorted 
= new wxChoice( panel
, ID_CHOICE_SORTED
, wxPoint(10,70), wxSize(120,wxDefaultCoord
), 
 665                                    5, choices
, wxCB_SORT 
); 
 667     SetChoiceClientData(wxT("choice"), m_choice
); 
 668     SetChoiceClientData(wxT("choice"), m_choiceSorted
); 
 670     m_choice
->SetSelection(2); 
 671     m_choice
->SetBackgroundColour( wxT("red") ); 
 672     (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 
 673     (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); 
 674     (void)new wxButton( panel
, ID_CHOICE_CLEAR
, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); 
 675     (void)new wxButton( panel
, ID_CHOICE_APPEND
, _T("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) ); 
 676     (void)new wxButton( panel
, ID_CHOICE_DELETE
, _T("D&elete selected item"), wxPoint(180,130), wxSize(140,30) ); 
 677     (void)new wxButton( panel
, ID_CHOICE_FONT
, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); 
 678     (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, _T("&Disable"), wxPoint(20,130), wxSize(140,30) ); 
 680     m_notebook
->AddPage(panel
, _T("wxChoice"), false, Image_Choice
); 
 681 #endif // wxUSE_CHOICE 
 683     panel 
= new wxPanel(m_notebook
); 
 684     (void)new wxStaticBox( panel
, wxID_ANY
, _T("&Box around combobox"), 
 685                            wxPoint(5, 5), wxSize(150, 100)); 
 686     m_combo 
= new MyComboBox( panel
, ID_COMBO
, _T("This"), 
 687                               wxPoint(20,25), wxSize(120, wxDefaultCoord
), 
 689                               wxCB_READONLY 
| wxPROCESS_ENTER
); 
 690     m_combo
->SetBackgroundColour(*wxBLUE
); 
 692     (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 
 693     (void)new wxButton( panel
, ID_COMBO_SEL_STR
, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); 
 694     (void)new wxButton( panel
, ID_COMBO_CLEAR
, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); 
 695     (void)new wxButton( panel
, ID_COMBO_APPEND
, _T("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) ); 
 696     (void)new wxButton( panel
, ID_COMBO_DELETE
, _T("D&elete selected item"), wxPoint(180,130), wxSize(140,30) ); 
 697     (void)new wxButton( panel
, ID_COMBO_FONT
, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); 
 698     (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, _T("&Disable"), wxPoint(20,130), wxSize(140,30) ); 
 699     m_notebook
->AddPage(panel
, _T("wxComboBox"), false, Image_Combo
); 
 701     wxString choices2
[] = 
 703         _T("First"), _T("Second"), 
 705         "Fourth", "Fifth", "Sixth", 
 706         "Seventh", "Eighth", "Nineth", "Tenth" */ 
 709     panel 
= new wxPanel(m_notebook
); 
 710     (void)new MyRadioBox( panel
, ID_RADIOBOX
, _T("&That"), wxPoint(10,160), wxDefaultSize
, WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS 
); 
 711     m_radio 
= new wxRadioBox( panel
, ID_RADIOBOX
, _T("T&his"), wxPoint(10,10), wxDefaultSize
, WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS 
); 
 712     m_radio
->SetForegroundColour(*wxRED
); 
 715     m_combo
->SetToolTip(_T("This is a natural\ncombobox - can you believe me?")); 
 716     m_radio
->SetToolTip(_T("Ever seen a radiobox?")); 
 717 #endif // wxUSE_TOOLTIPS 
 719     (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); 
 720     (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, _T("&Select 'This'"), wxPoint(180,80), wxSize(140,30) ); 
 721     m_fontButton 
= new wxButton( panel
, ID_SET_FONT
, _T("Set &more Italic font"), wxPoint(340,30), wxSize(140,30) ); 
 722     (void)new wxButton( panel
, ID_RADIOBOX_FONT
, _T("Set &Italic font"), wxPoint(340,80), wxSize(140,30) ); 
 723     (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, _T("&Disable"), wxPoint(340,130), wxDefaultSize 
); 
 724     wxRadioButton 
*rb 
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, _T("Radiobutton1"), wxPoint(210,170), wxDefaultSize
, wxRB_GROUP 
); 
 725     rb
->SetValue( false ); 
 726     (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, _T("&Radiobutton2"), wxPoint(340,170), wxDefaultSize 
); 
 727     m_notebook
->AddPage(panel
, _T("wxRadioBox"), false, Image_Radio
); 
 729     panel 
= new wxPanel(m_notebook
); 
 730     (void)new wxStaticBox( panel
, wxID_ANY
, _T("&wxGauge and wxSlider"), wxPoint(10,10), wxSize(222,130) ); 
 731     m_gauge 
= new wxGauge( panel
, wxID_ANY
, 200, wxPoint(18,50), wxSize(155, 30), wxGA_HORIZONTAL
|wxNO_BORDER 
); 
 732     m_gauge
->SetBackgroundColour(*wxGREEN
); 
 733     m_gauge
->SetForegroundColour(*wxRED
); 
 734     m_gaugeVert 
= new wxGauge( panel
, wxID_ANY
, 100, 
 735                                wxPoint(195,35), wxSize(30, 90), 
 736                                wxGA_VERTICAL 
| wxGA_SMOOTH 
| wxNO_BORDER 
); 
 737     m_slider 
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,wxDefaultCoord
), 
 738                              wxSL_AUTOTICKS 
| wxSL_LABELS 
); 
 739     m_slider
->SetTickFreq(40, 0); 
 741     m_slider
->SetToolTip(_T("This is a sliding slider")); 
 742 #endif // wxUSE_TOOLTIPS 
 744     (void)new wxStaticBox( panel
, wxID_ANY
, _T("&Explanation"), 
 745                            wxPoint(230,10), wxSize(270,130), 
 749     // No wrapping text in wxStaticText yet :-( 
 750     (void)new wxStaticText( panel
, wxID_ANY
, 
 751                             _T("Drag the slider!"), 
 753                             wxSize(240, wxDefaultCoord
) 
 756     (void)new wxStaticText( panel
, wxID_ANY
, 
 757                             _T("In order see the gauge (aka progress bar)\n") 
 758                             _T("control do something you have to drag the\n") 
 759                             _T("handle of the slider to the right.\n") 
 761                             _T("This is also supposed to demonstrate how\n") 
 762                             _T("to use static controls.\n"), 
 767     int initialSpinValue 
= -5; 
 769     s 
<< initialSpinValue
; 
 770     m_spintext 
= new wxTextCtrl( panel
, wxID_ANY
, s
, wxPoint(20,160), wxSize(80,wxDefaultCoord
) ); 
 772     m_spinbutton 
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,160), wxSize(80, wxDefaultCoord
) ); 
 773     m_spinbutton
->SetRange(-40,30); 
 774     m_spinbutton
->SetValue(initialSpinValue
); 
 776     m_btnProgress 
= new wxButton( panel
, ID_BTNPROGRESS
, _T("&Show progress dialog"), 
 778 #endif // wxUSE_SPINBTN 
 781     m_spinctrl 
= new wxSpinCtrl( panel
, ID_SPINCTRL
, _T(""), wxPoint(200, 160), wxSize(80, wxDefaultCoord
) ); 
 782     m_spinctrl
->SetRange(10,30); 
 783     m_spinctrl
->SetValue(15); 
 784 #endif // wxUSE_SPINCTRL 
 786     m_notebook
->AddPage(panel
, _T("wxGauge"), false, Image_Gauge
); 
 788     panel 
= new wxPanel(m_notebook
); 
 790 #if !defined(__WXMOTIF__) // wxStaticBitmap not working under Motif yet. 
 791     wxIcon icon 
= wxArtProvider::GetIcon(wxART_INFORMATION
); 
 792     (void) new wxStaticBitmap( panel
, wxID_ANY
, icon
, wxPoint(10, 10) ); 
 794     // VZ: don't leak memory 
 795     // bmpStatic = new wxStaticBitmap(panel, wxID_ANY, wxNullIcon, wxPoint(50, 10)); 
 796     // bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION)); 
 799     wxBitmap 
bitmap( 100, 100 ); 
 801     dc
.SelectObject( bitmap 
); 
 802     dc
.SetPen(*wxGREEN_PEN
); 
 804     dc
.DrawEllipse(5, 5, 90, 90); 
 805     dc
.DrawText(_T("Bitmap"), 30, 40); 
 806     dc
.SelectObject( wxNullBitmap 
); 
 808     (void)new wxBitmapButton(panel
, ID_BITMAP_BTN
, bitmap
, wxPoint(100, 20)); 
 810 #if defined(__WXMSW__) || defined(__WXMOTIF__) 
 811     // test for masked bitmap display 
 812     bitmap 
= wxBitmap(_T("test2.bmp"), wxBITMAP_TYPE_BMP
); 
 815        bitmap
.SetMask(new wxMask(bitmap
, *wxBLUE
)); 
 817        (void)new wxStaticBitmap 
/* wxBitmapButton */ (panel
, wxID_ANY
, bitmap
, wxPoint(300, 120)); 
 821     wxBitmap 
bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION
)), 
 822              bmp2(wxArtProvider::GetBitmap(wxART_WARNING
)), 
 823              bmp3(wxArtProvider::GetBitmap(wxART_QUESTION
)); 
 824     wxBitmapButton 
*bmpBtn 
= new wxBitmapButton
 
 831     bmpBtn
->SetBitmapSelected(bmp2
); 
 832     bmpBtn
->SetBitmapFocus(bmp3
); 
 835     (void)new wxToggleButton(panel
, ID_BUTTON_LABEL
, 
 836                              _T("&Toggle label"), wxPoint(250, 20)); 
 838     (void)new wxCheckBox(panel
, ID_BUTTON_LABEL
, 
 839                          _T("&Toggle label"), wxPoint(250, 20)); 
 840 #endif // wxUSE_TOGGLEBTN 
 842     m_label 
= new wxStaticText(panel
, wxID_ANY
, _T("Label with some long text"), 
 843                                wxPoint(250, 60), wxDefaultSize
, 
 844                                wxALIGN_RIGHT 
/*| wxST_NO_AUTORESIZE*/); 
 845     m_label
->SetForegroundColour( *wxBLUE 
); 
 847     m_notebook
->AddPage(panel
, _T("wxBitmapXXX")); 
 851     panel 
= new wxPanel(m_notebook
); 
 852     panel
->SetAutoLayout( true ); 
 854     wxBoxSizer 
*sizer 
= new wxBoxSizer( wxVERTICAL 
); 
 856     wxStaticBoxSizer 
*csizer 
= 
 857       new wxStaticBoxSizer (new wxStaticBox (panel
, wxID_ANY
, _T("Show Buttons")), wxHORIZONTAL 
); 
 859     wxCheckBox 
*check1
, *check2
, *check3
, *check4
, *check14
, *checkBig
; 
 860     check1 
= new wxCheckBox (panel
, ID_SIZER_CHECK1
, _T("1")); 
 861     check1
->SetValue (true); 
 862     csizer
->Add (check1
); 
 863     check2 
= new wxCheckBox (panel
, ID_SIZER_CHECK2
, _T("2")); 
 864     check2
->SetValue (true); 
 865     csizer
->Add (check2
); 
 866     check3 
= new wxCheckBox (panel
, ID_SIZER_CHECK3
, _T("3")); 
 867     check3
->SetValue (true); 
 868     csizer
->Add (check3
); 
 869     check4 
= new wxCheckBox (panel
, ID_SIZER_CHECK4
, _T("4")); 
 870     check4
->SetValue (true); 
 871     csizer
->Add (check4
); 
 872     check14 
= new wxCheckBox (panel
, ID_SIZER_CHECK14
, _T("1-4")); 
 873     check14
->SetValue (true); 
 874     csizer
->Add (check14
); 
 875     checkBig 
= new wxCheckBox (panel
, ID_SIZER_CHECKBIG
, _T("Big")); 
 876     checkBig
->SetValue (true); 
 877     csizer
->Add (checkBig
); 
 881     m_hsizer 
= new wxBoxSizer( wxHORIZONTAL 
); 
 883     m_buttonSizer 
= new wxBoxSizer (wxVERTICAL
); 
 885     m_sizerBtn1 
= new wxButton(panel
, wxID_ANY
, _T("Test Button &1 (tab order 1)") ); 
 886     m_buttonSizer
->Add( m_sizerBtn1
, 0, wxALL
, 10 ); 
 887     m_sizerBtn2 
= new wxButton(panel
, wxID_ANY
, _T("Test Button &2 (tab order 3)") ); 
 888     m_buttonSizer
->Add( m_sizerBtn2
, 0, wxALL
, 10 ); 
 889     m_sizerBtn3 
= new wxButton(panel
, wxID_ANY
, _T("Test Button &3 (tab order 2)") ); 
 890     m_buttonSizer
->Add( m_sizerBtn3
, 0, wxALL
, 10 ); 
 891     m_sizerBtn4 
= new wxButton(panel
, wxID_ANY
, _T("Test Button &4 (tab order 4)") ); 
 892     m_buttonSizer
->Add( m_sizerBtn4
, 0, wxALL
, 10 ); 
 894     m_sizerBtn3
->MoveBeforeInTabOrder(m_sizerBtn2
); 
 896     m_hsizer
->Add (m_buttonSizer
); 
 897     m_hsizer
->Add( 20,20, 1 ); 
 898     m_bigBtn 
= new wxButton(panel
, wxID_ANY
, _T("Multiline\nbutton") ); 
 899     m_hsizer
->Add( m_bigBtn 
, 3, wxGROW
|wxALL
, 10 ); 
 901     sizer
->Add (m_hsizer
, 1, wxGROW
); 
 903     panel
->SetSizer( sizer 
); 
 905     m_notebook
->AddPage(panel
, _T("wxSizer")); 
 908 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) ) 
 912     GetClientSize( &x
, &y 
); 
 914     if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 ); 
 915     if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 ); 
 918 void MyPanel::OnPageChanging( wxNotebookEvent 
&event 
) 
 920     int selOld 
= event
.GetOldSelection(); 
 923         if ( wxMessageBox(_T("This demonstrates how a program may prevent the\n") 
 924                           _T("page change from taking place - if you select\n") 
 925                           _T("[No] the current page will stay the third one\n"), 
 926                           _T("Control sample"), 
 927                           wxICON_QUESTION 
| wxYES_NO
, this) != wxYES 
) 
 935     *m_text 
<< _T("Notebook selection is being changed from ") << selOld
 
 936             << _T(" to ") << event
.GetSelection() 
 937             << _T(" (current page from notebook is ") 
 938             << m_notebook
->GetSelection() << _T(")\n"); 
 941 void MyPanel::OnPageChanged( wxNotebookEvent 
&event 
) 
 943     *m_text 
<< _T("Notebook selection is now ") << event
.GetSelection() 
 944             << _T(" (from notebook: ") << m_notebook
->GetSelection() 
 948 void MyPanel::OnTestButton(wxCommandEvent
& event
) 
 950     wxLogMessage(_T("Button %c clicked."), 
 951                  event
.GetId() == ID_BUTTON_TEST1 
? _T('1') : _T('2')); 
 954 void MyPanel::OnBmpButton(wxCommandEvent
& WXUNUSED(event
)) 
 956     wxLogMessage(_T("Bitmap button clicked.")); 
 959 void MyPanel::OnChangeColour(wxCommandEvent
& WXUNUSED(event
)) 
 961     static wxColour s_colOld
; 
 963     SetThemeEnabled(false); 
 964     // test panel colour changing and propagation to the subcontrols 
 967         SetBackgroundColour(s_colOld
); 
 968         s_colOld 
= wxNullColour
; 
 970         m_lbSelectThis
->SetForegroundColour(wxNullColour
); 
 971         m_lbSelectThis
->SetBackgroundColour(wxNullColour
); 
 975         s_colOld 
= wxColour(wxT("red")); 
 976         SetBackgroundColour(wxT("white")); 
 978         m_lbSelectThis
->SetForegroundColour(wxT("white")); 
 979         m_lbSelectThis
->SetBackgroundColour(wxT("red")); 
 982     m_lbSelectThis
->Refresh(); 
 986 void MyPanel::OnListBox( wxCommandEvent 
&event 
) 
 988 //    GetParent()->Move(100, 100); 
 990     if (event
.GetInt() == -1) 
 992         m_text
->AppendText( _T("ListBox has no selections anymore\n") ); 
 996     wxListBox 
*listbox 
= event
.GetId() == ID_LISTBOX 
? m_listbox
 
 999     m_text
->AppendText( _T("ListBox event selection string is: '") ); 
1000     m_text
->AppendText( event
.GetString() ); 
1001     m_text
->AppendText( _T("'\n") ); 
1002     m_text
->AppendText( _T("ListBox control selection string is: '") ); 
1003     m_text
->AppendText( listbox
->GetStringSelection() ); 
1004     m_text
->AppendText( _T("'\n") ); 
1006     wxStringClientData 
*obj 
= ((wxStringClientData 
*)event
.GetClientObject()); 
1007     m_text
->AppendText( _T("ListBox event client data string is: '") ); 
1008     if (obj
) // BC++ doesn't like use of '? .. : .. ' in this context 
1009         m_text
->AppendText( obj
->GetData() ); 
1011         m_text
->AppendText( wxString(_T("none")) ); 
1013     m_text
->AppendText( _T("'\n") ); 
1014     m_text
->AppendText( _T("ListBox control client data string is: '") ); 
1015     obj 
= (wxStringClientData 
*)listbox
->GetClientObject(listbox
->GetSelection()); 
1017         m_text
->AppendText( obj
->GetData() ); 
1019         m_text
->AppendText( wxString(_T("none")) ); 
1020     m_text
->AppendText( _T("'\n") ); 
1023 void MyPanel::OnListBoxDoubleClick( wxCommandEvent 
&event 
) 
1025     m_text
->AppendText( _T("ListBox double click string is: ") ); 
1026     m_text
->AppendText( event
.GetString() ); 
1027     m_text
->AppendText( _T("\n") ); 
1030 void MyPanel::OnListBoxButtons( wxCommandEvent 
&event 
) 
1032     switch (event
.GetId()) 
1034         case ID_LISTBOX_ENABLE
: 
1036                 m_text
->AppendText(_T("Checkbox clicked.\n")); 
1038                 wxCheckBox 
*cb 
= (wxCheckBox
*)event
.GetEventObject(); 
1040                     cb
->SetToolTip( _T("Click to enable listbox") ); 
1042                     cb
->SetToolTip( _T("Click to disable listbox") ); 
1043 #endif // wxUSE_TOOLTIPS 
1044                 m_listbox
->Enable( event
.GetInt() == 0 ); 
1045                 m_lbSelectThis
->Enable( event
.GetInt() == 0 ); 
1046                 m_lbSelectNum
->Enable( event
.GetInt() == 0 ); 
1047                 m_listboxSorted
->Enable( event
.GetInt() == 0 ); 
1048                 FindWindow(ID_CHANGE_COLOUR
)->Enable( event
.GetInt() == 0 ); 
1051         case ID_LISTBOX_SEL_NUM
: 
1053                 if (m_listbox
->GetCount() > 2) 
1054                     m_listbox
->SetSelection( 2 ); 
1055                 if (m_listboxSorted
->GetCount() > 2) 
1056                     m_listboxSorted
->SetSelection( 2 ); 
1057                 m_lbSelectThis
->WarpPointer( 40, 14 ); 
1060         case ID_LISTBOX_SEL_STR
: 
1062                 if (m_listbox
->FindString(_T("This")) != wxNOT_FOUND
) 
1063                     m_listbox
->SetStringSelection( _T("This") ); 
1064                 if (m_listboxSorted
->FindString(_T("This")) != wxNOT_FOUND
) 
1065                     m_listboxSorted
->SetStringSelection( _T("This") ); 
1066                 m_lbSelectNum
->WarpPointer( 40, 14 ); 
1069         case ID_LISTBOX_CLEAR
: 
1072                 m_listboxSorted
->Clear(); 
1075         case ID_LISTBOX_APPEND
: 
1077                 m_listbox
->Append( _T("Hi!") ); 
1078                 m_listboxSorted
->Append( _T("Hi!") ); 
1081         case ID_LISTBOX_DELETE
: 
1084                 idx 
= m_listbox
->GetSelection(); 
1085                 if ( idx 
!= wxNOT_FOUND 
) 
1086                     m_listbox
->Delete( idx 
); 
1087                 idx 
= m_listboxSorted
->GetSelection(); 
1088                 if ( idx 
!= wxNOT_FOUND 
) 
1089                     m_listboxSorted
->Delete( idx 
); 
1092         case ID_LISTBOX_FONT
: 
1094                 m_listbox
->SetFont( *wxITALIC_FONT 
); 
1095                 m_listboxSorted
->SetFont( *wxITALIC_FONT 
); 
1096                 m_checkbox
->SetFont( *wxITALIC_FONT 
); 
1103 void MyPanel::OnChoice( wxCommandEvent 
&event 
) 
1105     wxChoice 
*choice 
= event
.GetId() == ID_CHOICE 
? m_choice
 
1108     m_text
->AppendText( _T("Choice event selection string is: '") ); 
1109     m_text
->AppendText( event
.GetString() ); 
1110     m_text
->AppendText( _T("'\n") ); 
1111     m_text
->AppendText( _T("Choice control selection string is: '") ); 
1112     m_text
->AppendText( choice
->GetStringSelection() ); 
1113     m_text
->AppendText( _T("'\n") ); 
1115     wxStringClientData 
*obj 
= ((wxStringClientData 
*)event
.GetClientObject()); 
1116     m_text
->AppendText( _T("Choice event client data string is: '") ); 
1119        m_text
->AppendText( obj
->GetData() ); 
1121        m_text
->AppendText( wxString(_T("none")) ); 
1123     m_text
->AppendText( _T("'\n") ); 
1124     m_text
->AppendText( _T("Choice control client data string is: '") ); 
1125     obj 
= (wxStringClientData 
*)choice
->GetClientObject(choice
->GetSelection()); 
1128        m_text
->AppendText( obj
->GetData() ); 
1130        m_text
->AppendText( wxString(_T("none")) ); 
1131     m_text
->AppendText( _T("'\n") ); 
1134 void MyPanel::OnChoiceButtons( wxCommandEvent 
&event 
) 
1136     switch (event
.GetId()) 
1138         case ID_CHOICE_ENABLE
: 
1140                 m_choice
->Enable( event
.GetInt() == 0 ); 
1141                 m_choiceSorted
->Enable( event
.GetInt() == 0 ); 
1144         case ID_CHOICE_SEL_NUM
: 
1146                 m_choice
->SetSelection( 2 ); 
1147                 m_choiceSorted
->SetSelection( 2 ); 
1150         case ID_CHOICE_SEL_STR
: 
1152                 m_choice
->SetStringSelection( _T("This") ); 
1153                 m_choiceSorted
->SetStringSelection( _T("This") ); 
1156         case ID_CHOICE_CLEAR
: 
1159                 m_choiceSorted
->Clear(); 
1162         case ID_CHOICE_APPEND
: 
1164                 m_choice
->Append( _T("Hi!") ); 
1165                 m_choiceSorted
->Append( _T("Hi!") ); 
1168         case ID_CHOICE_DELETE
: 
1170                 int idx 
= m_choice
->GetSelection(); 
1171                 if ( idx 
!= wxNOT_FOUND 
) 
1172                     m_choice
->Delete( idx 
); 
1173                 idx 
= m_choiceSorted
->GetSelection(); 
1174                 if ( idx 
!= wxNOT_FOUND 
) 
1175                     m_choiceSorted
->Delete( idx 
); 
1178         case ID_CHOICE_FONT
: 
1180                 m_choice
->SetFont( *wxITALIC_FONT 
); 
1181                 m_choiceSorted
->SetFont( *wxITALIC_FONT 
); 
1186 #endif // wxUSE_CHOICE 
1188 void MyPanel::OnCombo( wxCommandEvent 
&event 
) 
1190     m_text
->AppendText( _T("ComboBox event selection string is: ") ); 
1191     m_text
->AppendText( event
.GetString() ); 
1192     m_text
->AppendText( _T("\n") ); 
1193     m_text
->AppendText( _T("ComboBox control selection string is: ") ); 
1194     m_text
->AppendText( m_combo
->GetStringSelection() ); 
1195     m_text
->AppendText( _T("\n") ); 
1198 void MyPanel::OnComboTextChanged(wxCommandEvent
& event
) 
1201     str
.Printf( wxT("Text in the combobox changed: now is '%s'."), 
1202                 event
.GetString().c_str() ); 
1203     wxLogMessage( str
.c_str() ); 
1206 void MyPanel::OnComboTextEnter(wxCommandEvent
& WXUNUSED(event
)) 
1208     wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."), 
1209                  m_combo
->GetValue().c_str()); 
1212 void MyPanel::OnComboButtons( wxCommandEvent 
&event 
) 
1214     switch (event
.GetId()) 
1216         case ID_COMBO_ENABLE
: 
1218                 m_combo
->Enable( event
.GetInt() == 0 ); 
1221         case ID_COMBO_SEL_NUM
: 
1223                 m_combo
->SetSelection( 2 ); 
1226         case ID_COMBO_SEL_STR
: 
1228                 m_combo
->SetStringSelection( _T("This") ); 
1231         case ID_COMBO_CLEAR
: 
1236         case ID_COMBO_APPEND
: 
1238                 m_combo
->Append( _T("Hi!") ); 
1241         case ID_COMBO_DELETE
: 
1243                 int idx 
= m_combo
->GetSelection(); 
1244                 m_combo
->Delete( idx 
); 
1249                 m_combo
->SetFont( *wxITALIC_FONT 
); 
1255 void MyPanel::OnRadio( wxCommandEvent 
&event 
) 
1257     m_text
->AppendText( _T("RadioBox selection string is: ") ); 
1258     m_text
->AppendText( event
.GetString() ); 
1259     m_text
->AppendText( _T("\n") ); 
1262 void MyPanel::OnRadioButton1( wxCommandEvent 
& WXUNUSED(event
) ) 
1264     wxMessageBox(_T("First wxRadioButton selected."), _T("wxControl sample")); 
1267 void MyPanel::OnRadioButton2( wxCommandEvent 
& WXUNUSED(event
) ) 
1269     m_text
->AppendText(_T("Second wxRadioButton selected.\n")); 
1272 void MyPanel::OnRadioButtons( wxCommandEvent 
&event 
) 
1274     switch (event
.GetId()) 
1276         case ID_RADIOBOX_ENABLE
: 
1278                 m_radio
->Enable( event
.GetInt() == 0 ); 
1281         case ID_RADIOBOX_SEL_NUM
: 
1283                 m_radio
->SetSelection( 2 ); 
1286         case ID_RADIOBOX_SEL_STR
: 
1288                 m_radio
->SetStringSelection( _T("This") ); 
1291         case ID_RADIOBOX_FONT
: 
1293                     m_radio
->SetForegroundColour(*wxGREEN
); 
1295                 m_radio
->SetFont( *wxITALIC_FONT 
); 
1301 void MyPanel::OnSetFont( wxCommandEvent 
&WXUNUSED(event
) ) 
1303     m_fontButton
->SetFont( *wxITALIC_FONT 
); 
1304     m_text
->SetFont( *wxITALIC_FONT 
); 
1307 void MyPanel::OnUpdateLabel( wxCommandEvent 
&event 
) 
1309     m_label
->SetLabel(event
.GetInt() ? _T("Very very very very very long text.") 
1310                                      : _T("Shorter text.")); 
1313 void MyPanel::OnSliderUpdate( wxCommandEvent 
&WXUNUSED(event
) ) 
1315     m_gauge
->SetValue( m_slider
->GetValue() ); 
1316     m_gaugeVert
->SetValue( m_slider
->GetValue() / 2 ); 
1321 void MyPanel::OnSpinCtrlText(wxCommandEvent
& event
) 
1326         s
.Printf( _T("Spin ctrl text changed: now %d (from event: %s)\n"), 
1327                  m_spinctrl
->GetValue(), event
.GetString().c_str() ); 
1328         m_text
->AppendText(s
); 
1332 void MyPanel::OnSpinCtrl(wxSpinEvent
& event
) 
1337         s
.Printf( _T("Spin ctrl changed: now %d (from event: %ld)\n"), 
1338                  m_spinctrl
->GetValue(), event
.GetInt() ); 
1339         m_text
->AppendText(s
); 
1343 void MyPanel::OnSpinCtrlUp(wxSpinEvent
& event
) 
1347         m_text
->AppendText( wxString::Format( 
1348             _T("Spin up: %d (from event: %ld)\n"), 
1349             m_spinctrl
->GetValue(), event
.GetInt() ) ); 
1353 void MyPanel::OnSpinCtrlDown(wxSpinEvent
& event
) 
1357         m_text
->AppendText( wxString::Format( 
1358             _T("Spin down: %d (from event: %ld)\n"), 
1359             m_spinctrl
->GetValue(), event
.GetInt() ) ); 
1363 #endif // wxUSE_SPINCTRL 
1366 void MyPanel::OnSpinUp( wxSpinEvent 
&event 
) 
1369     value
.Printf( _T("Spin control up: current = %d\n"), 
1370                  m_spinbutton
->GetValue()); 
1372     if ( event
.GetPosition() > 17 ) 
1374         value 
+= _T("Preventing the spin button from going above 17.\n"); 
1379     m_text
->AppendText(value
); 
1382 void MyPanel::OnSpinDown( wxSpinEvent 
&event 
) 
1385     value
.Printf( _T("Spin control down: current = %d\n"), 
1386                  m_spinbutton
->GetValue()); 
1388     if ( event
.GetPosition() < -17 ) 
1390         value 
+= _T("Preventing the spin button from going below -17.\n"); 
1395     m_text
->AppendText(value
); 
1398 void MyPanel::OnSpinUpdate( wxSpinEvent 
&event 
) 
1401     value
.Printf( _T("%d"), event
.GetPosition() ); 
1402     m_spintext
->SetValue( value 
); 
1404     value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"), 
1405                  m_spinbutton
->GetMin(), m_spinbutton
->GetMax(), 
1406                  m_spinbutton
->GetValue()); 
1408     m_text
->AppendText(value
); 
1411 void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent
& event 
) 
1413     event
.Enable( m_spinbutton
->GetValue() > 0 ); 
1416 void MyPanel::OnShowProgress( wxCommandEvent
& WXUNUSED(event
) ) 
1418     int max 
= m_spinbutton
->GetValue(); 
1422         wxLogError(_T("You must set positive range!")); 
1426     wxProgressDialog 
dialog(_T("Progress dialog example"), 
1427                             _T("An informative message"), 
1434                             wxPD_ESTIMATED_TIME 
| 
1435                             wxPD_REMAINING_TIME
); 
1439     for ( int i 
= 0; i 
<= max 
&& cont
; i
++ ) 
1444             cont 
= dialog
.Update(i
, _T("That's all, folks!")); 
1446         else if ( i 
== max 
/ 2 ) 
1448             cont 
= dialog
.Update(i
, _T("Only a half left (very long message)!")); 
1452             cont 
= dialog
.Update(i
); 
1458         *m_text 
<< _T("Progress dialog aborted!\n"); 
1462         *m_text 
<< _T("Countdown from ") << max 
<< _T(" finished.\n"); 
1466 #endif // wxUSE_SPINBTN 
1468 void MyPanel::OnSizerCheck( wxCommandEvent 
&event
) 
1470   switch (event
.GetId ()) { 
1471   case ID_SIZER_CHECK1
: 
1472     m_buttonSizer
->Show (m_sizerBtn1
, event
.IsChecked ()); 
1473     m_buttonSizer
->Layout (); 
1475   case ID_SIZER_CHECK2
: 
1476     m_buttonSizer
->Show (m_sizerBtn2
, event
.IsChecked ()); 
1477     m_buttonSizer
->Layout (); 
1479   case ID_SIZER_CHECK3
: 
1480     m_buttonSizer
->Show (m_sizerBtn3
, event
.IsChecked ()); 
1481     m_buttonSizer
->Layout (); 
1483   case ID_SIZER_CHECK4
: 
1484     m_buttonSizer
->Show (m_sizerBtn4
, event
.IsChecked ()); 
1485     m_buttonSizer
->Layout (); 
1487   case ID_SIZER_CHECK14
: 
1488     m_hsizer
->Show (m_buttonSizer
, event
.IsChecked ()); 
1489     m_hsizer
->Layout (); 
1491   case ID_SIZER_CHECKBIG
: 
1492     m_hsizer
->Show (m_bigBtn
, event
.IsChecked ()); 
1493     m_hsizer
->Layout (); 
1501     //wxLog::RemoveTraceMask(_T("focus")); 
1502     delete wxLog::SetActiveTarget(m_logTargetOld
); 
1504     delete m_notebook
->GetImageList(); 
1507 //---------------------------------------------------------------------- 
1509 //---------------------------------------------------------------------- 
1511 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
) 
1512     EVT_MENU(CONTROLS_QUIT
,   MyFrame::OnQuit
) 
1513     EVT_MENU(CONTROLS_ABOUT
,  MyFrame::OnAbout
) 
1514     EVT_MENU(CONTROLS_CLEAR_LOG
,  MyFrame::OnClearLog
) 
1516     EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY
,  MyFrame::OnSetTooltipDelay
) 
1517     EVT_MENU(CONTROLS_ENABLE_TOOLTIPS
,  MyFrame::OnToggleTooltips
) 
1518 #endif // wxUSE_TOOLTIPS 
1520     EVT_MENU(CONTROLS_ENABLE_ALL
, MyFrame::OnEnableAll
) 
1522     EVT_SIZE(MyFrame::OnSize
) 
1523     EVT_MOVE(MyFrame::OnMove
) 
1525     EVT_IDLE(MyFrame::OnIdle
) 
1528 MyFrame::MyFrame(const wxChar 
*title
, int x
, int y
) 
1529        : wxFrame(NULL
, wxID_ANY
, title
, wxPoint(x
, y
), wxSize(500, 430)) 
1532     // The wxICON() macros loads an icon from a resource under Windows 
1533     // and uses an #included XPM image under GTK+ and Motif 
1536     SetIcon( wxICON(mondrian
) ); 
1539     wxMenu 
*file_menu 
= new wxMenu
; 
1541     file_menu
->Append(CONTROLS_CLEAR_LOG
, _T("&Clear log\tCtrl-L")); 
1542     file_menu
->AppendSeparator(); 
1543     file_menu
->Append(CONTROLS_ABOUT
, _T("&About\tF1")); 
1544     file_menu
->AppendSeparator(); 
1545     file_menu
->Append(CONTROLS_QUIT
, _T("E&xit\tAlt-X"), _T("Quit controls sample")); 
1547     wxMenuBar 
*menu_bar 
= new wxMenuBar
; 
1548     menu_bar
->Append(file_menu
, _T("&File")); 
1551     wxMenu 
*tooltip_menu 
= new wxMenu
; 
1552     tooltip_menu
->Append(CONTROLS_SET_TOOLTIP_DELAY
, _T("Set &delay\tCtrl-D")); 
1553     tooltip_menu
->AppendSeparator(); 
1554     tooltip_menu
->Append(CONTROLS_ENABLE_TOOLTIPS
, _T("&Toggle tooltips\tCtrl-T"), 
1555             _T("enable/disable tooltips"), true); 
1556     tooltip_menu
->Check(CONTROLS_ENABLE_TOOLTIPS
, true); 
1557     menu_bar
->Append(tooltip_menu
, _T("&Tooltips")); 
1558 #endif // wxUSE_TOOLTIPS 
1560     wxMenu 
*panel_menu 
= new wxMenu
; 
1561     panel_menu
->Append(CONTROLS_ENABLE_ALL
, _T("&Disable all\tCtrl-E"), 
1562                        _T("Enable/disable all panel controls"), true); 
1563     menu_bar
->Append(panel_menu
, _T("&Panel")); 
1565     SetMenuBar(menu_bar
); 
1569 #endif // wxUSE_STATUSBAR 
1571     m_panel 
= new MyPanel( this, 10, 10, 300, 100 ); 
1573     SetSizeHints( 500, 425 ); 
1576 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) ) 
1581 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) ) 
1585     wxMessageDialog 
dialog(this, _T("This is a control sample"), _T("About Controls"), wxOK 
); 
1589 void MyFrame::OnClearLog(wxCommandEvent
& WXUNUSED(event
)) 
1591     m_panel
->m_text
->Clear(); 
1595 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& WXUNUSED(event
)) 
1597     static long s_delay 
= 5000; 
1600     delay
.Printf( _T("%ld"), s_delay
); 
1602     delay 
= wxGetTextFromUser(_T("Enter delay (in milliseconds)"), 
1603             _T("Set tooltip delay"), 
1607         return; // cancelled 
1609     wxSscanf(delay
, _T("%ld"), &s_delay
); 
1611     wxToolTip::SetDelay(s_delay
); 
1613     wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
); 
1616 void MyFrame::OnToggleTooltips(wxCommandEvent
& WXUNUSED(event
)) 
1618     static bool s_enabled 
= true; 
1620     s_enabled 
= !s_enabled
; 
1622     wxToolTip::Enable(s_enabled
); 
1624     wxLogStatus(this, _T("Tooltips %sabled"), s_enabled 
? _T("en") : _T("dis") ); 
1628 void MyFrame::OnEnableAll(wxCommandEvent
& WXUNUSED(event
)) 
1630     static bool s_enable 
= true; 
1632     s_enable 
= !s_enable
; 
1633     m_panel
->Enable(s_enable
); 
1636 void MyFrame::OnMove( wxMoveEvent
& event 
) 
1639     UpdateStatusBar(event
.GetPosition(), GetSize()); 
1640 #endif // wxUSE_STATUSBAR 
1645 void MyFrame::OnSize( wxSizeEvent
& event 
) 
1648     UpdateStatusBar(GetPosition(), event
.GetSize()); 
1649 #endif // wxUSE_STATUSBAR 
1654 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) ) 
1656     // track the window which has the focus in the status bar 
1657     static wxWindow 
*s_windowFocus 
= (wxWindow 
*)NULL
; 
1658     wxWindow 
*focus 
= wxWindow::FindFocus(); 
1659     if ( focus 
&& (focus 
!= s_windowFocus
) ) 
1661         s_windowFocus 
= focus
; 
1666                 _T("Focus: %s, HWND = %08x"), 
1670                 s_windowFocus
->GetClassInfo()->GetClassName() 
1672                 , (unsigned int) s_windowFocus
->GetHWND() 
1678 #endif // wxUSE_STATUSBAR 
1682 void MyComboBox::OnChar(wxKeyEvent
& event
) 
1684     wxLogMessage(_T("MyComboBox::OnChar")); 
1686     if ( event
.GetKeyCode() == 'w' ) 
1687         wxLogMessage(_T("MyComboBox: 'w' will be ignored.")); 
1692 void MyComboBox::OnKeyDown(wxKeyEvent
& event
) 
1694     wxLogMessage(_T("MyComboBox::OnKeyDown")); 
1696     if ( event
.GetKeyCode() == 'w' ) 
1697         wxLogMessage(_T("MyComboBox: 'w' will be ignored.")); 
1702 void MyComboBox::OnKeyUp(wxKeyEvent
& event
) 
1704     wxLogMessage(_T("MyComboBox::OnKeyUp")); 
1709 static void SetListboxClientData(const wxChar 
*name
, wxListBox 
*control
) 
1711     size_t count 
= control
->GetCount(); 
1712     for ( size_t n 
= 0; n 
< count
; n
++ ) 
1715         s
.Printf(wxT("%s client data for '%s'"), 
1716                  name
, control
->GetString(n
).c_str()); 
1718         control
->SetClientObject(n
, new wxStringClientData(s
)); 
1724 static void SetChoiceClientData(const wxChar 
*name
, wxChoice 
*control
) 
1726     size_t count 
= control
->GetCount(); 
1727     for ( size_t n 
= 0; n 
< count
; n
++ ) 
1730         s
.Printf(wxT("%s client data for '%s'"), 
1731                  name
, control
->GetString(n
).c_str()); 
1733         control
->SetClientObject(n
, new wxStringClientData(s
)); 
1737 #endif // wxUSE_CHOICE