diff options
author | Marcel Metz <mmetz@adrian-broher.net> | 2011-12-21 20:00:03 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2011-12-21 20:14:52 +0100 |
commit | 713d69d96038fdd5479de076270c2186f95c2630 (patch) | |
tree | 57a41b8dec92b6a058131773f51aa1f2c905149c /sc | |
parent | Replace SwTxtPortionTable with std::map. (diff) | |
download | core-713d69d96038fdd5479de076270c2186f95c2630.tar.gz core-713d69d96038fdd5479de076270c2186f95c2630.zip |
fdo#38832 Replace ScChangeActionTable with std::map
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/chgtrack.hxx | 42 | ||||
-rw-r--r-- | sc/source/core/tool/chgtrack.cxx | 138 | ||||
-rw-r--r-- | sc/source/filter/xcl97/XclExpChangeTrack.cxx | 12 | ||||
-rw-r--r-- | sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx | 6 | ||||
-rw-r--r-- | sc/source/ui/inc/acredlin.hxx | 8 | ||||
-rw-r--r-- | sc/source/ui/miscdlgs/acredlin.cxx | 99 |
7 files changed, 167 insertions, 140 deletions
diff --git a/sc/inc/chgtrack.hxx b/sc/inc/chgtrack.hxx index 5dc02d81bc59..9dd27cac72a5 100644 --- a/sc/inc/chgtrack.hxx +++ b/sc/inc/chgtrack.hxx @@ -30,11 +30,11 @@ #define SC_CHGTRACK_HXX #include <deque> +#include <map> #include <stack> #include <tools/string.hxx> #include <tools/datetime.hxx> -#include <tools/table.hxx> #include <tools/mempool.hxx> #include <tools/link.hxx> #include <unotools/options.hxx> @@ -952,6 +952,7 @@ struct ScChangeTrackMsgInfo // MsgQueue for notification via ModifiedLink typedef std::deque<ScChangeTrackMsgInfo*> ScChangeTrackMsgQueue; typedef std::stack<ScChangeTrackMsgInfo*> ScChangeTrackMsgStack; +typedef std::map<sal_uLong, ScChangeAction*> ScChangeActionMap; enum ScChangeTrackMergeState { @@ -962,9 +963,6 @@ enum ScChangeTrackMergeState SC_CTMS_OTHER }; -// Table, additionally to pFirst/pNext/pLast/pPrev, to enable fast access by ActionNumber and by list -DECLARE_TABLE( ScChangeActionTable, ScChangeAction* ) - // Internally generated actions start at this value (nearly all bits set) // and are decremented, to keep values in a table seperated from "normal" actions. #define SC_CHGTRACK_GENERATED_START ((sal_uInt32) 0xfffffff0) @@ -981,9 +979,9 @@ class ScChangeTrack : public utl::ConfigurationListener static const SCSIZE nContentSlots; com::sun::star::uno::Sequence< sal_Int8 > aProtectPass; - ScChangeActionTable aTable; - ScChangeActionTable aGeneratedTable; - ScChangeActionTable aPasteCutTable; + ScChangeActionMap aMap; + ScChangeActionMap aGeneratedMap; + ScChangeActionMap aPasteCutMap; ScChangeTrackMsgQueue aMsgQueue; ScChangeTrackMsgStack aMsgStackTmp; ScChangeTrackMsgStack aMsgStackFinal; @@ -1097,7 +1095,7 @@ class ScChangeTrack : public utl::ConfigurationListener // is NULL otherwise. // bRecursion == called from reject with table sal_Bool Reject( ScChangeAction*, - ScChangeActionTable*, sal_Bool bRecursion ); + ScChangeActionMap*, sal_Bool bRecursion ); #endif // SC_CHGTRACK_CXX @@ -1126,9 +1124,21 @@ public: sal_Bool IsGenerated( sal_uLong nAction ) const { return nAction >= nGeneratedMin; } ScChangeAction* GetAction( sal_uLong nAction ) const - { return aTable.Get( nAction ); } + { + ScChangeActionMap::const_iterator it = aMap.find( nAction ); + if( it != aMap.end() ) + return it->second; + else + return NULL; + } ScChangeAction* GetGenerated( sal_uLong nGenerated ) const - { return aGeneratedTable.Get( nGenerated ); } + { + ScChangeActionMap::const_iterator it = aGeneratedMap.find( nGenerated ); + if( it != aGeneratedMap.end() ) + return it->second; + else + return NULL; + } ScChangeAction* GetActionOrGenerated( sal_uLong nAction ) const { return IsGenerated( nAction ) ? @@ -1140,7 +1150,13 @@ public: void SetLastSavedActionNumber(sal_uLong nNew) { nMarkLastSaved = nNew; } ScChangeAction* GetLastSaved() const - { return aTable.Get( nMarkLastSaved ); } + { + ScChangeActionMap::const_iterator it = aMap.find( nMarkLastSaved ); + if( it != aMap.end() ) + return it->second; + else + return NULL; + } ScChangeActionContent** GetContentSlots() const { return ppContentSlots; } sal_Bool IsLoadSave() const { return bLoadSave; } @@ -1278,8 +1294,8 @@ public: // With bAllFlat (==TRUE ?) all dependents of dependents // will be inserted flatly. - SC_DLLPUBLIC void GetDependents( ScChangeAction*, - ScChangeActionTable&, + SC_DLLPUBLIC void GetDependents( ScChangeAction*, + ScChangeActionMap&, sal_Bool bListMasterDelete = false, sal_Bool bAllFlat = false ) const; diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx index 7a850144965b..ef5ec996b259 100644 --- a/sc/source/core/tool/chgtrack.cxx +++ b/sc/source/core/tool/chgtrack.cxx @@ -454,12 +454,12 @@ void ScChangeAction::GetDescription( String& rStr, ScDocument* /* pDoc */, } else if (pReject->HasDependent()) { - ScChangeActionTable aTable; - pCT->GetDependents( pReject, aTable, false, sal_True ); - for ( const ScChangeAction* p = aTable.First(); p; - p = aTable.Next() ) + ScChangeActionMap aMap; + pCT->GetDependents( pReject, aMap, false, sal_True ); + ScChangeActionMap::iterator itChangeAction; + for( itChangeAction = aMap.begin(); itChangeAction != aMap.end(); ++itChangeAction ) { - if (p->GetType() == SC_CAT_MOVE) + if( itChangeAction->second->GetType() == SC_CAT_MOVE) { rStr += ScGlobal::GetRscString( STR_CHANGED_MOVE_REJECTION_WARNING); @@ -2116,6 +2116,7 @@ void ScChangeTrack::DtorClear() { ScChangeAction* p; ScChangeAction* pNext; + ScChangeActionMap::iterator itChangeAction; for ( p = GetFirst(); p; p = pNext ) { pNext = p->GetNext(); @@ -2126,9 +2127,9 @@ void ScChangeTrack::DtorClear() pNext = p->GetNext(); delete p; } - for ( p = aPasteCutTable.First(); p; p = aPasteCutTable.Next() ) + for( itChangeAction = aPasteCutMap.begin(); itChangeAction != aPasteCutMap.end(); ++itChangeAction ) { - delete p; + delete itChangeAction->second; } delete pLastCutMove; ClearMsgQueue(); @@ -2164,9 +2165,9 @@ void ScChangeTrack::ClearMsgQueue() void ScChangeTrack::Clear() { DtorClear(); - aTable.Clear(); - aGeneratedTable.Clear(); - aPasteCutTable.Clear(); + aMap.clear(); + aGeneratedMap.clear(); + aPasteCutMap.clear(); aUserCollection.FreeAll(); aUser.Erase(); Init(); @@ -2339,7 +2340,7 @@ void ScChangeTrack::MasterLinks( ScChangeAction* pAppend ) void ScChangeTrack::AppendLoaded( ScChangeAction* pAppend ) { - aTable.Insert( pAppend->GetActionNumber(), pAppend ); + aMap.insert( ::std::make_pair( pAppend->GetActionNumber(), pAppend ) ); if ( !pLast ) pFirst = pLast = pAppend; else @@ -2360,7 +2361,7 @@ void ScChangeTrack::Append( ScChangeAction* pAppend, sal_uLong nAction ) if ( bUseFixDateTime ) pAppend->SetDateTimeUTC( aFixDateTime ); pAppend->SetActionNumber( nAction ); - aTable.Insert( nAction, pAppend ); + aMap.insert( ::std::make_pair( nAction, pAppend ) ); // UpdateReference Inserts vor Dependencies. // Delete rejectendes Insert hatte UpdateReference mit Delete-Undo. // UpdateReference auch wenn pLast==NULL, weil pAppend ein Delete sein @@ -2831,7 +2832,7 @@ ScChangeActionContent* ScChangeTrack::GenerateDelContent( pContent->pNext = pFirstGeneratedDelContent; } pFirstGeneratedDelContent = pContent; - aGeneratedTable.Insert( nGeneratedMin, pContent ); + aGeneratedMap.insert( std::make_pair( nGeneratedMin, pContent ) ); NotifyModified( SC_CTM_APPEND, nGeneratedMin, nGeneratedMin ); return pContent; } @@ -2840,7 +2841,7 @@ ScChangeActionContent* ScChangeTrack::GenerateDelContent( void ScChangeTrack::DeleteGeneratedDelContent( ScChangeActionContent* pContent ) { sal_uLong nAct = pContent->GetActionNumber(); - aGeneratedTable.Remove( nAct ); + aGeneratedMap.erase( nAct ); if ( pFirstGeneratedDelContent == pContent ) pFirstGeneratedDelContent = (ScChangeActionContent*) pContent->pNext; if ( pContent->pNext ) @@ -3038,7 +3039,7 @@ void ScChangeTrack::Remove( ScChangeAction* pRemove ) { // aus Track ausklinken sal_uLong nAct = pRemove->GetActionNumber(); - aTable.Remove( nAct ); + aMap.erase( nAct ); if ( nAct == nActionMax ) --nActionMax; if ( pRemove == pLast ) @@ -3125,7 +3126,7 @@ void ScChangeTrack::Undo( sal_uLong nStartAction, sal_uLong nEndAction, bool bMe SetInDeleteTop( false ); Remove( pAct ); if ( IsInPasteCut() ) - aPasteCutTable.Insert( pAct->GetActionNumber(), pAct ); + aPasteCutMap.insert( ::std::make_pair( pAct->GetActionNumber(), pAct ) ); else { if ( j == nStartAction && pAct->GetType() == SC_CAT_MOVE ) @@ -3140,16 +3141,15 @@ void ScChangeTrack::Undo( sal_uLong nStartAction, sal_uLong nEndAction, bool bMe StartBlockModify( SC_CTM_APPEND, nStart ); for ( sal_uLong nCut = nStart; nCut <= nEnd; nCut++ ) { - ScChangeAction* pCut = aPasteCutTable.Remove( nCut ); - if ( pCut ) - { - OSL_ENSURE( !aTable.Get( nCut ), "ScChangeTrack::Undo: nCut dup" ); - Append( pCut, nCut ); - } - else + ScChangeActionMap::iterator itCut = aPasteCutMap.find( nCut ); + + if ( itCut == aMap.end() ) { OSL_FAIL( "ScChangeTrack::Undo: nCut not found" ); } + + Append( itCut->second, nCut ); + aPasteCutMap.erase( nCut ); } EndBlockModify( nEnd ); ResetLastCut(); @@ -3848,7 +3848,7 @@ void ScChangeTrack::UpdateReference( ScChangeAction** ppFirstAction, void ScChangeTrack::GetDependents( ScChangeAction* pAct, - ScChangeActionTable& rTable, sal_Bool bListMasterDelete, sal_Bool bAllFlat ) const + ScChangeActionMap& rMap, sal_Bool bListMasterDelete, sal_Bool bAllFlat ) const { //! bAllFlat==TRUE: intern aus Accept oder Reject gerufen, //! => Generated werden nicht aufgenommen @@ -3876,7 +3876,7 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, if ( bAllFlat ) { sal_uLong n = p->GetActionNumber(); - if ( !IsGenerated( n ) && rTable.Insert( n, p ) ) + if ( !IsGenerated( n ) && rMap.insert( ::std::make_pair( n, p ) ).second ) if ( p->HasDependent() ) cStack.push( p ); } @@ -3885,10 +3885,10 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, if ( p->GetType() == SC_CAT_CONTENT ) { if ( ((ScChangeActionContent*)p)->IsTopContent() ) - rTable.Insert( p->GetActionNumber(), p ); + rMap.insert( ::std::make_pair( p->GetActionNumber(), p ) ); } else - rTable.Insert( p->GetActionNumber(), p ); + rMap.insert( ::std::make_pair( p->GetActionNumber(), p ) ); } } pL = pL->GetNext(); @@ -3907,9 +3907,9 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, ScChangeAction* p = pDel; while ( (p = p->GetPrev()) != NULL && p->GetType() == eType && !((ScChangeActionDel*)p)->IsTopDelete() ) - rTable.Insert( p->GetActionNumber(), p ); - // dieses Delete auch in Table! - rTable.Insert( pAct->GetActionNumber(), pAct ); + rMap.insert( ::std::make_pair( p->GetActionNumber(), p ) ); + // delete this in the map too + rMap.insert( ::std::make_pair( pAct->GetActionNumber(), pAct ) ); } else { @@ -3923,7 +3923,7 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, { // nur ein TopContent einer Kette ist in LinkDeleted sal_uLong n = p->GetActionNumber(); - if ( !IsGenerated( n ) && rTable.Insert( n, p ) ) + if ( !IsGenerated( n ) && rMap.insert( ::std::make_pair( n, p ) ).second ) if ( p->HasDeleted() || p->GetType() == SC_CAT_CONTENT ) cStack.push( p ); @@ -3934,10 +3934,10 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, { // weiteres TopDelete in gleiche Ebene, // es ist nicht rejectable if ( ((ScChangeActionDel*)p)->IsTopDelete() ) - rTable.Insert( p->GetActionNumber(), p ); + rMap.insert( ::std::make_pair( p->GetActionNumber(), p ) ); } else - rTable.Insert( p->GetActionNumber(), p ); + rMap.insert( ::std::make_pair( p->GetActionNumber(), p ) ); } } pL = pL->GetNext(); @@ -3952,7 +3952,7 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, while ( pL ) { ScChangeAction* p = (ScChangeAction*) pL->GetAction(); - if ( p != pAct && rTable.Insert( p->GetActionNumber(), p ) ) + if ( p != pAct && rMap.insert( ::std::make_pair( p->GetActionNumber(), p ) ).second ) { // nur ein TopContent einer Kette ist in LinkDeleted if ( bAllFlat && (p->HasDeleted() || @@ -3972,7 +3972,7 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, if ( bAllFlat ) { sal_uLong n = p->GetActionNumber(); - if ( !IsGenerated( n ) && rTable.Insert( n, p ) ) + if ( !IsGenerated( n ) && rMap.insert( ::std::make_pair( n, p ) ).second ) if ( p->HasDependent() || p->HasDeleted() ) cStack.push( p ); } @@ -3981,10 +3981,10 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, if ( p->GetType() == SC_CAT_CONTENT ) { if ( ((ScChangeActionContent*)p)->IsTopContent() ) - rTable.Insert( p->GetActionNumber(), p ); + rMap.insert( ::std::make_pair( p->GetActionNumber(), p ) ); } else - rTable.Insert( p->GetActionNumber(), p ); + rMap.insert( ::std::make_pair( p->GetActionNumber(), p ) ); } } pL = pL->GetNext(); @@ -3997,14 +3997,14 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, while ( ( pContent = pContent->GetPrevContent() ) != NULL ) { if ( !pContent->IsRejected() ) - rTable.Insert( pContent->GetActionNumber(), pContent ); + rMap.insert( ::std::make_pair( pContent->GetActionNumber(), pContent ) ); } pContent = (ScChangeActionContent*) pCur; // alle nachfolgenden while ( ( pContent = pContent->GetNextContent() ) != NULL ) { if ( !pContent->IsRejected() ) - rTable.Insert( pContent->GetActionNumber(), pContent ); + rMap.insert( ::std::make_pair( pContent->GetActionNumber(), pContent ) ); } // all MatrixReferences of a MatrixOrigin const ScChangeActionLinkEntry* pL = pCur->GetFirstDependentEntry(); @@ -4016,12 +4016,12 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, if ( bAllFlat ) { sal_uLong n = p->GetActionNumber(); - if ( !IsGenerated( n ) && rTable.Insert( n, p ) ) + if ( !IsGenerated( n ) && rMap.insert( ::std::make_pair( n, p ) ).second ) if ( p->HasDependent() ) cStack.push( p ); } else - rTable.Insert( p->GetActionNumber(), p ); + rMap.insert( ::std::make_pair( p->GetActionNumber(), p ) ); } pL = pL->GetNext(); } @@ -4032,7 +4032,7 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct, { ScChangeAction* p = GetAction( ((ScChangeActionReject*)pCur)->GetRejectAction() ); - if ( p != pAct && !rTable.Get( p->GetActionNumber() ) ) + if ( p != pAct && rMap.find( p->GetActionNumber() ) != rMap.end() ) cStack.push( p ); } } @@ -4137,11 +4137,14 @@ sal_Bool ScChangeTrack::Accept( ScChangeAction* pAct ) if ( pAct->IsDeleteType() || pAct->GetType() == SC_CAT_CONTENT ) { - ScChangeActionTable aActionTable; - GetDependents( pAct, aActionTable, false, sal_True ); - for ( ScChangeAction* p = aActionTable.First(); p; p = aActionTable.Next() ) + ScChangeActionMap aActionMap; + ScChangeActionMap::iterator itChangeAction; + + GetDependents( pAct, aActionMap, false, sal_True ); + + for( itChangeAction = aActionMap.begin(); itChangeAction != aActionMap.end(); ++itChangeAction ) { - p->Accept(); + itChangeAction->second->Accept(); } } pAct->Accept(); @@ -4171,20 +4174,20 @@ sal_Bool ScChangeTrack::Reject( ScChangeAction* pAct, bool bShared ) if ( !pAct->IsRejectable() ) return false; - ScChangeActionTable* pTable = NULL; + ScChangeActionMap* pMap = NULL; if ( pAct->HasDependent() ) { - pTable = new ScChangeActionTable; - GetDependents( pAct, *pTable, false, sal_True ); + pMap = new ScChangeActionMap; + GetDependents( pAct, *pMap, false, sal_True ); } - sal_Bool bRejected = Reject( pAct, pTable, false ); - if ( pTable ) - delete pTable; + sal_Bool bRejected = Reject( pAct, pMap, false ); + if ( pMap ) + delete pMap; return bRejected; } -sal_Bool ScChangeTrack::Reject( ScChangeAction* pAct, ScChangeActionTable* pTable, +sal_Bool ScChangeTrack::Reject( ScChangeAction* pAct, ScChangeActionMap* pMap, sal_Bool bRecursion ) { if ( !pAct->IsInternalRejectable() ) @@ -4196,16 +4199,17 @@ sal_Bool ScChangeTrack::Reject( ScChangeAction* pAct, ScChangeActionTable* pTabl { if ( pAct->HasDependent() && !bRecursion ) { - OSL_ENSURE( pTable, "ScChangeTrack::Reject: Insert ohne Table" ); - for ( ScChangeAction* p = pTable->Last(); p && bOk; p = pTable->Prev() ) + OSL_ENSURE( pMap, "ScChangeTrack::Reject: Insert ohne map" ); + ScChangeActionMap::iterator itChangeAction; + for( itChangeAction = pMap->begin(); itChangeAction != pMap->end() && bOk; ++itChangeAction ) { // keine Contents restoren, die eh geloescht werden wuerden - if ( p->GetType() == SC_CAT_CONTENT ) - p->SetRejected(); - else if ( p->IsDeleteType() ) - p->Accept(); // geloeschtes ins Nirvana + if ( itChangeAction->second->GetType() == SC_CAT_CONTENT ) + itChangeAction->second->SetRejected(); + else if ( itChangeAction->second->IsDeleteType() ) + itChangeAction->second->Accept(); // geloeschtes ins Nirvana else - bOk = Reject( p, NULL, sal_True ); //! rekursiv + bOk = Reject( itChangeAction->second, NULL, sal_True ); //! rekursiv } } if ( bOk && (bRejected = pAct->Reject( pDoc )) != false ) @@ -4217,7 +4221,7 @@ sal_Bool ScChangeTrack::Reject( ScChangeAction* pAct, ScChangeActionTable* pTabl } else if ( pAct->IsDeleteType() ) { - OSL_ENSURE( !pTable, "ScChangeTrack::Reject: Delete mit Table" ); + OSL_ENSURE( !pMap, "ScChangeTrack::Reject: Delete mit map" ); ScBigRange aDelRange; sal_uLong nRejectAction = pAct->GetActionNumber(); sal_Bool bTabDel, bTabDelOk; @@ -4312,10 +4316,12 @@ sal_Bool ScChangeTrack::Reject( ScChangeAction* pAct, ScChangeActionTable* pTabl { if ( pAct->HasDependent() && !bRecursion ) { - OSL_ENSURE( pTable, "ScChangeTrack::Reject: Move ohne Table" ); - for ( ScChangeAction* p = pTable->Last(); p && bOk; p = pTable->Prev() ) + OSL_ENSURE( pMap, "ScChangeTrack::Reject: Move ohne Map" ); + ScChangeActionMap::reverse_iterator itChangeAction; + + for( itChangeAction = pMap->rbegin(); itChangeAction != pMap->rend() && bOk; ++itChangeAction ) { - bOk = Reject( p, NULL, sal_True ); //! rekursiv + bOk = Reject( itChangeAction->second, NULL, sal_True ); //! rekursiv } } if ( bOk && (bRejected = pAct->Reject( pDoc )) != false ) @@ -4368,7 +4374,7 @@ sal_uLong ScChangeTrack::AddLoadedGenerated(ScBaseCell* pNewCell, const ScBigRan pFirstGeneratedDelContent->pPrev = pAct; pAct->pNext = pFirstGeneratedDelContent; pFirstGeneratedDelContent = pAct; - aGeneratedTable.Insert( pAct->GetActionNumber(), pAct ); + aGeneratedMap.insert( ::std::make_pair( pAct->GetActionNumber(), pAct ) ); return pAct->GetActionNumber(); } return 0; @@ -4376,7 +4382,7 @@ sal_uLong ScChangeTrack::AddLoadedGenerated(ScBaseCell* pNewCell, const ScBigRan void ScChangeTrack::AppendCloned( ScChangeAction* pAppend ) { - aTable.Insert( pAppend->GetActionNumber(), pAppend ); + aMap.insert( ::std::make_pair( pAppend->GetActionNumber(), pAppend ) ); if ( !pLast ) pFirst = pLast = pAppend; else diff --git a/sc/source/filter/xcl97/XclExpChangeTrack.cxx b/sc/source/filter/xcl97/XclExpChangeTrack.cxx index 13c279f232da..e27ca39859d6 100644 --- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx +++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx @@ -657,12 +657,14 @@ void XclExpChTrAction::AddDependentContents( const XclExpRoot& rRoot, ScChangeTrack& rChangeTrack ) { - ScChangeActionTable aActionTable; - rChangeTrack.GetDependents( (ScChangeAction*)(&rAction), aActionTable ); - for( const ScChangeAction* pDepAction = aActionTable.First(); pDepAction; pDepAction = aActionTable.Next() ) - if( pDepAction->GetType() == SC_CAT_CONTENT ) + ScChangeActionMap aActionMap; + ScChangeActionMap::iterator itChangeAction; + + rChangeTrack.GetDependents( (ScChangeAction*)(&rAction), aActionMap ); + for( itChangeAction = aActionMap.begin(); itChangeAction != aActionMap.end(); ++itChangeAction ) + if( itChangeAction->second->GetType() == SC_CAT_CONTENT ) SetAddAction( new XclExpChTrCellContent( - *((const ScChangeActionContent*) pDepAction), rRoot, rIdBuffer ) ); + *((const ScChangeActionContent*) itChangeAction->second), rRoot, rIdBuffer ) ); } void XclExpChTrAction::SetIndex( sal_uInt32& rIndex ) diff --git a/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx b/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx index b39ad754acdc..b2c8d1c38a19 100644 --- a/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx +++ b/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx @@ -56,7 +56,7 @@ ScChangeTrackingExportHelper::ScChangeTrackingExportHelper(ScXMLExport& rTempExp sChangeIDPrefix(RTL_CONSTASCII_USTRINGPARAM(SC_CHANGE_ID_PREFIX)) { pChangeTrack = rExport.GetDocument() ? rExport.GetDocument()->GetChangeTrack() : NULL; - pDependings = new ScChangeActionTable(); + pDependings = new ScChangeActionMap(); } ScChangeTrackingExportHelper::~ScChangeTrackingExportHelper() diff --git a/sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx b/sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx index cfb518e58b29..8e59ee660bad 100644 --- a/sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx +++ b/sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx @@ -31,6 +31,8 @@ #include <xmloff/xmltoken.hxx> #include <list> +#include <map> +#include <tools/solar.h> #include <com/sun/star/text/XText.hpp> #include <rtl/ustrbuf.hxx> @@ -41,11 +43,11 @@ class ScBaseCell; class ScChangeActionDel; class ScBigRange; class ScEditEngineTextObj; -class ScChangeActionTable; class String; class DateTime; typedef std::list<ScChangeActionDel*> ScMyDeletionsList; +typedef std::map<sal_uLong, ScChangeAction*> ScChangeActionMap; class ScChangeTrackingExportHelper { @@ -53,7 +55,7 @@ class ScChangeTrackingExportHelper ScChangeTrack* pChangeTrack; ScEditEngineTextObj* pEditTextObj; - ScChangeActionTable* pDependings; + ScChangeActionMap* pDependings; rtl::OUString sChangeIDPrefix; com::sun::star::uno::Reference<com::sun::star::text::XText> xText; diff --git a/sc/source/ui/inc/acredlin.hxx b/sc/source/ui/inc/acredlin.hxx index 2f9c06663559..417ed14889a3 100644 --- a/sc/source/ui/inc/acredlin.hxx +++ b/sc/source/ui/inc/acredlin.hxx @@ -212,17 +212,17 @@ protected: SvLBoxEntry* pParent,sal_uLong nSpecial); void GetDependents( const ScChangeAction* pScChangeAction, - ScChangeActionTable& aActionTable, + ScChangeActionMap& aActionMap, SvLBoxEntry* pEntry); - bool InsertContentChildren(ScChangeActionTable* pActionTable,SvLBoxEntry* pParent); + bool InsertContentChildren( ScChangeActionMap* pActionMap, SvLBoxEntry* pParent ); bool InsertAcceptedORejected(SvLBoxEntry* pParent); - bool InsertDeletedChildren(const ScChangeAction *pChangeAction, ScChangeActionTable* pActionTable, + bool InsertDeletedChildren( const ScChangeAction* pChangeAction, ScChangeActionMap* pActionMap, SvLBoxEntry* pParent); - bool InsertChildren(ScChangeActionTable* pActionTable,SvLBoxEntry* pParent); + bool InsertChildren( ScChangeActionMap* pActionMap, SvLBoxEntry* pParent ); void AppendChanges(ScChangeTrack* pChanges,sal_uLong nStartAction, sal_uLong nEndAction, sal_uLong nPos=LIST_APPEND); diff --git a/sc/source/ui/miscdlgs/acredlin.cxx b/sc/source/ui/miscdlgs/acredlin.cxx index b3deaeac5f1f..a35f5569d1ba 100644 --- a/sc/source/ui/miscdlgs/acredlin.cxx +++ b/sc/source/ui/miscdlgs/acredlin.cxx @@ -813,7 +813,6 @@ void ScAcceptChgDlg::UpdateView() if(pChanges!=NULL) pScChangeAction=pChanges->GetFirst(); } - ScChangeActionTable ActionTable; bool bTheFlag = false; while(pScChangeAction!=NULL) @@ -1168,7 +1167,7 @@ IMPL_LINK( ScAcceptChgDlg, SelectHandle, SvxRedlinTable*, EMPTYARG ) } void ScAcceptChgDlg::GetDependents( const ScChangeAction* pScChangeAction, - ScChangeActionTable& aActionTable, + ScChangeActionMap& aActionMap, SvLBoxEntry* pEntry) { ScChangeTrack* pChanges=pDoc->GetChangeTrack(); @@ -1181,17 +1180,17 @@ void ScAcceptChgDlg::GetDependents( const ScChangeAction* pScChangeAction, if(pParentAction!=pScChangeAction) pChanges->GetDependents((ScChangeAction*) pScChangeAction, - aActionTable,pScChangeAction->IsMasterDelete()); + aActionMap,pScChangeAction->IsMasterDelete()); else - pChanges->GetDependents((ScChangeAction*) pScChangeAction, - aActionTable); + pChanges->GetDependents( (ScChangeAction*) pScChangeAction, + aActionMap ); } else pChanges->GetDependents((ScChangeAction*) pScChangeAction, - aActionTable,pScChangeAction->IsMasterDelete()); + aActionMap, pScChangeAction->IsMasterDelete() ); } -bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionTable* pActionTable,SvLBoxEntry* pParent) +bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionMap* pActionMap,SvLBoxEntry* pParent) { bool bTheTestFlag = true; ScRedlinData *pEntryData=(ScRedlinData *)(pParent->GetUserData()); @@ -1205,23 +1204,27 @@ bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionTable* pActionTable,SvL if ( pScChangeAction->GetType() == SC_CAT_CONTENT && ((const ScChangeActionContent*)pScChangeAction)->IsMatrixOrigin() ) { - pActionTable->Insert( pScChangeAction->GetActionNumber(), - (ScChangeAction*) pScChangeAction ); + pActionMap->insert( ::std::make_pair( pScChangeAction->GetActionNumber(), + const_cast<ScChangeAction*>( pScChangeAction ) ) ); bParentInserted = true; } SvLBoxEntry* pEntry=NULL; - const ScChangeActionContent* pCChild=(const ScChangeActionContent*)pActionTable->First(); - while(pCChild!=NULL) + ScChangeActionMap::iterator itChangeAction = pActionMap->begin(); + while( itChangeAction != pActionMap->end() ) { - if( pCChild->GetState()==SC_CAS_VIRGIN ) + if( itChangeAction->second->GetState()==SC_CAS_VIRGIN ) break; - pCChild=(const ScChangeActionContent*)pActionTable->Next(); + ++itChangeAction; } - if(pCChild==NULL) return true; + if( itChangeAction != pActionMap->end() ) + return true; + + SvLBoxEntry* pOriginal = InsertChangeActionContent( + dynamic_cast<const ScChangeActionContent*>( itChangeAction->second ), + pParent, RD_SPECIAL_CONTENT ); - SvLBoxEntry* pOriginal=InsertChangeActionContent(pCChild,pParent,RD_SPECIAL_CONTENT); if(pOriginal!=NULL) { bTheTestFlag=false; @@ -1232,16 +1235,17 @@ bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionTable* pActionTable,SvL pParentData->bIsRejectable=false; pParentData->bDisabled=false; } - while(pCChild!=NULL) + while( itChangeAction != pActionMap->end() ) { - if(pCChild->GetState()==SC_CAS_VIRGIN) + if( itChangeAction->second->GetState() == SC_CAS_VIRGIN ) { - pEntry=InsertChangeActionContent(pCChild,pParent,RD_SPECIAL_NONE); + pEntry = InsertChangeActionContent( dynamic_cast<const ScChangeActionContent*>( itChangeAction->second ), + pParent, RD_SPECIAL_NONE ); if(pEntry!=NULL) bTheTestFlag=false; } - pCChild=(const ScChangeActionContent*)pActionTable->Next(); + ++itChangeAction; } if ( !bParentInserted ) @@ -1293,15 +1297,16 @@ bool ScAcceptChgDlg::InsertAcceptedORejected(SvLBoxEntry* pParent) return bTheTestFlag; } -bool ScAcceptChgDlg::InsertChildren(ScChangeActionTable* pActionTable,SvLBoxEntry* pParent) +bool ScAcceptChgDlg::InsertChildren(ScChangeActionMap* pActionMap,SvLBoxEntry* pParent) { ScChangeTrack* pChanges=pDoc->GetChangeTrack(); bool bTheTestFlag = true; SvLBoxEntry* pEntry=NULL; - const ScChangeAction* pChild=(const ScChangeAction*)pActionTable->First(); - while(pChild!=NULL) + ScChangeActionMap::iterator itChangeAction; + + for( itChangeAction = pActionMap->begin(); itChangeAction != pActionMap->end(); ++itChangeAction ) { - pEntry=InsertChangeAction(pChild,SC_CAS_VIRGIN,pParent,false,true); + pEntry=InsertChangeAction( itChangeAction->second, SC_CAS_VIRGIN, pParent, false, true ); if(pEntry!=NULL) { @@ -1312,30 +1317,28 @@ bool ScAcceptChgDlg::InsertChildren(ScChangeActionTable* pActionTable,SvLBoxEntr pEntryData->bIsAcceptable=false; pEntryData->bDisabled=true; - if(pChild->IsDialogParent()) - Expand(pChanges,pChild,pEntry); + if( itChangeAction->second->IsDialogParent() ) + Expand( pChanges, itChangeAction->second, pEntry ); } - pChild=pActionTable->Next(); } return bTheTestFlag; } bool ScAcceptChgDlg::InsertDeletedChildren(const ScChangeAction* pScChangeAction, - ScChangeActionTable* pActionTable,SvLBoxEntry* pParent) + ScChangeActionMap* pActionMap,SvLBoxEntry* pParent) { ScChangeTrack* pChanges=pDoc->GetChangeTrack(); bool bTheTestFlag = true; SvLBoxEntry* pEntry=NULL; - ScChangeActionTable aDelActionTable; - const ScChangeAction* pChild=(const ScChangeAction*)pActionTable->First(); + ScChangeActionMap::iterator itChangeAction; - while(pChild!=NULL) + for( itChangeAction = pActionMap->begin(); itChangeAction != pActionMap->end(); ++itChangeAction ) { - if(pScChangeAction!=pChild) - pEntry=InsertChangeAction(pChild,SC_CAS_VIRGIN,pParent,false,true); + if( pScChangeAction != itChangeAction->second ) + pEntry = InsertChangeAction( itChangeAction->second, SC_CAS_VIRGIN, pParent, false, true ); else - pEntry=InsertChangeAction(pChild,SC_CAS_VIRGIN,pParent,true,true); + pEntry = InsertChangeAction( itChangeAction->second, SC_CAS_VIRGIN, pParent, true, true ); if(pEntry!=NULL) { @@ -1346,10 +1349,9 @@ bool ScAcceptChgDlg::InsertDeletedChildren(const ScChangeAction* pScChangeAction bTheTestFlag=false; - if ( pChild->IsDialogParent() ) - Expand(pChanges,pChild,pEntry); + if( itChangeAction->second->IsDialogParent() ) + Expand( pChanges, itChangeAction->second, pEntry ); } - pChild=pActionTable->Next(); } return bTheTestFlag; } @@ -1362,15 +1364,15 @@ bool ScAcceptChgDlg::Expand( if(pChanges!=NULL &&pEntry!=NULL &&pScChangeAction!=NULL) { - ScChangeActionTable aActionTable; + ScChangeActionMap aActionMap; - GetDependents( pScChangeAction,aActionTable,pEntry); + GetDependents( pScChangeAction, aActionMap, pEntry ); switch(pScChangeAction->GetType()) { case SC_CAT_CONTENT: { - InsertContentChildren(&aActionTable,pEntry); + InsertContentChildren( &aActionMap, pEntry ); bTheTestFlag=!bHasFilterEntry; break; } @@ -1378,18 +1380,18 @@ bool ScAcceptChgDlg::Expand( case SC_CAT_DELETE_ROWS: case SC_CAT_DELETE_TABS: { - InsertDeletedChildren(pScChangeAction,&aActionTable,pEntry); + InsertDeletedChildren( pScChangeAction, &aActionMap, pEntry ); bTheTestFlag=!bHasFilterEntry; break; } default: { if(!bFilter) - bTheTestFlag=InsertChildren(&aActionTable,pEntry); + bTheTestFlag = InsertChildren( &aActionMap, pEntry ); break; } } - aActionTable.Clear(); + aActionMap.clear(); } return bTheTestFlag; } @@ -1401,7 +1403,7 @@ IMPL_LINK( ScAcceptChgDlg, ExpandingHandle, SvxRedlinTable*, pTable ) SetPointer(Pointer(POINTER_WAIT)); if(pTable!=NULL && pChanges!=NULL) { - ScChangeActionTable aActionTable; + ScChangeActionMap aActionMap; SvLBoxEntry* pEntry=pTheView->GetHdlEntry(); if(pEntry!=NULL) { @@ -1419,29 +1421,29 @@ IMPL_LINK( ScAcceptChgDlg, ExpandingHandle, SvxRedlinTable*, pTable ) { pScChangeAction=(ScChangeAction*) pEntryData->pData; - GetDependents( pScChangeAction,aActionTable,pEntry); + GetDependents( pScChangeAction, aActionMap, pEntry ); switch(pScChangeAction->GetType()) { case SC_CAT_CONTENT: { - bTheTestFlag=InsertContentChildren(&aActionTable,pEntry); + bTheTestFlag = InsertContentChildren( &aActionMap, pEntry ); break; } case SC_CAT_DELETE_COLS: case SC_CAT_DELETE_ROWS: case SC_CAT_DELETE_TABS: { - bTheTestFlag=InsertDeletedChildren(pScChangeAction,&aActionTable,pEntry); + bTheTestFlag = InsertDeletedChildren( pScChangeAction, &aActionMap, pEntry ); break; } default: { - bTheTestFlag=InsertChildren(&aActionTable,pEntry); + bTheTestFlag = InsertChildren( &aActionMap, pEntry ); break; } } - aActionTable.Clear(); + aActionMap.clear(); } else @@ -1470,7 +1472,6 @@ void ScAcceptChgDlg::AppendChanges(ScChangeTrack* pChanges,sal_uLong nStartActio SetPointer(Pointer(POINTER_WAIT)); pTheView->SetUpdateMode(false); - ScChangeActionTable ActionTable; bool bTheFlag = false; bool bFilterFlag = pTPFilter->IsDate() || pTPFilter->IsRange() || |