1/////////////////////////////////////////////////////////////////////////////// 2// Name: wx/toolbook.h 3// Purpose: wxToolbook: wxToolBar and wxNotebook combination 4// Author: Julian Smart 5// Modified by: 6// Created: 2006-01-29 7// RCS-ID: $Id: toolbook.h 49804 2007-11-10 01:09:42Z VZ $ 8// Copyright: (c) 2006 Julian Smart 9// Licence: wxWindows licence 10/////////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_TOOLBOOK_H_ 13#define _WX_TOOLBOOK_H_ 14 15#include "wx/defs.h" 16 17#if wxUSE_TOOLBOOK 18 19#include "wx/bookctrl.h" 20 21class WXDLLIMPEXP_FWD_CORE wxToolBarBase; 22class WXDLLIMPEXP_FWD_CORE wxCommandEvent; 23 24extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED; 25extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING; 26 27 28// Use wxButtonToolBar 29#define wxBK_BUTTONBAR 0x0100 30 31// ---------------------------------------------------------------------------- 32// wxToolbook 33// ---------------------------------------------------------------------------- 34 35class WXDLLEXPORT wxToolbook : public wxBookCtrlBase 36{ 37public: 38 wxToolbook() 39 { 40 Init(); 41 } 42 43 wxToolbook(wxWindow *parent, 44 wxWindowID id, 45 const wxPoint& pos = wxDefaultPosition, 46 const wxSize& size = wxDefaultSize, 47 long style = 0, 48 const wxString& name = wxEmptyString) 49 { 50 Init(); 51 52 (void)Create(parent, id, pos, size, style, name); 53 } 54 55 // quasi ctor 56 bool Create(wxWindow *parent, 57 wxWindowID id, 58 const wxPoint& pos = wxDefaultPosition, 59 const wxSize& size = wxDefaultSize, 60 long style = 0, 61 const wxString& name = wxEmptyString); 62 63 64 // implement base class virtuals 65 virtual int GetSelection() const; 66 virtual bool SetPageText(size_t n, const wxString& strText); 67 virtual wxString GetPageText(size_t n) const; 68 virtual int GetPageImage(size_t n) const; 69 virtual bool SetPageImage(size_t n, int imageId); 70 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; 71 virtual bool InsertPage(size_t n, 72 wxWindow *page, 73 const wxString& text, 74 bool bSelect = false, 75 int imageId = -1); 76 virtual int SetSelection(size_t n) { return DoSetSelection(n, SetSelection_SendEvent); } 77 virtual int ChangeSelection(size_t n) { return DoSetSelection(n); } 78 virtual void SetImageList(wxImageList *imageList); 79 80 virtual bool DeleteAllPages(); 81 virtual int HitTest(const wxPoint& pt, long *flags = NULL) const; 82 83 84 // methods which are not part of base wxBookctrl API 85 86 // get the underlying toolbar 87 wxToolBarBase* GetToolBar() const { return (wxToolBarBase*)m_bookctrl; } 88 89 // must be called in OnIdle or by application to realize the toolbar and 90 // select the initial page. 91 void Realize(); 92 93protected: 94 virtual wxWindow *DoRemovePage(size_t page); 95 96 // get the size which the list control should have 97 virtual wxSize GetControllerSize() const; 98 99 // event handlers 100 void OnToolSelected(wxCommandEvent& event); 101 void OnSize(wxSizeEvent& event); 102 void OnIdle(wxIdleEvent& event); 103 104 void UpdateSelectedPage(size_t newsel); 105 106 wxBookCtrlBaseEvent* CreatePageChangingEvent() const; 107 void MakeChangedEvent(wxBookCtrlBaseEvent &event); 108 109 // the currently selected page or wxNOT_FOUND if none 110 int m_selection; 111 112 // whether the toolbar needs to be realized 113 bool m_needsRealizing; 114 115 // maximum bitmap size 116 wxSize m_maxBitmapSize; 117 118private: 119 // common part of all constructors 120 void Init(); 121 122 DECLARE_EVENT_TABLE() 123 DECLARE_DYNAMIC_CLASS_NO_COPY(wxToolbook) 124}; 125 126// ---------------------------------------------------------------------------- 127// listbook event class and related stuff 128// ---------------------------------------------------------------------------- 129 130class WXDLLEXPORT wxToolbookEvent : public wxBookCtrlBaseEvent 131{ 132public: 133 wxToolbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0, 134 int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND) 135 : wxBookCtrlBaseEvent(commandType, id, nSel, nOldSel) 136 { 137 } 138 139 wxToolbookEvent(const wxToolbookEvent& event) 140 : wxBookCtrlBaseEvent(event) 141 { 142 } 143 144 virtual wxEvent *Clone() const { return new wxToolbookEvent(*this); } 145 146private: 147 DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxToolbookEvent) 148}; 149 150typedef void (wxEvtHandler::*wxToolbookEventFunction)(wxToolbookEvent&); 151 152#define wxToolbookEventHandler(func) \ 153 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxToolbookEventFunction, &func) 154 155#define EVT_TOOLBOOK_PAGE_CHANGED(winid, fn) \ 156 wx__DECLARE_EVT1(wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED, winid, wxToolbookEventHandler(fn)) 157 158#define EVT_TOOLBOOK_PAGE_CHANGING(winid, fn) \ 159 wx__DECLARE_EVT1(wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING, winid, wxToolbookEventHandler(fn)) 160 161#endif // wxUSE_TOOLBOOK 162 163#endif // _WX_TOOLBOOK_H_ 164