refactor: text diff view go to next/prev change
Some checks are pending
Continuous Integration / Package (push) Blocked by required conditions
Continuous Integration / Build (push) Waiting to run
Continuous Integration / Prepare version string (push) Waiting to run

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2024-11-16 18:24:37 +08:00
parent 52c7388a38
commit 882878dbe5
No known key found for this signature in database

View file

@ -516,11 +516,16 @@ namespace SourceGit.Views
firstLineIdx = index; firstLineIdx = index;
} }
if (firstLineIdx <= 1)
return;
var firstLineType = lines[firstLineIdx].Type; var firstLineType = lines[firstLineIdx].Type;
var prevLineType = lines[firstLineIdx - 1].Type;
var isChangeFirstLine = firstLineType != Models.TextDiffLineType.Normal && firstLineType != Models.TextDiffLineType.Indicator; var isChangeFirstLine = firstLineType != Models.TextDiffLineType.Normal && firstLineType != Models.TextDiffLineType.Indicator;
if (isChangeFirstLine) var isChangePrevLine = prevLineType != Models.TextDiffLineType.Normal && prevLineType != Models.TextDiffLineType.Indicator;
if (isChangeFirstLine && isChangePrevLine)
{ {
for (var i = firstLineIdx - 1; i >= 0; i--) for (var i = firstLineIdx - 2; i >= 0; i--)
{ {
var prevType = lines[i].Type; var prevType = lines[i].Type;
if (prevType == Models.TextDiffLineType.Normal || prevType == Models.TextDiffLineType.Indicator) if (prevType == Models.TextDiffLineType.Normal || prevType == Models.TextDiffLineType.Indicator)
@ -530,33 +535,23 @@ namespace SourceGit.Views
} }
} }
} }
else
{ var findChange = false;
var prevChangeEnd = -1;
for (var i = firstLineIdx - 1; i >= 0; i--) for (var i = firstLineIdx - 1; i >= 0; i--)
{
var prevType = lines[i].Type;
if (prevType == Models.TextDiffLineType.None ||
prevType == Models.TextDiffLineType.Added ||
prevType == Models.TextDiffLineType.Deleted)
{
prevChangeEnd = i;
break;
}
}
if (prevChangeEnd <= 0)
return;
for (var i = prevChangeEnd - 1; i >= 0; i--)
{ {
var prevType = lines[i].Type; var prevType = lines[i].Type;
if (prevType == Models.TextDiffLineType.Normal || prevType == Models.TextDiffLineType.Indicator) if (prevType == Models.TextDiffLineType.Normal || prevType == Models.TextDiffLineType.Indicator)
{
if (findChange)
{ {
ScrollToLine(i + 2); ScrollToLine(i + 2);
return; return;
} }
} }
else if (!findChange)
{
findChange = true;
}
} }
} }
@ -578,6 +573,9 @@ namespace SourceGit.Views
lastLineIdx = index; lastLineIdx = index;
} }
if (lastLineIdx >= lines.Count - 1)
return;
var lastLineType = lines[lastLineIdx].Type; var lastLineType = lines[lastLineIdx].Type;
var findNormalLine = lastLineType == Models.TextDiffLineType.Normal || lastLineType == Models.TextDiffLineType.Indicator; var findNormalLine = lastLineType == Models.TextDiffLineType.Normal || lastLineType == Models.TextDiffLineType.Indicator;
for (var idx = lastLineIdx + 1; idx < lines.Count; idx++) for (var idx = lastLineIdx + 1; idx < lines.Count; idx++)