// 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
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
+#if wxUSE_SPLITTER
#ifdef __BORLANDC__
#pragma hdrstop
#endif
EVT_IDLE(wxSplitterWindow::OnIdle)
EVT_MOUSE_EVENTS(wxSplitterWindow::OnMouseEvent)
-#ifdef __WXMSW__
+#if defined( __WXMSW__ ) || defined( __WXMAC__)
EVT_SET_CURSOR(wxSplitterWindow::OnSetCursor)
#endif // wxMSW
int x = (int)event.GetX(),
y = (int)event.GetY();
- // reset the cursor
-#if defined( __WXMOTIF__ ) || defined( __WXGTK__ ) || defined( __WXMAC__ )
- SetCursor(* wxSTANDARD_CURSOR);
-#elif defined(__WXMSW__)
- SetCursor(wxCursor());
+#if defined(__WXMSW__)
+ // SetCursor(wxCursor()); // Is this required?
#endif
if (GetWindowStyle() & wxSP_NOSASH)
{
if ( SashHitTest(x, y) )
{
- CaptureMouse();
-
+ // Start the drag now
m_dragMode = wxSPLIT_DRAG_DRAGGING;
+
+ // Capture mouse and set the cursor
+ CaptureMouse();
+ SetResizeCursor();
if ( !isLive )
{
{
// We can stop dragging now and see what we've got.
m_dragMode = wxSPLIT_DRAG_NONE;
+
+ // Release mouse and unset the cursor
ReleaseMouse();
+ SetCursor(* wxSTANDARD_CURSOR);
// exit if unsplit after doubleclick
if ( !IsSplit() )
} // left up && dragging
else if (event.Moving() && !event.Dragging())
{
- // Just change the cursor if required
+ // Just change the cursor as required
if ( SashHitTest(x, y) )
- {
SetResizeCursor();
- }
-#if defined(__WXGTK__) || defined(__WXMSW__) || defined(__WXMAC__)
else
- {
- // We must set the normal cursor in MSW, because
- // if the child window doesn't have a cursor, the
- // parent's (splitter window) will be used, and this
- // must be the standard cursor.
-
- // where else do we unset the cursor?
SetCursor(* wxSTANDARD_CURSOR);
- }
-#endif // __WXGTK__
}
else if (event.Dragging() && (m_dragMode == wxSPLIT_DRAG_DRAGGING))
{
-#if defined( __WXMSW__ ) || defined( __WXMAC__ )
- // Otherwise, the cursor sometimes reverts to the normal cursor
- // during dragging.
- SetResizeCursor();
-#endif // __WXMSW__
-
int diff = m_splitMode == wxSPLIT_VERTICAL ? x - m_oldX : y - m_oldY;
if ( !diff )
{
m_needUpdating = TRUE;
}
}
- else if ( event.LeftDClick() )
+ else if ( event.LeftDClick() && m_windowTwo )
{
OnDoubleClickSash(x, y);
}
return FALSE;
}
- OnUnsplit(win);
+ win->Show(FALSE);
DoSetSashPosition(0);
SizeWindows();
// the sash if the minimum pane size is zero.
void wxSplitterWindow::OnDoubleClickSash(int x, int y)
{
+ wxCHECK_RET(m_windowTwo, wxT("splitter: no window to remove"));
+
// new code should handle events instead of using the virtual functions
wxSplitterEvent event(wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, this);
event.m_data.pt.x = x;
{
if ( GetMinimumPaneSize() == 0 || m_permitUnsplitAlways )
{
- Unsplit();
+ wxWindow* win = m_windowTwo;
+ if (Unsplit(win))
+ OnUnsplit(win);
}
}
//else: blocked by user
(void)DoSendEvent(event);
}
-#ifdef __WXMSW__
+#if defined( __WXMSW__ ) || defined( __WXMAC__)
// this is currently called (and needed) under MSW only...
void wxSplitterWindow::OnSetCursor(wxSetCursorEvent& event)
//else: do nothing, in particular, don't call Skip()
}
+#endif // wxUSE_SPLITTER
#endif // wxMSW