summaryrefslogtreecommitdiff
path: root/sw/source/uibase/docvw/FrameControlsManager.cxx
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2015-06-08 15:34:12 +0100
committerMichael Meeks <michael.meeks@collabora.com>2015-06-12 16:22:04 +0000
commit93da9ecd9de9a1d0ae3aafaded815ee179fb0f30 (patch)
tree7c3f6c18724c12a04ba7ce44bf2b97756861bb2d /sw/source/uibase/docvw/FrameControlsManager.cxx
parentfae87e03ea3829718ec0381ed3b04ceb52c23720 (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.cxx59
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: */