X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4395fb21f651f8a08905c34507692ca7f902dfe5..8c9f8f91cd62335261ee29762747218f28d129de:/include/wx/generic/splitter.h diff --git a/include/wx/generic/splitter.h b/include/wx/generic/splitter.h index 1162e887da..2f70ea00e2 100644 --- a/include/wx/generic/splitter.h +++ b/include/wx/generic/splitter.h @@ -49,7 +49,7 @@ enum // The MFC splitter window manages scrollbars as well so is able to // put sash buttons on the scrollbars, but we probably don't want to go down // this path. -// 2) for wxWindows 2.0, we must find a way to set the WS_CLIPCHILDREN style +// 2) for wxWidgets 2.0, we must find a way to set the WS_CLIPCHILDREN style // to prevent flickering. (WS_CLIPCHILDREN doesn't work in all cases so can't be // standard). @@ -67,7 +67,7 @@ public: } // Normal constructor - wxSplitterWindow(wxWindow *parent, wxWindowID id = -1, + wxSplitterWindow(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_3D, @@ -79,7 +79,7 @@ public: virtual ~wxSplitterWindow(); - bool Create(wxWindow *parent, wxWindowID id = -1, + bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_3D, @@ -129,11 +129,16 @@ public: // parameter should be NULL) bool ReplaceWindow(wxWindow *winOld, wxWindow *winNew); + // Make sure the child window sizes are updated. This is useful + // for reducing flicker by updating the sizes before a + // window is shown, if you know the overall size is correct. + void UpdateSize(); + // Is the window split? bool IsSplit() const { return (m_windowTwo != NULL); } // Sets the sash size - void SetSashSize(int WXUNUSED(width)) { } + void SetSashSize(int width) { m_sashSize = width; } // Sets the border size void SetBorderSize(int WXUNUSED(width)) { } @@ -150,6 +155,12 @@ public: // Gets the sash position int GetSashPosition() const { return m_sashPosition; } + // Set the sash gravity + void SetSashGravity(double gravity); + + // Gets the sash gravity + double GetSashGravity() const { return m_sashGravity; } + // If this is zero, we can remove panes by dragging the sash. void SetMinimumPaneSize(int min); int GetMinimumPaneSize() const { return m_minimumPaneSize; } @@ -207,6 +218,10 @@ public: void SetNeedUpdating(bool needUpdating) { m_needUpdating = needUpdating; } bool GetNeedUpdating() const { return m_needUpdating ; } +#ifdef __WXMAC__ + virtual bool MacClipGrandChildren() const { return true ; } +#endif + protected: // event handlers #if defined(__WXMSW__) || defined(__WXMAC__) @@ -217,7 +232,6 @@ protected: // by the user code inline bool DoSendEvent(wxSplitterEvent& event); -protected: // common part of all ctors void Init(); @@ -256,6 +270,11 @@ protected: // redraw the splitter if its "hotness" changed if necessary void RedrawIfHotSensitive(bool isHot); + // return the best size of the splitter equal to best sizes of its + // subwindows + virtual wxSize DoGetBestSize() const; + + wxSplitMode m_splitMode; wxWindow* m_windowOne; wxWindow* m_windowTwo; @@ -263,6 +282,9 @@ protected: int m_oldX; int m_oldY; int m_sashPosition; // Number of pixels from left or top + double m_sashGravity; + int m_sashSize; + wxSize m_lastSize; int m_requestedSashPosition; int m_sashPositionCurrent; // while dragging int m_firstX; @@ -367,40 +389,22 @@ private: typedef void (wxEvtHandler::*wxSplitterEventFunction)(wxSplitterEvent&); -#define EVT_SPLITTER_SASH_POS_CHANGED(id, fn) \ - DECLARE_EVENT_TABLE_ENTRY( \ - wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, \ - id, \ - -1, \ - (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ - NULL \ - ), - -#define EVT_SPLITTER_SASH_POS_CHANGING(id, fn) \ - DECLARE_EVENT_TABLE_ENTRY( \ - wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, \ - id, \ - -1, \ - (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ - NULL \ - ), - -#define EVT_SPLITTER_DCLICK(id, fn) \ - DECLARE_EVENT_TABLE_ENTRY( \ - wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, \ - id, \ - -1, \ - (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ - NULL \ - ), - -#define EVT_SPLITTER_UNSPLIT(id, fn) \ - DECLARE_EVENT_TABLE_ENTRY( \ - wxEVT_COMMAND_SPLITTER_UNSPLIT, \ - id, \ - -1, \ - (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ - NULL \ - ), +#define wxSplitterEventHandler(func) \ + (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSplitterEventFunction, &func) + +#define wx__DECLARE_SPLITTEREVT(evt, id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_SPLITTER_ ## evt, id, wxSplitterEventHandler(fn)) + +#define EVT_SPLITTER_SASH_POS_CHANGED(id, fn) \ + wx__DECLARE_SPLITTEREVT(SASH_POS_CHANGED, id, fn) + +#define EVT_SPLITTER_SASH_POS_CHANGING(id, fn) \ + wx__DECLARE_SPLITTEREVT(SASH_POS_CHANGING, id, fn) + +#define EVT_SPLITTER_DCLICK(id, fn) \ + wx__DECLARE_SPLITTEREVT(DOUBLECLICKED, id, fn) + +#define EVT_SPLITTER_UNSPLIT(id, fn) \ + wx__DECLARE_SPLITTEREVT(UNSPLIT, id, fn) #endif // __SPLITTERH_G__