1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/msw/notebook.h 3 // Purpose: MSW/GTK compatible notebook (a.k.a. property sheet) 4 // Author: Robert Roebling 5 // Modified by: Vadim Zeitlin for Windows version 6 // RCS-ID: $Id: notebook.h 41797 2006-10-09 12:10:01Z VZ $ 7 // Copyright: (c) Julian Smart 8 // Licence: wxWindows licence 9 ///////////////////////////////////////////////////////////////////////////// 10 11 #ifndef _NOTEBOOK_H 12 #define _NOTEBOOK_H 13 14 #if wxUSE_NOTEBOOK 15 16 // ---------------------------------------------------------------------------- 17 // headers 18 // ---------------------------------------------------------------------------- 19 20 #include "wx/control.h" 21 22 // ---------------------------------------------------------------------------- 23 // wxNotebook 24 // ---------------------------------------------------------------------------- 25 26 class WXDLLEXPORT wxNotebookPageInfo : public wxObject 27 { 28 public : wxNotebookPageInfo()29 wxNotebookPageInfo() { m_page = NULL; m_imageId = -1; m_selected = false; } ~wxNotebookPageInfo()30 virtual ~wxNotebookPageInfo() { } 31 Create(wxNotebookPage * page,const wxString & text,bool selected,int imageId)32 void Create(wxNotebookPage *page, 33 const wxString& text, 34 bool selected, 35 int imageId) 36 { 37 m_page = page; 38 m_text = text; 39 m_selected = selected; 40 m_imageId = imageId; 41 } 42 GetPage()43 wxNotebookPage* GetPage() const { return m_page; } GetText()44 wxString GetText() const { return m_text; } GetSelected()45 bool GetSelected() const { return m_selected; } GetImageId()46 int GetImageId() const { return m_imageId; } 47 48 private: 49 wxNotebookPage *m_page; 50 wxString m_text; 51 bool m_selected; 52 int m_imageId; 53 54 DECLARE_DYNAMIC_CLASS(wxNotebookPageInfo) 55 }; 56 57 58 WX_DECLARE_EXPORTED_LIST(wxNotebookPageInfo, wxNotebookPageInfoList ); 59 60 class WXDLLEXPORT wxNotebook : public wxNotebookBase 61 { 62 public: 63 // ctors 64 // ----- 65 // default for dynamic class 66 wxNotebook(); 67 // the same arguments as for wxControl (@@@ any special styles?) 68 wxNotebook(wxWindow *parent, 69 wxWindowID id, 70 const wxPoint& pos = wxDefaultPosition, 71 const wxSize& size = wxDefaultSize, 72 long style = 0, 73 const wxString& name = wxNotebookNameStr); 74 // Create() function 75 bool Create(wxWindow *parent, 76 wxWindowID id, 77 const wxPoint& pos = wxDefaultPosition, 78 const wxSize& size = wxDefaultSize, 79 long style = 0, 80 const wxString& name = wxNotebookNameStr); 81 virtual ~wxNotebook(); 82 83 // accessors 84 // --------- 85 // get number of pages in the dialog 86 virtual size_t GetPageCount() const; 87 88 // set the currently selected page, return the index of the previously 89 // selected one (or -1 on error) 90 // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events 91 int SetSelection(size_t nPage); 92 // get the currently selected page GetSelection()93 int GetSelection() const { return m_nSelection; } 94 95 // changes selected page without sending events 96 int ChangeSelection(size_t nPage); 97 98 // set/get the title of a page 99 bool SetPageText(size_t nPage, const wxString& strText); 100 wxString GetPageText(size_t nPage) const; 101 102 // image list stuff: each page may have an image associated with it. All 103 // the images belong to an image list, so you have to 104 // 1) create an image list 105 // 2) associate it with the notebook 106 // 3) set for each page it's image 107 // associate image list with a control 108 void SetImageList(wxImageList* imageList); 109 110 // sets/returns item's image index in the current image list 111 int GetPageImage(size_t nPage) const; 112 bool SetPageImage(size_t nPage, int nImage); 113 114 // currently it's always 1 because wxGTK doesn't support multi-row 115 // tab controls 116 int GetRowCount() const; 117 118 // control the appearance of the notebook pages 119 // set the size (the same for all pages) 120 void SetPageSize(const wxSize& size); 121 // set the padding between tabs (in pixels) 122 void SetPadding(const wxSize& padding); 123 124 // operations 125 // ---------- 126 // remove all pages 127 bool DeleteAllPages(); 128 129 // inserts a new page to the notebook (it will be deleted ny the notebook, 130 // don't delete it yourself). If bSelect, this page becomes active. 131 bool InsertPage(size_t nPage, 132 wxNotebookPage *pPage, 133 const wxString& strText, 134 bool bSelect = false, 135 int imageId = -1); 136 AddPageInfo(wxNotebookPageInfo * info)137 void AddPageInfo( wxNotebookPageInfo* info ) { AddPage( info->GetPage() , info->GetText() , info->GetSelected() , info->GetImageId() ); } 138 const wxNotebookPageInfoList& GetPageInfos() const; 139 140 // Windows-only at present. Also, you must use the wxNB_FIXEDWIDTH 141 // style. 142 void SetTabSize(const wxSize& sz); 143 144 // hit test 145 virtual int HitTest(const wxPoint& pt, long *flags = NULL) const; 146 147 // calculate the size of the notebook from the size of its page 148 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; 149 150 // callbacks 151 // --------- 152 void OnSize(wxSizeEvent& event); 153 void OnSelChange(wxNotebookEvent& event); 154 void OnNavigationKey(wxNavigationKeyEvent& event); 155 156 // base class virtuals 157 // ------------------- 158 159 virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); 160 virtual bool MSWOnScroll(int orientation, WXWORD nSBCode, 161 WXWORD pos, WXHWND control); 162 163 #if wxUSE_CONSTRAINTS 164 virtual void SetConstraintSizes(bool recurse = true); 165 virtual bool DoPhase(int nPhase); 166 #endif // wxUSE_CONSTRAINTS 167 168 // Attempts to get colour for UX theme page background 169 wxColour GetThemeBackgroundColour() const; 170 171 // implementation only 172 // ------------------- 173 174 #if wxUSE_UXTHEME SetBackgroundColour(const wxColour & colour)175 virtual bool SetBackgroundColour(const wxColour& colour) 176 { 177 if ( !wxNotebookBase::SetBackgroundColour(colour) ) 178 return false; 179 180 UpdateBgBrush(); 181 182 return true; 183 } 184 185 // return the themed brush for painting our children 186 virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd); 187 188 // draw child background 189 virtual bool MSWPrintChild(WXHDC hDC, wxWindow *win); 190 #endif // wxUSE_UXTHEME 191 192 // translate wxWin styles to the Windows ones 193 virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle = NULL) const; 194 195 protected: 196 // common part of all ctors 197 void Init(); 198 199 // hides the currently shown page and shows the given one (if not -1) and 200 // updates m_nSelection accordingly 201 void UpdateSelection(int selNew); 202 203 // remove one page from the notebook, without deleting 204 virtual wxNotebookPage *DoRemovePage(size_t nPage); 205 206 // get the page rectangle for the current notebook size 207 // 208 // returns empty rectangle if an error occurs, do test for it 209 wxRect GetPageSize() const; 210 211 // set the size of the given page to fit in the notebook 212 void AdjustPageSize(wxNotebookPage *page); 213 214 #if wxUSE_UXTHEME 215 // gets the bitmap of notebook background and returns a brush from it 216 WXHBRUSH QueryBgBitmap(); 217 218 // creates the brush to be used for drawing the tab control background 219 void UpdateBgBrush(); 220 221 // common part of QueryBgBitmap() and MSWPrintChild() 222 // 223 // if child == NULL, draw background for the entire notebook itself 224 bool DoDrawBackground(WXHDC hDC, wxWindow *child = NULL); 225 #endif // wxUSE_UXTHEME 226 227 // these function are only used for reducing flicker on notebook resize and 228 // we don't need to do this for WinCE 229 #ifndef __WXWINCE__ 230 void OnEraseBackground(wxEraseEvent& event); 231 void OnPaint(wxPaintEvent& event); 232 233 // true if we have already subclassed our updown control 234 bool m_hasSubclassedUpdown; 235 #endif // __WXWINCE__ 236 237 // the current selection (-1 if none) 238 int m_nSelection; 239 240 wxNotebookPageInfoList m_pageInfos; 241 242 #if wxUSE_UXTHEME 243 // background brush used to paint the tab control 244 WXHBRUSH m_hbrBackground; 245 #endif // wxUSE_UXTHEME 246 247 248 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNotebook) 249 DECLARE_EVENT_TABLE() 250 }; 251 252 #endif // wxUSE_NOTEBOOK 253 254 #endif // _NOTEBOOK_H 255