X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3dec57adfdb2469b7679930092f0bd9c8569d62c..7ab2c081d0b7d770def08f2d5071a155e53f3973:/samples/controls/controls.cpp diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index 8ea9cf6b99..1f4758bc20 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -34,7 +34,7 @@ #include "wx/tooltip.h" #endif -#if defined(__WXGTK__) || defined(__WXMOTIF__) +#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) #define USE_XPM #endif @@ -86,8 +86,10 @@ public: void OnListBox( wxCommandEvent &event ); void OnListBoxDoubleClick( wxCommandEvent &event ); void OnListBoxButtons( wxCommandEvent &event ); +#if wxUSE_CHOICE void OnChoice( wxCommandEvent &event ); void OnChoiceButtons( wxCommandEvent &event ); +#endif void OnCombo( wxCommandEvent &event ); void OnComboTextChanged( wxCommandEvent &event ); void OnComboTextEnter( wxCommandEvent &event ); @@ -118,8 +120,10 @@ public: wxListBox *m_listbox, *m_listboxSorted; +#if wxUSE_CHOICE wxChoice *m_choice, *m_choiceSorted; +#endif wxComboBox *m_combo; wxRadioBox *m_radio; wxGauge *m_gauge, @@ -154,7 +158,7 @@ private: class MyFrame: public wxFrame { public: - MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h); + MyFrame(const char *title, int x, int y); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); @@ -176,13 +180,16 @@ public: private: void UpdateStatusBar(const wxPoint& pos, const wxSize& size) { - wxString msg; - wxSize sizeCl = GetClientSize(); - msg.Printf(_("pos=(%d, %d), size=%dx%d (client=%dx%d)"), - pos.x, pos.y, - size.x, size.y, - sizeCl.x, sizeCl.y); - SetStatusText(msg, 1); + if ( m_frameStatusBar ) + { + wxString msg; + wxSize sizeCl = GetClientSize(); + msg.Printf(_("pos=(%d, %d), size=%dx%d (client=%dx%d)"), + pos.x, pos.y, + size.x, size.y, + sizeCl.x, sizeCl.y); + SetStatusText(msg, 1); + } } MyPanel *m_panel; @@ -284,8 +291,8 @@ private: // other //---------------------------------------------------------------------- -static void SetControlClientData(const char *name, - wxControlWithItems *control); +static void SetListboxClientData(const wxChar *name, wxListBox *control); +static void SetChoiceClientData(const wxChar *name, wxChoice *control); IMPLEMENT_APP(MyApp) @@ -310,62 +317,23 @@ enum bool MyApp::OnInit() { + // use standard command line handling: + if ( !wxApp::OnInit() ) + return FALSE; + // parse the cmd line int x = 50, y = 50; if ( argc == 3 ) { - wxSscanf(argv[1], "%d", &x); - wxSscanf(argv[2], "%d", &y); + wxSscanf(wxString(argv[1]), wxT("%d"), &x); + wxSscanf(wxString(argv[2]), wxT("%d"), &y); } // Create the main frame window - MyFrame *frame = new MyFrame((wxFrame *) NULL, - "Controls wxWindows App", - x, y, 540, 430); - - frame->SetSizeHints( 500, 425 ); - - // Give it an icon - // The wxICON() macros loads an icon from a resource under Windows - // and uses an #included XPM image under GTK+ and Motif - - frame->SetIcon( wxICON(mondrian) ); - - wxMenu *file_menu = new wxMenu("", wxMENU_TEAROFF); - - file_menu->Append(CONTROLS_CLEAR_LOG, "&Clear log\tCtrl-L"); - file_menu->AppendSeparator(); - file_menu->Append(CONTROLS_ABOUT, "&About\tF1"); - file_menu->AppendSeparator(); - file_menu->Append(CONTROLS_QUIT, "E&xit\tAlt-X", "Quit controls sample"); - - wxMenuBar *menu_bar = new wxMenuBar; - menu_bar->Append(file_menu, "&File"); - -#if wxUSE_TOOLTIPS - wxMenu *tooltip_menu = new wxMenu; - tooltip_menu->Append(CONTROLS_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D"); - tooltip_menu->AppendSeparator(); - tooltip_menu->Append(CONTROLS_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T", - "enable/disable tooltips", TRUE); - tooltip_menu->Check(CONTROLS_ENABLE_TOOLTIPS, TRUE); - menu_bar->Append(tooltip_menu, "&Tooltips"); -#endif // wxUSE_TOOLTIPS - - wxMenu *panel_menu = new wxMenu; - panel_menu->Append(CONTROLS_ENABLE_ALL, "&Disable all\tCtrl-E", - "Enable/disable all panel controls", TRUE); - menu_bar->Append(panel_menu, "&Panel"); - - frame->SetMenuBar(menu_bar); - + MyFrame *frame = new MyFrame("Controls wxWindows App", x, y); frame->Show(TRUE); - //frame->GetPanel()->m_notebook->SetSelection(6); - - SetTopWindow(frame); - return TRUE; } @@ -443,6 +411,7 @@ EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons) EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons) EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons) EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons) +#if wxUSE_CHOICE EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice) EVT_CHOICE (ID_CHOICE_SORTED, MyPanel::OnChoice) EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons) @@ -452,6 +421,7 @@ EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons) EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons) EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons) EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons) +#endif EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo) EVT_TEXT (ID_COMBO, MyPanel::OnComboTextChanged) EVT_TEXT_ENTER(ID_COMBO, MyPanel::OnComboTextEnter) @@ -513,11 +483,9 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ), m_text(NULL), m_notebook(NULL) { - wxLayoutConstraints *c; - m_text = new wxTextCtrl(this, -1, "This is the log window.\n", wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE); - m_text->SetBackgroundColour("wheat"); + m_text->SetBackgroundColour(wxT("wheat")); if ( 0 ) wxLog::AddTraceMask(_T("focus")); @@ -569,7 +537,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) wxBitmap bmp(s_iconNames[n]); if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) ) { - wxLogWarning("Couldn't load the image '%s' for the notebook page %d.", + wxLogWarning(wxT("Couldn't load the image '%s' for the notebook page %d."), s_iconNames[n], n); } } @@ -596,8 +564,8 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) wxPoint(10,90), wxSize(120,70), 5, choices, wxLB_SORT ); - SetControlClientData("listbox", m_listbox); - SetControlClientData("listbox", m_listboxSorted); + SetListboxClientData(wxT("listbox"), m_listbox); + SetListboxClientData(wxT("listbox"), m_listboxSorted); m_listbox->SetCursor(*wxCROSS_CURSOR); #if wxUSE_TOOLTIPS @@ -629,16 +597,17 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) panel->SetCursor(wxCursor(wxCURSOR_HAND)); m_notebook->AddPage(panel, "wxListBox", TRUE, Image_List); +#if wxUSE_CHOICE panel = new wxPanel(m_notebook); m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices ); m_choiceSorted = new wxChoice( panel, ID_CHOICE_SORTED, wxPoint(10,70), wxSize(120,-1), 5, choices, wxCB_SORT ); - SetControlClientData("choice", m_choice); - SetControlClientData("choice", m_choiceSorted); + SetChoiceClientData(wxT("choice"), m_choice); + SetChoiceClientData(wxT("choice"), m_choiceSorted); m_choice->SetSelection(2); - m_choice->SetBackgroundColour( "red" ); + m_choice->SetBackgroundColour( wxT("red") ); (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #&2", wxPoint(180,30), wxSize(140,30) ); (void)new wxButton( panel, ID_CHOICE_SEL_STR, "&Select 'This'", wxPoint(340,30), wxSize(140,30) ); (void)new wxButton( panel, ID_CHOICE_CLEAR, "&Clear", wxPoint(180,80), wxSize(140,30) ); @@ -648,6 +617,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, "&Disable", wxPoint(20,130), wxSize(140,30) ); m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice); +#endif // wxUSE_CHOICE panel = new wxPanel(m_notebook); (void)new wxStaticBox( panel, -1, "&Box around combobox", @@ -704,7 +674,10 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_AUTOTICKS | wxSL_LABELS ); m_slider->SetTickFreq(40, 0); - (void)new wxStaticBox( panel, -1, "&Explanation", wxPoint(230,10), wxSize(270,130) ); + (void)new wxStaticBox( panel, -1, "&Explanation", + wxPoint(230,10), wxSize(270,130), + wxALIGN_CENTER ); + #ifdef __WXMOTIF__ // No wrapping text in wxStaticText yet :-( (void)new wxStaticText( panel, -1, @@ -787,6 +760,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) bmp1, wxPoint(30, 70) ); + bmpBtn->SetBitmapSelected(bmp2); bmpBtn->SetBitmapFocus(bmp3); @@ -794,6 +768,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) (void)new wxToggleButton(panel, ID_BUTTON_LABEL, "&Toggle label", wxPoint(250, 20)); #endif // wxUSE_TOGGLEBTN + m_label = new wxStaticText(panel, -1, "Label with some long text", wxPoint(250, 60), wxDefaultSize, wxALIGN_RIGHT /*| wxST_NO_AUTORESIZE*/); @@ -802,6 +777,8 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_notebook->AddPage(panel, "wxBitmapXXX"); // layout constraints +#if wxUSE_CONSTRAINTS + wxLayoutConstraints *c; panel = new wxPanel(m_notebook); panel->SetAutoLayout( TRUE ); @@ -825,7 +802,8 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) pMyButton2->SetConstraints( c ); m_notebook->AddPage(panel, "wxLayoutConstraint"); - +#endif + // sizer panel = new wxPanel(m_notebook); @@ -869,12 +847,16 @@ void MyPanel::OnPageChanging( wxNotebookEvent &event ) } } - *m_text << "Notebook selection is being changed from " << selOld << "\n"; + *m_text << "Notebook selection is being changed from " << selOld + << " to " << event.GetSelection() + << " (current page from notebook is " + << m_notebook->GetSelection() << ")\n"; } void MyPanel::OnPageChanged( wxNotebookEvent &event ) { - *m_text << "Notebook selection is " << event.GetSelection() << "\n"; + *m_text << "Notebook selection is now " << event.GetSelection() + << " (from notebook: " << m_notebook->GetSelection() << ")\n"; } void MyPanel::OnTestButton(wxCommandEvent& event) @@ -898,16 +880,16 @@ void MyPanel::OnChangeColour(wxCommandEvent& WXUNUSED(event)) SetBackgroundColour(s_colOld); s_colOld = wxNullColour; - m_lbSelectThis->SetForegroundColour("red"); - m_lbSelectThis->SetBackgroundColour("white"); + m_lbSelectThis->SetForegroundColour(wxT("red")); + m_lbSelectThis->SetBackgroundColour(wxT("white")); } else { - s_colOld = wxColour("red"); - SetBackgroundColour("white"); + s_colOld = wxColour(wxT("red")); + SetBackgroundColour(wxT("white")); - m_lbSelectThis->SetForegroundColour("white"); - m_lbSelectThis->SetBackgroundColour("red"); + m_lbSelectThis->SetForegroundColour(wxT("white")); + m_lbSelectThis->SetBackgroundColour(wxT("red")); } m_lbSelectThis->Refresh(); @@ -965,8 +947,8 @@ void MyPanel::OnListBoxButtons( wxCommandEvent &event ) case ID_LISTBOX_ENABLE: { m_text->AppendText("Checkbox clicked.\n"); - wxCheckBox *cb = (wxCheckBox*)event.GetEventObject(); #if wxUSE_TOOLTIPS + wxCheckBox *cb = (wxCheckBox*)event.GetEventObject(); if (event.GetInt()) cb->SetToolTip( "Click to enable listbox" ); else @@ -1026,6 +1008,7 @@ void MyPanel::OnListBoxButtons( wxCommandEvent &event ) } } +#if wxUSE_CHOICE void MyPanel::OnChoice( wxCommandEvent &event ) { wxChoice *choice = event.GetId() == ID_CHOICE ? m_choice @@ -1109,6 +1092,7 @@ void MyPanel::OnChoiceButtons( wxCommandEvent &event ) } } } +#endif // wxUSE_CHOICE void MyPanel::OnCombo( wxCommandEvent &event ) { @@ -1293,6 +1277,13 @@ void MyPanel::OnUpdateShowProgress( wxUpdateUIEvent& event ) void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) ) { int max = m_spinbutton->GetValue(); + + if ( max <= 0 ) + { + wxLogError(_T("You must set positive range!")); + return; + } + wxProgressDialog dialog("Progress dialog example", "An informative message", max, // range @@ -1364,12 +1355,48 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_IDLE(MyFrame::OnIdle) END_EVENT_TABLE() -MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h) -: wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h)) +MyFrame::MyFrame(const char *title, int x, int y) + : wxFrame(NULL, -1, title, wxPoint(x, y), wxSize(500, 430)) { + // Give it an icon + // The wxICON() macros loads an icon from a resource under Windows + // and uses an #included XPM image under GTK+ and Motif + + SetIcon( wxICON(mondrian) ); + + wxMenu *file_menu = new wxMenu; + + file_menu->Append(CONTROLS_CLEAR_LOG, "&Clear log\tCtrl-L"); + file_menu->AppendSeparator(); + file_menu->Append(CONTROLS_ABOUT, "&About\tF1"); + file_menu->AppendSeparator(); + file_menu->Append(CONTROLS_QUIT, "E&xit\tAlt-X", "Quit controls sample"); + + wxMenuBar *menu_bar = new wxMenuBar; + menu_bar->Append(file_menu, "&File"); + +#if wxUSE_TOOLTIPS + wxMenu *tooltip_menu = new wxMenu; + tooltip_menu->Append(CONTROLS_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D"); + tooltip_menu->AppendSeparator(); + tooltip_menu->Append(CONTROLS_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T", + "enable/disable tooltips", TRUE); + tooltip_menu->Check(CONTROLS_ENABLE_TOOLTIPS, TRUE); + menu_bar->Append(tooltip_menu, "&Tooltips"); +#endif // wxUSE_TOOLTIPS + + wxMenu *panel_menu = new wxMenu; + panel_menu->Append(CONTROLS_ENABLE_ALL, "&Disable all\tCtrl-E", + "Enable/disable all panel controls", TRUE); + menu_bar->Append(panel_menu, "&Panel"); + + SetMenuBar(menu_bar); + CreateStatusBar(2); m_panel = new MyPanel( this, 10, 10, 300, 100 ); + + SetSizeHints( 500, 425 ); } void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) ) @@ -1499,14 +1526,26 @@ void MyComboBox::OnKeyUp(wxKeyEvent& event) event.Skip(); } -static void SetControlClientData(const char *name, - wxControlWithItems *control) +static void SetListboxClientData(const wxChar *name, wxListBox *control) +{ + size_t count = control->GetCount(); + for ( size_t n = 0; n < count; n++ ) + { + wxString s; + s.Printf(wxT("%s client data for '%s'"), + name, control->GetString(n).c_str()); + + control->SetClientObject(n, new wxStringClientData(s)); + } +} + +static void SetChoiceClientData(const wxChar *name, wxChoice *control) { size_t count = control->GetCount(); for ( size_t n = 0; n < count; n++ ) { wxString s; - s.Printf("%s client data for '%s'", + s.Printf(wxT("%s client data for '%s'"), name, control->GetString(n).c_str()); control->SetClientObject(n, new wxStringClientData(s));