X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/be5a51fb592f3fa2ba38ac6cd1e488d6d806058c..b9efe021b554fa3967d1442cf758435c5cd5ae8f:/samples/layout/layout.cpp diff --git a/samples/layout/layout.cpp b/samples/layout/layout.cpp index ad7d19a860..827d5a0942 100644 --- a/samples/layout/layout.cpp +++ b/samples/layout/layout.cpp @@ -37,10 +37,6 @@ IMPLEMENT_APP(MyApp) -MyApp::MyApp() -{ -} - bool MyApp::OnInit() { // Create the main frame window @@ -61,7 +57,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(LAYOUT_TEST_SIZER, MyFrame::TestFlexSizers) EVT_MENU(LAYOUT_TEST_NB_SIZER, MyFrame::TestNotebookSizers) - EVT_MENU(LAYOUT_TEST_GB_SIZER, MyFrame::TestGridBagSizer) + EVT_MENU(LAYOUT_TEST_GB_SIZER, MyFrame::TestGridBagSizer) END_EVENT_TABLE() // Define my frame constructor @@ -91,10 +87,13 @@ MyFrame::MyFrame() // Associate the menu bar with the frame SetMenuBar(menu_bar); +#if wxUSE_STATUSBAR CreateStatusBar(2); SetStatusText(_T("wxWidgets layout demo")); +#endif // wxUSE_STATUSBAR - + wxPanel* p = new wxPanel(this, -1); + // we want to get a dialog that is stretchable because it // has a text ctrl in the middle. at the bottom, we have // two buttons which. @@ -103,81 +102,67 @@ MyFrame::MyFrame() // 1) top: create wxStaticText with minimum size equal to its default size topsizer->Add( - new wxStaticText( this, wxID_ANY, _T("An explanation (wxALIGN_RIGHT).") ), - 0, // make vertically unstretchable - wxALIGN_RIGHT | // right align text - wxTOP | wxLEFT | wxRIGHT, // make border all around except wxBOTTOM - 5 ); // set border width to 5 + new wxStaticText( p, wxID_ANY, _T("An explanation (wxALIGN_RIGHT).") ), + wxSizerFlags().Align(wxALIGN_RIGHT).Border(wxALL & ~wxBOTTOM, 5)); // 2) top: create wxTextCtrl with minimum size (100x60) topsizer->Add( - new wxTextCtrl( this, wxID_ANY, _T("My text (wxEXPAND)."), wxDefaultPosition, wxSize(100,60), wxTE_MULTILINE), - 1, // make vertically stretchable - wxEXPAND | // make horizontally stretchable - wxALL, // and make border all around - 5 ); // set border width to 5 + new wxTextCtrl( p, wxID_ANY, _T("My text (wxEXPAND)."), wxDefaultPosition, wxSize(100,60), wxTE_MULTILINE), + wxSizerFlags(1).Expand().Border(wxALL, 5)); // 2.5) Gratuitous test of wxStaticBoxSizers wxBoxSizer *statsizer = new wxStaticBoxSizer( - new wxStaticBox(this, wxID_ANY, _T("A wxStaticBoxSizer")), - wxVERTICAL ); + new wxStaticBox(p, wxID_ANY, _T("A wxStaticBoxSizer")), wxVERTICAL ); statsizer->Add( - new wxStaticText(this, wxID_ANY, _T("And some TEXT inside it")), - 0, - wxCENTER | - wxALL, - 30); - topsizer->Add(statsizer, 1, wxEXPAND | wxALL, 10); + new wxStaticText(p, wxID_ANY, _T("And some TEXT inside it")), + wxSizerFlags().Center().Border(wxALL, 30)); + topsizer->Add( + statsizer, + wxSizerFlags(1).Expand().Border(wxALL, 10)); // 2.7) And a test of wxGridSizer wxGridSizer *gridsizer = new wxGridSizer(2, 5, 5); - gridsizer->Add(new wxStaticText(this, wxID_ANY, _T("Label")), 0, - wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); - gridsizer->Add(new wxTextCtrl(this, wxID_ANY, _T("Grid sizer demo")), 1, - wxGROW | wxALIGN_CENTER_VERTICAL); - gridsizer->Add(new wxStaticText(this, wxID_ANY, _T("Another label")), 0, - wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); - gridsizer->Add(new wxTextCtrl(this, wxID_ANY, _T("More text")), 1, - wxGROW | wxALIGN_CENTER_VERTICAL); - gridsizer->Add(new wxStaticText(this, wxID_ANY, _T("Final label")), 0, - wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); - gridsizer->Add(new wxTextCtrl(this, wxID_ANY, _T("And yet more text")), 1, - wxGROW | wxALIGN_CENTER_VERTICAL); - topsizer->Add(gridsizer, 1, wxGROW | wxALL, 10); - - + gridsizer->Add(new wxStaticText(p, wxID_ANY, _T("Label")), + wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL)); + gridsizer->Add(new wxTextCtrl(p, wxID_ANY, _T("Grid sizer demo")), + wxSizerFlags(1).Align(wxGROW | wxALIGN_CENTER_VERTICAL)); + gridsizer->Add(new wxStaticText(p, wxID_ANY, _T("Another label")), + wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL)); + gridsizer->Add(new wxTextCtrl(p, wxID_ANY, _T("More text")), + wxSizerFlags(1).Align(wxGROW | wxALIGN_CENTER_VERTICAL)); + gridsizer->Add(new wxStaticText(p, wxID_ANY, _T("Final label")), + wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL)); + gridsizer->Add(new wxTextCtrl(p, wxID_ANY, _T("And yet more text")), + wxSizerFlags().Align(wxGROW | wxALIGN_CENTER_VERTICAL)); + topsizer->Add( + gridsizer, + wxSizerFlags().Proportion(1).Expand().Border(wxALL, 10)); + + +#if wxUSE_STATLINE // 3) middle: create wxStaticLine with minimum size (3x3) topsizer->Add( - new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), - 0, // make vertically unstretchable - wxEXPAND | // make horizontally stretchable - wxALL, // and make border all around - 5 ); // set border width to 5 + new wxStaticLine( p, wxID_ANY, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), + wxSizerFlags().Expand()); +#endif // wxUSE_STATLINE // 4) bottom: create two centred wxButtons wxBoxSizer *button_box = new wxBoxSizer( wxHORIZONTAL ); button_box->Add( - new wxButton( this, wxID_ANY, _T("Two buttons in a box") ), - 0, // make horizontally unstretchable - wxALL, // make border all around - 7 ); // set border width to 7 + new wxButton( p, wxID_ANY, _T("Two buttons in a box") ), + wxSizerFlags().Border(wxALL, 7)); button_box->Add( - new wxButton( this, wxID_ANY, _T("(wxCENTER)") ), - 0, // make horizontally unstretchable - wxALL, // make border all around - 7 ); // set border width to 7 + new wxButton( p, wxID_ANY, _T("(wxCENTER)") ), + wxSizerFlags().Border(wxALL, 7)); - topsizer->Add( - button_box, - 0, // make vertically unstretchable - wxCENTER ); // no border and centre horizontally + topsizer->Add(button_box, wxSizerFlags().Center()); + p->SetSizer( topsizer ); + // don't allow frame to get smaller than what the sizers tell it and also set // the initial size as calculated by the sizers topsizer->SetSizeHints( this ); - - SetSizer( topsizer ); } void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) ) @@ -217,7 +202,7 @@ void MyFrame::TestGridBagSizer(wxCommandEvent& WXUNUSED(event) ) // MyFlexSizerFrame // ---------------------------------------------------------------------------- -void MyFlexSizerFrame::InitFlexSizer(wxFlexGridSizer *sizer) +void MyFlexSizerFrame::InitFlexSizer(wxFlexGridSizer *sizer, wxWindow* parent) { for ( int i = 0; i < 3; i++ ) { @@ -225,7 +210,7 @@ void MyFlexSizerFrame::InitFlexSizer(wxFlexGridSizer *sizer) { sizer->Add(new wxStaticText ( - this, + parent, wxID_ANY, wxString::Format(_T("(%d, %d)"), i + 1, j + 1), wxDefaultPosition, @@ -241,29 +226,30 @@ MyFlexSizerFrame::MyFlexSizerFrame(const wxChar *title, int x, int y ) : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y) ) { wxFlexGridSizer *sizerFlex; + wxPanel* p = new wxPanel(this, -1); // consttuct the first column wxSizer *sizerCol1 = new wxBoxSizer(wxVERTICAL); - sizerCol1->Add(new wxStaticText(this, wxID_ANY, _T("Ungrowable:")), 0, wxCENTER | wxTOP, 20); + sizerCol1->Add(new wxStaticText(p, wxID_ANY, _T("Ungrowable:")), 0, wxCENTER | wxTOP, 20); sizerFlex = new wxFlexGridSizer(3, 3); - InitFlexSizer(sizerFlex); + InitFlexSizer(sizerFlex, p); sizerCol1->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); - sizerCol1->Add(new wxStaticText(this, wxID_ANY, _T("Growable middle column:")), 0, wxCENTER | wxTOP, 20); + sizerCol1->Add(new wxStaticText(p, wxID_ANY, _T("Growable middle column:")), 0, wxCENTER | wxTOP, 20); sizerFlex = new wxFlexGridSizer(3, 3); - InitFlexSizer(sizerFlex); + InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerCol1->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); - sizerCol1->Add(new wxStaticText(this, wxID_ANY, _T("Growable middle row:")), 0, wxCENTER | wxTOP, 20); + sizerCol1->Add(new wxStaticText(p, wxID_ANY, _T("Growable middle row:")), 0, wxCENTER | wxTOP, 20); sizerFlex = new wxFlexGridSizer(3, 3); - InitFlexSizer(sizerFlex); + InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableRow(1); sizerCol1->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); - sizerCol1->Add(new wxStaticText(this, wxID_ANY, _T("All growable columns:")), 0, wxCENTER | wxTOP, 20); + sizerCol1->Add(new wxStaticText(p, wxID_ANY, _T("All growable columns:")), 0, wxCENTER | wxTOP, 20); sizerFlex = new wxFlexGridSizer(3, 3); - InitFlexSizer(sizerFlex); + InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(0, 1); sizerFlex->AddGrowableCol(1, 2); sizerFlex->AddGrowableCol(2, 3); @@ -271,33 +257,33 @@ MyFlexSizerFrame::MyFlexSizerFrame(const wxChar *title, int x, int y ) // the second one wxSizer *sizerCol2 = new wxBoxSizer(wxVERTICAL); - sizerCol2->Add(new wxStaticText(this, wxID_ANY, _T("Growable middle row and column:")), 0, wxCENTER | wxTOP, 20); + sizerCol2->Add(new wxStaticText(p, wxID_ANY, _T("Growable middle row and column:")), 0, wxCENTER | wxTOP, 20); sizerFlex = new wxFlexGridSizer(3, 3); - InitFlexSizer(sizerFlex); + InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerFlex->AddGrowableRow(1); sizerCol2->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); - sizerCol2->Add(new wxStaticText(this, wxID_ANY, _T("Same with horz flex direction")), 0, wxCENTER | wxTOP, 20); + sizerCol2->Add(new wxStaticText(p, wxID_ANY, _T("Same with horz flex direction")), 0, wxCENTER | wxTOP, 20); sizerFlex = new wxFlexGridSizer(3, 3); - InitFlexSizer(sizerFlex); + InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerFlex->AddGrowableRow(1); sizerFlex->SetFlexibleDirection(wxHORIZONTAL); sizerCol2->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); - sizerCol2->Add(new wxStaticText(this, wxID_ANY, _T("Same with grow mode == \"none\"")), 0, wxCENTER | wxTOP, 20); + sizerCol2->Add(new wxStaticText(p, wxID_ANY, _T("Same with grow mode == \"none\"")), 0, wxCENTER | wxTOP, 20); sizerFlex = new wxFlexGridSizer(3, 3); - InitFlexSizer(sizerFlex); + InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerFlex->AddGrowableRow(1); sizerFlex->SetFlexibleDirection(wxHORIZONTAL); sizerFlex->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_NONE); sizerCol2->Add(sizerFlex, 1, wxALL | wxEXPAND, 10); - sizerCol2->Add(new wxStaticText(this, wxID_ANY, _T("Same with grow mode == \"all\"")), 0, wxCENTER | wxTOP, 20); + sizerCol2->Add(new wxStaticText(p, wxID_ANY, _T("Same with grow mode == \"all\"")), 0, wxCENTER | wxTOP, 20); sizerFlex = new wxFlexGridSizer(3, 3); - InitFlexSizer(sizerFlex); + InitFlexSizer(sizerFlex, p); sizerFlex->AddGrowableCol(1); sizerFlex->AddGrowableRow(1); sizerFlex->SetFlexibleDirection(wxHORIZONTAL); @@ -309,7 +295,7 @@ MyFlexSizerFrame::MyFlexSizerFrame(const wxChar *title, int x, int y ) sizerTop->Add(sizerCol1, 1, wxEXPAND); sizerTop->Add(sizerCol2, 1, wxEXPAND); - SetSizer(sizerTop); + p->SetSizer(sizerTop); sizerTop->SetSizeHints(this); } @@ -326,8 +312,7 @@ MySizerDialog::MySizerDialog(wxWindow *parent, const wxChar *title) wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); wxNotebook *notebook = new wxNotebook( this, wxID_ANY ); - wxNotebookSizer *nbs = new wxNotebookSizer( notebook ); - topsizer->Add( nbs, 1, wxGROW ); + topsizer->Add( notebook, 1, wxGROW ); wxButton *button = new wxButton( this, wxID_OK, _T("OK") ); topsizer->Add( button, 0, wxALIGN_RIGHT | wxALL, 10 ); @@ -379,7 +364,7 @@ enum { GBS_SHOW_BTN, GBS_MOVE_BTN1, GBS_MOVE_BTN2, - + GBS_MAX, }; @@ -399,11 +384,11 @@ MyGridBagSizerFrame::MyGridBagSizerFrame(const wxChar *title, int x, int y ) m_panel = p; m_gbs = new wxGridBagSizer(); - + m_gbs->Add( new wxStaticText(p, wxID_ANY, gbsDescription), POS(0,0), SPAN(1, 7), wxALIGN_CENTER | wxALL, 5); - + m_gbs->Add( TEXTCTRL("pos(1,0)"), POS(1,0) ); m_gbs->Add( TEXTCTRL("pos(1,1)"), POS(1,1) ); m_gbs->Add( TEXTCTRL("pos(2,0)"), POS(2,0) ); @@ -415,7 +400,7 @@ MyGridBagSizerFrame::MyGridBagSizerFrame(const wxChar *title, int x, int y ) m_gbs->Add( TEXTCTRL("pos(5,4)"), POS(5,4), wxDefaultSpan, wxEXPAND ); m_gbs->Add( TEXTCTRL("pos(6,5)"), POS(6,5), wxDefaultSpan, wxEXPAND ); m_gbs->Add( TEXTCTRL("pos(7,6)"), POS(7,6) ); - + //m_gbs->Add( TEXTCTRL("bad position"), POS(4,3) ); // Test for assert //m_gbs->Add( TEXTCTRL("bad position"), POS(5,3) ); // Test for assert @@ -424,28 +409,28 @@ MyGridBagSizerFrame::MyGridBagSizerFrame(const wxChar *title, int x, int y ) m_moveBtn2 = new wxButton(p, GBS_MOVE_BTN2, _T("Move this to (3,6)")); m_gbs->Add( m_moveBtn1, POS(10,2) ); m_gbs->Add( m_moveBtn2, POS(10,3) ); - + m_hideBtn = new wxButton(p, GBS_HIDE_BTN, _T("Hide this item -->")); m_gbs->Add(m_hideBtn, POS(12, 3)); m_hideTxt = new wxTextCtrl(p, wxID_ANY, _T("pos(12,4), size(150, -1)"), wxDefaultPosition, wxSize(150,-1)); m_gbs->Add( m_hideTxt, POS(12,4) ); - + m_showBtn = new wxButton(p, GBS_SHOW_BTN, _T("<-- Show it again")); m_gbs->Add(m_showBtn, POS(12, 5)); m_showBtn->Disable(); m_gbs->Add(10,10, POS(14,0)); - + m_gbs->AddGrowableRow(3); m_gbs->AddGrowableCol(2); - + p->SetSizerAndFit(m_gbs); SetClientSize(p->GetSize()); } - + void MyGridBagSizerFrame::OnHideBtn(wxCommandEvent&) { m_gbs->Hide(m_hideTxt); @@ -474,14 +459,14 @@ void MyGridBagSizerFrame::OnMoveBtn(wxCommandEvent& event) m_gbs->SetItemPosition(btn, m_lastPos); btn->SetLabel(_T("Move this to (3,6)")); } - else + else { if ( m_gbs->CheckForIntersection(wxGBPosition(3,6), wxGBSpan(1,1)) ) wxMessageBox( _T("wxGridBagSizer will not allow items to be in the same cell as\n\ another item, so this operation will fail. You will also get an assert\n\ when compiled in debug mode."), _T("Warning"), wxOK | wxICON_INFORMATION); - + if ( m_gbs->SetItemPosition(btn, wxGBPosition(3,6)) ) { m_lastPos = curPos;