// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
+#ifdef __GNUG__
+#pragma implementation "laywin.h"
+#endif
+
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
IMPLEMENT_DYNAMIC_CLASS(wxQueryLayoutInfoEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxCalculateLayoutEvent, wxEvent)
+#if wxUSE_SASH
IMPLEMENT_CLASS(wxSashLayoutWindow, wxSashWindow)
BEGIN_EVENT_TABLE(wxSashLayoutWindow, wxSashWindow)
m_alignment = wxLAYOUT_TOP;
}
-// These are the functions that wxWin will call to ascertain the window
+// This is the function that wxLayoutAlgorithm calls to ascertain the window
// dimensions.
void wxSashLayoutWindow::OnQueryLayoutInfo(wxQueryLayoutInfoEvent& event)
{
- int flags = event.GetFlags();
+ // int flags = event.GetFlags();
int requestedLength = event.GetRequestedLength();
- // This code won't be in the final thing, it's just so we don't have to give it
- // real windows: mock up some dimensions.
-
event.SetOrientation(m_orientation);
event.SetAlignment(m_alignment);
// Called by parent to allow window to take a bit out of the
// client rectangle, and size itself if not in wxLAYOUT_QUERY mode.
-// Will eventually be an event.
void wxSashLayoutWindow::OnCalculateLayout(wxCalculateLayoutEvent& event)
{
clientSize.height -= thisRect.height;
break;
}
+ case wxLAYOUT_NONE:
+ {
+ break;
+ }
+
}
if ((flags & wxLAYOUT_QUERY) == 0)
event.SetRect(clientSize);
}
+#endif // wxUSE_SASH
/*
* wxLayoutAlgorithm
// Lays out windows for an MDI frame. The MDI client area gets what's left
// over.
-bool wxLayoutAlgorithm::LayoutMDIFrame(wxMDIParentFrame* frame)
+bool wxLayoutAlgorithm::LayoutMDIFrame(wxMDIParentFrame* frame, wxRect* r)
{
int cw, ch;
frame->GetClientSize(& cw, & ch);
wxRect rect(0, 0, cw, ch);
+ if (r)
+ rect = * r;
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;
}