From a3219eea2611e91189557bc10dc0a11bb76bba37 Mon Sep 17 00:00:00 2001 From: Benjamin Williams Date: Fri, 21 Jul 2006 13:36:21 +0000 Subject: [PATCH] added corresponding notebook.h and tabmdi.h to aui git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40219 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/aui/notebook.h | 302 ++++++++++++++++++++++++++++++++++++++ include/wx/aui/tabmdi.h | 255 ++++++++++++++++++++++++++++++++ 2 files changed, 557 insertions(+) create mode 100644 include/wx/aui/notebook.h create mode 100644 include/wx/aui/tabmdi.h diff --git a/include/wx/aui/notebook.h b/include/wx/aui/notebook.h new file mode 100644 index 0000000000..93a4bd082c --- /dev/null +++ b/include/wx/aui/notebook.h @@ -0,0 +1,302 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/aui/notebook.h +// Purpose: wxaui: wx advanced user interface - notebook +// Author: Benjamin I. Williams +// Modified by: +// Created: 2006-06-28 +// Copyright: (C) Copyright 2006, Kirix Corporation, All Rights Reserved. +// Licence: wxWindows Library Licence, Version 3.1 +/////////////////////////////////////////////////////////////////////////////// + + + +#ifndef _WX_AUINOTEBOOK_H_ +#define _WX_AUINOTEBOOK_H_ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +#include "wx/defs.h" +#include "wx/aui/framemanager.h" +#include "wx/aui/dockart.h" +#include "wx/aui/floatpane.h" + + +#if wxUSE_AUI + + + +// event declarations/classes + +class WXDLLIMPEXP_AUI wxAuiNotebookEvent : public wxNotifyEvent +{ +public: + wxAuiNotebookEvent(wxEventType command_type = wxEVT_NULL, + int win_id = 0) + : wxNotifyEvent(command_type, win_id) + { + } +#ifndef SWIG + wxAuiNotebookEvent(const wxAuiNotebookEvent& c) : wxNotifyEvent(c) + { + old_selection = c.old_selection; + selection = c.selection; + } +#endif + wxEvent *Clone() const { return new wxAuiNotebookEvent(*this); } + + void SetSelection(int s) { selection = s; } + void SetOldSelection(int s) { old_selection = s; } + int GetSelection() const { return selection; } + int GetOldSelection() const { return old_selection; } + +public: + int old_selection; + int selection; + +#ifndef SWIG +private: + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxAuiNotebookEvent) +#endif +}; + + + + + +class WXDLLIMPEXP_AUI wxAuiNotebookPage +{ +public: + wxWindow* window; // page's associated window + wxString caption; // caption displayed on the tab + wxBitmap bitmap; // tab's bitmap + wxRect rect; // tab's hit rectangle + bool active; // true if the page is currently active +}; + +class WXDLLIMPEXP_AUI wxAuiTabContainerButton +{ +public: + int id; // button's id + int cur_state; // current state (normal, hover, pressed) + wxBitmap bitmap; // button's bitmap + wxRect rect; // button's hit rectangle +}; + + +WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiNotebookPage, wxAuiNotebookPageArray, WXDLLIMPEXP_AUI); +WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiTabContainerButton, wxAuiTabContainerButtonArray, WXDLLIMPEXP_AUI); + + + +class WXDLLIMPEXP_AUI wxAuiTabContainer +{ +public: + + wxAuiTabContainer(); + + bool AddPage(wxWindow* page, const wxAuiNotebookPage& info); + bool InsertPage(wxWindow* page, const wxAuiNotebookPage& info, size_t idx); + bool RemovePage(wxWindow* page); + bool SetActivePage(wxWindow* page); + bool SetActivePage(size_t page); + void SetNoneActive(); + int GetActivePage() const; + bool TabHitTest(int x, int y, wxWindow** hit) const; + bool ButtonHitTest(int x, int y, wxAuiTabContainerButton** hit) const; + wxWindow* GetWindowFromIdx(size_t idx) const; + int GetIdxFromWindow(wxWindow* page) const; + size_t GetPageCount() const; + wxAuiNotebookPage& GetPage(size_t idx); + wxAuiNotebookPageArray& GetPages(); + void SetNormalFont(const wxFont& normal_font); + void SetSelectedFont(const wxFont& selected_font); + void SetMeasuringFont(const wxFont& measuring_font); + void DoShowHide(); + void SetRect(const wxRect& rect); + void AddButton(int id, const wxBitmap& bmp); + +protected: + + virtual void Render(wxDC* dc); + + virtual void DrawTab(wxDC* dc, + const wxRect& in_rect, + const wxString& caption, + bool active, + wxRect* out_rect, + int* x_extent); +private: + + wxAuiNotebookPageArray m_pages; + wxAuiTabContainerButtonArray m_buttons; + wxRect m_rect; + wxFont m_normal_font; + wxFont m_selected_font; + wxFont m_measuring_font; + wxPen m_normal_bkpen; + wxPen m_selected_bkpen; + wxBrush m_normal_bkbrush; + wxBrush m_selected_bkbrush; + wxBrush m_bkbrush; +}; + + + +class WXDLLIMPEXP_AUI wxAuiTabCtrl : public wxControl, + public wxAuiTabContainer +{ +public: + + wxAuiTabCtrl(wxWindow* parent, + wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0); + +protected: + + void OnPaint(wxPaintEvent& evt); + void OnEraseBackground(wxEraseEvent& evt); + void OnSize(wxSizeEvent& evt); + void OnLeftDown(wxMouseEvent& evt); + void OnLeftUp(wxMouseEvent& evt); + void OnMotion(wxMouseEvent& evt); + void OnLeaveWindow(wxMouseEvent& evt); + +protected: + + wxPoint m_click_pt; + int m_click_tab; + bool m_is_dragging; + wxAuiTabContainerButton* m_hover_button; + + DECLARE_EVENT_TABLE() +}; + + + + +class WXDLLIMPEXP_AUI wxAuiMultiNotebook : public wxControl +{ + +public: + + wxAuiMultiNotebook(); + + wxAuiMultiNotebook(wxWindow* parent, + wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0); + + virtual ~wxAuiMultiNotebook(); + + bool Create(wxWindow* parent, + wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0); + + bool AddPage(wxWindow* page, + const wxString& caption, + bool select = false, + const wxBitmap& bitmap = wxNullBitmap); + + bool InsertPage(size_t page_idx, + wxWindow* page, + const wxString& caption, + bool select = false, + const wxBitmap& bitmap = wxNullBitmap); + + bool DeletePage(size_t page); + bool RemovePage(size_t page); + + bool SetPageText(size_t page, const wxString& text); + size_t SetSelection(size_t new_page); + int GetSelection() const; + size_t GetPageCount() const; + wxWindow* GetPage(size_t page_idx) const; + +protected: + + wxAuiTabCtrl* GetTabCtrlFromPoint(const wxPoint& pt); + wxWindow* GetTabFrameFromTabCtrl(wxWindow* tab_ctrl); + wxAuiTabCtrl* GetActiveTabCtrl(); + bool FindTab(wxWindow* page, wxAuiTabCtrl** ctrl, int* idx); + void RemoveEmptyTabFrames(); + +protected: + + void DoSizing(); + void InitNotebook(); + + void OnChildFocus(wxChildFocusEvent& evt); + void OnRender(wxFrameManagerEvent& evt); + void OnEraseBackground(wxEraseEvent& evt); + void OnSize(wxSizeEvent& evt); + void OnTabClicked(wxCommandEvent& evt); + void OnTabBeginDrag(wxCommandEvent& evt); + void OnTabDragMotion(wxCommandEvent& evt); + void OnTabEndDrag(wxCommandEvent& evt); + void OnTabButton(wxCommandEvent& evt); + +protected: + + wxFrameManager m_mgr; + wxAuiTabContainer m_tabs; + int m_curpage; + int m_tab_id_counter; + wxWindow* m_dummy_wnd; + + wxFont m_selected_font; + wxFont m_normal_font; + + DECLARE_EVENT_TABLE() +}; + + + + +// wx event machinery + +#ifndef SWIG + +BEGIN_DECLARE_EVENT_TYPES() + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, 0) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, 0) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_BUTTON, 0) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, 0) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, 0) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, 0) +END_DECLARE_EVENT_TYPES() + +typedef void (wxEvtHandler::*wxAuiNotebookEventFunction)(wxAuiNotebookEvent&); + +#define wxAuiNotebookEventHandler(func) \ + (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxAuiNotebookEventFunction, &func) + +#define EVT_AUINOTEBOOK_PAGE_CHANGED(winid, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, winid, wxAuiNotebookEventHandler(fn)) +#define EVT_AUINOTEBOOK_PAGE_CHANGING(winid, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, winid, wxAuiNotebookEventHandler(fn)) +#define EVT_AUINOTEBOOK_PAGE_BUTTON(winid, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_BUTTON, winid, wxAuiNotebookEventHandler(fn)) +#define EVT_AUINOTEBOOK_BEGIN_DRAG(winid, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, winid, wxAuiNotebookEventHandler(fn)) +#define EVT_AUINOTEBOOK_END_DRAG(winid, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, winid, wxAuiNotebookEventHandler(fn)) +#define EVT_AUINOTEBOOK_DRAG_MOTION(winid, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, winid, wxAuiNotebookEventHandler(fn)) + +#else + +// wxpython/swig event work + + +#endif + + +#endif // wxUSE_AUI +#endif // _WX_AUINOTEBOOK_H_ diff --git a/include/wx/aui/tabmdi.h b/include/wx/aui/tabmdi.h new file mode 100644 index 0000000000..70758e04eb --- /dev/null +++ b/include/wx/aui/tabmdi.h @@ -0,0 +1,255 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/generic/mdig.h +// Purpose: Generic MDI (Multiple Document Interface) classes +// Author: Hans Van Leemputten +// Modified by: Benjamin I. Williams / Kirix Corporation +// Created: 29/07/2002 +// RCS-ID: $Id$ +// Copyright: (c) Hans Van Leemputten +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_AUITABMDI_H_ +#define _WX_AUITABMDI_H_ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +#include "wx/frame.h" +#include "wx/panel.h" +#include "wx/notebook.h" +#include "wx/aui/notebook.h" + +extern WXDLLEXPORT_DATA(const wxChar) wxFrameNameStr[]; +extern WXDLLEXPORT_DATA(const wxChar) wxStatusLineNameStr[]; + +//----------------------------------------------------------------------------- +// classes +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxTabMDIParentFrame; +class WXDLLEXPORT wxTabMDIClientWindow; +class WXDLLEXPORT wxTabMDIChildFrame; + +//----------------------------------------------------------------------------- +// wxTabMDIParentFrame +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxTabMDIParentFrame : public wxFrame +{ +public: + wxTabMDIParentFrame(); + wxTabMDIParentFrame(wxWindow *parent, + wxWindowID winid, + const wxString& title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, + const wxString& name = wxFrameNameStr); + + ~wxTabMDIParentFrame(); + + bool Create(wxWindow *parent, + wxWindowID winid, + const wxString& title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, + const wxString& name = wxFrameNameStr ); + +#if wxUSE_MENUS + wxMenu* GetWindowMenu() const { return m_pWindowMenu; }; + void SetWindowMenu(wxMenu* pMenu); + + virtual void SetMenuBar(wxMenuBar *pMenuBar); +#endif // wxUSE_MENUS + + void SetChildMenuBar(wxTabMDIChildFrame *pChild); + + virtual bool ProcessEvent(wxEvent& event); + + wxTabMDIChildFrame *GetActiveChild() const; + inline void SetActiveChild(wxTabMDIChildFrame* pChildFrame); + + wxTabMDIClientWindow *GetClientWindow() const; + virtual wxTabMDIClientWindow *OnCreateClient(); + + virtual void Cascade() { /* Has no effect */ } + virtual void Tile(wxOrientation WXUNUSED(orient) = wxHORIZONTAL) { } + virtual void ArrangeIcons() { /* Has no effect */ } + virtual void ActivateNext(); + virtual void ActivatePrevious(); + +protected: + wxTabMDIClientWindow *m_pClientWindow; + wxTabMDIChildFrame *m_pActiveChild; + +#if wxUSE_MENUS + wxMenu *m_pWindowMenu; + wxMenuBar *m_pMyMenuBar; +#endif // wxUSE_MENUS + +protected: + void Init(); + +#if wxUSE_MENUS + void RemoveWindowMenu(wxMenuBar *pMenuBar); + void AddWindowMenu(wxMenuBar *pMenuBar); + + void DoHandleMenu(wxCommandEvent &event); +#endif // wxUSE_MENUS + + virtual void DoGetClientSize(int *width, int *height) const; + +private: + DECLARE_EVENT_TABLE() + DECLARE_DYNAMIC_CLASS(wxTabMDIParentFrame) +}; + +//----------------------------------------------------------------------------- +// wxTabMDIChildFrame +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxTabMDIChildFrame : public wxPanel +{ +public: + wxTabMDIChildFrame(); + wxTabMDIChildFrame(wxTabMDIParentFrame *parent, + wxWindowID winid, + const wxString& title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDEFAULT_FRAME_STYLE, + const wxString& name = wxFrameNameStr); + + virtual ~wxTabMDIChildFrame(); + bool Create(wxTabMDIParentFrame *parent, + wxWindowID winid, + const wxString& title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDEFAULT_FRAME_STYLE, + const wxString& name = wxFrameNameStr); + +#if wxUSE_MENUS + virtual void SetMenuBar(wxMenuBar *menu_bar); + virtual wxMenuBar *GetMenuBar() const; +#endif // wxUSE_MENUS + + virtual void SetTitle(const wxString& title); + virtual wxString GetTitle() const; + + virtual void Activate(); + virtual bool Destroy(); + +#if wxUSE_STATUSBAR + // no status bars + virtual wxStatusBar* CreateStatusBar(int WXUNUSED(number) = 1, + long WXUNUSED(style) = 1, + wxWindowID WXUNUSED(winid) = 1, + const wxString& WXUNUSED(name) = wxEmptyString) + { return (wxStatusBar*)NULL; } + + virtual wxStatusBar *GetStatusBar() const { return (wxStatusBar*)NULL; } + virtual void SetStatusText( const wxString &WXUNUSED(text), int WXUNUSED(number)=0 ) {} + virtual void SetStatusWidths( int WXUNUSED(n), const int WXUNUSED(widths_field)[] ) {} +#endif + + // no size hints + virtual void DoSetSizeHints(int WXUNUSED(minW), + int WXUNUSED(minH), + int WXUNUSED(maxW) = wxDefaultCoord, + int WXUNUSED(maxH) = wxDefaultCoord, + int WXUNUSED(incW) = wxDefaultCoord, + int WXUNUSED(incH) = wxDefaultCoord) {} +#if wxUSE_TOOLBAR + // no toolbar bars + virtual wxToolBar* CreateToolBar(long WXUNUSED(style), + wxWindowID WXUNUSED(winid), + const wxString& WXUNUSED(name)) + { return (wxToolBar*)NULL; } + virtual wxToolBar *GetToolBar() const { return (wxToolBar*)NULL; } +#endif + + // no icon + void SetIcon(const wxIcon& WXUNUSED(icon)) { } + void SetIcons(const wxIconBundle& WXUNUSED(icons)) { } + + // no maximize etc + virtual void Maximize(bool WXUNUSED(maximize) = true) { /* Has no effect */ } + virtual void Restore() { /* Has no effect */ } + virtual void Iconize(bool WXUNUSED(iconize) = true) { /* Has no effect */ } + virtual bool IsMaximized() const { return true; } + virtual bool IsIconized() const { return false; } + virtual bool ShowFullScreen(bool WXUNUSED(show), long WXUNUSED(style)) { return false; } + virtual bool IsFullScreen() const { return false; } + + virtual bool IsTopLevel() const { return false; } + + void OnMenuHighlight(wxMenuEvent& evt); + void OnActivate(wxActivateEvent& evt); + void OnCloseWindow(wxCloseEvent& evt); + + void SetMDIParentFrame(wxTabMDIParentFrame* parent); + wxTabMDIParentFrame* GetMDIParentFrame() const; + +protected: + wxTabMDIParentFrame *m_pMDIParentFrame; + wxRect m_mdi_newrect; + wxRect m_mdi_currect; + wxString m_title; + +#if wxUSE_MENUS + wxMenuBar *m_pMenuBar; +#endif // wxUSE_MENUS + +protected: + void Init(); + + virtual bool Show(bool show = true); + virtual void DoSetSize(int x, int y, int width, int height, int size_flags); + virtual void DoMoveWindow(int x, int y, int width, int height); + +public: + // This function needs to be called when a size change is confirmed, + // we needed this function to prevent anybody from the outside + // changing the panel... it messes the UI layout when we would allow it. + void ApplyMDIChildFrameRect(); + void DoShow(bool show); + +private: + DECLARE_DYNAMIC_CLASS(wxTabMDIChildFrame) + DECLARE_EVENT_TABLE() + + friend class wxTabMDIClientWindow; +}; + +//----------------------------------------------------------------------------- +// wxTabMDIClientWindow +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxTabMDIClientWindow : public wxAuiMultiNotebook +{ +public: + wxTabMDIClientWindow(); + wxTabMDIClientWindow(wxTabMDIParentFrame *parent, long style = 0); + ~wxTabMDIClientWindow(); + + virtual bool CreateClient(wxTabMDIParentFrame *parent, + long style = wxVSCROLL | wxHSCROLL); + + virtual int SetSelection(size_t page); + +protected: + + void PageChanged(int old_selection, int new_selection); + void OnPageChanged(wxAuiNotebookEvent& event); + void OnSize(wxSizeEvent& evt); + +private: + DECLARE_DYNAMIC_CLASS(wxTabMDIClientWindow) + DECLARE_EVENT_TABLE() +}; + +#endif // _WX_AUITABMDI_H_ -- 2.45.2