+void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
+{
+ Close(true);
+}
+
+void MyFrame::TestFlexSizers(wxCommandEvent& WXUNUSED(event) )
+{
+ MyFlexSizerFrame *newFrame = new MyFlexSizerFrame(_T("Flex Sizer Test Frame"), 50, 50);
+ newFrame->Show(true);
+}
+
+void MyFrame::TestNotebookSizers(wxCommandEvent& WXUNUSED(event) )
+{
+ MySizerDialog dialog( this, _T("Notebook Sizer Test Dialog") );
+
+ dialog.ShowModal();
+}
+
+
+void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
+{
+ (void)wxMessageBox(_T("wxWidgets GUI library layout demo\n"),
+ _T("About Layout Demo"), wxOK|wxICON_INFORMATION);
+}
+
+void MyFrame::TestGridBagSizer(wxCommandEvent& WXUNUSED(event) )
+{
+ MyGridBagSizerFrame *newFrame = new
+ MyGridBagSizerFrame(_T("wxGridBagSizer Test Frame"), 50, 50);
+ newFrame->Show(true);
+}
+
+
+// ----------------------------------------------------------------------------
+// MyFlexSizerFrame
+// ----------------------------------------------------------------------------
+
+void MyFlexSizerFrame::InitFlexSizer(wxFlexGridSizer *sizer)
+{
+ for ( int i = 0; i < 3; i++ )
+ {
+ for ( int j = 0; j < 3; j++ )
+ {
+ sizer->Add(new wxStaticText
+ (
+ this,
+ wxID_ANY,
+ wxString::Format(_T("(%d, %d)"), i + 1, j + 1),
+ wxDefaultPosition,
+ wxDefaultSize,
+ wxALIGN_CENTER
+ ),
+ 0, wxEXPAND | wxALIGN_CENTER_VERTICAL | wxALL, 3);
+ }
+ }
+}
+
+MyFlexSizerFrame::MyFlexSizerFrame(const wxChar *title, int x, int y )
+ : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y) )
+{
+ wxFlexGridSizer *sizerFlex;
+
+ // consttuct the first column
+ wxSizer *sizerCol1 = new wxBoxSizer(wxVERTICAL);
+ sizerCol1->Add(new wxStaticText(this, wxID_ANY, _T("Ungrowable:")), 0, wxCENTER | wxTOP, 20);
+ sizerFlex = new wxFlexGridSizer(3, 3);
+ InitFlexSizer(sizerFlex);
+ sizerCol1->Add(sizerFlex, 1, wxALL | wxEXPAND, 10);
+
+ sizerCol1->Add(new wxStaticText(this, wxID_ANY, _T("Growable middle column:")), 0, wxCENTER | wxTOP, 20);
+ sizerFlex = new wxFlexGridSizer(3, 3);
+ InitFlexSizer(sizerFlex);
+ 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);
+ sizerFlex = new wxFlexGridSizer(3, 3);
+ InitFlexSizer(sizerFlex);
+ 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);
+ sizerFlex = new wxFlexGridSizer(3, 3);
+ InitFlexSizer(sizerFlex);
+ sizerFlex->AddGrowableCol(0, 1);
+ sizerFlex->AddGrowableCol(1, 2);
+ sizerFlex->AddGrowableCol(2, 3);
+ sizerCol1->Add(sizerFlex, 1, wxALL | wxEXPAND, 10);
+
+ // 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);
+ sizerFlex = new wxFlexGridSizer(3, 3);
+ InitFlexSizer(sizerFlex);
+ 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);
+ sizerFlex = new wxFlexGridSizer(3, 3);
+ InitFlexSizer(sizerFlex);
+ 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);
+ sizerFlex = new wxFlexGridSizer(3, 3);
+ InitFlexSizer(sizerFlex);
+ 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);
+ sizerFlex = new wxFlexGridSizer(3, 3);
+ InitFlexSizer(sizerFlex);
+ sizerFlex->AddGrowableCol(1);
+ sizerFlex->AddGrowableRow(1);
+ sizerFlex->SetFlexibleDirection(wxHORIZONTAL);
+ sizerFlex->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_ALL);
+ sizerCol2->Add(sizerFlex, 1, wxALL | wxEXPAND, 10);
+
+ // add both columns to grid sizer
+ wxGridSizer *sizerTop = new wxGridSizer(2, 0, 20);
+ sizerTop->Add(sizerCol1, 1, wxEXPAND);
+ sizerTop->Add(sizerCol2, 1, wxEXPAND);
+
+ SetSizer(sizerTop);
+ sizerTop->SetSizeHints(this);
+}
+
+// ----------------------------------------------------------------------------
+// MySizerDialog
+// ----------------------------------------------------------------------------
+
+MySizerDialog::MySizerDialog(wxWindow *parent, const wxChar *title)
+ : wxDialog(parent, wxID_ANY, wxString(title))
+{
+ // Begin with first hierarchy: a notebook at the top and
+ // and OK button at the bottom.
+
+ wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
+
+ wxNotebook *notebook = new wxNotebook( this, wxID_ANY );
+ topsizer->Add( notebook, 1, wxGROW );
+
+ wxButton *button = new wxButton( this, wxID_OK, _T("OK") );
+ topsizer->Add( button, 0, wxALIGN_RIGHT | wxALL, 10 );
+
+ // First page: one big text ctrl
+ wxTextCtrl *multi = new wxTextCtrl( notebook, wxID_ANY, _T("TextCtrl."), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
+ notebook->AddPage( multi, _T("Page One") );