summaryrefslogtreecommitdiffstats
path: root/sc
diff options
context:
space:
mode:
authorMarcel Metz <mmetz@adrian-broher.net>2011-12-21 20:00:03 +0100
committerMichael Stahl <mstahl@redhat.com>2011-12-21 20:14:52 +0100
commit713d69d96038fdd5479de076270c2186f95c2630 (patch)
tree57a41b8dec92b6a058131773f51aa1f2c905149c /sc
parentReplace SwTxtPortionTable with std::map. (diff)
downloadcore-713d69d96038fdd5479de076270c2186f95c2630.tar.gz
core-713d69d96038fdd5479de076270c2186f95c2630.zip
fdo#38832 Replace ScChangeActionTable with std::map
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/chgtrack.hxx42
-rw-r--r--sc/source/core/tool/chgtrack.cxx138
-rw-r--r--sc/source/filter/xcl97/XclExpChangeTrack.cxx12
-rw-r--r--sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx2
-rw-r--r--sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx6
-rw-r--r--sc/source/ui/inc/acredlin.hxx8
-rw-r--r--sc/source/ui/miscdlgs/acredlin.cxx99
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() ||