// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
+#ifdef __GNUG__
+ #pragma implementation "splittree.h"
+#endif
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all "standard" wxWidgets headers)
+#ifndef WX_PRECOMP
+ #include "wx/wx.h"
+#endif
+
#include "wx/gizmos/dynamicsash.h"
+
+const wxChar* wxDynamicSashWindowNameStr = wxT("dynamicSashWindow");
+
+
/*
wxDynamicSashWindow works by internally storing a tree of Implementation
objects (wxDynamicSsahWindowImpl) and Leaf objects
m_container->SetEventHandler(this);
- Connect(-1, wxEVT_SIZE, (wxObjectEventFunction)&wxDynamicSashWindowImpl::OnSize);
- Connect(-1, wxEVT_PAINT, (wxObjectEventFunction)&wxDynamicSashWindowImpl::OnPaint);
- Connect(-1, wxEVT_MOTION, (wxObjectEventFunction)&wxDynamicSashWindowImpl::OnMouseMove);
- Connect(-1, wxEVT_ENTER_WINDOW, (wxObjectEventFunction)&wxDynamicSashWindowImpl::OnMouseMove);
- Connect(-1, wxEVT_LEAVE_WINDOW, (wxObjectEventFunction)&wxDynamicSashWindowImpl::OnLeave);
- Connect(-1, wxEVT_LEFT_DOWN, (wxObjectEventFunction)&wxDynamicSashWindowImpl::OnPress);
- Connect(-1, wxEVT_LEFT_UP, (wxObjectEventFunction)&wxDynamicSashWindowImpl::OnRelease);
+ Connect(-1, wxEVT_SIZE, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxSizeEventFunction)&wxDynamicSashWindowImpl::OnSize);
+ Connect(-1, wxEVT_PAINT, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxPaintEventFunction)&wxDynamicSashWindowImpl::OnPaint);
+ Connect(-1, wxEVT_MOTION, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxMouseEventFunction)&wxDynamicSashWindowImpl::OnMouseMove);
+ Connect(-1, wxEVT_ENTER_WINDOW, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxMouseEventFunction)&wxDynamicSashWindowImpl::OnMouseMove);
+ Connect(-1, wxEVT_LEAVE_WINDOW, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxMouseEventFunction)&wxDynamicSashWindowImpl::OnLeave);
+ Connect(-1, wxEVT_LEFT_DOWN, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxMouseEventFunction)&wxDynamicSashWindowImpl::OnPress);
+ Connect(-1, wxEVT_LEFT_UP, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxMouseEventFunction)&wxDynamicSashWindowImpl::OnRelease);
return TRUE;
}
dc.SetBrush(brush);
dc.SetLogicalFunction(wxXOR);
- if (m_dragging == DSR_CORNER) {
+ if ((m_dragging == DSR_CORNER) &&
+ (m_window->GetWindowStyle() & wxDS_DRAG_CORNER) != 0) {
int cx = 0;
int cy = 0;
}
void wxDynamicSashWindowImpl::Split(int px, int py) {
- m_window->Hide();
m_add_child_target = NULL;
m_leaf = NULL;
m_container->Layout();
-
- m_window->Show();
}
+
/* This code is called when you finish resizing a view by dragging the
corner tab, but I think this implementation is lousy and will surprise
the user more often than it will do what they are trying to do. What
}
void wxDynamicSashWindowImpl::OnRelease(wxMouseEvent &event) {
- if (m_dragging == DSR_CORNER) {
+ if ((m_dragging == DSR_CORNER) &&
+ (m_window->GetWindowStyle() & wxDS_DRAG_CORNER) != 0) {
DrawSash(m_drag_x, m_drag_y);
m_container->ReleaseMouse();
m_viewport->SetEventHandler(this);
Connect(-1, wxEVT_DYNAMIC_SASH_REPARENT, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnReparent);
- if (m_impl->m_window->GetWindowStyle() & wxMANAGE_SCROLLBARS) {
+ if (m_impl->m_window->GetWindowStyle() & wxDS_MANAGE_SCROLLBARS) {
m_hscroll->SetEventHandler(this);
m_vscroll->SetEventHandler(this);
- Connect(-1, wxEVT_SET_FOCUS, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnFocus);
- Connect(-1, wxEVT_SCROLL_TOP, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
- Connect(-1, wxEVT_SCROLL_BOTTOM, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
- Connect(-1, wxEVT_SCROLL_LINEUP, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
- Connect(-1, wxEVT_SCROLL_LINEDOWN, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
- Connect(-1, wxEVT_SCROLL_PAGEUP, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
- Connect(-1, wxEVT_SCROLL_PAGEDOWN, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
- Connect(-1, wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
- Connect(-1, wxEVT_SCROLL_THUMBRELEASE, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
+ Connect(-1, wxEVT_SET_FOCUS, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxFocusEventFunction)&wxDynamicSashWindowLeaf::OnFocus);
+ Connect(-1, wxEVT_SCROLL_TOP, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
+ Connect(-1, wxEVT_SCROLL_BOTTOM, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
+ Connect(-1, wxEVT_SCROLL_LINEUP, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
+ Connect(-1, wxEVT_SCROLL_LINEDOWN, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
+ Connect(-1, wxEVT_SCROLL_PAGEUP, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
+ Connect(-1, wxEVT_SCROLL_PAGEDOWN, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
+ Connect(-1, wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
+ Connect(-1, wxEVT_SCROLL_THUMBRELEASE, (wxObjectEventFunction)
+ (wxEventFunction)
+ (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll);
}
wxLayoutConstraints *layout = new wxLayoutConstraints();
void wxDynamicSashWindowLeaf::ResizeChild(wxSize size) {
if (m_child) {
- if (m_impl->m_window->GetWindowStyle() & wxMANAGE_SCROLLBARS) {
+ if (m_impl->m_window->GetWindowStyle() & wxDS_MANAGE_SCROLLBARS) {
m_child->SetSize(size);
wxSize best_size = m_child->GetBestSize();
if (best_size.GetWidth() < size.GetWidth()) {
return NULL;
}
-void wxDynamicSashWindowLeaf::OnSize(wxSizeEvent &event) {
+void wxDynamicSashWindowLeaf::OnSize(wxSizeEvent &WXUNUSED(event)) {
m_impl->m_container->Refresh();
ResizeChild(m_viewport->GetSize());
}
-void wxDynamicSashWindowLeaf::OnPaint(wxPaintEvent &event) {
+void wxDynamicSashWindowLeaf::OnPaint(wxPaintEvent &WXUNUSED(event)) {
wxPaintDC dc(m_impl->m_container);
dc.SetBackground(wxBrush(m_impl->m_container->GetBackgroundColour(), wxSOLID));
dc.Clear();
- wxPen highlight(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BTNHIGHLIGHT), 1, wxSOLID);
- wxPen shadow(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BTNSHADOW), 1, wxSOLID);
+ wxPen highlight(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT), 1, wxSOLID);
+ wxPen shadow(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW), 1, wxSOLID);
wxPen black(*wxBLACK, 1, wxSOLID);
wxSize size = m_impl->m_container->GetSize();
dc.DrawLine(9, h - sh - 3, 9, h - 4);
dc.DrawLine(9, h - 4, 3, h - 4);
-
int cy = (h - sh + h - 6) / 2 + 1;
int cx = (w - sw + w - 6) / 2 + 1;
int sy = cy;
}
}
-void wxDynamicSashWindowLeaf::OnScroll(wxScrollEvent &event) {
+void wxDynamicSashWindowLeaf::OnScroll(wxScrollEvent &WXUNUSED(event)) {
int nx = -m_hscroll->GetThumbPosition();
int ny = -m_vscroll->GetThumbPosition();
cursor = wxCursor(wxCURSOR_SIZENS);
} else if (region == DSR_VERTICAL_TAB) {
cursor = wxCursor(wxCURSOR_SIZEWE);
- } else if (region == DSR_CORNER) {
+ } else if ((region == DSR_CORNER) &&
+ (m_impl->m_window->GetWindowStyle() & wxDS_DRAG_CORNER) != 0) {
cursor = wxCursor(wxCURSOR_SIZENWSE);
} else if (region == DSR_LEFT_EDGE || region == DSR_TOP_EDGE
|| region == DSR_RIGHT_EDGE || region == DSR_BOTTOM_EDGE) {
m_impl->m_container->SetCursor(cursor);
}
-void wxDynamicSashWindowLeaf::OnLeave(wxMouseEvent &event) {
+void wxDynamicSashWindowLeaf::OnLeave(wxMouseEvent &WXUNUSED(event)) {
wxCursor cursor(wxCURSOR_ARROW);
m_impl->m_container->SetCursor(cursor);
}
void wxDynamicSashWindowLeaf::OnPress(wxMouseEvent &event) {
DynamicSashRegion region = GetRegion(event.m_x, event.m_y);
+ if ((region == DSR_CORNER) && (m_impl->m_window->GetWindowStyle() & wxDS_DRAG_CORNER) == 0)
+ return;
+
if (region == DSR_HORIZONTAL_TAB || region == DSR_VERTICAL_TAB || region == DSR_CORNER) {
m_impl->m_dragging = region;
m_impl->m_drag_x = event.m_x;
}
}
-void wxDynamicSashWindowLeaf::OnRelease(wxMouseEvent &event) {
+void wxDynamicSashWindowLeaf::OnRelease(wxMouseEvent &WXUNUSED(event)) {
}
-void wxDynamicSashWindowLeaf::OnReparent(wxEvent &event) {
+void wxDynamicSashWindowLeaf::OnReparent(wxEvent &WXUNUSED(event)) {
if (m_child) {
m_child->Reparent(m_viewport);
}