summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2018-06-29 15:38:29 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2018-07-02 08:47:58 +0200
commit50c63e5c2f7962e8893e2d04b0e958209432f4c9 (patch)
tree308893225e96328c5ff5fd071a97c2110e61577b /svx
parentd98f1e4e0373782ad71b945dcc92c1c3d6dcf6c8 (diff)
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 <noel.grandin@collabora.co.uk>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/accessibility/AccessibleShape.cxx2
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeEngine.cxx3
-rw-r--r--svx/source/inc/cell.hxx4
-rw-r--r--svx/source/sdr/primitive2d/sdrattributecreator.cxx3
-rw-r--r--svx/source/sdr/properties/textproperties.cxx16
-rw-r--r--svx/source/svdraw/svdedtv2.cxx6
-rw-r--r--svx/source/svdraw/svdedxv.cxx4
-rw-r--r--svx/source/svdraw/svdoashp.cxx6
-rw-r--r--svx/source/svdraw/svdobj.cxx6
-rw-r--r--svx/source/svdraw/svdomeas.cxx4
-rw-r--r--svx/source/svdraw/svdoole2.cxx3
-rw-r--r--svx/source/svdraw/svdotext.cxx28
-rw-r--r--svx/source/svdraw/svdotxat.cxx4
-rw-r--r--svx/source/svdraw/svdotxed.cxx12
-rw-r--r--svx/source/svdraw/svdtext.cxx26
-rw-r--r--svx/source/svdraw/svdundo.cxx22
-rw-r--r--svx/source/svdraw/textchainflow.cxx22
-rw-r--r--svx/source/table/accessiblecell.cxx2
-rw-r--r--svx/source/table/cell.cxx25
-rw-r--r--svx/source/table/svdotable.cxx10
-rw-r--r--svx/source/table/tablertfexporter.cxx2
-rw-r--r--svx/source/table/tableundo.cxx3
-rw-r--r--svx/source/unodraw/unoshtxt.cxx4
23 files changed, 104 insertions, 113 deletions
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 <com/sun/star/document/XActionLockable.hpp>
#include <cppuhelper/implbase.hxx>
#include <cppuhelper/supportsservice.hxx>
+#include <o3tl/make_unique.hxx>
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<OutlinerParaObject>(*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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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 <svx/strings.hrc>
#include <svx/svdoashp.hxx>
#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
+#include <o3tl/make_unique.hxx>
#include <memory>
#include <vector>
+
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<OutlinerParaObject>(*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<OutlinerParaObject>(*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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> /*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<OutlinerParaObject> 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 <svx/svdpage.hxx>
#include <rtl/ref.hxx>
#include <bitmaps.hlst>
+#include <o3tl/make_unique.hxx>
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<OutlinerParaObject>(*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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> SdrTextObj::GetEditOutlinerParaObject() const
{
- OutlinerParaObject* pPara=nullptr;
+ std::unique_ptr<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> pTextObject)
{
- NbcSetOutlinerParaObjectForText( pTextObject, getActiveText() );
+ NbcSetOutlinerParaObjectForText( std::move(pTextObject), getActiveText() );
}
-void SdrTextObj::NbcSetOutlinerParaObjectForText( OutlinerParaObject* pTextObject, SdrText* pText )
+void SdrTextObj::NbcSetOutlinerParaObjectForText( std::unique_ptr<OutlinerParaObject> 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<sal_uInt16>&
if(!pEdtOutl || (pText != getActiveText()) )
{
const sal_Int32 nParaCount = pOutliner->GetParagraphCount();
- OutlinerParaObject* pTemp = pOutliner->CreateParaObject(0, nParaCount);
+ std::unique_ptr<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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 <svx/svdotable.hxx> // #i124389#
#include <vcl/svapp.hxx>
#include <sfx2/viewsh.hxx>
+#include <o3tl/make_unique.hxx>
// 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<OutlinerParaObject>(*pTextUndo));
}
}
@@ -482,7 +483,7 @@ void SdrUndoAttrObj::Redo()
// #i8508#
if(pTextRedo)
{
- pObj->SetOutlinerParaObject(new OutlinerParaObject(*pTextRedo));
+ pObj->SetOutlinerParaObject(o3tl::make_unique<OutlinerParaObject>(*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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<const SvxTextRotateItem*>(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<OutlinerParaObject>(*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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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<OutlinerParaObject> 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 <sdr/properties/textproperties.hxx>
#include <editeng/outlobj.hxx>
+#include <o3tl/make_unique.hxx>
#include <cell.hxx>
#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<OutlinerParaObject>(*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<SdrTextObj*>( 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<OutlinerParaObject>(pOutlinerParaObject), mpText );
// #i103982# Here, due to mpObject->NbcSetOutlinerParaObjectForText, we LOSE ownership of the
// OPO, so do NOT delete it when leaving this method (!)