X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7bfc22f6147622df9625b8cda141383f2d8a919c..830efc9b0cb87eae22d4435af7858175017522ab:/samples/controls/controls.cpp diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index 8f984f0bd6..6a64e31cf0 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -29,12 +29,13 @@ #include "wx/tglbtn.h" #include "wx/notebook.h" #include "wx/imaglist.h" +#include "wx/artprov.h" #if wxUSE_TOOLTIPS #include "wx/tooltip.h" #endif -#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) +#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__) #define USE_XPM #endif @@ -111,6 +112,9 @@ public: #if wxUSE_SPINCTRL void OnSpinCtrl(wxSpinEvent& event); + void OnSpinCtrlUp(wxSpinEvent& event); + void OnSpinCtrlDown(wxSpinEvent& event); + void OnSpinCtrlText(wxCommandEvent& event); #endif // wxUSE_SPINCTRL void OnEnableAll(wxCommandEvent& event); @@ -183,10 +187,12 @@ private: if ( m_frameStatusBar ) { wxString msg; - wxSize sizeCl = GetClientSize(); - msg.Printf(_("pos=(%d, %d), size=%dx%d (client=%dx%d)"), + wxSize sizeAll = GetSize(), + sizeCl = GetClientSize(); + msg.Printf(_("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)"), pos.x, pos.y, size.x, size.y, + sizeAll.x, sizeAll.y, sizeCl.x, sizeCl.y); SetStatusText(msg, 1); } @@ -291,8 +297,8 @@ private: // other //---------------------------------------------------------------------- -static void SetControlClientData(const wxChar *name, - wxControlWithItems *control); +static void SetListboxClientData(const wxChar *name, wxListBox *control); +static void SetChoiceClientData(const wxChar *name, wxChoice *control); IMPLEMENT_APP(MyApp) @@ -326,8 +332,8 @@ bool MyApp::OnInit() 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 @@ -448,6 +454,9 @@ EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress) #endif // wxUSE_SPINBTN #if wxUSE_SPINCTRL EVT_SPINCTRL (ID_SPINCTRL, MyPanel::OnSpinCtrl) +EVT_SPIN_UP (ID_SPINCTRL, MyPanel::OnSpinCtrlUp) +EVT_SPIN_DOWN (ID_SPINCTRL, MyPanel::OnSpinCtrlDown) +EVT_TEXT (ID_SPINCTRL, MyPanel::OnSpinCtrlText) #endif // wxUSE_SPINCTRL #if wxUSE_TOGGLEBTN EVT_TOGGLEBUTTON(ID_BUTTON_LABEL, MyPanel::OnUpdateLabel) @@ -480,14 +489,38 @@ END_EVENT_TABLE() // ============================================================================ 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) + : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ) { - wxLayoutConstraints *c; + m_listbox = NULL; + m_listboxSorted = NULL; +#if wxUSE_CHOICE + m_choice = NULL; + m_choiceSorted = NULL; +#endif + m_combo = NULL; + m_radio = NULL; + m_gauge = NULL; + m_gaugeVert = NULL; + m_slider = NULL; + m_fontButton = NULL; + m_lbSelectNum = NULL; + m_lbSelectThis = NULL; +#if wxUSE_SPINBTN + m_spinbutton = NULL; + m_btnProgress = NULL; +#endif // wxUSE_SPINBTN +#if wxUSE_SPINCTRL + m_spinctrl = NULL; +#endif // wxUSE_SPINCTRL + m_spintext = NULL; + m_checkbox = NULL; + m_text = NULL; + m_notebook = NULL; + m_label = NULL; 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")); @@ -566,8 +599,8 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) wxPoint(10,90), wxSize(120,70), 5, choices, wxLB_SORT ); - SetControlClientData(wxT("listbox"), m_listbox); - SetControlClientData(wxT("listbox"), m_listboxSorted); + SetListboxClientData(wxT("listbox"), m_listbox); + SetListboxClientData(wxT("listbox"), m_listboxSorted); m_listbox->SetCursor(*wxCROSS_CURSOR); #if wxUSE_TOOLTIPS @@ -605,11 +638,11 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_choiceSorted = new wxChoice( panel, ID_CHOICE_SORTED, wxPoint(10,70), wxSize(120,-1), 5, choices, wxCB_SORT ); - SetControlClientData(wxT("choice"), m_choice); - SetControlClientData(wxT("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) ); @@ -676,7 +709,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, @@ -702,7 +738,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_spintext = new wxTextCtrl( panel, -1, s, wxPoint(20,160), wxSize(80,-1) ); #if wxUSE_SPINBTN m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,160), wxSize(80, -1) ); - m_spinbutton->SetRange(-10,30); + m_spinbutton->SetRange(-40,30); m_spinbutton->SetValue(initialSpinValue); m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "&Show progress dialog", @@ -720,12 +756,13 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) panel = new wxPanel(m_notebook); #if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16. - wxIcon icon = wxTheApp->GetStdIcon(wxICON_INFORMATION); + wxIcon icon = wxArtProvider::GetIcon(wxART_INFORMATION); wxStaticBitmap *bmpStatic = new wxStaticBitmap(panel, -1, icon, wxPoint(10, 10)); - bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10)); - bmpStatic->SetIcon(wxTheApp->GetStdIcon(wxICON_QUESTION)); + // VZ: don't leak memory + // bmpStatic = new wxStaticBitmap(panel, -1, wxNullIcon, wxPoint(50, 10)); + // bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION)); #endif // !Motif wxBitmap bitmap( 100, 100 ); @@ -750,9 +787,9 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) } #endif - wxBitmap bmp1(wxTheApp->GetStdIcon(wxICON_INFORMATION)), - bmp2(wxTheApp->GetStdIcon(wxICON_WARNING)), - bmp3(wxTheApp->GetStdIcon(wxICON_QUESTION)); + wxBitmap bmp1(wxArtProvider::GetBitmap(wxART_INFORMATION)), + bmp2(wxArtProvider::GetBitmap(wxART_WARNING)), + bmp3(wxArtProvider::GetBitmap(wxART_QUESTION)); wxBitmapButton *bmpBtn = new wxBitmapButton ( panel, -1, @@ -776,6 +813,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 ); @@ -799,7 +838,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); @@ -809,7 +849,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) sizer->Add( new wxButton(panel, -1, "Test Button &1" ), 3, wxALL, 10 ); sizer->Add( 20,20, 1 ); - sizer->Add( new wxButton(panel, -1, "Test Button &2" ), 3, wxGROW|wxALL, 10 ); + sizer->Add( new wxButton(panel, -1, "Multiline\nbutton" ), 3, wxGROW|wxALL, 10 ); panel->SetSizer( sizer ); @@ -876,16 +916,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(); @@ -943,8 +983,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 @@ -1209,12 +1249,44 @@ void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) ) #if wxUSE_SPINCTRL +void MyPanel::OnSpinCtrlText(wxCommandEvent& event) +{ + if ( m_spinctrl ) + { + wxString s; + s.Printf(_T("Spin ctrl text changed: now %d (from event: %s)\n"), + m_spinctrl->GetValue(), event.GetString()); + m_text->AppendText(s); + } +} + void MyPanel::OnSpinCtrl(wxSpinEvent& event) { - wxString s; - s.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"), - m_spinctrl->GetValue(), event.GetInt()); - m_text->AppendText(s); + if ( m_spinctrl ) + { + wxString s; + s.Printf(_T("Spin ctrl changed: now %d (from event: %d)\n"), + m_spinctrl->GetValue(), event.GetInt()); + m_text->AppendText(s); + } +} + +void MyPanel::OnSpinCtrlUp(wxSpinEvent& event) +{ + if ( m_spinctrl ) + { + m_text->AppendText(wxString::Format(_T("Spin up: %d (from event: %d)\n"), + m_spinctrl->GetValue(), event.GetInt())); + } +} + +void MyPanel::OnSpinCtrlDown(wxSpinEvent& event) +{ + if ( m_spinctrl ) + { + m_text->AppendText(wxString::Format(_T("Spin down: %d (from event: %d)\n"), + m_spinctrl->GetValue(), event.GetInt())); + } } #endif // wxUSE_SPINCTRL @@ -1226,7 +1298,7 @@ void MyPanel::OnSpinUp( wxSpinEvent &event ) value.Printf( _T("Spin control up: current = %d\n"), m_spinbutton->GetValue()); - if ( m_spinbutton->GetValue() > 17 ) + if ( event.GetPosition() > 17 ) { value += _T("Preventing the spin button from going above 17.\n"); @@ -1242,7 +1314,7 @@ void MyPanel::OnSpinDown( wxSpinEvent &event ) value.Printf( _T("Spin control down: current = %d\n"), m_spinbutton->GetValue()); - if ( m_spinbutton->GetValue() < -17 ) + if ( event.GetPosition() < -17 ) { value += _T("Preventing the spin button from going below -17.\n"); @@ -1273,6 +1345,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 @@ -1515,8 +1594,20 @@ void MyComboBox::OnKeyUp(wxKeyEvent& event) event.Skip(); } -static void SetControlClientData(const wxChar *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++ )