sw/inc/bparr.hxx | 8 ++++-- sw/source/core/bastyp/bparr.cxx | 16 +++++-------- sw/source/core/docnode/ndcopy.cxx | 2 - sw/source/core/docnode/nodes.cxx | 34 ++++++++++++++-------------- sw/source/core/txtnode/ndtxt.cxx | 6 ++++ writerfilter/source/dmapper/PropertyMap.cxx | 23 ++++++++++++++++++ 6 files changed, 59 insertions(+), 30 deletions(-)
New commits: commit a4788b254268aa2d61b14678301f22cdbd27d2e7 Author: Michael Stahl <mst...@redhat.com> Date: Wed Mar 21 10:42:02 2012 +0100 Revert "sw-outline-numbering-broken-fix.diff: outline numbering fix in master docs" This reverts commit 9a11bd42af0db32fd06c84dd955ee563134665ce. Removing attributes from the _source_ node in SwTxtNode::MakeCopy does not make any sens at all, and the cited issue i#96092 was apparently fixed independently in CWS sw31bf04 by the change to ndtxt.cxx in 1524aa18b9ddf7a4181e3f278155c48655084452. diff --git a/sw/source/core/docnode/ndcopy.cxx b/sw/source/core/docnode/ndcopy.cxx index 2461505..4aabfba 100644 --- a/sw/source/core/docnode/ndcopy.cxx +++ b/sw/source/core/docnode/ndcopy.cxx @@ -266,7 +266,7 @@ SwCntntNode* SwTxtNode::MakeCopy( SwDoc* pDoc, const SwNodeIndex& rIdx ) const // kopiere Attribute/Text if( !pCpyAttrNd->HasSwAttrSet() ) // wurde ein AttrSet fuer die Numerierung angelegt, so loesche diesen! - pCpyAttrNd->ResetAllAttr(); + pTxtNd->ResetAllAttr(); // if Copy-Textnode unequal to Copy-Attrnode, then copy first // the attributes into the new Node. commit cc99bb9f383a65912d004e227a5b6a88b401bbba Author: Michael Stahl <mst...@redhat.com> Date: Wed Mar 21 10:37:46 2012 +0100 writerfilter: PropertyMap: speed this up a bit Using XMultiPropertySet reduces the number of SwTxtNodes created for the bugdoc from rhbz#789022 from ~5k to ~3k. diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 575730f..ee3ba7f 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -32,6 +32,7 @@ #include <i18nutil/paper.hxx> #include <rtl/oustringostreaminserter.hxx> #include <com/sun/star/beans/PropertyValue.hpp> +#include <com/sun/star/beans/XMultiPropertySet.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/table/BorderLine2.hpp> #include <com/sun/star/container/XEnumeration.hpp> @@ -986,6 +987,28 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl ) void SectionPropertyMap::_ApplyProperties( uno::Reference< beans::XPropertySet > xStyle ) { PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier(); + uno::Reference<beans::XMultiPropertySet> const xMultiSet(xStyle, + uno::UNO_QUERY); + if (xMultiSet.is()) + { // FIXME why is "this" a STL container??? + uno::Sequence<rtl::OUString> names(this->size()); + uno::Sequence<uno::Any> values(this->size()); + PropertyMap::iterator it = this->begin(); + for (size_t i = 0; it != this->end(); ++it, ++i) + { + names[i] = rPropNameSupplier.GetName(it->first.eId); + values[i] = it->second; + } + try + { + xMultiSet->setPropertyValues(names, values); + } + catch( const uno::Exception& ) + { + OSL_FAIL( "Exception in <PageStyle>::setPropertyValue"); + } + return; + } PropertyMap::iterator aMapIter = begin(); while( aMapIter != end()) { commit 082906e1f4cf58fdfab1a4064e2b7955fcdaeb8a Author: Michael Stahl <mst...@redhat.com> Date: Wed Mar 21 10:25:45 2012 +0100 rhbz#789022: SwNodes: fix inconsistent outline check: SwNodes::UpdateOutlineNode will add/remove the node from SwNodes::pOutlineNds depending on IsOutline(), while various SwNodes methods that move and delete nodes check GetAttrOutlineLevel() != 0, which may be false even if IsOutline() is true. diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx index 518de82..ab12430 100644 --- a/sw/source/core/docnode/nodes.cxx +++ b/sw/source/core/docnode/nodes.cxx @@ -173,7 +173,7 @@ void SwNodes::ChgNode( SwNodeIndex& rDelPos, sal_uLong nSz, pTxtNode->RemoveFromList(); - if ( pTxtNode->GetAttrOutlineLevel() != 0 )//<-end,zhaojianwei + if (pTxtNode->IsOutline()) { const SwNodePtr pSrch = (SwNodePtr)&rNd; pOutlineNds->Remove( pSrch ); @@ -188,8 +188,7 @@ void SwNodes::ChgNode( SwNodeIndex& rDelPos, sal_uLong nSz, rTxtNd.AddToList(); - if( bInsOutlineIdx && - 0 != rTxtNd.GetAttrOutlineLevel() )//<-end,zhaojianwei + if (bInsOutlineIdx && rTxtNd.IsOutline()) { const SwNodePtr pSrch = (SwNodePtr)&rNd; pOutlineNds->Insert( pSrch ); @@ -232,9 +231,11 @@ void SwNodes::ChgNode( SwNodeIndex& rDelPos, sal_uLong nSz, { SwTxtNode* pTxtNd = (SwTxtNode*)pNd; - // loesche die Gliederungs-Indizies aus dem alten Nodes-Array - if( 0 != pTxtNd->GetAttrOutlineLevel() )//<-end,zhaojianwei + // remove outline index from old nodes array + if (pTxtNd->IsOutline()) + { pOutlineNds->Remove( pNd ); + } // muss die Rule kopiere werden? if( pDestDoc ) @@ -269,8 +270,7 @@ void SwNodes::ChgNode( SwNodeIndex& rDelPos, sal_uLong nSz, { SwpHints * const pHts = pTxtNd->GetpSwpHints(); // OultineNodes set the new nodes in the array - if( bInsOutlineIdx && - 0 != pTxtNd->GetAttrOutlineLevel() ) //#outline level,added by zhaojianwei + if (bInsOutlineIdx && pTxtNd->IsOutline()) { rNds.pOutlineNds->Insert( pTxtNd ); } @@ -537,12 +537,12 @@ sal_Bool SwNodes::_MoveNodes( const SwNodeRange& aRange, SwNodes & rNodes, if( pTmpNd->IsTxtNode() ) ((SwTxtNode*)pTmpNd)->RemoveFromList(); - // setze bei Start/EndNodes die richtigen Indizies - // loesche die Gliederungs-Indizies aus - // dem alten Nodes-Array - if( pCNd->IsTxtNode() && 0 != - ((SwTxtNode*)pCNd)->GetAttrOutlineLevel() )//<-end,by zhaojianwei + // remove outline index from old nodes array + if (pCNd->IsTxtNode() && + static_cast<SwTxtNode*>(pCNd)->IsOutline()) + { pOutlineNds->Remove( pCNd ); + } else pCNd = 0; } @@ -572,7 +572,7 @@ sal_Bool SwNodes::_MoveNodes( const SwNodeRange& aRange, SwNodes & rNodes, SwNode* pNd = &aMvIdx.GetNode(); const bool bOutlNd = pNd->IsTxtNode() && - 0 != ((SwTxtNode*)pNd)->GetAttrOutlineLevel();//<-end,zhaojianwei + static_cast<SwTxtNode*>(pNd)->IsOutline(); // loesche die Gliederungs-Indizies aus // dem alten Nodes-Array if( bOutlNd ) @@ -1221,14 +1221,15 @@ void SwNodes::Delete(const SwNodeIndex &rIndex, sal_uLong nNodes) if( pNd->IsTxtNode() ) { - if( 0 != ((SwTxtNode*)pNd)->GetAttrOutlineLevel() &&//<-end,zhaojianwei + SwTxtNode *const pTxtNode(static_cast<SwTxtNode*>(pNd)); + if (pTxtNode->IsOutline() && pOutlineNds->Seek_Entry( pNd, &nIdxPos )) { // loesche die Gliederungs-Indizies. pOutlineNds->Remove( nIdxPos ); bUpdateOutline = sal_True; } - ((SwTxtNode*)pNd)->InvalidateNumRule(); + pTxtNode->InvalidateNumRule(); } else if( pNd->IsEndNode() && pNd->pStartOfSection->IsTableNode() ) @@ -1522,8 +1523,7 @@ void SwNodes::DelNodes( const SwNodeIndex & rStart, sal_uLong nCnt ) { SwNode* pNd = (*this)[ n ]; - if( pNd->IsTxtNode() && - 0 != ((SwTxtNode*)pNd)->GetAttrOutlineLevel() ) //<-end,zhaojianwei + if (pNd->IsTxtNode() && static_cast<SwTxtNode*>(pNd)->IsOutline()) { // loesche die Gliederungs-Indizies. sal_uInt16 nIdxPos; if( pOutlineNds->Seek_Entry( pNd, &nIdxPos )) diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx index 2691f28..fa6f3b0 100644 --- a/sw/source/core/txtnode/ndtxt.cxx +++ b/sw/source/core/txtnode/ndtxt.cxx @@ -261,6 +261,12 @@ SwTxtNode::~SwTxtNode() delete pTmpHints; } + // must be removed from outline nodes by now +#if OSL_DEBUG_LEVEL > 0 + sal_uInt16 foo; + assert(!GetNodes().GetOutLineNds().Seek_Entry(this, &foo)); +#endif + RemoveFromList(); InitSwParaStatistics( false ); commit 176ba743c12ecbfdda71522062f6d1a5749f3756 Author: Michael Stahl <mst...@redhat.com> Date: Wed Mar 21 10:21:03 2012 +0100 BigPtrArray: deploy some asserts diff --git a/sw/inc/bparr.hxx b/sw/inc/bparr.hxx index cd95b1c..a2834d3 100644 --- a/sw/inc/bparr.hxx +++ b/sw/inc/bparr.hxx @@ -26,8 +26,10 @@ * ************************************************************************/ -#ifndef _BPARR_HXX -#define _BPARR_HXX +#ifndef SW_BPARR_HXX +#define SW_BPARR_HXX + +#include <assert.h> #include <tools/solar.h> #include <osl/diagnose.h> @@ -113,7 +115,7 @@ public: inline sal_uLong BigPtrEntry::GetPos() const { - OSL_ENSURE( this == pBlock->pData[ nOffset ], "element not in the block" ); + assert(this == pBlock->pData[ nOffset ]); // element not in the block return pBlock->nStart + nOffset; } diff --git a/sw/source/core/bastyp/bparr.cxx b/sw/source/core/bastyp/bparr.cxx index ef92103..561e334 100644 --- a/sw/source/core/bastyp/bparr.cxx +++ b/sw/source/core/bastyp/bparr.cxx @@ -43,18 +43,16 @@ const sal_uInt16 nBlockGrowSize = 20; void CheckIdx( BlockInfo** ppInf, sal_uInt16 nBlock, sal_uLong nSize, sal_uInt16 nCur ) { - OSL_ENSURE( !nSize || nCur < nBlock, "BigPtrArray: CurIndex steht falsch" ); + assert(!nSize || nCur < nBlock); // BigPtrArray: CurIndex invalid sal_uLong nIdx = 0; for( sal_uInt16 nCnt = 0; nCnt < nBlock; ++nCnt, ++ppInf ) { nIdx += (*ppInf)->nElem; - // Array mit Luecken darf es nicht geben - OSL_ENSURE( !nCnt || (*(ppInf-1))->nEnd + 1 == (*ppInf)->nStart, - "BigPtrArray: Luecke in der Verwaltung!" ); + // Array with holes is not allowed + assert(!nCnt || (*(ppInf-1))->nEnd + 1 == (*ppInf)->nStart); } - - OSL_ENSURE( nIdx == nSize, "BigPtrArray: Anzahl ungueltig" ); + assert(nIdx == nSize); // invalid count in nSize } #else @@ -137,8 +135,8 @@ void BigPtrArray::ForEach( sal_uLong nStart, sal_uLong nEnd, ElementPtr BigPtrArray::operator[]( sal_uLong idx ) const { + assert(idx < nSize); // operator[]: Index out of bounds // weil die Funktion eben doch nicht const ist: - OSL_ENSURE( idx < nSize, "operator[]: Index aussserhalb" ); BigPtrArray* pThis = (BigPtrArray*) this; sal_uInt16 cur = Index2Block( idx ); BlockInfo* p = ppInf[ cur ]; @@ -349,7 +347,7 @@ void BigPtrArray::Insert( const ElementPtr& rElem, sal_uLong pos ) } // Nun haben wir einen freien Block am Wickel: eintragen pos -= p->nStart; - OSL_ENSURE( pos < MAXENTRY, "falsche Pos" ); + assert(pos < MAXENTRY); if( pos != p->nElem ) { int nCount = p->nElem - sal_uInt16(pos); @@ -458,8 +456,8 @@ void BigPtrArray::Remove( sal_uLong pos, sal_uLong n ) void BigPtrArray::Replace( sal_uLong idx, const ElementPtr& rElem) { + assert(idx < nSize); // Index out of bounds // weil die Funktion eben doch nicht const ist: - OSL_ENSURE( idx < nSize, "Set: Index aussserhalb" ); BigPtrArray* pThis = (BigPtrArray*) this; sal_uInt16 cur = Index2Block( idx ); BlockInfo* p = ppInf[ cur ]; _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits