X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bdbb07ede301533656f57e94a2739d6614f02524..740af654d1d20aaccad331e0eb73d113b5c0b02f:/samples/layout/layout.cpp diff --git a/samples/layout/layout.cpp b/samples/layout/layout.cpp index 827d5a0942..1b00cbbeeb 100644 --- a/samples/layout/layout.cpp +++ b/samples/layout/layout.cpp @@ -2,10 +2,11 @@ // Name: layout.cpp // Purpose: Layout sample // Author: Julian Smart -// Modified by: +// Modified by: Robin Dunn, Vadim Zeitlin // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart +// Copyright: (c) 1998 Julian Smart +// 2005 Vadim Zeitlin // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// @@ -28,6 +29,7 @@ #include "wx/gbsizer.h" #include "wx/statline.h" #include "wx/notebook.h" +#include "wx/spinctrl.h" #include "layout.h" @@ -55,6 +57,7 @@ BEGIN_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) @@ -69,15 +72,16 @@ MyFrame::MyFrame() // Make a menubar wxMenu *file_menu = new wxMenu; - file_menu->Append(LAYOUT_TEST_SIZER, _T("Test wx&FlexSizer")); - file_menu->Append(LAYOUT_TEST_NB_SIZER, _T("&Test notebook sizers")); - file_menu->Append(LAYOUT_TEST_GB_SIZER, _T("Test &gridbag sizer")); + file_menu->Append(LAYOUT_TEST_PROPORTIONS, _T("&Proportions demo...\tF1")); + file_menu->Append(LAYOUT_TEST_SIZER, _T("Test wx&FlexSizer...\tF2")); + file_menu->Append(LAYOUT_TEST_NB_SIZER, _T("Test ¬ebook sizers...\tF3")); + file_menu->Append(LAYOUT_TEST_GB_SIZER, _T("Test &gridbag sizer...\tF4")); file_menu->AppendSeparator(); file_menu->Append(LAYOUT_QUIT, _T("E&xit"), _T("Quit program")); wxMenu *help_menu = new wxMenu; - help_menu->Append(LAYOUT_ABOUT, _T("&About"), _T("About layout demo")); + help_menu->Append(LAYOUT_ABOUT, _T("&About"), _T("About layout demo...")); wxMenuBar *menu_bar = new wxMenuBar; @@ -165,11 +169,16 @@ MyFrame::MyFrame() topsizer->SetSizeHints( this ); } -void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) ) +void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); } +void MyFrame::TestProportions(wxCommandEvent& WXUNUSED(event)) +{ + (new MyProportionsFrame(this))->Show(); +} + void MyFrame::TestFlexSizers(wxCommandEvent& WXUNUSED(event) ) { MyFlexSizerFrame *newFrame = new MyFlexSizerFrame(_T("Flex Sizer Test Frame"), 50, 50); @@ -197,6 +206,62 @@ void MyFrame::TestGridBagSizer(wxCommandEvent& WXUNUSED(event) ) newFrame->Show(true); } +// ---------------------------------------------------------------------------- +// MyProportionsFrame +// ---------------------------------------------------------------------------- + +MyProportionsFrame::MyProportionsFrame(wxFrame *parent) + : wxFrame(parent, wxID_ANY, _T("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, + _T("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_COMMAND_TEXT_UPDATED, + wxCommandEventHandler(MyProportionsFrame::OnProportionUpdated)); + Connect(wxEVT_COMMAND_SPINCTRL_UPDATED, + 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 @@ -352,7 +417,7 @@ MySizerDialog::MySizerDialog(wxWindow *parent, const wxChar *title) #define POS(r, c) wxGBPosition(r,c) #define SPAN(r, c) wxGBSpan(r,c) -wxChar* gbsDescription =_T("\ +const wxChar gbsDescription[] =_T("\ 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.");