-BEGIN_EVENT_TABLE(wxFrameManager, wxEvtHandler)
- EVT_AUI_PANEBUTTON(wxFrameManager::OnPaneButton)
- EVT_AUI_RENDER(wxFrameManager::OnRender)
- EVT_PAINT(wxFrameManager::OnPaint)
- EVT_ERASE_BACKGROUND(wxFrameManager::OnEraseBackground)
- EVT_SIZE(wxFrameManager::OnSize)
- EVT_SET_CURSOR(wxFrameManager::OnSetCursor)
- EVT_LEFT_DOWN(wxFrameManager::OnLeftDown)
- EVT_LEFT_UP(wxFrameManager::OnLeftUp)
- EVT_MOTION(wxFrameManager::OnMotion)
- EVT_LEAVE_WINDOW(wxFrameManager::OnLeaveWindow)
- EVT_CHILD_FOCUS(wxFrameManager::OnChildFocus)
- EVT_TIMER(101, wxFrameManager::OnHintFadeTimer)
+// 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 --
+
+
+BEGIN_EVENT_TABLE(wxAuiManager, wxEvtHandler)
+ EVT_AUI_PANE_BUTTON(wxAuiManager::OnPaneButton)
+ EVT_AUI_RENDER(wxAuiManager::OnRender)
+ EVT_PAINT(wxAuiManager::OnPaint)
+ EVT_ERASE_BACKGROUND(wxAuiManager::OnEraseBackground)
+ EVT_SIZE(wxAuiManager::OnSize)
+ EVT_SET_CURSOR(wxAuiManager::OnSetCursor)
+ EVT_LEFT_DOWN(wxAuiManager::OnLeftDown)
+ EVT_LEFT_UP(wxAuiManager::OnLeftUp)
+ EVT_MOTION(wxAuiManager::OnMotion)
+ EVT_LEAVE_WINDOW(wxAuiManager::OnLeaveWindow)
+ EVT_MOUSE_CAPTURE_LOST(wxAuiManager::OnCaptureLost)
+ EVT_CHILD_FOCUS(wxAuiManager::OnChildFocus)
+ EVT_AUI_FIND_MANAGER(wxAuiManager::OnFindManager)
+ EVT_TIMER(101, wxAuiManager::OnHintFadeTimer)