Make wxWrapSizer respect border around items

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57902 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2009-01-08 11:20:43 +00:00
parent 3a249a9fb3
commit e2512c2373
2 changed files with 28 additions and 8 deletions

View File

@@ -73,7 +73,7 @@ END_EVENT_TABLE()
// Define my frame constructor // Define my frame constructor
MyFrame::MyFrame() MyFrame::MyFrame()
: wxFrame(NULL, wxID_ANY, _T("wxWidgets Layout Demo"), : wxFrame(NULL, wxID_ANY, _T("wxWidgets Layout Demo"),
wxDefaultPosition, wxDefaultSize, wxPoint(30,30), wxDefaultSize,
wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
{ {
// Make a menubar // Make a menubar
@@ -85,7 +85,7 @@ MyFrame::MyFrame()
file_menu->Append(LAYOUT_TEST_GB_SIZER, _T("Test &gridbag sizer...\tF4")); 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_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_NESTED, _T("Test nested sizer in a wxPanel...\tF6"));
file_menu->Append(LAYOUT_TEST_WRAP, _T("Test wrap sizers...\tF6")); file_menu->Append(LAYOUT_TEST_WRAP, _T("Test wrap sizers...\tF7"));
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"));
@@ -118,6 +118,12 @@ MyFrame::MyFrame()
topsizer->Add( topsizer->Add(
new wxStaticText( p, wxID_ANY, _T("An explanation (wxALIGN_RIGHT).") ), new wxStaticText( p, wxID_ANY, _T("An explanation (wxALIGN_RIGHT).") ),
wxSizerFlags().Align(wxALIGN_RIGHT).Border(wxALL & ~wxBOTTOM, 5)); wxSizerFlags().Align(wxALIGN_RIGHT).Border(wxALL & ~wxBOTTOM, 5));
topsizer->Add(
new wxStaticText( p, wxID_ANY, _T("An explanation (wxALIGN_LEFT).") ),
wxSizerFlags().Align(wxALIGN_LEFT).Border(wxALL & ~wxBOTTOM, 5));
topsizer->Add(
new wxStaticText( p, wxID_ANY, _T("An explanation (wxALIGN_CENTRE_HORIZONTAL).") ),
wxSizerFlags().Align(wxALIGN_CENTRE_HORIZONTAL).Border(wxALL & ~wxBOTTOM, 5));
// 2) top: create wxTextCtrl with minimum size (100x60) // 2) top: create wxTextCtrl with minimum size (100x60)
topsizer->Add( topsizer->Add(
@@ -129,7 +135,7 @@ MyFrame::MyFrame()
new wxStaticBox(p, wxID_ANY, _T("A wxStaticBoxSizer")), wxVERTICAL ); new wxStaticBox(p, wxID_ANY, _T("A wxStaticBoxSizer")), wxVERTICAL );
statsizer->Add( statsizer->Add(
new wxStaticText(p, wxID_ANY, _T("And some TEXT inside it")), new wxStaticText(p, wxID_ANY, _T("And some TEXT inside it")),
wxSizerFlags().Center().Border(wxALL, 30)); wxSizerFlags().Border(wxALL, 30));
topsizer->Add( topsizer->Add(
statsizer, statsizer,
wxSizerFlags(1).Expand().Border(wxALL, 10)); wxSizerFlags(1).Expand().Border(wxALL, 10));
@@ -671,7 +677,7 @@ MyNestedSizerFrame::MyNestedSizerFrame(const wxString &title, int x, int y )
MyWrapSizerFrame::MyWrapSizerFrame(const wxString &title, int x, int y ) MyWrapSizerFrame::MyWrapSizerFrame(const wxString &title, int x, int y )
: wxFrame( NULL, wxID_ANY, title, wxPoint(x, y) ) : wxFrame( NULL, wxID_ANY, title, wxPoint(x, y), wxSize(200,-1) )
{ {
wxMenu *menu = new wxMenu; wxMenu *menu = new wxMenu;
@@ -684,12 +690,25 @@ MyWrapSizerFrame::MyWrapSizerFrame(const wxString &title, int x, int y )
wxBoxSizer *root = new wxBoxSizer( wxVERTICAL ); wxBoxSizer *root = new wxBoxSizer( wxVERTICAL );
#if 0
wxSizer *row = new wxWrapSizer;
int i;
for (i = 0; i < 4; i++)
row->Add( new wxButton( this, -1, "Hello" ), 0, wxALL, 10 );
root->Add( row, 0, wxGROW );
row = new wxWrapSizer;
for (i = 0; i < 4; i++)
row->Add( new wxButton( this, -1, "Hello" ) );
root->Add( row, 0, wxGROW );
#else
// A number of checkboxes inside a wrap sizer // A number of checkboxes inside a wrap sizer
wxSizer *ps_mid = new wxStaticBoxSizer( wxVERTICAL, this, "Wrapping check-boxes" ); wxSizer *ps_mid = new wxStaticBoxSizer( wxVERTICAL, this, "Wrapping check-boxes" );
wxSizer *ps_mid_wrap = new wxWrapSizer(wxHORIZONTAL); wxSizer *ps_mid_wrap = new wxWrapSizer(wxHORIZONTAL);
ps_mid->Add( ps_mid_wrap, 100, wxEXPAND ); ps_mid->Add( ps_mid_wrap, 100, wxEXPAND );
for( int ix=0; ix<6; ix++ ) 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 ); ps_mid_wrap->Add( new wxCheckBox(this,wxID_ANY,wxString::Format("Option %d",ix+1)), 0, wxALIGN_CENTRE|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
root->Add( ps_mid, 0, wxEXPAND | wxALL, 5 ); root->Add( ps_mid, 0, wxEXPAND | wxALL, 5 );
// A shaped item inside a box sizer // A shaped item inside a box sizer
@@ -701,6 +720,7 @@ MyWrapSizerFrame::MyWrapSizerFrame(const wxString &title, int x, int y )
ps_bottom_box->Add( new wxCheckBox(this,wxID_ANY,"A much longer option..."), 100, 0, 5 ); ps_bottom_box->Add( new wxCheckBox(this,wxID_ANY,"A much longer option..."), 100, 0, 5 );
root->Add( ps_bottom, 1, wxEXPAND | wxALL, 5 ); root->Add( ps_bottom, 1, wxEXPAND | wxALL, 5 );
#endif
// Set sizer for window // Set sizer for window
SetSizerAndFit( root ); SetSizerAndFit( root );

View File

@@ -425,7 +425,7 @@ void wxWrapSizer::CalcMinFromMinor(int totMinor)
wxSizerItem *item = node->GetData(); wxSizerItem *item = node->GetData();
if ( item->IsShown() ) if ( item->IsShown() )
{ {
sz = item->GetMinSize(); sz = item->GetMinSizeWithBorder();
if ( line->m_width+SizeInMajorDir(sz)>lineSize ) if ( line->m_width+SizeInMajorDir(sz)>lineSize )
{ {
line = new wxWrapLine; line = new wxWrapLine;
@@ -458,7 +458,7 @@ void wxWrapSizer::CalcMinFromMinor(int totMinor)
// Take what is not used on this line, see how much extension we get // Take what is not used on this line, see how much extension we get
// by adding first item on next line. // by adding first item on next line.
int size = lineSize-lines[ix]->m_width; // Left over at end of this line int size = lineSize-lines[ix]->m_width; // Left over at end of this line
int extSize = GetSizeInMajorDir(lines[ix+1]->m_first->GetMinSize()) - size; int extSize = GetSizeInMajorDir(lines[ix+1]->m_first->GetMinSizeWithBorder()) - size;
if ( (extSize>=tailSize && (extSize<bestExtSize || bestExtSize<tailSize)) || if ( (extSize>=tailSize && (extSize<bestExtSize || bestExtSize<tailSize)) ||
(extSize>bestExtSize && bestExtSize<tailSize) ) (extSize>bestExtSize && bestExtSize<tailSize) )
bestExtSize = extSize; bestExtSize = extSize;
@@ -527,7 +527,7 @@ void wxWrapSizer::RecalcSizes()
if ( !item->IsShown() ) if ( !item->IsShown() )
continue; continue;
wxSize minItemSize = item->GetMinSize(); wxSize minItemSize = item->GetMinSizeWithBorder();
const int itemMajor = SizeInMajorDir(minItemSize); const int itemMajor = SizeInMajorDir(minItemSize);
const int itemMinor = SizeInMinorDir(minItemSize); const int itemMinor = SizeInMinorDir(minItemSize);
if ( itemMajor > 0 && itemMajor < m_minItemMajor ) if ( itemMajor > 0 && itemMajor < m_minItemMajor )