X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1a8b677e3b0b588eb85ba61d9928cfe4069b14a3..f1d5aa4eca541a2f90044a63f555985d6bd4adf3:/samples/controls/controls.cpp diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index 6db4496179..1902bdf531 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -59,9 +59,6 @@ #define EVT_TOGGLEBUTTON EVT_CHECKBOX #endif -#include "wx/hyperlink.h" -#include "wx/utils.h" - //---------------------------------------------------------------------- // class definitions //---------------------------------------------------------------------- @@ -124,10 +121,6 @@ public: void OnSizerCheck (wxCommandEvent &event); -#if wxUSE_HYPERLINKCTRL - void OnHyperlink(wxHyperlinkEvent& event); -#endif - wxListBox *m_listbox, *m_listboxSorted; #if wxUSE_CHOICE @@ -176,10 +169,6 @@ public: wxBoxSizer *m_hsizer; wxButton *m_bigBtn; -#if wxUSE_HYPERLINKCTRL - wxHyperlinkCtrl *m_hyperlink; -#endif - private: wxLog *m_logTargetOld; @@ -201,6 +190,8 @@ public: #endif // wxUSE_TOOLTIPS void OnEnableAll(wxCommandEvent& event); + void OnHideAll(wxCommandEvent& event); + void OnHideList(wxCommandEvent& event); void OnContextHelp(wxCommandEvent& event); void OnIdle( wxIdleEvent& event ); @@ -392,6 +383,8 @@ enum // panel menu CONTROLS_ENABLE_ALL, + CONTROLS_HIDE_ALL, + CONTROLS_HIDE_LIST, CONTROLS_CONTEXT_HELP }; @@ -569,9 +562,6 @@ EVT_BUTTON (ID_BUTTON_TEST1, MyPanel::OnTestButton) EVT_BUTTON (ID_BUTTON_TEST2, MyPanel::OnTestButton) EVT_BUTTON (ID_BITMAP_BTN, MyPanel::OnBmpButton) EVT_TOGGLEBUTTON(ID_BITMAP_BTN_ENABLE, MyPanel::OnBmpButtonToggle) -#if wxUSE_HYPERLINKCTRL -EVT_HYPERLINK (ID_HYPERLINK, MyPanel::OnHyperlink) -#endif EVT_CHECKBOX (ID_SIZER_CHECK1, MyPanel::OnSizerCheck) EVT_CHECKBOX (ID_SIZER_CHECK2, MyPanel::OnSizerCheck) @@ -654,8 +644,8 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) wxString choices[] = { _T("This"), - _T("is one of my"), - _T("really"), + _T("is"), + _T("one of my long and"), _T("wonderful"), _T("examples.") }; @@ -746,10 +736,10 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) 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 ); + 5, choices, wxLB_MULTIPLE | wxLB_ALWAYS_SB | wxHSCROLL ); m_listboxSorted = new wxListBox( panel, ID_LISTBOX_SORTED, wxPoint(10,90), wxSize(120,70), - 5, choices, wxLB_SORT ); + 3, choices, wxLB_SORT ); SetListboxClientData(wxT("listbox"), m_listbox); SetListboxClientData(wxT("listbox"), m_listboxSorted); @@ -831,7 +821,10 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) }; panel = new wxPanel(m_book); - wxRadioBox *radio2 = new MyRadioBox( panel, ID_RADIOBOX, _T("&That"), wxPoint(10,160), wxDefaultSize, WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS ); +#if wxUSE_TOOLTIPS + wxRadioBox *radio2 = +#endif // wxUSE_TOOLTIPS + new MyRadioBox( panel, ID_RADIOBOX, _T("&That"), wxPoint(10,160), wxDefaultSize, WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS ); m_radio = new wxRadioBox( panel, ID_RADIOBOX, _T("T&his"), wxPoint(10,10), wxDefaultSize, WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS ); #if wxUSE_TOOLTIPS @@ -941,7 +934,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) s << initialSpinValue; m_spintext = new wxTextCtrl( panel, wxID_ANY, s, wxPoint(20,160), wxSize(80,wxDefaultCoord) ); #if wxUSE_SPINBTN - m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,160) ); + m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,160), wxSize(-1, m_spintext->GetSize().y) ); m_spinbutton->SetRange(-40,30); m_spinbutton->SetValue(initialSpinValue); @@ -953,7 +946,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) #if wxUSE_SPINCTRL m_spinctrl = new wxSpinCtrl( panel, ID_SPINCTRL, wxEmptyString, wxPoint(200, 160), wxSize(80, wxDefaultCoord) ); - //m_spinctrl->SetRange(10,30); + m_spinctrl->SetRange(-10,30); m_spinctrl->SetValue(15); #endif // wxUSE_SPINCTRL @@ -974,9 +967,9 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) wxBitmap bitmap( 100, 100 ); wxMemoryDC dc; - dc.SetBackground(*wxGREEN); dc.SelectObject( bitmap ); - dc.SetPen(*wxGREEN_PEN); + dc.SetBackground(*wxGREEN); + dc.SetPen(*wxRED_PEN); dc.Clear(); dc.DrawEllipse(5, 5, 90, 90); dc.DrawText(_T("Bitmap"), 30, 40); @@ -1020,28 +1013,8 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_book->AddPage(panel, _T("wxBitmapXXX")); - // hyperlink -#if wxUSE_HYPERLINKCTRL - panel = new wxPanel(m_book); - m_hyperlink = new wxHyperlinkCtrl(panel, ID_HYPERLINK, - _T("Click here to go to Google!"), - _T("http://www.google.com"), - wxPoint(20, 20)); - m_hyperlink->SetVisitedColour(m_hyperlink->GetNormalColour()); - m_hyperlink->SetFont(*wxITALIC_FONT); - m_hyperlink->SetBackgroundColour(*wxWHITE); - - // this hyperlink will automatically call wxLaunchDefaultBrowser on user's clicks - new wxHyperlinkCtrl(panel, wxID_ANY, wxT("http://www.test.com"), - wxEmptyString, wxPoint(20, 50)); - - m_book->AddPage(panel, _T("wxHyperlinkCtrl")); -#endif - // sizer - panel = new wxPanel(m_book); - panel->SetAutoLayout( true ); wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL ); @@ -1218,23 +1191,29 @@ void MyPanel::OnChangeColour(wxCommandEvent& WXUNUSED(event)) void MyPanel::OnListBox( wxCommandEvent &event ) { -// GetParent()->Move(100, 100); + wxListBox *listbox = event.GetId() == ID_LISTBOX ? m_listbox + : m_listboxSorted; - if (event.GetInt() == -1) + bool deselect = false; + if (listbox->HasFlag(wxLB_MULTIPLE) || listbox->HasFlag(wxLB_EXTENDED)) { - m_text->AppendText( _T("ListBox has no selections anymore\n") ); - return; + deselect = !event.IsSelection(); + if (deselect) + m_text->AppendText( _T("ListBox deselection event\n") ); } - wxListBox *listbox = event.GetId() == ID_LISTBOX ? m_listbox - : m_listboxSorted; - m_text->AppendText( _T("ListBox event selection string is: '") ); m_text->AppendText( event.GetString() ); m_text->AppendText( _T("'\n") ); - m_text->AppendText( _T("ListBox control selection string is: '") ); - m_text->AppendText( listbox->GetStringSelection() ); - m_text->AppendText( _T("'\n") ); + + // can't use GetStringSelection() with multiple selections, there could be + // more than one of them + if ( !listbox->HasFlag(wxLB_MULTIPLE) && !listbox->HasFlag(wxLB_EXTENDED) ) + { + m_text->AppendText( _T("ListBox control selection string is: '") ); + m_text->AppendText( listbox->GetStringSelection() ); + m_text->AppendText( _T("'\n") ); + } wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject()); m_text->AppendText( _T("ListBox event client data string is: '") ); @@ -1245,7 +1224,7 @@ void MyPanel::OnListBox( wxCommandEvent &event ) m_text->AppendText( _T("'\n") ); m_text->AppendText( _T("ListBox control client data string is: '") ); - obj = (wxStringClientData *)listbox->GetClientObject(listbox->GetSelection()); + obj = (wxStringClientData *)listbox->GetClientObject(event.GetInt()); if (obj) m_text->AppendText( obj->GetData() ); else @@ -1307,8 +1286,8 @@ void MyPanel::OnListBoxButtons( wxCommandEvent &event ) } case ID_LISTBOX_APPEND: { - m_listbox->Append( _T("Hi!") ); - m_listboxSorted->Append( _T("Hi!") ); + m_listbox->Append( _T("Hi kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk!") ); + m_listboxSorted->Append( _T("Hi hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh!") ); break; } case ID_LISTBOX_DELETE: @@ -1334,10 +1313,10 @@ void MyPanel::OnListBoxButtons( wxCommandEvent &event ) #if wxUSE_CHOICE -static const wxChar *GetDataString(wxClientData *data) +static wxString GetDataString(wxClientData *data) { - return data ? wx_static_cast(wxStringClientData *, data)->GetData().c_str() - : _T("none"); + return data ? wx_static_cast(wxStringClientData *, data)->GetData() + : wxString("none"); } void MyPanel::OnChoice( wxCommandEvent &event ) @@ -1355,8 +1334,8 @@ void MyPanel::OnChoice( wxCommandEvent &event ) _T("data \"%s\"/\"%s\""), (int)event.GetInt(), sel, - event.GetString().c_str(), - choice->GetStringSelection().c_str(), + event.GetString(), + choice->GetStringSelection(), GetDataString(dataEvt), GetDataString(dataCtrl)); } @@ -1712,15 +1691,6 @@ void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) ) #endif // wxUSE_PROGRESSDLG #endif // wxUSE_SPINBTN -#if wxUSE_HYPERLINKCTRL -void MyPanel::OnHyperlink(wxHyperlinkEvent& event) -{ - wxLogMessage(wxT("Clicked on hyperlink with url '%s'"), event.GetURL().c_str()); - if (!wxLaunchDefaultBrowser(event.GetURL())) - wxMessageBox(_T("Could not launch the default browser!")); -} -#endif //wxUSE_HYPERLINK - void MyPanel::OnSizerCheck( wxCommandEvent &event) { switch (event.GetId ()) { @@ -1774,6 +1744,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) #endif // wxUSE_TOOLTIPS EVT_MENU(CONTROLS_ENABLE_ALL, MyFrame::OnEnableAll) + EVT_MENU(CONTROLS_HIDE_ALL, MyFrame::OnHideAll) + EVT_MENU(CONTROLS_HIDE_LIST, MyFrame::OnHideList) EVT_MENU(CONTROLS_CONTEXT_HELP, MyFrame::OnContextHelp) EVT_ICONIZE(MyFrame::OnIconized) @@ -1785,11 +1757,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) END_EVENT_TABLE() MyFrame::MyFrame(const wxChar *title, int x, int y) + : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y), wxSize(700, 450)) { - // give it a context help button - SetExtraStyle(wxFRAME_EX_CONTEXTHELP); - wxFrame::Create(NULL, wxID_ANY, title, wxPoint(x, y), wxSize(500, 430), - wxDEFAULT_FRAME_STYLE & ~ (wxMINIMIZE_BOX | wxMAXIMIZE_BOX)); SetHelpText( _T("Controls sample demonstrating various widgets") ); // Give it an icon @@ -1824,6 +1793,10 @@ MyFrame::MyFrame(const wxChar *title, int x, int y) wxMenu *panel_menu = new wxMenu; panel_menu->Append(CONTROLS_ENABLE_ALL, _T("&Disable all\tCtrl-E"), _T("Enable/disable all panel controls"), true); + panel_menu->Append(CONTROLS_HIDE_ALL, _T("&Hide all\tCtrl-I"), + _T("Show/hide thoe whole panel controls"), true); + panel_menu->Append(CONTROLS_HIDE_LIST, _T("Hide &list ctrl\tCtrl-S"), + _T("Enable/disable all panel controls"), true); panel_menu->Append(CONTROLS_CONTEXT_HELP, _T("&Context help...\tCtrl-H"), _T("Get context help for a control")); menu_bar->Append(panel_menu, _T("&Panel")); @@ -1835,8 +1808,6 @@ MyFrame::MyFrame(const wxChar *title, int x, int y) #endif // wxUSE_STATUSBAR m_panel = new MyPanel( this, 10, 10, 300, 100 ); - - SetSizeHints( 500, 425 ); } void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) ) @@ -1897,6 +1868,31 @@ void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event)) s_enable = !s_enable; m_panel->Enable(s_enable); + static bool s_enableCheckbox = true; + if ( !s_enable ) + { + // this is a test for correct behaviour of either enabling or disabling + // a child when its parent is disabled: the checkbox should have the + // correct state when the parent is enabled back + m_panel->m_checkbox->Enable(s_enableCheckbox); + s_enableCheckbox = !s_enableCheckbox; + } +} + +void MyFrame::OnHideAll(wxCommandEvent& WXUNUSED(event)) +{ + static bool s_show = true; + + s_show = !s_show; + m_panel->Show(s_show); +} + +void MyFrame::OnHideList(wxCommandEvent& WXUNUSED(event)) +{ + static bool s_show = true; + + s_show = !s_show; + m_panel->m_listbox->Show(s_show); } void MyFrame::OnContextHelp(wxCommandEvent& WXUNUSED(event)) @@ -1916,8 +1912,8 @@ void MyFrame::OnMove( wxMoveEvent& event ) void MyFrame::OnIconized( wxIconizeEvent& event ) { - wxLogMessage(_T("Frame %s"), event.Iconized() ? _T("iconized") - : _T("restored")); + wxLogMessage(_T("Frame %s"), event.IsIconized() ? _T("iconized") + : _T("restored")); event.Skip(); } @@ -1938,24 +1934,30 @@ void MyFrame::OnSize( wxSizeEvent& event ) void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) ) { // track the window which has the focus in the status bar - static wxWindow *s_windowFocus = (wxWindow *)NULL; + static wxWindow *s_windowFocus = NULL; wxWindow *focus = wxWindow::FindFocus(); - if ( focus && (focus != s_windowFocus) ) + if ( focus != s_windowFocus ) { s_windowFocus = focus; wxString msg; - msg.Printf( + if ( focus ) + { + msg.Printf( + _T("Focus: %s") #ifdef __WXMSW__ - _T("Focus: %s, HWND = %08x"), -#else - _T("Focus: %s"), + , _T(", HWND = %08x") #endif - s_windowFocus->GetClassInfo()->GetClassName() + , s_windowFocus->GetName().c_str() #ifdef __WXMSW__ - , (unsigned int) s_windowFocus->GetHWND() + , (unsigned int) s_windowFocus->GetHWND() #endif - ); + ); + } + else + { + msg = _T("No focus"); + } #if wxUSE_STATUSBAR SetStatusText(msg);