[Libreoffice-commits] .: editeng/source
Lubos Lunak
llunak at kemper.freedesktop.org
Fri Mar 30 14:34:56 PDT 2012
editeng/source/editeng/editdoc.cxx | 9 ++++++++-
editeng/source/editeng/editdoc.hxx | 4 ++++
editeng/source/editeng/editdoc2.cxx | 8 ++++++++
editeng/source/editeng/impedit2.cxx | 7 ++++---
4 files changed, 24 insertions(+), 4 deletions(-)
New commits:
commit 46da0b6837bffa7d8a72624d2587159737e3d7e2
Author: LuboÅ¡ LuÅák <l.lunak at suse.cz>
Date: Fri Mar 30 23:32:21 2012 +0200
further sc/editeng unbreaking
this boost::ptr_vector idea is seriously broken
diff --git a/editeng/source/editeng/editdoc.cxx b/editeng/source/editeng/editdoc.cxx
index 51f0112..c05e379 100644
--- a/editeng/source/editeng/editdoc.cxx
+++ b/editeng/source/editeng/editdoc.cxx
@@ -1816,7 +1816,7 @@ void EditDoc::InsertAttrib( ContentNode* pNode, sal_uInt16 nStart, sal_uInt16 nE
if ( pAttr )
{
// Remove attribute....
- rAttrList.Remove(pAttr);
+ rAttrList.Release(pAttr);
}
// check whether 'the same' attribute exist at this place.
@@ -2137,6 +2137,13 @@ void CharAttribList::Remove(size_t nPos)
aAttribs.erase(aAttribs.begin()+nPos);
}
+void CharAttribList::Release(const EditCharAttrib* p)
+{
+ AttribsType::iterator it = std::find_if(aAttribs.begin(), aAttribs.end(), FindByAddress(p));
+ if (it != aAttribs.end())
+ aAttribs.release(it).release();
+}
+
void CharAttribList::SetHasEmptyAttribs(bool b)
{
bHasEmptyAttribs = b;
diff --git a/editeng/source/editeng/editdoc.hxx b/editeng/source/editeng/editdoc.hxx
index bf00c76..609e2bd 100644
--- a/editeng/source/editeng/editdoc.hxx
+++ b/editeng/source/editeng/editdoc.hxx
@@ -253,6 +253,7 @@ public:
void Remove(const EditCharAttrib* p);
void Remove(size_t nPos);
+ void Release(const EditCharAttrib* p);
#if OSL_DEBUG_LEVEL > 2
// Debug:
@@ -315,7 +316,10 @@ public:
ContentNode* operator[](size_t nPos);
void Insert(size_t nPos, ContentNode* p);
+ /// deletes
void Remove(size_t nPos);
+ /// does not delete
+ void Release(size_t nPos);
size_t Count() const;
void Clear();
};
diff --git a/editeng/source/editeng/editdoc2.cxx b/editeng/source/editeng/editdoc2.cxx
index b22c10b..fc65c9c 100644
--- a/editeng/source/editeng/editdoc2.cxx
+++ b/editeng/source/editeng/editdoc2.cxx
@@ -419,6 +419,14 @@ void ContentList::Remove(size_t nPos)
maContents.erase(maContents.begin() + nPos);
}
+void ContentList::Release(size_t nPos)
+{
+ if (nPos >= maContents.size())
+ return;
+
+ maContents.release(maContents.begin() + nPos).release();
+}
+
size_t ContentList::Count() const
{
return maContents.size();
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index a4654f0..9bab5db 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -2192,7 +2192,7 @@ EditSelection ImpEditEngine::ImpMoveParagraphs( Range aOldPositions, sal_uInt16
{
// always aOldPositions.Min(), since Remove().
ParaPortion* pTmpPortion = GetParaPortions().Release(aOldPositions.Min());
- aEditDoc.Remove( (sal_uInt16)aOldPositions.Min() );
+ aEditDoc.Release( (sal_uInt16)aOldPositions.Min() );
aTmpPortionList.Append(pTmpPortion);
}
@@ -2237,7 +2237,8 @@ EditSelection ImpEditEngine::ImpMoveParagraphs( Range aOldPositions, sal_uInt16
if ( pRecalc4 )
CalcHeight( pRecalc4 );
- aTmpPortionList.Reset();
+ while( aTmpPortionList.Count() > 0 )
+ aTmpPortionList.Release( aTmpPortionList.Count() - 1 );
#if OSL_DEBUG_LEVEL > 2
GetParaPortions().DbgCheck(aEditDoc);
@@ -2484,7 +2485,7 @@ void ImpEditEngine::ImpRemoveParagraph( sal_uInt16 nPara )
aDeletedNodes.Insert( pInf, aDeletedNodes.Count() );
// The node is managed by the undo and possibly destroyed!
- aEditDoc.Remove( nPara );
+ aEditDoc.Release( nPara );
GetParaPortions().Remove( nPara );
if ( IsCallParaInsertedOrDeleted() )
More information about the Libreoffice-commits
mailing list