]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/nbkbase.cpp
MacHandleControlClick extended by mouseStillDown state for supporting things like...
[wxWidgets.git] / src / common / nbkbase.cpp
index e29c2dbdaf5e2dcf5ce8916c130f07fe95ee71fd..fcfd478e7c0c35f2d13837ad98490402c9195b2d 100644 (file)
 #include "wx/imaglist.h"
 #include "wx/notebook.h"
 
-#if defined(__WXMSW__) && !((defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) && !defined(__CYGWIN10__))
+#ifdef __GNUWIN32_OLD__
+    #include "wx/msw/gnuwin32/extra.h"
+#endif
+
+#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__))
 #include "wx/msw/private.h"
 #include <commctrl.h>
 #include "wx/msw/winundef.h"
@@ -92,49 +96,49 @@ void wxNotebookBase::AssignImageList(wxImageList* imageList)
 // geometry
 // ----------------------------------------------------------------------------
 
-wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage)
+wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage) const
 {
-    // this was just taken from wxNotebookSizer::CalcMin() and is, of
-    // course, totally bogus - just like the original code was
+    // this is, of course, totally bogus -- but we must do something by
+    // default because not all ports implement this
     wxSize sizeTotal = sizePage;
-    
-    // Slightly less bogus, at least under Windows.
-    // We need to make getting tab size part of the wxWindows API.
-#ifdef __WXMSW__
-    wxSize tabSize(0, 0);
-    if (GetPageCount() > 0)
-    {
-        RECT rect;
-        TabCtrl_GetItemRect((HWND) GetHWND(), 0, & rect);
-        tabSize.x = rect.right - rect.left;
-        tabSize.y = rect.bottom - rect.top;
-    }
-    if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
-    {
-        sizeTotal.x += tabSize.x + 7;
-        sizeTotal.y += 7;
-    }
-    else
-    {
-        sizeTotal.x += 7;
-        sizeTotal.y += tabSize.y + 7;
-    }
-#else
+
     if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
     {
         sizeTotal.x += 90;
         sizeTotal.y += 10;
     }
-    else
+    else // tabs on top/bottom side
     {
         sizeTotal.x += 10;
         sizeTotal.y += 40;
     }
-#endif
 
     return sizeTotal;
 }
 
+wxSize wxNotebookBase::DoGetBestSize() const
+{
+    wxSize bestSize;
+
+    // iterate over all pages, get the largest width and height
+    const size_t nCount = m_pages.Count();
+    for ( size_t nPage = 0; nPage < nCount; nPage++ )
+    {
+        wxNotebookPage *pPage = m_pages[nPage];
+        wxSize childBestSize(pPage->GetBestSize());
+
+        if ( childBestSize.x > bestSize.x )
+            bestSize.x = childBestSize.x;
+
+        if ( childBestSize.y > bestSize.y )
+            bestSize.y = childBestSize.y;
+    }
+
+    // convert display area to window area, adding the size neccessary for the
+    // tabs
+    return CalcSizeFromPage(bestSize);
+}
+
 // ----------------------------------------------------------------------------
 // pages management
 // ----------------------------------------------------------------------------