X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2243eed57327ce844cfaf61f25b11cf372f96309..66b6b04535cf261b7bae7da77332835b242abd04:/src/generic/laywin.cpp?ds=sidebyside diff --git a/src/generic/laywin.cpp b/src/generic/laywin.cpp index 88677b3780..2c9afa2c7d 100644 --- a/src/generic/laywin.cpp +++ b/src/generic/laywin.cpp @@ -9,7 +9,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -33,6 +33,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxQueryLayoutInfoEvent, wxEvent) IMPLEMENT_DYNAMIC_CLASS(wxCalculateLayoutEvent, wxEvent) +#if wxUSE_SASH IMPLEMENT_CLASS(wxSashLayoutWindow, wxSashWindow) BEGIN_EVENT_TABLE(wxSashLayoutWindow, wxSashWindow) @@ -143,7 +144,7 @@ void wxSashLayoutWindow::OnCalculateLayout(wxCalculateLayoutEvent& event) } case wxLAYOUT_NONE: { - break; + break; } } @@ -157,6 +158,7 @@ void wxSashLayoutWindow::OnCalculateLayout(wxCalculateLayoutEvent& event) event.SetRect(clientSize); } +#endif // wxUSE_SASH /* * wxLayoutAlgorithm @@ -176,7 +178,7 @@ bool wxLayoutAlgorithm::LayoutMDIFrame(wxMDIParentFrame* frame, wxRect* r) wxCalculateLayoutEvent event; event.SetRect(rect); - wxNode* node = frame->GetChildren()->First(); + wxNode* node = frame->GetChildren().First(); while (node) { wxWindow* win = (wxWindow*) node->Data(); @@ -199,18 +201,43 @@ bool wxLayoutAlgorithm::LayoutMDIFrame(wxMDIParentFrame* frame, wxRect* r) 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(); @@ -226,7 +253,8 @@ bool wxLayoutAlgorithm::LayoutFrame(wxFrame* frame, wxWindow* mainWindow) 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; }