summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2013-07-22 19:55:09 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2013-07-24 23:29:36 -0400
commitc9511b92dcd8405ccfbdf2f5628a3a2eaaa9cbdd (patch)
tree6b925dcf8fdc3221066975c76898b27e16d9fd00 /sc
parent3ed4796949d184a14b0df979bdb84012d6611e2c (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.hxx2
-rw-r--r--sc/source/core/data/formulacell.cxx5
-rw-r--r--sc/source/core/data/refupdatecontext.cxx4
-rw-r--r--sc/source/core/tool/token.cxx12
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