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