X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5340966638dba7bcbd960913a0fc010dd1de4883..b63f9a33301b1cead8b9ccbb16e2f50b0d82bbe9:/include/wx/generic/splitter.h diff --git a/include/wx/generic/splitter.h b/include/wx/generic/splitter.h index f53efc311a..498471fa99 100644 --- a/include/wx/generic/splitter.h +++ b/include/wx/generic/splitter.h @@ -9,17 +9,13 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef __SPLITTERH_G__ -#define __SPLITTERH_G__ - -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "splitter.h" -#endif +#ifndef _WX_GENERIC_SPLITTER_H_ +#define _WX_GENERIC_SPLITTER_H_ #include "wx/window.h" // base class declaration #include "wx/containr.h" // wxControlContainer -class WXDLLEXPORT wxSplitterEvent; +class WXDLLIMPEXP_FWD_CORE wxSplitterEvent; // --------------------------------------------------------------------------- // splitter constants @@ -53,7 +49,7 @@ enum // to prevent flickering. (WS_CLIPCHILDREN doesn't work in all cases so can't be // standard). -class WXDLLEXPORT wxSplitterWindow: public wxWindow +class WXDLLIMPEXP_CORE wxSplitterWindow: public wxWindow { public: @@ -101,7 +97,7 @@ public: } // Gets the split mode - wxSplitMode GetSplitMode() const { return m_splitMode; }; + wxSplitMode GetSplitMode() const { return m_splitMode; } // Initialize with one window void Initialize(wxWindow *window); @@ -138,7 +134,7 @@ public: 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)) { } @@ -155,6 +151,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; } @@ -213,8 +215,9 @@ public: bool GetNeedUpdating() const { return m_needUpdating ; } #ifdef __WXMAC__ - virtual bool MacClipGrandChildren() const { return true ; } + virtual bool MacClipGrandChildren() const { return true ; } #endif + protected: // event handlers #if defined(__WXMSW__) || defined(__WXMAC__) @@ -223,9 +226,8 @@ protected: // send the given event, return false if the event was processed and vetoed // by the user code - inline bool DoSendEvent(wxSplitterEvent& event); + bool DoSendEvent(wxSplitterEvent& event); -protected: // common part of all ctors void Init(); @@ -264,6 +266,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; @@ -271,6 +278,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; @@ -302,7 +312,7 @@ private: // usual wxWin convention, but the three event types have different kind of // data associated with them, so the accessors can be only used if the real // event type matches with the one for which the accessors make sense -class WXDLLEXPORT wxSplitterEvent : public wxNotifyEvent +class WXDLLIMPEXP_CORE wxSplitterEvent : public wxNotifyEvent { public: wxSplitterEvent(wxEventType type = wxEVT_NULL, @@ -357,7 +367,7 @@ public: } private: - friend class WXDLLEXPORT wxSplitterWindow; + friend class WXDLLIMPEXP_FWD_CORE wxSplitterWindow; // data for the different types of event union @@ -375,40 +385,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, \ - wxID_ANY, \ - (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, \ - wxID_ANY, \ - (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ - NULL \ - ), - -#define EVT_SPLITTER_DCLICK(id, fn) \ - DECLARE_EVENT_TABLE_ENTRY( \ - wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, \ - id, \ - wxID_ANY, \ - (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ - NULL \ - ), - -#define EVT_SPLITTER_UNSPLIT(id, fn) \ - DECLARE_EVENT_TABLE_ENTRY( \ - wxEVT_COMMAND_SPLITTER_UNSPLIT, \ - id, \ - wxID_ANY, \ - (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ - NULL \ - ), - -#endif // __SPLITTERH_G__ +#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 // _WX_GENERIC_SPLITTER_H_