Skip to content

Commit ea1d966

Browse files
authored
feat: Reset Mode Hotkey (#714)
1 parent f4618af commit ea1d966

File tree

3 files changed

+41
-9
lines changed

3 files changed

+41
-9
lines changed

src/Models/ResetMode.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,25 @@ public class ResetMode
66
{
77
public static readonly ResetMode[] Supported =
88
[
9-
new ResetMode("Soft", "Keep all changes. Stage differences", "--soft", Brushes.Green),
10-
new ResetMode("Mixed", "Keep all changes. Unstage differences", "--mixed", Brushes.Orange),
11-
new ResetMode("Merge", "Reset while keeping unmerged changes", "--merge", Brushes.Purple),
12-
new ResetMode("Keep", "Reset while keeping local modifications", "--keep", Brushes.Purple),
13-
new ResetMode("Hard", "Discard all changes", "--hard", Brushes.Red),
9+
new ResetMode("Soft", "Keep all changes. Stage differences", "--soft", 'S', Brushes.Green),
10+
new ResetMode("Mixed", "Keep all changes. Unstage differences", "--mixed", 'M',Brushes.Orange),
11+
new ResetMode("Merge", "Reset while keeping unmerged changes", "--merge", 'G',Brushes.Purple),
12+
new ResetMode("Keep", "Reset while keeping local modifications", "--keep", 'K',Brushes.Purple),
13+
new ResetMode("Hard", "Discard all changes", "--hard", 'H',Brushes.Red),
1414
];
1515

1616
public string Name { get; set; }
1717
public string Desc { get; set; }
1818
public string Arg { get; set; }
19+
public char Key { get; set; }
1920
public IBrush Color { get; set; }
2021

21-
public ResetMode(string n, string d, string a, IBrush b)
22+
public ResetMode(string n, string d, string a, char k, IBrush b)
2223
{
2324
Name = n;
2425
Desc = d;
2526
Arg = a;
27+
Key = k;
2628
Color = b;
2729
}
2830
}

src/Views/Reset.axaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
xmlns:c="using:SourceGit.Converters"
88
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
99
x:Class="SourceGit.Views.Reset"
10+
Loaded="Control_OnLoaded"
1011
x:DataType="vm:Reset">
1112
<StackPanel Orientation="Vertical" Margin="8,0">
1213
<TextBlock FontSize="18"
@@ -36,17 +37,19 @@
3637
HorizontalAlignment="Right" VerticalAlignment="Center"
3738
Margin="0,0,8,0"
3839
Text="{DynamicResource Text.Reset.Mode}"/>
39-
<ComboBox Grid.Row="2" Grid.Column="1"
40+
<ComboBox x:Name="ResetMode" Grid.Row="2" Grid.Column="1"
4041
Height="28" Padding="8,0"
4142
VerticalAlignment="Center" HorizontalAlignment="Stretch"
43+
KeyDown="InputElement_OnKeyDown"
4244
ItemsSource="{Binding Source={x:Static m:ResetMode.Supported}}"
4345
SelectedItem="{Binding SelectedMode, Mode=TwoWay}">
4446
<ComboBox.ItemTemplate>
4547
<DataTemplate DataType="m:ResetMode">
4648
<Grid ColumnDefinitions="16,60,*">
4749
<Ellipse Grid.Column="0" Width="12" Height="12" Fill="{Binding Color}"/>
48-
<TextBlock Grid.Column="1" Text="{Binding Name}" Margin="4,0,0,0"/>
49-
<TextBlock Grid.Column="2" Text="{Binding Desc}" FontSize="11" Foreground="{DynamicResource Brush.FG2}" HorizontalAlignment="Right"/>
50+
<TextBlock Grid.Column="1" Text="{Binding Name}" Margin="2,0,0,0"/>
51+
<TextBlock Grid.Column="2" Text="{Binding Desc}" Margin="2,0,16,0" FontSize="11" Foreground="{DynamicResource Brush.FG2}" HorizontalAlignment="Right"/>
52+
<TextBlock Grid.Column="3" Text="{Binding Key}" FontSize="11" FontWeight="Bold" Foreground="{DynamicResource Brush.FG2}" HorizontalAlignment="Right"/>
5053
</Grid>
5154
</DataTemplate>
5255
</ComboBox.ItemTemplate>

src/Views/Reset.axaml.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
using System.Linq;
12
using Avalonia.Controls;
3+
using Avalonia.Input;
4+
using Avalonia.Interactivity;
5+
using SourceGit.Models;
26

37
namespace SourceGit.Views
48
{
@@ -8,5 +12,28 @@ public Reset()
812
{
913
InitializeComponent();
1014
}
15+
16+
private void InputElement_OnKeyDown(object sender, KeyEventArgs e)
17+
{
18+
var key = e.Key.ToString().ToLower();
19+
foreach (var item in ResetMode.ItemsSource)
20+
{
21+
if (item.GetType() == typeof(ResetMode))
22+
{
23+
var resetMode = (ResetMode)item;
24+
if (resetMode.Key.ToString().ToLower() == key)
25+
{
26+
ResetMode.SelectedValue = resetMode;
27+
return;
28+
}
29+
30+
}
31+
}
32+
}
33+
34+
private void Control_OnLoaded(object sender, RoutedEventArgs e)
35+
{
36+
ResetMode.Focus();
37+
}
1138
}
1239
}

0 commit comments

Comments
 (0)