From 50c63e5c2f7962e8893e2d04b0e958209432f4c9 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Fri, 29 Jun 2018 15:38:29 +0200 Subject: pass OutlinerParaObject around by std::unique_ptr SdrText::SetOutlinerParaObject was modified to not check for self-assign, and instead assert because the existing check was no longer possible. Fix bug in SdrUndoObjSetText::Undo(), where it was calling SdrText::SetOutlinerParaObject unnecessarily, because NbcSetOutlinerParaObjectForText already does that. Optimise Outliner::GetEmptyParaObject by creating a new constructor for OutlinerParaObject, so we don't need to copy the new object we get back from GetEmptyTextObject, unnecessarily. Change-Id: I57c475583d6c31658c154e24992b3d587bad9841 Reviewed-on: https://gerrit.libreoffice.org/56730 Tested-by: Jenkins Reviewed-by: Noel Grandin --- svx/source/accessibility/AccessibleShape.cxx | 2 +- .../customshapes/EnhancedCustomShapeEngine.cxx | 3 ++- svx/source/inc/cell.hxx | 4 ++-- svx/source/sdr/primitive2d/sdrattributecreator.cxx | 3 +-- svx/source/sdr/properties/textproperties.cxx | 16 ++++++------- svx/source/svdraw/svdedtv2.cxx | 6 +++-- svx/source/svdraw/svdedxv.cxx | 4 ++-- svx/source/svdraw/svdoashp.cxx | 6 ++--- svx/source/svdraw/svdobj.cxx | 6 ++--- svx/source/svdraw/svdomeas.cxx | 4 ++-- svx/source/svdraw/svdoole2.cxx | 3 ++- svx/source/svdraw/svdotext.cxx | 28 +++++++++++----------- svx/source/svdraw/svdotxat.cxx | 4 ++-- svx/source/svdraw/svdotxed.cxx | 12 +++------- svx/source/svdraw/svdtext.cxx | 26 ++++++++++---------- svx/source/svdraw/svdundo.cxx | 22 ++++++++--------- svx/source/svdraw/textchainflow.cxx | 22 +++++++---------- svx/source/table/accessiblecell.cxx | 2 +- svx/source/table/cell.cxx | 25 ++++++++++--------- svx/source/table/svdotable.cxx | 10 ++++---- svx/source/table/tablertfexporter.cxx | 2 +- svx/source/table/tableundo.cxx | 3 ++- svx/source/unodraw/unoshtxt.cxx | 4 ++-- 23 files changed, 104 insertions(+), 113 deletions(-) (limited to 'svx/source') diff --git a/svx/source/accessibility/AccessibleShape.cxx b/svx/source/accessibility/AccessibleShape.cxx index 19d9c2fed299..728871ed827a 100644 --- a/svx/source/accessibility/AccessibleShape.cxx +++ b/svx/source/accessibility/AccessibleShape.cxx @@ -161,7 +161,7 @@ void AccessibleShape::Init() OutlinerParaObject* pOutlinerParaObject = nullptr; if( pTextObj ) - pOutlinerParaObject = pTextObj->GetEditOutlinerParaObject(); // Get the OutlinerParaObject if text edit is active + pOutlinerParaObject = pTextObj->GetEditOutlinerParaObject().release(); // Get the OutlinerParaObject if text edit is active bool bOwnParaObj = pOutlinerParaObject != nullptr; diff --git a/svx/source/customshapes/EnhancedCustomShapeEngine.cxx b/svx/source/customshapes/EnhancedCustomShapeEngine.cxx index 2a62c0ac1daf..39d1f83cde8c 100644 --- a/svx/source/customshapes/EnhancedCustomShapeEngine.cxx +++ b/svx/source/customshapes/EnhancedCustomShapeEngine.cxx @@ -53,6 +53,7 @@ #include #include #include +#include using namespace css; using namespace css::uno; @@ -194,7 +195,7 @@ SdrObject* EnhancedCustomShapeEngine::ImplForceGroupWithText( OutlinerParaObject* pParaObj(rSdrObjCustomShape.GetOutlinerParaObject()); if( pParaObj ) - pTextObj->NbcSetOutlinerParaObject( new OutlinerParaObject(*pParaObj) ); + pTextObj->NbcSetOutlinerParaObject( o3tl::make_unique(*pParaObj) ); // copy all attributes SfxItemSet aTargetItemSet(rSdrObjCustomShape.GetMergedItemSet()); diff --git a/svx/source/inc/cell.hxx b/svx/source/inc/cell.hxx index 2f9a9dfec8c7..82428de96fe5 100644 --- a/svx/source/inc/cell.hxx +++ b/svx/source/inc/cell.hxx @@ -71,7 +71,7 @@ public: SVX_DLLPRIVATE const ::tools::Rectangle& getCellRect() const { return maCellRect; } SVX_DLLPRIVATE ::tools::Rectangle& getCellRect() { return maCellRect; } - OutlinerParaObject* GetEditOutlinerParaObject() const; + std::unique_ptr GetEditOutlinerParaObject() const; SVX_DLLPRIVATE void SetStyleSheet( SfxStyleSheet* pStyleSheet, bool bDontRemoveHardAttr ); SVX_DLLPRIVATE virtual SfxStyleSheet* GetStyleSheet() const override; SVX_DLLPRIVATE void TakeTextAnchorRect(tools::Rectangle& rAnchorRect) const; @@ -168,7 +168,7 @@ public: // XEventListener SVX_DLLPRIVATE virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override; - SVX_DLLPRIVATE virtual void SetOutlinerParaObject( OutlinerParaObject* pTextObject ) override; + SVX_DLLPRIVATE virtual void SetOutlinerParaObject( std::unique_ptr pTextObject ) override; SVX_DLLPRIVATE void AddUndo(); diff --git a/svx/source/sdr/primitive2d/sdrattributecreator.cxx b/svx/source/sdr/primitive2d/sdrattributecreator.cxx index 452971758bbc..4ee872eb681e 100644 --- a/svx/source/sdr/primitive2d/sdrattributecreator.cxx +++ b/svx/source/sdr/primitive2d/sdrattributecreator.cxx @@ -545,12 +545,11 @@ namespace drawinglayer if(bInEditMode) { - OutlinerParaObject* pTempObj = rTextObj.GetEditOutlinerParaObject(); + std::unique_ptr pTempObj = rTextObj.GetEditOutlinerParaObject(); if(pTempObj) { aOutlinerParaObject = *pTempObj; - delete pTempObj; } else { diff --git a/svx/source/sdr/properties/textproperties.cxx b/svx/source/sdr/properties/textproperties.cxx index 503872cb4ba6..1ca04d65a628 100644 --- a/svx/source/sdr/properties/textproperties.cxx +++ b/svx/source/sdr/properties/textproperties.cxx @@ -128,10 +128,10 @@ namespace sdr mpItemSet->Put(aNewSet); } - OutlinerParaObject* pTemp = pOutliner->CreateParaObject(0, nParaCount); + std::unique_ptr pTemp = pOutliner->CreateParaObject(0, nParaCount); pOutliner->Clear(); - rObj.NbcSetOutlinerParaObjectForText(pTemp,pText); + rObj.NbcSetOutlinerParaObjectForText(std::move(pTemp),pText); } } } @@ -187,10 +187,10 @@ namespace sdr ESelection aSelection( 0, 0, EE_PARA_ALL, EE_TEXTPOS_ALL); rOutliner.RemoveAttribs(aSelection, true, 0); - OutlinerParaObject* pTemp = rOutliner.CreateParaObject(0, nParaCount); + std::unique_ptr pTemp = rOutliner.CreateParaObject(0, nParaCount); rOutliner.Clear(); - rObj.NbcSetOutlinerParaObjectForText( pTemp, pText ); + rObj.NbcSetOutlinerParaObjectForText( std::move(pTemp), pText ); } } } @@ -338,9 +338,9 @@ namespace sdr delete pTempSet; } - OutlinerParaObject* pTemp = rOutliner.CreateParaObject(0, nParaCount); + std::unique_ptr pTemp = rOutliner.CreateParaObject(0, nParaCount); rOutliner.Clear(); - rObj.NbcSetOutlinerParaObjectForText(pTemp, pText); + rObj.NbcSetOutlinerParaObjectForText(std::move(pTemp), pText); } } } @@ -518,8 +518,8 @@ namespace sdr if(bBurnIn) { - OutlinerParaObject* pTemp = pOutliner->CreateParaObject(0, nParaCount); - rObj.NbcSetOutlinerParaObjectForText(pTemp,pText); + std::unique_ptr pTemp = pOutliner->CreateParaObject(0, nParaCount); + rObj.NbcSetOutlinerParaObjectForText(std::move(pTemp),pText); } } diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx index 18c4ebf0ca03..85ca2a280b08 100644 --- a/svx/source/svdraw/svdedtv2.cxx +++ b/svx/source/svdraw/svdedtv2.cxx @@ -41,8 +41,10 @@ #include #include #include +#include #include #include + using ::std::vector; using namespace com::sun::star; @@ -1573,7 +1575,7 @@ void SdrEditView::ImpDismantleOneObject(const SdrObject* pObj, SdrObjList& rOL, if(pLast && pSrcPath->GetOutlinerParaObject()) { - pLast->SetOutlinerParaObject(new OutlinerParaObject(*pSrcPath->GetOutlinerParaObject())); + pLast->SetOutlinerParaObject(o3tl::make_unique(*pSrcPath->GetOutlinerParaObject())); } } else if(pCustomShape) @@ -1613,7 +1615,7 @@ void SdrEditView::ImpDismantleOneObject(const SdrObject* pObj, SdrObjList& rOL, OutlinerParaObject* pParaObj = pCustomShape->GetOutlinerParaObject(); if(pParaObj) { - pTextObj->NbcSetOutlinerParaObject(new OutlinerParaObject(*pParaObj)); + pTextObj->NbcSetOutlinerParaObject(o3tl::make_unique(*pParaObj)); } // copy all attributes diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index ff40fc85c5a9..2003ecf667b6 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -2624,10 +2624,10 @@ void SdrObjEditView::ApplyFormatPaintBrushToText( SfxItemSet const & rFormatSet, rOutliner.SetParaAttribs(nPara, aSet); } - OutlinerParaObject* pTemp = rOutliner.CreateParaObject(0, nParaCount); + std::unique_ptr pTemp = rOutliner.CreateParaObject(0, nParaCount); rOutliner.Clear(); - rTextObj.NbcSetOutlinerParaObjectForText(pTemp,pText); + rTextObj.NbcSetOutlinerParaObjectForText(std::move(pTemp),pText); } } } diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx index 23308b4eaf40..3ff61483d2b3 100644 --- a/svx/source/svdraw/svdoashp.cxx +++ b/svx/source/svdraw/svdoashp.cxx @@ -2634,7 +2634,7 @@ void SdrObjCustomShape::TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& // put text into the Outliner - if necessary the use the text from the EditOutliner OutlinerParaObject* pPara= GetOutlinerParaObject(); if (pEdtOutl && !bNoEditText) - pPara=pEdtOutl->CreateParaObject(); + pPara=pEdtOutl->CreateParaObject().release(); if (pPara) { @@ -2728,9 +2728,9 @@ void SdrObjCustomShape::TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRect=tools::Rectangle(aTextPos,aTextSiz); } -void SdrObjCustomShape::NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject) +void SdrObjCustomShape::NbcSetOutlinerParaObject(std::unique_ptr pTextObject) { - SdrTextObj::NbcSetOutlinerParaObject( pTextObject ); + SdrTextObj::NbcSetOutlinerParaObject( std::move(pTextObject) ); SetBoundRectDirty(); SetRectsDirty(true); InvalidateRenderGeometry(); diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index f936e8c4bf3b..663c4b07083a 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -1735,10 +1735,10 @@ void SdrObject::dumpAsXml(xmlTextWriterPtr pWriter) const xmlTextWriterEndElement(pWriter); } -void SdrObject::SetOutlinerParaObject(OutlinerParaObject* pTextObject) +void SdrObject::SetOutlinerParaObject(std::unique_ptr pTextObject) { tools::Rectangle aBoundRect0; if (pUserCall!=nullptr) aBoundRect0=GetLastBoundRect(); - NbcSetOutlinerParaObject(pTextObject); + NbcSetOutlinerParaObject(std::move(pTextObject)); SetChanged(); BroadcastObjectChange(); if (GetCurrentBoundRect()!=aBoundRect0) { @@ -1746,7 +1746,7 @@ void SdrObject::SetOutlinerParaObject(OutlinerParaObject* pTextObject) } } -void SdrObject::NbcSetOutlinerParaObject(OutlinerParaObject* /*pTextObject*/) +void SdrObject::NbcSetOutlinerParaObject(std::unique_ptr /*pTextObject*/) { } diff --git a/svx/source/svdraw/svdomeas.cxx b/svx/source/svdraw/svdomeas.cxx index 53aa58ba4f06..b0738696d733 100644 --- a/svx/source/svdraw/svdomeas.cxx +++ b/svx/source/svdraw/svdomeas.cxx @@ -1285,9 +1285,9 @@ OutlinerParaObject* SdrMeasureObj::GetOutlinerParaObject() const return SdrTextObj::GetOutlinerParaObject(); } -void SdrMeasureObj::NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject) +void SdrMeasureObj::NbcSetOutlinerParaObject(std::unique_ptr pTextObject) { - SdrTextObj::NbcSetOutlinerParaObject(pTextObject); + SdrTextObj::NbcSetOutlinerParaObject(std::move(pTextObject)); if(SdrTextObj::GetOutlinerParaObject()) SetTextDirty(); // recalculate text } diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx index 40ea2dbb7f3b..feb7caf6700c 100644 --- a/svx/source/svdraw/svdoole2.cxx +++ b/svx/source/svdraw/svdoole2.cxx @@ -85,6 +85,7 @@ #include #include #include +#include using namespace ::com::sun::star; @@ -1195,7 +1196,7 @@ SdrObject* SdrOle2Obj::createSdrGrafObjReplacement(bool bAddText) const if(pOPO) { - pClone->NbcSetOutlinerParaObject(new OutlinerParaObject(*pOPO)); + pClone->NbcSetOutlinerParaObject(o3tl::make_unique(*pOPO)); } } diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index 41bd67eb19d5..1e6780866101 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -206,10 +206,10 @@ void SdrTextObj::NbcSetText(const OUString& rStr) rOutliner.SetStyleSheet( 0, GetStyleSheet()); rOutliner.SetUpdateMode(true); rOutliner.SetText(rStr,rOutliner.GetParagraph( 0 )); - OutlinerParaObject* pNewText=rOutliner.CreateParaObject(); + std::unique_ptr pNewText=rOutliner.CreateParaObject(); Size aSiz(rOutliner.CalcTextSize()); rOutliner.Clear(); - NbcSetOutlinerParaObject(pNewText); + NbcSetOutlinerParaObject(std::move(pNewText)); aTextSize=aSiz; bTextSizeDirty=false; } @@ -228,11 +228,11 @@ void SdrTextObj::NbcSetText(SvStream& rInput, const OUString& rBaseURL, EETextFo SdrOutliner& rOutliner=ImpGetDrawOutliner(); rOutliner.SetStyleSheet( 0, GetStyleSheet()); rOutliner.Read(rInput,rBaseURL,eFormat); - OutlinerParaObject* pNewText=rOutliner.CreateParaObject(); + std::unique_ptr pNewText=rOutliner.CreateParaObject(); rOutliner.SetUpdateMode(true); Size aSiz(rOutliner.CalcTextSize()); rOutliner.Clear(); - NbcSetOutlinerParaObject(pNewText); + NbcSetOutlinerParaObject(std::move(pNewText)); aTextSize=aSiz; bTextSizeDirty=false; } @@ -711,7 +711,7 @@ void SdrTextObj::TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRe // put text into the outliner, if available from the edit outliner SdrText* pText = getActiveText(); OutlinerParaObject* pOutlinerParaObject = pText ? pText->GetOutlinerParaObject() : nullptr; - OutlinerParaObject* pPara = (pEdtOutl && !bNoEditText) ? pEdtOutl->CreateParaObject() : pOutlinerParaObject; + OutlinerParaObject* pPara = (pEdtOutl && !bNoEditText) ? pEdtOutl->CreateParaObject().release() : pOutlinerParaObject; if (pPara) { @@ -802,9 +802,9 @@ void SdrTextObj::TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRe rTextRect=aAnkRect; } -OutlinerParaObject* SdrTextObj::GetEditOutlinerParaObject() const +std::unique_ptr SdrTextObj::GetEditOutlinerParaObject() const { - OutlinerParaObject* pPara=nullptr; + std::unique_ptr pPara; if( HasTextImpl( pEdtOutl ) ) { sal_Int32 nParaCount = pEdtOutl->GetParagraphCount(); @@ -1041,7 +1041,7 @@ SdrTextObj& SdrTextObj::operator=(const SdrTextObj& rObj) // objects). In the current form it makes only sense to // create locally and use locally on a known existing SdrText const Outliner* pEO=rObj.pEdtOutl; - OutlinerParaObject* pNewOutlinerParaObject = nullptr; + std::unique_ptr pNewOutlinerParaObject; if (pEO!=nullptr) { @@ -1049,10 +1049,10 @@ SdrTextObj& SdrTextObj::operator=(const SdrTextObj& rObj) } else { - pNewOutlinerParaObject = new OutlinerParaObject(*rObj.getActiveText()->GetOutlinerParaObject()); + pNewOutlinerParaObject.reset( new OutlinerParaObject(*rObj.getActiveText()->GetOutlinerParaObject()) ); } - pText->SetOutlinerParaObject( pNewOutlinerParaObject ); + pText->SetOutlinerParaObject( std::move(pNewOutlinerParaObject) ); } ImpSetTextStyleSheetListeners(); @@ -1394,15 +1394,15 @@ OutlinerParaObject* SdrTextObj::GetOutlinerParaObject() const return nullptr; } -void SdrTextObj::NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject) +void SdrTextObj::NbcSetOutlinerParaObject(std::unique_ptr pTextObject) { - NbcSetOutlinerParaObjectForText( pTextObject, getActiveText() ); + NbcSetOutlinerParaObjectForText( std::move(pTextObject), getActiveText() ); } -void SdrTextObj::NbcSetOutlinerParaObjectForText( OutlinerParaObject* pTextObject, SdrText* pText ) +void SdrTextObj::NbcSetOutlinerParaObjectForText( std::unique_ptr pTextObject, SdrText* pText ) { if( pText ) - pText->SetOutlinerParaObject( pTextObject ); + pText->SetOutlinerParaObject( std::move(pTextObject) ); if (pText && pText->GetOutlinerParaObject()) { diff --git a/svx/source/svdraw/svdotxat.cxx b/svx/source/svdraw/svdotxat.cxx index a28a5a698a3c..7a3490e3722d 100644 --- a/svx/source/svdraw/svdotxat.cxx +++ b/svx/source/svdraw/svdotxat.cxx @@ -420,9 +420,9 @@ void SdrTextObj::RemoveOutlinerCharacterAttribs( const std::vector& if(!pEdtOutl || (pText != getActiveText()) ) { const sal_Int32 nParaCount = pOutliner->GetParagraphCount(); - OutlinerParaObject* pTemp = pOutliner->CreateParaObject(0, nParaCount); + std::unique_ptr pTemp = pOutliner->CreateParaObject(0, nParaCount); pOutliner->Clear(); - NbcSetOutlinerParaObjectForText(pTemp, pText); + NbcSetOutlinerParaObjectForText(std::move(pTemp), pText); } } } diff --git a/svx/source/svdraw/svdotxed.cxx b/svx/source/svdraw/svdotxed.cxx index bb3e60d9291b..172ebff4e6a0 100644 --- a/svx/source/svdraw/svdotxed.cxx +++ b/svx/source/svdraw/svdotxed.cxx @@ -270,8 +270,7 @@ void SdrTextObj::EndTextEdit(SdrOutliner& rOutl) // to make the gray field background vanish again rOutl.UpdateFields(); - bool bNewTextTransferred = false; - OutlinerParaObject* pNewText = rOutl.CreateParaObject( 0, rOutl.GetParagraphCount() ); + std::unique_ptr pNewText = rOutl.CreateParaObject( 0, rOutl.GetParagraphCount() ); // need to end edit mode early since SetOutlinerParaObject already // uses GetCurrentBoundRect() which needs to take the text into account @@ -283,16 +282,11 @@ void SdrTextObj::EndTextEdit(SdrOutliner& rOutl) GetTextChain()->SetSwitchingToNextBox(this, false); if( getActiveText() ) { - getActiveText()->SetOutlinerParaObject( pNewText); - bNewTextTransferred = true; + getActiveText()->SetOutlinerParaObject( std::move(pNewText) ); } } else { // If we are not doing in-chaining switching just set the ParaObject - SetOutlinerParaObject(pNewText); - bNewTextTransferred = true; + SetOutlinerParaObject(std::move(pNewText)); } - - if (!bNewTextTransferred) - delete pNewText; } /* Chaining-related code */ diff --git a/svx/source/svdraw/svdtext.cxx b/svx/source/svdraw/svdtext.cxx index 549578832885..dfbcc0daab7a 100644 --- a/svx/source/svdraw/svdtext.cxx +++ b/svx/source/svdraw/svdtext.cxx @@ -56,7 +56,7 @@ void SdrText::CheckPortionInfo( SdrOutliner& rOutliner ) if(mpOutlinerParaObject!=nullptr && rOutliner.ShouldCreateBigTextObject()) { // #i102062# MemoryLeak closed - mpOutlinerParaObject.reset( rOutliner.CreateParaObject() ); + mpOutlinerParaObject = rOutliner.CreateParaObject(); } } } @@ -72,21 +72,20 @@ const SfxItemSet& SdrText::GetItemSet() const return const_cast< SdrText* >(this)->GetObjectItemSet(); } -void SdrText::SetOutlinerParaObject( OutlinerParaObject* pTextObject ) +void SdrText::SetOutlinerParaObject( std::unique_ptr pTextObject ) { - if( mpOutlinerParaObject.get() != pTextObject ) - { - // Update HitTestOutliner - const SdrTextObj* pTestObj(mrObject.getSdrModelFromSdrObject().GetHitTestOutliner().GetTextObj()); + assert ( !mpOutlinerParaObject || (mpOutlinerParaObject.get() != pTextObject.get()) ); - if(pTestObj && pTestObj->GetOutlinerParaObject() == mpOutlinerParaObject.get()) - { - mrObject.getSdrModelFromSdrObject().GetHitTestOutliner().SetTextObj(nullptr); - } + // Update HitTestOutliner + const SdrTextObj* pTestObj(mrObject.getSdrModelFromSdrObject().GetHitTestOutliner().GetTextObj()); - mpOutlinerParaObject.reset(pTextObject); - mbPortionInfoChecked = false; + if(pTestObj && pTestObj->GetOutlinerParaObject() == mpOutlinerParaObject.get()) + { + mrObject.getSdrModelFromSdrObject().GetHitTestOutliner().SetTextObj(nullptr); } + + mpOutlinerParaObject = std::move(pTextObject); + mbPortionInfoChecked = false; } OutlinerParaObject* SdrText::GetOutlinerParaObject() const @@ -125,8 +124,7 @@ void SdrText::ForceOutlinerParaObject( OutlinerMode nOutlMode ) Outliner& aDrawOutliner(mrObject.getSdrModelFromSdrObject().GetDrawOutliner()); pOutliner->SetCalcFieldValueHdl( aDrawOutliner.GetCalcFieldValueHdl() ); pOutliner->SetStyleSheet( 0, GetStyleSheet()); - OutlinerParaObject* pOutlinerParaObject = pOutliner->CreateParaObject(); - SetOutlinerParaObject( pOutlinerParaObject ); + SetOutlinerParaObject( pOutliner->CreateParaObject() ); } } } diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx index 9741dd1ab5c3..cb5e6d3e2bbe 100644 --- a/svx/source/svdraw/svdundo.cxx +++ b/svx/source/svdraw/svdundo.cxx @@ -46,6 +46,7 @@ #include // #i124389# #include #include +#include // iterates over all views and unmarks this SdrObject if it is marked @@ -404,7 +405,7 @@ void SdrUndoAttrObj::Undo() if(pTextUndo) { - pObj->SetOutlinerParaObject(new OutlinerParaObject(*pTextUndo)); + pObj->SetOutlinerParaObject(o3tl::make_unique(*pTextUndo)); } } @@ -482,7 +483,7 @@ void SdrUndoAttrObj::Redo() // #i8508# if(pTextRedo) { - pObj->SetOutlinerParaObject(new OutlinerParaObject(*pTextRedo)); + pObj->SetOutlinerParaObject(o3tl::make_unique(*pTextRedo)); } } @@ -1071,9 +1072,8 @@ void SdrUndoObjSetText::Undo() if (pText) { // copy text for Undo, because the original now belongs to SetOutlinerParaObject() - OutlinerParaObject* pText1 = pOldText ? new OutlinerParaObject(*pOldText) : nullptr; - pText->SetOutlinerParaObject(pText1); - pTarget->NbcSetOutlinerParaObjectForText(pText1, pText); + std::unique_ptr pText1( pOldText ? new OutlinerParaObject(*pOldText) : nullptr ); + pTarget->NbcSetOutlinerParaObjectForText(std::move(pText1), pText); } pTarget->SetEmptyPresObj(bEmptyPresObj); @@ -1106,8 +1106,8 @@ void SdrUndoObjSetText::Redo() if (pText) { // copy text for Undo, because the original now belongs to SetOutlinerParaObject() - OutlinerParaObject* pText1 = pNewText ? new OutlinerParaObject(*pNewText) : nullptr; - pTarget->NbcSetOutlinerParaObjectForText( pText1, pText ); + std::unique_ptr pText1( pNewText ? new OutlinerParaObject(*pNewText) : nullptr ); + pTarget->NbcSetOutlinerParaObjectForText( std::move(pText1), pText ); } pTarget->ActionChanged(); @@ -1165,10 +1165,10 @@ void SdrUndoObjSetText::SdrRepeat(SdrView& rView) if( bUndo ) rView.AddUndo(new SdrUndoObjSetText(*pTextObj,0)); - OutlinerParaObject* pText1=pNewText.get(); - if (pText1!=nullptr) - pText1 = new OutlinerParaObject(*pText1); - pTextObj->SetOutlinerParaObject(pText1); + std::unique_ptr pText1; + if (pNewText) + pText1.reset(new OutlinerParaObject(*pNewText)); + pTextObj->SetOutlinerParaObject(std::move(pText1)); } } diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx index 5cce8877e098..b3d473923633 100644 --- a/svx/source/svdraw/textchainflow.cxx +++ b/svx/source/svdraw/textchainflow.cxx @@ -154,9 +154,8 @@ void TextChainFlow::ExecuteUnderflow(SdrOutliner *pOutl) { //GetTextChain()->SetNilChainingEvent(mpTargetLink, true); // making whole text - bool bNewTextTransferred = false; // merges underflowing text with the one in the next box - OutlinerParaObject *pNewText = mpUnderflChText->CreateMergedUnderflowParaObject(pOutl, mpNextLink->GetOutlinerParaObject()); + std::unique_ptr pNewText = mpUnderflChText->CreateMergedUnderflowParaObject(pOutl, mpNextLink->GetOutlinerParaObject()); // Set the other box empty; it will be replaced by the rest of the text if overflow occurs if (!mpTargetLink->GetPreventChainable()) @@ -165,20 +164,18 @@ void TextChainFlow::ExecuteUnderflow(SdrOutliner *pOutl) // We store the size since NbcSetOutlinerParaObject can change it //Size aOldSize = pOutl->GetMaxAutoPaperSize(); + auto pNewTextTemp = pNewText.get(); // because we need to access it after a std::move // This should not be done in editing mode!! //XXX if (!mpTargetLink->IsInEditMode()) { - mpTargetLink->NbcSetOutlinerParaObject(pNewText); - bNewTextTransferred = true; + mpTargetLink->NbcSetOutlinerParaObject(std::move(pNewText)); } // Restore size and set new text //pOutl->SetMaxAutoPaperSize(aOldSize); // XXX (it seems to be working anyway without this) - pOutl->SetText(*pNewText); + pOutl->SetText(*pNewTextTemp); //GetTextChain()->SetNilChainingEvent(mpTargetLink, false); - if (!bNewTextTransferred) - delete pNewText; // Check for new overflow CheckForFlowEvents(pOutl); @@ -201,7 +198,7 @@ void TextChainFlow::ExecuteOverflow(SdrOutliner *pNonOverflOutl, SdrOutliner *pO void TextChainFlow::impLeaveOnlyNonOverflowingText(SdrOutliner *pNonOverflOutl) { - OutlinerParaObject *pNewText = mpOverflChText->RemoveOverflowingText(pNonOverflOutl); + std::unique_ptr pNewText = mpOverflChText->RemoveOverflowingText(pNonOverflOutl); SAL_INFO("svx.chaining", "[TEXTCHAINFLOW - OF] SOURCE box set to " << pNewText->GetTextObject().GetParagraphCount() << " paras"); @@ -209,7 +206,7 @@ void TextChainFlow::impLeaveOnlyNonOverflowingText(SdrOutliner *pNonOverflOutl) // adds it to current outliner anyway (useful in static decomposition) pNonOverflOutl->SetText(*pNewText); - mpTargetLink->NbcSetOutlinerParaObject(pNewText); + mpTargetLink->NbcSetOutlinerParaObject(std::move(pNewText)); // For some reason the paper size is lost after last instruction, so we set it. pNonOverflOutl->SetPaperSize(Size(pNonOverflOutl->GetPaperSize().Width(), pNonOverflOutl->GetTextHeight())); @@ -224,14 +221,14 @@ void TextChainFlow::impMoveChainedTextToNextLink(SdrOutliner *pOverflOutl) return; } - OutlinerParaObject *pNewText = + std::unique_ptr pNewText = mpOverflChText->InsertOverflowingText(pOverflOutl, mpNextLink->GetOutlinerParaObject()); SAL_INFO("svx.chaining", "[TEXTCHAINFLOW - OF] DEST box set to " << pNewText->GetTextObject().GetParagraphCount() << " paras"); if (pNewText) - mpNextLink->NbcSetOutlinerParaObject(pNewText); + mpNextLink->NbcSetOutlinerParaObject(std::move(pNewText)); // Set Deep Merge status SAL_INFO("svx.chaining", "[DEEPMERGE] Setting deepMerge to " @@ -273,8 +270,7 @@ void EditingTextChainFlow::CheckForFlowEvents(SdrOutliner *pFlowOutl) void EditingTextChainFlow::impLeaveOnlyNonOverflowingText(SdrOutliner *pNonOverflOutl) { - OutlinerParaObject *pNewText = mpOverflChText->RemoveOverflowingText(pNonOverflOutl); - delete pNewText; + std::unique_ptr pNewText = mpOverflChText->RemoveOverflowingText(pNonOverflOutl); //impSetTextForEditingOutliner(pNewText); //XXX: Don't call it since we do everything with NonOverflowingText::ToParaObject // XXX: You may need this for Underflow // XXX: I'm not sure whether we need this (after all operations such as Paste don't change this - as far as I understand) diff --git a/svx/source/table/accessiblecell.cxx b/svx/source/table/accessiblecell.cxx index 75eba41d2d43..d2aa8fd866d4 100644 --- a/svx/source/table/accessiblecell.cxx +++ b/svx/source/table/accessiblecell.cxx @@ -71,7 +71,7 @@ void AccessibleCell::Init() const vcl::Window* pWindow = maShapeTreeInfo.GetWindow (); if( (pView != nullptr) && (pWindow != nullptr) && mxCell.is()) { - OutlinerParaObject* pOutlinerParaObject = mxCell->GetEditOutlinerParaObject(); // Get the OutlinerParaObject if text edit is active + OutlinerParaObject* pOutlinerParaObject = mxCell->GetEditOutlinerParaObject().release(); // Get the OutlinerParaObject if text edit is active bool bOwnParaObject = pOutlinerParaObject != nullptr; diff --git a/svx/source/table/cell.cxx b/svx/source/table/cell.cxx index ecd8666a4222..2e2f5fad140f 100644 --- a/svx/source/table/cell.cxx +++ b/svx/source/table/cell.cxx @@ -226,7 +226,7 @@ namespace sdr if( mxCell.is() ) { - OutlinerParaObject* pParaObj = mxCell->GetEditOutlinerParaObject(); + OutlinerParaObject* pParaObj = mxCell->GetEditOutlinerParaObject().release(); const bool bOwnParaObj = pParaObj != nullptr; @@ -279,9 +279,9 @@ namespace sdr mpItemSet->Put(aNewSet); } - OutlinerParaObject* pTemp = pOutliner->CreateParaObject(0, nParaCount); + std::unique_ptr pTemp = pOutliner->CreateParaObject(0, nParaCount); pOutliner->Clear(); - mxCell->SetOutlinerParaObject(pTemp); + mxCell->SetOutlinerParaObject(std::move(pTemp)); } if( bOwnParaObj ) @@ -306,7 +306,7 @@ namespace sdr rObj.SetVerticalWriting(bVertical); // Set a cell vertical property - OutlinerParaObject* pParaObj = mxCell->GetEditOutlinerParaObject(); + OutlinerParaObject* pParaObj = mxCell->GetEditOutlinerParaObject().release(); const bool bOwnParaObj = pParaObj != nullptr; @@ -327,7 +327,7 @@ namespace sdr const SvxTextRotateItem* pRotateItem = static_cast(pNewItem); // Set a cell vertical property - OutlinerParaObject* pParaObj = mxCell->GetEditOutlinerParaObject(); + OutlinerParaObject* pParaObj = mxCell->GetEditOutlinerParaObject().release(); const bool bOwnParaObj = pParaObj != nullptr; @@ -509,7 +509,7 @@ void Cell::replaceContentAndFormating( const CellRef& xSourceCell ) if( xSourceCell.is() && mpProperties ) { mpProperties->SetMergedItemSet( xSourceCell->GetObjectItemSet() ); - SetOutlinerParaObject( new OutlinerParaObject(*xSourceCell->GetOutlinerParaObject()) ); + SetOutlinerParaObject( o3tl::make_unique(*xSourceCell->GetOutlinerParaObject()) ); SdrTableObj& rTableObj = dynamic_cast< SdrTableObj& >( GetObject() ); SdrTableObj& rSourceTableObj = dynamic_cast< SdrTableObj& >( xSourceCell->GetObject() ); @@ -579,11 +579,10 @@ bool Cell::IsTextEditActive() SdrTableObj& rTableObj = dynamic_cast< SdrTableObj& >( GetObject() ); if(rTableObj.getActiveCell().get() == this ) { - OutlinerParaObject* pParaObj = rTableObj.GetEditOutlinerParaObject(); + std::unique_ptr pParaObj = rTableObj.GetEditOutlinerParaObject(); if( pParaObj != nullptr ) { isActive = true; - delete pParaObj; } } return isActive; @@ -611,7 +610,7 @@ bool Cell::hasText() const } -OutlinerParaObject* Cell::GetEditOutlinerParaObject() const +std::unique_ptr Cell::GetEditOutlinerParaObject() const { SdrTableObj& rTableObj = dynamic_cast< SdrTableObj& >( GetObject() ); if( rTableObj.getActiveCell().get() == this ) @@ -774,9 +773,9 @@ SdrTextHorzAdjust Cell::GetTextHorizontalAdjust() const } -void Cell::SetOutlinerParaObject( OutlinerParaObject* pTextObject ) +void Cell::SetOutlinerParaObject( std::unique_ptr pTextObject ) { - SdrText::SetOutlinerParaObject( pTextObject ); + SdrText::SetOutlinerParaObject( std::move(pTextObject) ); maSelection.nStartPara = EE_PARA_MAX_COUNT; if( pTextObject == nullptr ) @@ -1572,10 +1571,10 @@ void SAL_CALL Cell::setAllPropertiesToDefault() ESelection aSelection( 0, 0, EE_PARA_ALL, EE_TEXTPOS_ALL); rOutliner.RemoveAttribs(aSelection, true, 0); - OutlinerParaObject* pTemp = rOutliner.CreateParaObject(0, nParaCount); + std::unique_ptr pTemp = rOutliner.CreateParaObject(0, nParaCount); rOutliner.Clear(); - SetOutlinerParaObject(pTemp); + SetOutlinerParaObject(std::move(pTemp)); } } } diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx index f376c52b521e..6a7dcd3f3427 100644 --- a/svx/source/table/svdotable.cxx +++ b/svx/source/table/svdotable.cxx @@ -1501,7 +1501,7 @@ void SdrTableObj::TakeTextRect( const CellPos& rPos, SdrOutliner& rOutliner, too // set text at outliner, maybe from edit outliner OutlinerParaObject* pPara= xCell->GetOutlinerParaObject(); if (pEdtOutl && !bNoEditText && mpImpl->mxActiveCell == xCell ) - pPara=pEdtOutl->CreateParaObject(); + pPara=pEdtOutl->CreateParaObject().release(); if (pPara) { @@ -1863,7 +1863,7 @@ void SdrTableObj::EndTextEdit(SdrOutliner& rOutl) if(rOutl.IsModified()) { - OutlinerParaObject* pNewText = nullptr; + std::unique_ptr pNewText; Paragraph* p1stPara = rOutl.GetParagraph( 0 ); sal_Int32 nParaCnt = rOutl.GetParagraphCount(); @@ -1875,7 +1875,7 @@ void SdrTableObj::EndTextEdit(SdrOutliner& rOutl) // create new text object pNewText = rOutl.CreateParaObject( 0, nParaCnt ); } - SetOutlinerParaObject(pNewText); + SetOutlinerParaObject(std::move(pNewText)); } pEdtOutl = nullptr; @@ -1898,7 +1898,7 @@ OutlinerParaObject* SdrTableObj::GetOutlinerParaObject() const } -void SdrTableObj::NbcSetOutlinerParaObject( OutlinerParaObject* pTextObject) +void SdrTableObj::NbcSetOutlinerParaObject( std::unique_ptr pTextObject) { CellRef xCell( getActiveCell() ); if( xCell.is() ) @@ -1911,7 +1911,7 @@ void SdrTableObj::NbcSetOutlinerParaObject( OutlinerParaObject* pTextObject) getSdrModelFromSdrObject().GetHitTestOutliner().SetTextObj(nullptr); } - xCell->SetOutlinerParaObject( pTextObject ); + xCell->SetOutlinerParaObject( std::move(pTextObject) ); SetTextSizeDirty(); NbcAdjustTextFrameWidthAndHeight(); } diff --git a/svx/source/table/tablertfexporter.cxx b/svx/source/table/tablertfexporter.cxx index 37d793de6df3..1cfaa372da6a 100644 --- a/svx/source/table/tablertfexporter.cxx +++ b/svx/source/table/tablertfexporter.cxx @@ -174,7 +174,7 @@ void SdrTableRtfExporter::WriteCell( sal_Int32 nCol, sal_Int32 nRow ) OUString aContent; - OutlinerParaObject* pParaObj = xCell->GetEditOutlinerParaObject(); + OutlinerParaObject* pParaObj = xCell->GetEditOutlinerParaObject().release(); bool bOwnParaObj = pParaObj != nullptr; if( pParaObj == nullptr ) diff --git a/svx/source/table/tableundo.cxx b/svx/source/table/tableundo.cxx index 913d8d1f716d..1f444ae0f660 100644 --- a/svx/source/table/tableundo.cxx +++ b/svx/source/table/tableundo.cxx @@ -20,6 +20,7 @@ #include #include +#include #include #include "tableundo.hxx" @@ -107,7 +108,7 @@ void CellUndo::setDataToCell( const Data& rData ) mxCell->mpProperties.reset(); if( rData.mpOutlinerParaObject ) - mxCell->SetOutlinerParaObject( new OutlinerParaObject(*rData.mpOutlinerParaObject) ); + mxCell->SetOutlinerParaObject( o3tl::make_unique(*rData.mpOutlinerParaObject) ); else mxCell->RemoveOutlinerParaObject(); diff --git a/svx/source/unodraw/unoshtxt.cxx b/svx/source/unodraw/unoshtxt.cxx index af313e15731e..466f564602e1 100644 --- a/svx/source/unodraw/unoshtxt.cxx +++ b/svx/source/unodraw/unoshtxt.cxx @@ -547,7 +547,7 @@ SvxTextForwarder* SvxTextEditSourceImpl::GetBackgroundTextForwarder() OutlinerParaObject* pOutlinerParaObject = nullptr; SdrTextObj* pTextObj = dynamic_cast( mpObject ); if( pTextObj && pTextObj->getActiveText() == mpText ) - pOutlinerParaObject = pTextObj->GetEditOutlinerParaObject(); // Get the OutlinerParaObject if text edit is active + pOutlinerParaObject = pTextObj->GetEditOutlinerParaObject().release(); // Get the OutlinerParaObject if text edit is active bool bOwnParaObj(false); if( pOutlinerParaObject ) @@ -563,7 +563,7 @@ SvxTextForwarder* SvxTextEditSourceImpl::GetBackgroundTextForwarder() if( mpText && bOwnParaObj && mpObject->IsEmptyPresObj() && pTextObj->IsReallyEdited() ) { mpObject->SetEmptyPresObj( false ); - static_cast< SdrTextObj* >( mpObject)->NbcSetOutlinerParaObjectForText( pOutlinerParaObject, mpText ); + static_cast< SdrTextObj* >( mpObject)->NbcSetOutlinerParaObjectForText( std::unique_ptr(pOutlinerParaObject), mpText ); // #i103982# Here, due to mpObject->NbcSetOutlinerParaObjectForText, we LOSE ownership of the // OPO, so do NOT delete it when leaving this method (!) -- cgit