for instance, you wish to scroll a subwindow of the view you add to
your wxDynamicSashWindow object, rather than scrolling the whole view.)
In this case, you will need to construct your wxDynamicSashWindow without
- the wxMANAGE_SCROLLBARS style and you will need to use the
+ the wxDS_MANAGE_SCROLLBARS style and you will need to use the
GetHScrollBar() and GetVScrollBar() methods to retrieve the scrollbar
controls and call SetEventHanler() on them to redirect the scrolling
events whenever your window is reparented by wxDyanmicSashWindow.
/*
- wxMANAGE_SCROLLBARS is a default style of wxDynamicSashWindow which
+ wxDS_MANAGE_SCROLLBARS is a default style of wxDynamicSashWindow which
will cause it to respond to scrollbar events for your application by
automatically scrolling the child view.
*/
-#define wxMANAGE_SCROLLBARS 0x00800000
+#define wxDS_MANAGE_SCROLLBARS 0x0010
+
+
+/*
+ wxDS_DRAG_CORNER style indicates that the views can also be resized by
+ dragging the corner piece between the scrollbars, and which is reflected up
+ to the frame if necessary.
+*/
+#define wxDS_DRAG_CORNER 0x0020
/*
wxDynamicSashWindow();
wxDynamicSashWindow(wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
- long style = wxCLIP_CHILDREN | wxMANAGE_SCROLLBARS,
+ long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER,
const wxString& name = "dynamicSashWindow");
virtual ~wxDynamicSashWindow();
virtual bool Create(wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
- long style = wxCLIP_CHILDREN | wxMANAGE_SCROLLBARS,
+ long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER,
const wxString& name = "dynamicSashWindow");
virtual wxScrollBar *GetHScrollBar(const wxWindow *child) const;
virtual wxScrollBar *GetVScrollBar(const wxWindow *child) const;
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);
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()) {
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;
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) {
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;