diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2015-06-08 15:34:12 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2015-06-12 16:22:04 +0000 |
commit | 93da9ecd9de9a1d0ae3aafaded815ee179fb0f30 (patch) | |
tree | 7c3f6c18724c12a04ba7ce44bf2b97756861bb2d /sw/source/uibase/docvw/FrameControlsManager.cxx | |
parent | fae87e03ea3829718ec0381ed3b04ceb52c23720 (diff) |
Writer FrameControl lifecycle and management cleanup.
We can't derive from a VclPtr base-class, and also another base,
and then use boost::shared_ptr for that; re-factor to use a boost_ptr
to hold a VclPtr<> for now. Also fix leaking envelope dialog.
Change-Id: I2e1efbfaee3b6051e38ff7a14903a83ccd75136b
Reviewed-on: https://gerrit.libreoffice.org/16160
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Tested-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'sw/source/uibase/docvw/FrameControlsManager.cxx')
-rw-r--r-- | sw/source/uibase/docvw/FrameControlsManager.cxx | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/sw/source/uibase/docvw/FrameControlsManager.cxx b/sw/source/uibase/docvw/FrameControlsManager.cxx index e16809626414..262388ca9c2c 100644 --- a/sw/source/uibase/docvw/FrameControlsManager.cxx +++ b/sw/source/uibase/docvw/FrameControlsManager.cxx @@ -117,7 +117,9 @@ void SwFrameControlsManager::SetHeaderFooterControl( const SwPageFrm* pPageFrm, pControl = lb->second; else { - SwFrameControlPtr pNewControl( new SwHeaderFooterWin( m_pEditWin, pPageFrm, bHeader ) ); + SwFrameControlPtr pNewControl( + new SwFrameControl( VclPtr<SwHeaderFooterWin>::Create( + m_pEditWin, pPageFrm, bHeader ).get() ) ); const SwViewOption* pViewOpt = m_pEditWin->GetView().GetWrtShell().GetViewOptions(); pNewControl->SetReadonly( pViewOpt->IsReadonly() ); rControls.insert(lb, make_pair(pPageFrm, pNewControl)); @@ -126,11 +128,12 @@ void SwFrameControlsManager::SetHeaderFooterControl( const SwPageFrm* pPageFrm, Rectangle aPageRect = m_pEditWin->LogicToPixel( pPageFrm->Frm().SVRect() ); - SwHeaderFooterWin& rHFWin = dynamic_cast<SwHeaderFooterWin&>(*pControl.get()); - assert(rHFWin.IsHeader() == bHeader); - rHFWin.SetOffset( aOffset, aPageRect.Left(), aPageRect.Right() ); + SwHeaderFooterWin* pWin = dynamic_cast<SwHeaderFooterWin *>(pControl->GetWindow()); + assert( pWin != NULL) ; + assert( pWin->IsHeader() == bHeader ); + pWin->SetOffset( aOffset, aPageRect.Left(), aPageRect.Right() ); - if (!rHFWin.IsVisible()) + if (!pWin->IsVisible()) pControl->ShowAll( true ); } @@ -146,7 +149,8 @@ void SwFrameControlsManager::SetPageBreakControl( const SwPageFrm* pPageFrm ) pControl = lb->second; else { - SwFrameControlPtr pNewControl( new SwPageBreakWin( m_pEditWin, pPageFrm ) ); + SwFrameControlPtr pNewControl( new SwFrameControl( + VclPtr<SwPageBreakWin>::Create( m_pEditWin, pPageFrm ).get() ) ); const SwViewOption* pViewOpt = m_pEditWin->GetView().GetWrtShell().GetViewOptions(); pNewControl->SetReadonly( pViewOpt->IsReadonly() ); @@ -155,10 +159,47 @@ void SwFrameControlsManager::SetPageBreakControl( const SwPageFrm* pPageFrm ) pControl.swap( pNewControl ); } - SwPageBreakWin& rWin = dynamic_cast<SwPageBreakWin&>(*pControl.get()); - rWin.UpdatePosition(); - if (!rWin.IsVisible()) + SwPageBreakWin* pWin = dynamic_cast<SwPageBreakWin *>(pControl->GetWindow()); + assert (pWin != NULL); + pWin->UpdatePosition(); + if (!pWin->IsVisible()) pControl->ShowAll( true ); } +SwFrameMenuButtonBase::SwFrameMenuButtonBase( SwEditWin* pEditWin, const SwFrm* pFrm ) : + MenuButton( pEditWin, WB_DIALOGCONTROL ), + m_pEditWin( pEditWin ), + m_pFrm( pFrm ) +{ +} + +const SwPageFrm* SwFrameMenuButtonBase::GetPageFrame() +{ + return static_cast< const SwPageFrm * >( m_pFrm ); +} + +void SwFrameMenuButtonBase::dispose() +{ + m_pEditWin.clear(); + m_pFrm = NULL; + MenuButton::dispose(); +} + +SwFrameControl::SwFrameControl( const VclPtr<vcl::Window> &pWindow ) +{ + assert( pWindow != NULL ); + mxWindow.reset( pWindow ); + mpIFace = dynamic_cast<ISwFrameControl *>( pWindow.get() ); +} + +SwFrameControl::~SwFrameControl() +{ + mpIFace = NULL; + mxWindow.disposeAndClear(); +} + +ISwFrameControl::~ISwFrameControl() +{ +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |