Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1a99ce5

Browse files
committed
Cherrypick - feature: add buttons to go to prev/next change in text diff view (#616)
Signed-off-by: leo <longshuang@msn.cn> (cherry picked from commit 134c710) # Conflicts: # src/Views/DiffView.axaml # src/Views/TextDiffView.axaml.cs
1 parent 96a9019 commit 1a99ce5

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

‎src/Views/TextDiffView.axaml.cs

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,108 @@ public void JumpToChangeBlock(int changeBlockIdx)
647647
}
648648
}
649649

650+
public void GotoPrevChange()
651+
{
652+
var view = TextArea.TextView;
653+
var lines = GetLines();
654+
var firstLineIdx = lines.Count;
655+
foreach (var line in view.VisualLines)
656+
{
657+
if (line.IsDisposed || line.FirstDocumentLine == null || line.FirstDocumentLine.IsDeleted)
658+
continue;
659+
660+
var index = line.FirstDocumentLine.LineNumber - 1;
661+
if (index >= lines.Count)
662+
continue;
663+
664+
if (firstLineIdx > index)
665+
firstLineIdx = index;
666+
}
667+
668+
var firstLineType = lines[firstLineIdx].Type;
669+
var isChangeFirstLine = firstLineType != Models.TextDiffLineType.Normal && firstLineType != Models.TextDiffLineType.Indicator;
670+
if (isChangeFirstLine)
671+
{
672+
for (var i = firstLineIdx - 1; i >= 0; i--)
673+
{
674+
var prevType = lines[i].Type;
675+
if (prevType == Models.TextDiffLineType.Normal || prevType == Models.TextDiffLineType.Indicator)
676+
{
677+
ScrollToLine(i + 2);
678+
return;
679+
}
680+
}
681+
}
682+
else
683+
{
684+
var prevChangeEnd = -1;
685+
for (var i = firstLineIdx - 1; i >= 0; i--)
686+
{
687+
var prevType = lines[i].Type;
688+
if (prevType == Models.TextDiffLineType.None ||
689+
prevType == Models.TextDiffLineType.Added ||
690+
prevType == Models.TextDiffLineType.Deleted)
691+
{
692+
prevChangeEnd = i;
693+
break;
694+
}
695+
}
696+
697+
if (prevChangeEnd <= 0)
698+
return;
699+
700+
for (var i = prevChangeEnd - 1; i >= 0; i--)
701+
{
702+
var prevType = lines[i].Type;
703+
if (prevType == Models.TextDiffLineType.Normal || prevType == Models.TextDiffLineType.Indicator)
704+
{
705+
ScrollToLine(i + 2);
706+
return;
707+
}
708+
}
709+
}
710+
}
711+
712+
public void GotoNextChange()
713+
{
714+
var view = TextArea.TextView;
715+
var lines = GetLines();
716+
var lastLineIdx = -1;
717+
foreach (var line in view.VisualLines)
718+
{
719+
if (line.IsDisposed || line.FirstDocumentLine == null || line.FirstDocumentLine.IsDeleted)
720+
continue;
721+
722+
var index = line.FirstDocumentLine.LineNumber - 1;
723+
if (index >= lines.Count)
724+
continue;
725+
726+
if (lastLineIdx < index)
727+
lastLineIdx = index;
728+
}
729+
730+
var lastLineType = lines[lastLineIdx].Type;
731+
var findNormalLine = lastLineType == Models.TextDiffLineType.Normal || lastLineType == Models.TextDiffLineType.Indicator;
732+
for (var idx = lastLineIdx + 1; idx < lines.Count; idx++)
733+
{
734+
var nextType = lines[idx].Type;
735+
if (nextType == Models.TextDiffLineType.None ||
736+
nextType == Models.TextDiffLineType.Added ||
737+
nextType == Models.TextDiffLineType.Deleted)
738+
{
739+
if (findNormalLine)
740+
{
741+
ScrollToLine(idx + 1);
742+
return;
743+
}
744+
}
745+
else if (!findNormalLine)
746+
{
747+
findNormalLine = true;
748+
}
749+
}
750+
}
751+
650752
public override void Render(DrawingContext context)
651753
{
652754
base.Render(context);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /