Hold EditTextObject by value in OutlinerParaObjData, not by pointer

OutlinerParaObjData is already ref-counted data, no need
for further indirection.

Unfortunately, this sets off a larger chain of changes
than I would have preferred, but we end up storing
EditTextObject on the stack much more than before, so
that worked out well.

Change-Id: Ie7d0ccfbfeec4e6935f2ed6b8ad48aadfe1bac20
Signed-off-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/10973
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
(cherry picked from commit fbf7d1bc7142d3f0e4e5f959983dea065afc5ea3)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210927
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
This commit is contained in:
Noel Grandin
2026-09-14 16:27:02 +02:00
committed by Xisco Fauli
parent 1e441608e5
commit fcf0bcc0f9
63 changed files with 296 additions and 337 deletions
+22 -25
View File
@@ -996,9 +996,9 @@ void Test::testBoldItalicCopyPaste()
aEditEngine.QuickSetAttribs(*pSet, ESelection(0, 2, 0, 14)); aEditEngine.QuickSetAttribs(*pSet, ESelection(0, 2, 0, 14));
// Assert changes // Assert changes
std::unique_ptr<EditTextObject> pEditText1(aEditEngine.CreateTextObject()); EditTextObject aEditText1(aEditEngine.CreateTextObject());
std::vector<editeng::Section> aAttrs1; std::vector<editeng::Section> aAttrs1;
pEditText1->GetAllSections(aAttrs1); aEditText1.GetAllSections(aAttrs1);
// There should be 3 sections - woBold - wBold - woBold (w - with, wo - without) // There should be 3 sections - woBold - wBold - woBold (w - with, wo - without)
CPPUNIT_ASSERT_EQUAL(size_t(3), aAttrs1.size()); CPPUNIT_ASSERT_EQUAL(size_t(3), aAttrs1.size());
@@ -1025,9 +1025,9 @@ void Test::testBoldItalicCopyPaste()
aEditEngine.QuickSetAttribs(*pSet, ESelection(0, 8, 0, 18)); aEditEngine.QuickSetAttribs(*pSet, ESelection(0, 8, 0, 18));
// Assert changes // Assert changes
std::unique_ptr<EditTextObject> pEditText2(aEditEngine.CreateTextObject()); EditTextObject aEditText2(aEditEngine.CreateTextObject());
std::vector<editeng::Section> aAttrs2; std::vector<editeng::Section> aAttrs2;
pEditText2->GetAllSections(aAttrs2); aEditText2.GetAllSections(aAttrs2);
// There should be 5 sections - woBold&woItalic - wBold&woItalic - wBold&wItalic - woBold&wItalic - woBold&woItalic (w - with, wo - without) // There should be 5 sections - woBold&woItalic - wBold&woItalic - wBold&wItalic - woBold&wItalic - woBold&woItalic (w - with, wo - without)
CPPUNIT_ASSERT_EQUAL(size_t(5), aAttrs2.size()); CPPUNIT_ASSERT_EQUAL(size_t(5), aAttrs2.size());
@@ -1073,9 +1073,9 @@ void Test::testBoldItalicCopyPaste()
rDoc.GetParaAsString(sal_Int32(0))); rDoc.GetParaAsString(sal_Int32(0)));
// Check updated text for appropriate Bold/Italics // Check updated text for appropriate Bold/Italics
std::unique_ptr<EditTextObject> pEditText3(aEditEngine.CreateTextObject()); EditTextObject aEditText3(aEditEngine.CreateTextObject());
std::vector<editeng::Section> aAttrs3; std::vector<editeng::Section> aAttrs3;
pEditText3->GetAllSections(aAttrs3); aEditText3.GetAllSections(aAttrs3);
// There should be 9 sections - woBold&woItalic - wBold&woItalic - wBold&wItalic - woBold&wItalic - woBold&woItalic - wBold&woItalic // There should be 9 sections - woBold&woItalic - wBold&woItalic - wBold&wItalic - woBold&wItalic - woBold&woItalic - wBold&woItalic
// - wBold&wItalic - woBold&wItalic - woBold&woItalic(w - with, wo - without) // - wBold&wItalic - woBold&wItalic - woBold&woItalic(w - with, wo - without)
CPPUNIT_ASSERT_EQUAL(size_t(9), aAttrs3.size()); CPPUNIT_ASSERT_EQUAL(size_t(9), aAttrs3.size());
@@ -1173,9 +1173,9 @@ void Test::testUnderlineCopyPaste()
aEditEngine.QuickSetAttribs(*pSet, ESelection(0, 6, 0, 18)); aEditEngine.QuickSetAttribs(*pSet, ESelection(0, 6, 0, 18));
// Assert changes // Assert changes
std::unique_ptr<EditTextObject> pEditText1(aEditEngine.CreateTextObject()); EditTextObject aEditText1(aEditEngine.CreateTextObject());
std::vector<editeng::Section> aAttrs1; std::vector<editeng::Section> aAttrs1;
pEditText1->GetAllSections(aAttrs1); aEditText1.GetAllSections(aAttrs1);
// There should be 3 sections - woUnderline - wUnderline - woUnderline (w - with, wo - without) // There should be 3 sections - woUnderline - wUnderline - woUnderline (w - with, wo - without)
CPPUNIT_ASSERT_EQUAL(size_t(3), aAttrs1.size()); CPPUNIT_ASSERT_EQUAL(size_t(3), aAttrs1.size());
@@ -1209,9 +1209,9 @@ void Test::testUnderlineCopyPaste()
CPPUNIT_ASSERT_EQUAL(OUString(aParaText + "textforunder"), rDoc.GetParaAsString(sal_Int32(0))); CPPUNIT_ASSERT_EQUAL(OUString(aParaText + "textforunder"), rDoc.GetParaAsString(sal_Int32(0)));
// Check updated text for appropriate Underline // Check updated text for appropriate Underline
std::unique_ptr<EditTextObject> pEditText2(aEditEngine.CreateTextObject()); EditTextObject aEditText2(aEditEngine.CreateTextObject());
std::vector<editeng::Section> aAttrs2; std::vector<editeng::Section> aAttrs2;
pEditText2->GetAllSections(aAttrs2); aEditText2.GetAllSections(aAttrs2);
// There should be 4 sections - woUnderline - wUnderline - woUnderline - wUnderline (w - with, wo - without) // There should be 4 sections - woUnderline - wUnderline - woUnderline - wUnderline (w - with, wo - without)
CPPUNIT_ASSERT_EQUAL(size_t(4), aAttrs2.size()); CPPUNIT_ASSERT_EQUAL(size_t(4), aAttrs2.size());
@@ -1330,9 +1330,9 @@ void Test::testParaBoldItalicCopyPaste()
aEditEngine.QuickSetAttribs(*pSet, ESelection(1, 5, 1, 19)); aEditEngine.QuickSetAttribs(*pSet, ESelection(1, 5, 1, 19));
// Assert changes // Assert changes
std::unique_ptr<EditTextObject> pEditText1(aEditEngine.CreateTextObject()); EditTextObject aEditText1(aEditEngine.CreateTextObject());
std::vector<editeng::Section> aAttrs1; std::vector<editeng::Section> aAttrs1;
pEditText1->GetAllSections(aAttrs1); aEditText1.GetAllSections(aAttrs1);
// There should be 7 sections - woB - wB - woB -woB -wB -woB -woB (w - with, wo - without, B - Bold, I - Italic) // There should be 7 sections - woB - wB - woB -woB -wB -woB -woB (w - with, wo - without, B - Bold, I - Italic)
CPPUNIT_ASSERT_EQUAL(size_t(7), aAttrs1.size()); CPPUNIT_ASSERT_EQUAL(size_t(7), aAttrs1.size());
@@ -1380,9 +1380,9 @@ void Test::testParaBoldItalicCopyPaste()
aEditEngine.QuickSetAttribs(*pSet, ESelection(0, 14, 1, 9)); aEditEngine.QuickSetAttribs(*pSet, ESelection(0, 14, 1, 9));
// Assert changes // Assert changes
std::unique_ptr<EditTextObject> pEditText2(aEditEngine.CreateTextObject()); EditTextObject aEditText2(aEditEngine.CreateTextObject());
std::vector<editeng::Section> aAttrs2; std::vector<editeng::Section> aAttrs2;
pEditText2->GetAllSections(aAttrs2); aEditText2.GetAllSections(aAttrs2);
// There should be 9 sections - woB&woI - wB&woI - wB&wI -woB&wI - woB&wI - wB&wI - wB&woI - woB&woI - woB&woI (w - with, wo - without, B - Bold, I - Italic) // There should be 9 sections - woB&woI - wB&woI - wB&wI -woB&wI - woB&wI - wB&wI - wB&woI - woB&woI - woB&woI (w - with, wo - without, B - Bold, I - Italic)
CPPUNIT_ASSERT_EQUAL(size_t(9), aAttrs2.size()); CPPUNIT_ASSERT_EQUAL(size_t(9), aAttrs2.size());
@@ -1455,9 +1455,9 @@ void Test::testParaBoldItalicCopyPaste()
CPPUNIT_ASSERT_EQUAL( u"This is second"_ustr, rDoc.GetParaAsString(sal_Int32(3)) ); CPPUNIT_ASSERT_EQUAL( u"This is second"_ustr, rDoc.GetParaAsString(sal_Int32(3)) );
// Check updated text for appropriate Bold/Italics // Check updated text for appropriate Bold/Italics
std::unique_ptr<EditTextObject> pEditText3(aEditEngine.CreateTextObject()); EditTextObject aEditText3(aEditEngine.CreateTextObject());
std::vector<editeng::Section> aAttrs3; std::vector<editeng::Section> aAttrs3;
pEditText3->GetAllSections(aAttrs3); aEditText3.GetAllSections(aAttrs3);
// There should be 15 sections - woB&woI - wB&woI - wB&wI -woB&wI - woB&wI - wB&wI - wB&woI - woB&woI - woB&woI // There should be 15 sections - woB&woI - wB&woI - wB&wI -woB&wI - woB&wI - wB&wI - wB&woI - woB&woI - woB&woI
// - wB&woI - wB&wI - woB&wI - -woB&wI - wB&wI - wB&woI (w - with, wo - without, B - Bold, I - Italic) // - wB&woI - wB&wI - woB&wI - -woB&wI - wB&wI - wB&woI (w - with, wo - without, B - Bold, I - Italic)
CPPUNIT_ASSERT_EQUAL(size_t(15), aAttrs3.size()); CPPUNIT_ASSERT_EQUAL(size_t(15), aAttrs3.size());
@@ -1621,10 +1621,9 @@ void Test::testSectionAttributes()
static_cast<sal_uInt16>(1), pSet->Count()); static_cast<sal_uInt16>(1), pSet->Count());
aEngine.QuickSetAttribs(*pSet, ESelection(0, 3, 0, 9)); // 'bbbccc' aEngine.QuickSetAttribs(*pSet, ESelection(0, 3, 0, 9)); // 'bbbccc'
std::unique_ptr<EditTextObject> pEditText(aEngine.CreateTextObject()); EditTextObject aEditText(aEngine.CreateTextObject());
CPPUNIT_ASSERT_MESSAGE("Failed to create text object.", pEditText);
std::vector<editeng::Section> aAttrs; std::vector<editeng::Section> aAttrs;
pEditText->GetAllSections(aAttrs); aEditText.GetAllSections(aAttrs);
// Now, we should have a total of 3 sections. // Now, we should have a total of 3 sections.
CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be 3 sections.", static_cast<size_t>(3), CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be 3 sections.", static_cast<size_t>(3),
@@ -1670,10 +1669,9 @@ void Test::testSectionAttributes()
aEngine.QuickSetAttribs(*pSet, ESelection(2, 0, 2, 3)); aEngine.QuickSetAttribs(*pSet, ESelection(2, 0, 2, 3));
aEngine.QuickSetAttribs(*pSet, ESelection(4, 0, 4, 5)); aEngine.QuickSetAttribs(*pSet, ESelection(4, 0, 4, 5));
std::unique_ptr<EditTextObject> pEditText(aEngine.CreateTextObject()); EditTextObject aEditText(aEngine.CreateTextObject());
CPPUNIT_ASSERT_MESSAGE("Failed to create text object.", pEditText);
std::vector<editeng::Section> aAttrs; std::vector<editeng::Section> aAttrs;
pEditText->GetAllSections(aAttrs); aEditText.GetAllSections(aAttrs);
CPPUNIT_ASSERT_EQUAL(size_t(5), aAttrs.size()); CPPUNIT_ASSERT_EQUAL(size_t(5), aAttrs.size());
// 1st, 3rd and 5th sections should correspond with 1st, 3rd and 5th paragraphs. // 1st, 3rd and 5th sections should correspond with 1st, 3rd and 5th paragraphs.
@@ -1725,10 +1723,9 @@ void Test::testSectionAttributes()
aEngine.QuickDelete(ESelection(0, 0, 1, 3)); aEngine.QuickDelete(ESelection(0, 0, 1, 3));
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aEngine.GetParagraphCount()); CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aEngine.GetParagraphCount());
std::unique_ptr<EditTextObject> pEditText(aEngine.CreateTextObject()); EditTextObject aEditText(aEngine.CreateTextObject());
CPPUNIT_ASSERT_MESSAGE("Failed to create text object.", pEditText);
std::vector<editeng::Section> aAttrs; std::vector<editeng::Section> aAttrs;
pEditText->GetAllSections(aAttrs); aEditText.GetAllSections(aAttrs);
CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aAttrs.size()); CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aAttrs.size());
+4 -4
View File
@@ -833,17 +833,17 @@ void EditEngine::Write( SvStream& rOutput, EETextFormat eFormat )
getImpl().Write(rOutput, eFormat); getImpl().Write(rOutput, eFormat);
} }
std::unique_ptr<EditTextObject> EditEngine::CreateTextObject() EditTextObject EditEngine::CreateTextObject()
{ {
return getImpl().CreateTextObject(); return getImpl().CreateTextObject();
} }
std::unique_ptr<EditTextObject> EditEngine::CreateTextObject( const ESelection& rESelection ) EditTextObject EditEngine::CreateTextObject( const ESelection& rESelection )
{ {
return getImpl().CreateTextObject(CreateSelection(rESelection)); return getImpl().CreateTextObject(CreateSelection(rESelection));
} }
std::unique_ptr<EditTextObject> EditEngine::GetEmptyTextObject() EditTextObject EditEngine::GetEmptyTextObject()
{ {
return getImpl().GetEmptyTextObject(); return getImpl().GetEmptyTextObject();
} }
@@ -920,7 +920,7 @@ void EditEngine::SetEndPasteOrDropHdl( const Link<PasteOrDropInfos&,void>& rLink
getImpl().maEndPasteOrDropHdl = rLink; getImpl().maEndPasteOrDropHdl = rLink;
} }
std::unique_ptr<EditTextObject> EditEngine::CreateTextObject( sal_Int32 nPara, sal_Int32 nParas ) EditTextObject EditEngine::CreateTextObject( sal_Int32 nPara, sal_Int32 nParas )
{ {
return getImpl().CreateTextObject(nPara, nParas); return getImpl().CreateTextObject(nPara, nParas);
} }
+3
View File
@@ -297,6 +297,8 @@ EditTextObject::EditTextObject( const EditTextObject& r )
maContents.push_back(std::unique_ptr<ContentInfo>(new ContentInfo(*content, *mpPool))); maContents.push_back(std::unique_ptr<ContentInfo>(new ContentInfo(*content, *mpPool)));
} }
EditTextObject::EditTextObject( EditTextObject&& ) noexcept = default;
EditTextObject::~EditTextObject() EditTextObject::~EditTextObject()
{ {
ClearPortionInfo(); ClearPortionInfo();
@@ -306,6 +308,7 @@ EditTextObject::~EditTextObject()
maContents.clear(); maContents.clear();
} }
EditTextObject& EditTextObject::operator=(EditTextObject&&) = default;
void EditTextObject::SetUserType( OutlinerMode n ) void EditTextObject::SetUserType( OutlinerMode n )
{ {
+2 -2
View File
@@ -605,9 +605,9 @@ void EditUndoTransliteration::Undo()
aDelSel.Max() = aSel.Min(); aDelSel.Max() = aSel.Min();
aDelSel.Max().GetNode()->GetCharAttribs().DeleteEmptyAttribs(); aDelSel.Max().GetNode()->GetCharAttribs().DeleteEmptyAttribs();
EditSelection aNewSel; EditSelection aNewSel;
if ( pTxtObj ) if ( moTxtObj )
{ {
aNewSel = pEE->InsertText( *pTxtObj, aSel ); aNewSel = pEE->InsertText( *moTxtObj, aSel );
} }
else else
{ {
+3 -3
View File
@@ -253,8 +253,8 @@ private:
TransliterationFlags TransliterationFlags
nMode; nMode;
std::unique_ptr<EditTextObject> std::optional<EditTextObject>
pTxtObj; moTxtObj;
OUString aText; OUString aText;
public: public:
@@ -262,7 +262,7 @@ public:
virtual ~EditUndoTransliteration() override; virtual ~EditUndoTransliteration() override;
void SetText( const OUString& rText ) { aText = rText; } void SetText( const OUString& rText ) { aText = rText; }
void SetText( std::unique_ptr<EditTextObject> pObj ) { pTxtObj = std::move( pObj ); } void SetText( EditTextObject&& aObj ) { moTxtObj.emplace( std::move( aObj ) ); }
void SetNewSelection( const ESelection& rSel ) { aNewESel = rSel; } void SetNewSelection( const ESelection& rSel ) { aNewESel = rSel; }
virtual void Undo() override; virtual void Undo() override;
+1 -1
View File
@@ -834,7 +834,7 @@ EVControlBits EditView::GetControlWord() const
return getImpl().mnControl; return getImpl().mnControl;
} }
std::unique_ptr<EditTextObject> EditView::CreateTextObject() EditTextObject EditView::CreateTextObject()
{ {
return getImpEditEngine().CreateTextObject( getImpl().GetEditSelection() ); return getImpEditEngine().CreateTextObject( getImpl().GetEditSelection() );
} }
+5 -6
View File
@@ -672,7 +672,7 @@ private:
std::unique_ptr<EditUndoSetAttribs> CreateAttribUndo( EditSelection aSel, const SfxItemSet& rSet ); std::unique_ptr<EditUndoSetAttribs> CreateAttribUndo( EditSelection aSel, const SfxItemSet& rSet );
std::unique_ptr<EditTextObject> GetEmptyTextObject(); EditTextObject GetEmptyTextObject();
std::tuple<const ParaPortion*, const EditLine*, tools::Long> GetPortionAndLine(Point aDocPos); std::tuple<const ParaPortion*, const EditLine*, tools::Long> GetPortionAndLine(Point aDocPos);
EditPaM GetPaM( Point aDocPos, bool bSmart = true ); EditPaM GetPaM( Point aDocPos, bool bSmart = true );
@@ -685,8 +685,7 @@ private:
void ParaAttribsToCharAttribs( ContentNode* pNode ); void ParaAttribsToCharAttribs( ContentNode* pNode );
void GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttrib>& rLst ) const; void GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttrib>& rLst ) const;
std::unique_ptr<EditTextObject> EditTextObject CreateTextObject(EditSelection aSelection, SfxItemPool*, bool bAllowBigObjects = false, sal_Int32 nBigObjStart = 0);
CreateTextObject(EditSelection aSelection, SfxItemPool*, bool bAllowBigObjects = false, sal_Int32 nBigObjStart = 0);
EditSelection InsertTextObject( const EditTextObject&, EditPaM aPaM ); EditSelection InsertTextObject( const EditTextObject&, EditPaM aPaM );
EditSelection PasteText( css::uno::Reference< css::datatransfer::XTransferable > const & rxDataObj, const OUString& rBaseURL, const EditPaM& rPaM, bool bUseSpecial, SotClipboardFormatId format = SotClipboardFormatId::NONE); EditSelection PasteText( css::uno::Reference< css::datatransfer::XTransferable > const & rxDataObj, const OUString& rBaseURL, const EditPaM& rPaM, bool bUseSpecial, SotClipboardFormatId format = SotClipboardFormatId::NONE);
@@ -1037,9 +1036,9 @@ public:
void Write(SvStream& rOutput, EETextFormat eFormat, const EditSelection& rSel); void Write(SvStream& rOutput, EETextFormat eFormat, const EditSelection& rSel);
OString GetSimpleHtml() const; OString GetSimpleHtml() const;
std::unique_ptr<EditTextObject> CreateTextObject(sal_Int32 nPara, sal_Int32 nParas); EditTextObject CreateTextObject(sal_Int32 nPara, sal_Int32 nParas);
std::unique_ptr<EditTextObject> CreateTextObject(); EditTextObject CreateTextObject();
std::unique_ptr<EditTextObject> CreateTextObject(const EditSelection& rSel); EditTextObject CreateTextObject(const EditSelection& rSel);
void SetText( const EditTextObject& rTextObject ); void SetText( const EditTextObject& rTextObject );
EditSelection InsertText( const EditTextObject& rTextObject, EditSelection aSel ); EditSelection InsertText( const EditTextObject& rTextObject, EditSelection aSel );
+19 -23
View File
@@ -1146,7 +1146,7 @@ OString ImpEditEngine::GetSimpleHtml() const
return aOutput.makeStringAndClear(); return aOutput.makeStringAndClear();
} }
std::unique_ptr<EditTextObject> ImpEditEngine::GetEmptyTextObject() EditTextObject ImpEditEngine::GetEmptyTextObject()
{ {
EditSelection aEmptySel; EditSelection aEmptySel;
aEmptySel.Min() = maEditDoc.GetStartPaM(); aEmptySel.Min() = maEditDoc.GetStartPaM();
@@ -1155,27 +1155,23 @@ std::unique_ptr<EditTextObject> ImpEditEngine::GetEmptyTextObject()
return CreateTextObject( aEmptySel ); return CreateTextObject( aEmptySel );
} }
std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject( sal_Int32 nPara, sal_Int32 nParas ) EditTextObject ImpEditEngine::CreateTextObject( sal_Int32 nPara, sal_Int32 nParas )
{ {
DBG_ASSERT(0 <= nPara && nPara < maEditDoc.Count(), "CreateTextObject: Startpara out of Range"); assert(0 <= nPara && nPara < maEditDoc.Count() && "CreateTextObject: Startpara out of Range");
DBG_ASSERT(nParas <= maEditDoc.Count() - nPara, "CreateTextObject: Endpara out of Range"); assert(nParas <= maEditDoc.Count() - nPara && "CreateTextObject: Endpara out of Range");
ContentNode* pStartNode = maEditDoc.GetObject(nPara); ContentNode* pStartNode = maEditDoc.GetObject(nPara);
ContentNode* pEndNode = maEditDoc.GetObject(nPara + nParas - 1); ContentNode* pEndNode = maEditDoc.GetObject(nPara + nParas - 1);
DBG_ASSERT( pStartNode, "Start-Paragraph does not exist: CreateTextObject" ); assert( pStartNode && "Start-Paragraph does not exist: CreateTextObject" );
DBG_ASSERT( pEndNode, "End-Paragraph does not exist: CreateTextObject" ); assert( pEndNode && "End-Paragraph does not exist: CreateTextObject" );
if ( pStartNode && pEndNode ) EditSelection aTmpSel;
{ aTmpSel.Min() = EditPaM( pStartNode, 0 );
EditSelection aTmpSel; aTmpSel.Max() = EditPaM( pEndNode, pEndNode->Len() );
aTmpSel.Min() = EditPaM( pStartNode, 0 ); return CreateTextObject(aTmpSel);
aTmpSel.Max() = EditPaM( pEndNode, pEndNode->Len() );
return CreateTextObject(aTmpSel);
}
return nullptr;
} }
std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject() EditTextObject ImpEditEngine::CreateTextObject()
{ {
EditSelection aCompleteSelection; EditSelection aCompleteSelection;
aCompleteSelection.Min() = maEditDoc.GetStartPaM(); aCompleteSelection.Min() = maEditDoc.GetStartPaM();
@@ -1184,12 +1180,12 @@ std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject()
return CreateTextObject( aCompleteSelection ); return CreateTextObject( aCompleteSelection );
} }
std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject(const EditSelection& rSel) EditTextObject ImpEditEngine::CreateTextObject(const EditSelection& rSel)
{ {
return CreateTextObject(rSel, &maEditDoc.GetItemPool(), maStatus.AllowBigObjects(), mnBigTextObjectStart); return CreateTextObject(rSel, &maEditDoc.GetItemPool(), maStatus.AllowBigObjects(), mnBigTextObjectStart);
} }
std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject( EditSelection aSel, SfxItemPool* pPool, bool bAllowBigObjects, sal_Int32 nBigObjectStart ) EditTextObject ImpEditEngine::CreateTextObject( EditSelection aSel, SfxItemPool* pPool, bool bAllowBigObjects, sal_Int32 nBigObjectStart )
{ {
sal_Int32 nStartNode, nEndNode; sal_Int32 nStartNode, nEndNode;
sal_Int32 nTextPortions = 0; sal_Int32 nTextPortions = 0;
@@ -1205,8 +1201,8 @@ std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject( EditSelection a
// (Only the name and family, template itself must be in App!) // (Only the name and family, template itself must be in App!)
const MapUnit eMapUnit = maEditDoc.GetItemPool().GetMetric(DEF_METRIC); const MapUnit eMapUnit = maEditDoc.GetItemPool().GetMetric(DEF_METRIC);
auto pTxtObj(std::make_unique<EditTextObject>(pPool, eMapUnit, GetVertical(), GetRotation(), EditTextObject aTxtObj(pPool, eMapUnit, GetVertical(), GetRotation(),
GetItemScriptType(aSel))); GetItemScriptType(aSel));
// iterate over the paragraphs ... // iterate over the paragraphs ...
sal_Int32 nNode; sal_Int32 nNode;
@@ -1231,7 +1227,7 @@ std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject( EditSelection a
nEndPos = aSel.Max().GetIndex(); nEndPos = aSel.Max().GetIndex();
ContentInfo *pC = pTxtObj->CreateAndInsertContent(); ContentInfo *pC = aTxtObj.CreateAndInsertContent();
// The paragraph attributes ... // The paragraph attributes ...
pC->GetParaAttribs().Set( pNode->GetContentAttribs().GetItems() ); pC->GetParaAttribs().Set( pNode->GetContentAttribs().GetItems() );
@@ -1257,7 +1253,7 @@ std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject( EditSelection a
if ( bEmptyPara || if ( bEmptyPara ||
( ( pAttr->GetEnd() > nStartPos ) && ( pAttr->GetStart() < nEndPos ) ) ) ( ( pAttr->GetEnd() > nStartPos ) && ( pAttr->GetStart() < nEndPos ) ) )
{ {
XEditAttribute aX(*pTxtObj->GetPool(), *pAttr->GetItem(), pAttr->GetStart(), pAttr->GetEnd()); XEditAttribute aX(*aTxtObj.GetPool(), *pAttr->GetItem(), pAttr->GetStart(), pAttr->GetEnd());
// Possibly Correct ... // Possibly Correct ...
if ( ( nNode == nStartNode ) && ( nStartPos != 0 ) ) if ( ( nNode == nStartNode ) && ( nStartPos != 0 ) )
{ {
@@ -1291,7 +1287,7 @@ std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject( EditSelection a
XParaPortionList* pXList = new XParaPortionList(GetRefDevice(), GetColumnWidth(maPaperSize), XParaPortionList* pXList = new XParaPortionList(GetRefDevice(), GetColumnWidth(maPaperSize),
maScalingParameters.fFontX, maScalingParameters.fFontY, maScalingParameters.fFontX, maScalingParameters.fFontY,
maScalingParameters.fSpacingX, maScalingParameters.fSpacingY); maScalingParameters.fSpacingX, maScalingParameters.fSpacingY);
pTxtObj->SetPortionInfo(std::unique_ptr<XParaPortionList>(pXList)); aTxtObj.SetPortionInfo(std::unique_ptr<XParaPortionList>(pXList));
for ( nNode = nStartNode; nNode <= nEndNode; nNode++ ) for ( nNode = nStartNode; nNode <= nEndNode; nNode++ )
{ {
ParaPortion const& rParaPortion = GetParaPortions().getRef(nNode); ParaPortion const& rParaPortion = GetParaPortions().getRef(nNode);
@@ -1329,7 +1325,7 @@ std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject( EditSelection a
#endif #endif
} }
} }
return pTxtObj; return aTxtObj;
} }
void ImpEditEngine::SetText( const EditTextObject& rTextObject ) void ImpEditEngine::SetText( const EditTextObject& rTextObject )
+8 -8
View File
@@ -373,18 +373,18 @@ std::optional<OutlinerParaObject> Outliner::CreateParaObject( sal_Int32 nStartPa
if (nCount <= 0) if (nCount <= 0)
return std::nullopt; return std::nullopt;
std::unique_ptr<EditTextObject> xText = pEditEngine->CreateTextObject( nStartPara, nCount ); EditTextObject aText = pEditEngine->CreateTextObject( nStartPara, nCount );
const sal_Int32 nLastPara(nStartPara + nCount - 1); const sal_Int32 nLastPara(nStartPara + nCount - 1);
for(sal_Int32 nPara(nStartPara); nPara <= nLastPara; nPara++) for(sal_Int32 nPara(nStartPara); nPara <= nLastPara; nPara++)
{ {
xText->SetNumberingDepth(nPara - nStartPara, GetParagraph(nPara)->GetNumberingDepth()); aText.SetNumberingDepth(nPara - nStartPara, GetParagraph(nPara)->GetNumberingDepth());
xText->SetNumberingStartValue(nPara - nStartPara, GetParagraph(nPara)->GetNumberingStartValue()); aText.SetNumberingStartValue(nPara - nStartPara, GetParagraph(nPara)->GetNumberingStartValue());
xText->SetNumberingRestart(nPara - nStartPara, GetParagraph(nPara)->IsNumberingRestart()); aText.SetNumberingRestart(nPara - nStartPara, GetParagraph(nPara)->IsNumberingRestart());
} }
xText->ClearPortionInfo(); // tdf#147166 the PortionInfo is unwanted here aText.ClearPortionInfo(); // tdf#147166 the PortionInfo is unwanted here
OutlinerParaObject aPObj(std::move(xText)); OutlinerParaObject aPObj(std::move(aText));
aPObj.SetOutlinerMode(GetOutlinerMode()); aPObj.SetOutlinerMode(GetOutlinerMode());
return aPObj; return aPObj;
@@ -1996,8 +1996,8 @@ std::optional<NonOverflowingText> Outliner::GetNonOverflowingText() const
OutlinerParaObject Outliner::GetEmptyParaObject() const OutlinerParaObject Outliner::GetEmptyParaObject() const
{ {
std::unique_ptr<EditTextObject> pEmptyText = pEditEngine->GetEmptyTextObject(); EditTextObject aEmptyText = pEditEngine->GetEmptyTextObject();
OutlinerParaObject aPObj( std::move(pEmptyText) ); OutlinerParaObject aPObj( std::move(aEmptyText) );
aPObj.SetOutlinerMode(GetOutlinerMode()); aPObj.SetOutlinerMode(GetOutlinerMode());
return aPObj; return aPObj;
} }
+24 -46
View File
@@ -27,32 +27,10 @@
#include <o3tl/safeint.hxx> #include <o3tl/safeint.hxx>
#include <libxml/xmlwriter.h> #include <libxml/xmlwriter.h>
OutlinerParaObjData::OutlinerParaObjData( std::unique_ptr<EditTextObject> pEditTextObject ) :
mpEditTextObject(std::move(pEditTextObject))
{
}
OutlinerParaObjData::OutlinerParaObjData( const OutlinerParaObjData& r ):
mpEditTextObject(new EditTextObject(*r.mpEditTextObject))
{
}
OutlinerParaObjData::~OutlinerParaObjData() OutlinerParaObject::OutlinerParaObject( EditTextObject&& aTextObj ) :
{ mpImpl(std::move(aTextObj))
}
bool OutlinerParaObjData::operator==(const OutlinerParaObjData& rCandidate) const
{
return *mpEditTextObject == *rCandidate.mpEditTextObject;
}
bool OutlinerParaObjData::isWrongListEqual(const OutlinerParaObjData& rCompare) const
{
return mpEditTextObject->isWrongListEqual(*rCompare.mpEditTextObject);
}
OutlinerParaObject::OutlinerParaObject( std::unique_ptr<EditTextObject> xTextObj ) :
mpImpl(OutlinerParaObjData(std::move(xTextObj)))
{ {
} }
@@ -100,56 +78,56 @@ bool OutlinerParaObject::isWrongListEqual( const OutlinerParaObject& r ) const
OutlinerMode OutlinerParaObject::GetOutlinerMode() const OutlinerMode OutlinerParaObject::GetOutlinerMode() const
{ {
return mpImpl->mpEditTextObject->GetUserType(); return mpImpl->GetUserType();
} }
void OutlinerParaObject::SetOutlinerMode(OutlinerMode nNew) void OutlinerParaObject::SetOutlinerMode(OutlinerMode nNew)
{ {
// create a const pointer to avoid an early call to // create a const pointer to avoid an early call to
// make_unique() in the dereference of mpImpl // make_unique() in the dereference of mpImpl
const ::o3tl::cow_wrapper< OutlinerParaObjData >* pImpl = &mpImpl; const ::o3tl::cow_wrapper< EditTextObject >* pImpl = &mpImpl;
if ( ( *pImpl )->mpEditTextObject->GetUserType() != nNew ) if ( ( *pImpl )->GetUserType() != nNew )
{ {
mpImpl->mpEditTextObject->SetUserType(nNew); mpImpl->SetUserType(nNew);
} }
} }
bool OutlinerParaObject::IsEffectivelyVertical() const bool OutlinerParaObject::IsEffectivelyVertical() const
{ {
return mpImpl->mpEditTextObject->IsEffectivelyVertical(); return mpImpl->IsEffectivelyVertical();
} }
bool OutlinerParaObject::GetVertical() const bool OutlinerParaObject::GetVertical() const
{ {
return mpImpl->mpEditTextObject->GetVertical(); return mpImpl->GetVertical();
} }
bool OutlinerParaObject::IsTopToBottom() const bool OutlinerParaObject::IsTopToBottom() const
{ {
return mpImpl->mpEditTextObject->IsTopToBottom(); return mpImpl->IsTopToBottom();
} }
void OutlinerParaObject::SetVertical(bool bNew) void OutlinerParaObject::SetVertical(bool bNew)
{ {
const ::o3tl::cow_wrapper< OutlinerParaObjData >* pImpl = &mpImpl; const ::o3tl::cow_wrapper< EditTextObject >* pImpl = &mpImpl;
if ( ( *pImpl )->mpEditTextObject->IsEffectivelyVertical() != bNew) if ( ( *pImpl )->IsEffectivelyVertical() != bNew)
{ {
mpImpl->mpEditTextObject->SetVertical(bNew); mpImpl->SetVertical(bNew);
} }
} }
void OutlinerParaObject::SetRotation(TextRotation nRotation) void OutlinerParaObject::SetRotation(TextRotation nRotation)
{ {
mpImpl->mpEditTextObject->SetRotation(nRotation); mpImpl->SetRotation(nRotation);
} }
TextRotation OutlinerParaObject::GetRotation() const TextRotation OutlinerParaObject::GetRotation() const
{ {
return mpImpl->mpEditTextObject->GetRotation(); return mpImpl->GetRotation();
} }
sal_Int32 OutlinerParaObject::Count() const sal_Int32 OutlinerParaObject::Count() const
{ {
size_t nSize = mpImpl->mpEditTextObject->GetParagraphCount(); size_t nSize = mpImpl->GetParagraphCount();
if (nSize > o3tl::make_unsigned(EE_PARA_MAX)) if (nSize > o3tl::make_unsigned(EE_PARA_MAX))
{ {
SAL_WARN( "editeng", "OutlinerParaObject::Count - overflow " << nSize); SAL_WARN( "editeng", "OutlinerParaObject::Count - overflow " << nSize);
@@ -160,39 +138,39 @@ sal_Int32 OutlinerParaObject::Count() const
sal_Int16 OutlinerParaObject::GetNumberingDepth(sal_Int32 nPara) const sal_Int16 OutlinerParaObject::GetNumberingDepth(sal_Int32 nPara) const
{ {
return mpImpl->mpEditTextObject->GetNumberingDepth(nPara); return mpImpl->GetNumberingDepth(nPara);
} }
sal_Int16 OutlinerParaObject::GetNumberingStartValue(sal_Int32 nPara) const sal_Int16 OutlinerParaObject::GetNumberingStartValue(sal_Int32 nPara) const
{ {
return mpImpl->mpEditTextObject->GetNumberingStartValue(nPara); return mpImpl->GetNumberingStartValue(nPara);
} }
bool OutlinerParaObject::IsNumberingRestart(sal_Int32 nPara) const bool OutlinerParaObject::IsNumberingRestart(sal_Int32 nPara) const
{ {
return mpImpl->mpEditTextObject->IsNumberingRestart(nPara); return mpImpl->IsNumberingRestart(nPara);
} }
const EditTextObject& OutlinerParaObject::GetTextObject() const const EditTextObject& OutlinerParaObject::GetTextObject() const
{ {
return *mpImpl->mpEditTextObject; return *mpImpl;
} }
void OutlinerParaObject::ClearPortionInfo() void OutlinerParaObject::ClearPortionInfo()
{ {
mpImpl->mpEditTextObject->ClearPortionInfo(); mpImpl->ClearPortionInfo();
} }
bool OutlinerParaObject::ChangeStyleSheets(std::u16string_view rOldName, bool OutlinerParaObject::ChangeStyleSheets(std::u16string_view rOldName,
SfxStyleFamily eOldFamily, const OUString& rNewName, SfxStyleFamily eNewFamily) SfxStyleFamily eOldFamily, const OUString& rNewName, SfxStyleFamily eNewFamily)
{ {
return mpImpl->mpEditTextObject->ChangeStyleSheets(rOldName, eOldFamily, rNewName, eNewFamily); return mpImpl->ChangeStyleSheets(rOldName, eOldFamily, rNewName, eNewFamily);
} }
void OutlinerParaObject::ChangeStyleSheetName(SfxStyleFamily eFamily, void OutlinerParaObject::ChangeStyleSheetName(SfxStyleFamily eFamily,
std::u16string_view rOldName, const OUString& rNewName) std::u16string_view rOldName, const OUString& rNewName)
{ {
mpImpl->mpEditTextObject->ChangeStyleSheetName(eFamily, rOldName, rNewName); mpImpl->ChangeStyleSheetName(eFamily, rOldName, rNewName);
} }
void OutlinerParaObject::SetStyleSheets(sal_uInt16 nLevel, const OUString& rNewName, void OutlinerParaObject::SetStyleSheets(sal_uInt16 nLevel, const OUString& rNewName,
@@ -208,7 +186,7 @@ void OutlinerParaObject::SetStyleSheets(sal_uInt16 nLevel, const OUString& rNewN
{ {
if(GetNumberingDepth(--nDecrementer) == nLevel) if(GetNumberingDepth(--nDecrementer) == nLevel)
{ {
mpImpl->mpEditTextObject->SetStyleSheet(nDecrementer, rNewName, rNewFamily); mpImpl->SetStyleSheet(nDecrementer, rNewName, rNewFamily);
} }
} }
} }
@@ -218,7 +196,7 @@ void OutlinerParaObject::dumpAsXml(xmlTextWriterPtr pWriter) const
{ {
(void)xmlTextWriterStartElement(pWriter, BAD_CAST("OutlinerParaObject")); (void)xmlTextWriterStartElement(pWriter, BAD_CAST("OutlinerParaObject"));
(void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", this); (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", this);
mpImpl->mpEditTextObject->dumpAsXml(pWriter); mpImpl->dumpAsXml(pWriter);
(void)xmlTextWriterEndElement(pWriter); (void)xmlTextWriterEndElement(pWriter);
} }
+2 -2
View File
@@ -513,8 +513,8 @@ void SvxEditEngineForwarder::CopyText(const SvxTextForwarder& rSource)
const SvxEditEngineForwarder* pSourceForwarder = dynamic_cast< const SvxEditEngineForwarder* >( &rSource ); const SvxEditEngineForwarder* pSourceForwarder = dynamic_cast< const SvxEditEngineForwarder* >( &rSource );
if( !pSourceForwarder ) if( !pSourceForwarder )
return; return;
std::unique_ptr<EditTextObject> pNewTextObject = pSourceForwarder->rEditEngine.CreateTextObject(); EditTextObject aNewTextObject = pSourceForwarder->rEditEngine.CreateTextObject();
rEditEngine.SetText( *pNewTextObject ); rEditEngine.SetText( aNewTextObject );
} }
+2 -4
View File
@@ -78,13 +78,11 @@ namespace frm
RichTextEngine* pClone( nullptr ); RichTextEngine* pClone( nullptr );
{ {
SolarMutexGuard aGuard; SolarMutexGuard aGuard;
std::unique_ptr<EditTextObject> pMyText(CreateTextObject()); EditTextObject aMyText(CreateTextObject());
OSL_ENSURE( pMyText, "RichTextEngine::Clone: CreateTextObject returned nonsense!" );
pClone = Create(); pClone = Create();
if ( pMyText ) pClone->SetText( aMyText );
pClone->SetText( *pMyText );
} }
return pClone; return pClone;
+4 -4
View File
@@ -306,10 +306,10 @@ public:
void Clear(); void Clear();
void SetText( const OUString& rStr ); void SetText( const OUString& rStr );
std::unique_ptr<EditTextObject> CreateTextObject(); EditTextObject CreateTextObject();
SAL_DLLPRIVATE std::unique_ptr<EditTextObject> GetEmptyTextObject(); SAL_DLLPRIVATE EditTextObject GetEmptyTextObject();
std::unique_ptr<EditTextObject> CreateTextObject( sal_Int32 nPara, sal_Int32 nParas = 1 ); EditTextObject CreateTextObject( sal_Int32 nPara, sal_Int32 nParas = 1 );
std::unique_ptr<EditTextObject> CreateTextObject( const ESelection& rESelection ); EditTextObject CreateTextObject( const ESelection& rESelection );
void SetText( const EditTextObject& rTextObject ); void SetText( const EditTextObject& rTextObject );
SAL_DLLPRIVATE void RemoveParagraph(sal_Int32 nPara); SAL_DLLPRIVATE void RemoveParagraph(sal_Int32 nPara);
+3
View File
@@ -63,8 +63,11 @@ public:
EditTextObject(SfxItemPool* pPool, MapUnit eDefaultMetric, bool bVertical, EditTextObject(SfxItemPool* pPool, MapUnit eDefaultMetric, bool bVertical,
TextRotation eRotation, SvtScriptType eScriptType); TextRotation eRotation, SvtScriptType eScriptType);
EditTextObject( const EditTextObject& r ); EditTextObject( const EditTextObject& r );
EditTextObject( EditTextObject&& r ) noexcept;
~EditTextObject(); ~EditTextObject();
EditTextObject& operator=(EditTextObject&&);
/** /**
* Set paragraph strings to the shared string pool. * Set paragraph strings to the shared string pool.
* *
+1 -1
View File
@@ -301,7 +301,7 @@ public:
void SetControlWord( EVControlBits nWord ); void SetControlWord( EVControlBits nWord );
EVControlBits GetControlWord() const; EVControlBits GetControlWord() const;
std::unique_ptr<EditTextObject> CreateTextObject(); EditTextObject CreateTextObject();
void InsertText( const EditTextObject& rTextObject ); void InsertText( const EditTextObject& rTextObject );
void InsertText( css::uno::Reference< css::datatransfer::XTransferable > const & xDataObj, const OUString& rBaseURL, bool bUseSpecial ); void InsertText( css::uno::Reference< css::datatransfer::XTransferable > const & xDataObj, const OUString& rBaseURL, bool bUseSpecial );
+3 -34
View File
@@ -20,6 +20,7 @@
#pragma once #pragma once
#include <editeng/editengdllapi.h> #include <editeng/editengdllapi.h>
#include <editeng/editobj.hxx>
#include <rtl/ustring.hxx> #include <rtl/ustring.hxx>
#include <svl/poolitem.hxx> #include <svl/poolitem.hxx>
#include <svl/style.hxx> #include <svl/style.hxx>
@@ -27,42 +28,10 @@
#include <stdexcept> #include <stdexcept>
#include <memory> #include <memory>
class EditTextObject;
enum class OutlinerMode;
enum class TextRotation;
/**
* This is the guts of OutlinerParaObject, refcounted and shared among
* multiple instances of OutlinerParaObject.
*/
struct EDITENG_DLLPUBLIC OutlinerParaObjData
{
// data members
std::unique_ptr<EditTextObject> mpEditTextObject;
// constructor
OutlinerParaObjData( std::unique_ptr<EditTextObject> pEditTextObject );
OutlinerParaObjData( const OutlinerParaObjData& r );
OutlinerParaObjData( OutlinerParaObjData&& r ) = default;
// assignment operator
OutlinerParaObjData& operator=(const OutlinerParaObjData& rCandidate) = delete;
// destructor
~OutlinerParaObjData();
bool operator==(const OutlinerParaObjData& rCandidate) const;
// #i102062#
bool isWrongListEqual(const OutlinerParaObjData& rCompare) const;
};
class EDITENG_DLLPUBLIC OutlinerParaObject class EDITENG_DLLPUBLIC OutlinerParaObject
{ {
friend class std::optional<OutlinerParaObject>; friend class std::optional<OutlinerParaObject>;
::o3tl::cow_wrapper< OutlinerParaObjData > mpImpl; ::o3tl::cow_wrapper< EditTextObject > mpImpl;
OutlinerParaObject(std::nullopt_t) noexcept OutlinerParaObject(std::nullopt_t) noexcept
: mpImpl(std::nullopt) {} : mpImpl(std::nullopt) {}
@@ -71,7 +40,7 @@ friend class std::optional<OutlinerParaObject>;
public: public:
// constructors/destructor // constructors/destructor
OutlinerParaObject(std::unique_ptr<EditTextObject>); OutlinerParaObject(EditTextObject&&);
OutlinerParaObject( const OutlinerParaObject&); OutlinerParaObject( const OutlinerParaObject&);
OutlinerParaObject(OutlinerParaObject&&) noexcept; OutlinerParaObject(OutlinerParaObject&&) noexcept;
~OutlinerParaObject(); ~OutlinerParaObject();
+2 -1
View File
@@ -51,7 +51,8 @@ public:
SC_DLLPUBLIC void set( double fValue ); SC_DLLPUBLIC void set( double fValue );
SC_DLLPUBLIC void set( const svl::SharedString& rStr ); SC_DLLPUBLIC void set( const svl::SharedString& rStr );
void set( const EditTextObject& rEditText ); SC_DLLPUBLIC void set( const EditTextObject& rEditText );
SC_DLLPUBLIC void set( EditTextObject&& rEditText );
SC_DLLPUBLIC void set( std::unique_ptr<EditTextObject> ); SC_DLLPUBLIC void set( std::unique_ptr<EditTextObject> );
SC_DLLPUBLIC void set( ScFormulaCell* pFormula ); SC_DLLPUBLIC void set( ScFormulaCell* pFormula );
+3 -1
View File
@@ -390,9 +390,11 @@ public:
SCROW nRow, SCTAB nTab, const OUString& rString, formula::FormulaGrammar::AddressConvention eConv, SCROW nRow, SCTAB nTab, const OUString& rString, formula::FormulaGrammar::AddressConvention eConv,
const ScSetStringParam* pParam = nullptr ); const ScSetStringParam* pParam = nullptr );
void SetEditText( SCROW nRow, std::unique_ptr<EditTextObject> pEditText ); void SetEditText( SCROW nRow, std::unique_ptr<EditTextObject> aEditText );
void SetEditText( SCROW nRow, EditTextObject aEditText );
void SetEditText( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, std::unique_ptr<EditTextObject> pEditText ); void SetEditText( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, std::unique_ptr<EditTextObject> pEditText );
void SetEditText( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, const EditTextObject& rEditText ); void SetEditText( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, const EditTextObject& rEditText );
void SetEditText( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, EditTextObject&& rEditText );
void SetEditText( SCROW nRow, const EditTextObject& rEditText, const SfxItemPool* pEditPool ); void SetEditText( SCROW nRow, const EditTextObject& rEditText, const SfxItemPool* pEditPool );
void SetFormula( SCROW nRow, const ScTokenArray& rArray, formula::FormulaGrammar::Grammar eGram ); void SetFormula( SCROW nRow, const ScTokenArray& rArray, formula::FormulaGrammar::Grammar eGram );
void SetFormula( SCROW nRow, const OUString& rFormula, formula::FormulaGrammar::Grammar eGram ); void SetFormula( SCROW nRow, const OUString& rFormula, formula::FormulaGrammar::Grammar eGram );
+2 -1
View File
@@ -1328,6 +1328,7 @@ public:
* This is very important.</p> * This is very important.</p>
*/ */
SC_DLLPUBLIC bool SetEditText( const ScAddress& rPos, std::unique_ptr<EditTextObject> pEditText ); SC_DLLPUBLIC bool SetEditText( const ScAddress& rPos, std::unique_ptr<EditTextObject> pEditText );
SC_DLLPUBLIC bool SetEditText( const ScAddress& rPos, EditTextObject aEditText );
void SetEditText( const ScAddress& rPos, const EditTextObject& rEditText, const SfxItemPool* pEditPool ); void SetEditText( const ScAddress& rPos, const EditTextObject& rEditText, const SfxItemPool* pEditPool );
SC_DLLPUBLIC void SetEditText( const ScAddress& rPos, const OUString& rStr ); SC_DLLPUBLIC void SetEditText( const ScAddress& rPos, const OUString& rStr );
SC_DLLPUBLIC SCROW GetFirstEditTextRow( const ScRange& rRange ) const; SC_DLLPUBLIC SCROW GetFirstEditTextRow( const ScRange& rRange ) const;
@@ -2777,7 +2778,7 @@ public:
SC_DLLPUBLIC ScFieldEditEngine& GetEditEngine(); SC_DLLPUBLIC ScFieldEditEngine& GetEditEngine();
SC_DLLPUBLIC ScNoteEditEngine& GetNoteEngine(); SC_DLLPUBLIC ScNoteEditEngine& GetNoteEngine();
std::unique_ptr<EditTextObject> CreateSharedStringTextObject( const svl::SharedString& rSS ); EditTextObject CreateSharedStringTextObject( const svl::SharedString& rSS );
std::unique_ptr<ScRefreshTimerControl> const & GetRefreshTimerControlAddress() const std::unique_ptr<ScRefreshTimerControl> const & GetRefreshTimerControlAddress() const
{ return pRefreshTimerControl; } { return pRefreshTimerControl; }
+2 -2
View File
@@ -64,12 +64,12 @@ public:
*/ */
SC_DLLPUBLIC static OUString GetString( const EditTextObject& rEditText, const ScDocument& rDoc ); SC_DLLPUBLIC static OUString GetString( const EditTextObject& rEditText, const ScDocument& rDoc );
static std::unique_ptr<EditTextObject> CreateURLObjectFromURL( static EditTextObject CreateURLObjectFromURL(
ScDocument& rDoc, const OUString& rURL, const OUString& rText ); ScDocument& rDoc, const OUString& rURL, const OUString& rText );
static void RemoveCharAttribs( EditTextObject& rEditText, const ScPatternAttr& rAttr ); static void RemoveCharAttribs( EditTextObject& rEditText, const ScPatternAttr& rAttr );
static std::unique_ptr<EditTextObject> Clone( const EditTextObject& rSrc, ScDocument& rDestDoc ); static EditTextObject Clone( const EditTextObject& rSrc, ScDocument& rDestDoc );
static OUString GetCellFieldValue( static OUString GetCellFieldValue(
const SvxFieldData& rFieldData, const ScDocument* pDoc, std::optional<Color>* ppTextColor, std::optional<FontLineStyle>* ppFldLineStyle ); const SvxFieldData& rFieldData, const ScDocument* pDoc, std::optional<Color>* ppTextColor, std::optional<FontLineStyle>* ppFldLineStyle );
+1 -1
View File
@@ -475,7 +475,7 @@ public:
void MarkAsSpilled(); void MarkAsSpilled();
SC_DLLPUBLIC bool IsHyperLinkCell() const; SC_DLLPUBLIC bool IsHyperLinkCell() const;
std::unique_ptr<EditTextObject> CreateURLObject(); EditTextObject CreateURLObject();
SC_DLLPUBLIC void GetURLResult( OUString& rURL, OUString& rCellText ); SC_DLLPUBLIC void GetURLResult( OUString& rURL, OUString& rCellText );
/** Determines whether or not the result string contains more than one paragraph */ /** Determines whether or not the result string contains more than one paragraph */
+1 -1
View File
@@ -310,7 +310,7 @@ public:
virtual ~ScEditEngineTextObj() noexcept override; virtual ~ScEditEngineTextObj() noexcept override;
void SetText( const EditTextObject& rTextObject ); void SetText( const EditTextObject& rTextObject );
std::unique_ptr<EditTextObject> CreateTextObject(); EditTextObject CreateTextObject();
}; };
// ScCellTextData: shared data between sub objects of a cell text object // ScCellTextData: shared data between sub objects of a cell text object
+1 -1
View File
@@ -4338,7 +4338,7 @@ CPPUNIT_TEST_FIXTURE(SyncTest, testSync_AutoFilterRangeExpansionFromSheetView)
ScModelObj*) { ScModelObj*) {
ScFieldEditEngine& rEE = rDocument.GetEditEngine(); ScFieldEditEngine& rEE = rDocument.GetEditEngine();
rEE.SetTextCurrentDefaults(u"6"_ustr); rEE.SetTextCurrentDefaults(u"6"_ustr);
rDocShell.GetDocFunc().SetEditCell(rPos, *rEE.CreateTextObject(), true); rDocShell.GetDocFunc().SetEditCell(rPos, rEE.CreateTextObject(), true);
}, },
true }, true },
}); });
+3 -3
View File
@@ -453,11 +453,11 @@ bool ScPageHFItem::PutValue( const uno::Any& rVal, sal_uInt8 /* nMemberId */ )
// no Text with Null are left // no Text with Null are left
ScEditEngineDefaulter aEngine( EditEngine::CreatePool().get(), true ); ScEditEngineDefaulter aEngine( EditEngine::CreatePool().get(), true );
if (!pLeftArea) if (!pLeftArea)
pLeftArea = aEngine.CreateTextObject(); pLeftArea = std::make_unique<EditTextObject>(aEngine.CreateTextObject());
if (!pCenterArea) if (!pCenterArea)
pCenterArea = aEngine.CreateTextObject(); pCenterArea = std::make_unique<EditTextObject>(aEngine.CreateTextObject());
if (!pRightArea) if (!pRightArea)
pRightArea = aEngine.CreateTextObject(); pRightArea = std::make_unique<EditTextObject>(aEngine.CreateTextObject());
} }
bRet = true; bRet = true;
+8 -2
View File
@@ -345,6 +345,12 @@ void ScCellValue::set( const EditTextObject& rEditText )
maData = new EditTextObject(rEditText); maData = new EditTextObject(rEditText);
} }
void ScCellValue::set( EditTextObject&& rEditText )
{
clear();
maData = new EditTextObject(std::move(rEditText));
}
void ScCellValue::set( std::unique_ptr<EditTextObject> xEditText ) void ScCellValue::set( std::unique_ptr<EditTextObject> xEditText )
{ {
clear(); clear();
@@ -402,14 +408,14 @@ void ScCellValue::assign(const ScCellValue& rOther, ScDocument& rDestDoc, ScClon
if (bNewControl) if (bNewControl)
rEngine.SetControlWord(nControl | nSpellControl); rEngine.SetControlWord(nControl | nSpellControl);
rEngine.SetTextCurrentDefaults(*rOther.getEditText()); rEngine.SetTextCurrentDefaults(*rOther.getEditText());
maData = rEngine.CreateTextObject().release(); maData = new EditTextObject(rEngine.CreateTextObject());
if (bNewControl) if (bNewControl)
rEngine.SetControlWord(nControl); rEngine.SetControlWord(nControl);
} }
else else
{ {
rEngine.SetTextCurrentDefaults(*rOther.getEditText()); rEngine.SetTextCurrentDefaults(*rOther.getEditText());
maData = rEngine.CreateTextObject().release(); maData = new EditTextObject(rEngine.CreateTextObject());
} }
} }
break; break;
+2 -2
View File
@@ -299,9 +299,9 @@ void CopyFromClipContext::setSingleCell( const ScAddress& rSrcPos, const ScColum
// Turn this into a string or edit cell. // Turn this into a string or edit cell.
if (rSrcCell.getFormula()->IsMultilineResult()) if (rSrcCell.getFormula()->IsMultilineResult())
{ {
std::unique_ptr<EditTextObject> pObj(mrDestDoc.CreateSharedStringTextObject( EditTextObject aObj(mrDestDoc.CreateSharedStringTextObject(
rSrcCell.getFormula()->GetString())); rSrcCell.getFormula()->GetString()));
rSrcCell.set(*pObj); rSrcCell.set(std::move(aObj));
} }
else else
rSrcCell.set(rSrcCell.getFormula()->GetString()); rSrcCell.set(rSrcCell.getFormula()->GetString());
+4 -4
View File
@@ -785,7 +785,7 @@ public:
std::vector<EditTextObject*> aCloned; std::vector<EditTextObject*> aCloned;
aCloned.reserve(nDataSize); aCloned.reserve(nDataSize);
for (; it != itEnd; ++it) for (; it != itEnd; ++it)
aCloned.push_back(ScEditUtil::Clone(**it, mrDestCol.GetDoc()).release()); aCloned.push_back(new EditTextObject(ScEditUtil::Clone(**it, mrDestCol.GetDoc())));
maDestPos.miCellPos = mrDestCol.GetCellStore().set( maDestPos.miCellPos = mrDestCol.GetCellStore().set(
maDestPos.miCellPos, nTopRow, aCloned.begin(), aCloned.end()); maDestPos.miCellPos, nTopRow, aCloned.begin(), aCloned.end());
@@ -1040,7 +1040,7 @@ void ScColumn::CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDes
if (&rDocument == &rDestCol.GetDoc()) if (&rDocument == &rDestCol.GetDoc())
rDestCol.maCells.set(nDestRow, new EditTextObject(*p)); rDestCol.maCells.set(nDestRow, new EditTextObject(*p));
else else
rDestCol.maCells.set(nDestRow, ScEditUtil::Clone(*p, rDestCol.GetDoc()).release()); rDestCol.maCells.set(nDestRow, new EditTextObject(ScEditUtil::Clone(*p, rDestCol.GetDoc())));
} }
break; break;
case sc::element_type_formula: case sc::element_type_formula:
@@ -1340,7 +1340,7 @@ class CopyByCloneHandler
EditEngine& rEngine = mrDestCol.GetDoc().GetEditEngine(); EditEngine& rEngine = mrDestCol.GetDoc().GetEditEngine();
rEngine.SetText(aStr.getString()); rEngine.SetText(aStr.getString());
maDestPos.miCellPos = maDestPos.miCellPos =
mrDestCol.GetCellStore().set(maDestPos.miCellPos, nRow, rEngine.CreateTextObject().release()); mrDestCol.GetCellStore().set(maDestPos.miCellPos, nRow, new EditTextObject(rEngine.CreateTextObject()));
} }
else else
{ {
@@ -1483,7 +1483,7 @@ public:
std::vector<EditTextObject*> aCloned; std::vector<EditTextObject*> aCloned;
aCloned.reserve(nDataSize); aCloned.reserve(nDataSize);
for (; it != itEnd; ++it) for (; it != itEnd; ++it)
aCloned.push_back(ScEditUtil::Clone(**it, mrDestCol.GetDoc()).release()); aCloned.push_back(new EditTextObject(ScEditUtil::Clone(**it, mrDestCol.GetDoc())));
maDestPos.miCellPos = mrDestCol.GetCellStore().set( maDestPos.miCellPos = mrDestCol.GetCellStore().set(
maDestPos.miCellPos, nRow, aCloned.begin(), aCloned.end()); maDestPos.miCellPos, nRow, aCloned.begin(), aCloned.end());
+1 -1
View File
@@ -1249,7 +1249,7 @@ public:
// Overwrite the existing object. // Overwrite the existing object.
delete pObj; delete pObj;
pObj = mpEngine->CreateTextObject().release(); pObj = new EditTextObject(mpEngine->CreateTextObject());
} }
else // create String else // create String
{ {
+21
View File
@@ -2358,6 +2358,11 @@ bool ScColumn::SetString( SCROW nRow, SCTAB nTabP, const OUString& rString,
return bNumFmtSet; return bNumFmtSet;
} }
void ScColumn::SetEditText( SCROW nRow, EditTextObject aEditText )
{
SetEditText(nRow, std::make_unique<EditTextObject>(std::move(aEditText)));
}
void ScColumn::SetEditText( SCROW nRow, std::unique_ptr<EditTextObject> pEditText ) void ScColumn::SetEditText( SCROW nRow, std::unique_ptr<EditTextObject> pEditText )
{ {
if (!pEditText) if (!pEditText)
@@ -2409,6 +2414,22 @@ void ScColumn::SetEditText( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, cons
SetEditText(rBlockPos, nRow, rEngine.CreateTextObject()); SetEditText(rBlockPos, nRow, rEngine.CreateTextObject());
} }
void ScColumn::SetEditText( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, EditTextObject&& rEditText )
{
if (GetDoc().GetEditEnginePool() == rEditText.GetPool())
{
SetEditText(rBlockPos, nRow, std::make_unique<EditTextObject>(std::move(rEditText)));
return;
}
// rats, yet another "spool"
// Sadly there is no other way to change the Pool than to
// "spool" the Object through a corresponding Engine
EditEngine& rEngine = GetDoc().GetEditEngine();
rEngine.SetText(std::move(rEditText));
SetEditText(rBlockPos, nRow, rEngine.CreateTextObject());
}
void ScColumn::SetEditText( SCROW nRow, const EditTextObject& rEditText, const SfxItemPool* pEditPool ) void ScColumn::SetEditText( SCROW nRow, const EditTextObject& rEditText, const SfxItemPool* pEditPool )
{ {
if (pEditPool && GetDoc().GetEditEnginePool() == pEditPool) if (pEditPool && GetDoc().GetEditEnginePool() == pEditPool)
+2 -2
View File
@@ -505,8 +505,8 @@ public:
case sc::FormulaResultValue::String: case sc::FormulaResultValue::String:
if (aRes.mbMultiLine) if (aRes.mbMultiLine)
{ {
std::unique_ptr<EditTextObject> pObj(mrDoc.CreateSharedStringTextObject(aRes.maString)); EditTextObject aObj(mrDoc.CreateSharedStringTextObject(aRes.maString));
maResValues.setValue(nRow, std::move(pObj)); maResValues.setValue(nRow, std::make_unique<EditTextObject>(std::move(aObj)));
} }
else else
{ {
+4 -4
View File
@@ -544,15 +544,15 @@ ScNoteEditEngine& ScDocument::GetNoteEngine()
return *mpNoteEngine; return *mpNoteEngine;
} }
std::unique_ptr<EditTextObject> ScDocument::CreateSharedStringTextObject( const svl::SharedString& rSS ) EditTextObject ScDocument::CreateSharedStringTextObject( const svl::SharedString& rSS )
{ {
/* TODO: Add shared string support to the edit engine to make this process /* TODO: Add shared string support to the edit engine to make this process
* simpler. */ * simpler. */
ScFieldEditEngine& rEngine = GetEditEngine(); ScFieldEditEngine& rEngine = GetEditEngine();
rEngine.SetTextCurrentDefaults( rSS.getString()); rEngine.SetTextCurrentDefaults( rSS.getString());
std::unique_ptr<EditTextObject> pObj( rEngine.CreateTextObject()); EditTextObject aObj( rEngine.CreateTextObject());
pObj->NormalizeString( GetSharedStringPool()); aObj.NormalizeString( GetSharedStringPool());
return pObj; return aObj;
} }
void ScDocument::ResetClip( ScDocument* pSourceDoc, const ScMarkData* pMarks ) void ScDocument::ResetClip( ScDocument* pSourceDoc, const ScMarkData* pMarks )
+7 -2
View File
@@ -3718,6 +3718,11 @@ bool ScDocument::SetString(
return SetString(rPos.Col(), rPos.Row(), rPos.Tab(), rString, pParam); return SetString(rPos.Col(), rPos.Row(), rPos.Tab(), rString, pParam);
} }
bool ScDocument::SetEditText( const ScAddress& rPos, EditTextObject aEditText )
{
return SetEditText(rPos, std::make_unique<EditTextObject>(std::move(aEditText)));
}
bool ScDocument::SetEditText( const ScAddress& rPos, std::unique_ptr<EditTextObject> pEditText ) bool ScDocument::SetEditText( const ScAddress& rPos, std::unique_ptr<EditTextObject> pEditText )
{ {
if (ScTable* pTable = FetchTable(rPos.Tab())) if (ScTable* pTable = FetchTable(rPos.Tab()))
@@ -3737,7 +3742,7 @@ void ScDocument::SetEditText( const ScAddress& rPos, const OUString& rStr )
{ {
ScFieldEditEngine& rEngine = GetEditEngine(); ScFieldEditEngine& rEngine = GetEditEngine();
rEngine.SetTextCurrentDefaults(rStr); rEngine.SetTextCurrentDefaults(rStr);
pTable->SetEditText(rPos.Col(), rPos.Row(), rEngine.CreateTextObject()); pTable->SetEditText(rPos.Col(), rPos.Row(), std::make_unique<EditTextObject>(rEngine.CreateTextObject()));
} }
} }
@@ -3758,7 +3763,7 @@ void ScDocument::SetTextCell(const ScAddress& rPos, const OUString& rStr,
{ {
ScFieldEditEngine& rEngine = GetEditEngine(); ScFieldEditEngine& rEngine = GetEditEngine();
rEngine.SetTextCurrentDefaults(rStr); rEngine.SetTextCurrentDefaults(rStr);
pTable->SetEditText(rPos.Col(), rPos.Row(), rEngine.CreateTextObject()); pTable->SetEditText(rPos.Col(), rPos.Row(), std::make_unique<EditTextObject>(rEngine.CreateTextObject()));
} }
else else
{ {
+1 -1
View File
@@ -3167,7 +3167,7 @@ bool ScFormulaCell::IsHyperLinkCell() const
return pCode && pCode->IsHyperLink(); return pCode && pCode->IsHyperLink();
} }
std::unique_ptr<EditTextObject> ScFormulaCell::CreateURLObject() EditTextObject ScFormulaCell::CreateURLObject()
{ {
OUString aCellText; OUString aCellText;
OUString aURL; OUString aURL;
+14 -19
View File
@@ -267,8 +267,7 @@ void ScStyleSheetPool::CreateStandardStyles()
SfxItemSet* pHFSet = nullptr; SfxItemSet* pHFSet = nullptr;
ScEditEngineDefaulter aEdEngine( pDoc->GetEditEnginePool(), true ); ScEditEngineDefaulter aEdEngine( pDoc->GetEditEnginePool(), true );
aEdEngine.SetUpdateLayout( false ); aEdEngine.SetUpdateLayout( false );
std::unique_ptr<EditTextObject> pEmptyTxtObj = aEdEngine.CreateTextObject(); EditTextObject aEmptyTxtObj = aEdEngine.CreateTextObject();
std::unique_ptr<EditTextObject> pTxtObj;
ScPageHFItem aHeaderItem( ATTR_PAGE_HEADERRIGHT ); ScPageHFItem aHeaderItem( ATTR_PAGE_HEADERRIGHT );
ScPageHFItem aFooterItem( ATTR_PAGE_FOOTERRIGHT ); ScPageHFItem aFooterItem( ATTR_PAGE_FOOTERRIGHT );
ScStyleSheet* pSheet = nullptr; ScStyleSheet* pSheet = nullptr;
@@ -334,10 +333,10 @@ void ScStyleSheetPool::CreateStandardStyles()
aEdEngine.SetTextCurrentDefaults(OUString()); aEdEngine.SetTextCurrentDefaults(OUString());
aEdEngine.QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), ESelection() ); aEdEngine.QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), ESelection() );
pTxtObj = aEdEngine.CreateTextObject(); EditTextObject aTxtObj = aEdEngine.CreateTextObject();
aHeaderItem.SetLeftArea ( *pEmptyTxtObj ); aHeaderItem.SetLeftArea ( aEmptyTxtObj );
aHeaderItem.SetCenterArea( *pTxtObj ); aHeaderItem.SetCenterArea( aTxtObj );
aHeaderItem.SetRightArea ( *pEmptyTxtObj ); aHeaderItem.SetRightArea ( aEmptyTxtObj );
pSet->Put( aHeaderItem ); pSet->Put( aHeaderItem );
// Footer: // Footer:
@@ -347,10 +346,9 @@ void ScStyleSheetPool::CreateStandardStyles()
aEdEngine.SetTextCurrentDefaults( aStr ); aEdEngine.SetTextCurrentDefaults( aStr );
nStrLen = aStr.getLength(); nStrLen = aStr.getLength();
aEdEngine.QuickInsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(0,nStrLen) ); aEdEngine.QuickInsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(0,nStrLen) );
pTxtObj = aEdEngine.CreateTextObject(); aFooterItem.SetLeftArea ( aEmptyTxtObj );
aFooterItem.SetLeftArea ( *pEmptyTxtObj ); aFooterItem.SetCenterArea( aEdEngine.CreateTextObject() );
aFooterItem.SetCenterArea( *pTxtObj ); aFooterItem.SetRightArea ( aEmptyTxtObj );
aFooterItem.SetRightArea ( *pEmptyTxtObj );
pSet->Put( aFooterItem ); pSet->Put( aFooterItem );
// 2. Report // 2. Report
@@ -393,16 +391,14 @@ void ScStyleSheetPool::CreateStandardStyles()
aEdEngine.SetTextCurrentDefaults( aStr ); aEdEngine.SetTextCurrentDefaults( aStr );
aEdEngine.QuickInsertField( SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), ESelection(0,2) ); aEdEngine.QuickInsertField( SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), ESelection(0,2) );
aEdEngine.QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), ESelection() ); aEdEngine.QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), ESelection() );
pTxtObj = aEdEngine.CreateTextObject(); aHeaderItem.SetLeftArea( aEdEngine.CreateTextObject() );
aHeaderItem.SetLeftArea( *pTxtObj ); aHeaderItem.SetCenterArea( aEmptyTxtObj );
aHeaderItem.SetCenterArea( *pEmptyTxtObj );
aStr = ", "; aStr = ", ";
aEdEngine.SetTextCurrentDefaults( aStr ); aEdEngine.SetTextCurrentDefaults( aStr );
aEdEngine.QuickInsertField( SvxFieldItem(SvxTimeField(), EE_FEATURE_FIELD), ESelection(0,2) ); aEdEngine.QuickInsertField( SvxFieldItem(SvxTimeField(), EE_FEATURE_FIELD), ESelection(0,2) );
aEdEngine.QuickInsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SvxDateType::Var), EE_FEATURE_FIELD), aEdEngine.QuickInsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SvxDateType::Var), EE_FEATURE_FIELD),
ESelection() ); ESelection() );
pTxtObj = aEdEngine.CreateTextObject(); aHeaderItem.SetRightArea( aEdEngine.CreateTextObject() );
aHeaderItem.SetRightArea( *pTxtObj );
pSet->Put( aHeaderItem ); pSet->Put( aHeaderItem );
// Footer: // Footer:
@@ -415,10 +411,9 @@ void ScStyleSheetPool::CreateStandardStyles()
aEdEngine.SetTextCurrentDefaults( aStr ); aEdEngine.SetTextCurrentDefaults( aStr );
aEdEngine.QuickInsertField( SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD), ESelection(0,nStrLen2) ); aEdEngine.QuickInsertField( SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD), ESelection(0,nStrLen2) );
aEdEngine.QuickInsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(0,nStrLen) ); aEdEngine.QuickInsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(0,nStrLen) );
pTxtObj = aEdEngine.CreateTextObject(); aFooterItem.SetLeftArea ( aEmptyTxtObj );
aFooterItem.SetLeftArea ( *pEmptyTxtObj ); aFooterItem.SetCenterArea( aEdEngine.CreateTextObject() );
aFooterItem.SetCenterArea( *pTxtObj ); aFooterItem.SetRightArea ( aEmptyTxtObj );
aFooterItem.SetRightArea ( *pEmptyTxtObj );
pSet->Put( aFooterItem ); pSet->Put( aFooterItem );
bHasStandardStyles = true; bHasStandardStyles = true;
+1 -1
View File
@@ -954,7 +954,7 @@ public:
} }
SCCOL nTransCol = mnCol1 + nRow - mnTopRow - mnFilteredRows + mnRowDestOffset; SCCOL nTransCol = mnCol1 + nRow - mnTopRow - mnFilteredRows + mnRowDestOffset;
mrClipTab.SetEditText(nTransCol, mnTransRow, ScEditUtil::Clone(*p, mrClipTab.GetDoc())); mrClipTab.SetEditText(nTransCol, mnTransRow, std::make_unique<EditTextObject>(ScEditUtil::Clone(*p, mrClipTab.GetDoc())));
} }
void operator() (size_t nRow, const ScFormulaCell* p) void operator() (size_t nRow, const ScFormulaCell* p)
+1 -1
View File
@@ -263,7 +263,7 @@ bool ScTable::SearchCell(const SvxSearchItem& rSearchItem, SCCOL nCol, sc::Colum
{ {
ScFieldEditEngine& rEngine = rDocument.GetEditEngine(); ScFieldEditEngine& rEngine = rDocument.GetEditEngine();
rEngine.SetTextCurrentDefaults(aString); rEngine.SetTextCurrentDefaults(aString);
SetEditText(nCol, nRow, rEngine.CreateTextObject()); SetEditText(nCol, nRow, std::make_unique<EditTextObject>(rEngine.CreateTextObject()));
} }
else else
aCol[nCol].SetString(nRow, nTab, aString, rDocument.GetAddressConvention()); aCol[nCol].SetString(nRow, nTab, aString, rDocument.GetAddressConvention());
+5 -8
View File
@@ -136,7 +136,7 @@ OUString ScEditUtil::GetString( const EditTextObject& rEditText, const ScDocumen
return GetMultilineString( rEE); return GetMultilineString( rEE);
} }
std::unique_ptr<EditTextObject> ScEditUtil::CreateURLObjectFromURL( ScDocument& rDoc, const OUString& rURL, const OUString& rText ) EditTextObject ScEditUtil::CreateURLObjectFromURL( ScDocument& rDoc, const OUString& rURL, const OUString& rText )
{ {
SvxURLField aUrlField( rURL, rText, SvxURLFormat::AppDefault); SvxURLField aUrlField( rURL, rText, SvxURLFormat::AppDefault);
EditEngine& rEE = rDoc.GetEditEngine(); EditEngine& rEE = rDoc.GetEditEngine();
@@ -180,10 +180,8 @@ void ScEditUtil::RemoveCharAttribs( EditTextObject& rEditText, const ScPatternAt
} }
} }
std::unique_ptr<EditTextObject> ScEditUtil::Clone( const EditTextObject& rObj, ScDocument& rDestDoc ) EditTextObject ScEditUtil::Clone( const EditTextObject& rObj, ScDocument& rDestDoc )
{ {
std::unique_ptr<EditTextObject> pNew;
EditEngine& rEngine = rDestDoc.GetEditEngine(); EditEngine& rEngine = rDestDoc.GetEditEngine();
if (rObj.HasOnlineSpellErrors()) if (rObj.HasOnlineSpellErrors())
{ {
@@ -193,17 +191,16 @@ std::unique_ptr<EditTextObject> ScEditUtil::Clone( const EditTextObject& rObj, S
if (bNewControl) if (bNewControl)
rEngine.SetControlWord(nControl | nSpellControl); rEngine.SetControlWord(nControl | nSpellControl);
rEngine.SetText(rObj); rEngine.SetText(rObj);
pNew = rEngine.CreateTextObject(); EditTextObject aNew = rEngine.CreateTextObject();
if (bNewControl) if (bNewControl)
rEngine.SetControlWord(nControl); rEngine.SetControlWord(nControl);
return aNew;
} }
else else
{ {
rEngine.SetText(rObj); rEngine.SetText(rObj);
pNew = rEngine.CreateTextObject(); return rEngine.CreateTextObject();
} }
return pNew;
} }
OUString ScEditUtil::GetCellFieldValue( OUString ScEditUtil::GetCellFieldValue(
+1 -1
View File
@@ -194,7 +194,7 @@ void lclInsertUrl( XclImpRoot& rRoot, const OUString& rUrl, SCCOL nScCol, SCROW
} }
// The cell will own the text object instance. // The cell will own the text object instance.
rDoc.setEditCell(aScPos, rEE.CreateTextObject()); rDoc.setEditCell(aScPos, std::make_unique<EditTextObject>(rEE.CreateTextObject()));
} }
break; break;
+2 -2
View File
@@ -1517,9 +1517,9 @@ void XclImpTextObj::DoPreProcessSdrObj( XclImpDffConverter& rDffConv, SdrObject&
if( maTextData.mxString->IsRich() ) if( maTextData.mxString->IsRich() )
{ {
// rich text // rich text
std::unique_ptr< EditTextObject > xEditObj( std::optional< EditTextObject > xEditObj(
XclImpStringHelper::CreateTextObject( GetRoot(), *maTextData.mxString ) ); XclImpStringHelper::CreateTextObject( GetRoot(), *maTextData.mxString ) );
OutlinerParaObject aOutlineObj(std::move(xEditObj)); OutlinerParaObject aOutlineObj(std::move(*xEditObj));
aOutlineObj.SetOutlinerMode( OutlinerMode::TextObject ); aOutlineObj.SetOutlinerMode( OutlinerMode::TextObject );
pTextObj->NbcSetOutlinerParaObject( std::move(aOutlineObj) ); pTextObj->NbcSetOutlinerParaObject( std::move(aOutlineObj) );
} }
+8 -8
View File
@@ -146,10 +146,10 @@ void XclImpAddressConverter::ConvertRangeList( ScRangeList& rScRanges,
namespace { namespace {
std::unique_ptr<EditTextObject> lclCreateTextObject( const XclImpRoot& rRoot, std::optional<EditTextObject> lclCreateTextObject( const XclImpRoot& rRoot,
const XclImpString& rString, XclFontItemType eType, sal_uInt16 nXFIndex ) const XclImpString& rString, XclFontItemType eType, sal_uInt16 nXFIndex )
{ {
std::unique_ptr<EditTextObject> pTextObj; std::optional<EditTextObject> pTextObj;
const XclImpXFBuffer& rXFBuffer = rRoot.GetXFBuffer(); const XclImpXFBuffer& rXFBuffer = rRoot.GetXFBuffer();
const XclImpFont* pFirstFont = rXFBuffer.GetFont( nXFIndex ); const XclImpFont* pFirstFont = rXFBuffer.GetFont( nXFIndex );
@@ -213,7 +213,7 @@ std::unique_ptr<EditTextObject> lclCreateTextObject( const XclImpRoot& rRoot,
// send items of last text portion to edit engine // send items of last text portion to edit engine
rEE.QuickSetAttribs( aItemSet, aSelection ); rEE.QuickSetAttribs( aItemSet, aSelection );
pTextObj = rEE.CreateTextObject(); pTextObj.emplace(rEE.CreateTextObject());
} }
return pTextObj; return pTextObj;
@@ -221,7 +221,7 @@ std::unique_ptr<EditTextObject> lclCreateTextObject( const XclImpRoot& rRoot,
} // namespace } // namespace
std::unique_ptr<EditTextObject> XclImpStringHelper::CreateTextObject( std::optional<EditTextObject> XclImpStringHelper::CreateTextObject(
const XclImpRoot& rRoot, const XclImpString& rString ) const XclImpRoot& rRoot, const XclImpString& rString )
{ {
return lclCreateTextObject( rRoot, rString, XclFontItemType::Editeng, 0 ); return lclCreateTextObject( rRoot, rString, XclFontItemType::Editeng, 0 );
@@ -234,11 +234,11 @@ void XclImpStringHelper::SetToDocument(
if (rString.GetText().isEmpty()) if (rString.GetText().isEmpty())
return; return;
::std::unique_ptr< EditTextObject > pTextObj( lclCreateTextObject( rRoot, rString, XclFontItemType::Editeng, nXFIndex ) ); ::std::optional< EditTextObject > pTextObj( lclCreateTextObject( rRoot, rString, XclFontItemType::Editeng, nXFIndex ) );
if (pTextObj) if (pTextObj)
{ {
rDoc.setEditCell(rPos, std::move(pTextObj)); rDoc.setEditCell(rPos, std::make_unique<EditTextObject>(std::move(*pTextObj)));
} }
else else
{ {
@@ -253,7 +253,7 @@ void XclImpStringHelper::SetToDocument(
ScFieldEditEngine& rEngine = rDoc.getDoc().GetEditEngine(); ScFieldEditEngine& rEngine = rDoc.getDoc().GetEditEngine();
rEngine.SetSingleLine(bSingleLine); rEngine.SetSingleLine(bSingleLine);
rEngine.SetTextCurrentDefaults(aStr); rEngine.SetTextCurrentDefaults(aStr);
rDoc.setEditCell(rPos, rEngine.CreateTextObject()); rDoc.setEditCell(rPos, std::make_unique<EditTextObject>(rEngine.CreateTextObject()));
rEngine.SetSingleLine(false); rEngine.SetSingleLine(false);
} }
else else
@@ -576,7 +576,7 @@ void XclImpHFConverter::CreateCurrObject()
{ {
InsertText(); InsertText();
SetAttribs(); SetAttribs();
GetCurrObj() = mrEE.CreateTextObject(); GetCurrObj() = std::make_shared<EditTextObject>(mrEE.CreateTextObject());
} }
void XclImpHFConverter::SetNewPortion( XclImpHFPortion eNew ) void XclImpHFConverter::SetNewPortion( XclImpHFPortion eNew )
+1 -1
View File
@@ -235,7 +235,7 @@ public:
@param rxText The XText interface of the target object. @param rxText The XText interface of the target object.
*/ */
void convert( const css::uno::Reference< css::text::XText >& rxText ); void convert( const css::uno::Reference< css::text::XText >& rxText );
std::unique_ptr<EditTextObject> convert( ScEditEngineDefaulter& rEE, const oox::xls::Font* pFont ); EditTextObject convert( ScEditEngineDefaulter& rEE, const oox::xls::Font* pFont );
RichStringPortion& getPortion(sal_Int32 nPortionIdx) { return maTextPortions[nPortionIdx]; } RichStringPortion& getPortion(sal_Int32 nPortionIdx) { return maTextPortions[nPortionIdx]; }
+1 -1
View File
@@ -120,7 +120,7 @@ public:
XclImpStringHelper() = delete; XclImpStringHelper() = delete;
/** Returns a new edit engine text object. /** Returns a new edit engine text object.
@param nXFIndex Index to XF for first text portion (for escapement). */ @param nXFIndex Index to XF for first text portion (for escapement). */
static std::unique_ptr<EditTextObject> CreateTextObject( static std::optional<EditTextObject> CreateTextObject(
const XclImpRoot& rRoot, const XclImpRoot& rRoot,
const XclImpString& rString ); const XclImpString& rString );
+4 -7
View File
@@ -142,13 +142,10 @@ protected:
{ {
// The value is a rich text string. // The value is a rich text string.
ScDocument& rDoc = getScDocument(); ScDocument& rDoc = getScDocument();
std::unique_ptr<EditTextObject> pTextObj = mxRichString->convert(rDoc.GetEditEngine(), nullptr); EditTextObject aTextObj = mxRichString->convert(rDoc.GetEditEngine(), nullptr);
if (pTextObj) svl::SharedStringPool& rPool = rDoc.GetSharedStringPool();
{ aTextObj.NormalizeString(rPool);
svl::SharedStringPool& rPool = rDoc.GetSharedStringPool(); mrCellValue.set(std::move(aTextObj));
pTextObj->NormalizeString(rPool);
mrCellValue.set(std::move(pTextObj));
}
} }
} }
break; break;
+1 -1
View File
@@ -405,7 +405,7 @@ OUString RichString::getStringContent() const
return sString.makeStringAndClear(); return sString.makeStringAndClear();
} }
std::unique_ptr<EditTextObject> RichString::convert( ScEditEngineDefaulter& rEE, const oox::xls::Font* pFirstPortionFont ) EditTextObject RichString::convert( ScEditEngineDefaulter& rEE, const oox::xls::Font* pFirstPortionFont )
{ {
ESelection aSelection; ESelection aSelection;
+2 -2
View File
@@ -1074,7 +1074,7 @@ void WorksheetGlobals::insertHyperlink( const ScAddress& rAddress, const OUStrin
SvxFieldItem aURLItem(aURLField, EE_FEATURE_FIELD); SvxFieldItem aURLItem(aURLField, EE_FEATURE_FIELD);
rEE.QuickInsertField(aURLItem, ESelection()); rEE.QuickInsertField(aURLItem, ESelection());
rDoc.setEditCell(rAddress, rEE.CreateTextObject()); rDoc.setEditCell(rAddress, std::make_unique<EditTextObject>(rEE.CreateTextObject()));
} }
else else
{ {
@@ -1611,7 +1611,7 @@ void WorksheetHelper::putRichString( const ScAddress& rAddress, RichString& rStr
rEE.SetSingleLine(bSingleLine); rEE.SetSingleLine(bSingleLine);
// The cell will own the text object instance returned from convert(). // The cell will own the text object instance returned from convert().
getDocImport().setEditCell(rAddress, rString.convert(rEE, pFirstPortionFont)); getDocImport().setEditCell(rAddress, std::make_unique<EditTextObject>(rString.convert(rEE, pFirstPortionFont)));
rEE.SetSingleLine(false); rEE.SetSingleLine(false);
} }
+2 -1
View File
@@ -1600,7 +1600,8 @@ size_t ScOrcusSharedStrings::commit_segments()
for (const auto & [ rSel, rFormat ] : maFormatSegments) for (const auto & [ rSel, rFormat ] : maFormatSegments)
mrEditEngine.QuickSetAttribs(rFormat, rSel); mrEditEngine.QuickSetAttribs(rFormat, rSel);
auto nPos = mrFactory.appendFormattedString(mrEditEngine.CreateTextObject()); auto nPos = mrFactory.appendFormattedString(
std::make_unique<EditTextObject>(mrEditEngine.CreateTextObject()));
mrEditEngine.Clear(); mrEditEngine.Clear();
maFormatSegments.clear(); maFormatSegments.clear();
return nPos; return nPos;
+3 -2
View File
@@ -413,10 +413,11 @@ void ScEEImport::WriteToDocument( bool bSizeColsRows, double nOutputFactor, SvNu
mrDoc.SetTextCell(ScAddress(nCol, nRow, nTab), aStr, &aParam); mrDoc.SetTextCell(ScAddress(nCol, nRow, nTab), aStr, &aParam);
} }
} }
else if (std::unique_ptr<EditTextObject> pTextObject = IsValidSel(*mpEngine, pE->aSel) ? mpEngine->CreateTextObject(pE->aSel) : nullptr) else if (IsValidSel(*mpEngine, pE->aSel))
{ {
EditTextObject aTextObject = mpEngine->CreateTextObject(pE->aSel);
// The cell will own the text object instance. // The cell will own the text object instance.
mrDoc.SetEditText(ScAddress(nCol,nRow,nTab), std::move(pTextObject)); mrDoc.SetEditText(ScAddress(nCol,nRow,nTab), std::move(aTextObject));
} }
if ( !pE->maImageList.empty() ) if ( !pE->maImageList.empty() )
bHasGraphics |= GraphicSize( nCol, nRow, pE ); bHasGraphics |= GraphicSize( nCol, nRow, pE );
+1 -1
View File
@@ -1138,7 +1138,7 @@ void ScXMLTableRowCellContext::PutTextCell( const ScAddress& rCurrentPos,
// This edit engine uses the SfxItemPool instance returned // This edit engine uses the SfxItemPool instance returned
// from pDoc->GetEditPool() to create the text object, which // from pDoc->GetEditPool() to create the text object, which
// is a prerequisite for using this constructor of ScEditCell. // is a prerequisite for using this constructor of ScEditCell.
rDoc.setEditCell(rCurrentPos, mpEditEngine->CreateTextObject()); rDoc.setEditCell(rCurrentPos, std::make_unique<EditTextObject>(mpEditEngine->CreateTextObject()));
} }
} }
else if ( nCurrentCol > 0 && pOUText && !pOUText->isEmpty() ) else if ( nCurrentCol > 0 && pOUText && !pOUText->isEmpty() )
@@ -222,8 +222,8 @@ void AddressWalkerWriter::writeBoldString(const OUString& aString)
aItemSet.Put(aWeight); aItemSet.Put(aWeight);
aItemSet.Put(aJustify); aItemSet.Put(aJustify);
rEngine.QuickSetAttribs(aItemSet, ESelection(0, 0, 0, aString.getLength()) ); rEngine.QuickSetAttribs(aItemSet, ESelection(0, 0, 0, aString.getLength()) );
std::unique_ptr<EditTextObject> pEditText(rEngine.CreateTextObject()); EditTextObject aEditText(rEngine.CreateTextObject());
mpDocShell->GetDocFunc().SetEditCell(mCurrentAddress, *pEditText, true); mpDocShell->GetDocFunc().SetEditCell(mCurrentAddress, aEditText, true);
} }
void AddressWalkerWriter::writeValue(double aValue) void AddressWalkerWriter::writeValue(double aValue)
+6 -7
View File
@@ -3333,7 +3333,7 @@ void ScInputHandler::EnterHandler( ScEnterMode nBlockMode, bool bBeforeSavingInL
void ScInputHandler::EnterHandler2(ScEnterMode nBlockMode, bool bForget, OUString aString, void ScInputHandler::EnterHandler2(ScEnterMode nBlockMode, bool bForget, OUString aString,
const OUString& aPreAutoCorrectString) const OUString& aPreAutoCorrectString)
{ {
std::unique_ptr<EditTextObject> pObject; std::optional<EditTextObject> oObject;
std::unique_ptr<ScPatternAttr> pCellAttrs; std::unique_ptr<ScPatternAttr> pCellAttrs;
bool bMatrix = (nBlockMode == ScEnterMode::MATRIX); bool bMatrix = (nBlockMode == ScEnterMode::MATRIX);
SfxApplication* pSfxApp = SfxGetpApp(); SfxApplication* pSfxApp = SfxGetpApp();
@@ -3499,7 +3499,7 @@ void ScInputHandler::EnterHandler2(ScEnterMode nBlockMode, bool bForget, OUStrin
if (bAttrib) if (bAttrib)
{ {
mpEditEngine->ClearSpellErrors(); mpEditEngine->ClearSpellErrors();
pObject = mpEditEngine->CreateTextObject(); oObject.emplace(mpEditEngine->CreateTextObject());
} }
else if (ScModule::get()->GetAppOptions().GetAutoComplete()) // Adjust Upper/Lower case else if (ScModule::get()->GetAppOptions().GetAutoComplete()) // Adjust Upper/Lower case
{ {
@@ -3601,14 +3601,14 @@ void ScInputHandler::EnterHandler2(ScEnterMode nBlockMode, bool bForget, OUStrin
{ {
ScInputStatusItem aItem(FID_INPUTLINE_STATUS, ScInputStatusItem aItem(FID_INPUTLINE_STATUS,
aCursorPos, aCursorPos, aCursorPos, aCursorPos, aCursorPos, aCursorPos,
aPreAutoCorrectString, pObject.get()); aPreAutoCorrectString, oObject ? &*oObject : nullptr);
aArgs[0] = &aItem; aArgs[0] = &aItem;
rBindings.Execute(nId, aArgs); rBindings.Execute(nId, aArgs);
} }
ScInputStatusItem aItemCorrected(FID_INPUTLINE_STATUS, ScInputStatusItem aItemCorrected(FID_INPUTLINE_STATUS,
aCursorPos, aCursorPos, aCursorPos, aCursorPos, aCursorPos, aCursorPos,
aString, pObject.get()); aString, oObject ? &*oObject : nullptr);
sc::MisspellRangeResult aMisspellRangeResult; sc::MisspellRangeResult aMisspellRangeResult;
if ( !aMisspellRanges.empty() ) if ( !aMisspellRanges.empty() )
@@ -4739,9 +4739,8 @@ bool ScInputHandler::GetTextAndFields( ScEditEngineDefaulter& rDestEngine )
if ( eFieldState == SfxItemState::INVALID || eFieldState == SfxItemState::SET ) if ( eFieldState == SfxItemState::INVALID || eFieldState == SfxItemState::SET )
{ {
// Copy content // Copy content
std::unique_ptr<EditTextObject> pObj = mpEditEngine->CreateTextObject(); EditTextObject aObj = mpEditEngine->CreateTextObject();
rDestEngine.SetTextCurrentDefaults(*pObj); rDestEngine.SetTextCurrentDefaults(aObj);
pObj.reset();
sal_Int32 nParCnt = mpEditEngine->GetParagraphCount(); sal_Int32 nParCnt = mpEditEngine->GetParagraphCount();
// Delete attributes // Delete attributes
+4 -4
View File
@@ -730,8 +730,8 @@ bool ScDocFunc::SetStringOrEditCell( const ScAddress& rPos, const OUString& rStr
{ {
ScFieldEditEngine& rEngine = rDoc.GetEditEngine(); ScFieldEditEngine& rEngine = rDoc.GetEditEngine();
rEngine.SetTextCurrentDefaults(rStr); rEngine.SetTextCurrentDefaults(rStr);
std::unique_ptr<EditTextObject> pEditText(rEngine.CreateTextObject()); EditTextObject aEditText(rEngine.CreateTextObject());
return SetEditCell(rPos, *pEditText, bInteraction); return SetEditCell(rPos, aEditText, bInteraction);
} }
else else
return SetStringCell(rPos, rStr, bInteraction); return SetStringCell(rPos, rStr, bInteraction);
@@ -869,8 +869,8 @@ void ScDocFunc::PutData( const ScAddress& rPos, ScEditEngineDefaulter& rEngine,
} }
// A copy of pNewData will be stored in the cell. // A copy of pNewData will be stored in the cell.
std::unique_ptr<EditTextObject> pNewData(rEngine.CreateTextObject()); EditTextObject aNewData(rEngine.CreateTextObject());
bRet = SetEditCell(rPos, *pNewData, !bApi); bRet = SetEditCell(rPos, aNewData, !bApi);
// Set the paragraph attributes back to the EditEngine. // Set the paragraph attributes back to the EditEngine.
for (const auto& rxItem : aRememberItems) for (const auto& rxItem : aRememberItems)
+2 -2
View File
@@ -1069,7 +1069,7 @@ static bool lcl_PutString(
{ {
ScFieldEditEngine& rEngine = rDoc.GetEditEngine(); ScFieldEditEngine& rEngine = rDoc.GetEditEngine();
rEngine.SetTextCurrentDefaults(rStr); rEngine.SetTextCurrentDefaults(rStr);
rDocImport.setEditCell(ScAddress(nCol, nRow, nTab), rEngine.CreateTextObject()); rDocImport.setEditCell(ScAddress(nCol, nRow, nTab), std::make_unique<EditTextObject>(rEngine.CreateTextObject()));
return true; return true;
} }
else else
@@ -1480,7 +1480,7 @@ static bool lcl_PutString(
ScFieldEditEngine& rEngine = rDoc.GetEditEngine(); ScFieldEditEngine& rEngine = rDoc.GetEditEngine();
rEngine.SetTextCurrentDefaults(rStr); rEngine.SetTextCurrentDefaults(rStr);
if ( bUseDocImport ) if ( bUseDocImport )
rDocImport.setEditCell(ScAddress(nCol, nRow, nTab), rEngine.CreateTextObject()); rDocImport.setEditCell(ScAddress(nCol, nRow, nTab), std::make_unique<EditTextObject>(rEngine.CreateTextObject()));
else else
rDoc.SetEditText( ScAddress( nCol, nRow, nTab ), rEngine.CreateTextObject() ); rDoc.SetEditText( ScAddress( nCol, nRow, nTab ), rEngine.CreateTextObject() );
} }
+1 -1
View File
@@ -49,7 +49,7 @@ public:
void SetFont( const ScPatternAttr& rPattern ); void SetFont( const ScPatternAttr& rPattern );
void SetText( const EditTextObject& rTextObject ); void SetText( const EditTextObject& rTextObject );
std::unique_ptr<EditTextObject> CreateTextObject(); EditTextObject CreateTextObject();
void SetCharAttributes(); void SetCharAttributes();
void InsertField( const SvxFieldItem& rFld ); void InsertField( const SvxFieldItem& rFld );
+35 -44
View File
@@ -229,13 +229,13 @@ void ScHFEditPage::Reset( const SfxItemSet* rCoreSet )
bool ScHFEditPage::FillItemSet( SfxItemSet* rCoreSet ) bool ScHFEditPage::FillItemSet( SfxItemSet* rCoreSet )
{ {
ScPageHFItem aItem( nWhich ); ScPageHFItem aItem( nWhich );
std::unique_ptr<EditTextObject> pLeft = m_xWndLeft->CreateTextObject(); EditTextObject aLeft = m_xWndLeft->CreateTextObject();
std::unique_ptr<EditTextObject> pCenter = m_xWndCenter->CreateTextObject(); EditTextObject aCenter = m_xWndCenter->CreateTextObject();
std::unique_ptr<EditTextObject> pRight = m_xWndRight->CreateTextObject(); EditTextObject aRight = m_xWndRight->CreateTextObject();
aItem.SetLeftArea ( *pLeft ); aItem.SetLeftArea ( aLeft );
aItem.SetCenterArea( *pCenter ); aItem.SetCenterArea( aCenter );
aItem.SetRightArea ( *pRight ); aItem.SetRightArea ( aRight );
rCoreSet->Put( aItem ); rCoreSet->Put( aItem );
@@ -341,17 +341,13 @@ void ScHFEditPage::SetSelectDefinedList()
// default to customized // default to customized
ScHFEntryId eSelectEntry = eEntryCount; ScHFEntryId eSelectEntry = eEntryCount;
std::unique_ptr< EditTextObject > pLeftObj;
std::unique_ptr< EditTextObject > pCenterObj;
std::unique_ptr< EditTextObject > pRightObj;
OUString aLeftEntry; OUString aLeftEntry;
OUString aCenterEntry; OUString aCenterEntry;
OUString aRightEntry; OUString aRightEntry;
pLeftObj = m_xWndLeft->GetEditEngine()->CreateTextObject(); EditTextObject aLeftObj = m_xWndLeft->GetEditEngine()->CreateTextObject();
pCenterObj = m_xWndCenter->GetEditEngine()->CreateTextObject(); EditTextObject aCenterObj = m_xWndCenter->GetEditEngine()->CreateTextObject();
pRightObj = m_xWndRight->GetEditEngine()->CreateTextObject(); EditTextObject aRightObj = m_xWndRight->GetEditEngine()->CreateTextObject();
bool bFound = false; bool bFound = false;
@@ -362,9 +358,9 @@ void ScHFEditPage::SetSelectDefinedList()
{ {
case eNoneEntry: case eNoneEntry:
{ {
aLeftEntry = pLeftObj->GetText(0); aLeftEntry = aLeftObj.GetText(0);
aCenterEntry = pCenterObj->GetText(0); aCenterEntry = aCenterObj.GetText(0);
aRightEntry = pRightObj->GetText(0); aRightEntry = aRightObj.GetText(0);
if(aLeftEntry.isEmpty() && aCenterEntry.isEmpty() if(aLeftEntry.isEmpty() && aCenterEntry.isEmpty()
&& aRightEntry.isEmpty()) && aRightEntry.isEmpty())
{ {
@@ -376,11 +372,11 @@ void ScHFEditPage::SetSelectDefinedList()
case ePageEntry: case ePageEntry:
{ {
aLeftEntry = pLeftObj->GetText(0); aLeftEntry = aLeftObj.GetText(0);
aRightEntry = pRightObj->GetText(0); aRightEntry = aRightObj.GetText(0);
if(aLeftEntry.isEmpty() && aRightEntry.isEmpty()) if(aLeftEntry.isEmpty() && aRightEntry.isEmpty())
{ {
if(IsPageEntry(m_xWndCenter->GetEditEngine(), pCenterObj.get())) if(IsPageEntry(m_xWndCenter->GetEditEngine(), &aCenterObj))
{ {
eSelectEntry = ePageEntry; eSelectEntry = ePageEntry;
bFound = true; bFound = true;
@@ -397,13 +393,13 @@ void ScHFEditPage::SetSelectDefinedList()
case eSheetEntry: case eSheetEntry:
{ {
aLeftEntry = pLeftObj->GetText(0); aLeftEntry = aLeftObj.GetText(0);
aRightEntry = pRightObj->GetText(0); aRightEntry = aRightObj.GetText(0);
if(aLeftEntry.isEmpty() && aRightEntry.isEmpty()) if(aLeftEntry.isEmpty() && aRightEntry.isEmpty())
{ {
if(pCenterObj->IsFieldObject()) if(aCenterObj.IsFieldObject())
{ {
const SvxFieldItem* pFieldItem = pCenterObj->GetField(); const SvxFieldItem* pFieldItem = aCenterObj.GetField();
if(pFieldItem) if(pFieldItem)
{ {
const SvxFieldData* pField = pFieldItem->GetField(); const SvxFieldData* pField = pFieldItem->GetField();
@@ -420,7 +416,7 @@ void ScHFEditPage::SetSelectDefinedList()
case eConfidentialEntry: case eConfidentialEntry:
{ {
if(IsDateEntry(pCenterObj.get()) && IsPageEntry(m_xWndRight->GetEditEngine(), pRightObj.get())) if(IsDateEntry(&aCenterObj) && IsPageEntry(m_xWndRight->GetEditEngine(), &aRightObj))
{ {
OUString aConfidentialEntry(aUserOpt.GetCompany() + " " + m_xFtConfidential->get_label()); OUString aConfidentialEntry(aUserOpt.GetCompany() + " " + m_xFtConfidential->get_label());
if(aConfidentialEntry == m_xWndLeft->GetEditEngine()->GetText(0)) if(aConfidentialEntry == m_xWndLeft->GetEditEngine()->GetText(0))
@@ -440,9 +436,9 @@ void ScHFEditPage::SetSelectDefinedList()
case eExtFileNameEntry: case eExtFileNameEntry:
{ {
aLeftEntry = pLeftObj->GetText(0); aLeftEntry = aLeftObj.GetText(0);
aRightEntry = pRightObj->GetText(0); aRightEntry = aRightObj.GetText(0);
if(IsExtFileNameEntry(pCenterObj.get()) && aLeftEntry.isEmpty() if(IsExtFileNameEntry(&aCenterObj) && aLeftEntry.isEmpty()
&& aRightEntry.isEmpty()) && aRightEntry.isEmpty())
{ {
eSelectEntry = eExtFileNameEntry; eSelectEntry = eExtFileNameEntry;
@@ -465,9 +461,9 @@ void ScHFEditPage::SetSelectDefinedList()
case ePageExtFileNameEntry: case ePageExtFileNameEntry:
{ {
aLeftEntry = pLeftObj->GetText(0); aLeftEntry = aLeftObj.GetText(0);
if(IsPageEntry(m_xWndCenter->GetEditEngine(), pCenterObj.get()) && if(IsPageEntry(m_xWndCenter->GetEditEngine(), &aCenterObj) &&
IsExtFileNameEntry(pRightObj.get()) && aLeftEntry.isEmpty()) IsExtFileNameEntry(&aRightObj) && aLeftEntry.isEmpty())
{ {
eSelectEntry = ePageExtFileNameEntry; eSelectEntry = ePageExtFileNameEntry;
bFound = true; bFound = true;
@@ -477,7 +473,7 @@ void ScHFEditPage::SetSelectDefinedList()
case eUserNameEntry: case eUserNameEntry:
{ {
if(IsDateEntry(pRightObj.get()) && IsPageEntry(m_xWndCenter->GetEditEngine(), pCenterObj.get())) if(IsDateEntry(&aRightObj) && IsPageEntry(m_xWndCenter->GetEditEngine(), &aCenterObj))
{ {
OUString aUserNameEntry(aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName()); OUString aUserNameEntry(aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
@@ -492,7 +488,7 @@ void ScHFEditPage::SetSelectDefinedList()
case eCreatedByEntry: case eCreatedByEntry:
{ {
if(IsDateEntry(pCenterObj.get()) && IsPageEntry(m_xWndRight->GetEditEngine(), pRightObj.get())) if(IsDateEntry(&aCenterObj) && IsPageEntry(m_xWndRight->GetEditEngine(), &aRightObj))
{ {
OUString aCreatedByEntry(m_xFtCreatedBy->get_label() + " " + aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName()); OUString aCreatedByEntry(m_xFtCreatedBy->get_label() + " " + aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
@@ -538,10 +534,10 @@ bool ScHFEditPage::IsPageEntry(EditEngine*pEngine, const EditTextObject* pTextOb
{ {
aSel.start.nIndex = aSel.end.nIndex; aSel.start.nIndex = aSel.end.nIndex;
aSel.end.nIndex++; aSel.end.nIndex++;
std::unique_ptr< EditTextObject > pPageObj = pEngine->CreateTextObject(aSel); EditTextObject aPageObj = pEngine->CreateTextObject(aSel);
if(pPageObj && pPageObj->IsFieldObject() ) if(aPageObj.IsFieldObject() )
{ {
const SvxFieldItem* pFieldItem = pPageObj->GetField(); const SvxFieldItem* pFieldItem = aPageObj.GetField();
if(pFieldItem) if(pFieldItem)
{ {
const SvxFieldData* pField = pFieldItem->GetField(); const SvxFieldData* pField = pFieldItem->GetField();
@@ -595,7 +591,6 @@ bool ScHFEditPage::IsExtFileNameEntry(const EditTextObject* pTextObj)
void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel, bool bTravelling) void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel, bool bTravelling)
{ {
SvtUserOptions aUserOpt; SvtUserOptions aUserOpt;
std::unique_ptr< EditTextObject > pTextObj;
switch(eSel) switch(eSel)
{ {
@@ -630,8 +625,7 @@ void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel, bool bTravelling)
m_xWndCenter->GetEditEngine()->QuickInsertText(aPageOfEntry,ESelection(aSel.end)); m_xWndCenter->GetEditEngine()->QuickInsertText(aPageOfEntry,ESelection(aSel.end));
aSel.end.nIndex += aPageOfEntry.getLength(); aSel.end.nIndex += aPageOfEntry.getLength();
m_xWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD), ESelection(aSel.end)); m_xWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD), ESelection(aSel.end));
pTextObj = m_xWndCenter->GetEditEngine()->CreateTextObject(); m_xWndCenter->SetText(m_xWndCenter->GetEditEngine()->CreateTextObject());
m_xWndCenter->SetText(*pTextObj);
if(!bTravelling) if(!bTravelling)
m_xWndCenter->GrabFocus(); m_xWndCenter->GrabFocus();
} }
@@ -670,8 +664,7 @@ void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel, bool bTravelling)
aSel.start.nIndex = aSel.end.nIndex; aSel.start.nIndex = aSel.end.nIndex;
aSel.end.nIndex += aPageEntry.getLength(); aSel.end.nIndex += aPageEntry.getLength();
m_xWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.end)); m_xWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.end));
pTextObj = m_xWndCenter->GetEditEngine()->CreateTextObject(); m_xWndCenter->SetText(m_xWndCenter->GetEditEngine()->CreateTextObject());
m_xWndCenter->SetText(*pTextObj);
if(!bTravelling) if(!bTravelling)
m_xWndCenter->GrabFocus(); m_xWndCenter->GrabFocus();
} }
@@ -699,8 +692,7 @@ void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel, bool bTravelling)
m_xWndCenter->GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.end)); m_xWndCenter->GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.end));
aSel.end.nIndex += aCommaSpace.getLength(); aSel.end.nIndex += aCommaSpace.getLength();
m_xWndCenter->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), ESelection(aSel.end)); m_xWndCenter->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), ESelection(aSel.end));
pTextObj = m_xWndCenter->GetEditEngine()->CreateTextObject(); m_xWndCenter->SetText(m_xWndCenter->GetEditEngine()->CreateTextObject());
m_xWndCenter->SetText(*pTextObj);
if(!bTravelling) if(!bTravelling)
m_xWndCenter->GrabFocus(); m_xWndCenter->GrabFocus();
} }
@@ -719,8 +711,7 @@ void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel, bool bTravelling)
m_xWndCenter->GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.end)); m_xWndCenter->GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.end));
aSel.end.nIndex += aCommaSpace.getLength(); aSel.end.nIndex += aCommaSpace.getLength();
m_xWndCenter->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), ESelection(aSel.end)); m_xWndCenter->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), ESelection(aSel.end));
pTextObj = m_xWndCenter->GetEditEngine()->CreateTextObject(); m_xWndCenter->SetText(m_xWndCenter->GetEditEngine()->CreateTextObject());
m_xWndCenter->SetText(*pTextObj);
if(!bTravelling) if(!bTravelling)
m_xWndCenter->GrabFocus(); m_xWndCenter->GrabFocus();
} }
+1 -1
View File
@@ -129,7 +129,7 @@ void ScEditWindow::SetNumType(SvxNumType eNumType)
pEditEngine->UpdateFields(); pEditEngine->UpdateFields();
} }
std::unique_ptr<EditTextObject> ScEditWindow::CreateTextObject() EditTextObject ScEditWindow::CreateTextObject()
{ {
// reset paragraph attributes // reset paragraph attributes
// (GetAttribs at creation of format dialog always returns the set items) // (GetAttribs at creation of format dialog always returns the set items)
+2 -2
View File
@@ -192,8 +192,8 @@ ScUnoEditEngine::ScUnoEditEngine(ScEditEngineDefaulter* pSource)
, nFieldPos(0) , nFieldPos(0)
, nFieldIndex(0) , nFieldIndex(0)
{ {
std::unique_ptr<EditTextObject> pData = pSource->CreateTextObject(); EditTextObject aData = pSource->CreateTextObject();
SetTextCurrentDefaults( *pData ); SetTextCurrentDefaults( aData );
} }
OUString ScUnoEditEngine::CalcFieldValue( const SvxFieldItem& rField, OUString ScUnoEditEngine::CalcFieldValue( const SvxFieldItem& rField,
+3 -3
View File
@@ -221,13 +221,13 @@ void ScHeaderFooterTextData::UpdateData()
{ {
if (pEditEngine) if (pEditEngine)
{ {
mpTextObj = pEditEngine->CreateTextObject(); mpTextObj = std::make_unique<EditTextObject>(pEditEngine->CreateTextObject());
} }
} }
void ScHeaderFooterTextData::UpdateData(EditEngine& rEditEngine) void ScHeaderFooterTextData::UpdateData(EditEngine& rEditEngine)
{ {
mpTextObj = rEditEngine.CreateTextObject(); mpTextObj = std::make_unique<EditTextObject>(rEditEngine.CreateTextObject());
bDataValid = false; bDataValid = false;
} }
@@ -720,7 +720,7 @@ void ScEditEngineTextObj::SetText( const EditTextObject& rTextObject )
SetSelection( aSel ); SetSelection( aSel );
} }
std::unique_ptr<EditTextObject> ScEditEngineTextObj::CreateTextObject() EditTextObject ScEditEngineTextObj::CreateTextObject()
{ {
return GetEditEngine()->CreateTextObject(); return GetEditEngine()->CreateTextObject();
} }
+5 -5
View File
@@ -5940,7 +5940,7 @@ bool extractURLInfo( const SvxFieldItem* pFieldItem, OUString* pName, OUString*
static void lcl_SetEngineTextKeepingDefaults(const std::shared_ptr<ScFieldEditEngine>& pEngine, static void lcl_SetEngineTextKeepingDefaults(const std::shared_ptr<ScFieldEditEngine>& pEngine,
ScDocument& rDoc, ScRefCellValue& rCell, const OUString& rURL) ScDocument& rDoc, ScRefCellValue& rCell, const OUString& rURL)
{ {
std::unique_ptr<EditTextObject> pTextObj; std::optional<EditTextObject> oTextObj;
if (rCell.getType() == CELLTYPE_EDIT) if (rCell.getType() == CELLTYPE_EDIT)
{ {
if (rCell.getEditText()) if (rCell.getEditText())
@@ -5951,7 +5951,7 @@ static void lcl_SetEngineTextKeepingDefaults(const std::shared_ptr<ScFieldEditEn
// cell ( or other type ? ) with a hyperlink associated with it. // cell ( or other type ? ) with a hyperlink associated with it.
{ {
if (rURL.isEmpty()) if (rURL.isEmpty())
pTextObj = rCell.getFormula()->CreateURLObject(); oTextObj.emplace(rCell.getFormula()->CreateURLObject());
else else
{ {
OUString aRepres = rURL; OUString aRepres = rURL;
@@ -5962,11 +5962,11 @@ static void lcl_SetEngineTextKeepingDefaults(const std::shared_ptr<ScFieldEditEn
else if (rCell.getType() == CELLTYPE_FORMULA) else if (rCell.getType() == CELLTYPE_FORMULA)
aRepres = rCell.getFormula()->GetString().getString(); aRepres = rCell.getFormula()->GetString().getString();
pTextObj = ScEditUtil::CreateURLObjectFromURL(rDoc, rURL, aRepres); oTextObj.emplace(ScEditUtil::CreateURLObjectFromURL(rDoc, rURL, aRepres));
} }
if (pTextObj) if (oTextObj)
pEngine->SetTextCurrentDefaults(*pTextObj); pEngine->SetTextCurrentDefaults(*oTextObj);
} }
} }
+2 -2
View File
@@ -126,8 +126,8 @@ bool ScConversionEngineBase::FindNextConversionCell()
if (!bSimpleString || eCellType == CELLTYPE_EDIT) if (!bSimpleString || eCellType == CELLTYPE_EDIT)
{ {
std::unique_ptr<EditTextObject> pEditObj(CreateTextObject()); EditTextObject aEditObj(CreateTextObject());
mrDoc.SetEditText(aPos, *pEditObj, GetItemPool()); mrDoc.SetEditText(aPos, aEditObj, GetItemPool());
} }
else else
{ {
+7 -8
View File
@@ -128,8 +128,8 @@ void ScViewFunc::PasteRTF( SCCOL nStartCol, SCROW nStartRow,
rDoc.EnableUndo( false ); rDoc.EnableUndo( false );
for( sal_Int32 n = 0; n < nParCnt; n++ ) for( sal_Int32 n = 0; n < nParCnt; n++ )
{ {
std::unique_ptr<EditTextObject> pObject(pEngine->CreateTextObject(n)); EditTextObject aObject(pEngine->CreateTextObject(n));
EnterData(nStartCol, nRow, nTab, *pObject, true); EnterData(nStartCol, nRow, nTab, aObject, true);
if( ++nRow > rDoc.MaxRow() ) if( ++nRow > rDoc.MaxRow() )
break; break;
} }
@@ -406,10 +406,9 @@ void ScViewFunc::DoThesaurus()
if (aOldText.getType() == CELLTYPE_EDIT) if (aOldText.getType() == CELLTYPE_EDIT)
{ {
// The cell will own the text object instance. // The cell will own the text object instance.
std::unique_ptr<EditTextObject> pText = pThesaurusEngine->CreateTextObject(); EditTextObject* pText = new EditTextObject(pThesaurusEngine->CreateTextObject());
auto tmp = pText.get(); if (rDoc.SetEditText(ScAddress(nCol,nRow,nTab), std::unique_ptr<EditTextObject>(pText)))
if (rDoc.SetEditText(ScAddress(nCol,nRow,nTab), std::move(pText))) aNewText.set(*pText);
aNewText.set(*tmp);
} }
else else
{ {
@@ -744,8 +743,8 @@ void ScViewFunc::InsertBookmark( const OUString& rDescription, const OUString& r
aField.SetTargetFrame(*pTarget); aField.SetTargetFrame(*pTarget);
aEngine.QuickInsertField( SvxFieldItem( aField, EE_FEATURE_FIELD ), aInsSel ); aEngine.QuickInsertField( SvxFieldItem( aField, EE_FEATURE_FIELD ), aInsSel );
std::unique_ptr<EditTextObject> pData(aEngine.CreateTextObject()); EditTextObject aData(aEngine.CreateTextObject());
EnterData(nPosX, nPosY, nTab, *pData); EnterData(nPosX, nPosY, nTab, aData);
} }
bool ScViewFunc::HasBookmarkAtCursor( SvxHyperlinkItem* pContent ) bool ScViewFunc::HasBookmarkAtCursor( SvxHyperlinkItem* pContent )
+4 -4
View File
@@ -516,12 +516,12 @@ std::vector<ClassificationResult> ClassificationDialog::getResult()
std::vector<ClassificationResult> aClassificationResults; std::vector<ClassificationResult> aClassificationResults;
ClassificationEditEngine& rEdEngine = m_xEditWindow->getEditEngine(); ClassificationEditEngine& rEdEngine = m_xEditWindow->getEditEngine();
std::unique_ptr<EditTextObject> pEditText(rEdEngine.CreateTextObject()); EditTextObject aEditText(rEdEngine.CreateTextObject());
sal_Int32 nCurrentParagraph = -1; sal_Int32 nCurrentParagraph = -1;
std::vector<editeng::Section> aSections; std::vector<editeng::Section> aSections;
pEditText->GetAllSections(aSections); aEditText.GetAllSections(aSections);
for (editeng::Section const & rSection : aSections) for (editeng::Section const & rSection : aSections)
{ {
while (nCurrentParagraph < rSection.mnParagraph) while (nCurrentParagraph < rSection.mnParagraph)
@@ -575,9 +575,9 @@ IMPL_LINK(ClassificationDialog, SelectClassificationHdl, weld::ComboBox&, rBox,
if (nSelected < 0 || m_nCurrentSelectedCategory == nSelected) if (nSelected < 0 || m_nCurrentSelectedCategory == nSelected)
return; return;
std::unique_ptr<EditTextObject> pEditText(m_xEditWindow->getEditEngine().CreateTextObject()); EditTextObject aEditText(m_xEditWindow->getEditEngine().CreateTextObject());
std::vector<editeng::Section> aSections; std::vector<editeng::Section> aSections;
pEditText->GetAllSections(aSections); aEditText.GetAllSections(aSections);
// if we are replacing an existing field // if we are replacing an existing field
bool bReplaceExisting = false; bool bReplaceExisting = false;
+2 -2
View File
@@ -1472,8 +1472,8 @@ void WeldTextForwarder::CopyText(const SvxTextForwarder& rSource)
EditEngine* pEditEngine = m_rEditAcc.GetEditEngine(); EditEngine* pEditEngine = m_rEditAcc.GetEditEngine();
if (pEditEngine && pSourceEditEngine) if (pEditEngine && pSourceEditEngine)
{ {
std::unique_ptr<EditTextObject> pNewTextObject = pSourceEditEngine->CreateTextObject(); EditTextObject aNewTextObject = pSourceEditEngine->CreateTextObject();
pEditEngine->SetText(*pNewTextObject); pEditEngine->SetText(aNewTextObject);
} }
} }
+2 -2
View File
@@ -1050,8 +1050,8 @@ std::optional<OutlinerParaObject> SwWW8ImplReader::ImportAsOutliner(OUString &rS
m_pDrawEditEngine->QuickDelete(aFirstChar); m_pDrawEditEngine->QuickDelete(aFirstChar);
} }
std::unique_ptr<EditTextObject> pTemporaryText = m_pDrawEditEngine->CreateTextObject(); EditTextObject aTemporaryText = m_pDrawEditEngine->CreateTextObject();
pRet.emplace( std::move(pTemporaryText) ); pRet.emplace( std::move(aTemporaryText) );
pRet->SetOutlinerMode( OutlinerMode::TextObject ); pRet->SetOutlinerMode( OutlinerMode::TextObject );
m_pDrawEditEngine->SetText( OUString() ); m_pDrawEditEngine->SetText( OUString() );