]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/splitter.cpp
Another one bites the dust.
[wxWidgets.git] / src / generic / splitter.cpp
index 9486d9425e39f41bcb15e1b8fd658a7fe53d53db..0288be38082da7f81637aa293200108db10c484f 100644 (file)
@@ -6,23 +6,22 @@
 // Created:     01/02/97
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:       wxWindows license
+// Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
-#pragma implementation "splitter.h"
-// #pragma interface
+    #pragma implementation "splitter.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+    #pragma hdrstop
 #endif
 
 #ifndef WX_PRECOMP
-#include "wx/wx.h"
+    #include "wx/wx.h"
 #endif
 
 #include <math.h>
@@ -146,6 +145,14 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
     long x, y;
     event.Position(&x, &y);
 
+    // reset the cursor
+#ifdef __WXMOTIF__
+    SetCursor(* wxSTANDARD_CURSOR);
+#endif
+#ifdef __WXMSW__
+    SetCursor(wxCursor());
+#endif
+
     if (event.LeftDown())
     {
         if ( SashHitTest(x, y) )
@@ -153,11 +160,11 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
             CaptureMouse();
 
             m_dragMode = wxSPLIT_DRAG_DRAGGING;
-           
+
             DrawSashTracker(x, y);
             m_oldX = x;
             m_oldY = y;
-           return;
+            return;
         }
     }
     else if (event.LeftUp() && m_dragMode == wxSPLIT_DRAG_DRAGGING)
@@ -243,10 +250,6 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
                     SetCursor(*m_sashCursorNS);
                 }
         }
-        else
-        {
-            SetCursor(*wxSTANDARD_CURSOR);
-        }
     }
     else if (event.Dragging() && (m_dragMode == wxSPLIT_DRAG_DRAGGING)) 
     {
@@ -587,22 +590,17 @@ bool wxSplitterWindow::Unsplit(wxWindow *toRemove)
     if ( ! IsSplit() )
         return FALSE;
 
+    wxWindow *win = NULL;
     if ( toRemove == NULL || toRemove == m_windowTwo)
     {
-        wxWindow *win = m_windowTwo ;
+        win = m_windowTwo ;
         m_windowTwo = (wxWindow *) NULL;
-        OnUnsplit(win);
-        m_sashPosition = 0;
-        SizeWindows();
     }
     else if ( toRemove == m_windowOne )
     {
-        wxWindow *win = m_windowOne ;
+        win = m_windowOne ;
         m_windowOne = m_windowTwo;
         m_windowTwo = (wxWindow *) NULL;
-        OnUnsplit(win);
-        m_sashPosition = 0;
-        SizeWindows();
     }
     else
     {
@@ -611,6 +609,36 @@ bool wxSplitterWindow::Unsplit(wxWindow *toRemove)
         return FALSE;
     }
 
+    OnUnsplit(win);
+    m_sashPosition = 0;
+    SizeWindows();
+
+    return TRUE;
+}
+
+// Replace a window with another one
+bool wxSplitterWindow::ReplaceWindow(wxWindow *winOld, wxWindow *winNew)
+{
+    wxCHECK_MSG( winOld, FALSE, "use one of Split() functions instead" );
+    wxCHECK_MSG( winNew, FALSE, "use Unsplit() functions instead" );
+
+    if ( winOld == m_windowTwo )
+    {
+        m_windowTwo = winNew;
+    }
+    else if ( winOld == m_windowOne )
+    {
+        m_windowOne = winNew;
+    }
+    else
+    {
+        wxFAIL_MSG("splitter: attempt to replace a non-existent window");
+
+        return FALSE;
+    }
+
+    SizeWindows();
+
     return TRUE;
 }