added test of box sizer proportions

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34832 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-07-13 10:08:52 +00:00
parent cb81f1a6f1
commit 7235f8e178
2 changed files with 94 additions and 11 deletions

View File

@@ -2,10 +2,11 @@
// Name: layout.cpp // Name: layout.cpp
// Purpose: Layout sample // Purpose: Layout sample
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by: Robin Dunn, Vadim Zeitlin
// Created: 04/01/98 // Created: 04/01/98
// RCS-ID: $Id$ // RCS-ID: $Id$
// Copyright: (c) Julian Smart // Copyright: (c) 1998 Julian Smart
// 2005 Vadim Zeitlin
// Licence: wxWindows license // Licence: wxWindows license
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@@ -28,6 +29,7 @@
#include "wx/gbsizer.h" #include "wx/gbsizer.h"
#include "wx/statline.h" #include "wx/statline.h"
#include "wx/notebook.h" #include "wx/notebook.h"
#include "wx/spinctrl.h"
#include "layout.h" #include "layout.h"
@@ -55,6 +57,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(LAYOUT_ABOUT, MyFrame::OnAbout) EVT_MENU(LAYOUT_ABOUT, MyFrame::OnAbout)
EVT_MENU(LAYOUT_QUIT, MyFrame::OnQuit) EVT_MENU(LAYOUT_QUIT, MyFrame::OnQuit)
EVT_MENU(LAYOUT_TEST_PROPORTIONS, MyFrame::TestProportions)
EVT_MENU(LAYOUT_TEST_SIZER, MyFrame::TestFlexSizers) EVT_MENU(LAYOUT_TEST_SIZER, MyFrame::TestFlexSizers)
EVT_MENU(LAYOUT_TEST_NB_SIZER, MyFrame::TestNotebookSizers) EVT_MENU(LAYOUT_TEST_NB_SIZER, MyFrame::TestNotebookSizers)
EVT_MENU(LAYOUT_TEST_GB_SIZER, MyFrame::TestGridBagSizer) EVT_MENU(LAYOUT_TEST_GB_SIZER, MyFrame::TestGridBagSizer)
@@ -69,15 +72,16 @@ MyFrame::MyFrame()
// Make a menubar // Make a menubar
wxMenu *file_menu = new wxMenu; wxMenu *file_menu = new wxMenu;
file_menu->Append(LAYOUT_TEST_SIZER, _T("Test wx&FlexSizer")); file_menu->Append(LAYOUT_TEST_PROPORTIONS, _T("&Proportions demo...\tF1"));
file_menu->Append(LAYOUT_TEST_NB_SIZER, _T("&Test notebook sizers")); file_menu->Append(LAYOUT_TEST_SIZER, _T("Test wx&FlexSizer...\tF2"));
file_menu->Append(LAYOUT_TEST_GB_SIZER, _T("Test &gridbag sizer")); file_menu->Append(LAYOUT_TEST_NB_SIZER, _T("Test &notebook sizers...\tF3"));
file_menu->Append(LAYOUT_TEST_GB_SIZER, _T("Test &gridbag sizer...\tF4"));
file_menu->AppendSeparator(); file_menu->AppendSeparator();
file_menu->Append(LAYOUT_QUIT, _T("E&xit"), _T("Quit program")); file_menu->Append(LAYOUT_QUIT, _T("E&xit"), _T("Quit program"));
wxMenu *help_menu = new wxMenu; 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; wxMenuBar *menu_bar = new wxMenuBar;
@@ -165,11 +169,16 @@ MyFrame::MyFrame()
topsizer->SetSizeHints( this ); topsizer->SetSizeHints( this );
} }
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) ) void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{ {
Close(true); Close(true);
} }
void MyFrame::TestProportions(wxCommandEvent& WXUNUSED(event))
{
(new MyProportionsFrame(this))->Show();
}
void MyFrame::TestFlexSizers(wxCommandEvent& WXUNUSED(event) ) void MyFrame::TestFlexSizers(wxCommandEvent& WXUNUSED(event) )
{ {
MyFlexSizerFrame *newFrame = new MyFlexSizerFrame(_T("Flex Sizer Test Frame"), 50, 50); MyFlexSizerFrame *newFrame = new MyFlexSizerFrame(_T("Flex Sizer Test Frame"), 50, 50);
@@ -197,6 +206,62 @@ void MyFrame::TestGridBagSizer(wxCommandEvent& WXUNUSED(event) )
newFrame->Show(true); 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 // MyFlexSizerFrame

View File

@@ -23,6 +23,7 @@ class MyFrame : public wxFrame
public: public:
MyFrame(); MyFrame();
void TestProportions(wxCommandEvent& event);
void TestFlexSizers(wxCommandEvent& event); void TestFlexSizers(wxCommandEvent& event);
void TestNotebookSizers(wxCommandEvent& event); void TestNotebookSizers(wxCommandEvent& event);
void TestGridBagSizer(wxCommandEvent& event); void TestGridBagSizer(wxCommandEvent& event);
@@ -34,6 +35,22 @@ private:
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
// a frame showing the box sizer proportions
class MyProportionsFrame : public wxFrame
{
public:
MyProportionsFrame(wxFrame *parent);
protected:
void UpdateProportions();
void OnProportionChanged(wxSpinEvent& event);
void OnProportionUpdated(wxCommandEvent& event);
wxSpinCtrl *m_spins[3]; // size can be changed without changing anything else
wxSizer *m_sizer;
};
// a frame using flex sizers for layout // a frame using flex sizers for layout
class MyFlexSizerFrame : public wxFrame class MyFlexSizerFrame : public wxFrame
{ {
@@ -84,10 +101,11 @@ private:
// controls and menu constants // controls and menu constants
enum enum
{ {
LAYOUT_QUIT = wxID_EXIT,
LAYOUT_ABOUT = wxID_ABOUT,
LAYOUT_TEST_SIZER = 101, LAYOUT_TEST_SIZER = 101,
LAYOUT_TEST_NB_SIZER = 102, LAYOUT_TEST_NB_SIZER,
LAYOUT_TEST_GB_SIZER = 103 LAYOUT_TEST_GB_SIZER,
LAYOUT_TEST_PROPORTIONS,
LAYOUT_QUIT = wxID_EXIT,
LAYOUT_ABOUT = wxID_ABOUT
}; };