From 3b52fbc96f63f761389904b9b77477ab417203ed Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 31 Aug 2026 12:08:11 +0200 Subject: [PATCH] merge EditTextObjectImpl into EditTextObject this is a weird kind of pimpl pattern, lets just simplify it. Which means we can remove the Clone() method in favour of a normal copy constructor. Change-Id: Ib5793c66df4729f48def8b3cead0f39f2ba94830 Signed-off-by: Noel Grandin Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/10550 Tested-by: Jenkins CPCI Reviewed-by: Miklos Vajna (cherry picked from commit dd8a795b5aed4c44e11eef86eaf19b1f88edf0f8) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210320 Tested-by: Jenkins Reviewed-by: Xisco Fauli --- compilerplugins/clang/mergeclasses.results | 1 - editeng/source/editeng/editobj.cxx | 96 ++++++------ editeng/source/editeng/editobj2.hxx | 143 +---------------- editeng/source/editeng/fieldupdater.cxx | 8 +- editeng/source/editeng/impedit4.cxx | 13 +- editeng/source/outliner/outlobj.cxx | 2 +- include/editeng/editobj.hxx | 146 ++++++++++++------ sc/source/core/data/attarray.cxx | 4 +- sc/source/core/data/attrib.cxx | 18 +-- sc/source/core/data/cellvalue.cxx | 10 +- sc/source/core/data/cellvalues.cxx | 2 +- sc/source/core/data/column.cxx | 2 +- sc/source/core/data/column3.cxx | 8 +- sc/source/core/data/column4.cxx | 2 +- sc/source/core/data/dociter.cxx | 2 +- sc/source/core/data/table3.cxx | 2 +- sc/source/filter/orcus/interface.cxx | 3 +- .../AccessiblePageHeaderArea.cxx | 2 +- sc/source/ui/app/inputhdl.cxx | 4 +- sc/source/ui/app/uiitems.cxx | 4 +- .../ui/operation/ApplyAttributesOperation.cxx | 4 +- .../ui/operation/SetEditTextOperation.cxx | 2 +- sc/source/ui/undo/undocell.cxx | 2 +- sc/source/ui/unoobj/textuno.cxx | 2 +- sc/source/ui/view/viewfunc.cxx | 4 +- 25 files changed, 201 insertions(+), 285 deletions(-) diff --git a/compilerplugins/clang/mergeclasses.results b/compilerplugins/clang/mergeclasses.results index c08a2c7fa3cf..57a344276b75 100644 --- a/compilerplugins/clang/mergeclasses.results +++ b/compilerplugins/clang/mergeclasses.results @@ -54,7 +54,6 @@ maybe merge DocumentSettingsSerializer with sd::(anonymous namespace)::DocumentS merge DownloadInteractionHandler with UpdateCheck merge E3DObjGeoData with E3DSceneGeoData merge E3dUndoAction with E3dRotateUndoAction -merge EditTextObject with EditTextObjectImpl maybe merge ErrorContext with SfxErrorContext, in modules vcl and svtools maybe merge EscherExClientAnchor_Base with XclExpDffAnchorBase, in modules filter and sc merge EscherPersistTable with EscherEx diff --git a/editeng/source/editeng/editobj.cxx b/editeng/source/editeng/editobj.cxx index 371cb90d325b..9a5edf4730cb 100644 --- a/editeng/source/editeng/editobj.cxx +++ b/editeng/source/editeng/editobj.cxx @@ -206,19 +206,12 @@ bool ContentInfo::Equals(const ContentInfo& rCompare, bool bComparePool) const && maCharAttribs == rCompare.maCharAttribs; } -EditTextObject::~EditTextObject() = default; - -std::unique_ptr EditTextObjectImpl::Clone() const -{ - return std::make_unique(*this); -} - bool EditTextObject::Equals( const EditTextObject& rCompare ) const { - return toImpl(*this).Equals(toImpl(rCompare), false /*bComparePool*/); + return Equals(rCompare, false /*bComparePool*/); } -void EditTextObjectImpl::dumpAsXml(xmlTextWriterPtr pWriter) const +void EditTextObject::dumpAsXml(xmlTextWriterPtr pWriter) const { bool bOwns = false; if (!pWriter) @@ -246,7 +239,7 @@ void EditTextObjectImpl::dumpAsXml(xmlTextWriterPtr pWriter) const } #if DEBUG_EDIT_ENGINE -void EditTextObjectImpl::Dump() const +void EditTextObject::Dump() const { for (auto const& content : maContents) content.Dump(); @@ -269,7 +262,7 @@ static rtl::Reference getEditEngineItemPool(SfxItemPool* pPool, Map return pRetval; } -EditTextObjectImpl::EditTextObjectImpl(SfxItemPool* pP, MapUnit eDefaultMetric, bool bVertical, +EditTextObject::EditTextObject(SfxItemPool* pP, MapUnit eDefaultMetric, bool bVertical, TextRotation eRotation, SvtScriptType eScriptType) : mpPool(getEditEngineItemPool(pP, eDefaultMetric)) , meUserType(OutlinerMode::DontKnow) @@ -280,7 +273,7 @@ EditTextObjectImpl::EditTextObjectImpl(SfxItemPool* pP, MapUnit eDefaultMetric, { } -EditTextObjectImpl::EditTextObjectImpl( const EditTextObjectImpl& r ) +EditTextObject::EditTextObject( const EditTextObject& r ) : mpPool(r.mpPool) , meUserType(r.meUserType) , meScriptType(r.meScriptType) @@ -295,7 +288,7 @@ EditTextObjectImpl::EditTextObjectImpl( const EditTextObjectImpl& r ) maContents.push_back(std::unique_ptr(new ContentInfo(*content, *mpPool))); } -EditTextObjectImpl::~EditTextObjectImpl() +EditTextObject::~EditTextObject() { ClearPortionInfo(); @@ -305,12 +298,12 @@ EditTextObjectImpl::~EditTextObjectImpl() } -void EditTextObjectImpl::SetUserType( OutlinerMode n ) +void EditTextObject::SetUserType( OutlinerMode n ) { meUserType = n; } -void EditTextObjectImpl::NormalizeString( svl::SharedStringPool& rPool ) +void EditTextObject::NormalizeString( svl::SharedStringPool& rPool ) { for (auto const& content : maContents) { @@ -319,7 +312,7 @@ void EditTextObjectImpl::NormalizeString( svl::SharedStringPool& rPool ) } } -std::vector EditTextObjectImpl::GetSharedStrings() const +std::vector EditTextObject::GetSharedStrings() const { std::vector aSSs; aSSs.reserve(maContents.size()); @@ -331,19 +324,19 @@ std::vector EditTextObjectImpl::GetSharedStrings() const return aSSs; } -bool EditTextObjectImpl::IsEffectivelyVertical() const +bool EditTextObject::IsEffectivelyVertical() const { return (mbVertical && meRotation == TextRotation::NONE) || (!mbVertical && meRotation != TextRotation::NONE); } -bool EditTextObjectImpl::IsTopToBottom() const +bool EditTextObject::IsTopToBottom() const { return (mbVertical && meRotation == TextRotation::NONE) || (!mbVertical && meRotation == TextRotation::TOPTOBOTTOM); } -void EditTextObjectImpl::SetVertical( bool bVert) +void EditTextObject::SetVertical( bool bVert) { if (bVert != mbVertical) { @@ -352,12 +345,12 @@ void EditTextObjectImpl::SetVertical( bool bVert) } } -bool EditTextObjectImpl::GetVertical() const +bool EditTextObject::GetVertical() const { return mbVertical; } -void EditTextObjectImpl::SetRotation(TextRotation nRotation) +void EditTextObject::SetRotation(TextRotation nRotation) { if (meRotation != nRotation) { @@ -366,34 +359,34 @@ void EditTextObjectImpl::SetRotation(TextRotation nRotation) } } -TextRotation EditTextObjectImpl::GetRotation() const +TextRotation EditTextObject::GetRotation() const { return meRotation; } -XEditAttribute EditTextObjectImpl::CreateAttrib( const SfxPoolItem& rItem, sal_Int32 nStart, sal_Int32 nEnd ) +XEditAttribute EditTextObject::CreateAttrib( const SfxPoolItem& rItem, sal_Int32 nStart, sal_Int32 nEnd ) { return XEditAttribute(*mpPool, rItem, nStart, nEnd); } -ContentInfo* EditTextObjectImpl::CreateAndInsertContent() +ContentInfo* EditTextObject::CreateAndInsertContent() { maContents.push_back(std::unique_ptr(new ContentInfo(*mpPool))); return maContents.back().get(); } -sal_Int32 EditTextObjectImpl::GetParagraphCount() const +sal_Int32 EditTextObject::GetParagraphCount() const { size_t nSize = maContents.size(); if (nSize > EE_PARA_MAX) { - SAL_WARN( "editeng", "EditTextObjectImpl::GetParagraphCount - overflow " << nSize); + SAL_WARN( "editeng", "EditTextObject::GetParagraphCount - overflow " << nSize); return EE_PARA_MAX; } return static_cast(nSize); } -OUString EditTextObjectImpl::GetText(sal_Int32 nPara) const +OUString EditTextObject::GetText(sal_Int32 nPara) const { if (nPara < 0 || o3tl::make_unsigned(nPara) >= maContents.size()) return OUString(); @@ -401,7 +394,7 @@ OUString EditTextObjectImpl::GetText(sal_Int32 nPara) const return maContents[nPara]->GetText(); } -OUString EditTextObjectImpl::GetText(LineEnd eEnd) const +OUString EditTextObject::GetText(LineEnd eEnd) const { const size_t nParas = maContents.size(); if (nParas == 0) @@ -421,7 +414,7 @@ OUString EditTextObjectImpl::GetText(LineEnd eEnd) const return aBuffer.makeStringAndClear(); } -sal_Int32 EditTextObjectImpl::GetTextLen(sal_Int32 nPara ) const +sal_Int32 EditTextObject::GetTextLen(sal_Int32 nPara ) const { if (nPara < 0 || o3tl::make_unsigned(nPara) >= maContents.size()) return 0; @@ -429,12 +422,12 @@ sal_Int32 EditTextObjectImpl::GetTextLen(sal_Int32 nPara ) const return maContents[nPara]->GetTextLen(); } -void EditTextObjectImpl::ClearPortionInfo() +void EditTextObject::ClearPortionInfo() { mpPortionInfo.reset(); } -bool EditTextObjectImpl::HasOnlineSpellErrors() const +bool EditTextObject::HasOnlineSpellErrors() const { for (auto const& content : maContents) { @@ -444,7 +437,7 @@ bool EditTextObjectImpl::HasOnlineSpellErrors() const return false; } -void EditTextObjectImpl::GetCharAttribs( sal_Int32 nPara, std::vector& rLst ) const +void EditTextObject::GetCharAttribs( sal_Int32 nPara, std::vector& rLst ) const { if (nPara < 0 || o3tl::make_unsigned(nPara) >= maContents.size()) return; @@ -458,12 +451,12 @@ void EditTextObjectImpl::GetCharAttribs( sal_Int32 nPara, std::vector= maContents.size()) return nullptr; @@ -515,7 +508,7 @@ const SvxFieldData* EditTextObjectImpl::GetFieldData(sal_Int32 nPara, size_t nPo return nullptr; // field not found. } -bool EditTextObjectImpl::HasField( sal_Int32 nType ) const +bool EditTextObject::HasField( sal_Int32 nType ) const { size_t nParagraphs = maContents.size(); for (size_t nPara = 0; nPara < nParagraphs; ++nPara) @@ -540,13 +533,13 @@ bool EditTextObjectImpl::HasField( sal_Int32 nType ) const return false; } -const SfxItemSet& EditTextObjectImpl::GetParaAttribs(sal_Int32 nPara) const +const SfxItemSet& EditTextObject::GetParaAttribs(sal_Int32 nPara) const { const ContentInfo& rC = *maContents[nPara]; return rC.GetParaAttribs(); } -bool EditTextObjectImpl::RemoveCharAttribs( sal_uInt16 _nWhich ) +bool EditTextObject::RemoveCharAttribs( sal_uInt16 _nWhich ) { bool bChanged = false; @@ -598,7 +591,7 @@ public: } -void EditTextObjectImpl::GetAllSections( std::vector& rAttrs ) const +void EditTextObject::GetAllSections( std::vector& rAttrs ) const { std::vector aAttrs; aAttrs.reserve(maContents.size()); @@ -701,7 +694,7 @@ void EditTextObjectImpl::GetAllSections( std::vector& rAttrs ) rAttrs.swap(aAttrs); } -void EditTextObjectImpl::GetStyleSheet(sal_Int32 nPara, OUString& rName, SfxStyleFamily& rFamily) const +void EditTextObject::GetStyleSheet(sal_Int32 nPara, OUString& rName, SfxStyleFamily& rFamily) const { if (nPara < 0 || o3tl::make_unsigned(nPara) >= maContents.size()) return; @@ -711,7 +704,7 @@ void EditTextObjectImpl::GetStyleSheet(sal_Int32 nPara, OUString& rName, SfxStyl rFamily = rC.GetFamily(); } -void EditTextObjectImpl::SetStyleSheet(sal_Int32 nPara, const OUString& rName, const SfxStyleFamily& rFamily) +void EditTextObject::SetStyleSheet(sal_Int32 nPara, const OUString& rName, const SfxStyleFamily& rFamily) { if (nPara < 0 || o3tl::make_unsigned(nPara) >= maContents.size()) return; @@ -721,7 +714,7 @@ void EditTextObjectImpl::SetStyleSheet(sal_Int32 nPara, const OUString& rName, c rC.SetFamily(rFamily); } -bool EditTextObjectImpl::ImpChangeStyleSheets( +bool EditTextObject::ImpChangeStyleSheets( std::u16string_view rOldName, SfxStyleFamily eOldFamily, const OUString& rNewName, SfxStyleFamily eNewFamily ) { @@ -744,7 +737,7 @@ bool EditTextObjectImpl::ImpChangeStyleSheets( return bChanges; } -bool EditTextObjectImpl::ChangeStyleSheets( +bool EditTextObject::ChangeStyleSheets( std::u16string_view rOldName, SfxStyleFamily eOldFamily, const OUString& rNewName, SfxStyleFamily eNewFamily) { @@ -755,18 +748,18 @@ bool EditTextObjectImpl::ChangeStyleSheets( return bChanges; } -void EditTextObjectImpl::ChangeStyleSheetName( SfxStyleFamily eFamily, +void EditTextObject::ChangeStyleSheetName( SfxStyleFamily eFamily, std::u16string_view rOldName, const OUString& rNewName ) { ImpChangeStyleSheets( rOldName, eFamily, rNewName, eFamily ); } -bool EditTextObjectImpl::operator==( const EditTextObject& rCompare ) const +bool EditTextObject::operator==( const EditTextObject& rCompare ) const { - return Equals(toImpl(rCompare), true); + return Equals(rCompare, true); } -bool EditTextObjectImpl::Equals( const EditTextObjectImpl& rCompare, bool bComparePool ) const +bool EditTextObject::Equals( const EditTextObject& rCompare, bool bComparePool ) const { if( this == &rCompare ) return true; @@ -785,12 +778,17 @@ bool EditTextObjectImpl::Equals( const EditTextObjectImpl& rCompare, bool bCompa } // #i102062# -bool EditTextObjectImpl::isWrongListEqual(const EditTextObject& rComp) const +bool EditTextObject::isWrongListEqual(const EditTextObject& rCompare) const { - const EditTextObjectImpl& rCompare = toImpl(rComp); return std::equal( maContents.begin(), maContents.end(), rCompare.maContents.begin(), rCompare.maContents.end(), [](const auto& c1, const auto& c2) { return c1->isWrongListEqual(*c2); }); } +editeng::FieldUpdater EditTextObject::GetFieldUpdater() +{ return editeng::FieldUpdater(*this); } + +void EditTextObject::SetPortionInfo( std::unique_ptr pP ) +{ mpPortionInfo = std::move(pP); } + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/editeng/source/editeng/editobj2.hxx b/editeng/source/editeng/editobj2.hxx index c34c2efa2743..4f51f7e1fb44 100644 --- a/editeng/source/editeng/editobj2.hxx +++ b/editeng/source/editeng/editobj2.hxx @@ -41,33 +41,6 @@ class SharedStringPool; } -class XEditAttribute -{ -private: - SfxPoolItemHolder maItemHolder; - sal_Int32 nStart; - sal_Int32 nEnd; - -public: - XEditAttribute(SfxItemPool&, const SfxPoolItem&, sal_Int32 nStart, sal_Int32 nEnd ); - - const SfxPoolItem* GetItem() const { return maItemHolder.getItem(); } - SfxPoolItemHolder& GetItemHolder() { return maItemHolder; } - - sal_Int32& GetStart() { return nStart; } - sal_Int32& GetEnd() { return nEnd; } - - sal_Int32 GetStart() const { return nStart; } - sal_Int32 GetEnd() const { return nEnd; } - - sal_Int32 GetLen() const { return nEnd-nStart; } - - bool IsFeature() const; - void SetItem(SfxItemPool&, const SfxPoolItem&); - - inline bool operator==( const XEditAttribute& rCompare ) const; -}; - inline bool XEditAttribute::operator==( const XEditAttribute& rCompare ) const { return (nStart == rCompare.nStart) && @@ -114,7 +87,7 @@ public: class ContentInfo { - friend class EditTextObjectImpl; + friend class EditTextObject; private: svl::SharedString maText; @@ -166,118 +139,4 @@ public: #endif }; -class EditTextObjectImpl final : public EditTextObject -{ -public: - typedef std::vector > ContentInfosType; - -private: - ContentInfosType maContents; - rtl::Reference mpPool; - std::unique_ptr mpPortionInfo; - - OutlinerMode meUserType; - SvtScriptType meScriptType; - TextRotation meRotation; - MapUnit meMetric; - - bool mbVertical; - - bool ImpChangeStyleSheets( std::u16string_view rOldName, SfxStyleFamily eOldFamily, - const OUString& rNewName, SfxStyleFamily eNewFamily ); - -public: - EditTextObjectImpl(SfxItemPool* pPool, MapUnit eDefaultMetric, bool bVertical, - TextRotation eRotation, SvtScriptType eScriptType); - EditTextObjectImpl( const EditTextObjectImpl& r ); - virtual ~EditTextObjectImpl() override; - - EditTextObjectImpl& operator=(const EditTextObjectImpl&) = delete; - - virtual OutlinerMode GetUserType() const override { return meUserType;} - virtual void SetUserType( OutlinerMode n ) override; - - virtual void NormalizeString( svl::SharedStringPool& rPool ) override; - virtual std::vector GetSharedStrings() const override; - - virtual bool IsEffectivelyVertical() const override; - virtual bool GetVertical() const override; - virtual bool IsTopToBottom() const override; - virtual void SetVertical( bool bVert) override; - virtual void SetRotation(TextRotation nRotation) override; - virtual TextRotation GetRotation() const override; - - virtual SvtScriptType GetScriptType() const override { return meScriptType;} - - virtual std::unique_ptr Clone() const override; - - ContentInfo* CreateAndInsertContent(); - XEditAttribute CreateAttrib( const SfxPoolItem& rItem, sal_Int32 nStart, sal_Int32 nEnd ); - - ContentInfosType& GetContents() { return maContents;} - const ContentInfosType& GetContents() const { return maContents;} - SfxItemPool* GetPool() { return mpPool.get(); } - virtual const SfxItemPool* GetPool() const override { return mpPool.get(); } - XParaPortionList* GetPortionInfo() const { return mpPortionInfo.get(); } - void SetPortionInfo( std::unique_ptr pP ) - { mpPortionInfo = std::move(pP); } - - virtual sal_Int32 GetParagraphCount() const override; - virtual OUString GetText(sal_Int32 nParagraph) const override; - virtual OUString GetText(LineEnd eEnd = LINEEND_LF) const override; - virtual sal_Int32 GetTextLen(sal_Int32 nParagraph) const override; - - virtual void ClearPortionInfo() override; - - virtual bool HasOnlineSpellErrors() const override; - - virtual void GetCharAttribs( sal_Int32 nPara, std::vector& rLst ) const override; - - virtual bool RemoveCharAttribs( sal_uInt16 nWhich ) override; - - virtual void GetAllSections( std::vector& rAttrs ) const override; - - virtual bool IsFieldObject() const override; - virtual const SvxFieldItem* GetField() const override; - virtual const SvxFieldData* GetFieldData(sal_Int32 nPara, size_t nPos, sal_Int32 nType) const override; - - virtual bool HasField( sal_Int32 nType = css::text::textfield::Type::UNSPECIFIED ) const override; - - virtual const SfxItemSet& GetParaAttribs(sal_Int32 nPara) const override; - - virtual void GetStyleSheet(sal_Int32 nPara, OUString& rName, SfxStyleFamily& eFamily) const override; - virtual void SetStyleSheet(sal_Int32 nPara, const OUString& rName, const SfxStyleFamily& eFamily) override; - virtual bool ChangeStyleSheets( - std::u16string_view rOldName, SfxStyleFamily eOldFamily, const OUString& rNewName, SfxStyleFamily eNewFamily) override; - virtual void ChangeStyleSheetName(SfxStyleFamily eFamily, std::u16string_view rOldName, const OUString& rNewName) override; - - virtual editeng::FieldUpdater GetFieldUpdater() override { return editeng::FieldUpdater(*this); } - - bool HasMetric() const { return meMetric != MapUnit::LASTENUMDUMMY; } - MapUnit GetMetric() const { return meMetric; } - - virtual bool operator==( const EditTextObject& rCompare ) const override; - bool Equals( const EditTextObjectImpl& rCompare, bool bComparePool ) const; - - // #i102062# - virtual bool isWrongListEqual(const EditTextObject& rCompare) const override; - -#if DEBUG_EDIT_ENGINE - virtual void Dump() const override; -#endif - virtual void dumpAsXml(xmlTextWriterPtr pWriter) const override; -}; - -inline EditTextObjectImpl& toImpl(EditTextObject& rObj) -{ - assert(dynamic_cast(&rObj)); - return static_cast(rObj); -} - -inline const EditTextObjectImpl& toImpl(const EditTextObject& rObj) -{ - assert(dynamic_cast(&rObj)); - return static_cast(rObj); -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/editeng/source/editeng/fieldupdater.cxx b/editeng/source/editeng/fieldupdater.cxx index 41a431a81651..c7bdff24f4db 100644 --- a/editeng/source/editeng/fieldupdater.cxx +++ b/editeng/source/editeng/fieldupdater.cxx @@ -37,14 +37,14 @@ public: class FieldUpdaterImpl { - EditTextObjectImpl& mrObj; + EditTextObject& mrObj; public: - explicit FieldUpdaterImpl(EditTextObject& rObj) : mrObj(toImpl(rObj)) {} + explicit FieldUpdaterImpl(EditTextObject& rObj) : mrObj(rObj) {} void updateTableFields(int nTab) { SfxItemPool* pPool = mrObj.GetPool(); - EditTextObjectImpl::ContentInfosType& rContents = mrObj.GetContents(); + EditTextObject::ContentInfosType& rContents = mrObj.GetContents(); for (std::unique_ptr & i : rContents) { ContentInfo& rContent = *i; @@ -71,7 +71,7 @@ public: void UpdatePageRelativeURLs(const std::function& rItemCallback) { - EditTextObjectImpl::ContentInfosType& rContents = mrObj.GetContents(); + EditTextObject::ContentInfosType& rContents = mrObj.GetContents(); for (std::unique_ptr & i : rContents) { ContentInfo& rContent = *i; diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx index 68d422200cdd..46b449b556fb 100644 --- a/editeng/source/editeng/impedit4.cxx +++ b/editeng/source/editeng/impedit4.cxx @@ -1205,7 +1205,7 @@ std::unique_ptr ImpEditEngine::CreateTextObject( EditSelection a // (Only the name and family, template itself must be in App!) const MapUnit eMapUnit = maEditDoc.GetItemPool().GetMetric(DEF_METRIC); - auto pTxtObj(std::make_unique(pPool, eMapUnit, GetVertical(), GetRotation(), + auto pTxtObj(std::make_unique(pPool, eMapUnit, GetVertical(), GetRotation(), GetItemScriptType(aSel))); // iterate over the paragraphs ... @@ -1370,8 +1370,7 @@ EditSelection ImpEditEngine::InsertTextObject( const EditTextObject& rTextObject DBG_ASSERT( !aSel.DbgIsBuggy( maEditDoc ), "InsertBibTextObject: Selection broken!(1)" ); bool bUsePortionInfo = false; - const EditTextObjectImpl& rTextObjectImpl = toImpl(rTextObject); - XParaPortionList* pPortionInfo = rTextObjectImpl.GetPortionInfo(); + XParaPortionList* pPortionInfo = rTextObject.GetPortionInfo(); if (pPortionInfo && ( static_cast(pPortionInfo->GetPaperWidth()) == GetColumnWidth(maPaperSize)) && pPortionInfo->GetRefMapMode() == GetRefDevice()->GetMapMode() @@ -1387,9 +1386,9 @@ EditSelection ImpEditEngine::InsertTextObject( const EditTextObject& rTextObject bool bConvertMetricOfItems = false; MapUnit eSourceUnit = MapUnit(), eDestUnit = MapUnit(); - if (rTextObjectImpl.HasMetric()) + if (rTextObject.HasMetric()) { - eSourceUnit = rTextObjectImpl.GetMetric(); + eSourceUnit = rTextObject.GetMetric(); eDestUnit = maEditDoc.GetItemPool().GetMetric( DEF_METRIC ); if ( eSourceUnit != eDestUnit ) bConvertMetricOfItems = true; @@ -1398,13 +1397,13 @@ EditSelection ImpEditEngine::InsertTextObject( const EditTextObject& rTextObject // Before, paragraph count was of type sal_uInt16 so if nContents exceeded // 0xFFFF this wouldn't have worked anyway, given that nPara is used to // number paragraphs and is fearlessly incremented. - sal_Int32 nContents = static_cast(rTextObjectImpl.GetContents().size()); + sal_Int32 nContents = static_cast(rTextObject.GetContents().size()); SAL_WARN_IF( nContents < 0, "editeng", "ImpEditEngine::InsertTextObject - contents overflow " << nContents); sal_Int32 nPara = maEditDoc.GetPos( aPaM.GetNode() ); for (sal_Int32 n = 0; n < nContents; ++n, ++nPara) { - const ContentInfo* pC = rTextObjectImpl.GetContents()[n].get(); + const ContentInfo* pC = rTextObject.GetContents()[n].get(); bool bNewContent = aPaM.GetNode()->Len() == 0; const sal_Int32 nStartPos = aPaM.GetIndex(); diff --git a/editeng/source/outliner/outlobj.cxx b/editeng/source/outliner/outlobj.cxx index d2da7beae858..9ac51fd97ee5 100644 --- a/editeng/source/outliner/outlobj.cxx +++ b/editeng/source/outliner/outlobj.cxx @@ -37,7 +37,7 @@ OutlinerParaObjData::OutlinerParaObjData( std::unique_ptr pEditT } OutlinerParaObjData::OutlinerParaObjData( const OutlinerParaObjData& r ): - mpEditTextObject(r.mpEditTextObject->Clone()), + mpEditTextObject(new EditTextObject(*r.mpEditTextObject)), maParagraphDataVector(r.maParagraphDataVector), mbIsEditDoc(r.mbIsEditDoc) { diff --git a/include/editeng/editobj.hxx b/include/editeng/editobj.hxx index 840f2e291da7..b7dfe3492754 100644 --- a/include/editeng/editobj.hxx +++ b/include/editeng/editobj.hxx @@ -23,8 +23,11 @@ #include #include #include +#include +#include #include #include +#include #include @@ -38,69 +41,103 @@ class SvxFieldData; enum class OutlinerMode; struct EECharAttrib; typedef struct _xmlTextWriter* xmlTextWriterPtr; +class ContentInfo; +class XParaPortionList; namespace editeng { - class FieldUpdater; struct Section; - } namespace svl { - class SharedString; class SharedStringPool; - } enum class TextRotation { NONE, TOPTOBOTTOM, BOTTOMTOTOP }; -class EDITENG_DLLPUBLIC EditTextObject +class XEditAttribute +{ +private: + SfxPoolItemHolder maItemHolder; + sal_Int32 nStart; + sal_Int32 nEnd; + +public: + XEditAttribute(SfxItemPool&, const SfxPoolItem&, sal_Int32 nStart, sal_Int32 nEnd ); + + const SfxPoolItem* GetItem() const { return maItemHolder.getItem(); } + SfxPoolItemHolder& GetItemHolder() { return maItemHolder; } + + sal_Int32& GetStart() { return nStart; } + sal_Int32& GetEnd() { return nEnd; } + + sal_Int32 GetStart() const { return nStart; } + sal_Int32 GetEnd() const { return nEnd; } + + sal_Int32 GetLen() const { return nEnd-nStart; } + + bool IsFeature() const; + void SetItem(SfxItemPool&, const SfxPoolItem&); + + inline bool operator==( const XEditAttribute& rCompare ) const; +}; + + + +class EDITENG_DLLPUBLIC EditTextObject final { public: - virtual ~EditTextObject(); + typedef std::vector > ContentInfosType; + + EditTextObject(SfxItemPool* pPool, MapUnit eDefaultMetric, bool bVertical, + TextRotation eRotation, SvtScriptType eScriptType); + EditTextObject( const EditTextObject& r ); + ~EditTextObject(); /** * Set paragraph strings to the shared string pool. * * @param rPool shared string pool. */ - virtual void NormalizeString( svl::SharedStringPool& rPool ) = 0; + void NormalizeString( svl::SharedStringPool& rPool ); - virtual std::vector GetSharedStrings() const = 0; + std::vector GetSharedStrings() const; - virtual const SfxItemPool* GetPool() const = 0; - virtual OutlinerMode GetUserType() const = 0; // For OutlinerMode, it can however not save in compatible format - virtual void SetUserType( OutlinerMode n ) = 0; + const SfxItemPool* GetPool() const { return mpPool.get(); } + SfxItemPool* GetPool() { return mpPool.get(); } - virtual bool IsEffectivelyVertical() const = 0; - virtual bool GetVertical() const = 0; - virtual bool IsTopToBottom() const = 0; - virtual void SetVertical( bool bVertical ) = 0; - virtual void SetRotation( TextRotation nRotation ) = 0; - virtual TextRotation GetRotation() const = 0; + OutlinerMode GetUserType() const { return meUserType;} // For OutlinerMode, it can however not save in compatible format + void SetUserType( OutlinerMode n ); - virtual SvtScriptType GetScriptType() const = 0; + bool IsEffectivelyVertical() const; + bool GetVertical() const; + bool IsTopToBottom() const; + void SetVertical( bool bVertical ); + void SetRotation( TextRotation nRotation ); + TextRotation GetRotation() const; - virtual std::unique_ptr Clone() const = 0; + SvtScriptType GetScriptType() const { return meScriptType;} - virtual sal_Int32 GetParagraphCount() const = 0; + sal_Int32 GetParagraphCount() const; - virtual OUString GetText(sal_Int32 nPara) const = 0; + OUString GetText(sal_Int32 nPara) const; - virtual OUString GetText(LineEnd eEnd = LINEEND_LF) const = 0; + OUString GetText(LineEnd eEnd = LINEEND_LF) const; - virtual sal_Int32 GetTextLen(sal_Int32 nPara) const = 0; + sal_Int32 GetTextLen(sal_Int32 nPara) const; bool HasText(sal_Int32 nPara) const { return GetTextLen(nPara) > 0; } - virtual void ClearPortionInfo() = 0; + XParaPortionList* GetPortionInfo() const { return mpPortionInfo.get(); } + void SetPortionInfo( std::unique_ptr pP ); + void ClearPortionInfo(); - virtual bool HasOnlineSpellErrors() const = 0; + bool HasOnlineSpellErrors() const; - virtual void GetCharAttribs( sal_Int32 nPara, std::vector& rLst ) const = 0; + void GetCharAttribs( sal_Int32 nPara, std::vector& rLst ) const; - virtual bool RemoveCharAttribs( sal_uInt16 nWhich ) = 0; + bool RemoveCharAttribs( sal_uInt16 nWhich ); /** * Get all text sections in this content. Sections are non-overlapping @@ -108,36 +145,59 @@ public: * boundaries. Each section object contains all applied formats and/or a * field item. */ - virtual void GetAllSections( std::vector& rAttrs ) const = 0; + void GetAllSections( std::vector& rAttrs ) const; - virtual bool IsFieldObject() const = 0; - virtual const SvxFieldItem* GetField() const = 0; - virtual const SvxFieldData* GetFieldData(sal_Int32 nPara, size_t nPos, sal_Int32 nType) const = 0; - virtual bool HasField( sal_Int32 nType = css::text::textfield::Type::UNSPECIFIED ) const = 0; + bool IsFieldObject() const; + const SvxFieldItem* GetField() const; + const SvxFieldData* GetFieldData(sal_Int32 nPara, size_t nPos, sal_Int32 nType) const; + bool HasField( sal_Int32 nType = css::text::textfield::Type::UNSPECIFIED ) const; - virtual const SfxItemSet& GetParaAttribs(sal_Int32 nPara) const = 0; + const SfxItemSet& GetParaAttribs(sal_Int32 nPara) const; - virtual void GetStyleSheet(sal_Int32 nPara, OUString& rName, SfxStyleFamily& eFamily) const = 0; - virtual void SetStyleSheet(sal_Int32 nPara, const OUString& rName, const SfxStyleFamily& eFamily) = 0; - virtual bool ChangeStyleSheets( - std::u16string_view rOldName, SfxStyleFamily eOldFamily, const OUString& rNewName, SfxStyleFamily eNewFamily) = 0; - virtual void ChangeStyleSheetName(SfxStyleFamily eFamily, std::u16string_view rOldName, const OUString& rNewName) = 0; + void GetStyleSheet(sal_Int32 nPara, OUString& rName, SfxStyleFamily& eFamily) const; + void SetStyleSheet(sal_Int32 nPara, const OUString& rName, const SfxStyleFamily& eFamily); + bool ChangeStyleSheets( + std::u16string_view rOldName, SfxStyleFamily eOldFamily, const OUString& rNewName, SfxStyleFamily eNewFamily); + void ChangeStyleSheetName(SfxStyleFamily eFamily, std::u16string_view rOldName, const OUString& rNewName); - virtual editeng::FieldUpdater GetFieldUpdater() = 0; + editeng::FieldUpdater GetFieldUpdater(); - virtual bool operator==( const EditTextObject& rCompare ) const = 0; + bool operator==( const EditTextObject& rCompare ) const; /** Compare, ignoring SfxItemPool pointer. */ bool Equals( const EditTextObject& rCompare ) const; + bool Equals( const EditTextObject& rCompare, bool bComparePool ) const; + // #i102062# - virtual bool isWrongListEqual(const EditTextObject& rCompare) const = 0; + bool isWrongListEqual(const EditTextObject& rCompare) const; + + ContentInfo* CreateAndInsertContent(); + XEditAttribute CreateAttrib( const SfxPoolItem& rItem, sal_Int32 nStart, sal_Int32 nEnd ); + ContentInfosType& GetContents() { return maContents;} + const ContentInfosType& GetContents() const { return maContents;} + + bool HasMetric() const { return meMetric != MapUnit::LASTENUMDUMMY; } + MapUnit GetMetric() const { return meMetric; } #if DEBUG_EDIT_ENGINE - virtual void Dump() const = 0; + void Dump() const; #endif - virtual void dumpAsXml(xmlTextWriterPtr pWriter) const = 0; + void dumpAsXml(xmlTextWriterPtr pWriter) const; + +private: + bool ImpChangeStyleSheets( std::u16string_view rOldName, SfxStyleFamily eOldFamily, + const OUString& rNewName, SfxStyleFamily eNewFamily ); + + ContentInfosType maContents; + rtl::Reference mpPool; + std::unique_ptr mpPortionInfo; + OutlinerMode meUserType; + SvtScriptType meScriptType; + TextRotation meRotation; + MapUnit meMetric; + bool mbVertical; }; #endif // INCLUDED_EDITENG_EDITOBJ_HXX diff --git a/sc/source/core/data/attarray.cxx b/sc/source/core/data/attarray.cxx index 0fbccbda8f21..48f216269886 100644 --- a/sc/source/core/data/attarray.cxx +++ b/sc/source/core/data/attarray.cxx @@ -413,7 +413,7 @@ void ScAttrArray::RemoveCellCharAttribs( SCROW nStartRow, SCROW nEndRow, std::unique_ptr pOldData; if (pDataArray) - pOldData = aCell.getEditText()->Clone(); + pOldData = std::make_unique(*aCell.getEditText()); // Direct modification of cell content - something to watch out for if // we decide to share edit text instances in the future. @@ -421,7 +421,7 @@ void ScAttrArray::RemoveCellCharAttribs( SCROW nStartRow, SCROW nEndRow, if (pDataArray) { - std::unique_ptr pNewData = aCell.getEditText()->Clone(); + auto pNewData = std::make_unique(*aCell.getEditText()); pDataArray->AddItem(nTab, nCol, nRow, std::move(pOldData), std::move(pNewData)); } } diff --git a/sc/source/core/data/attrib.cxx b/sc/source/core/data/attrib.cxx index e70ed96c19d4..f341a86458d9 100644 --- a/sc/source/core/data/attrib.cxx +++ b/sc/source/core/data/attrib.cxx @@ -400,11 +400,11 @@ ScPageHFItem::ScPageHFItem( const ScPageHFItem& rItem ) : SfxPoolItem ( rItem ) { if ( rItem.pLeftArea ) - pLeftArea = rItem.pLeftArea->Clone(); + pLeftArea = std::make_unique(*rItem.pLeftArea); if ( rItem.pCenterArea ) - pCenterArea = rItem.pCenterArea->Clone(); + pCenterArea = std::make_unique(*rItem.pCenterArea); if ( rItem.pRightArea ) - pRightArea = rItem.pRightArea->Clone(); + pRightArea = std::make_unique(*rItem.pRightArea); } ScPageHFItem::~ScPageHFItem() @@ -436,17 +436,17 @@ bool ScPageHFItem::PutValue( const uno::Any& rVal, sal_uInt8 /* nMemberId */ ) const EditTextObject* pImpLeft = pImp->GetLeftEditObject(); pLeftArea.reset(); if (pImpLeft) - pLeftArea = pImpLeft->Clone(); + pLeftArea = std::make_unique(*pImpLeft); const EditTextObject* pImpCenter = pImp->GetCenterEditObject(); pCenterArea.reset(); if (pImpCenter) - pCenterArea = pImpCenter->Clone(); + pCenterArea = std::make_unique(*pImpCenter); const EditTextObject* pImpRight = pImp->GetRightEditObject(); pRightArea.reset(); if (pImpRight) - pRightArea = pImpRight->Clone(); + pRightArea = std::make_unique(*pImpRight); if ( !pLeftArea || !pCenterArea || !pRightArea ) { @@ -491,17 +491,17 @@ ScPageHFItem* ScPageHFItem::Clone( SfxItemPool* ) const void ScPageHFItem::SetLeftArea( const EditTextObject& rNew ) { - pLeftArea = rNew.Clone(); + pLeftArea = std::make_unique(rNew); } void ScPageHFItem::SetCenterArea( const EditTextObject& rNew ) { - pCenterArea = rNew.Clone(); + pCenterArea = std::make_unique(rNew); } void ScPageHFItem::SetRightArea( const EditTextObject& rNew ) { - pRightArea = rNew.Clone(); + pRightArea = std::make_unique(rNew); } void ScPageHFItem::dumpAsXml(xmlTextWriterPtr pWriter) const { diff --git a/sc/source/core/data/cellvalue.cxx b/sc/source/core/data/cellvalue.cxx index d6dee14323ca..02eec75bd88e 100644 --- a/sc/source/core/data/cellvalue.cxx +++ b/sc/source/core/data/cellvalue.cxx @@ -240,7 +240,7 @@ ScCellValue::ScCellValue( const ScRefCellValue& rCell ) maData = *rCell.getSharedString(); break; case CELLTYPE_EDIT: - maData = rCell.getEditText()->Clone().release(); + maData = new EditTextObject(*rCell.getEditText()); break; case CELLTYPE_FORMULA: maData = rCell.getFormula()->Clone(); @@ -266,7 +266,7 @@ ScCellValue::ScCellValue( const ScCellValue& r ) maData = *r.getSharedString(); break; case CELLTYPE_EDIT: - maData = r.getEditText()->Clone().release(); + maData = new EditTextObject(*r.getEditText()); break; case CELLTYPE_FORMULA: maData = r.getFormula()->Clone(); @@ -342,7 +342,7 @@ void ScCellValue::set( const svl::SharedString& rStr ) void ScCellValue::set( const EditTextObject& rEditText ) { clear(); - maData = rEditText.Clone().release(); + maData = new EditTextObject(rEditText); } void ScCellValue::set( std::unique_ptr xEditText ) @@ -369,7 +369,7 @@ void ScCellValue::assign( const ScDocument& rDoc, const ScAddress& rPos ) maData = *aRefVal.getSharedString(); break; case CELLTYPE_EDIT: - maData = aRefVal.getEditText() ? aRefVal.getEditText()->Clone().release() : static_cast(nullptr); + maData = aRefVal.getEditText() ? new EditTextObject(*aRefVal.getEditText()) : static_cast(nullptr); break; case CELLTYPE_VALUE: maData = aRefVal.getDouble(); @@ -436,7 +436,7 @@ void ScCellValue::commit( ScDocument& rDoc, const ScAddress& rPos ) const } break; case CELLTYPE_EDIT: - rDoc.SetEditText(rPos, getEditText()->Clone()); + rDoc.SetEditText(rPos, std::make_unique(*getEditText())); break; case CELLTYPE_VALUE: rDoc.SetValue(rPos, getDouble()); diff --git a/sc/source/core/data/cellvalues.cxx b/sc/source/core/data/cellvalues.cxx index fb90837fefd8..8853fd2c0ec8 100644 --- a/sc/source/core/data/cellvalues.cxx +++ b/sc/source/core/data/cellvalues.cxx @@ -213,7 +213,7 @@ void CellValues::copyCellsTo( ScColumn& rCol, SCROW nRow ) const for (; it != itEnd; ++it) { const EditTextObject* p = *it; - aVals.push_back(p->Clone().release()); + aVals.push_back(new EditTextObject(*p)); } itPos = rDest.set(itPos, nCurRow, aVals.begin(), aVals.end()); } diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index dbfa0e4386aa..10e5a94cd69a 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -1038,7 +1038,7 @@ void ScColumn::CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDes { EditTextObject* p = sc::edittext_block::at(*it->data, aPos.second); if (&rDocument == &rDestCol.GetDoc()) - rDestCol.maCells.set(nDestRow, p->Clone().release()); + rDestCol.maCells.set(nDestRow, new EditTextObject(*p)); else rDestCol.maCells.set(nDestRow, ScEditUtil::Clone(*p, rDestCol.GetDoc()).release()); } diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index bf896a5c0068..217d777ffcd7 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -1778,7 +1778,7 @@ public: void operator() (size_t nRow, const EditTextObject* p) { - miNewCellsPos = maNewCells.set(miNewCellsPos, nRow-mnRowOffset, p->Clone().release()); + miNewCellsPos = maNewCells.set(miNewCellsPos, nRow-mnRowOffset, new EditTextObject(*p)); } void operator() (size_t nRow, const ScFormulaCell* p) @@ -1894,7 +1894,7 @@ public: { EditTextObject* pObj = sc::edittext_block::at(*aPos.first->data, aPos.second); miNewCellsPos = maNewCells.set( - miNewCellsPos, nDestRow-mnRowOffset, pObj->Clone().release()); + miNewCellsPos, nDestRow-mnRowOffset, new EditTextObject(*pObj)); } break; case sc::element_type_formula: @@ -2397,7 +2397,7 @@ void ScColumn::SetEditText( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, cons { if (GetDoc().GetEditEnginePool() == rEditText.GetPool()) { - SetEditText(rBlockPos, nRow, rEditText.Clone()); + SetEditText(rBlockPos, nRow, std::make_unique(rEditText)); return; } @@ -2413,7 +2413,7 @@ void ScColumn::SetEditText( SCROW nRow, const EditTextObject& rEditText, const S { if (pEditPool && GetDoc().GetEditEnginePool() == pEditPool) { - SetEditText(nRow, rEditText.Clone()); + SetEditText(nRow, std::make_unique(rEditText)); return; } diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx index 8b3ef25ed91e..6230797a1d47 100644 --- a/sc/source/core/data/column4.cxx +++ b/sc/source/core/data/column4.cxx @@ -312,7 +312,7 @@ void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, std::vector aStrs; aStrs.reserve(nDestSize); for (size_t i = 0; i < nDestSize; ++i) - aStrs.push_back(rSrcCell.getEditText()->Clone().release()); + aStrs.push_back(new EditTextObject(*rSrcCell.getEditText())); pBlockPos->miCellPos = maCells.set(pBlockPos->miCellPos, nRow1, aStrs.begin(), aStrs.end()); diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx index aba9680bc423..af1617e27f21 100644 --- a/sc/source/core/data/dociter.cxx +++ b/sc/source/core/data/dociter.cxx @@ -1017,7 +1017,7 @@ ScCellValue ScCellIterator::getCellValue() const return ScCellValue(maCurCell.getSharedString()); break; case CELLTYPE_EDIT: - return ScCellValue(maCurCell.getEditText()->Clone()); + return ScCellValue(std::make_unique(*maCurCell.getEditText())); break; case CELLTYPE_VALUE: return ScCellValue(maCurCell.getDouble()); diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index aa21db63e803..d6268aea107a 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -610,7 +610,7 @@ void fillSortedColumnArray( break; case CELLTYPE_EDIT: assert(rCell.mpAttr); - rCellStore.push_back(rCell.maCell.getEditText()->Clone().release()); + rCellStore.push_back(new EditTextObject(*rCell.maCell.getEditText())); break; case CELLTYPE_FORMULA: { diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx index d260d19ad5c7..3e84f3760518 100644 --- a/sc/source/filter/orcus/interface.cxx +++ b/sc/source/filter/orcus/interface.cxx @@ -415,7 +415,8 @@ void ScOrcusFactory::finalize() maDoc.setStringCell(rToken.maPos, std::get<0>(s)); break; case 1: // std::unique_ptr - maDoc.setEditCell(rToken.maPos, std::get<1>(s)->Clone()); + maDoc.setEditCell(rToken.maPos, + std::make_unique(*std::get<1>(s))); break; } ++nCellCount; diff --git a/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx b/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx index 961cd71e6136..d4e3e4def894 100644 --- a/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx +++ b/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx @@ -46,7 +46,7 @@ ScAccessiblePageHeaderArea::ScAccessiblePageHeaderArea( const EditTextObject* pEditObj, SvxAdjust eAdjust) : ScAccessibleContextBase(rxParent, AccessibleRole::TEXT), - mpEditObj(pEditObj->Clone()), + mpEditObj(std::make_unique(*pEditObj)), mpViewShell(pViewShell), meAdjust(eAdjust) { diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx index 4ce4b604dbe2..8a05777de161 100644 --- a/sc/source/ui/app/inputhdl.cxx +++ b/sc/source/ui/app/inputhdl.cxx @@ -4867,7 +4867,7 @@ ScInputHdlState::ScInputHdlState( const ScAddress& rCurPos, aStartPos ( rStartPos ), aEndPos ( rEndPos ), aString (std::move( _aString )), - pEditData ( pData ? pData->Clone() : nullptr ) + pEditData ( pData ? std::make_unique(*pData) : nullptr ) { } @@ -4899,7 +4899,7 @@ ScInputHdlState& ScInputHdlState::operator=( const ScInputHdlState& r ) aString = r.aString; pEditData.reset(); if (r.pEditData) - pEditData = r.pEditData->Clone(); + pEditData = std::make_unique(*r.pEditData); } return *this; } diff --git a/sc/source/ui/app/uiitems.cxx b/sc/source/ui/app/uiitems.cxx index a547ae9b5b45..5e90221fc5ac 100644 --- a/sc/source/ui/app/uiitems.cxx +++ b/sc/source/ui/app/uiitems.cxx @@ -38,7 +38,7 @@ ScInputStatusItem::ScInputStatusItem( aStartPos ( rStartPos ), aEndPos ( rEndPos ), aString (std::move( _aString )), - pEditData ( pData ? pData->Clone() : nullptr ) + pEditData ( pData ? std::make_unique(*pData) : nullptr ) { } @@ -48,7 +48,7 @@ ScInputStatusItem::ScInputStatusItem( const ScInputStatusItem& rItem ) : aStartPos ( rItem.aStartPos ), aEndPos ( rItem.aEndPos ), aString ( rItem.aString ), - pEditData ( rItem.pEditData ? rItem.pEditData->Clone() : nullptr ), + pEditData ( rItem.pEditData ? std::make_unique(*rItem.pEditData) : nullptr ), maMisspellRanges(rItem.maMisspellRanges) { } diff --git a/sc/source/ui/operation/ApplyAttributesOperation.cxx b/sc/source/ui/operation/ApplyAttributesOperation.cxx index 731078c12b2a..481a3edf1faa 100644 --- a/sc/source/ui/operation/ApplyAttributesOperation.cxx +++ b/sc/source/ui/operation/ApplyAttributesOperation.cxx @@ -225,10 +225,10 @@ bool ApplyAttributesToCellOperation::runImplementation() if (aCell.getType() == CELLTYPE_EDIT) { const EditTextObject* pEditObj = aCell.getEditText(); - pOldEditData = pEditObj->Clone(); + pOldEditData = std::make_unique(*pEditObj); rDoc.RemoveEditTextCharAttribs(aPosition, mrPattern); pEditObj = rDoc.GetEditText(aPosition); - pNewEditData = pEditObj->Clone(); + pNewEditData = std::make_unique(*pEditObj); } maChangeRanges.push_back(ScRange(aPosition)); diff --git a/sc/source/ui/operation/SetEditTextOperation.cxx b/sc/source/ui/operation/SetEditTextOperation.cxx index 55c043321bcb..a2acf25985e0 100644 --- a/sc/source/ui/operation/SetEditTextOperation.cxx +++ b/sc/source/ui/operation/SetEditTextOperation.cxx @@ -47,7 +47,7 @@ bool SetEditTextOperation::runImplementation() if (bUndo) aOldVal.assign(rDoc, aPosition); - rDoc.SetEditText(aPosition, mrEditObject.Clone()); + rDoc.SetEditText(aPosition, std::make_unique(mrEditObject)); ScUndoSetCell* pUndoSetCell = nullptr; if (bUndo) diff --git a/sc/source/ui/undo/undocell.cxx b/sc/source/ui/undo/undocell.cxx index aee47ca54024..91d63dcad362 100644 --- a/sc/source/ui/undo/undocell.cxx +++ b/sc/source/ui/undo/undocell.cxx @@ -502,7 +502,7 @@ void ScUndoSetCell::SetValue( const ScCellValue& rVal ) } break; case CELLTYPE_EDIT: - rDoc.SetEditText(maPos, rVal.getEditText()->Clone()); + rDoc.SetEditText(maPos, std::make_unique(*rVal.getEditText())); break; case CELLTYPE_FORMULA: rDoc.SetFormulaCell(maPos, rVal.getFormula()->Clone()); diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx index e80d6ed1ec3b..11a41ca70bdc 100644 --- a/sc/source/ui/unoobj/textuno.cxx +++ b/sc/source/ui/unoobj/textuno.cxx @@ -144,7 +144,7 @@ void ScHeaderFooterContentObj::Init( const EditTextObject* pLeft, ScHeaderFooterTextData::ScHeaderFooterTextData( unotools::WeakReference xContent, ScHeaderFooterPart nP, const EditTextObject* pTextObj) : - mpTextObj(pTextObj ? pTextObj->Clone() : nullptr), + mpTextObj(pTextObj ? std::make_unique(*pTextObj) : nullptr), xContentObj(std::move( xContent )), nPart( nP ), bDataValid(false) diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index 7dd3801503a6..aaec58f88fdc 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -714,7 +714,7 @@ void applyFormulaToCell(ScViewFunc& rViewFunc, SCCOL nCol, SCROW nRow, SCTAB nTa // a plain single-cell cell still gets implicit intersection applied at // runtime. auto xCompPtr = std::make_shared(rDoc, *xPosPtr, rDoc.GetGrammar(), !bAutoDynamicArray, false); - std::unique_ptr xTextObject(pData ? pData->Clone() : nullptr); + std::unique_ptr xTextObject(pData ? std::make_unique(*pData) : nullptr); //2do: enable/disable autoCorrection via calcoptions xCompPtr->SetAutoCorrection( true ); @@ -938,7 +938,7 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, aOldValues.push_back(aOldValue); } - pUndoData = rData.Clone(); + pUndoData = std::make_unique(rData); } // enter data