X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..cd794127ff73748f8199587897f57aa02c5ef059:/samples/layout/layout.cpp?ds=sidebyside diff --git a/samples/layout/layout.cpp b/samples/layout/layout.cpp index 41249df292..7cff4c878d 100644 --- a/samples/layout/layout.cpp +++ b/samples/layout/layout.cpp @@ -7,7 +7,7 @@ // RCS-ID: $Id$ // Copyright: (c) 1998 Julian Smart // 2005 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ---------------------------------------------------------------------------- @@ -31,10 +31,11 @@ #include "wx/notebook.h" #include "wx/spinctrl.h" #include "wx/wrapsizer.h" +#include "wx/generic/stattextg.h" #include "layout.h" -#ifndef __WXMSW__ +#ifndef wxHAS_IMAGES_IN_RESOURCES #include "../sample.xpm" #endif @@ -77,9 +78,7 @@ END_EVENT_TABLE() // Define my frame constructor MyFrame::MyFrame() - : wxFrame(NULL, wxID_ANY, wxT("wxWidgets Layout Demo"), - wxPoint(30,30), wxDefaultSize, - wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) + : wxFrame(NULL, wxID_ANY, wxT("wxWidgets Layout Demo")) { SetIcon(wxICON(sample)); @@ -204,8 +203,7 @@ void MyFrame::TestProportions(wxCommandEvent& WXUNUSED(event)) void MyFrame::TestFlexSizers(wxCommandEvent& WXUNUSED(event) ) { - MyFlexSizerFrame *newFrame = new MyFlexSizerFrame(wxT("Flex Sizer Test Frame"), 50, 50); - newFrame->Show(true); + (new MyFlexSizerFrame(this))->Show(); } void MyFrame::TestNotebookSizers(wxCommandEvent& WXUNUSED(event) ) @@ -217,20 +215,17 @@ void MyFrame::TestNotebookSizers(wxCommandEvent& WXUNUSED(event) ) void MyFrame::TestSetMinimal(wxCommandEvent& WXUNUSED(event) ) { - MySimpleSizerFrame *newFrame = new MySimpleSizerFrame(wxT("Simple Sizer Test Frame"), 50, 50); - newFrame->Show(true); + (new MySimpleSizerFrame(this))->Show(); } void MyFrame::TestNested(wxCommandEvent& WXUNUSED(event) ) { - MyNestedSizerFrame *newFrame = new MyNestedSizerFrame(wxT("Nested Sizer Test Frame"), 50, 50); - newFrame->Show(true); + (new MyNestedSizerFrame(this))->Show(); } void MyFrame::TestWrap(wxCommandEvent& WXUNUSED(event) ) { - MyWrapSizerFrame *newFrame = new MyWrapSizerFrame(wxT("Wrap Sizer Test Frame"), 50, 50); - newFrame->Show(true); + (new MyWrapSizerFrame(this))->Show(); } @@ -242,9 +237,7 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) void MyFrame::TestGridBagSizer(wxCommandEvent& WXUNUSED(event) ) { - MyGridBagSizerFrame *newFrame = new - MyGridBagSizerFrame(wxT("wxGridBagSizer Test Frame"), 50, 50); - newFrame->Show(true); + (new MyGridBagSizerFrame(this))->Show(); } // ---------------------------------------------------------------------------- @@ -278,9 +271,9 @@ MyProportionsFrame::MyProportionsFrame(wxFrame *parent) SetSizerAndFit(sizerTop); // and connect the events - Connect(wxEVT_COMMAND_TEXT_UPDATED, + Connect(wxEVT_TEXT, wxCommandEventHandler(MyProportionsFrame::OnProportionUpdated)); - Connect(wxEVT_COMMAND_SPINCTRL_UPDATED, + Connect(wxEVT_SPINCTRL, wxSpinEventHandler(MyProportionsFrame::OnProportionChanged)); } @@ -314,22 +307,22 @@ void MyFlexSizerFrame::InitFlexSizer(wxFlexGridSizer *sizer, wxWindow* parent) { for ( int j = 0; j < 3; j++ ) { - sizer->Add(new wxStaticText - ( - parent, - wxID_ANY, - wxString::Format(wxT("(%d, %d)"), i + 1, j + 1), - wxDefaultPosition, - wxDefaultSize, - wxALIGN_CENTER - ), - 0, wxEXPAND | wxALIGN_CENTER_VERTICAL | wxALL, 3); + wxWindow * const cell = new wxGenericStaticText + ( + parent, + wxID_ANY, + wxString::Format("(%d, %d)", + i + 1, j + 1) + ); + if ( (i + j) % 2 ) + cell->SetBackgroundColour( *wxLIGHT_GREY ); + sizer->Add(cell, 0, wxEXPAND | wxALIGN_CENTER_VERTICAL | wxALL, 3); } } } -MyFlexSizerFrame::MyFlexSizerFrame(const wxString &title, int x, int y ) - : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y) ) +MyFlexSizerFrame::MyFlexSizerFrame(wxFrame* parent) + : wxFrame(parent, wxID_ANY, "Flex Sizer Test Frame") { wxFlexGridSizer *sizerFlex; wxPanel* p = new wxPanel(this, wxID_ANY); @@ -337,24 +330,24 @@ MyFlexSizerFrame::MyFlexSizerFrame(const wxString &title, int x, int y ) // consttuct the first column wxSizer *sizerCol1 = new wxBoxSizer(wxVERTICAL); sizerCol1->Add(new wxStaticText(p, wxID_ANY, wxT("Ungrowable:")), 0, wxCENTER | wxTOP, 20); - sizerFlex = new wxFlexGridSizer(3, 3); + sizerFlex = new wxFlexGridSizer(3, 3, wxSize(5, 5)); InitFlexSizer(sizerFlex, p); sizerCol1->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); sizerCol1->Add(new wxStaticText(p, wxID_ANY, wxT("Growable middle column:")), 0, wxCENTER | wxTOP, 20); - sizerFlex = new wxFlexGridSizer(3, 3); + sizerFlex = new wxFlexGridSizer(3, 3, wxSize(5, 5)); InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerCol1->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); sizerCol1->Add(new wxStaticText(p, wxID_ANY, wxT("Growable middle row:")), 0, wxCENTER | wxTOP, 20); - sizerFlex = new wxFlexGridSizer(3, 3); + sizerFlex = new wxFlexGridSizer(3, 3, wxSize(5, 5)); InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableRow(1); sizerCol1->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); sizerCol1->Add(new wxStaticText(p, wxID_ANY, wxT("All growable columns:")), 0, wxCENTER | wxTOP, 20); - sizerFlex = new wxFlexGridSizer(3, 3); + sizerFlex = new wxFlexGridSizer(3, 3, wxSize(5, 5)); InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(0, 1); sizerFlex->AddGrowableCol(1, 2); @@ -364,14 +357,14 @@ MyFlexSizerFrame::MyFlexSizerFrame(const wxString &title, int x, int y ) // the second one wxSizer *sizerCol2 = new wxBoxSizer(wxVERTICAL); sizerCol2->Add(new wxStaticText(p, wxID_ANY, wxT("Growable middle row and column:")), 0, wxCENTER | wxTOP, 20); - sizerFlex = new wxFlexGridSizer(3, 3); + sizerFlex = new wxFlexGridSizer(3, 3, wxSize(5, 5)); InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerFlex->AddGrowableRow(1); sizerCol2->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); sizerCol2->Add(new wxStaticText(p, wxID_ANY, wxT("Same with horz flex direction")), 0, wxCENTER | wxTOP, 20); - sizerFlex = new wxFlexGridSizer(3, 3); + sizerFlex = new wxFlexGridSizer(3, 3, wxSize(5, 5)); InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerFlex->AddGrowableRow(1); @@ -379,7 +372,7 @@ MyFlexSizerFrame::MyFlexSizerFrame(const wxString &title, int x, int y ) sizerCol2->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); sizerCol2->Add(new wxStaticText(p, wxID_ANY, wxT("Same with grow mode == \"none\"")), 0, wxCENTER | wxTOP, 20); - sizerFlex = new wxFlexGridSizer(3, 3); + sizerFlex = new wxFlexGridSizer(3, 3, wxSize(5, 5)); InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerFlex->AddGrowableRow(1); @@ -388,7 +381,7 @@ MyFlexSizerFrame::MyFlexSizerFrame(const wxString &title, int x, int y ) sizerCol2->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); sizerCol2->Add(new wxStaticText(p, wxID_ANY, wxT("Same with grow mode == \"all\"")), 0, wxCENTER | wxTOP, 20); - sizerFlex = new wxFlexGridSizer(3, 3); + sizerFlex = new wxFlexGridSizer(3, 3, wxSize(5, 5)); InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerFlex->AddGrowableRow(1); @@ -481,8 +474,8 @@ BEGIN_EVENT_TABLE(MyGridBagSizerFrame, wxFrame) END_EVENT_TABLE() -MyGridBagSizerFrame::MyGridBagSizerFrame(const wxString &title, int x, int y ) - : wxFrame( NULL, wxID_ANY, title, wxPoint(x, y) ) +MyGridBagSizerFrame::MyGridBagSizerFrame(wxFrame* parent) + : wxFrame(parent, wxID_ANY, "wxGridBagSizer Test Frame") { wxPanel* p = new wxPanel(this, wxID_ANY); m_panel = p; @@ -595,8 +588,8 @@ BEGIN_EVENT_TABLE(MySimpleSizerFrame, wxFrame) EVT_MENU( ID_SET_BIG, MySimpleSizerFrame::OnSetBigSize) END_EVENT_TABLE() -MySimpleSizerFrame::MySimpleSizerFrame(const wxString &title, int x, int y ) - : wxFrame( NULL, wxID_ANY, title, wxPoint(x, y) ) +MySimpleSizerFrame::MySimpleSizerFrame(wxFrame* parent) + : wxFrame(parent, wxID_ANY, "Simple Sizer Test Frame") { wxMenu *menu = new wxMenu; @@ -641,8 +634,8 @@ void MySimpleSizerFrame::OnSetBigSize( wxCommandEvent& WXUNUSED(event)) // ---------------------------------------------------------------------------- -MyNestedSizerFrame::MyNestedSizerFrame(const wxString &title, int x, int y ) - : wxFrame( NULL, wxID_ANY, title, wxPoint(x, y) ) +MyNestedSizerFrame::MyNestedSizerFrame(wxFrame* parent) + : wxFrame(parent, wxID_ANY, "Nested Sizer Test Frame") { wxMenu *menu = new wxMenu; @@ -682,54 +675,81 @@ MyNestedSizerFrame::MyNestedSizerFrame(const wxString &title, int x, int y ) // MyWrapSizerFrame // ---------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(MyWrapSizerFrame, wxFrame) + EVT_MENU(wxID_ADD, MyWrapSizerFrame::OnAddCheckbox) + EVT_MENU(wxID_REMOVE, MyWrapSizerFrame::OnRemoveCheckbox) +END_EVENT_TABLE() -MyWrapSizerFrame::MyWrapSizerFrame(const wxString &title, int x, int y ) - : wxFrame( NULL, wxID_ANY, title, wxPoint(x, y), wxSize(200,-1) ) +MyWrapSizerFrame::MyWrapSizerFrame(wxFrame* parent) + : wxFrame(parent, wxID_ANY, "Wrap Sizer Test Frame", + wxDefaultPosition, wxSize(200,-1)) { wxMenu *menu = new wxMenu; - menu->Append(wxID_ABOUT, "Do nothing"); + menu->Append(wxID_ADD, "&Add a checkbox\tCtrl-+"); + menu->Append(wxID_REMOVE, "&Remove a checkbox\tCtrl--"); wxMenuBar *menu_bar = new wxMenuBar; - menu_bar->Append(menu, "&File"); + menu_bar->Append(menu, "&Wrap sizer"); SetMenuBar( menu_bar ); wxBoxSizer *root = new wxBoxSizer( wxVERTICAL ); -#if 0 - wxSizer *row = new wxWrapSizer; - int i; - for (i = 0; i < 4; i++) - row->Add( new wxButton( this, -1, "Hello" ), 0, wxALL, 10 ); - root->Add( row, 0, wxGROW ); - - row = new wxWrapSizer; - for (i = 0; i < 4; i++) - row->Add( new wxButton( this, -1, "Hello" ) ); - root->Add( row, 0, wxGROW ); + wxStaticBoxSizer *topSizer = new wxStaticBoxSizer( wxVERTICAL, this, "Wrapping check-boxes" ); + m_checkboxParent = topSizer->GetStaticBox(); + m_wrapSizer = new wxWrapSizer(wxHORIZONTAL); -#else // A number of checkboxes inside a wrap sizer - wxSizer *ps_mid = new wxStaticBoxSizer( wxVERTICAL, this, "Wrapping check-boxes" ); - wxSizer *ps_mid_wrap = new wxWrapSizer(wxHORIZONTAL); - ps_mid->Add( ps_mid_wrap, 100, wxEXPAND ); - for( int ix=0; ix<6; ix++ ) - ps_mid_wrap->Add( new wxCheckBox(this,wxID_ANY,wxString::Format("Option %d",ix+1)), 0, wxALIGN_CENTRE|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - root->Add( ps_mid, 0, wxEXPAND | wxALL, 5 ); + for( int i = 0; i < 6; i++ ) + DoAddCheckbox(); + + topSizer->Add( m_wrapSizer, wxSizerFlags(1).Expand()); + root->Add( topSizer, wxSizerFlags().Expand().Border()); // A shaped item inside a box sizer - wxSizer *ps_bottom = new wxStaticBoxSizer( wxVERTICAL, this, "With wxSHAPED item" ); - wxSizer *ps_bottom_box = new wxBoxSizer(wxHORIZONTAL); - ps_bottom->Add( ps_bottom_box, 100, wxEXPAND ); - ps_bottom_box->Add( new wxListBox(this,wxID_ANY,wxPoint(0,0),wxSize(70,70)), 0, wxEXPAND|wxSHAPED ); - ps_bottom_box->Add( 10,10 ); - ps_bottom_box->Add( new wxCheckBox(this,wxID_ANY,"A much longer option..."), 100, 0, 5 ); - - root->Add( ps_bottom, 1, wxEXPAND | wxALL, 5 ); -#endif + wxSizer *bottomSizer = new wxStaticBoxSizer( wxVERTICAL, this, "With wxSHAPED item" ); + wxSizer *horzBoxSizer = new wxBoxSizer(wxHORIZONTAL); + bottomSizer->Add( horzBoxSizer, 100, wxEXPAND ); + horzBoxSizer->Add( new wxListBox(this,wxID_ANY,wxPoint(0,0),wxSize(70,70)), 0, wxEXPAND|wxSHAPED ); + horzBoxSizer->Add( 10,10 ); + horzBoxSizer->Add( new wxCheckBox(this,wxID_ANY,"A much longer option..."), 100, 0, 5 ); + + root->Add( bottomSizer, 1, wxEXPAND | wxALL, 5 ); // Set sizer for window SetSizerAndFit( root ); } +void MyWrapSizerFrame::DoAddCheckbox() +{ + m_wrapSizer->Add(new wxCheckBox + ( + m_checkboxParent, + wxID_ANY, + wxString::Format + ( + "Option %d", + (int)m_wrapSizer->GetItemCount() + 1 + ) + ), + wxSizerFlags().Centre().Border()); +} + +void MyWrapSizerFrame::OnAddCheckbox(wxCommandEvent& WXUNUSED(event)) +{ + DoAddCheckbox(); + Layout(); +} + +void MyWrapSizerFrame::OnRemoveCheckbox(wxCommandEvent& WXUNUSED(event)) +{ + if ( m_wrapSizer->IsEmpty() ) + { + wxLogStatus(this, "No more checkboxes to remove."); + return; + } + + delete m_wrapSizer->GetItem(m_wrapSizer->GetItemCount() - 1)->GetWindow(); + Layout(); +}