X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e5544e77ecdf73269be6d3555b109407d0b9f62b..b9efe021b554fa3967d1442cf758435c5cd5ae8f:/samples/layout/layout.cpp diff --git a/samples/layout/layout.cpp b/samples/layout/layout.cpp index 17be24a877..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 @@ -96,6 +92,8 @@ MyFrame::MyFrame() 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. @@ -104,19 +102,19 @@ 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).") ), + 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), + 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")), + new wxStaticText(p, wxID_ANY, _T("And some TEXT inside it")), wxSizerFlags().Center().Border(wxALL, 30)); topsizer->Add( statsizer, @@ -124,17 +122,17 @@ MyFrame::MyFrame() // 2.7) And a test of wxGridSizer wxGridSizer *gridsizer = new wxGridSizer(2, 5, 5); - gridsizer->Add(new wxStaticText(this, wxID_ANY, _T("Label")), + gridsizer->Add(new wxStaticText(p, wxID_ANY, _T("Label")), wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL)); - gridsizer->Add(new wxTextCtrl(this, wxID_ANY, _T("Grid sizer demo")), + gridsizer->Add(new wxTextCtrl(p, wxID_ANY, _T("Grid sizer demo")), wxSizerFlags(1).Align(wxGROW | wxALIGN_CENTER_VERTICAL)); - gridsizer->Add(new wxStaticText(this, wxID_ANY, _T("Another label")), + gridsizer->Add(new wxStaticText(p, wxID_ANY, _T("Another label")), wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL)); - gridsizer->Add(new wxTextCtrl(this, wxID_ANY, _T("More text")), + gridsizer->Add(new wxTextCtrl(p, wxID_ANY, _T("More text")), wxSizerFlags(1).Align(wxGROW | wxALIGN_CENTER_VERTICAL)); - gridsizer->Add(new wxStaticText(this, wxID_ANY, _T("Final label")), + gridsizer->Add(new wxStaticText(p, wxID_ANY, _T("Final label")), wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL)); - gridsizer->Add(new wxTextCtrl(this, wxID_ANY, _T("And yet more text")), + gridsizer->Add(new wxTextCtrl(p, wxID_ANY, _T("And yet more text")), wxSizerFlags().Align(wxGROW | wxALIGN_CENTER_VERTICAL)); topsizer->Add( gridsizer, @@ -144,7 +142,7 @@ MyFrame::MyFrame() #if wxUSE_STATLINE // 3) middle: create wxStaticLine with minimum size (3x3) topsizer->Add( - new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), + new wxStaticLine( p, wxID_ANY, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), wxSizerFlags().Expand()); #endif // wxUSE_STATLINE @@ -152,19 +150,19 @@ MyFrame::MyFrame() // 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") ), + 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)") ), + new wxButton( p, wxID_ANY, _T("(wxCENTER)") ), wxSizerFlags().Border(wxALL, 7)); 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) ) @@ -204,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++ ) { @@ -212,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, @@ -228,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); @@ -258,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); @@ -296,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); } @@ -365,7 +364,7 @@ enum { GBS_SHOW_BTN, GBS_MOVE_BTN1, GBS_MOVE_BTN2, - + GBS_MAX, }; @@ -385,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) ); @@ -401,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 @@ -410,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); @@ -460,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;