X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1ccd23f5c454aac84705a9f7de39f528bed4410e..830efc9b0cb87eae22d4435af7858175017522ab:/samples/controls/controls.cpp?ds=sidebyside diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index 066ed1b2cc..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); @@ -158,7 +162,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); @@ -180,13 +184,18 @@ 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 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); + } } MyPanel *m_panel; @@ -288,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) @@ -314,62 +323,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; } @@ -484,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) @@ -516,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")); @@ -602,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 @@ -641,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) ); @@ -712,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, @@ -738,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", @@ -756,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 ); @@ -786,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, @@ -812,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 ); @@ -835,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); @@ -845,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 ); @@ -912,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(); @@ -979,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 @@ -1245,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 @@ -1262,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"); @@ -1278,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"); @@ -1309,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 @@ -1380,12 +1423,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) ) @@ -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++ )