X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e227438f246005b50319189a28d0128bb83ab3bf..c6ea1fdaf924be4ee49a19d12f76e4fcd257bb0a:/include/wx/aui/framemanager.h diff --git a/include/wx/aui/framemanager.h b/include/wx/aui/framemanager.h index 00de34da6a..d1c9096fbc 100644 --- a/include/wx/aui/framemanager.h +++ b/include/wx/aui/framemanager.h @@ -25,6 +25,7 @@ #include "wx/window.h" #include "wx/timer.h" #include "wx/sizer.h" +#include "wx/bitmap.h" enum wxAuiManagerDock { @@ -47,6 +48,7 @@ enum wxAuiManagerOption wxAUI_MGR_RECTANGLE_HINT = 1 << 5, wxAUI_MGR_HINT_FADE = 1 << 6, wxAUI_MGR_NO_VENETIAN_BLINDS_FADE = 1 << 7, + wxAUI_MGR_LIVE_RESIZE = 1 << 8, wxAUI_MGR_DEFAULT = wxAUI_MGR_ALLOW_FLOATING | wxAUI_MGR_TRANSPARENT_HINT | @@ -172,6 +174,7 @@ public: { name = c.name; caption = c.caption; + icon = c.icon; window = c.window; frame = c.frame; state = c.state; @@ -221,6 +224,8 @@ public: source.window = window; source.frame = frame; source.buttons = buttons; + wxCHECK_RET(source.IsValid(), + "window settings and pane settings are incompatible"); // now assign *this = source; } @@ -236,6 +241,11 @@ public: bool IsBottomDockable() const { return HasFlag(optionBottomDockable); } bool IsLeftDockable() const { return HasFlag(optionLeftDockable); } bool IsRightDockable() const { return HasFlag(optionRightDockable); } + bool IsDockable() const + { + return HasFlag(optionTopDockable | optionBottomDockable | + optionLeftDockable | optionRightDockable); + } bool IsFloatable() const { return HasFlag(optionFloatable); } bool IsMovable() const { return HasFlag(optionMovable); } bool IsDestroyOnClose() const { return HasFlag(optionDestroyOnClose); } @@ -252,9 +262,18 @@ public: #ifdef SWIG %typemap(out) wxAuiPaneInfo& { $result = $self; Py_INCREF($result); } #endif - wxAuiPaneInfo& Window(wxWindow* w) { window = w; return *this; } + wxAuiPaneInfo& Window(wxWindow* w) + { + wxAuiPaneInfo test(*this); + test.window = w; + wxCHECK_MSG(test.IsValid(), *this, + "window settings and pane settings are incompatible"); + *this = test; + return *this; + } wxAuiPaneInfo& Name(const wxString& n) { name = n; return *this; } wxAuiPaneInfo& Caption(const wxString& c) { caption = c; return *this; } + wxAuiPaneInfo& Icon(const wxBitmap& b) { icon = b; return *this; } wxAuiPaneInfo& Left() { dock_direction = wxAUI_DOCK_LEFT; return *this; } wxAuiPaneInfo& Right() { dock_direction = wxAUI_DOCK_RIGHT; return *this; } wxAuiPaneInfo& Top() { dock_direction = wxAUI_DOCK_TOP; return *this; } @@ -307,10 +326,14 @@ public: wxAuiPaneInfo& DefaultPane() { - state |= optionTopDockable | optionBottomDockable | + wxAuiPaneInfo test(*this); + test.state |= optionTopDockable | optionBottomDockable | optionLeftDockable | optionRightDockable | optionFloatable | optionMovable | optionResizable | optionCaption | optionPaneBorder | buttonClose; + wxCHECK_MSG(test.IsValid(), *this, + "window settings and pane settings are incompatible"); + *this = test; return *this; } @@ -333,10 +356,14 @@ public: wxAuiPaneInfo& SetFlag(int flag, bool option_state) { + wxAuiPaneInfo test(*this); if (option_state) - state |= flag; + test.state |= flag; else - state &= ~flag; + test.state &= ~flag; + wxCHECK_MSG(test.IsValid(), *this, + "window settings and pane settings are incompatible"); + *this = test; return *this; } @@ -394,6 +421,7 @@ public: public: wxString name; // name of the pane wxString caption; // caption displayed on the window + wxBitmap icon; // icon of the pane, may be invalid wxWindow* window; // window that is in this pane wxFrame* frame; // floating frame window that holds the pane @@ -414,7 +442,10 @@ public: wxAuiPaneButtonArray buttons; // buttons on the pane + wxRect rect; // current rectangle (populated by wxAUI) + + bool IsValid() const; }; @@ -550,7 +581,7 @@ protected: void OnFloatingPaneMoved(wxWindow* window, wxDirection dir); void OnFloatingPaneActivated(wxWindow* window); void OnFloatingPaneClosed(wxWindow* window, wxCloseEvent& evt); - void OnFloatingPaneResized(wxWindow* window, const wxSize& size); + void OnFloatingPaneResized(wxWindow* window, const wxRect& rect); void Render(wxDC* dc); void Repaint(wxDC* dc = NULL); void ProcessMgrEvent(wxAuiManagerEvent& event); @@ -560,6 +591,8 @@ protected: wxArrayInt& positions, wxArrayInt& sizes); + /// Ends a resize action, or for live update, resizes the sash + bool DoEndResizeAction(wxMouseEvent& event); public: @@ -615,6 +648,7 @@ protected: wxAuiDockUIPart* m_hover_button;// button uipart being hovered over wxRect m_last_hint; // last hint rectangle wxPoint m_last_mouse_move; // last mouse move position (see OnMotion) + int m_currentDragItem; bool m_skipping; bool m_has_maximized; @@ -801,17 +835,17 @@ public: #ifndef SWIG -extern WXDLLIMPEXP_AUI const wxEventType wxEVT_AUI_PANE_BUTTON; -extern WXDLLIMPEXP_AUI const wxEventType wxEVT_AUI_PANE_CLOSE; -extern WXDLLIMPEXP_AUI const wxEventType wxEVT_AUI_PANE_MAXIMIZE; -extern WXDLLIMPEXP_AUI const wxEventType wxEVT_AUI_PANE_RESTORE; -extern WXDLLIMPEXP_AUI const wxEventType wxEVT_AUI_RENDER; -extern WXDLLIMPEXP_AUI const wxEventType wxEVT_AUI_FIND_MANAGER; +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_BUTTON, wxAuiManagerEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_CLOSE, wxAuiManagerEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_MAXIMIZE, wxAuiManagerEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_RESTORE, wxAuiManagerEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_RENDER, wxAuiManagerEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_FIND_MANAGER, wxAuiManagerEvent ); typedef void (wxEvtHandler::*wxAuiManagerEventFunction)(wxAuiManagerEvent&); #define wxAuiManagerEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxAuiManagerEventFunction, &func) + wxEVENT_HANDLER_CAST(wxAuiManagerEventFunction, func) #define EVT_AUI_PANE_BUTTON(func) \ wx__DECLARE_EVT0(wxEVT_AUI_PANE_BUTTON, wxAuiManagerEventHandler(func))