sc/source/core/data/bcaslot.cxx | 3 ++- sc/source/core/inc/refupdat.hxx | 11 ++++++++--- sc/source/core/tool/lookupcache.cxx | 2 +- sc/source/core/tool/refupdat.cxx | 34 ++++++++++++++++++++++++++++------ 4 files changed, 39 insertions(+), 11 deletions(-)
New commits: commit f33700200901ff5d54fbbbb12053e1f1ccad1739 Author: Eike Rathke <er...@redhat.com> Date: Tue Jun 30 00:32:30 2015 +0200 translate some comments on the fly Change-Id: I2888fd23de5fac90ec7fada213361921b02f9447 diff --git a/sc/source/core/inc/refupdat.hxx b/sc/source/core/inc/refupdat.hxx index 84c5eed..bbfa15b 100644 --- a/sc/source/core/inc/refupdat.hxx +++ b/sc/source/core/inc/refupdat.hxx @@ -29,9 +29,9 @@ class ScAddress; class ScRange; enum ScRefUpdateRes { - UR_NOTHING = 0, // keine Anpassungen - UR_UPDATED = 1, // Anpassungen erfolgt - UR_INVALID = 2, // Referenz wurde ungueltig + UR_NOTHING = 0, ///< Reference not affected, no change at all. + UR_UPDATED = 1, ///< Reference was adjusted/updated. + UR_INVALID = 2, ///< Some part of the reference became invalid. UR_STICKY = 3 /**< Not updated because the reference is sticky, but would had been updated if it wasn't. For entire columns/rows. Essentially the same as commit 9a21a20fb21e22d7a9ab336b41a253fb565eb1b0 Author: Eike Rathke <er...@redhat.com> Date: Tue Jun 30 00:22:22 2015 +0200 introduce ScRefUpdateRes UR_STICKY Some callers of ScRefUpdate::Update() rely on a return value !=UR_NOTHING if rows or columns are inserted or deleted or moved, so simply ignoring the entire columns/rows cases is not possible even if the ranges actually don't change. Instead, return UR_STICKY that may allow to further differentiate in future. Change-Id: Iba6c1e5eb1a33d39ef677ef1de2f2d296bf504f1 diff --git a/sc/source/core/data/bcaslot.cxx b/sc/source/core/data/bcaslot.cxx index f63d7db..2174216 100644 --- a/sc/source/core/data/bcaslot.cxx +++ b/sc/source/core/data/bcaslot.cxx @@ -1069,7 +1069,8 @@ void ScBroadcastAreaSlotMachine::UpdateBroadcastAreas( { aRange = ScRange( theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 ); pArea->UpdateRange( aRange ); - pArea->GetBroadcaster().Broadcast( ScAreaChangedHint( aRange ) ); // for DDE + // For DDE and ScLookupCache + pArea->GetBroadcaster().Broadcast( ScAreaChangedHint( aRange ) ); } // insert to slots diff --git a/sc/source/core/inc/refupdat.hxx b/sc/source/core/inc/refupdat.hxx index 20455ad..84c5eed 100644 --- a/sc/source/core/inc/refupdat.hxx +++ b/sc/source/core/inc/refupdat.hxx @@ -31,7 +31,12 @@ class ScRange; enum ScRefUpdateRes { UR_NOTHING = 0, // keine Anpassungen UR_UPDATED = 1, // Anpassungen erfolgt - UR_INVALID = 2 // Referenz wurde ungueltig + UR_INVALID = 2, // Referenz wurde ungueltig + UR_STICKY = 3 /**< Not updated because the reference is sticky, + but would had been updated if it wasn't. For + entire columns/rows. Essentially the same as + not UR_NOTHING for the caller but allows + differentiation. */ }; class ScRefUpdate diff --git a/sc/source/core/tool/lookupcache.cxx b/sc/source/core/tool/lookupcache.cxx index 2d9aca6..8fed640 100644 --- a/sc/source/core/tool/lookupcache.cxx +++ b/sc/source/core/tool/lookupcache.cxx @@ -111,7 +111,7 @@ void ScLookupCache::Notify( const SfxHint& rHint ) if (!mpDoc->IsInDtorClear()) { const ScHint* p = dynamic_cast<const ScHint*>(&rHint); - if (p && (p->GetId() & SC_HINT_DATACHANGED)) + if ((p && (p->GetId() & SC_HINT_DATACHANGED)) || dynamic_cast<const ScAreaChangedHint*>(&rHint)) { mpDoc->RemoveLookupCache( *this); delete this; diff --git a/sc/source/core/tool/refupdat.cxx b/sc/source/core/tool/refupdat.cxx index 6aa2c3f..8ca5373 100644 --- a/sc/source/core/tool/refupdat.cxx +++ b/sc/source/core/tool/refupdat.cxx @@ -208,8 +208,7 @@ ScRefUpdateRes ScRefUpdate::Update( ScDocument* pDoc, UpdateRefMode eUpdateRefMo { bool bExpand = pDoc->IsExpandRefs(); if ( nDx && (theRow1 >= nRow1) && (theRow2 <= nRow2) && - (theTab1 >= nTab1) && (theTab2 <= nTab2) && - !(theCol1 == 0 && theCol2 == MAXCOL) ) + (theTab1 >= nTab1) && (theTab2 <= nTab2)) { bool bExp = (bExpand && IsExpand( theCol1, theCol2, nCol1, nDx )); bCut1 = lcl_MoveStart( theCol1, nCol1, nDx, MAXCOL ); @@ -226,10 +225,15 @@ ScRefUpdateRes ScRefUpdate::Update( ScDocument* pDoc, UpdateRefMode eUpdateRefMo Expand( theCol1, theCol2, nCol1, nDx ); eRet = UR_UPDATED; } + if (eRet != UR_NOTHING && oldCol1 == 0 && oldCol2 == MAXCOL) + { + eRet = UR_STICKY; + theCol1 = oldCol1; + theCol2 = oldCol2; + } } if ( nDy && (theCol1 >= nCol1) && (theCol2 <= nCol2) && - (theTab1 >= nTab1) && (theTab2 <= nTab2) && - !(theRow1 == 0 && theRow2 == MAXROW) ) + (theTab1 >= nTab1) && (theTab2 <= nTab2)) { bool bExp = (bExpand && IsExpand( theRow1, theRow2, nRow1, nDy )); bCut1 = lcl_MoveStart( theRow1, nRow1, nDy, MAXROW ); @@ -246,6 +250,12 @@ ScRefUpdateRes ScRefUpdate::Update( ScDocument* pDoc, UpdateRefMode eUpdateRefMo Expand( theRow1, theRow2, nRow1, nDy ); eRet = UR_UPDATED; } + if (eRet != UR_NOTHING && oldRow1 == 0 && oldRow2 == MAXROW) + { + eRet = UR_STICKY; + theRow1 = oldRow1; + theRow2 = oldRow2; + } } if ( nDz && (theCol1 >= nCol1) && (theCol2 <= nCol2) && (theRow1 >= nRow1) && (theRow2 <= nRow2) ) @@ -274,19 +284,31 @@ ScRefUpdateRes ScRefUpdate::Update( ScDocument* pDoc, UpdateRefMode eUpdateRefMo if ((theCol1 >= nCol1-nDx) && (theRow1 >= nRow1-nDy) && (theTab1 >= nTab1-nDz) && (theCol2 <= nCol2-nDx) && (theRow2 <= nRow2-nDy) && (theTab2 <= nTab2-nDz)) { - if ( nDx && !(theCol1 == 0 && theCol2 == MAXCOL) ) + if ( nDx ) { bCut1 = lcl_MoveItCut( theCol1, nDx, MAXCOL ); bCut2 = lcl_MoveItCut( theCol2, nDx, MAXCOL ); if ( bCut1 || bCut2 ) eRet = UR_UPDATED; + if (eRet != UR_NOTHING && oldCol1 == 0 && oldCol2 == MAXCOL) + { + eRet = UR_STICKY; + theCol1 = oldCol1; + theCol2 = oldCol2; + } } - if ( nDy && !(theRow1 == 0 && theRow2 == MAXROW) ) + if ( nDy ) { bCut1 = lcl_MoveItCut( theRow1, nDy, MAXROW ); bCut2 = lcl_MoveItCut( theRow2, nDy, MAXROW ); if ( bCut1 || bCut2 ) eRet = UR_UPDATED; + if (eRet != UR_NOTHING && oldRow1 == 0 && oldRow2 == MAXROW) + { + eRet = UR_STICKY; + theRow1 = oldRow1; + theRow2 = oldRow2; + } } if ( nDz ) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits