summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2013-03-24 05:09:08 +0100
committerEike Rathke <erack@redhat.com>2013-03-25 13:17:10 +0000
commit0224cbfebdfc3f73bc870e0d039908aba879474e (patch)
tree1229eddbc4c09b765f9c4baafc905fccfb7b2894
parentd91b5e739128cd8f4c3ef86c17cd723d5b292a2d (diff)
URM_INSDEL we need to update the src position, fdo#62206
See ScFormulaCell::UpdateReference for a similar update Change-Id: I1f98d26adb5085e4bdab63cc23f97a81928d6b13 (cherry picked from commit 9261c0bf6ecf6633a5577879f003edfcb569f4d7) Reviewed-on: https://gerrit.libreoffice.org/2986 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com>
-rw-r--r--sc/source/core/data/conditio.cxx21
1 files changed, 15 insertions, 6 deletions
diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx
index a6ba7363048d..d37891adb483 100644
--- a/sc/source/core/data/conditio.cxx
+++ b/sc/source/core/data/conditio.cxx
@@ -526,6 +526,15 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode,
{
bool bInsertTab = ( eUpdateRefMode == URM_INSDEL && nDz >= 1 );
bool bDeleteTab = ( eUpdateRefMode == URM_INSDEL && nDz <= -1 );
+ if(pCondFormat)
+ aSrcPos = pCondFormat->GetRange().Combine().aStart;
+ ScAddress aOldSrcPos = aSrcPos;
+ bool bChangedPos = false;
+ if(eUpdateRefMode == URM_INSDEL && rRange.In(aSrcPos))
+ {
+ aSrcPos.Move(nDx, nDy, nDz);
+ bChangedPos = aSrcPos != aOldSrcPos;
+ }
bool bChanged1 = false;
bool bChanged2 = false;
@@ -533,7 +542,7 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode,
if (pFormula1)
{
if ( bInsertTab )
- lcl_CondUpdateInsertTab( *pFormula1, rRange.aStart.Tab(), aSrcPos.Tab(), bChanged1, nDz );
+ lcl_CondUpdateInsertTab( *pFormula1, rRange.aStart.Tab(), aOldSrcPos.Tab(), bChanged1, nDz );
else
{
ScCompiler aComp( mpDoc, aSrcPos, *pFormula1 );
@@ -543,18 +552,18 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode,
else
{
bool bSizeChanged;
- aComp.UpdateReference( eUpdateRefMode, aSrcPos, rRange, nDx,
+ aComp.UpdateReference( eUpdateRefMode, aOldSrcPos, rRange, nDx,
nDy, nDz, bChanged1, bSizeChanged );
}
}
- if (bChanged1)
+ if (bChanged1 || bChangedPos)
DELETEZ(pFCell1); // is created again in IsValid
}
if (pFormula2)
{
if ( bInsertTab )
- lcl_CondUpdateInsertTab( *pFormula2, rRange.aStart.Tab(), aSrcPos.Tab(), bChanged2, nDz );
+ lcl_CondUpdateInsertTab( *pFormula2, rRange.aStart.Tab(), aOldSrcPos.Tab(), bChanged2, nDz );
else
{
ScCompiler aComp( mpDoc, aSrcPos, *pFormula2);
@@ -564,12 +573,12 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode,
else
{
bool bSizeChanged;
- aComp.UpdateReference( eUpdateRefMode, aSrcPos, rRange, nDx,
+ aComp.UpdateReference( eUpdateRefMode, aOldSrcPos, rRange, nDx,
nDy, nDz, bChanged2, bSizeChanged );
}
}
- if (bChanged2)
+ if (bChanged2 || bChangedPos)
DELETEZ(pFCell2); // is created again in IsValid
}
}