sc/inc/chgtrack.hxx | 2 sc/source/core/tool/chgtrack.cxx | 106 ++++++++++++++++++++------------------- 2 files changed, 57 insertions(+), 51 deletions(-)
New commits: commit ebd8d28361a3c0f420346fcafcecadef09efbda5 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Thu Jul 17 15:25:12 2014 -0400 Scope reduction. Change-Id: I4caeaf3565255ab141fc4951f1bd149a7af6bb8f diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx index 8373605..48e4f7f 100644 --- a/sc/source/core/tool/chgtrack.cxx +++ b/sc/source/core/tool/chgtrack.cxx @@ -3163,65 +3163,64 @@ void ScChangeTrack::Undo( sal_uLong nStartAction, sal_uLong nEndAction, bool bMe // Deletes are in right order ScChangeAction* pAct = IsLastAction(j) ? pLast : GetAction(j); - if ( pAct ) + if (!pAct) + continue; + + if ( pAct->IsDeleteType() ) { - if ( pAct->IsDeleteType() ) + if (j == nEndAction || (pAct != pLast && ((ScChangeActionDel*)pAct)->IsTopDelete())) { - if ( j == nEndAction || (pAct != pLast && - ((ScChangeActionDel*)pAct)->IsTopDelete()) ) - { - SetInDeleteTop( true ); - SetInDeleteRange( ((ScChangeActionDel*)pAct)-> - GetOverAllRange().MakeRange() ); - } + SetInDeleteTop( true ); + SetInDeleteRange( ((ScChangeActionDel*)pAct)->GetOverAllRange().MakeRange() ); } - UpdateReference( pAct, true ); - SetInDeleteTop( false ); - Remove( pAct ); - if ( IsInPasteCut() ) - aPasteCutMap.insert( ::std::make_pair( pAct->GetActionNumber(), pAct ) ); - else - { - if ( j == nStartAction && pAct->GetType() == SC_CAT_MOVE ) + } + UpdateReference( pAct, true ); + SetInDeleteTop( false ); + Remove( pAct ); + if ( IsInPasteCut() ) + { + aPasteCutMap.insert( ::std::make_pair( pAct->GetActionNumber(), pAct ) ); + continue; + } + + if ( j == nStartAction && pAct->GetType() == SC_CAT_MOVE ) + { + ScChangeActionMove* pMove = (ScChangeActionMove*) pAct; + sal_uLong nStart = pMove->GetStartLastCut(); + sal_uLong nEnd = pMove->GetEndLastCut(); + if ( nStart && nStart <= nEnd ) + { // Recover LastCut + //! Break Links before Cut Append + pMove->RemoveAllLinks(); + StartBlockModify( SC_CTM_APPEND, nStart ); + for ( sal_uLong nCut = nStart; nCut <= nEnd; nCut++ ) { - ScChangeActionMove* pMove = (ScChangeActionMove*) pAct; - sal_uLong nStart = pMove->GetStartLastCut(); - sal_uLong nEnd = pMove->GetEndLastCut(); - if ( nStart && nStart <= nEnd ) - { // Recover LastCut - //! Break Links before Cut Append - pMove->RemoveAllLinks(); - StartBlockModify( SC_CTM_APPEND, nStart ); - for ( sal_uLong nCut = nStart; nCut <= nEnd; nCut++ ) - { - ScChangeActionMap::iterator itCut = aPasteCutMap.find( nCut ); + ScChangeActionMap::iterator itCut = aPasteCutMap.find( nCut ); - if ( itCut != aPasteCutMap.end() ) - { - OSL_ENSURE( aMap.find( nCut ) == aMap.end(), "ScChangeTrack::Undo: nCut dup" ); - Append( itCut->second, nCut ); - aPasteCutMap.erase( itCut ); - } - else - { - OSL_FAIL( "ScChangeTrack::Undo: nCut not found" ); - } - } - EndBlockModify( nEnd ); - ResetLastCut(); - nStartLastCut = nStart; - nEndLastCut = nEnd; - pLastCutMove = pMove; - SetLastCutMoveRange( - pMove->GetFromRange().MakeRange(), pDoc ); + if ( itCut != aPasteCutMap.end() ) + { + OSL_ENSURE( aMap.find( nCut ) == aMap.end(), "ScChangeTrack::Undo: nCut dup" ); + Append( itCut->second, nCut ); + aPasteCutMap.erase( itCut ); } else - delete pMove; + { + OSL_FAIL( "ScChangeTrack::Undo: nCut not found" ); + } } - else - delete pAct; + EndBlockModify( nEnd ); + ResetLastCut(); + nStartLastCut = nStart; + nEndLastCut = nEnd; + pLastCutMove = pMove; + SetLastCutMoveRange( + pMove->GetFromRange().MakeRange(), pDoc ); } + else + delete pMove; } + else + delete pAct; } EndBlockModify( nEndAction ); } commit efd6fc5e99d89509129469843bbdf3e8f94b58a4 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Thu Jul 17 15:21:43 2014 -0400 Unwind this logic and make it easier to read. Change-Id: Iaf4ccc8949fb823a7bd3329c0164443220573b03 diff --git a/sc/inc/chgtrack.hxx b/sc/inc/chgtrack.hxx index 59b4058..f036f79 100644 --- a/sc/inc/chgtrack.hxx +++ b/sc/inc/chgtrack.hxx @@ -1013,6 +1013,8 @@ class ScChangeTrack : public utl::ConfigurationListener // bRecursion == called from reject with table bool Reject( ScChangeAction*, ScChangeActionMap*, bool bRecursion ); + bool IsLastAction( sal_uLong nNum ) const; + void ClearMsgQueue(); virtual void ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 ) SAL_OVERRIDE; diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx index 80a66cd..8373605 100644 --- a/sc/source/core/tool/chgtrack.cxx +++ b/sc/source/core/tool/chgtrack.cxx @@ -3161,8 +3161,8 @@ void ScChangeTrack::Undo( sal_uLong nStartAction, sal_uLong nEndAction, bool bMe for ( sal_uLong j = nEndAction; j >= nStartAction; --j ) { // Traverse backwards to recycle nActionMax and for faster access via pLast // Deletes are in right order - ScChangeAction* pAct = ( (j == nActionMax && pLast && - pLast->GetActionNumber() == j) ? pLast : GetAction( j ) ); + ScChangeAction* pAct = IsLastAction(j) ? pLast : GetAction(j); + if ( pAct ) { if ( pAct->IsDeleteType() ) @@ -4409,6 +4409,11 @@ bool ScChangeTrack::Reject( return bRejected; } +bool ScChangeTrack::IsLastAction( sal_uLong nNum ) const +{ + return nNum == nActionMax && pLast && pLast->GetActionNumber() == nNum; +} + sal_uLong ScChangeTrack::AddLoadedGenerated( const ScCellValue& rNewCell, const ScBigRange& aBigRange, const OUString& sNewValue ) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits