X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4c36ca57a1a2f99acff49dd44f27ab1a2a7ce411..546f34572dcb324b7f55cf3810cb4c6cfbb42225:/samples/controls/controls.cpp diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index 13dca99061..e4b7ae08e7 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__) +#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__) #define USE_XPM #endif @@ -86,8 +87,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 +121,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 +159,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 +181,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 +292,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 +318,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 +412,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 +422,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 +484,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 +538,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 +565,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 +598,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 +618,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", @@ -701,8 +672,13 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_gaugeVert = new wxGauge( panel, -1, 100, wxPoint(195,35), wxSize(30, 90), wxGA_VERTICAL | wxGA_SMOOTH | wxNO_BORDER ); - m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS ); - (void)new wxStaticBox( panel, -1, "&Explanation", wxPoint(230,10), wxSize(270,130) ); + 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), + wxALIGN_CENTER ); + #ifdef __WXMOTIF__ // No wrapping text in wxStaticText yet :-( (void)new wxStaticText( panel, -1, @@ -745,13 +721,13 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) panel = new wxPanel(m_notebook); -#if !defined(__WXMOTIF__) && !defined(__WXMAC__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16. - wxIcon icon = wxTheApp->GetStdIcon(wxICON_INFORMATION); +#if !defined(__WXMOTIF__) && !defined(__WIN16__) // wxStaticBitmap not working under Motif yet; and icons not allowed under WIN16. + 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)); + bmpStatic->SetIcon(wxArtProvider::GetIcon(wxART_QUESTION)); #endif // !Motif wxBitmap bitmap( 100, 100 ); @@ -776,15 +752,16 @@ 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, bmp1, wxPoint(30, 70) ); + bmpBtn->SetBitmapSelected(bmp2); bmpBtn->SetBitmapFocus(bmp3); @@ -792,6 +769,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*/); @@ -800,6 +778,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 ); @@ -823,7 +803,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); @@ -867,12 +848,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) @@ -896,16 +881,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(); @@ -963,8 +948,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 @@ -1024,6 +1009,7 @@ void MyPanel::OnListBoxButtons( wxCommandEvent &event ) } } +#if wxUSE_CHOICE void MyPanel::OnChoice( wxCommandEvent &event ) { wxChoice *choice = event.GetId() == ID_CHOICE ? m_choice @@ -1107,6 +1093,7 @@ void MyPanel::OnChoiceButtons( wxCommandEvent &event ) } } } +#endif // wxUSE_CHOICE void MyPanel::OnCombo( wxCommandEvent &event ) { @@ -1291,6 +1278,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 @@ -1362,12 +1356,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) ) @@ -1497,14 +1527,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));