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 <noel.grandin@collabora.co.uk>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/10550
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit dd8a795b5aed4c44e11eef86eaf19b1f88edf0f8)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210320
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
This commit is contained in:
Noel Grandin
2026-09-01 15:40:01 +02:00
committed by Xisco Fauli
parent 3fe7aaf9ac
commit 3b52fbc96f
25 changed files with 201 additions and 285 deletions
@@ -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
+47 -49
View File
@@ -206,19 +206,12 @@ bool ContentInfo::Equals(const ContentInfo& rCompare, bool bComparePool) const
&& maCharAttribs == rCompare.maCharAttribs;
}
EditTextObject::~EditTextObject() = default;
std::unique_ptr<EditTextObject> EditTextObjectImpl::Clone() const
{
return std::make_unique<EditTextObjectImpl>(*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<SfxItemPool> 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<ContentInfo>(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<svl::SharedString> EditTextObjectImpl::GetSharedStrings() const
std::vector<svl::SharedString> EditTextObject::GetSharedStrings() const
{
std::vector<svl::SharedString> aSSs;
aSSs.reserve(maContents.size());
@@ -331,19 +324,19 @@ std::vector<svl::SharedString> 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<ContentInfo>(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<sal_Int32>(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<EECharAttrib>& rLst ) const
void EditTextObject::GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttrib>& rLst ) const
{
if (nPara < 0 || o3tl::make_unsigned(nPara) >= maContents.size())
return;
@@ -458,12 +451,12 @@ void EditTextObjectImpl::GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttr
}
}
bool EditTextObjectImpl::IsFieldObject() const
bool EditTextObject::IsFieldObject() const
{
return GetField() != nullptr;
}
const SvxFieldItem* EditTextObjectImpl::GetField() const
const SvxFieldItem* EditTextObject::GetField() const
{
if (maContents.size() == 1)
{
@@ -482,7 +475,7 @@ const SvxFieldItem* EditTextObjectImpl::GetField() const
return nullptr;
}
const SvxFieldData* EditTextObjectImpl::GetFieldData(sal_Int32 nPara, size_t nPos, sal_Int32 nType) const
const SvxFieldData* EditTextObject::GetFieldData(sal_Int32 nPara, size_t nPos, sal_Int32 nType) const
{
if (nPara < 0 || o3tl::make_unsigned(nPara) >= 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<editeng::Section>& rAttrs ) const
void EditTextObject::GetAllSections( std::vector<editeng::Section>& rAttrs ) const
{
std::vector<editeng::Section> aAttrs;
aAttrs.reserve(maContents.size());
@@ -701,7 +694,7 @@ void EditTextObjectImpl::GetAllSections( std::vector<editeng::Section>& 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<XParaPortionList> pP )
{ mpPortionInfo = std::move(pP); }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+1 -142
View File
@@ -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<std::unique_ptr<ContentInfo> > ContentInfosType;
private:
ContentInfosType maContents;
rtl::Reference<SfxItemPool> mpPool;
std::unique_ptr<XParaPortionList> 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<svl::SharedString> 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<EditTextObject> 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<XParaPortionList> 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<EECharAttrib>& rLst ) const override;
virtual bool RemoveCharAttribs( sal_uInt16 nWhich ) override;
virtual void GetAllSections( std::vector<editeng::Section>& 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<EditTextObjectImpl*>(&rObj));
return static_cast<EditTextObjectImpl&>(rObj);
}
inline const EditTextObjectImpl& toImpl(const EditTextObject& rObj)
{
assert(dynamic_cast<const EditTextObjectImpl*>(&rObj));
return static_cast<const EditTextObjectImpl&>(rObj);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+4 -4
View File
@@ -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<ContentInfo> & i : rContents)
{
ContentInfo& rContent = *i;
@@ -71,7 +71,7 @@ public:
void UpdatePageRelativeURLs(const std::function<void(const SvxFieldItem & rFieldItem, SvxFieldItemUpdater& rFieldItemUpdater)>& rItemCallback)
{
EditTextObjectImpl::ContentInfosType& rContents = mrObj.GetContents();
EditTextObject::ContentInfosType& rContents = mrObj.GetContents();
for (std::unique_ptr<ContentInfo> & i : rContents)
{
ContentInfo& rContent = *i;
+6 -7
View File
@@ -1205,7 +1205,7 @@ std::unique_ptr<EditTextObject> 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<EditTextObjectImpl>(pPool, eMapUnit, GetVertical(), GetRotation(),
auto pTxtObj(std::make_unique<EditTextObject>(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<tools::Long>(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<sal_Int32>(rTextObjectImpl.GetContents().size());
sal_Int32 nContents = static_cast<sal_Int32>(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();
+1 -1
View File
@@ -37,7 +37,7 @@ OutlinerParaObjData::OutlinerParaObjData( std::unique_ptr<EditTextObject> pEditT
}
OutlinerParaObjData::OutlinerParaObjData( const OutlinerParaObjData& r ):
mpEditTextObject(r.mpEditTextObject->Clone()),
mpEditTextObject(new EditTextObject(*r.mpEditTextObject)),
maParagraphDataVector(r.maParagraphDataVector),
mbIsEditDoc(r.mbIsEditDoc)
{
+103 -43
View File
@@ -23,8 +23,11 @@
#include <svl/style.hxx>
#include <editeng/editengdllapi.h>
#include <editeng/macros.hxx>
#include <svl/itemset.hxx>
#include <svl/itempool.hxx>
#include <svl/languageoptions.hxx>
#include <tools/lineend.hxx>
#include <tools/mapunit.hxx>
#include <com/sun/star/text/textfield/Type.hpp>
@@ -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<std::unique_ptr<ContentInfo> > 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<svl::SharedString> GetSharedStrings() const = 0;
std::vector<svl::SharedString> 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<EditTextObject> 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<XParaPortionList> pP );
void ClearPortionInfo();
virtual bool HasOnlineSpellErrors() const = 0;
bool HasOnlineSpellErrors() const;
virtual void GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttrib>& rLst ) const = 0;
void GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttrib>& 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<editeng::Section>& rAttrs ) const = 0;
void GetAllSections( std::vector<editeng::Section>& 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<SfxItemPool> mpPool;
std::unique_ptr<XParaPortionList> mpPortionInfo;
OutlinerMode meUserType;
SvtScriptType meScriptType;
TextRotation meRotation;
MapUnit meMetric;
bool mbVertical;
};
#endif // INCLUDED_EDITENG_EDITOBJ_HXX
+2 -2
View File
@@ -413,7 +413,7 @@ void ScAttrArray::RemoveCellCharAttribs( SCROW nStartRow, SCROW nEndRow,
std::unique_ptr<EditTextObject> pOldData;
if (pDataArray)
pOldData = aCell.getEditText()->Clone();
pOldData = std::make_unique<EditTextObject>(*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<EditTextObject> pNewData = aCell.getEditText()->Clone();
auto pNewData = std::make_unique<EditTextObject>(*aCell.getEditText());
pDataArray->AddItem(nTab, nCol, nRow, std::move(pOldData), std::move(pNewData));
}
}
+9 -9
View File
@@ -400,11 +400,11 @@ ScPageHFItem::ScPageHFItem( const ScPageHFItem& rItem )
: SfxPoolItem ( rItem )
{
if ( rItem.pLeftArea )
pLeftArea = rItem.pLeftArea->Clone();
pLeftArea = std::make_unique<EditTextObject>(*rItem.pLeftArea);
if ( rItem.pCenterArea )
pCenterArea = rItem.pCenterArea->Clone();
pCenterArea = std::make_unique<EditTextObject>(*rItem.pCenterArea);
if ( rItem.pRightArea )
pRightArea = rItem.pRightArea->Clone();
pRightArea = std::make_unique<EditTextObject>(*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<EditTextObject>(*pImpLeft);
const EditTextObject* pImpCenter = pImp->GetCenterEditObject();
pCenterArea.reset();
if (pImpCenter)
pCenterArea = pImpCenter->Clone();
pCenterArea = std::make_unique<EditTextObject>(*pImpCenter);
const EditTextObject* pImpRight = pImp->GetRightEditObject();
pRightArea.reset();
if (pImpRight)
pRightArea = pImpRight->Clone();
pRightArea = std::make_unique<EditTextObject>(*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<EditTextObject>(rNew);
}
void ScPageHFItem::SetCenterArea( const EditTextObject& rNew )
{
pCenterArea = rNew.Clone();
pCenterArea = std::make_unique<EditTextObject>(rNew);
}
void ScPageHFItem::SetRightArea( const EditTextObject& rNew )
{
pRightArea = rNew.Clone();
pRightArea = std::make_unique<EditTextObject>(rNew);
}
void ScPageHFItem::dumpAsXml(xmlTextWriterPtr pWriter) const
{
+5 -5
View File
@@ -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<EditTextObject> 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<EditTextObject*>(nullptr);
maData = aRefVal.getEditText() ? new EditTextObject(*aRefVal.getEditText()) : static_cast<EditTextObject*>(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<EditTextObject>(*getEditText()));
break;
case CELLTYPE_VALUE:
rDoc.SetValue(rPos, getDouble());
+1 -1
View File
@@ -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());
}
+1 -1
View File
@@ -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());
}
+4 -4
View File
@@ -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<EditTextObject>(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<EditTextObject>(rEditText));
return;
}
+1 -1
View File
@@ -312,7 +312,7 @@ void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1,
std::vector<EditTextObject*> 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());
+1 -1
View File
@@ -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<EditTextObject>(*maCurCell.getEditText()));
break;
case CELLTYPE_VALUE:
return ScCellValue(maCurCell.getDouble());
+1 -1
View File
@@ -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:
{
+2 -1
View File
@@ -415,7 +415,8 @@ void ScOrcusFactory::finalize()
maDoc.setStringCell(rToken.maPos, std::get<0>(s));
break;
case 1: // std::unique_ptr<EditTextObject>
maDoc.setEditCell(rToken.maPos, std::get<1>(s)->Clone());
maDoc.setEditCell(rToken.maPos,
std::make_unique<EditTextObject>(*std::get<1>(s)));
break;
}
++nCellCount;
@@ -46,7 +46,7 @@ ScAccessiblePageHeaderArea::ScAccessiblePageHeaderArea(
const EditTextObject* pEditObj,
SvxAdjust eAdjust)
: ScAccessibleContextBase(rxParent, AccessibleRole::TEXT),
mpEditObj(pEditObj->Clone()),
mpEditObj(std::make_unique<EditTextObject>(*pEditObj)),
mpViewShell(pViewShell),
meAdjust(eAdjust)
{
+2 -2
View File
@@ -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<EditTextObject>(*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<EditTextObject>(*r.pEditData);
}
return *this;
}
+2 -2
View File
@@ -38,7 +38,7 @@ ScInputStatusItem::ScInputStatusItem(
aStartPos ( rStartPos ),
aEndPos ( rEndPos ),
aString (std::move( _aString )),
pEditData ( pData ? pData->Clone() : nullptr )
pEditData ( pData ? std::make_unique<EditTextObject>(*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<EditTextObject>(*rItem.pEditData) : nullptr ),
maMisspellRanges(rItem.maMisspellRanges)
{
}
@@ -225,10 +225,10 @@ bool ApplyAttributesToCellOperation::runImplementation()
if (aCell.getType() == CELLTYPE_EDIT)
{
const EditTextObject* pEditObj = aCell.getEditText();
pOldEditData = pEditObj->Clone();
pOldEditData = std::make_unique<EditTextObject>(*pEditObj);
rDoc.RemoveEditTextCharAttribs(aPosition, mrPattern);
pEditObj = rDoc.GetEditText(aPosition);
pNewEditData = pEditObj->Clone();
pNewEditData = std::make_unique<EditTextObject>(*pEditObj);
}
maChangeRanges.push_back(ScRange(aPosition));
@@ -47,7 +47,7 @@ bool SetEditTextOperation::runImplementation()
if (bUndo)
aOldVal.assign(rDoc, aPosition);
rDoc.SetEditText(aPosition, mrEditObject.Clone());
rDoc.SetEditText(aPosition, std::make_unique<EditTextObject>(mrEditObject));
ScUndoSetCell* pUndoSetCell = nullptr;
if (bUndo)
+1 -1
View File
@@ -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<EditTextObject>(*rVal.getEditText()));
break;
case CELLTYPE_FORMULA:
rDoc.SetFormulaCell(maPos, rVal.getFormula()->Clone());
+1 -1
View File
@@ -144,7 +144,7 @@ void ScHeaderFooterContentObj::Init( const EditTextObject* pLeft,
ScHeaderFooterTextData::ScHeaderFooterTextData(
unotools::WeakReference<ScHeaderFooterContentObj> xContent, ScHeaderFooterPart nP, const EditTextObject* pTextObj) :
mpTextObj(pTextObj ? pTextObj->Clone() : nullptr),
mpTextObj(pTextObj ? std::make_unique<EditTextObject>(*pTextObj) : nullptr),
xContentObj(std::move( xContent )),
nPart( nP ),
bDataValid(false)
+2 -2
View File
@@ -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<ScCompiler>(rDoc, *xPosPtr, rDoc.GetGrammar(), !bAutoDynamicArray, false);
std::unique_ptr<EditTextObject> xTextObject(pData ? pData->Clone() : nullptr);
std::unique_ptr<EditTextObject> xTextObject(pData ? std::make_unique<EditTextObject>(*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<EditTextObject>(rData);
}
// enter data