sw/source/filter/ww8/ww8par2.cxx | 89 ++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 52 deletions(-)
New commits: commit 2406745e4e78e0346b1b303870abd0a85e861405 Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Mar 21 12:30:05 2012 +0100 Further clean up of previous patch diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx index 84fcfc5..f73e424 100644 --- a/sw/source/filter/ww8/ww8par2.cxx +++ b/sw/source/filter/ww8/ww8par2.cxx @@ -95,8 +95,6 @@ public: {} }; -typedef WW8SelBoxInfo* WW8SelBoxInfoPtr; - typedef boost::ptr_vector<WW8SelBoxInfo> WW8MergeGroups; struct WW8TabBandDesc @@ -223,9 +221,7 @@ class WW8TabDesc void InsertCells( short nIns ); void AdjustNewBand(); - // durchsucht aMergeGroups, meldet Index der ersten, passenden Gruppe bzw. - // -1 Details siehe bei der Implementierung - bool FindMergeGroup(short nX1, short nWidth, bool bExact, short& nMGrIdx); + WW8SelBoxInfo* FindMergeGroup(short nX1, short nWidth, bool bExact); // einzelne Box ggfs. in eine Merge-Gruppe aufnehmen // (die Merge-Gruppen werden dann spaeter auf einen Schlag abgearbeitet) @@ -2567,7 +2563,7 @@ void WW8TabDesc::MergeCells() for( short j = 0; j < pActBand->nRows; j++, nRow++ ) for( short i = 0; i < pActBand->nWwCols; i++ ) { - WW8SelBoxInfoPtr pActMGroup = 0; + WW8SelBoxInfo* pActMGroup = 0; // // ggfs. eine neue Merge-Gruppe beginnen // @@ -2650,11 +2646,15 @@ void WW8TabDesc::MergeCells() // 1. ggfs. alte Mergegruppe(n) schliessen, die // den von unserer neuen Gruppe betroffenen // X-Bereich ueberdecken - short nMGrIdx; - while ( FindMergeGroup( nX1, pActMGroup->nGroupWidth, - false, nMGrIdx ) ) + for (;;) { - aMergeGroups[ nMGrIdx ].bGroupLocked = true; + WW8SelBoxInfo* p = FindMergeGroup( + nX1, pActMGroup->nGroupWidth, false ); + if (p == 0) + { + break; + } + p->bGroupLocked = true; } // 3. und in Gruppen-Array eintragen @@ -2736,8 +2736,8 @@ void WW8TabDesc::FinishSwTable() // bearbeite alle Merge-Gruppen nacheinander for ( WW8MergeGroups::iterator groupIt = aMergeGroups.begin(); - groupIt < aMergeGroups.end(); - groupIt++) + groupIt != aMergeGroups.end(); + ++groupIt) { sal_uInt16 nActBoxCount = groupIt->size(); @@ -2769,16 +2769,12 @@ void WW8TabDesc::FinishSwTable() // bExact = Flag, ob Box in dieser Gruppe passen muss, // oder diese nur zu tangieren braucht // -bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact, - short& nMGrIdx) +WW8SelBoxInfo* WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact) { - nMGrIdx = -1; if( !aMergeGroups.empty() ) { // noch als gueltig angesehener Bereich in der Naehe der Grenzen const short nToleranz = 4; - // die aktuell untersuchte Gruppe - // Boxgrenzen short nX2 = nX1 + nWidth; // ungefaehre Gruppengrenzen @@ -2801,7 +2797,7 @@ bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact, // if( ( nX1 > nGrX1 ) && ( nX2 < nGrX2 ) ) { - nMGrIdx = iGr; break; + return &rActGroup; } // // hat die Box Bereiche mit der Gruppe gemeinsam? @@ -2817,13 +2813,13 @@ bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact, || ( ( nX1 <=nGrX1 ) && ( nX2 >=nGrX2 ) ) ) { - nMGrIdx = iGr; break; + return &rActGroup; } } } } } - return ( -1 < nMGrIdx ); + return 0; } bool WW8TabDesc::IsValidCell(short nCol) const @@ -3330,10 +3326,8 @@ SwTableBox* WW8TabDesc::UpdateTableMergeGroup( WW8_TCell& rCell, else { // Gruppe finden - short nMGrIdx; - if( FindMergeGroup( pActBand->nCenter[ nCol ], - pActBand->nWidth[ nCol ], true, nMGrIdx ) ) - pTheMergeGroup = &aMergeGroups.at( nMGrIdx ); + pTheMergeGroup = FindMergeGroup( + pActBand->nCenter[ nCol ], pActBand->nWidth[ nCol ], true ); } if( pTheMergeGroup ) { commit 831a8e8f6dcadb48b9d240b8d8d5bfe67742bf67 Author: Arnaud Versini <arnaud.vers...@gmail.com> Date: Sun Mar 18 10:20:37 2012 +0100 Use ptr_vector instead of SV_DECL_PTRARR_DEL for WW8MergeGroups diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx index b78030c..84fcfc5 100644 --- a/sw/source/filter/ww8/ww8par2.cxx +++ b/sw/source/filter/ww8/ww8par2.cxx @@ -97,8 +97,7 @@ public: typedef WW8SelBoxInfo* WW8SelBoxInfoPtr; -SV_DECL_PTRARR_DEL(WW8MergeGroups, WW8SelBoxInfoPtr, 16) -SV_IMPL_PTRARR(WW8MergeGroups, WW8SelBoxInfoPtr) +typedef boost::ptr_vector<WW8SelBoxInfo> WW8MergeGroups; struct WW8TabBandDesc { @@ -186,7 +185,7 @@ class WW8TabDesc SwTableBoxes* pTabBoxes; // Boxen-Array in akt. Zeile SwTableBox* pTabBox; // akt. Zelle - WW8MergeGroups* pMergeGroups; // Listen aller zu verknuepfenden Zellen + WW8MergeGroups aMergeGroups; // Listen aller zu verknuepfenden Zellen WW8_TCell* pAktWWCell; @@ -224,7 +223,7 @@ class WW8TabDesc void InsertCells( short nIns ); void AdjustNewBand(); - // durchsucht pMergeGroups, meldet Index der ersten, passenden Gruppe bzw. + // durchsucht aMergeGroups, meldet Index der ersten, passenden Gruppe bzw. // -1 Details siehe bei der Implementierung bool FindMergeGroup(short nX1, short nWidth, bool bExact, short& nMGrIdx); @@ -1786,7 +1785,6 @@ WW8TabDesc::WW8TabDesc(SwWW8ImplReader* pIoClass, WW8_CP nStartCp) : pTabLine(0), pTabBoxes(0), pTabBox(0), - pMergeGroups(0), pAktWWCell(0), nRows(0), nDefaultSwCols(0), @@ -2112,7 +2110,6 @@ WW8TabDesc::~WW8TabDesc() } delete pParentPos; - delete pMergeGroups; } void WW8TabDesc::CalcDefaults() @@ -2630,11 +2627,6 @@ void WW8TabDesc::MergeCells() short nX1 = pActBand->nCenter[ i ]; short nWidth = pActBand->nWidth[ i ]; - // 0. falls noetig das Array fuer die Merge-Gruppen - // anlegen - if( !pMergeGroups ) - pMergeGroups = new WW8MergeGroups; - // 2. aktuelle Merge-Gruppe anlegen pActMGroup = new WW8SelBoxInfo( nX1, nWidth ); @@ -2662,11 +2654,11 @@ void WW8TabDesc::MergeCells() while ( FindMergeGroup( nX1, pActMGroup->nGroupWidth, false, nMGrIdx ) ) { - (*pMergeGroups)[ nMGrIdx ]->bGroupLocked = true; + aMergeGroups[ nMGrIdx ].bGroupLocked = true; } // 3. und in Gruppen-Array eintragen - pMergeGroups->Insert(pActMGroup, pMergeGroups->Count()); + aMergeGroups.push_back(pActMGroup); } // ggfs. akt. Box zu einer Merge-Gruppe hinzufuegen (dies @@ -2739,22 +2731,21 @@ void WW8TabDesc::FinishSwTable() MergeCells(); // falls noetig, zu mergende Zellen gruppenweise zusammenfassen - if( pMergeGroups ) + if( !aMergeGroups.empty() ) { // bearbeite alle Merge-Gruppen nacheinander - WW8SelBoxInfo* pActMGroup; - sal_uInt16 nActBoxCount; - - for (sal_uInt16 iGr = 0; iGr < pMergeGroups->Count(); ++iGr) + for ( + WW8MergeGroups::iterator groupIt = aMergeGroups.begin(); + groupIt < aMergeGroups.end(); + groupIt++) { - pActMGroup = (*pMergeGroups)[ iGr ]; - nActBoxCount = pActMGroup->size(); + sal_uInt16 nActBoxCount = groupIt->size(); - if( ( 1 < nActBoxCount ) && pActMGroup && pActMGroup->begin()->second ) + if( ( 1 < nActBoxCount ) && groupIt->begin()->second ) { - const sal_uInt16 nRowSpan = pActMGroup->size(); + const sal_uInt16 nRowSpan = groupIt->size(); sal_uInt16 n = 0; - for( SwSelBoxes::const_iterator it = pActMGroup->begin(); it != pActMGroup->end(); ++it ) + for( SwSelBoxes::const_iterator it = groupIt->begin(); it != groupIt->end(); ++it ) { SwTableBox* pCurrentBox = it->second; const long nRowSpanSet = n == 0 ? @@ -2766,12 +2757,12 @@ void WW8TabDesc::FinishSwTable() } } pIo->pFmtOfJustInsertedApo = 0; - DELETEZ( pMergeGroups ); + aMergeGroups.clear(); } } -// durchsucht pMergeGroups, meldet Index der ersten, passenden Gruppe bzw. -1 +// durchsucht aMergeGroups, meldet Index der ersten, passenden Gruppe bzw. -1 // // Parameter: nXcenter = Mittenposition der anfragenden Box // nWidth = Breite der anfragenden Box @@ -2782,12 +2773,12 @@ bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact, short& nMGrIdx) { nMGrIdx = -1; - if( pMergeGroups ) + if( !aMergeGroups.empty() ) { // noch als gueltig angesehener Bereich in der Naehe der Grenzen const short nToleranz = 4; // die aktuell untersuchte Gruppe - WW8SelBoxInfoPtr pActGroup; + // Boxgrenzen short nX2 = nX1 + nWidth; // ungefaehre Gruppengrenzen @@ -2795,16 +2786,16 @@ bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact, short nGrX2; // improvement: search backwards - for ( short iGr = pMergeGroups->Count() - 1; iGr >= 0; --iGr ) + for ( short iGr = aMergeGroups.size() - 1; iGr >= 0; --iGr ) { // die aktuell untersuchte Gruppe - pActGroup = (*pMergeGroups)[ iGr ]; - if (!pActGroup->bGroupLocked) + WW8SelBoxInfo& rActGroup = aMergeGroups[ iGr ]; + if (!rActGroup.bGroupLocked) { // ungefaehre Gruppengrenzen mit Toleranz nach *aussen* hin - nGrX1 = pActGroup->nGroupXStart - nToleranz; - nGrX2 = pActGroup->nGroupXStart - +pActGroup->nGroupWidth + nToleranz; + nGrX1 = rActGroup.nGroupXStart - nToleranz; + nGrX2 = rActGroup.nGroupXStart + +rActGroup.nGroupWidth + nToleranz; // // Falls Box reinpasst, melde auf jeden Fall den Erfolg // @@ -3342,7 +3333,7 @@ SwTableBox* WW8TabDesc::UpdateTableMergeGroup( WW8_TCell& rCell, short nMGrIdx; if( FindMergeGroup( pActBand->nCenter[ nCol ], pActBand->nWidth[ nCol ], true, nMGrIdx ) ) - pTheMergeGroup = (*pMergeGroups)[ nMGrIdx ]; + pTheMergeGroup = &aMergeGroups.at( nMGrIdx ); } if( pTheMergeGroup ) { _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits