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 b0a7593

Browse files
committed
Added Preference and ToggleButton for diff navigation style
1 parent 4918299 commit b0a7593

File tree

5 files changed

+79
-22
lines changed

5 files changed

+79
-22
lines changed

‎src/ViewModels/DiffContext.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,14 @@ public void ToggleFullTextDiff()
133133
LoadDiffContent();
134134
}
135135

136+
public void ToggleHighlightedDiffNavigation()
137+
{
138+
Preference.Instance.EnableChangeBlocks = !Preference.Instance.EnableChangeBlocks;
139+
if (_content is Models.TextDiff textDiff)
140+
textDiff.CurrentChangeBlockIdx = -1;
141+
RefreshChangeBlockIndicator();
142+
}
143+
136144
public void IncrUnified()
137145
{
138146
UnifiedLines = _unifiedLines + 1;
@@ -145,6 +153,12 @@ public void DecrUnified()
145153
LoadDiffContent();
146154
}
147155

156+
public void ToggleTwoSideDiff()
157+
{
158+
Preference.Instance.UseSideBySideDiff = !Preference.Instance.UseSideBySideDiff;
159+
RefreshChangeBlockIndicator();
160+
}
161+
148162
public void OpenExternalMergeTool()
149163
{
150164
var toolType = Preference.Instance.ExternalMergeToolType;

‎src/ViewModels/Preference.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ public bool UseFullTextDiff
206206
set => SetProperty(ref _useFullTextDiff, value);
207207
}
208208

209+
public bool EnableChangeBlocks
210+
{
211+
get => _enableChangeBlocks;
212+
set => SetProperty(ref _enableChangeBlocks, value);
213+
}
214+
209215
public Models.ChangeViewMode UnstagedChangeViewMode
210216
{
211217
get => _unstagedChangeViewMode;
@@ -614,6 +620,7 @@ private bool RemoveInvalidRepositoriesRecursive(List<RepositoryNode> collection)
614620
private bool _enableDiffViewWordWrap = false;
615621
private bool _showHiddenSymbolsInDiffView = false;
616622
private bool _useFullTextDiff = false;
623+
private bool _enableChangeBlocks = false;
617624

618625
private Models.ChangeViewMode _unstagedChangeViewMode = Models.ChangeViewMode.List;
619626
private Models.ChangeViewMode _stagedChangeViewMode = Models.ChangeViewMode.List;

‎src/Views/DiffView.axaml

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@
3434

3535
<!-- Toolbar Buttons -->
3636
<StackPanel Grid.Column="3" Margin="8,0,0,0" Orientation="Horizontal" VerticalAlignment="Center">
37+
<ToggleButton Classes="line_path"
38+
Width="28"
39+
Command="{Binding ToggleHighlightedDiffNavigation}"
40+
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=EnableChangeBlocks, Mode=OneWay}"
41+
IsVisible="{Binding IsTextDiff}"
42+
ToolTip.Tip="{DynamicResource Text.Diff.HighlightedDiffNavigation}">
43+
<Path Width="13" Height="13" Data="{StaticResource Icons.Highlight}" Margin="0,3,0,0"/>
44+
</ToggleButton>
45+
3746
<Button Classes="icon_button"
3847
Width="28"
3948
Click="OnGotoPrevChange"
@@ -42,12 +51,17 @@
4251
<Path Width="12" Height="12" Stretch="Uniform" Margin="0,6,0,0" Data="{StaticResource Icons.Up}"/>
4352
</Button>
4453

45-
<TextBlock Classes="primary"
46-
Margin="0,0,0,0"
47-
Text="{Binding ChangeBlockIndicator}"
48-
FontSize="11"
49-
TextTrimming="CharacterEllipsis"
50-
IsVisible="{Binding IsTextDiff}"/>
54+
<TextBlock Classes="primary"
55+
Margin="0,0,0,0"
56+
Text="{Binding ChangeBlockIndicator}"
57+
FontSize="11">
58+
<TextBlock.IsVisible>
59+
<MultiBinding Converter="{x:Static BoolConverters.And}">
60+
<Binding Path="IsTextDiff"/>
61+
<Binding Source="{x:Static vm:Preference.Instance}" Path="EnableChangeBlocks" Mode="OneWay"/>
62+
</MultiBinding>
63+
</TextBlock.IsVisible>
64+
</TextBlock>
5165

5266
<Button Classes="icon_button"
5367
Width="28"
@@ -131,7 +145,8 @@
131145

132146
<ToggleButton Classes="line_path"
133147
Width="28" Height="18"
134-
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseSideBySideDiff, Mode=TwoWay}"
148+
Command="{Binding ToggleTwoSideDiff}"
149+
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseSideBySideDiff, Mode=OneWay}"
135150
IsVisible="{Binding IsTextDiff}"
136151
ToolTip.Tip="{DynamicResource Text.Diff.SideBySide}">
137152
<Path Width="12" Height="12" Data="{StaticResource Icons.LayoutHorizontal}" Margin="0,2,0,0"/>

‎src/Views/DiffView.axaml.cs

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,44 @@ public DiffView()
1313

1414
private void OnGotoPrevChange(object _, RoutedEventArgs e)
1515
{
16-
var textDiff = this.FindDescendantOfType<ThemedTextDiffPresenter>();
17-
if (textDiff == null)
18-
return;
16+
if (ViewModels.Preference.Instance.EnableChangeBlocks)
17+
{
18+
if (DataContext is ViewModels.DiffContext diffCtx)
19+
diffCtx.PrevChange();
20+
}
21+
else
22+
{
23+
var textDiff = this.FindDescendantOfType<ThemedTextDiffPresenter>();
24+
if (textDiff == null)
25+
return;
1926

20-
textDiff.GotoPrevChange();
21-
if (textDiff is SingleSideTextDiffPresenter presenter)
22-
presenter.ForceSyncScrollOffset();
27+
textDiff.GotoPrevChange();
28+
if (textDiff is SingleSideTextDiffPresenter presenter)
29+
presenter.ForceSyncScrollOffset();
2330

24-
e.Handled = true;
31+
e.Handled = true;
32+
}
2533
}
2634

2735
private void OnGotoNextChange(object _, RoutedEventArgs e)
2836
{
29-
var textDiff = this.FindDescendantOfType<ThemedTextDiffPresenter>();
30-
if (textDiff == null)
31-
return;
37+
if (ViewModels.Preference.Instance.EnableChangeBlocks)
38+
{
39+
if (DataContext is ViewModels.DiffContext diffCtx)
40+
diffCtx.NextChange();
41+
}
42+
else
43+
{
44+
var textDiff = this.FindDescendantOfType<ThemedTextDiffPresenter>();
45+
if (textDiff == null)
46+
return;
3247

33-
textDiff.GotoNextChange();
34-
if (textDiff is SingleSideTextDiffPresenter presenter)
35-
presenter.ForceSyncScrollOffset();
48+
textDiff.GotoNextChange();
49+
if (textDiff is SingleSideTextDiffPresenter presenter)
50+
presenter.ForceSyncScrollOffset();
3651

37-
e.Handled = true;
52+
e.Handled = true;
53+
}
3854
}
3955
}
4056
}

‎src/Views/TextDiffView.axaml.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,7 @@ public void JumpToChangeBlock(int changeBlockIdx)
635635
//TextArea.Caret.BringCaretToView(); // NOTE: Brings caret line (barely) into view.
636636
ScrollToLine(changeBlock.StartLine); // NOTE: Brings specified line into center of view.
637637
}
638+
TextArea.TextView.Redraw();
638639
}
639640

640641
public override void Render(DrawingContext context)
@@ -712,6 +713,10 @@ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs chang
712713
{
713714
InvalidateVisual();
714715
}
716+
else if (change.Property == CurrentChangeBlockIdxProperty)
717+
{
718+
InvalidateVisual();
719+
}
715720
}
716721

717722
private void OnTextViewContextRequested(object sender, ContextRequestedEventArgs e)
@@ -1587,7 +1592,7 @@ static TextDiffView()
15871592

15881593
CurrentChangeBlockIdxProperty.Changed.AddClassHandler<TextDiffView>((v, e) =>
15891594
{
1590-
if ((int)e.NewValue>=0&&v.Editor.Presenter != null)
1595+
if (v.Editor.Presenter != null)
15911596
{
15921597
foreach (var p in v.Editor.Presenter.GetVisualDescendants().OfType<ThemedTextDiffPresenter>())
15931598
{

0 commit comments

Comments
(0)

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