X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3e58dcb9058f177d767c6f39baa88ee5626266a9..0c05fdf3570e8066b8a9a16627562e544306a678:/include/wx/generic/splitter.h?ds=sidebyside diff --git a/include/wx/generic/splitter.h b/include/wx/generic/splitter.h index fabcbfcf8a..61e4c08008 100644 --- a/include/wx/generic/splitter.h +++ b/include/wx/generic/splitter.h @@ -5,14 +5,14 @@ // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef __SPLITTERH_G__ #define __SPLITTERH_G__ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma interface "splitter.h" #endif @@ -71,7 +71,7 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_3D, - const wxString& name = "splitter") + const wxString& name = wxT("splitter")) { Init(); Create(parent, id, pos, size, style, name); @@ -83,7 +83,7 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_3D, - const wxString& name = "splitter"); + const wxString& name = wxT("splitter")); // Gets the only or left/top pane wxWindow *GetWindow1() const { return m_windowOne; } @@ -108,7 +108,7 @@ public: // Associates the given window with window 2, drawing the appropriate sash // and changing the split mode. - // Does nothing and returns FALSE if the window is already split. + // Does nothing and returns false if the window is already split. // A sashPosition of 0 means choose a default sash position, // negative sashPosition specifies the size of right/lower pane as it's // absolute value rather than the size of left/upper pane. @@ -129,23 +129,28 @@ 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 width) { m_sashSize = width; } + void SetSashSize(int WXUNUSED(width)) { } // Sets the border size - void SetBorderSize(int width) { m_borderSize = width; } + void SetBorderSize(int WXUNUSED(width)) { } // Gets the sash size - int GetSashSize() const { return m_sashSize; } + int GetSashSize() const; // Gets the border size - int GetBorderSize() const { return m_borderSize; } + int GetBorderSize() const; // Set the sash position - void SetSashPosition(int position, bool redraw = TRUE); + void SetSashPosition(int position, bool redraw = true); // Gets the sash position int GetSashPosition() const { return m_sashPosition; } @@ -162,7 +167,7 @@ public: virtual int OnSashPositionChanging(int newSashPosition); // Called when the sash position is about to be changed, return - // FALSE from here to prevent the change from taking place. + // false from here to prevent the change from taking place. // Repositions sash to minimum position if pane would be too small. // newSashPosition here is always positive or zero. virtual bool OnSashPositionChange(int newSashPosition); @@ -190,10 +195,7 @@ public: void OnSize(wxSizeEvent& event); // In live mode, resize child windows in idle time - void OnIdle(wxIdleEvent& event); - - // Draws borders - virtual void DrawBorders(wxDC& dc); + void OnInternalIdle(); // Draws the sash virtual void DrawSash(wxDC& dc); @@ -202,24 +204,21 @@ public: virtual void DrawSashTracker(int x, int y); // Tests for x, y over sash - virtual bool SashHitTest(int x, int y, int tolerance = 2); + virtual bool SashHitTest(int x, int y, int tolerance = 5); // Resizes subwindows virtual void SizeWindows(); - // Initialize colours - void InitColours(); - void SetNeedUpdating(bool needUpdating) { m_needUpdating = needUpdating; } bool GetNeedUpdating() const { return m_needUpdating ; } protected: // event handlers -#ifdef __WXMSW__ +#if defined(__WXMSW__) || defined(__WXMAC__) void OnSetCursor(wxSetCursorEvent& event); #endif // wxMSW - // send the given event, return FALSE if the event was processed and vetoed + // send the given event, return false if the event was processed and vetoed // by the user code inline bool DoSendEvent(wxSplitterEvent& event); @@ -237,40 +236,59 @@ protected: // get either width or height depending on the split mode int GetWindowSize() const; - - // set m_sashPosition w/ safeguards - void DoSetSashPosition(int sashPos); + + // convert the user specified sash position which may be > 0 (as is), < 0 + // (specifying the size of the right pane) or 0 (use default) to the real + // position to be passed to DoSetSashPosition() + int ConvertSashPosition(int sashPos) const; + + // set the real sash position, sashPos here must be positive + // + // returns true if the sash position has been changed, false otherwise + bool DoSetSashPosition(int sashPos); + + // set the sash position and send an event about it having been changed + void SetSashPositionAndNotify(int sashPos); + + // callbacks executed when we detect that the mouse has entered or left + // the sash + virtual void OnEnterSash(); + virtual void OnLeaveSash(); + + // set the cursor appropriate for the current split mode + void SetResizeCursor(); + + // redraw the splitter if its "hotness" changed if necessary + void RedrawIfHotSensitive(bool isHot); wxSplitMode m_splitMode; - bool m_permitUnsplitAlways; - bool m_needUpdating; // when in live mode, set this to TRUE to resize children in idle wxWindow* m_windowOne; wxWindow* m_windowTwo; int m_dragMode; int m_oldX; int m_oldY; - int m_borderSize; - int m_sashSize; // Sash width or height int m_sashPosition; // Number of pixels from left or top int m_requestedSashPosition; + int m_sashPositionCurrent; // while dragging int m_firstX; int m_firstY; int m_minimumPaneSize; - wxCursor* m_sashCursorWE; - wxCursor* m_sashCursorNS; - wxPen* m_sashTrackerPen; - wxPen* m_lightShadowPen; - wxPen* m_mediumShadowPen; - wxPen* m_darkShadowPen; - wxPen* m_hilightPen; - wxBrush* m_faceBrush; - wxPen* m_facePen; + wxCursor m_sashCursorWE; + wxCursor m_sashCursorNS; + wxPen *m_sashTrackerPen; + + // when in live mode, set this to true to resize children in idle + bool m_needUpdating:1; + bool m_permitUnsplitAlways:1; + bool m_isHot:1; + bool m_checkRequestedSashPosition:1; private: WX_DECLARE_CONTROL_CONTAINER(); DECLARE_DYNAMIC_CLASS(wxSplitterWindow) DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxSplitterWindow) }; // ---------------------------------------------------------------------------- @@ -349,7 +367,7 @@ private: } pt; // position of double click for DCLICK event } m_data; - DECLARE_DYNAMIC_CLASS(wxSplitterEvent) + DECLARE_DYNAMIC_CLASS_NO_COPY(wxSplitterEvent) }; typedef void (wxEvtHandler::*wxSplitterEventFunction)(wxSplitterEvent&); @@ -359,7 +377,7 @@ typedef void (wxEvtHandler::*wxSplitterEventFunction)(wxSplitterEvent&); wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, \ id, \ -1, \ - (wxObjectEventFunction)(wxEventFunction)(wxSplitterEventFunction) &fn, \ + (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ NULL \ ), @@ -368,7 +386,7 @@ typedef void (wxEvtHandler::*wxSplitterEventFunction)(wxSplitterEvent&); wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, \ id, \ -1, \ - (wxObjectEventFunction)(wxEventFunction)(wxSplitterEventFunction) &fn, \ + (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ NULL \ ), @@ -377,7 +395,7 @@ typedef void (wxEvtHandler::*wxSplitterEventFunction)(wxSplitterEvent&); wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, \ id, \ -1, \ - (wxObjectEventFunction)(wxEventFunction)(wxSplitterEventFunction) &fn, \ + (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ NULL \ ), @@ -386,7 +404,7 @@ typedef void (wxEvtHandler::*wxSplitterEventFunction)(wxSplitterEvent&); wxEVT_COMMAND_SPLITTER_UNSPLIT, \ id, \ -1, \ - (wxObjectEventFunction)(wxEventFunction)(wxSplitterEventFunction) &fn, \ + (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxSplitterEventFunction, &fn ), \ NULL \ ),