/////////////////////////////////////////////////////////////////////////////
// Name: cpp/wxsizer.h
// Purpose: provide wxBookCtrlSizer and wxNotebookSizer class
// Author: Robert Roebling and Robin Dunn
// Modified by: Ron Lee, Vadim Zeitlin (wxSizerFlags)
// Created:
// RCS-ID: $Id: wxsizer.h 2057 2007-06-18 23:03:00Z mbarbon $
// Copyright: (c) Robin Dunn, Robert Roebling
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// extracted from sizer.h/sizer.cpp from wxWidgets 2.6.1
// NB: wxBookCtrlSizer and wxNotebookSizer are deprecated, they
// don't do anything. wxBookCtrlBase::DoGetBestSize does the job now.
// ----------------------------------------------------------------------------
// wxBookCtrlSizer
// ----------------------------------------------------------------------------
#if wxUSE_BOOKCTRL
#include <wx/bookctrl.h>
// this sizer works with wxNotebook/wxListbook/... and sizes the control to
// fit its pages
class wxBookCtrlSizer : public wxSizer
{
public:
wxBookCtrlSizer(wxBookCtrlBase *bookctrl);
wxBookCtrlBase *GetControl() const { return m_bookctrl; }
virtual void RecalcSizes();
virtual wxSize CalcMin();
protected:
wxBookCtrlBase *m_bookctrl;
private:
DECLARE_CLASS(wxBookCtrlSizer)
DECLARE_NO_COPY_CLASS(wxBookCtrlSizer)
};
#if wxUSE_NOTEBOOK
// before wxBookCtrlBase we only had wxNotebookSizer, keep it for backwards
// compatibility
#include <wx/notebook.h>
class wxNotebookSizer : public wxBookCtrlSizer
{
public:
wxNotebookSizer(wxNotebook *nb);
wxNotebook *GetNotebook() const { return (wxNotebook *)m_bookctrl; }
private:
DECLARE_CLASS(wxNotebookSizer)
DECLARE_NO_COPY_CLASS(wxNotebookSizer)
};
#endif // wxUSE_NOTEBOOK
#endif // wxUSE_BOOKCTRL
#if wxUSE_BOOKCTRL
IMPLEMENT_CLASS(wxBookCtrlSizer, wxSizer)
#if wxUSE_NOTEBOOK
IMPLEMENT_CLASS(wxNotebookSizer, wxBookCtrlSizer)
#endif // wxUSE_NOTEBOOK
#endif // wxUSE_BOOKCTRL
#if wxUSE_BOOKCTRL
wxBookCtrlSizer::wxBookCtrlSizer(wxBookCtrlBase *bookctrl)
: m_bookctrl(bookctrl)
{
wxASSERT_MSG( bookctrl, wxT("wxBookCtrlSizer needs a control") );
}
void wxBookCtrlSizer::RecalcSizes()
{
m_bookctrl->SetSize( m_position.x, m_position.y, m_size.x, m_size.y );
}
wxSize wxBookCtrlSizer::CalcMin()
{
wxSize sizeBorder = m_bookctrl->CalcSizeFromPage(wxSize(0,0));
sizeBorder.x += 5;
sizeBorder.y += 5;
if ( m_bookctrl->GetPageCount() == 0 )
{
return wxSize(sizeBorder.x + 10, sizeBorder.y + 10);
}
int maxX = 0;
int maxY = 0;
wxWindowList::compatibility_iterator
node = m_bookctrl->GetChildren().GetFirst();
while (node)
{
wxWindow *item = node->GetData();
wxSizer *itemsizer = item->GetSizer();
if (itemsizer)
{
wxSize subsize( itemsizer->CalcMin() );
if (subsize.x > maxX)
maxX = subsize.x;
if (subsize.y > maxY)
maxY = subsize.y;
}
node = node->GetNext();
}
return wxSize( maxX, maxY ) + sizeBorder;
}
#if wxUSE_NOTEBOOK
wxNotebookSizer::wxNotebookSizer(wxNotebook *nb)
: wxBookCtrlSizer(nb)
{
wxASSERT_MSG( nb, wxT("wxNotebookSizer needs a control") );
}
#endif // wxUSE_NOTEBOOOK
#endif // wxUSE_BOOKCTRL