| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        layout.cpp
 
- // Purpose:     Layout sample
 
- // Author:      Julian Smart
 
- // Modified by: Robin Dunn, Vadim Zeitlin
 
- // Created:     04/01/98
 
- // Copyright:   (c) 1998 Julian Smart
 
- //                  2005 Vadim Zeitlin
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- // ----------------------------------------------------------------------------
 
- // headers
 
- // ----------------------------------------------------------------------------
 
- // For compilers that support precompilation, includes "wx/wx.h".
 
- #include "wx/wxprec.h"
 
- #ifdef __BORLANDC__
 
- #pragma hdrstop
 
- #endif
 
- #ifndef WX_PRECOMP
 
- #include "wx/wx.h"
 
- #endif
 
- #include "wx/sizer.h"
 
- #include "wx/gbsizer.h"
 
- #include "wx/statline.h"
 
- #include "wx/notebook.h"
 
- #include "wx/spinctrl.h"
 
- #include "wx/wrapsizer.h"
 
- #include "wx/generic/stattextg.h"
 
- #include "layout.h"
 
- #ifndef wxHAS_IMAGES_IN_RESOURCES
 
-     #include "../sample.xpm"
 
- #endif
 
- // ----------------------------------------------------------------------------
 
- // MyApp
 
- // ----------------------------------------------------------------------------
 
- IMPLEMENT_APP(MyApp)
 
- bool MyApp::OnInit()
 
- {
 
-   if ( !wxApp::OnInit() )
 
-       return false;
 
-   // Create the main frame window
 
-   MyFrame *frame = new MyFrame;
 
-   frame->Show(true);
 
-   return true;
 
- }
 
- // ----------------------------------------------------------------------------
 
- // MyFrame
 
- // ----------------------------------------------------------------------------
 
- wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
 
-   EVT_MENU(LAYOUT_ABOUT, MyFrame::OnAbout)
 
-   EVT_MENU(LAYOUT_QUIT, MyFrame::OnQuit)
 
-   EVT_MENU(LAYOUT_TEST_PROPORTIONS, MyFrame::TestProportions)
 
-   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_SET_MINIMAL, MyFrame::TestSetMinimal)
 
-   EVT_MENU(LAYOUT_TEST_NESTED, MyFrame::TestNested)
 
-   EVT_MENU(LAYOUT_TEST_WRAP, MyFrame::TestWrap)
 
- wxEND_EVENT_TABLE()
 
- // Define my frame constructor
 
- MyFrame::MyFrame()
 
-        : wxFrame(NULL, wxID_ANY, wxT("wxWidgets Layout Demo"))
 
- {
 
-     SetIcon(wxICON(sample));
 
-     // Make a menubar
 
-     wxMenu *file_menu = new wxMenu;
 
-     file_menu->Append(LAYOUT_TEST_PROPORTIONS, wxT("&Proportions demo...\tF1"));
 
-     file_menu->Append(LAYOUT_TEST_SIZER, wxT("Test wx&FlexSizer...\tF2"));
 
-     file_menu->Append(LAYOUT_TEST_NB_SIZER, wxT("Test ¬ebook sizers...\tF3"));
 
-     file_menu->Append(LAYOUT_TEST_GB_SIZER, wxT("Test &gridbag sizer...\tF4"));
 
-     file_menu->Append(LAYOUT_TEST_SET_MINIMAL, wxT("Test Set&ItemMinSize...\tF5"));
 
-     file_menu->Append(LAYOUT_TEST_NESTED, wxT("Test nested sizer in a wxPanel...\tF6"));
 
-     file_menu->Append(LAYOUT_TEST_WRAP, wxT("Test wrap sizers...\tF7"));
 
-     file_menu->AppendSeparator();
 
-     file_menu->Append(LAYOUT_QUIT, wxT("E&xit"), wxT("Quit program"));
 
-     wxMenu *help_menu = new wxMenu;
 
-     help_menu->Append(LAYOUT_ABOUT, wxT("&About"), wxT("About layout demo..."));
 
-     wxMenuBar *menu_bar = new wxMenuBar;
 
-     menu_bar->Append(file_menu, wxT("&File"));
 
-     menu_bar->Append(help_menu, wxT("&Help"));
 
-     // Associate the menu bar with the frame
 
-     SetMenuBar(menu_bar);
 
- #if wxUSE_STATUSBAR
 
-     CreateStatusBar(2);
 
-     SetStatusText(wxT("wxWidgets layout demo"));
 
- #endif // wxUSE_STATUSBAR
 
-     wxPanel* p = new wxPanel(this, wxID_ANY);
 
-     // 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.
 
-     wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
 
-     // 1) top: create wxStaticText with minimum size equal to its default size
 
-     topsizer->Add(
 
-         new wxStaticText( p, wxID_ANY, wxT("An explanation (wxALIGN_RIGHT).") ),
 
-         wxSizerFlags().Align(wxALIGN_RIGHT).Border(wxALL & ~wxBOTTOM, 5));
 
-     topsizer->Add(
 
-         new wxStaticText( p, wxID_ANY, wxT("An explanation (wxALIGN_LEFT).") ),
 
-         wxSizerFlags().Align(wxALIGN_LEFT).Border(wxALL & ~wxBOTTOM, 5));
 
-     topsizer->Add(
 
-         new wxStaticText( p, wxID_ANY, wxT("An explanation (wxALIGN_CENTRE_HORIZONTAL).") ),
 
-         wxSizerFlags().Align(wxALIGN_CENTRE_HORIZONTAL).Border(wxALL & ~wxBOTTOM, 5));
 
-     // 2) top: create wxTextCtrl with minimum size (100x60)
 
-     topsizer->Add(
 
-         new wxTextCtrl( p, wxID_ANY, wxT("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(p, wxID_ANY, wxT("A wxStaticBoxSizer")), wxVERTICAL );
 
-     statsizer->Add(
 
-         new wxStaticText(p, wxID_ANY, wxT("And some TEXT inside it")),
 
-         wxSizerFlags().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(p, wxID_ANY, wxT("Label")),
 
-                 wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL));
 
-     gridsizer->Add(new wxTextCtrl(p, wxID_ANY, wxT("Grid sizer demo")),
 
-                 wxSizerFlags(1).Align(wxGROW | wxALIGN_CENTER_VERTICAL));
 
-     gridsizer->Add(new wxStaticText(p, wxID_ANY, wxT("Another label")),
 
-                 wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL));
 
-     gridsizer->Add(new wxTextCtrl(p, wxID_ANY, wxT("More text")),
 
-                 wxSizerFlags(1).Align(wxGROW | wxALIGN_CENTER_VERTICAL));
 
-     gridsizer->Add(new wxStaticText(p, wxID_ANY, wxT("Final label")),
 
-                 wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL));
 
-     gridsizer->Add(new wxTextCtrl(p, wxID_ANY, wxT("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( 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( p, wxID_ANY, wxT("Two buttons in a box") ),
 
-         wxSizerFlags().Border(wxALL, 7));
 
-     button_box->Add(
 
-         new wxButton( p, wxID_ANY, wxT("(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 );
 
- }
 
- void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     Close(true);
 
- }
 
- void MyFrame::TestProportions(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     (new MyProportionsFrame(this))->Show();
 
- }
 
- void MyFrame::TestFlexSizers(wxCommandEvent& WXUNUSED(event) )
 
- {
 
-     (new MyFlexSizerFrame(this))->Show();
 
- }
 
- void MyFrame::TestNotebookSizers(wxCommandEvent& WXUNUSED(event) )
 
- {
 
-     MySizerDialog dialog( this, wxT("Notebook Sizer Test Dialog") );
 
-     dialog.ShowModal();
 
- }
 
- void MyFrame::TestSetMinimal(wxCommandEvent& WXUNUSED(event) )
 
- {
 
-     (new MySimpleSizerFrame(this))->Show();
 
- }
 
- void MyFrame::TestNested(wxCommandEvent& WXUNUSED(event) )
 
- {
 
-     (new MyNestedSizerFrame(this))->Show();
 
- }
 
- void MyFrame::TestWrap(wxCommandEvent& WXUNUSED(event) )
 
- {
 
-     (new MyWrapSizerFrame(this))->Show();
 
- }
 
- void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
 
- {
 
-     (void)wxMessageBox(wxT("wxWidgets GUI library layout demo\n"),
 
-             wxT("About Layout Demo"), wxOK|wxICON_INFORMATION);
 
- }
 
- void MyFrame::TestGridBagSizer(wxCommandEvent& WXUNUSED(event) )
 
- {
 
-     (new MyGridBagSizerFrame(this))->Show();
 
- }
 
- // ----------------------------------------------------------------------------
 
- // MyProportionsFrame
 
- // ----------------------------------------------------------------------------
 
- MyProportionsFrame::MyProportionsFrame(wxFrame *parent)
 
-                   : wxFrame(parent, wxID_ANY, wxT("Box Sizer Proportions Demo"))
 
- {
 
-     size_t n;
 
-     // create the controls
 
-     wxPanel *panel = new wxPanel(this, wxID_ANY);
 
-     for ( n = 0; n < WXSIZEOF(m_spins); n++ )
 
-     {
 
-         m_spins[n] = new wxSpinCtrl(panel);
 
-         m_spins[n]->SetValue(n);
 
-     }
 
-     // lay them out
 
-     m_sizer = new wxStaticBoxSizer(wxHORIZONTAL, panel,
 
-                 wxT("Try changing elements proportions and resizing the window"));
 
-     for ( n = 0; n < WXSIZEOF(m_spins); n++ )
 
-         m_sizer->Add(m_spins[n], wxSizerFlags().Border());
 
-     // put everything together
 
-     panel->SetSizer(m_sizer);
 
-     wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
 
-     sizerTop->Add(panel, wxSizerFlags(1).Expand().Border());
 
-     UpdateProportions();
 
-     SetSizerAndFit(sizerTop);
 
-     // and connect the events
 
-     Connect(wxEVT_TEXT,
 
-                 wxCommandEventHandler(MyProportionsFrame::OnProportionUpdated));
 
-     Connect(wxEVT_SPINCTRL,
 
-             wxSpinEventHandler(MyProportionsFrame::OnProportionChanged));
 
- }
 
- void MyProportionsFrame::UpdateProportions()
 
- {
 
-     for ( size_t n = 0; n < WXSIZEOF(m_spins); n++ )
 
-     {
 
-         m_sizer->GetItem(n)->SetProportion(m_spins[n]->GetValue());
 
-     }
 
-     m_sizer->Layout();
 
- }
 
- void MyProportionsFrame::OnProportionUpdated(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     UpdateProportions();
 
- }
 
- void MyProportionsFrame::OnProportionChanged(wxSpinEvent& WXUNUSED(event))
 
- {
 
-     UpdateProportions();
 
- }
 
- // ----------------------------------------------------------------------------
 
- //  MyFlexSizerFrame
 
- // ----------------------------------------------------------------------------
 
- void MyFlexSizerFrame::InitFlexSizer(wxFlexGridSizer *sizer, wxWindow* parent)
 
- {
 
-     for ( int i = 0; i < 3; i++ )
 
-     {
 
-         for ( int j = 0; j < 3; j++ )
 
-         {
 
-             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(wxFrame* parent)
 
-             : wxFrame(parent, wxID_ANY, "Flex Sizer Test Frame")
 
- {
 
-     wxFlexGridSizer *sizerFlex;
 
-     wxPanel* p = new wxPanel(this, wxID_ANY);
 
-     // 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, 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, 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, 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, wxSize(5, 5));
 
-     InitFlexSizer(sizerFlex, p);
 
-     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(p, wxID_ANY, wxT("Growable middle row and column:")), 0, wxCENTER | wxTOP, 20);
 
-     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, wxSize(5, 5));
 
-     InitFlexSizer(sizerFlex, p);
 
-     sizerFlex->AddGrowableCol(1);
 
-     sizerFlex->AddGrowableRow(1);
 
-     sizerFlex->SetFlexibleDirection(wxHORIZONTAL);
 
-     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, wxSize(5, 5));
 
-     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(p, wxID_ANY, wxT("Same with grow mode == \"all\"")), 0, wxCENTER | wxTOP, 20);
 
-     sizerFlex = new wxFlexGridSizer(3, 3, wxSize(5, 5));
 
-     InitFlexSizer(sizerFlex, p);
 
-     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);
 
-     p->SetSizer(sizerTop);
 
-     sizerTop->SetSizeHints(this);
 
- }
 
- // ----------------------------------------------------------------------------
 
- // MySizerDialog
 
- // ----------------------------------------------------------------------------
 
- MySizerDialog::MySizerDialog(wxWindow *parent, const wxString &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, wxT("OK") );
 
-     topsizer->Add( button, 0, wxALIGN_RIGHT | wxALL, 10 );
 
-     // First page: one big text ctrl
 
-     wxTextCtrl *multi = new wxTextCtrl( notebook, wxID_ANY, wxT("TextCtrl."), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
 
-     notebook->AddPage( multi, wxT("Page One") );
 
-     // Second page: a text ctrl and a button
 
-     wxPanel *panel = new wxPanel( notebook, wxID_ANY );
 
-     notebook->AddPage( panel, wxT("Page Two") );
 
-     wxSizer *panelsizer = new wxBoxSizer( wxVERTICAL );
 
-     wxTextCtrl *text = new wxTextCtrl( panel, wxID_ANY, wxT("TextLine 1."), wxDefaultPosition, wxSize(250,wxDefaultCoord) );
 
-     panelsizer->Add( text, 0, wxGROW|wxALL, 30 );
 
-     text = new wxTextCtrl( panel, wxID_ANY, wxT("TextLine 2."), wxDefaultPosition, wxSize(250,wxDefaultCoord) );
 
-     panelsizer->Add( text, 0, wxGROW|wxALL, 30 );
 
-     wxButton *button2 = new wxButton( panel, wxID_ANY, wxT("Hallo") );
 
-     panelsizer->Add( button2, 0, wxALIGN_RIGHT | wxLEFT|wxRIGHT|wxBOTTOM, 30 );
 
-     panel->SetSizer( panelsizer );
 
-     // Tell dialog to use sizer
 
-     SetSizerAndFit( topsizer );
 
- }
 
- // ----------------------------------------------------------------------------
 
- // MyGridBagSizerFrame
 
- // ----------------------------------------------------------------------------
 
- // some simple macros to help make the sample code below more clear
 
- #define TEXTCTRL(text)   new wxTextCtrl(p, wxID_ANY, wxT(text))
 
- #define MLTEXTCTRL(text) new wxTextCtrl(p, wxID_ANY, wxT(text), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE)
 
- #define POS(r, c)        wxGBPosition(r,c)
 
- #define SPAN(r, c)       wxGBSpan(r,c)
 
- const wxChar gbsDescription[] =wxT("\
 
- The wxGridBagSizer is similar to the wxFlexGridSizer except the items are explicitly positioned\n\
 
- in a virtual cell of the layout grid, and column or row spanning is allowed.  For example, this\n\
 
- static text is positioned at (0,0) and it spans 7 columns.");
 
- // Some IDs
 
- enum {
 
-     GBS_HIDE_BTN = 1212,
 
-     GBS_SHOW_BTN,
 
-     GBS_MOVE_BTN1,
 
-     GBS_MOVE_BTN2,
 
-     GBS_MAX
 
- };
 
- wxBEGIN_EVENT_TABLE(MyGridBagSizerFrame, wxFrame)
 
-     EVT_BUTTON( GBS_HIDE_BTN,  MyGridBagSizerFrame::OnHideBtn)
 
-     EVT_BUTTON( GBS_SHOW_BTN,  MyGridBagSizerFrame::OnShowBtn)
 
-     EVT_BUTTON( GBS_MOVE_BTN1, MyGridBagSizerFrame::OnMoveBtn)
 
-     EVT_BUTTON( GBS_MOVE_BTN2, MyGridBagSizerFrame::OnMoveBtn)
 
- wxEND_EVENT_TABLE()
 
- MyGridBagSizerFrame::MyGridBagSizerFrame(wxFrame* parent)
 
-     : wxFrame(parent, wxID_ANY, "wxGridBagSizer Test Frame")
 
- {
 
-     wxPanel* p = new wxPanel(this, wxID_ANY);
 
-     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) );
 
-     m_gbs->Add( TEXTCTRL("pos(2,1)"),   POS(2,1) );
 
-     m_gbs->Add( MLTEXTCTRL("pos(3,2), span(1,2)\nthis row and col are growable"),
 
-               POS(3,2), SPAN(1,2), wxEXPAND );
 
-     m_gbs->Add( MLTEXTCTRL("pos(4,3)\nspan(3,1)"),
 
-               POS(4,3), SPAN(3,1), wxEXPAND );
 
-     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
 
-     m_moveBtn1 = new wxButton(p, GBS_MOVE_BTN1, wxT("Move this to (3,6)"));
 
-     m_moveBtn2 = new wxButton(p, GBS_MOVE_BTN2, wxT("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, wxT("Hide this item -->"));
 
-     m_gbs->Add(m_hideBtn, POS(12, 3));
 
-     m_hideTxt = new wxTextCtrl(p, wxID_ANY, wxT("pos(12,4), size(150, wxDefaultCoord)"),
 
-                                 wxDefaultPosition, wxSize(150,wxDefaultCoord));
 
-     m_gbs->Add( m_hideTxt, POS(12,4) );
 
-     m_showBtn = new wxButton(p, GBS_SHOW_BTN, wxT("<-- 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);
 
-     m_hideBtn->Disable();
 
-     m_showBtn->Enable();
 
-     m_gbs->Layout();
 
- }
 
- void MyGridBagSizerFrame::OnShowBtn(wxCommandEvent&)
 
- {
 
-     m_gbs->Show(m_hideTxt);
 
-     m_hideBtn->Enable();
 
-     m_showBtn->Disable();
 
-     m_gbs->Layout();
 
- }
 
- void MyGridBagSizerFrame::OnMoveBtn(wxCommandEvent& event)
 
- {
 
-     wxButton* btn = (wxButton*)event.GetEventObject();
 
-     wxGBPosition curPos = m_gbs->GetItemPosition(btn);
 
-     // if it's already at the "other" spot then move it back
 
-     if (curPos == wxGBPosition(3,6))
 
-     {
 
-         m_gbs->SetItemPosition(btn, m_lastPos);
 
-         btn->SetLabel(wxT("Move this to (3,6)"));
 
-     }
 
-     else
 
-     {
 
-         if ( m_gbs->CheckForIntersection(wxGBPosition(3,6), wxGBSpan(1,1)) )
 
-             wxMessageBox(
 
- wxT("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."), wxT("Warning"), wxOK | wxICON_INFORMATION);
 
-         if ( m_gbs->SetItemPosition(btn, wxGBPosition(3,6)) )
 
-         {
 
-             m_lastPos = curPos;
 
-             btn->SetLabel(wxT("Move it back"));
 
-         }
 
-     }
 
-     m_gbs->Layout();
 
- }
 
- // ----------------------------------------------------------------------------
 
- // MySimpleSizerFrame
 
- // ----------------------------------------------------------------------------
 
- // Some IDs
 
- enum {
 
-     ID_SET_SMALL = 1300,
 
-     ID_SET_BIG
 
- };
 
- wxBEGIN_EVENT_TABLE(MySimpleSizerFrame, wxFrame)
 
-     EVT_MENU( ID_SET_SMALL, MySimpleSizerFrame::OnSetSmallSize)
 
-     EVT_MENU( ID_SET_BIG, MySimpleSizerFrame::OnSetBigSize)
 
- wxEND_EVENT_TABLE()
 
- MySimpleSizerFrame::MySimpleSizerFrame(wxFrame* parent)
 
-     : wxFrame(parent, wxID_ANY, "Simple Sizer Test Frame")
 
- {
 
-     wxMenu *menu = new wxMenu;
 
-     menu->Append(ID_SET_SMALL, wxT("Make text control small\tF4"));
 
-     menu->Append(ID_SET_BIG, wxT("Make text control big\tF5"));
 
-     wxMenuBar *menu_bar = new wxMenuBar;
 
-     menu_bar->Append(menu, wxT("&File"));
 
-     SetMenuBar( menu_bar );
 
-     wxBoxSizer *main_sizer = new wxBoxSizer( wxHORIZONTAL );
 
-     m_target = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80, wxDefaultCoord ) );
 
-     main_sizer->Add( m_target, 1, wxALL, 5 );
 
-     main_sizer->Add( new wxStaticText( this, wxID_ANY, wxT("Set alternating sizes using F4 and F5") ), 0, wxALL, 5 );
 
-     SetSizer( main_sizer);
 
-     Layout();
 
-     GetSizer()->Fit( this );
 
- }
 
- void MySimpleSizerFrame::OnSetSmallSize( wxCommandEvent& WXUNUSED(event))
 
- {
 
-     GetSizer()->SetItemMinSize( m_target, 40, -1 );
 
-     Layout();
 
-     GetSizer()->Fit( this );
 
- }
 
- void MySimpleSizerFrame::OnSetBigSize( wxCommandEvent& WXUNUSED(event))
 
- {
 
-     GetSizer()->SetItemMinSize( m_target, 140, -1 );
 
-     Layout();
 
-     GetSizer()->Fit( this );
 
- }
 
- // ----------------------------------------------------------------------------
 
- // MyNestedSizerFrame
 
- // ----------------------------------------------------------------------------
 
- MyNestedSizerFrame::MyNestedSizerFrame(wxFrame* parent)
 
-     : wxFrame(parent, wxID_ANY, "Nested Sizer Test Frame")
 
- {
 
-     wxMenu *menu = new wxMenu;
 
-     menu->Append(wxID_ABOUT, wxT("Do nothing"));
 
-     wxMenuBar *menu_bar = new wxMenuBar;
 
-     menu_bar->Append(menu, wxT("&File"));
 
-     SetMenuBar( menu_bar );
 
-     wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
 
-     main_sizer->Add( new wxStaticText( this, -1, wxT("Hello outside") ), 0, wxALIGN_CENTER );
 
-     main_sizer->Add( new wxStaticText( this, -1, wxT("Hello outside") ), 0, wxALIGN_CENTER );
 
-     main_sizer->Add( new wxStaticText( this, -1, wxT("Hello outside") ), 0, wxALIGN_CENTER );
 
-     main_sizer->Add( new wxStaticText( this, -1, wxT("Hello outside") ), 0, wxALIGN_CENTER );
 
-     wxPanel *panel = new wxPanel( this, -1, wxDefaultPosition, wxDefaultSize,
 
-                                   wxTAB_TRAVERSAL | wxSUNKEN_BORDER );
 
-     main_sizer->Add( panel, 0, wxALIGN_CENTER );
 
-     wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
 
-     panel->SetSizer( panel_sizer );
 
-     panel_sizer->Add( new wxStaticText( panel, -1, wxT("Hello inside") ) );
 
-     panel_sizer->Add( new wxStaticText( panel, -1, wxT("Hello inside") ) );
 
-     panel_sizer->Add( new wxStaticText( panel, -1, wxT("Hello inside") ) );
 
-     main_sizer->Add( new wxStaticText( this, -1, wxT("Hello outside") ), 0, wxALIGN_CENTER );
 
-     m_target = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80, wxDefaultCoord ) );
 
-     main_sizer->Add( m_target, 1, wxALL|wxGROW, 5 );
 
-     SetSizerAndFit( main_sizer);
 
- }
 
- // ----------------------------------------------------------------------------
 
- // MyWrapSizerFrame
 
- // ----------------------------------------------------------------------------
 
- wxBEGIN_EVENT_TABLE(MyWrapSizerFrame, wxFrame)
 
-     EVT_MENU(wxID_ADD, MyWrapSizerFrame::OnAddCheckbox)
 
-     EVT_MENU(wxID_REMOVE, MyWrapSizerFrame::OnRemoveCheckbox)
 
- wxEND_EVENT_TABLE()
 
- MyWrapSizerFrame::MyWrapSizerFrame(wxFrame* parent)
 
-     : wxFrame(parent, wxID_ANY, "Wrap Sizer Test Frame",
 
-               wxDefaultPosition, wxSize(200,-1))
 
- {
 
-     wxMenu *menu = new wxMenu;
 
-     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, "&Wrap sizer");
 
-     SetMenuBar( menu_bar );
 
-     wxBoxSizer *root = new wxBoxSizer( wxVERTICAL );
 
-     wxStaticBoxSizer *topSizer = new wxStaticBoxSizer( wxVERTICAL, this, "Wrapping check-boxes" );
 
-     m_checkboxParent = topSizer->GetStaticBox();
 
-     m_wrapSizer = new wxWrapSizer(wxHORIZONTAL);
 
-     // A number of checkboxes inside a wrap sizer
 
-     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 *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();
 
- }
 
 
  |