// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
- #pragma implementation "splittree.h"
-#endif
-
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
wxScrollBar *FindScrollBar(const wxWindow *child, int vert) const;
void OnSize(wxSizeEvent &event);
+ void OnViewSize(wxSizeEvent &event);
void OnPaint(wxPaintEvent &event);
void OnScroll(wxScrollEvent &event);
void OnFocus(wxFocusEvent &event);
{
m_impl = impl;
- m_hscroll = m_vscroll = NULL;
+ m_hscroll =
+ m_vscroll = NULL;
+
m_child = NULL;
}
{
m_hscroll->SetEventHandler(m_hscroll);
m_vscroll->SetEventHandler(m_vscroll);
- m_viewport->SetEventHandler(m_viewport);
m_hscroll->Destroy();
m_vscroll->Destroy();
bool wxDynamicSashWindowLeaf::Create()
{
- bool success;
-
m_hscroll = new wxScrollBar();
m_vscroll = new wxScrollBar();
m_viewport = new wxWindow();
- if (!m_hscroll || !m_vscroll || !m_viewport)
- {
- return false;
- }
-
wxDynamicSashWindowImpl *add_child_target = m_impl->m_add_child_target;
m_impl->m_add_child_target = NULL;
- success = m_hscroll->Create(m_impl->m_container, wxID_ANY, wxDefaultPosition, wxDefaultSize,
- wxSB_HORIZONTAL);
- success = success && m_vscroll->Create(m_impl->m_container, wxID_ANY, wxDefaultPosition, wxDefaultSize,
- wxSB_VERTICAL);
- success = success && m_viewport->Create(m_impl->m_container, wxID_ANY);
+
+ bool success = m_hscroll->Create(m_impl->m_container, wxID_ANY,
+ wxDefaultPosition, wxDefaultSize,
+ wxSB_HORIZONTAL);
+ if ( success )
+ success = m_vscroll->Create(m_impl->m_container, wxID_ANY,
+ wxDefaultPosition, wxDefaultSize,
+ wxSB_VERTICAL);
+ if ( success )
+ success = m_viewport->Create(m_impl->m_container, wxID_ANY);
+ if ( !success )
+ return false;
+
m_impl->m_add_child_target = add_child_target;
wxCursor cursor(wxCURSOR_ARROW);
m_vscroll->SetCursor(cursor);
m_viewport->SetCursor(cursor);
- m_viewport->SetEventHandler(this);
+ // the viewport must resize its child when it is itself resized, but it's
+ // more convenient to do it in our own method instead of deriving a new
+ // class just for this: this is why we pass this as last Connect() argument
+ m_viewport->Connect(wxEVT_SIZE,
+ wxSizeEventHandler(wxDynamicSashWindowLeaf::OnViewSize),
+ NULL, this);
+
Connect(wxEVT_DYNAMIC_SASH_REPARENT,
wxEventHandler(wxDynamicSashWindowLeaf::OnReparent));
m_impl->m_container->Layout();
- return success;
+ return true;
}
void wxDynamicSashWindowLeaf::AddChild(wxWindow *window)
void wxDynamicSashWindowLeaf::OnSize(wxSizeEvent &WXUNUSED(event))
{
m_impl->m_container->Refresh();
- ResizeChild(m_viewport->GetSize());
+}
+
+void wxDynamicSashWindowLeaf::OnViewSize(wxSizeEvent &WXUNUSED(event))
+{
+ if ( m_viewport )
+ ResizeChild(m_viewport->GetSize());
}
void wxDynamicSashWindowLeaf::OnPaint(wxPaintEvent &WXUNUSED(event))