// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "splitter.h"
#endif
DEFINE_EVENT_TYPE(wxEVT_COMMAND_SPLITTER_UNSPLIT)
IMPLEMENT_DYNAMIC_CLASS(wxSplitterWindow, wxWindow)
+
+/*
+ TODO PROPERTIES
+ style wxSP_3D
+ sashpos (long , 0 )
+ minsize (long -1 )
+ object, object_ref
+ orientation
+*/
+
IMPLEMENT_DYNAMIC_CLASS(wxSplitterEvent, wxNotifyEvent)
BEGIN_EVENT_TABLE(wxSplitterWindow, wxWindow)
style &= ~wxBORDER_MASK;
style |= wxBORDER_NONE;
- // we don't need to be completely repainted after resize and doing it
- // results in horrible flicker
- style |= wxNO_FULL_REPAINT_ON_RESIZE;
-
if ( !wxWindow::Create(parent, id, pos, size, style, name) )
return FALSE;
m_sashTrackerPen = new wxPen(*wxBLACK, 2, wxSOLID);
m_needUpdating = FALSE;
+ m_isHot = false;
}
wxSplitterWindow::~wxSplitterWindow()
delete m_sashTrackerPen;
}
+// ----------------------------------------------------------------------------
+// entering/leaving sash
+// ----------------------------------------------------------------------------
+
+void wxSplitterWindow::RedrawIfHotSensitive(bool isHot)
+{
+ if ( wxRendererNative::Get().GetSplitterParams(this).isHotSensitive )
+ {
+ m_isHot = isHot;
+
+ wxClientDC dc(this);
+ DrawSash(dc);
+ }
+ //else: we don't change our appearance, don't redraw to avoid flicker
+}
+
+void wxSplitterWindow::OnEnterSash()
+{
+ SetResizeCursor();
+
+ RedrawIfHotSensitive(true);
+}
+
+void wxSplitterWindow::OnLeaveSash()
+{
+ SetCursor(*wxSTANDARD_CURSOR);
+
+ RedrawIfHotSensitive(false);
+}
+
void wxSplitterWindow::SetResizeCursor()
{
SetCursor(m_splitMode == wxSPLIT_VERTICAL ? m_sashCursorWE
: m_sashCursorNS);
}
+// ----------------------------------------------------------------------------
+// other event handlers
+// ----------------------------------------------------------------------------
+
void wxSplitterWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
{
wxPaintDC dc(this);
} // left up && dragging
else if ((event.Moving() || event.Leaving() || event.Entering()) && (m_dragMode == wxSPLIT_DRAG_NONE))
{
- // Just change the cursor as required
- if ( !event.Leaving() && SashHitTest(x, y) )
- {
- SetResizeCursor();
- }
+ if ( event.Leaving() || !SashHitTest(x, y) )
+ OnLeaveSash();
else
- {
- SetCursor(* wxSTANDARD_CURSOR);
- }
+ OnEnterSash();
}
else if (event.Dragging() && (m_dragMode == wxSPLIT_DRAG_DRAGGING))
{
parent = parent->GetParent();
}
- bool iconized = FALSE;
+ bool iconized;
wxTopLevelWindow *winTop = wxDynamicCast(parent, wxTopLevelWindow);
if ( winTop )
int wxSplitterWindow::GetSashSize() const
{
- return wxRendererNative::Get().GetSplitterSashAndBorder(this).x;
+ return wxRendererNative::Get().GetSplitterParams(this).widthSash;
}
int wxSplitterWindow::GetBorderSize() const
{
- return wxRendererNative::Get().GetSplitterSashAndBorder(this).y;
+ return wxRendererNative::Get().GetSplitterParams(this).border;
}
// Draw the sash
void wxSplitterWindow::DrawSash(wxDC& dc)
{
- wxRendererNative::Get().DrawSplitterBorder
+ if (HasFlag(wxSP_3DBORDER))
+ wxRendererNative::Get().DrawSplitterBorder
(
this,
dc,
dc,
GetClientSize(),
m_sashPosition,
- m_splitMode == wxSPLIT_VERTICAL
- ? wxVERTICAL
- : wxHORIZONTAL
+ m_splitMode == wxSPLIT_VERTICAL ? wxVERTICAL
+ : wxHORIZONTAL,
+ m_isHot ? wxCONTROL_CURRENT : 0
);
}
if ( ! IsSplit() )
return FALSE;
- wxWindow *win = NULL;
+ wxWindow *win;
if ( toRemove == NULL || toRemove == m_windowTwo)
{
win = m_windowTwo ;