1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/aui/auibook.h
3 // Purpose: wxaui: wx advanced user interface - notebook
4 // Author: Benjamin I. Williams
7 // Copyright: (C) Copyright 2006, Kirix Corporation, All Rights Reserved.
8 // Licence: wxWindows Library Licence, Version 3.1
9 ///////////////////////////////////////////////////////////////////////////////
13 #ifndef _WX_AUINOTEBOOK_H_
14 #define _WX_AUINOTEBOOK_H_
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
24 #include "wx/aui/framemanager.h"
25 #include "wx/aui/dockart.h"
26 #include "wx/aui/floatpane.h"
27 #include "wx/control.h"
33 class WXDLLIMPEXP_AUI wxTabArt
38 virtual ~wxTabArt() { }
40 virtual void SetNormalFont(const wxFont
& font
) = 0;
41 virtual void SetSelectedFont(const wxFont
& font
) = 0;
42 virtual void SetMeasuringFont(const wxFont
& font
) = 0;
44 virtual void DrawBackground(
46 const wxRect
& rect
) = 0;
48 virtual void DrawTab(wxDC
* dc
,
49 const wxRect
& in_rect
,
50 const wxString
& caption
,
55 virtual void DrawButton(
57 const wxRect
& in_rect
,
61 const wxBitmap
& bitmap_override
,
62 wxRect
* out_rect
) = 0;
64 virtual wxSize
GetTabSize(
66 const wxString
& caption
,
70 virtual int GetBestTabCtrlSize(wxWindow
* wnd
) = 0;
74 class WXDLLIMPEXP_AUI wxDefaultTabArt
: public wxTabArt
80 virtual ~wxDefaultTabArt();
82 void SetNormalFont(const wxFont
& font
);
83 void SetSelectedFont(const wxFont
& font
);
84 void SetMeasuringFont(const wxFont
& font
);
90 void DrawTab(wxDC
* dc
,
91 const wxRect
& in_rect
,
92 const wxString
& caption
,
99 const wxRect
& in_rect
,
103 const wxBitmap
& bitmap_override
,
108 const wxString
& caption
,
112 int GetBestTabCtrlSize(wxWindow
* wnd
);
116 wxFont m_normal_font
;
117 wxFont m_selected_font
;
118 wxFont m_measuring_font
;
119 wxPen m_normal_bkpen
;
120 wxPen m_selected_bkpen
;
121 wxBrush m_normal_bkbrush
;
122 wxBrush m_selected_bkbrush
;
124 wxBitmap m_active_close_bmp
;
125 wxBitmap m_disabled_close_bmp
;
126 wxBitmap m_active_left_bmp
;
127 wxBitmap m_disabled_left_bmp
;
128 wxBitmap m_active_right_bmp
;
129 wxBitmap m_disabled_right_bmp
;
134 // event declarations/classes
136 class WXDLLIMPEXP_AUI wxAuiNotebookEvent
: public wxNotifyEvent
139 wxAuiNotebookEvent(wxEventType command_type
= wxEVT_NULL
,
141 : wxNotifyEvent(command_type
, win_id
)
145 wxAuiNotebookEvent(const wxAuiNotebookEvent
& c
) : wxNotifyEvent(c
)
147 old_selection
= c
.old_selection
;
148 selection
= c
.selection
;
151 wxEvent
*Clone() const { return new wxAuiNotebookEvent(*this); }
153 void SetSelection(int s
) { selection
= s
; }
154 void SetOldSelection(int s
) { old_selection
= s
; }
155 int GetSelection() const { return selection
; }
156 int GetOldSelection() const { return old_selection
; }
164 DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxAuiNotebookEvent
)
172 class WXDLLIMPEXP_AUI wxAuiNotebookPage
175 wxWindow
* window
; // page's associated window
176 wxString caption
; // caption displayed on the tab
177 wxBitmap bitmap
; // tab's bitmap
178 wxRect rect
; // tab's hit rectangle
179 bool active
; // true if the page is currently active
182 class WXDLLIMPEXP_AUI wxAuiTabContainerButton
185 int id
; // button's id
186 int cur_state
; // current state (normal, hover, pressed, etc.)
187 int location
; // buttons location (wxLEFT or wxRIGHT)
188 wxBitmap bitmap
; // button's hover bitmap
189 wxBitmap dis_bitmap
; // button's disabled bitmap
190 wxRect rect
; // button's hit rectangle
195 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiNotebookPage
, wxAuiNotebookPageArray
, WXDLLIMPEXP_AUI
);
196 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiTabContainerButton
, wxAuiTabContainerButtonArray
, WXDLLIMPEXP_AUI
);
200 class WXDLLIMPEXP_AUI wxAuiTabContainer
205 virtual ~wxAuiTabContainer();
207 void SetArtProvider(wxTabArt
* art
);
208 wxTabArt
* GetArtProvider();
210 bool AddPage(wxWindow
* page
, const wxAuiNotebookPage
& info
);
211 bool InsertPage(wxWindow
* page
, const wxAuiNotebookPage
& info
, size_t idx
);
212 bool RemovePage(wxWindow
* page
);
213 bool SetActivePage(wxWindow
* page
);
214 bool SetActivePage(size_t page
);
215 void SetNoneActive();
216 int GetActivePage() const;
217 bool TabHitTest(int x
, int y
, wxWindow
** hit
) const;
218 bool ButtonHitTest(int x
, int y
, wxAuiTabContainerButton
** hit
) const;
219 wxWindow
* GetWindowFromIdx(size_t idx
) const;
220 int GetIdxFromWindow(wxWindow
* page
) const;
221 size_t GetPageCount() const;
222 wxAuiNotebookPage
& GetPage(size_t idx
);
223 wxAuiNotebookPageArray
& GetPages();
224 void SetNormalFont(const wxFont
& normal_font
);
225 void SetSelectedFont(const wxFont
& selected_font
);
226 void SetMeasuringFont(const wxFont
& measuring_font
);
228 void SetRect(const wxRect
& rect
);
229 void AddButton(int id
,
231 const wxBitmap
& normal_bitmap
= wxNullBitmap
,
232 const wxBitmap
& disabled_bitmap
= wxNullBitmap
);
234 size_t GetTabOffset() const;
235 void SetTabOffset(size_t offset
);
239 virtual void Render(wxDC
* dc
);
244 wxAuiNotebookPageArray m_pages
;
245 wxAuiTabContainerButtonArray m_buttons
;
252 class WXDLLIMPEXP_AUI wxAuiTabCtrl
: public wxControl
,
253 public wxAuiTabContainer
257 wxAuiTabCtrl(wxWindow
* parent
,
258 wxWindowID id
= wxID_ANY
,
259 const wxPoint
& pos
= wxDefaultPosition
,
260 const wxSize
& size
= wxDefaultSize
,
265 void OnPaint(wxPaintEvent
& evt
);
266 void OnEraseBackground(wxEraseEvent
& evt
);
267 void OnSize(wxSizeEvent
& evt
);
268 void OnLeftDown(wxMouseEvent
& evt
);
269 void OnLeftUp(wxMouseEvent
& evt
);
270 void OnMotion(wxMouseEvent
& evt
);
271 void OnLeaveWindow(wxMouseEvent
& evt
);
272 void OnButton(wxAuiNotebookEvent
& evt
);
280 wxAuiTabContainerButton
* m_hover_button
;
283 DECLARE_EVENT_TABLE()
290 class WXDLLIMPEXP_AUI wxAuiMultiNotebook
: public wxControl
295 wxAuiMultiNotebook();
297 wxAuiMultiNotebook(wxWindow
* parent
,
298 wxWindowID id
= wxID_ANY
,
299 const wxPoint
& pos
= wxDefaultPosition
,
300 const wxSize
& size
= wxDefaultSize
,
303 virtual ~wxAuiMultiNotebook();
305 bool Create(wxWindow
* parent
,
306 wxWindowID id
= wxID_ANY
,
307 const wxPoint
& pos
= wxDefaultPosition
,
308 const wxSize
& size
= wxDefaultSize
,
311 bool AddPage(wxWindow
* page
,
312 const wxString
& caption
,
314 const wxBitmap
& bitmap
= wxNullBitmap
);
316 bool InsertPage(size_t page_idx
,
318 const wxString
& caption
,
320 const wxBitmap
& bitmap
= wxNullBitmap
);
322 bool DeletePage(size_t page
);
323 bool RemovePage(size_t page
);
325 bool SetPageText(size_t page
, const wxString
& text
);
326 size_t SetSelection(size_t new_page
);
327 int GetSelection() const;
328 size_t GetPageCount() const;
329 wxWindow
* GetPage(size_t page_idx
) const;
331 void SetArtProvider(wxTabArt
* art
);
332 wxTabArt
* GetArtProvider();
336 wxAuiTabCtrl
* GetTabCtrlFromPoint(const wxPoint
& pt
);
337 wxWindow
* GetTabFrameFromTabCtrl(wxWindow
* tab_ctrl
);
338 wxAuiTabCtrl
* GetActiveTabCtrl();
339 bool FindTab(wxWindow
* page
, wxAuiTabCtrl
** ctrl
, int* idx
);
340 void RemoveEmptyTabFrames();
347 void OnChildFocus(wxChildFocusEvent
& evt
);
348 void OnRender(wxFrameManagerEvent
& evt
);
349 void OnEraseBackground(wxEraseEvent
& evt
);
350 void OnSize(wxSizeEvent
& evt
);
351 void OnTabClicked(wxCommandEvent
& evt
);
352 void OnTabBeginDrag(wxCommandEvent
& evt
);
353 void OnTabDragMotion(wxCommandEvent
& evt
);
354 void OnTabEndDrag(wxCommandEvent
& evt
);
355 void OnTabButton(wxCommandEvent
& evt
);
359 wxFrameManager m_mgr
;
360 wxAuiTabContainer m_tabs
;
362 int m_tab_id_counter
;
363 wxWindow
* m_dummy_wnd
;
365 wxFont m_selected_font
;
366 wxFont m_normal_font
;
367 int m_tab_ctrl_height
;
370 DECLARE_EVENT_TABLE()
377 // wx event machinery
381 BEGIN_DECLARE_EVENT_TYPES()
382 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED
, 0)
383 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING
, 0)
384 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUINOTEBOOK_BUTTON
, 0)
385 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG
, 0)
386 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUINOTEBOOK_END_DRAG
, 0)
387 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION
, 0)
388 END_DECLARE_EVENT_TYPES()
390 typedef void (wxEvtHandler::*wxAuiNotebookEventFunction
)(wxAuiNotebookEvent
&);
392 #define wxAuiNotebookEventHandler(func) \
393 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxAuiNotebookEventFunction, &func)
395 #define EVT_AUINOTEBOOK_PAGE_CHANGED(winid, fn) \
396 wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, winid, wxAuiNotebookEventHandler(fn))
397 #define EVT_AUINOTEBOOK_PAGE_CHANGING(winid, fn) \
398 wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, winid, wxAuiNotebookEventHandler(fn))
399 #define EVT_AUINOTEBOOK_BUTTON(winid, fn) \
400 wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_BUTTON, winid, wxAuiNotebookEventHandler(fn))
401 #define EVT_AUINOTEBOOK_BEGIN_DRAG(winid, fn) \
402 wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, winid, wxAuiNotebookEventHandler(fn))
403 #define EVT_AUINOTEBOOK_END_DRAG(winid, fn) \
404 wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, winid, wxAuiNotebookEventHandler(fn))
405 #define EVT_AUINOTEBOOK_DRAG_MOTION(winid, fn) \
406 wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, winid, wxAuiNotebookEventHandler(fn))
410 // wxpython/swig event work
411 %constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED
;
412 %constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING
;
413 %constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_BUTTON
;
414 %constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG
;
415 %constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_END_DRAG
;
416 %constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION
;
419 EVT_AUINOTEBOOK_PAGE_CHANGED
= wx
.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED
, 1 )
420 EVT_AUINOTEBOOK_PAGE_CHANGING
= wx
.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING
, 1 )
421 EVT_AUINOTEBOOK_BUTTON
= wx
.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_BUTTON
, 1 )
422 EVT_AUINOTEBOOK_BEGIN_DRAG
= wx
.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG
, 1 )
423 EVT_AUINOTEBOOK_END_DRAG
= wx
.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_END_DRAG
, 1 )
424 EVT_AUINOTEBOOK_DRAG_MOTION
= wx
.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION
, 1 )
430 #endif // _WX_AUINOTEBOOK_H_