Add libwx-perl
[pkg-perl] / deb-src / libwx-perl / libwx-perl-0.96 / cpp / wxsizer.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        cpp/wxsizer.h
3 // Purpose:     provide wxBookCtrlSizer and wxNotebookSizer class
4 // Author:      Robert Roebling and Robin Dunn
5 // Modified by: Ron Lee, Vadim Zeitlin (wxSizerFlags)
6 // Created:
7 // RCS-ID:      $Id: wxsizer.h 2057 2007-06-18 23:03:00Z mbarbon $
8 // Copyright:   (c) Robin Dunn, Robert Roebling
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // extracted from sizer.h/sizer.cpp from wxWidgets 2.6.1
13
14 // NB: wxBookCtrlSizer and wxNotebookSizer are deprecated, they
15 //     don't do anything. wxBookCtrlBase::DoGetBestSize does the job now.
16
17 // ----------------------------------------------------------------------------
18 // wxBookCtrlSizer
19 // ----------------------------------------------------------------------------
20
21 #if wxUSE_BOOKCTRL
22
23 #include <wx/bookctrl.h>
24
25 // this sizer works with wxNotebook/wxListbook/... and sizes the control to
26 // fit its pages
27 class wxBookCtrlSizer : public wxSizer
28 {
29 public:
30     wxBookCtrlSizer(wxBookCtrlBase *bookctrl);
31
32     wxBookCtrlBase *GetControl() const { return m_bookctrl; }
33
34     virtual void RecalcSizes();
35     virtual wxSize CalcMin();
36
37 protected:
38
39     wxBookCtrlBase *m_bookctrl;
40
41 private:
42     DECLARE_CLASS(wxBookCtrlSizer)
43     DECLARE_NO_COPY_CLASS(wxBookCtrlSizer)
44 };
45
46
47 #if wxUSE_NOTEBOOK
48
49 // before wxBookCtrlBase we only had wxNotebookSizer, keep it for backwards
50 // compatibility
51 #include <wx/notebook.h>
52
53 class wxNotebookSizer : public wxBookCtrlSizer
54 {
55 public:
56     wxNotebookSizer(wxNotebook *nb);
57
58     wxNotebook *GetNotebook() const { return (wxNotebook *)m_bookctrl; }
59
60 private:
61     DECLARE_CLASS(wxNotebookSizer)
62     DECLARE_NO_COPY_CLASS(wxNotebookSizer)
63 };
64
65 #endif // wxUSE_NOTEBOOK
66
67 #endif // wxUSE_BOOKCTRL
68
69 #if wxUSE_BOOKCTRL
70 IMPLEMENT_CLASS(wxBookCtrlSizer, wxSizer)
71 #if wxUSE_NOTEBOOK
72 IMPLEMENT_CLASS(wxNotebookSizer, wxBookCtrlSizer)
73 #endif // wxUSE_NOTEBOOK
74 #endif // wxUSE_BOOKCTRL
75
76 #if wxUSE_BOOKCTRL
77
78 wxBookCtrlSizer::wxBookCtrlSizer(wxBookCtrlBase *bookctrl)
79                : m_bookctrl(bookctrl)
80 {
81     wxASSERT_MSG( bookctrl, wxT("wxBookCtrlSizer needs a control") );
82 }
83
84 void wxBookCtrlSizer::RecalcSizes()
85 {
86     m_bookctrl->SetSize( m_position.x, m_position.y, m_size.x, m_size.y );
87 }
88
89 wxSize wxBookCtrlSizer::CalcMin()
90 {
91     wxSize sizeBorder = m_bookctrl->CalcSizeFromPage(wxSize(0,0));
92
93     sizeBorder.x += 5;
94     sizeBorder.y += 5;
95
96     if ( m_bookctrl->GetPageCount() == 0 )
97     {
98         return wxSize(sizeBorder.x + 10, sizeBorder.y + 10);
99     }
100
101     int maxX = 0;
102     int maxY = 0;
103
104     wxWindowList::compatibility_iterator
105         node = m_bookctrl->GetChildren().GetFirst();
106     while (node)
107     {
108         wxWindow *item = node->GetData();
109         wxSizer *itemsizer = item->GetSizer();
110
111         if (itemsizer)
112         {
113             wxSize subsize( itemsizer->CalcMin() );
114
115             if (subsize.x > maxX)
116                 maxX = subsize.x;
117             if (subsize.y > maxY)
118                 maxY = subsize.y;
119         }
120
121         node = node->GetNext();
122     }
123
124     return wxSize( maxX, maxY ) + sizeBorder;
125 }
126
127 #if wxUSE_NOTEBOOK
128
129 wxNotebookSizer::wxNotebookSizer(wxNotebook *nb)
130     : wxBookCtrlSizer(nb)
131 {
132     wxASSERT_MSG( nb, wxT("wxNotebookSizer needs a control") );
133 }
134
135 #endif // wxUSE_NOTEBOOOK
136 #endif // wxUSE_BOOKCTRL