]>
Commit | Line | Data |
---|---|---|
cc699de8 VZ |
1 | /////////////////////////////////////////////////////////////////////////////// |
2 | // Name: wx/simplebook.h | |
3 | // Purpose: wxBookCtrlBase-derived class without any controller. | |
4 | // Author: Vadim Zeitlin | |
5 | // Created: 2012-08-21 | |
cc699de8 VZ |
6 | // Copyright: (c) 2012 Vadim Zeitlin <vadim@wxwidgets.org> |
7 | // Licence: wxWindows licence | |
8 | /////////////////////////////////////////////////////////////////////////////// | |
9 | ||
10 | #ifndef _WX_SIMPLEBOOK_H_ | |
11 | #define _WX_SIMPLEBOOK_H_ | |
12 | ||
13 | #include "wx/bookctrl.h" | |
14 | ||
15 | #if wxUSE_BOOKCTRL | |
16 | ||
17 | #include "wx/vector.h" | |
18 | ||
19 | // ---------------------------------------------------------------------------- | |
20 | // wxSimplebook: a book control without any user-actionable controller. | |
21 | // ---------------------------------------------------------------------------- | |
22 | ||
23 | // NB: This class doesn't use DLL export declaration as it's fully inline. | |
24 | ||
25 | class wxSimplebook : public wxBookCtrlBase | |
26 | { | |
27 | public: | |
28 | wxSimplebook() | |
29 | { | |
30 | Init(); | |
31 | } | |
32 | ||
33 | wxSimplebook(wxWindow *parent, | |
34 | wxWindowID winid = wxID_ANY, | |
35 | const wxPoint& pos = wxDefaultPosition, | |
36 | const wxSize& size = wxDefaultSize, | |
37 | long style = 0, | |
38 | const wxString& name = wxEmptyString) | |
39 | : wxBookCtrlBase(parent, winid, pos, size, style | wxBK_TOP, name) | |
40 | { | |
41 | Init(); | |
42 | } | |
43 | ||
44 | ||
45 | // Methods specific to this class. | |
46 | ||
47 | // A method allowing to add a new page without any label (which is unused | |
48 | // by this control) and show it immediately. | |
49 | bool ShowNewPage(wxWindow* page) | |
50 | { | |
51 | return AddPage(page, wxString(), true /* select it */); | |
52 | } | |
53 | ||
54 | ||
55 | // Set effect to use for showing/hiding pages. | |
56 | void SetEffects(wxShowEffect showEffect, wxShowEffect hideEffect) | |
57 | { | |
58 | m_showEffect = showEffect; | |
59 | m_hideEffect = hideEffect; | |
60 | } | |
61 | ||
62 | // Or the same effect for both of them. | |
63 | void SetEffect(wxShowEffect effect) | |
64 | { | |
65 | SetEffects(effect, effect); | |
66 | } | |
67 | ||
68 | // And the same for time outs. | |
69 | void SetEffectsTimeouts(unsigned showTimeout, unsigned hideTimeout) | |
70 | { | |
71 | m_showTimeout = showTimeout; | |
72 | m_hideTimeout = hideTimeout; | |
73 | } | |
74 | ||
75 | void SetEffectTimeout(unsigned timeout) | |
76 | { | |
77 | SetEffectsTimeouts(timeout, timeout); | |
78 | } | |
79 | ||
80 | ||
81 | // Implement base class pure virtual methods. | |
82 | ||
83 | // Page management | |
84 | virtual bool InsertPage(size_t n, | |
85 | wxWindow *page, | |
86 | const wxString& text, | |
87 | bool bSelect = false, | |
88 | int imageId = NO_IMAGE) | |
89 | { | |
90 | if ( !wxBookCtrlBase::InsertPage(n, page, text, bSelect, imageId) ) | |
91 | return false; | |
92 | ||
93 | m_pageTexts.insert(m_pageTexts.begin() + n, text); | |
94 | ||
95 | if ( !DoSetSelectionAfterInsertion(n, bSelect) ) | |
96 | page->Hide(); | |
97 | ||
98 | return true; | |
99 | } | |
100 | ||
101 | virtual int SetSelection(size_t n) | |
102 | { | |
103 | return DoSetSelection(n, SetSelection_SendEvent); | |
104 | } | |
105 | ||
106 | virtual int ChangeSelection(size_t n) | |
107 | { | |
108 | return DoSetSelection(n); | |
109 | } | |
110 | ||
111 | // Neither labels nor images are supported but we still store the labels | |
112 | // just in case the user code attaches some importance to them. | |
113 | virtual bool SetPageText(size_t n, const wxString& strText) | |
114 | { | |
115 | wxCHECK_MSG( n < GetPageCount(), false, wxS("Invalid page") ); | |
116 | ||
117 | m_pageTexts[n] = strText; | |
118 | ||
119 | return true; | |
120 | } | |
121 | ||
122 | virtual wxString GetPageText(size_t n) const | |
123 | { | |
124 | wxCHECK_MSG( n < GetPageCount(), wxString(), wxS("Invalid page") ); | |
125 | ||
126 | return m_pageTexts[n]; | |
127 | } | |
128 | ||
129 | virtual bool SetPageImage(size_t WXUNUSED(n), int WXUNUSED(imageId)) | |
130 | { | |
131 | return false; | |
132 | } | |
133 | ||
134 | virtual int GetPageImage(size_t WXUNUSED(n)) const | |
135 | { | |
136 | return NO_IMAGE; | |
137 | } | |
138 | ||
139 | protected: | |
140 | virtual void UpdateSelectedPage(size_t newsel) | |
141 | { | |
142 | m_selection = newsel; | |
143 | } | |
144 | ||
145 | virtual wxBookCtrlEvent* CreatePageChangingEvent() const | |
146 | { | |
ce7fe42e | 147 | return new wxBookCtrlEvent(wxEVT_BOOKCTRL_PAGE_CHANGING, |
cc699de8 VZ |
148 | GetId()); |
149 | } | |
150 | ||
151 | virtual void MakeChangedEvent(wxBookCtrlEvent& event) | |
152 | { | |
ce7fe42e | 153 | event.SetEventType(wxEVT_BOOKCTRL_PAGE_CHANGED); |
cc699de8 VZ |
154 | } |
155 | ||
156 | virtual wxWindow *DoRemovePage(size_t page) | |
157 | { | |
4f9ccec5 VZ |
158 | wxWindow* const win = wxBookCtrlBase::DoRemovePage(page); |
159 | if ( win ) | |
160 | { | |
161 | m_pageTexts.erase(m_pageTexts.begin() + page); | |
162 | ||
163 | DoSetSelectionAfterRemoval(page); | |
164 | } | |
165 | ||
166 | return win; | |
cc699de8 VZ |
167 | } |
168 | ||
169 | virtual void DoSize() | |
170 | { | |
171 | wxWindow* const page = GetCurrentPage(); | |
172 | if ( page ) | |
173 | page->SetSize(GetPageRect()); | |
174 | } | |
175 | ||
176 | virtual void DoShowPage(wxWindow* page, bool show) | |
177 | { | |
178 | if ( show ) | |
179 | page->ShowWithEffect(m_showEffect, m_showTimeout); | |
180 | else | |
181 | page->HideWithEffect(m_hideEffect, m_hideTimeout); | |
182 | } | |
183 | ||
184 | private: | |
185 | void Init() | |
186 | { | |
187 | // We don't need any border as we don't have anything to separate the | |
188 | // page contents from. | |
189 | SetInternalBorder(0); | |
190 | ||
191 | // No effects by default. | |
192 | m_showEffect = | |
193 | m_hideEffect = wxSHOW_EFFECT_NONE; | |
194 | ||
195 | m_showTimeout = | |
196 | m_hideTimeout = 0; | |
197 | } | |
198 | ||
199 | wxVector<wxString> m_pageTexts; | |
200 | ||
201 | wxShowEffect m_showEffect, | |
202 | m_hideEffect; | |
203 | ||
204 | unsigned m_showTimeout, | |
205 | m_hideTimeout; | |
206 | ||
207 | wxDECLARE_NO_COPY_CLASS(wxSimplebook); | |
208 | }; | |
209 | ||
210 | #endif // wxUSE_BOOKCTRL | |
211 | ||
212 | #endif // _WX_SIMPLEBOOK_H_ |