X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/67631cee528e478b64f3339133ef9034568b99af..f8a280159dcd2d6a98d8b5722645f9cb11c96c73:/contrib/src/gizmos/dynamicsash.cpp diff --git a/contrib/src/gizmos/dynamicsash.cpp b/contrib/src/gizmos/dynamicsash.cpp index a88c427f19..527f103cdd 100644 --- a/contrib/src/gizmos/dynamicsash.cpp +++ b/contrib/src/gizmos/dynamicsash.cpp @@ -10,13 +10,11 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ - #pragma implementation "splittree.h" -#endif - // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" +#if !wxUSE_MDI + #ifdef __BORLANDC__ #pragma hdrstop #endif @@ -196,6 +194,7 @@ public: 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); @@ -207,13 +206,15 @@ public: wxDynamicSashWindowImpl *m_impl; - wxScrollBar *m_vscroll, *m_hscroll; + wxScrollBar *m_vscroll, + *m_hscroll; /* m_child is the window provided to us by the application developer. m_viewport is a window we've created, and it is the immediately parent of m_child. We scroll m_child by moving it around within m_viewport. */ - wxWindow *m_viewport, *m_child; + wxWindow *m_viewport, + *m_child; }; @@ -999,7 +1000,9 @@ wxDynamicSashWindowLeaf::wxDynamicSashWindowLeaf(wxDynamicSashWindowImpl *impl) { m_impl = impl; - m_hscroll = m_vscroll = NULL; + m_hscroll = + m_vscroll = NULL; + m_child = NULL; } @@ -1007,7 +1010,6 @@ wxDynamicSashWindowLeaf::~wxDynamicSashWindowLeaf() { m_hscroll->SetEventHandler(m_hscroll); m_vscroll->SetEventHandler(m_vscroll); - m_viewport->SetEventHandler(m_viewport); m_hscroll->Destroy(); m_vscroll->Destroy(); @@ -1016,24 +1018,25 @@ wxDynamicSashWindowLeaf::~wxDynamicSashWindowLeaf() 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); @@ -1041,50 +1044,46 @@ bool wxDynamicSashWindowLeaf::Create() m_vscroll->SetCursor(cursor); m_viewport->SetCursor(cursor); - m_viewport->SetEventHandler(this); - Connect(wxID_ANY, wxEVT_DYNAMIC_SASH_REPARENT, (wxObjectEventFunction)&wxDynamicSashWindowLeaf::OnReparent); + // 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)); if (m_impl->m_window->GetWindowStyle() & wxDS_MANAGE_SCROLLBARS) { m_hscroll->SetEventHandler(this); m_vscroll->SetEventHandler(this); - Connect(wxID_ANY, wxEVT_SET_FOCUS, (wxObjectEventFunction) - (wxEventFunction) - (wxFocusEventFunction)&wxDynamicSashWindowLeaf::OnFocus); - Connect(wxID_ANY, wxEVT_SCROLL_TOP, (wxObjectEventFunction) - (wxEventFunction) - (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll); - Connect(wxID_ANY, wxEVT_SCROLL_BOTTOM, (wxObjectEventFunction) - (wxEventFunction) - (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll); - Connect(wxID_ANY, wxEVT_SCROLL_LINEUP, (wxObjectEventFunction) - (wxEventFunction) - (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll); - Connect(wxID_ANY, wxEVT_SCROLL_LINEDOWN, (wxObjectEventFunction) - (wxEventFunction) - (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll); - Connect(wxID_ANY, wxEVT_SCROLL_PAGEUP, (wxObjectEventFunction) - (wxEventFunction) - (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll); - Connect(wxID_ANY, wxEVT_SCROLL_PAGEDOWN, (wxObjectEventFunction) - (wxEventFunction) - (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll); - Connect(wxID_ANY, wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction) - (wxEventFunction) - (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll); - Connect(wxID_ANY, wxEVT_SCROLL_THUMBRELEASE, (wxObjectEventFunction) - (wxEventFunction) - (wxScrollEventFunction)&wxDynamicSashWindowLeaf::OnScroll); + Connect(wxEVT_SET_FOCUS, + wxFocusEventHandler(wxDynamicSashWindowLeaf::OnFocus)); + Connect(wxEVT_SCROLL_TOP, + wxScrollEventHandler(wxDynamicSashWindowLeaf::OnScroll)); + Connect(wxEVT_SCROLL_BOTTOM, + wxScrollEventHandler(wxDynamicSashWindowLeaf::OnScroll)); + Connect(wxEVT_SCROLL_LINEUP, + wxScrollEventHandler(wxDynamicSashWindowLeaf::OnScroll)); + Connect(wxEVT_SCROLL_LINEDOWN, + wxScrollEventHandler(wxDynamicSashWindowLeaf::OnScroll)); + Connect(wxEVT_SCROLL_PAGEUP, + wxScrollEventHandler(wxDynamicSashWindowLeaf::OnScroll)); + Connect(wxEVT_SCROLL_PAGEDOWN, + wxScrollEventHandler(wxDynamicSashWindowLeaf::OnScroll)); + Connect(wxEVT_SCROLL_THUMBTRACK, + wxScrollEventHandler(wxDynamicSashWindowLeaf::OnScroll)); + Connect(wxEVT_SCROLL_THUMBRELEASE, + wxScrollEventHandler(wxDynamicSashWindowLeaf::OnScroll)); } wxLayoutConstraints *layout = new wxLayoutConstraints(); if (!layout) return false; + wxSize size = m_hscroll->GetBestSize(); -#ifdef __WXMSW__ - size = m_hscroll->GetSize(); -#endif layout->left.SameAs(m_impl->m_container, wxLeft, 10); layout->right.LeftOf(m_vscroll); @@ -1095,10 +1094,8 @@ bool wxDynamicSashWindowLeaf::Create() layout = new wxLayoutConstraints(); if (!layout) return false; - size = size = m_vscroll->GetBestSize(); -#ifdef __WXMSW__ - size = m_vscroll->GetSize(); -#endif + + size = m_vscroll->GetBestSize(); layout->top.SameAs(m_impl->m_container, wxTop, 10); layout->bottom.Above(m_hscroll); @@ -1117,7 +1114,7 @@ bool wxDynamicSashWindowLeaf::Create() m_impl->m_container->Layout(); - return success; + return true; } void wxDynamicSashWindowLeaf::AddChild(wxWindow *window) @@ -1218,7 +1215,12 @@ wxDynamicSashWindowLeaf::FindScrollBar(const wxWindow *child, int vert) const 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)) @@ -1469,3 +1471,4 @@ wxDynamicSashReparentEvent::wxDynamicSashReparentEvent(const wxDynamicSashRepare IMPLEMENT_DYNAMIC_CLASS(wxDynamicSashReparentEvent, wxEvent) +#endif // !wxUSE_MDI \ No newline at end of file