diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-07-22 19:55:09 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-07-24 23:29:36 -0400 |
commit | c9511b92dcd8405ccfbdf2f5628a3a2eaaa9cbdd (patch) | |
tree | 6b925dcf8fdc3221066975c76898b27e16d9fd00 /sc | |
parent | 3ed4796949d184a14b0df979bdb84012d6611e2c (diff) |
Flag cell state modified when a reference points to a different position.
This fixes testStreamValid() test failure.
Change-Id: Ife406957a723930efb419ba8c566485f4b089d97
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/refupdatecontext.hxx | 2 | ||||
-rw-r--r-- | sc/source/core/data/formulacell.cxx | 5 | ||||
-rw-r--r-- | sc/source/core/data/refupdatecontext.cxx | 4 | ||||
-rw-r--r-- | sc/source/core/tool/token.cxx | 12 |
4 files changed, 15 insertions, 8 deletions
diff --git a/sc/inc/refupdatecontext.hxx b/sc/inc/refupdatecontext.hxx index 8067c3b4fdf2..af478510d89e 100644 --- a/sc/inc/refupdatecontext.hxx +++ b/sc/inc/refupdatecontext.hxx @@ -51,7 +51,7 @@ struct RefUpdateContext struct RefUpdateResult { bool mbValueChanged; - bool mbRangeSizeModified; + bool mbReferenceModified; RefUpdateResult(); RefUpdateResult(const RefUpdateResult& r); diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index e57d5dd63d32..a99041db7381 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -2274,11 +2274,12 @@ bool ScFormulaCell::UpdateReferenceOnShift( { // Update cell or range references. sc::RefUpdateResult aRes = pCode->AdjustReferenceOnShift(rCxt, aOldPos); - bRangeModified = aRes.mbRangeSizeModified; + bRangeModified = aRes.mbReferenceModified; bValChanged = aRes.mbValueChanged; } - bCellStateChanged |= bValChanged; + if (bValChanged || bRangeModified) + bCellStateChanged = true; if (bOnRefMove) // Cell may reference itself, e.g. ocColumn, ocRow without parameter diff --git a/sc/source/core/data/refupdatecontext.cxx b/sc/source/core/data/refupdatecontext.cxx index f1ad64c8c408..67e12420cff7 100644 --- a/sc/source/core/data/refupdatecontext.cxx +++ b/sc/source/core/data/refupdatecontext.cxx @@ -24,9 +24,9 @@ bool RefUpdateContext::isDeleted() const return (meMode == URM_INSDEL) && (mnColDelta < 0 || mnRowDelta < 0 || mnTabDelta < 0); } -RefUpdateResult::RefUpdateResult() : mbValueChanged(false), mbRangeSizeModified(false) {} +RefUpdateResult::RefUpdateResult() : mbValueChanged(false), mbReferenceModified(false) {} RefUpdateResult::RefUpdateResult(const RefUpdateResult& r) : - mbValueChanged(r.mbValueChanged), mbRangeSizeModified(r.mbRangeSizeModified) {} + mbValueChanged(r.mbValueChanged), mbReferenceModified(r.mbReferenceModified) {} } diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 4c8e5955729c..64beedf2299f 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -2392,7 +2392,10 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateCon } if (rCxt.maRange.In(aAbs)) + { aAbs.Move(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta); + aRes.mbReferenceModified = true; + } rRef.SetAddress(aAbs, aNewPos); } @@ -2419,7 +2422,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateCon // The reference range has been shrunk. rRef.SetRange(aAbs, aNewPos); aRes.mbValueChanged = true; - aRes.mbRangeSizeModified = true; + aRes.mbReferenceModified = true; break; } } @@ -2432,7 +2435,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateCon // The reference range has been expanded. rRef.SetRange(aAbs, aNewPos); aRes.mbValueChanged = true; - aRes.mbRangeSizeModified = true; + aRes.mbReferenceModified = true; break; } @@ -2441,13 +2444,16 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateCon // The reference range has been expanded on the edge. rRef.SetRange(aAbs, aNewPos); aRes.mbValueChanged = true; - aRes.mbRangeSizeModified = true; + aRes.mbReferenceModified = true; break; } } if (rCxt.maRange.In(aAbs)) + { aAbs.Move(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta); + aRes.mbReferenceModified = true; + } else if (rCxt.maRange.Intersects(aAbs)) { // Part of the referenced range is being shifted. This |