00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013 #ifndef _AX_PAGERCTRL_H_
00014 #define _AX_PAGERCTRL_H_
00015
00016
00017
00018
00019
00020 #include "wx/defs.h"
00021 #include "wx/control.h"
00022 #include "wx/dynarray.h"
00023 #include "wx/notebook.h"
00024
00033 class AxPagerCtrl: public wxControl
00034 {
00035 public:
00036
00037
00038
00039 AxPagerCtrl()
00040 {
00041 Init();
00042 }
00043
00044 AxPagerCtrl(wxWindow *parent,
00045 wxWindowID winid,
00046 const wxPoint& pos = wxDefaultPosition,
00047 const wxSize& size = wxDefaultSize,
00048 long style = 0,
00049 const wxString& name = wxEmptyString)
00050 {
00051 Init();
00052
00053 (void) Create(parent, winid, pos, size, style, name);
00054 }
00055
00056
00057 bool Create(wxWindow *parent,
00058 wxWindowID winid,
00059 const wxPoint& pos = wxDefaultPosition,
00060 const wxSize& size = wxDefaultSize,
00061 long style = 0,
00062 const wxString& name = wxEmptyString);
00063
00064
00065 virtual ~AxPagerCtrl();
00066
00067
00068
00069
00070
00071
00072 virtual size_t GetPageCount() const { return m_pages.size(); }
00073
00074
00075 wxWindow *GetPage(size_t n) { return m_pages[n]; }
00076 wxWindow *GetPage(size_t n) const { return m_pages[n]; }
00077
00078
00079 wxWindow *GetCurrentPage() const
00080 {
00081 const int n = GetSelection();
00082 return n == wxNOT_FOUND ? NULL : GetPage(n);
00083 }
00084
00085
00086 virtual int FindPage(wxWindow* window) const;
00087
00088
00089 virtual int FindPage(const wxString& label) const;
00090
00091
00092 virtual wxWindow* FindPageWindow(const wxString& label) const;
00093
00094
00095 virtual int GetSelection() const;
00096
00097
00098 virtual bool SetPageText(size_t n, const wxString& strText);
00099 virtual wxString GetPageText(size_t n);
00100
00101
00102
00103
00104
00105 virtual void SetPageSize(const wxSize& size);
00106
00107
00108 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
00109
00110
00111 unsigned int GetInternalBorder() const { return m_internalBorder; }
00112 void SetInternalBorder(unsigned int border) { m_internalBorder = border; }
00113
00114
00115 void SetControlMargin(int margin) { m_controlMargin = margin; }
00116 int GetControlMargin() const { return m_controlMargin; }
00117
00118
00119 bool IsVertical() const { return HasFlag(wxBK_BOTTOM | wxBK_TOP); }
00120
00121
00122 void SetFitToCurrentPage(bool fit) { m_fitToCurrentPage = fit; }
00123 bool GetFitToCurrentPage() const { return m_fitToCurrentPage; }
00124
00125
00126 wxSizer* GetControlSizer() const { return m_controlSizer; }
00127
00128
00129 void SetTopRuleSize(int border) { m_topRuleSize = border; }
00130 int GetTopRuleSize() const { return m_topRuleSize; }
00131
00132
00133 void SetDrawTopRule(bool draw) { m_drawTopRule = draw; }
00134 bool GetDrawTopRule() const { return m_drawTopRule; }
00135
00136
00137
00138
00139
00140 virtual bool DeletePage(size_t n);
00141
00142
00143 virtual bool RemovePage(size_t n)
00144 {
00145 DoInvalidateBestSize();
00146 return DoRemovePage(n) != NULL;
00147 }
00148
00149
00150 virtual bool DeleteAllPages()
00151 {
00152 DoInvalidateBestSize();
00153 WX_CLEAR_ARRAY(m_pages);
00154 return true;
00155 }
00156
00157
00158 virtual bool AddPage(wxWindow *page,
00159 const wxString& text,
00160 bool bSelect = false,
00161 int imageId = -1)
00162 {
00163 DoInvalidateBestSize();
00164 return InsertPage(GetPageCount(), page, text, bSelect, imageId);
00165 }
00166
00167
00168 virtual bool InsertPage(size_t n,
00169 wxWindow *page,
00170 const wxString& text,
00171 bool bSelect = false,
00172 int imageId = -1);
00173
00174
00175
00176
00177
00178 virtual int SetSelection(size_t n) { return DoSetSelection(n, SetSelection_SendEvent); }
00179
00180
00181 virtual int ChangeSelection(size_t n) { return DoSetSelection(n); }
00182
00183
00184 void AdvanceSelection(bool forward = true)
00185 {
00186 int nPage = GetNextPage(forward);
00187 if ( nPage != -1 )
00188 {
00189
00190 SetSelection((size_t)nPage);
00191 }
00192 }
00193
00194
00195 virtual int HitTest(const wxPoint& WXUNUSED(pt),
00196 long * WXUNUSED(flags) = NULL) const
00197 {
00198 return wxNOT_FOUND;
00199 }
00200
00201
00202
00203 virtual bool HasMultiplePages() const { return true; }
00204
00205
00206
00207
00208
00209 virtual int DoSetSelection(size_t nPage, int flags = 0);
00210
00211
00212
00213
00214
00215
00216
00217 virtual void UpdateSelectedPage(size_t newsel);
00218
00219
00220 virtual wxBookCtrlBaseEvent* CreatePageChangingEvent() const;
00221
00222
00223
00224 virtual void MakeChangedEvent(wxBookCtrlBaseEvent& event);
00225
00226
00227
00228
00229
00230
00231 virtual bool AllowNullPage() const { return false; }
00232
00233
00234 virtual wxWindow *DoRemovePage(size_t page);
00235
00236
00237 virtual wxSize DoGetBestSize() const;
00238
00239
00240 int GetNextPage(bool forward) const;
00241
00242
00243 void DoSize();
00244
00245
00246
00247
00248 void DoInvalidateBestSize();
00249
00250 #if wxUSE_HELP
00251
00252 void OnHelp(wxHelpEvent& event);
00253 #endif // wxUSE_HELP
00254
00255 protected:
00256
00257 enum
00258 {
00259 SetSelection_SendEvent = 1
00260 };
00261
00262
00263 wxArrayPages m_pages;
00264
00265
00266 wxImageList *m_imageList;
00267
00268
00269 bool m_ownsImageList;
00270
00271
00272 wxRect GetPageRect() const;
00273
00274
00275 void OnSize(wxSizeEvent& event);
00276
00277 void OnPaint(wxPaintEvent& event);
00278 void OnEraseBackground(wxEraseEvent& event);
00279
00280
00281 bool m_fitToCurrentPage;
00282
00283
00284 wxSizer *m_controlSizer;
00285
00286
00287 int m_controlMargin;
00288
00289
00290 int m_topRuleSize;
00291
00292 bool m_drawTopRule;
00293
00294 private:
00295
00296
00297 void Init();
00298
00299
00300 unsigned int m_internalBorder;
00301
00302
00303 int m_selection;
00304
00305
00306 wxArrayString m_pageLabels;
00307
00308 DECLARE_ABSTRACT_CLASS(AxPagerCtrl)
00309 DECLARE_NO_COPY_CLASS(AxPagerCtrl)
00310 DECLARE_EVENT_TABLE()
00311 };
00312
00313 #endif
00314