Remove wxAuiProportionalBoxSizer hack and replace it with wxBoxSizer.

The temporary workaround due to wxBoxSizer changes in 2.9.0 is not needed any
more, revert r59889 and use wxBoxSizer instead of custom
wxAuiProportionalBoxSizer again.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63707 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-03-18 15:07:32 +00:00
parent 729f53d421
commit 3f931438cc

View File

@@ -570,135 +570,6 @@ static int PaneSortFunc(wxAuiPaneInfo** p1, wxAuiPaneInfo** p2)
// this utility class implements a proportional sizer
// as it existed in wxWidgets 2.8 and before.
class wxAuiProportionalBoxSizer : public wxBoxSizer
{
public:
wxAuiProportionalBoxSizer(int orientation) : wxBoxSizer(orientation) { }
void RecalcSizes()
{
if (m_children.GetCount() == 0)
return;
int fixed_height = 0;
int fixed_width = 0;
int stretchable = 0;
wxSizerItemList::compatibility_iterator node;
// find fixed width and height, as well
// as the total stretchable proportions
node = m_children.GetFirst();
while (node)
{
wxSizerItem *item = node->GetData();
if (item->IsShown())
{
stretchable += item->GetProportion();
wxSize size(item->GetMinSizeWithBorder());
if (item->GetProportion() == 0)
{
if (m_orient == wxVERTICAL)
{
fixed_height += size.y;
fixed_width = wxMax(fixed_width, size.x);
}
else
{
fixed_width += size.x;
fixed_height = wxMax(fixed_height, size.y);
}
}
}
node = node->GetNext();
}
// delta specifies the total amount to be allocated to stretch spaces
int delta = 0;
if (stretchable)
{
if (m_orient == wxHORIZONTAL)
delta = m_size.x - fixed_width;
else
delta = m_size.y - fixed_height;
}
// go through each item and assign sizes
wxPoint pt(m_position);
node = m_children.GetFirst();
while (node)
{
wxSizerItem* item = node->GetData();
if (item->IsShown())
{
wxSize size(item->GetMinSizeWithBorder());
if (m_orient == wxVERTICAL)
{
wxCoord height = size.y;
if (item->GetProportion())
{
height = (delta * item->GetProportion()) / stretchable;
delta -= height;
stretchable -= item->GetProportion();
}
wxPoint child_pos(pt);
wxSize child_size(size.x, height);
if (item->GetFlag() & (wxEXPAND | wxSHAPED))
child_size.x = m_size.x;
else if (item->GetFlag() & wxALIGN_RIGHT)
child_pos.x += m_size.x - size.x;
else if (item->GetFlag() & (wxCENTER | wxALIGN_CENTER_HORIZONTAL))
child_pos.x += (m_size.x - size.x) / 2;
item->SetDimension(child_pos, child_size);
pt.y += height;
}
else
{
wxCoord width = size.x;
if (item->GetProportion())
{
width = (delta * item->GetProportion()) / stretchable;
delta -= width;
stretchable -= item->GetProportion();
}
wxPoint child_pos(pt);
wxSize child_size(width, size.y);
if (item->GetFlag() & (wxEXPAND | wxSHAPED))
child_size.y = m_size.y;
else if (item->GetFlag() & wxALIGN_BOTTOM)
child_pos.y += m_size.y - size.y;
else if (item->GetFlag() & (wxCENTER | wxALIGN_CENTER_VERTICAL))
child_pos.y += (m_size.y - size.y) / 2;
item->SetDimension(child_pos, child_size);
pt.x += width;
}
}
node = node->GetNext();
}
}
};
// -- wxAuiManager class implementation --
@@ -1847,8 +1718,8 @@ void wxAuiManager::LayoutAddPane(wxSizer* cont,
// value that the pane will receive
int pane_proportion = pane.dock_proportion;
wxAuiProportionalBoxSizer* horz_pane_sizer = new wxAuiProportionalBoxSizer(wxHORIZONTAL);
wxAuiProportionalBoxSizer* vert_pane_sizer = new wxAuiProportionalBoxSizer(wxVERTICAL);
wxBoxSizer* horz_pane_sizer = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* vert_pane_sizer = new wxBoxSizer(wxVERTICAL);
if (pane.HasGripper())
{
@@ -1870,7 +1741,7 @@ void wxAuiManager::LayoutAddPane(wxSizer* cont,
if (pane.HasCaption())
{
// create the caption sizer
wxAuiProportionalBoxSizer* caption_sizer = new wxAuiProportionalBoxSizer(wxHORIZONTAL);
wxBoxSizer* caption_sizer = new wxBoxSizer(wxHORIZONTAL);
sizer_item = caption_sizer->Add(1, caption_size, 1, wxEXPAND);
@@ -2019,7 +1890,7 @@ void wxAuiManager::LayoutAddDock(wxSizer* cont,
}
// create the sizer for the dock
wxSizer* dock_sizer = new wxAuiProportionalBoxSizer(orientation);
wxSizer* dock_sizer = new wxBoxSizer(orientation);
// add each pane to the dock
bool has_maximized_pane = false;
@@ -2152,7 +2023,7 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes,
wxAuiDockUIPartArray& uiparts,
bool spacer_only)
{
wxAuiProportionalBoxSizer* container = new wxAuiProportionalBoxSizer(wxVERTICAL);
wxBoxSizer* container = new wxBoxSizer(wxVERTICAL);
int pane_border_size = m_art->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE);
int caption_size = m_art->GetMetric(wxAUI_DOCKART_CAPTION_SIZE);
@@ -2435,7 +2306,7 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes,
// create a container which will hold this layer's
// docks (top, bottom, left, right)
cont = new wxAuiProportionalBoxSizer(wxVERTICAL);
cont = new wxBoxSizer(wxVERTICAL);
// find any top docks in this layer
@@ -2450,7 +2321,7 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes,
// fill out the middle layer (which consists
// of left docks, content area and right docks)
middle = new wxAuiProportionalBoxSizer(wxHORIZONTAL);
middle = new wxBoxSizer(wxHORIZONTAL);
// find any left docks in this layer
FindDocks(docks, wxAUI_DOCK_LEFT, layer, -1, arr);
@@ -2519,7 +2390,7 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes,
{
// no sizer available, because there are no docks,
// therefore we will create a simple background area
cont = new wxAuiProportionalBoxSizer(wxVERTICAL);
cont = new wxBoxSizer(wxVERTICAL);
wxSizerItem* sizer_item = cont->Add(1,1, 1, wxEXPAND);
wxAuiDockUIPart part;
part.type = wxAuiDockUIPart::typeBackground;