]> git.saurik.com Git - wxWidgets.git/commitdiff
added GetBestSize() implementation
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 16 Dec 2004 02:39:11 +0000 (02:39 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 16 Dec 2004 02:39:11 +0000 (02:39 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31025 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/splitter.h
src/generic/splitter.cpp

index 84fa3077c40b9c650b67bde6483d7d658c7403ca..239d5dcec6e83dbc5974a110f469a935b2073f4f 100644 (file)
@@ -221,6 +221,7 @@ public:
 #ifdef __WXMAC__
     virtual bool MacClipGrandChildren() const { return true ; }
 #endif
+
 protected:
     // event handlers
 #if defined(__WXMSW__) || defined(__WXMAC__)
@@ -231,7 +232,6 @@ protected:
     // by the user code
     inline bool DoSendEvent(wxSplitterEvent& event);
 
-protected:
     // common part of all ctors
     void Init();
 
@@ -270,6 +270,11 @@ protected:
     // redraw the splitter if its "hotness" changed if necessary
     void RedrawIfHotSensitive(bool isHot);
 
+    // return the best size of the splitter equal to best sizes of its
+    // subwindows
+    virtual wxSize DoGetBestSize() const;
+
+
     wxSplitMode m_splitMode;
     wxWindow*   m_windowOne;
     wxWindow*   m_windowTwo;
index b8292304b187c3f3c564cf643d03544f4a06f0db..976638bf075a2b7c702897fea10928228b60f7f6 100644 (file)
@@ -860,6 +860,46 @@ bool wxSplitterWindow::DoSendEvent(wxSplitterEvent& event)
     return !GetEventHandler()->ProcessEvent(event) || event.IsAllowed();
 }
 
+wxSize wxSplitterWindow::DoGetBestSize() const
+{
+    // get best sizes of subwindows
+    wxSize size1, size2;
+    if ( m_windowOne )
+        size1 = m_windowOne->GetBestSize();
+    if ( m_windowTwo )
+        size2 = m_windowTwo->GetBestSize();
+
+    // sum them
+    //
+    // pSash points to the size component to which sash size must be added
+    int *pSash;
+    wxSize sizeBest;
+    if ( m_splitMode == wxSPLIT_VERTICAL )
+    {
+        sizeBest.y = wxMax(size1.y, size2.y);
+        sizeBest.x = wxMax(size1.x, m_minimumPaneSize) +
+                        wxMax(size2.x, m_minimumPaneSize);
+
+        pSash = &sizeBest.x;
+    }
+    else // wxSPLIT_HORIZONTAL
+    {
+        sizeBest.x = wxMax(size1.x, size2.x);
+        sizeBest.y = wxMax(size1.y, m_minimumPaneSize) +
+                        wxMax(size2.y, m_minimumPaneSize);
+
+        pSash = &sizeBest.y;
+    }
+
+    // account for the border and the sash
+    int border = 2*GetBorderSize();
+    *pSash += GetSashSize();
+    sizeBest.x += border;
+    sizeBest.y += border;
+
+    return sizeBest;
+}
+
 // ---------------------------------------------------------------------------
 // wxSplitterWindow virtual functions: they now just generate the events
 // ---------------------------------------------------------------------------