]> git.saurik.com Git - wxWidgets.git/commitdiff
Made wxLayoutAlgorithm more general (copes with nested sash windows)
authorJulian Smart <julian@anthemion.co.uk>
Sat, 30 Jan 1999 21:37:17 +0000 (21:37 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Sat, 30 Jan 1999 21:37:17 +0000 (21:37 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1527 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

distrib/msw/gtk.rsp
docs/latex/wx/clipbrd.tex
docs/latex/wx/layalgor.tex
docs/latex/wx/tdnd.tex
include/wx/generic/laywin.h
src/generic/laywin.cpp
src/generic/sashwin.cpp

index 6cd5f4543d66ef4a56344f66811a922c18ab485e..f7772e43776b31b481d19f3f305951b6b5e3a262 100644 (file)
@@ -7,6 +7,7 @@ config.guess
 config.sub
 wx-config.in
 mkinstalldirs
+wxGTK.spec
 
 docs/gtk/*.html
 docs/gtk/*.txt
index 25c8fe089feb33dc201bfd87f8eeaaf37cd56554..9c6bb2eb95aaad9a5054687adf25705e7de94745 100644 (file)
@@ -102,7 +102,7 @@ should keep the clipboard open for only a very short time.
 
 Returns TRUE on success. This should be tested (as in the sample shown above).
 
-\membersection{wxClipboard::SetData}\label{wxclipboardadddata}
+\membersection{wxClipboard::SetData}\label{wxclipboardsetdata}
 
 \func{bool}{SetData}{\param{wxDataObject*}{ data}}
 
index 81c39dfbfa47360729e7d3b67bc29c29ef917808..6b0ff45c754871f66acc31ef60c4723ab8a2303a 100644 (file)
@@ -114,6 +114,14 @@ Default constructor.
 
 Destructor.
 
+\membersection{wxLayoutAlgorithm::LayoutFrame}\label{wxlayoutalgorithmlayoutframe}
+
+\constfunc{bool}{LayoutFrame}{\param{wxFrame* }{frame}, \param{wxWindow*}{ mainWindow = NULL}}
+
+Lays out the children of a normal frame. {\it mainWindow} is set to occupy the remaining space.
+
+This function simply calls \helpref{wxLayoutAlgorithm::LayoutWindow}{wxlayoutalgorithmlayoutwindow}.
+
 \membersection{wxLayoutAlgorithm::LayoutMDIFrame}\label{wxlayoutalgorithmlayoutmdiframe}
 
 \constfunc{bool}{LayoutMDIFrame}{\param{wxMDIParentFrame* }{frame}, \param{wxRect*}{ rect = NULL}}
@@ -123,11 +131,11 @@ given rectangle will be used as a starting point instead of the frame's client a
 
 The MDI client window is set to occupy the remaining space.
 
-\membersection{wxLayoutAlgorithm::LayoutFrame}\label{wxlayoutalgorithmlayoutframe}
+\membersection{wxLayoutAlgorithm::LayoutWindow}\label{wxlayoutalgorithmlayoutwindow}
 
-\constfunc{bool}{LayoutFrame}{\param{wxFrame* }{frame}, \param{wxWindow*}{ mainWindow = NULL}}
+\constfunc{bool}{LayoutWindow}{\param{wxWindow* }{parent}, \param{wxWindow*}{ mainWindow = NULL}}
 
-Lays out the children of a normal frame.
+Lays out the children of a normal frame or other window.
 
 {\it mainWindow} is set to occupy the remaining space.
 
index 28c95e0be7cde15f6f59bd0c6a986fd3cb7250c9..ecdb4cf770cb45f389f1b3b6721ed403163226fb 100644 (file)
@@ -8,7 +8,7 @@ Classes: \helpref{wxDataObject}{wxdataobject},
 \helpref{wxFileDropTarget}{wxfiledroptarget}
 
 It has to be noted that the API for drag and drop in wxWindows is not
-yet finnished which is mostly due to the fact that DnD support under
+yet finished which is mostly due to the fact that DnD support under
 GTK 1.0 is very rudimentary and entirely different from the XDnD
 protocoll used by GTK 1.2. This also entails that not all of the documentation
 concerning DnD might be correct and some of the code might get broken
index 49afa3d91b2567bcd4bc03b7d87c4539a965c52b..47182c627cd3c9e9b68e3088bee2f084e13f78f3 100644 (file)
@@ -173,8 +173,15 @@ public:
     // The MDI client window is sized to whatever's left over.
     bool LayoutMDIFrame(wxMDIParentFrame* frame, wxRect* rect = (wxRect*) NULL);
 
-    // mainWindow is sized to whatever's left over.
-    bool LayoutFrame(wxFrame* frame, wxWindow* mainWindow = (wxWindow*) NULL);
+    // mainWindow is sized to whatever's left over. This function for backward
+    // compatibility; use LayoutWindow.
+    bool LayoutFrame(wxFrame* frame, wxWindow* mainWindow = (wxWindow*) NULL)
+    {
+        return LayoutWindow(frame, mainWindow);
+    }
+
+    // mainWindow is sized to whatever's left over. This function for backward
+    bool LayoutWindow(wxWindow* frame, wxWindow* mainWindow = (wxWindow*) NULL);
 };
 
 #endif
index c7d54c931d0e7736f35e191754a4065fbbf34cb9..6b9ee02ebcba7349720336e49a7eb5c17590c572 100644 (file)
@@ -199,18 +199,41 @@ 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 (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();
+    }
+
     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();
index 35dc510806908fef76d6dee9074cff4cd633e2d0..b079f5c250f70943f994e56f16918f2b99960a42 100644 (file)
@@ -32,6 +32,7 @@
 #include "wx/string.h"
 #include "wx/dcscreen.h"
 #include "wx/sashwin.h"
+#include "wx/laywin.h"
 
 #if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxSashWindow, wxWindow)
@@ -533,7 +534,7 @@ void wxSashWindow::SizeWindows()
     int cw, ch;
     GetClientSize(&cw, &ch);
 
-    if (GetChildren().Number() > 0)
+    if (GetChildren().Number() == 1)
     {
         wxWindow* child = (wxWindow*) (GetChildren().First()->Data());
 
@@ -574,6 +575,16 @@ void wxSashWindow::SizeWindows()
 
         child->SetSize(x, y, width, height);
     }
+    else if (GetChildren().Number() > 1)
+    {
+        // Perhaps multiple children are themselves sash windows.
+        // TODO: this doesn't really work because the subwindows sizes/positions
+        // must be set to leave a gap for the parent's sash (hit-test and decorations).
+        // Perhaps we can allow for this within LayoutWindow, testing whether the parent
+        // is a sash window, and if so, allowing some space for the edges.
+        wxLayoutAlgorithm layout;
+        layout.LayoutWindow(this);
+    }
 
     wxClientDC dc(this);
     DrawBorders(dc);