move implementation from RemoveCaption() to removeFromDrawPageAndFree()
Change-Id: I4f98112c13dfcd5c6c2fdb5b682cca494d63a954
diff --git a/sc/inc/postit.hxx b/sc/inc/postit.hxx
index 4c0c10b..8791a8b 100644
--- a/sc/inc/postit.hxx
+++ b/sc/inc/postit.hxx
@@ -68,6 +68,10 @@ public:
*/
void removeFromDrawPage( SdrPage& rDrawPage );
/** Remove from draw page and free caption object if no Undo recording.
*/
void removeFromDrawPageAndFree();
/** Release all management of the SdrCaptionObj* in all instances of this
list and dissolve. The SdrCaptionObj pointer returned is ready to be
managed elsewhere.
diff --git a/sc/source/core/data/postit.cxx b/sc/source/core/data/postit.cxx
index 2acc07a..36d1f82 100644
--- a/sc/source/core/data/postit.cxx
+++ b/sc/source/core/data/postit.cxx
@@ -717,6 +717,30 @@ void ScCaptionPtr::removeFromDrawPage( SdrPage& rDrawPage )
assert(pObj == mpCaption); (void)pObj;
}
void ScCaptionPtr::removeFromDrawPageAndFree()
{
assert(mpHead && mpCaption);
SdrPage* pDrawPage = mpCaption->GetPage();
SAL_WARN_IF( !pDrawPage, "sc.core", "ScCaptionPtr::removeFromDrawPageAndFree - object without drawing page");
if (pDrawPage)
{
pDrawPage->RecalcObjOrdNums();
ScDrawLayer* pDrawLayer = dynamic_cast<ScDrawLayer*>(mpCaption->GetModel());
SAL_WARN_IF( !pDrawLayer, "sc.core", "ScCaptionPtr::removeFromDrawPageAndFree - object without drawing layer");
// create drawing undo action (before removing the object to have valid draw page in undo action)
const bool bRecording = (pDrawLayer && pDrawLayer->IsRecording());
if (bRecording)
pDrawLayer->AddCalcUndo( new SdrUndoDelObj( *mpCaption ));
// remove the object from the drawing page, delete if undo is disabled
removeFromDrawPage( *pDrawPage );
if (!bRecording)
{
SdrObject* pObj = release();
SdrObject::Free( pObj );
}
}
}
SdrCaptionObj* ScCaptionPtr::release()
{
SdrCaptionObj* pTmp = mpCaption;
@@ -1074,27 +1098,8 @@ void ScPostIt::RemoveCaption()
undo documents refer to captions in original document, do not remove
them from drawing layer here). */
ScDrawLayer* pDrawLayer = mrDoc.GetDrawLayer();
if( maNoteData.mxCaption && (pDrawLayer == maNoteData.mxCaption->GetModel()) )
{
OSL_ENSURE( pDrawLayer, "ScPostIt::RemoveCaption - object without drawing layer" );
SdrPage* pDrawPage = maNoteData.mxCaption->GetPage();
OSL_ENSURE( pDrawPage, "ScPostIt::RemoveCaption - object without drawing page" );
if( pDrawPage )
{
pDrawPage->RecalcObjOrdNums();
// create drawing undo action (before removing the object to have valid draw page in undo action)
const bool bRecording = (pDrawLayer && pDrawLayer->IsRecording());
if( bRecording )
pDrawLayer->AddCalcUndo( new SdrUndoDelObj( *maNoteData.mxCaption.get() ) );
// remove the object from the drawing page, delete if undo is disabled
maNoteData.mxCaption.removeFromDrawPage( *pDrawPage );
if( !bRecording )
{
SdrObject* pObj = maNoteData.mxCaption.release();
SdrObject::Free( pObj );
}
}
}
if (maNoteData.mxCaption && (pDrawLayer == maNoteData.mxCaption->GetModel()))
maNoteData.mxCaption.removeFromDrawPageAndFree();
// Either the caption object is gone or, because of Undo or clipboard is
// held in at least two instances, or only one instance in Undo because the
// original sheet in this document is just deleted, or the Undo document is