+BEGIN_EVENT_TABLE(MyButton, wxButton)
+ EVT_LEFT_DCLICK(MyButton::OnDClick)
+END_EVENT_TABLE()
+
+BEGIN_EVENT_TABLE(MyComboBox, wxComboBox)
+ EVT_CHAR(MyComboBox::OnChar)
+ EVT_KEY_DOWN(MyComboBox::OnKeyDown)
+ EVT_KEY_UP(MyComboBox::OnKeyUp)
+
+ EVT_SET_FOCUS(MyComboBox::OnFocusGot)
+END_EVENT_TABLE()
+
+BEGIN_EVENT_TABLE(MyRadioBox, wxRadioBox)
+ EVT_SET_FOCUS(MyRadioBox::OnFocusGot)
+ EVT_KILL_FOCUS(MyRadioBox::OnFocusLost)
+END_EVENT_TABLE()
+
+BEGIN_EVENT_TABLE(MyChoice, wxChoice)
+ EVT_SET_FOCUS(MyChoice::OnFocusGot)
+ EVT_KILL_FOCUS(MyChoice::OnFocusLost)
+END_EVENT_TABLE()
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
+ : wxPanel( frame, wxID_ANY, wxPoint(x, y), wxSize(w, h) )
+{
+ m_listbox = NULL;
+ m_listboxSorted = NULL;
+#if wxUSE_CHOICE
+ m_choice = NULL;
+ m_choiceSorted = NULL;
+#endif // wxUSE_CHOICE
+ m_combo = NULL;
+ m_radio = NULL;
+#if wxUSE_GAUGE
+ m_gauge = NULL;
+ m_gaugeVert = NULL;
+#endif // wxUSE_GAUGE
+#if wxUSE_SLIDER
+ m_slider = NULL;
+#endif // wxUSE_SLIDER
+ m_fontButton = NULL;
+ m_lbSelectNum = NULL;
+ m_lbSelectThis = NULL;
+#if wxUSE_SPINBTN
+ m_spinbutton = NULL;
+#if wxUSE_PROGRESSDLG
+ m_btnProgress = NULL;
+#endif // wxUSE_PROGRESSDLG
+#endif // wxUSE_SPINBTN
+#if wxUSE_SPINCTRL
+ m_spinctrl = NULL;
+#endif // wxUSE_SPINCTRL
+ m_spintext = NULL;
+ m_checkbox = NULL;
+ m_text = NULL;
+ m_book = NULL;
+ m_label = NULL;
+
+ m_text = new wxTextCtrl(this, wxID_ANY, wxT("This is the log window.\n"),
+ wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE);
+
+ m_logTargetOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_text));
+
+ m_book = new wxBookCtrl(this, ID_BOOK);
+
+ wxString choices[] =
+ {
+ wxT("This"),
+ wxT("is"),
+ wxT("one of my long and"),
+ wxT("wonderful"),
+ wxT("examples.")
+ };
+
+#ifdef USE_XPM
+ // image ids
+ enum
+ {
+ Image_List,
+ Image_Choice,
+ Image_Combo,
+ Image_Text,
+ Image_Radio,
+#if wxUSE_GAUGE
+ Image_Gauge,
+#endif // wxUSE_GAUGE
+ Image_Max
+ };
+
+ // fill the image list
+ wxBitmap bmp(list_xpm);
+
+ wxImageList *imagelist = new wxImageList(bmp.GetWidth(), bmp.GetHeight());
+
+ imagelist-> Add( bmp );
+ imagelist-> Add( wxBitmap( choice_xpm ));
+ imagelist-> Add( wxBitmap( combo_xpm ));
+ imagelist-> Add( wxBitmap( text_xpm ));
+ imagelist-> Add( wxBitmap( radio_xpm ));
+#if wxUSE_GAUGE
+ imagelist-> Add( wxBitmap( gauge_xpm ));
+#endif // wxUSE_GAUGE
+ m_book->SetImageList(imagelist);
+#elif defined(__WXMSW__)
+ // load images from resources
+ enum
+ {
+ Image_List,
+ Image_Choice,
+ Image_Combo,
+ Image_Text,
+ Image_Radio,
+#if wxUSE_GAUGE
+ Image_Gauge,
+#endif // wxUSE_GAUGE
+ Image_Max
+ };
+ wxImageList *imagelist = new wxImageList(16, 16, false, Image_Max);
+
+ static const wxChar *s_iconNames[Image_Max] =
+ {
+ wxT("list")
+ , wxT("choice")
+ , wxT("combo")
+ , wxT("text")
+ , wxT("radio")
+#if wxUSE_GAUGE
+ , wxT("gauge")
+#endif // wxUSE_GAUGE
+ };
+
+ for ( size_t n = 0; n < Image_Max; n++ )
+ {
+ wxBitmap bmp(s_iconNames[n]);
+ if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) )
+ {
+ wxLogWarning(wxT("Couldn't load the image '%s' for the book control page %d."),
+ s_iconNames[n], n);
+ }
+ }
+
+ m_book->SetImageList(imagelist);
+#else
+
+ // No images for now
+#define Image_List -1
+#define Image_Choice -1
+#define Image_Combo -1
+#define Image_Text -1
+#define Image_Radio -1
+#if wxUSE_GAUGE
+#define Image_Gauge -1
+#endif // wxUSE_GAUGE
+#define Image_Max -1
+
+#endif
+
+ wxPanel *panel = new wxPanel(m_book);
+ m_listbox = new wxListBox( panel, ID_LISTBOX,
+ wxPoint(10,10), wxSize(120,70),
+ 5, choices, wxLB_MULTIPLE | wxLB_ALWAYS_SB | wxHSCROLL );
+ m_listboxSorted = new wxListBox( panel, ID_LISTBOX_SORTED,
+ wxPoint(10,90), wxSize(120,70),
+ 3, choices, wxLB_SORT );
+
+ SetListboxClientData(wxT("listbox"), m_listbox);
+ SetListboxClientData(wxT("listbox"), m_listboxSorted);
+
+ m_listbox->SetCursor(*wxCROSS_CURSOR);
+
+ m_lbSelectNum = new wxButton( panel, ID_LISTBOX_SEL_NUM, wxT("Select #&2"), wxPoint(180,30), wxSize(140,30) );
+ m_lbSelectThis = new wxButton( panel, ID_LISTBOX_SEL_STR, wxT("&Select 'This'"), wxPoint(340,30), wxSize(140,30) );
+ (void)new wxButton( panel, ID_LISTBOX_CLEAR, wxT("&Clear"), wxPoint(180,80), wxSize(140,30) );
+ (void)new MyButton( panel, ID_LISTBOX_APPEND, wxT("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) );
+ (void)new wxButton( panel, ID_LISTBOX_DELETE, wxT("D&elete selected item"), wxPoint(180,130), wxSize(140,30) );
+ wxButton *button = new MyButton( panel, ID_LISTBOX_FONT, wxT("Set &Italic font"), wxPoint(340,130), wxSize(140,30) );
+
+ button->SetDefault();
+
+ m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, wxT("&Disable"), wxPoint(20,170) );
+ m_checkbox->SetValue(false);
+ button->MoveAfterInTabOrder(m_checkbox);
+ (void)new wxCheckBox( panel, ID_CHANGE_COLOUR, wxT("&Toggle colour"),
+ wxPoint(110,170) );
+ panel->SetCursor(wxCursor(wxCURSOR_HAND));
+ m_book->AddPage(panel, wxT("wxListBox"), true, Image_List);
+
+#if wxUSE_CHOICE
+ panel = new wxPanel(m_book);
+ m_choice = new MyChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,wxDefaultCoord), 5, choices );
+ m_choiceSorted = new MyChoice( panel, ID_CHOICE_SORTED, wxPoint(10,70), wxSize(120,wxDefaultCoord),
+ 5, choices, wxCB_SORT );
+
+ SetChoiceClientData(wxT("choice"), m_choice);
+ SetChoiceClientData(wxT("choice"), m_choiceSorted);
+
+ m_choice->SetSelection(2);
+ (void)new wxButton( panel, ID_CHOICE_SEL_NUM, wxT("Select #&2"), wxPoint(180,30), wxSize(140,30) );
+ (void)new wxButton( panel, ID_CHOICE_SEL_STR, wxT("&Select 'This'"), wxPoint(340,30), wxSize(140,30) );
+ (void)new wxButton( panel, ID_CHOICE_CLEAR, wxT("&Clear"), wxPoint(180,80), wxSize(140,30) );
+ (void)new wxButton( panel, ID_CHOICE_APPEND, wxT("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) );
+ (void)new wxButton( panel, ID_CHOICE_DELETE, wxT("D&elete selected item"), wxPoint(180,130), wxSize(140,30) );
+ (void)new wxButton( panel, ID_CHOICE_FONT, wxT("Set &Italic font"), wxPoint(340,130), wxSize(140,30) );
+ (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, wxT("&Disable"), wxPoint(20,130), wxSize(140,30) );
+
+ m_book->AddPage(panel, wxT("wxChoice"), false, Image_Choice);
+#endif // wxUSE_CHOICE
+
+ panel = new wxPanel(m_book);
+ (void)new wxStaticBox( panel, wxID_ANY, wxT("&Box around combobox"),
+ wxPoint(5, 5), wxSize(150, 100));
+ m_combo = new MyComboBox( panel, ID_COMBO, wxT("This"),
+ wxPoint(20,25), wxSize(120, wxDefaultCoord),
+ 5, choices,
+ wxTE_PROCESS_ENTER);
+
+ (void)new wxButton( panel, ID_COMBO_SEL_NUM, wxT("Select #&2"), wxPoint(180,30), wxSize(140,30) );
+ (void)new wxButton( panel, ID_COMBO_SEL_STR, wxT("&Select 'This'"), wxPoint(340,30), wxSize(140,30) );
+ (void)new wxButton( panel, ID_COMBO_CLEAR, wxT("&Clear"), wxPoint(180,80), wxSize(140,30) );
+ (void)new wxButton( panel, ID_COMBO_APPEND, wxT("&Append 'Hi!'"), wxPoint(340,80), wxSize(140,30) );
+ (void)new wxButton( panel, ID_COMBO_DELETE, wxT("D&elete selected item"), wxPoint(180,130), wxSize(140,30) );
+ (void)new wxButton( panel, ID_COMBO_FONT, wxT("Set &Italic font"), wxPoint(340,130), wxSize(140,30) );
+ (void)new wxButton( panel, ID_COMBO_SET_TEXT, wxT("Set 'Hi!' at #2"), wxPoint(340,180), wxSize(140,30) );
+ (void)new wxCheckBox( panel, ID_COMBO_ENABLE, wxT("&Disable"), wxPoint(20,130), wxSize(140,30) );
+ m_book->AddPage(panel, wxT("wxComboBox"), false, Image_Combo);
+
+ wxString choices2[] =
+ {
+ wxT("First"), wxT("Second"),
+ /* "Third",
+ "Fourth", "Fifth", "Sixth",
+ "Seventh", "Eighth", "Nineth", "Tenth" */
+ };
+
+ panel = new wxPanel(m_book);
+ new MyRadioBox(panel, ID_RADIOBOX2, wxT("&That"),
+ wxPoint(10,160), wxDefaultSize,
+ WXSIZEOF(choices2), choices2,
+ 1, wxRA_SPECIFY_ROWS );
+ m_radio = new wxRadioBox(panel, ID_RADIOBOX, wxT("T&his"),
+ wxPoint(10,10), wxDefaultSize,
+ WXSIZEOF(choices), choices,
+ 1, wxRA_SPECIFY_COLS );
+
+#if wxUSE_HELP
+ for( unsigned int item = 0; item < WXSIZEOF(choices); ++item )
+ m_radio->SetItemHelpText( item, wxString::Format( wxT("Help text for \"%s\""), choices[item].c_str() ) );
+
+ // erase help text for the second item
+ m_radio->SetItemHelpText( 1, wxT("") );
+ // set default help text for control
+ m_radio->SetHelpText( wxT("Default helptext for wxRadioBox") );
+#endif // wxUSE_HELP
+
+ (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, wxT("Select #&2"), wxPoint(180,30), wxSize(140,30) );
+ (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, wxT("&Select 'This'"), wxPoint(180,80), wxSize(140,30) );
+ m_fontButton = new wxButton( panel, ID_SET_FONT, wxT("Set &more Italic font"), wxPoint(340,30), wxSize(140,30) );
+ (void)new wxButton( panel, ID_RADIOBOX_FONT, wxT("Set &Italic font"), wxPoint(340,80), wxSize(140,30) );
+ (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, wxT("&Disable"), wxPoint(340,130), wxDefaultSize );
+
+ wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, wxT("Radiobutton1"), wxPoint(210,170), wxDefaultSize, wxRB_GROUP );
+ rb->SetValue( false );
+ (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, wxT("&Radiobutton2"), wxPoint(340,170), wxDefaultSize );
+ m_book->AddPage(panel, wxT("wxRadioBox"), false, Image_Radio);
+
+
+#if wxUSE_SLIDER && wxUSE_GAUGE
+ panel = new wxPanel(m_book);
+
+ wxBoxSizer *main_sizer = new wxBoxSizer( wxHORIZONTAL );
+ panel->SetSizer( main_sizer );
+
+ wxStaticBoxSizer *gauge_sizer = new wxStaticBoxSizer( wxHORIZONTAL, panel, wxT("&wxGauge and wxSlider") );
+ main_sizer->Add( gauge_sizer, 0, wxALL, 5 );
+ wxBoxSizer *sz = new wxBoxSizer( wxVERTICAL );
+ gauge_sizer->Add( sz );
+ m_gauge = new wxGauge( panel, wxID_ANY, 200, wxDefaultPosition, wxSize(155, 30), wxGA_HORIZONTAL|wxNO_BORDER );
+ sz->Add( m_gauge, 0, wxALL, 10 );
+ m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200,
+ wxDefaultPosition, wxSize(155,wxDefaultCoord),
+ wxSL_AUTOTICKS | wxSL_LABELS);
+ m_slider->SetTickFreq(40, 0);
+ sz->Add( m_slider, 0, wxALL, 10 );
+
+ m_gaugeVert = new wxGauge( panel, wxID_ANY, 100,
+ wxDefaultPosition, wxSize(wxDefaultCoord, 90),
+ wxGA_VERTICAL | wxGA_SMOOTH | wxNO_BORDER );
+ gauge_sizer->Add( m_gaugeVert, 0, wxALL, 10 );
+
+
+
+ wxStaticBox *sb = new wxStaticBox( panel, wxID_ANY, wxT("&Explanation"),
+ wxDefaultPosition, wxDefaultSize ); //, wxALIGN_CENTER );
+ wxStaticBoxSizer *wrapping_sizer = new wxStaticBoxSizer( sb, wxVERTICAL );
+ main_sizer->Add( wrapping_sizer, 0, wxALL, 5 );
+
+#ifdef __WXMOTIF__
+ // No wrapping text in wxStaticText yet :-(
+ m_wrappingText = new wxStaticText( panel, wxID_ANY,
+ wxT("Drag the slider!"),
+ wxPoint(250,30),
+ wxSize(240, wxDefaultCoord)
+ );