X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/07b8d7ecc39cfc6cce17156b91c6de1cfb56ce5b..a631300cb83b23107f5b61bd96a97a6ef05cc122:/src/common/nbkbase.cpp diff --git a/src/common/nbkbase.cpp b/src/common/nbkbase.cpp index da418151d9..fcfd478e7c 100644 --- a/src/common/nbkbase.cpp +++ b/src/common/nbkbase.cpp @@ -31,10 +31,21 @@ #if wxUSE_NOTEBOOK #ifndef WX_PRECOMP - #include "wx/notebook.h" - #include "wx/imaglist.h" #endif //WX_PRECOMP +#include "wx/imaglist.h" +#include "wx/notebook.h" + +#ifdef __GNUWIN32_OLD__ + #include "wx/msw/gnuwin32/extra.h" +#endif + +#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__)) +#include "wx/msw/private.h" +#include +#include "wx/msw/winundef.h" +#endif + // ============================================================================ // implementation // ============================================================================ @@ -85,19 +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; + if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) ) + { sizeTotal.x += 90; - else + sizeTotal.y += 10; + } + else // tabs on top/bottom side + { + sizeTotal.x += 10; sizeTotal.y += 40; + } 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 // ---------------------------------------------------------------------------- @@ -113,6 +154,17 @@ bool wxNotebookBase::DeletePage(int nPage) return TRUE; } +wxNotebookPage *wxNotebookBase::DoRemovePage(int nPage) +{ + wxCHECK_MSG( nPage >= 0 && (size_t)nPage < m_pages.GetCount(), NULL, + _T("invalid page index in wxNotebookBase::DoRemovePage()") ); + + wxNotebookPage *pageRemoved = m_pages[nPage]; + m_pages.RemoveAt(nPage); + + return pageRemoved; +} + int wxNotebookBase::GetNextPage(bool forward) const { int nPage;