Kaydet (Commit) 0224cbfe authored tarafından Markus Mohrhard's avatar Markus Mohrhard Kaydeden (comit) Eike Rathke

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 9261c0bf)
Reviewed-on: https://gerrit.libreoffice.org/2986Reviewed-by: 's avatarEike Rathke <erack@redhat.com>
Tested-by: 's avatarEike Rathke <erack@redhat.com>
üst d91b5e73
...@@ -526,6 +526,15 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode, ...@@ -526,6 +526,15 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode,
{ {
bool bInsertTab = ( eUpdateRefMode == URM_INSDEL && nDz >= 1 ); bool bInsertTab = ( eUpdateRefMode == URM_INSDEL && nDz >= 1 );
bool bDeleteTab = ( 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 bChanged1 = false;
bool bChanged2 = false; bool bChanged2 = false;
...@@ -533,7 +542,7 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode, ...@@ -533,7 +542,7 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode,
if (pFormula1) if (pFormula1)
{ {
if ( bInsertTab ) if ( bInsertTab )
lcl_CondUpdateInsertTab( *pFormula1, rRange.aStart.Tab(), aSrcPos.Tab(), bChanged1, nDz ); lcl_CondUpdateInsertTab( *pFormula1, rRange.aStart.Tab(), aOldSrcPos.Tab(), bChanged1, nDz );
else else
{ {
ScCompiler aComp( mpDoc, aSrcPos, *pFormula1 ); ScCompiler aComp( mpDoc, aSrcPos, *pFormula1 );
...@@ -543,18 +552,18 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode, ...@@ -543,18 +552,18 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode,
else else
{ {
bool bSizeChanged; bool bSizeChanged;
aComp.UpdateReference( eUpdateRefMode, aSrcPos, rRange, nDx, aComp.UpdateReference( eUpdateRefMode, aOldSrcPos, rRange, nDx,
nDy, nDz, bChanged1, bSizeChanged ); nDy, nDz, bChanged1, bSizeChanged );
} }
} }
if (bChanged1) if (bChanged1 || bChangedPos)
DELETEZ(pFCell1); // is created again in IsValid DELETEZ(pFCell1); // is created again in IsValid
} }
if (pFormula2) if (pFormula2)
{ {
if ( bInsertTab ) if ( bInsertTab )
lcl_CondUpdateInsertTab( *pFormula2, rRange.aStart.Tab(), aSrcPos.Tab(), bChanged2, nDz ); lcl_CondUpdateInsertTab( *pFormula2, rRange.aStart.Tab(), aOldSrcPos.Tab(), bChanged2, nDz );
else else
{ {
ScCompiler aComp( mpDoc, aSrcPos, *pFormula2); ScCompiler aComp( mpDoc, aSrcPos, *pFormula2);
...@@ -564,12 +573,12 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode, ...@@ -564,12 +573,12 @@ void ScConditionEntry::UpdateReference( UpdateRefMode eUpdateRefMode,
else else
{ {
bool bSizeChanged; bool bSizeChanged;
aComp.UpdateReference( eUpdateRefMode, aSrcPos, rRange, nDx, aComp.UpdateReference( eUpdateRefMode, aOldSrcPos, rRange, nDx,
nDy, nDz, bChanged2, bSizeChanged ); nDy, nDz, bChanged2, bSizeChanged );
} }
} }
if (bChanged2) if (bChanged2 || bChangedPos)
DELETEZ(pFCell2); // is created again in IsValid DELETEZ(pFCell2); // is created again in IsValid
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment