]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied [ 745533 ] implemented wxNotebook::DoGetBestSize
authorJulian Smart <julian@anthemion.co.uk>
Sun, 1 Jun 2003 13:13:03 +0000 (13:13 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Sun, 1 Jun 2003 13:13:03 +0000 (13:13 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20802 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/notebook.h
include/wx/msw/notebook.h
include/wx/notebook.h
include/wx/univ/notebook.h
src/common/nbkbase.cpp
src/mac/carbon/notebmac.cpp
src/mac/notebmac.cpp
src/msw/notebook.cpp
src/univ/notebook.cpp

index 332dba491886394f7da9102b642d7468de85ee05..80569fc2449e678b59503f04240b83a54d353f8f 100644 (file)
@@ -85,7 +85,7 @@ public:
   virtual void SetTabSize(const wxSize& sz);
    
     // calculate size for wxNotebookSizer
-  wxSize CalcSizeFromPage(const wxSize& sizePage);
+  wxSize CalcSizeFromPage(const wxSize& sizePage) const;
 
 /*
     // get number of pages in the dialog
index 6a44b36be9f71d07a8606646d6e2378885fb7678..a2e6f841837a8a0fd2b6c00865ccd518fc3a28a7 100644 (file)
@@ -103,6 +103,9 @@ public:
     // style.
   void SetTabSize(const wxSize& sz);
 
+  // calculate the size of the notebook from the size of its page
+  virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
+
   // callbacks
   // ---------
   void OnSize(wxSizeEvent& event);
index 8c18691b7c21e9648c041403ed3eac0f97713701..54ad1df040e9e4a36d0548a4bf4e5888e9c07089 100644 (file)
@@ -107,7 +107,7 @@ public:
     virtual void SetTabSize(const wxSize& sz) = 0;
 
     // calculate the size of the notebook from the size of its page
-    virtual wxSize CalcSizeFromPage(const wxSize& sizePage);
+    virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
 
     // operations
     // ----------
@@ -155,6 +155,8 @@ public:
 protected:
     // remove the page and return a pointer to it
     virtual wxNotebookPage *DoRemovePage(int page);
+       // return the minimum size large enough to display the largest page entirely
+       virtual wxSize DoGetBestSize() const;
 
     // common part of all ctors
     void Init();
index 3e29d78106a866f7a4a3a9506ee626dc56295fdd..e5742ddc0fab2bc8ff55459b21d4ebcbbf502d8f 100644 (file)
@@ -78,7 +78,7 @@ public:
     virtual void SetPadding(const wxSize& padding);
     virtual void SetTabSize(const wxSize& sz);
 
-    virtual wxSize CalcSizeFromPage(const wxSize& sizePage);
+    virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
 
     virtual bool DeleteAllPages();
 
index fa4db5f4192eac2cd001d589673ec134071005e6..4b95397039f9589cd2d2477072106d9209266c85 100644 (file)
@@ -96,34 +96,17 @@ 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
     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
+       // changed hajokirchhoff -- May, 31st, 2003
+       // moved the __WXMSW__ portion to wxNotebook::CalcSizeFromPage in src/msw/notebook.cpp
+       // where it really belongs.
+       // Question: Shouldn't we make wxNotebookBase::CalcSizeFromPage a pure virtual class.
+       //                       I'd like this better than this "totally bogus" code here.
     if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
     {
         sizeTotal.x += 90;
@@ -134,7 +117,6 @@ wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage)
         sizeTotal.x += 10;
         sizeTotal.y += 40;
     }
-#endif
 
     return sizeTotal;
 }
@@ -165,6 +147,21 @@ wxNotebookPage *wxNotebookBase::DoRemovePage(int nPage)
     return pageRemoved;
 }
 
+wxSize wxNotebookBase::DoGetBestSize() const
+{
+  wxSize bestSize(0,0);
+  size_t nCount = m_pages.Count();
+       // iterate over all pages, get the largest width and height
+  for ( size_t nPage = 0; nPage < nCount; nPage++ ) {
+    wxNotebookPage *pPage = m_pages[nPage];
+    wxSize childBestSize(pPage->GetBestSize());
+       bestSize.SetWidth(max(childBestSize.GetWidth(), bestSize.GetWidth()));
+       bestSize.SetHeight(max(childBestSize.GetHeight(), bestSize.GetHeight()));
+  }
+  // convert display area to window area, adding the size neccessary for the tab control itself
+  return CalcSizeFromPage(bestSize);
+}
+
 int wxNotebookBase::GetNextPage(bool forward) const
 {
     int nPage;
index 2f60ca89c5fa7d783c7c656d687722a8749dfdd3..e620bc017b797019fb4206aab2bff938df6ef6e7 100644 (file)
@@ -202,7 +202,7 @@ wxNotebook::~wxNotebook()
     m_macControl = NULL ;
 }
 
-wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
+wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
 {
     wxSize sizeTotal = sizePage;
 
index 2f60ca89c5fa7d783c7c656d687722a8749dfdd3..e620bc017b797019fb4206aab2bff938df6ef6e7 100644 (file)
@@ -202,7 +202,7 @@ wxNotebook::~wxNotebook()
     m_macControl = NULL ;
 }
 
-wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
+wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
 {
     wxSize sizeTotal = sizePage;
 
index 1a5c80b40d1fb8ad8f9b1d7ef36377c925514dfc..7c3ceddae18d9c9a09f8be210adbb6ab5e7e79eb 100644 (file)
@@ -311,6 +311,33 @@ void wxNotebook::SetTabSize(const wxSize& sz)
     ::SendMessage(GetHwnd(), TCM_SETITEMSIZE, 0, MAKELPARAM(sz.x, sz.y));
 }
 
+wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
+{
+    wxSize sizeTotal = sizePage;
+    
+    // We need to make getting tab size part of the wxWindows API.
+    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;
+    }
+
+    return sizeTotal;
+}
+
 void wxNotebook::AdjustPageSize(wxNotebookPage *page)
 {
     wxCHECK_RET( page, _T("NULL page in wxNotebook::AdjustPageSize") );
index da6d4b486f61cf92d383340d2d914359b93cb169..c1d4f7fdc0e4270f41a18e9606938a63a2468474 100644 (file)
@@ -962,7 +962,7 @@ void wxNotebook::SetPageSize(const wxSize& size)
     SetClientSize(GetSizeForPage(size));
 }
 
-wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
+wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
 {
     return AdjustSize(GetSizeForPage(sizePage));
 }