X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/004f4002877acc09d8bc213602f55b22bdbae345..3214ac5ad1d515d917b8273c2d2af4c4287b7a8b:/samples/layout/layout.cpp diff --git a/samples/layout/layout.cpp b/samples/layout/layout.cpp index 58762c05fe..110b6ef213 100644 --- a/samples/layout/layout.cpp +++ b/samples/layout/layout.cpp @@ -41,6 +41,9 @@ IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + // Create the main frame window MyFrame *frame = new MyFrame; @@ -61,6 +64,9 @@ 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_SET_MINIMAL, MyFrame::TestSetMinimal) + EVT_MENU(LAYOUT_TEST_NESTED, MyFrame::TestNested) + EVT_MENU(LAYOUT_TEST_WRAP, MyFrame::TestWrap) END_EVENT_TABLE() // Define my frame constructor @@ -76,6 +82,9 @@ MyFrame::MyFrame() 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->Append(LAYOUT_TEST_SET_MINIMAL, _T("Test Set&ItemMinSize...\tF5")); + file_menu->Append(LAYOUT_TEST_NESTED, _T("Test nested sizer in a wxPanel...\tF6")); + file_menu->Append(LAYOUT_TEST_WRAP, _T("Test wrap sizers...\tF6")); file_menu->AppendSeparator(); file_menu->Append(LAYOUT_QUIT, _T("E&xit"), _T("Quit program")); @@ -96,8 +105,8 @@ MyFrame::MyFrame() SetStatusText(_T("wxWidgets layout demo")); #endif // wxUSE_STATUSBAR - wxPanel* p = new wxPanel(this, -1); - + 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. @@ -163,7 +172,7 @@ MyFrame::MyFrame() 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 ); @@ -192,6 +201,24 @@ void MyFrame::TestNotebookSizers(wxCommandEvent& WXUNUSED(event) ) dialog.ShowModal(); } +void MyFrame::TestSetMinimal(wxCommandEvent& WXUNUSED(event) ) +{ + MySimpleSizerFrame *newFrame = new MySimpleSizerFrame(_T("Simple Sizer Test Frame"), 50, 50); + newFrame->Show(true); +} + +void MyFrame::TestNested(wxCommandEvent& WXUNUSED(event) ) +{ + MyNestedSizerFrame *newFrame = new MyNestedSizerFrame(_T("Nested Sizer Test Frame"), 50, 50); + newFrame->Show(true); +} + +void MyFrame::TestWrap(wxCommandEvent& WXUNUSED(event) ) +{ + MyWrapSizerFrame *newFrame = new MyWrapSizerFrame(_T("Wrap Sizer Test Frame"), 50, 50); + newFrame->Show(true); +} + void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) { @@ -287,11 +314,11 @@ void MyFlexSizerFrame::InitFlexSizer(wxFlexGridSizer *sizer, wxWindow* parent) } } -MyFlexSizerFrame::MyFlexSizerFrame(const wxChar *title, int x, int y ) +MyFlexSizerFrame::MyFlexSizerFrame(const wxString &title, int x, int y ) : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y) ) { wxFlexGridSizer *sizerFlex; - wxPanel* p = new wxPanel(this, -1); + wxPanel* p = new wxPanel(this, wxID_ANY); // consttuct the first column wxSizer *sizerCol1 = new wxBoxSizer(wxVERTICAL); @@ -368,7 +395,7 @@ MyFlexSizerFrame::MyFlexSizerFrame(const wxChar *title, int x, int y ) // MySizerDialog // ---------------------------------------------------------------------------- -MySizerDialog::MySizerDialog(wxWindow *parent, const wxChar *title) +MySizerDialog::MySizerDialog(wxWindow *parent, const wxString &title) : wxDialog(parent, wxID_ANY, wxString(title)) { // Begin with first hierarchy: a notebook at the top and @@ -392,9 +419,9 @@ MySizerDialog::MySizerDialog(wxWindow *parent, const wxChar *title) wxSizer *panelsizer = new wxBoxSizer( wxVERTICAL ); - wxTextCtrl *text = new wxTextCtrl( panel, wxID_ANY, _T("TextLine 1."), wxDefaultPosition, wxSize(250,-1) ); + wxTextCtrl *text = new wxTextCtrl( panel, wxID_ANY, _T("TextLine 1."), wxDefaultPosition, wxSize(250,wxDefaultCoord) ); panelsizer->Add( text, 0, wxGROW|wxALL, 30 ); - text = new wxTextCtrl( panel, wxID_ANY, _T("TextLine 2."), wxDefaultPosition, wxSize(250,-1) ); + text = new wxTextCtrl( panel, wxID_ANY, _T("TextLine 2."), wxDefaultPosition, wxSize(250,wxDefaultCoord) ); panelsizer->Add( text, 0, wxGROW|wxALL, 30 ); wxButton *button2 = new wxButton( panel, wxID_ANY, _T("Hallo") ); panelsizer->Add( button2, 0, wxALIGN_RIGHT | wxLEFT|wxRIGHT|wxBOTTOM, 30 ); @@ -442,7 +469,7 @@ BEGIN_EVENT_TABLE(MyGridBagSizerFrame, wxFrame) END_EVENT_TABLE() -MyGridBagSizerFrame::MyGridBagSizerFrame(const wxChar *title, int x, int y ) +MyGridBagSizerFrame::MyGridBagSizerFrame(const wxString &title, int x, int y ) : wxFrame( NULL, wxID_ANY, title, wxPoint(x, y) ) { wxPanel* p = new wxPanel(this, wxID_ANY); @@ -478,8 +505,8 @@ MyGridBagSizerFrame::MyGridBagSizerFrame(const wxChar *title, int x, int y ) 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_hideTxt = new wxTextCtrl(p, wxID_ANY, _T("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, _T("<-- Show it again")); @@ -540,3 +567,149 @@ when compiled in debug mode."), _T("Warning"), wxOK | wxICON_INFORMATION); } m_gbs->Layout(); } + +// ---------------------------------------------------------------------------- +// MySimpleSizerFrame +// ---------------------------------------------------------------------------- + +// Some IDs +enum { + ID_SET_SMALL = 1300, + ID_SET_BIG +}; + +BEGIN_EVENT_TABLE(MySimpleSizerFrame, wxFrame) + EVT_MENU( ID_SET_SMALL, MySimpleSizerFrame::OnSetSmallSize) + EVT_MENU( ID_SET_BIG, MySimpleSizerFrame::OnSetBigSize) +END_EVENT_TABLE() + +MySimpleSizerFrame::MySimpleSizerFrame(const wxString &title, int x, int y ) + : wxFrame( NULL, wxID_ANY, title, wxPoint(x, y) ) +{ + wxMenu *menu = new wxMenu; + + menu->Append(ID_SET_SMALL, _T("Make text control small\tF4")); + menu->Append(ID_SET_BIG, _T("Make text control big\tF5")); + + wxMenuBar *menu_bar = new wxMenuBar; + menu_bar->Append(menu, _T("&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(const wxString &title, int x, int y ) + : wxFrame( NULL, wxID_ANY, title, wxPoint(x, y) ) +{ + wxMenu *menu = new wxMenu; + + menu->Append(wxID_ABOUT, _T("Do nothing")); + + wxMenuBar *menu_bar = new wxMenuBar; + menu_bar->Append(menu, _T("&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 ); + + SetSizer( main_sizer); + + Layout(); + GetSizer()->Fit( this ); + GetSizer()->SetSizeHints( this ); +} + + +// ---------------------------------------------------------------------------- +// MyWrapSizerFrame +// ---------------------------------------------------------------------------- + + +MyWrapSizerFrame::MyWrapSizerFrame(const wxString &title, int x, int y ) + : wxFrame( NULL, wxID_ANY, title, wxPoint(x, y) ) +{ + wxMenu *menu = new wxMenu; + + menu->Append(wxID_ABOUT, "Do nothing"); + + wxMenuBar *menu_bar = new wxMenuBar; + menu_bar->Append(menu, "&File"); + + SetMenuBar( menu_bar ); + + wxBoxSizer *root = new wxBoxSizer( wxVERTICAL ); + + // A number of checkboxes inside a wrap sizer + wxSizer *ps_mid = new wxStaticBoxSizer( wxVERTICAL, this, "Wrapping check-boxes" ); + wxSizer *ps_mid_wrap = new wxWrapSizer(wxHORIZONTAL); + ps_mid->Add( ps_mid_wrap, 100, wxEXPAND ); + for( int ix=0; ix<6; ix++ ) + ps_mid_wrap->Add( new wxCheckBox(this,wxID_ANY,wxString::Format("Option %d",ix+1)), 0, wxALIGN_CENTRE|wxALIGN_CENTER_VERTICAL, 5 ); + root->Add( ps_mid, 0, wxEXPAND | wxALL, 5 ); + + // A shaped item inside a box sizer + wxSizer *ps_bottom = new wxStaticBoxSizer( wxVERTICAL, this, "With wxSHAPED item" ); + wxSizer *ps_bottom_box = new wxBoxSizer(wxHORIZONTAL); + ps_bottom->Add( ps_bottom_box, 100, wxEXPAND ); + ps_bottom_box->Add( new wxListBox(this,wxID_ANY,wxPoint(0,0),wxSize(70,70)), 0, wxEXPAND|wxSHAPED ); + ps_bottom_box->Add( 10,10 ); + ps_bottom_box->Add( new wxCheckBox(this,wxID_ANY,"A much longer option..."), 100, 0, 5 ); + + root->Add( ps_bottom, 1, wxEXPAND | wxALL, 5 ); + + // Set sizer for window + SetSizer( root ); + root->Fit( this ); + root->SetSizeHints( this ); +} +