]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/generic/sashwin.h
Applied patch [ 1181975 ] [wxMSW] Removes all flicker from wxNotebook
[wxWidgets.git] / include / wx / generic / sashwin.h
index c1023929a28da2563c19a3f882a0cc982c11853b..0a89213437245f2eb6d4b886c2f8cc9fdfff5985 100644 (file)
@@ -8,16 +8,18 @@
 // Created:     01/02/97
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:    wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_SASHWIN_H_G_
 #define _WX_SASHWIN_H_G_
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma interface "sashwin.h"
 #endif
 
+#if wxUSE_SASH
+
 #include "wx/defs.h"
 #include "wx/window.h"
 #include "wx/string.h"
@@ -38,10 +40,10 @@ enum wxSashEdgePosition {
  * wxSashEdge represents one of the four edges of a window.
  */
 
-class WXDLLEXPORT wxSashEdge
+class WXDLLIMPEXP_ADV wxSashEdge
 {
 public:
-    wxSashEdge() { m_show = FALSE; m_border = FALSE; m_margin = 0; }
+    wxSashEdge() { m_show = false; m_border = false; m_margin = 0; }
 
     bool    m_show;     // Is the sash showing?
     bool    m_border;   // Do we draw a border?
@@ -52,7 +54,12 @@ public:
  * wxSashWindow flags
  */
 
-#define wxSW_3D             0x0004
+#define wxSW_NOBORDER         0x0000
+//#define wxSW_3D               0x0010
+#define wxSW_BORDER           0x0020
+#define wxSW_3DSASH           0x0040
+#define wxSW_3DBORDER         0x0080
+#define wxSW_3D (wxSW_3DSASH | wxSW_3DBORDER)
 
 /*
  * wxSashWindow allows any of its edges to have a sash which can be dragged
@@ -60,37 +67,42 @@ public:
  * of wxSashWindow.
  */
 
-class WXDLLEXPORT wxSashWindow: public wxWindow
+class WXDLLIMPEXP_ADV wxSashWindow: public wxWindow
 {
-  DECLARE_DYNAMIC_CLASS(wxSashWindow)
-
 public:
-
-////////////////////////////////////////////////////////////////////////////
-// Public API
-
     // Default constructor
-    wxSashWindow();
+    wxSashWindow()
+    {
+        Init();
+    }
 
     // Normal constructor
-    wxSashWindow(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition,
-        const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = "splitter");
+    wxSashWindow(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition,
+        const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = wxT("sashWindow"))
+    {
+        Init();
+        Create(parent, id, pos, size, style, name);
+    }
+
     ~wxSashWindow();
 
+    bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition,
+        const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = wxT("sashWindow"));
+
     // Set whether there's a sash in this position
     void SetSashVisible(wxSashEdgePosition edge, bool sash);
 
     // Get whether there's a sash in this position
-    inline bool GetSashVisible(wxSashEdgePosition edge) { return m_sashes[edge].m_show; }
+    inline bool GetSashVisible(wxSashEdgePosition edge) const { return m_sashes[edge].m_show; }
 
     // Set whether there's a border in this position
     inline void SetSashBorder(wxSashEdgePosition edge, bool border) { m_sashes[edge].m_border = border; }
 
     // Get whether there's a border in this position
-    inline bool HasBorder(wxSashEdgePosition edge) { return m_sashes[edge].m_border; }
+    inline bool HasBorder(wxSashEdgePosition edge) const { return m_sashes[edge].m_border; }
 
     // Get border size
-    inline int GetEdgeMargin(wxSashEdgePosition edge) { return m_sashes[edge].m_margin; }
+    inline int GetEdgeMargin(wxSashEdgePosition edge) const { return m_sashes[edge].m_margin; }
 
     // Sets the default sash border size
     inline void SetDefaultBorderSize(int width) { m_borderSize = width; }
@@ -126,6 +138,11 @@ public:
     // Adjusts the panes
     void OnSize(wxSizeEvent& event);
 
+#if defined(__WXMSW__) || defined(__WXMAC__)
+    // Handle cursor correctly
+    void OnSetCursor(wxSetCursorEvent& event);
+#endif // wxMSW
+
     // Draws borders
     void DrawBorders(wxDC& dc);
 
@@ -147,7 +164,9 @@ public:
     // Initialize colours
     void InitColours();
 
-protected:
+private:
+    void Init();
+
     wxSashEdge  m_sashes[4];
     int         m_dragMode;
     wxSashEdgePosition m_draggingEdge;
@@ -168,11 +187,21 @@ protected:
     wxColour    m_darkShadowColour;
     wxColour    m_hilightColour;
     wxColour    m_faceColour;
+    bool        m_mouseCaptured;
+    wxCursor*   m_currentCursor;
 
-DECLARE_EVENT_TABLE()
+private:
+    DECLARE_DYNAMIC_CLASS(wxSashWindow)
+    DECLARE_EVENT_TABLE()
+    DECLARE_NO_COPY_CLASS(wxSashWindow)
 };
 
-#define wxEVT_SASH_DRAGGED (wxEVT_FIRST + 1200)
+BEGIN_DECLARE_EVENT_TYPES()
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV,
+                                wxEVT_SASH_DRAGGED, wxEVT_FIRST + 1200)
+END_DECLARE_EVENT_TYPES()
+
+// #define wxEVT_SASH_DRAGGED (wxEVT_FIRST + 1200)
 
 enum wxSashDragStatus
 {
@@ -180,11 +209,9 @@ enum wxSashDragStatus
     wxSASH_STATUS_OUT_OF_RANGE
 };
 
-class WXDLLEXPORT wxSashEvent: public wxCommandEvent
+class WXDLLIMPEXP_ADV wxSashEvent: public wxCommandEvent
 {
-  DECLARE_DYNAMIC_CLASS(wxSashEvent)
-
- public:
+public:
     inline wxSashEvent(int id = 0, wxSashEdgePosition edge = wxSASH_NONE) {
      m_eventType = (wxEventType) wxEVT_SASH_DRAGGED; m_id = id; m_edge = edge; }
 
@@ -199,16 +226,24 @@ class WXDLLEXPORT wxSashEvent: public wxCommandEvent
     //// dragging the top below the bottom)
     inline void SetDragStatus(wxSashDragStatus status) { m_dragStatus = status; }
     inline wxSashDragStatus GetDragStatus() const { return m_dragStatus; }
- private:
+
+private:
     wxSashEdgePosition  m_edge;
     wxRect              m_dragRect;
     wxSashDragStatus    m_dragStatus;
+
+private:
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxSashEvent)
 };
 
 typedef void (wxEvtHandler::*wxSashEventFunction)(wxSashEvent&);
 
-#define EVT_SASH_DRAGGED(id, fn) { wxEVT_SASH_DRAGGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxSashEventFunction) & fn, NULL },
-#define EVT_SASH_DRAGGED_RANGE(id1, id2, fn) { wxEVT_SASH_DRAGGED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxSashEventFunction) & fn, NULL },
+#define EVT_SASH_DRAGGED(id, fn) \
+    DECLARE_EVENT_TABLE_ENTRY( wxEVT_SASH_DRAGGED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxSashEventFunction, & fn ), NULL ),
+#define EVT_SASH_DRAGGED_RANGE(id1, id2, fn) \
+    DECLARE_EVENT_TABLE_ENTRY( wxEVT_SASH_DRAGGED, id1, id2, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxSashEventFunction, & fn ), NULL ),
+
+#endif // wxUSE_SASH
 
 #endif
   // _WX_SASHWIN_H_G_