// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
IMPLEMENT_DYNAMIC_CLASS(wxQueryLayoutInfoEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxCalculateLayoutEvent, wxEvent)
+#if wxUSE_SASH
IMPLEMENT_CLASS(wxSashLayoutWindow, wxSashWindow)
BEGIN_EVENT_TABLE(wxSashLayoutWindow, wxSashWindow)
}
case wxLAYOUT_NONE:
{
- break;
+ break;
}
}
event.SetRect(clientSize);
}
+#endif // wxUSE_SASH
/*
* wxLayoutAlgorithm
wxCalculateLayoutEvent event;
event.SetRect(rect);
- wxNode* node = frame->GetChildren()->First();
+ wxNode* node = frame->GetChildren().First();
while (node)
{
wxWindow* win = (wxWindow*) node->Data();
return TRUE;
}
-// Layout algorithm for normal frame. mainWindow gets what's left over.
-bool wxLayoutAlgorithm::LayoutFrame(wxFrame* frame, wxWindow* mainWindow)
+// Layout algorithm for any window. mainWindow gets what's left over.
+bool wxLayoutAlgorithm::LayoutWindow(wxWindow* parent, wxWindow* mainWindow)
{
+ // Test if the parent is a sash window, and if so,
+ // reduce the available space to allow space for any active edges.
+
+ int leftMargin = 0, rightMargin = 0, topMargin = 0, bottomMargin = 0;
+#if wxUSE_SASH
+ if (parent->IsKindOf(CLASSINFO(wxSashWindow)))
+ {
+ wxSashWindow* sashWindow = (wxSashWindow*) parent;
+
+ leftMargin = sashWindow->GetExtraBorderSize();
+ rightMargin = sashWindow->GetExtraBorderSize();
+ topMargin = sashWindow->GetExtraBorderSize();
+ bottomMargin = sashWindow->GetExtraBorderSize();
+
+ if (sashWindow->GetSashVisible(wxSASH_LEFT))
+ leftMargin += sashWindow->GetDefaultBorderSize();
+ if (sashWindow->GetSashVisible(wxSASH_RIGHT))
+ rightMargin += sashWindow->GetDefaultBorderSize();
+ if (sashWindow->GetSashVisible(wxSASH_TOP))
+ topMargin += sashWindow->GetDefaultBorderSize();
+ if (sashWindow->GetSashVisible(wxSASH_BOTTOM))
+ bottomMargin += sashWindow->GetDefaultBorderSize();
+ }
+#endif // wxUSE_SASH
+
int cw, ch;
- frame->GetClientSize(& cw, & ch);
+ parent->GetClientSize(& cw, & ch);
- wxRect rect(0, 0, cw, ch);
+ wxRect rect(leftMargin, topMargin, cw - leftMargin - rightMargin, ch - topMargin - bottomMargin);
wxCalculateLayoutEvent event;
event.SetRect(rect);
- wxNode* node = frame->GetChildren()->First();
+ wxNode* node = parent->GetChildren().First();
while (node)
{
wxWindow* win = (wxWindow*) node->Data();
rect = event.GetRect();
- mainWindow->SetSize(rect.x, rect.y, rect.width, rect.height);
+ if (mainWindow)
+ mainWindow->SetSize(rect.x, rect.y, rect.width, rect.height);
return TRUE;
}