[Libreoffice-commits] .: 2 commits - editeng/source
Kohei Yoshida
kohei at kemper.freedesktop.org
Wed Mar 28 12:31:02 PDT 2012
editeng/source/editeng/editdoc.hxx | 10 +++------
editeng/source/editeng/editdoc2.cxx | 6 +++--
editeng/source/editeng/editeng.cxx | 2 -
editeng/source/editeng/editundo.cxx | 40 +++++++++++++++++++++++-------------
editeng/source/editeng/editundo.hxx | 7 ++++--
editeng/source/editeng/impedit5.cxx | 2 -
6 files changed, 41 insertions(+), 26 deletions(-)
New commits:
commit 48cd6ac1ec7e92a9c9a21f5365db4f9ff5fde93c
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Mar 28 15:31:05 2012 -0400
Fix tinderbox error & some cleanup.
diff --git a/editeng/source/editeng/editdoc.hxx b/editeng/source/editeng/editdoc.hxx
index 7551eca..7f760f3 100644
--- a/editeng/source/editeng/editdoc.hxx
+++ b/editeng/source/editeng/editdoc.hxx
@@ -298,10 +298,11 @@ SV_DECL_PTRARR( DummyContentList, ContentNodePtr, 0 )
class ContentList : public DummyContentList
{
- sal_uInt16 nLastCache;
+ sal_uInt16 nLastCache;
+
public:
- ContentList() : DummyContentList( 0 ), nLastCache(0) {}
- sal_uInt16 GetPos( const ContentNodePtr &rPtr ) const;
+ ContentList();
+ sal_uInt16 GetPos(ContentNode* p) const;
};
// -------------------------------------------------------------------------
diff --git a/editeng/source/editeng/editdoc2.cxx b/editeng/source/editeng/editdoc2.cxx
index c13b656..68da6aa 100644
--- a/editeng/source/editeng/editdoc2.cxx
+++ b/editeng/source/editeng/editdoc2.cxx
@@ -337,10 +337,12 @@ sal_uInt16 ParaPortionList::GetPos( const ParaPortionPtr &rPtr ) const
((ParaPortionList *)this)->nLastCache );
}
-sal_uInt16 ContentList::GetPos( const ContentNodePtr &rPtr ) const
+ContentList::ContentList() : DummyContentList( 0 ), nLastCache(0) {}
+
+sal_uInt16 ContentList::GetPos(ContentNode* p) const
{
return FastGetPos( reinterpret_cast<const VoidPtr *>( GetData() ),
- Count(), static_cast<VoidPtr>( rPtr ),
+ Count(), static_cast<VoidPtr>(p),
((ContentList *)this)->nLastCache );
}
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index 0954d51..9fcd0a2 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -2113,7 +2113,7 @@ void EditEngine::RemoveFields( sal_Bool bKeepFieldText, TypeId aType )
const SvxFieldData* pFldData = static_cast<const SvxFieldItem*>(rAttr.GetItem())->GetField();
if ( pFldData && ( !aType || ( pFldData->IsA( aType ) ) ) )
{
- DBG_ASSERT( rAttr->GetItem()->ISA( SvxFieldItem ), "no field item..." );
+ DBG_ASSERT( dynamic_cast<const SvxFieldItem*>(rAttr.GetItem()), "no field item..." );
EditSelection aSel( EditPaM(pNode, rAttr.GetStart()), EditPaM(pNode, rAttr.GetEnd()) );
String aFieldText = static_cast<const EditCharAttribField&>(rAttr).GetFieldValue();
pImpEditEngine->ImpInsertText( aSel, aFieldText );
commit 17cc39f2b0ef13efdfb052fe6b815508879fb755
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Wed Mar 28 14:54:42 2012 -0400
ContentInfoArray is gone.
diff --git a/editeng/source/editeng/editdoc.hxx b/editeng/source/editeng/editdoc.hxx
index 1114990..7551eca 100644
--- a/editeng/source/editeng/editdoc.hxx
+++ b/editeng/source/editeng/editdoc.hxx
@@ -135,9 +135,6 @@ public:
void AppendCharAttrib(EditCharAttrib* pNew);
};
-typedef ContentAttribsInfo* ContentAttribsInfoPtr;
-SV_DECL_PTRARR( ContentInfoArray, ContentAttribsInfoPtr, 1 )
-
// ----------------------------------------------------------------------
// class SvxColorList
// ----------------------------------------------------------------------
diff --git a/editeng/source/editeng/editundo.cxx b/editeng/source/editeng/editundo.cxx
index e29043b..b59b71a 100644
--- a/editeng/source/editeng/editundo.cxx
+++ b/editeng/source/editeng/editundo.cxx
@@ -540,18 +540,26 @@ EditUndoSetAttribs::EditUndoSetAttribs( ImpEditEngine* _pImpEE, const ESelection
nSpecial = 0;
}
+namespace {
+
+struct RemoveAttribsFromPool : std::unary_function<ContentAttribsInfo, void>
+{
+ SfxItemPool& mrPool;
+public:
+ RemoveAttribsFromPool(SfxItemPool& rPool) : mrPool(rPool) {}
+ void operator() (ContentAttribsInfo& rInfo)
+ {
+ rInfo.RemoveAllCharAttribsFromPool(mrPool);
+ }
+};
+
+}
+
EditUndoSetAttribs::~EditUndoSetAttribs()
{
// Get Items from Pool...
SfxItemPool* pPool = aNewAttribs.GetPool();
- sal_uInt16 nContents = aPrevAttribs.Count();
- for ( sal_uInt16 n = 0; n < nContents; n++ )
- {
- ContentAttribsInfo* pInf = aPrevAttribs[n];
- DBG_ASSERT( pInf, "Undo_DTOR (SetAttribs): pInf = NULL!" );
- pInf->RemoveAllCharAttribsFromPool(*pPool);
- delete pInf;
- }
+ std::for_each(aPrevAttribs.begin(), aPrevAttribs.end(), RemoveAttribsFromPool(*pPool));
}
void EditUndoSetAttribs::Undo()
@@ -561,20 +569,19 @@ void EditUndoSetAttribs::Undo()
bool bFields = false;
for ( sal_uInt16 nPara = aESel.nStartPara; nPara <= aESel.nEndPara; nPara++ )
{
- ContentAttribsInfo* pInf = aPrevAttribs[ (sal_uInt16)(nPara-aESel.nStartPara) ];
- DBG_ASSERT( pInf, "Undo (SetAttribs): pInf = NULL!" );
+ const ContentAttribsInfo& rInf = aPrevAttribs[nPara-aESel.nStartPara];
// first the paragraph attributes ...
- _pImpEE->SetParaAttribs( nPara, pInf->GetPrevParaAttribs() );
+ _pImpEE->SetParaAttribs(nPara, rInf.GetPrevParaAttribs());
// Then the character attributes ...
// Remove all attributes including features, are later re-established.
- _pImpEE->RemoveCharAttribs( nPara, 0, sal_True );
+ _pImpEE->RemoveCharAttribs(nPara, 0, true);
DBG_ASSERT( _pImpEE->GetEditDoc().SaveGetObject( nPara ), "Undo (SetAttribs): pNode = NULL!" );
ContentNode* pNode = _pImpEE->GetEditDoc().GetObject( nPara );
- for (size_t nAttr = 0; nAttr < pInf->GetPrevCharAttribs().size(); ++nAttr)
+ for (size_t nAttr = 0; nAttr < rInf.GetPrevCharAttribs().size(); ++nAttr)
{
- const EditCharAttrib& rX = pInf->GetPrevCharAttribs()[nAttr];
+ const EditCharAttrib& rX = rInf.GetPrevCharAttribs()[nAttr];
// is automatically "poolsized"
_pImpEE->GetEditDoc().InsertAttrib(pNode, rX.GetStart(), rX.GetEnd(), *rX.GetItem());
if (rX.Which() == EE_FEATURE_FIELD)
@@ -600,6 +607,11 @@ void EditUndoSetAttribs::Redo()
ImpSetSelection( GetImpEditEngine()->GetActiveView() );
}
+void EditUndoSetAttribs::AppendContentInfo(ContentAttribsInfo* pNew)
+{
+ aPrevAttribs.push_back(pNew);
+}
+
void EditUndoSetAttribs::ImpSetSelection( EditView* /*pView*/ )
{
ImpEditEngine* _pImpEE = GetImpEditEngine();
diff --git a/editeng/source/editeng/editundo.hxx b/editeng/source/editeng/editundo.hxx
index 0479d1f..bfb141c 100644
--- a/editeng/source/editeng/editundo.hxx
+++ b/editeng/source/editeng/editundo.hxx
@@ -240,9 +240,11 @@ public:
class EditUndoSetAttribs: public EditUndo
{
private:
+ typedef boost::ptr_vector<ContentAttribsInfo> InfoArrayType;
+
ESelection aESel;
SfxItemSet aNewAttribs;
- ContentInfoArray aPrevAttribs;
+ InfoArrayType aPrevAttribs;
sal_uInt8 nSpecial;
sal_Bool bSetIsRemove;
@@ -257,7 +259,6 @@ public:
EditUndoSetAttribs( ImpEditEngine* pImpEE, const ESelection& rESel, const SfxItemSet& rNewItems );
~EditUndoSetAttribs();
- ContentInfoArray& GetContentInfos() { return aPrevAttribs; }
SfxItemSet& GetNewAttribs() { return aNewAttribs; }
void SetSpecial( sal_uInt8 n ) { nSpecial = n; }
@@ -267,6 +268,8 @@ public:
virtual void Undo();
virtual void Redo();
+
+ void AppendContentInfo(ContentAttribsInfo* pNew);
};
// -----------------------------------------------------------------------
diff --git a/editeng/source/editeng/impedit5.cxx b/editeng/source/editeng/impedit5.cxx
index 7dd4ab4..b59ad86 100644
--- a/editeng/source/editeng/impedit5.cxx
+++ b/editeng/source/editeng/impedit5.cxx
@@ -213,7 +213,7 @@ EditUndoSetAttribs* ImpEditEngine::CreateAttribUndo( EditSelection aSel, const S
ContentNode* pNode = aEditDoc.GetObject( nPara );
DBG_ASSERT( aEditDoc.SaveGetObject( nPara ), "Node not found: CreateAttribUndo" );
ContentAttribsInfo* pInf = new ContentAttribsInfo( pNode->GetContentAttribs().GetItems() );
- pUndo->GetContentInfos().Insert( pInf, pUndo->GetContentInfos().Count() );
+ pUndo->AppendContentInfo(pInf);
for ( sal_uInt16 nAttr = 0; nAttr < pNode->GetCharAttribs().Count(); nAttr++ )
{
More information about the Libreoffice-commits
mailing list