+// ----------------------------------------------------------------------------
+// geometry
+// ----------------------------------------------------------------------------
+
+void wxBookCtrlBase::DoInvalidateBestSize()
+{
+ // notice that it is not necessary to invalidate our own best size
+ // explicitly if we have m_bookctrl as it will already invalidate the best
+ // size of its parent when its own size is invalidated and its parent is
+ // this control
+ if ( m_bookctrl )
+ m_bookctrl->InvalidateBestSize();
+ else
+ wxControl::InvalidateBestSize();
+}
+
+wxSize wxBookCtrlBase::CalcSizeFromPage(const wxSize& sizePage) const
+{
+ // Add the size of the controller and the border between if it's shown.
+ if ( !m_bookctrl || !m_bookctrl->IsShown() )
+ return sizePage;
+
+ // Notice that the controller size is its current size while we really want
+ // to have its best size. So we only take into account its size in the
+ // direction in which we should add it but not in the other one, where the
+ // controller size is determined by the size of wxBookCtrl itself.
+ const wxSize sizeController = GetControllerSize();
+
+ wxSize size = sizePage;
+ if ( IsVertical() )
+ size.y += sizeController.y + GetInternalBorder();
+ else // left/right aligned
+ size.x += sizeController.x + GetInternalBorder();
+
+ return size;
+}
+
+void wxBookCtrlBase::SetPageSize(const wxSize& size)
+{
+ SetClientSize(CalcSizeFromPage(size));
+}
+
+wxSize wxBookCtrlBase::DoGetBestSize() const