diff --git a/src/Views/ChangeCollectionView.axaml.cs b/src/Views/ChangeCollectionView.axaml.cs index f364d7e4..39d46d77 100644 --- a/src/Views/ChangeCollectionView.axaml.cs +++ b/src/Views/ChangeCollectionView.axaml.cs @@ -33,7 +33,16 @@ namespace SourceGit.Views protected override void OnKeyDown(KeyEventArgs e) { - if (e.Key != Key.Space) + if (SelectedItems is [ViewModels.ChangeTreeNode { IsFolder: true } node] && e.KeyModifiers == KeyModifiers.None) + { + if ((node.IsExpanded && e.Key == Key.Left) || (!node.IsExpanded && e.Key == Key.Right)) + { + this.FindAncestorOfType()?.ToggleNodeIsExpanded(node); + e.Handled = true; + } + } + + if (!e.Handled && e.Key != Key.Space) base.OnKeyDown(e); } } @@ -157,13 +166,11 @@ namespace SourceGit.Views { if (lastUnselected == -1) continue; - else - break; - } - else - { - lastUnselected = i; + + break; } + + lastUnselected = i; } } @@ -179,13 +186,11 @@ namespace SourceGit.Views { if (lastUnselected == -1) continue; - else - break; - } - else - { - lastUnselected = i; + + break; } + + lastUnselected = i; } if (lastUnselected != -1) @@ -239,9 +244,9 @@ namespace SourceGit.Views _disableSelectionChangingEvent = true; var selected = new List(); - if (sender is ListBox list) + if (sender is ListBox { SelectedItems: {} selectedItems }) { - foreach (var item in list.SelectedItems) + foreach (var item in selectedItems) { if (item is Models.Change c) selected.Add(c); diff --git a/src/Views/RevisionFileTreeView.axaml b/src/Views/RevisionFileTreeView.axaml index d0984f66..7266c429 100644 --- a/src/Views/RevisionFileTreeView.axaml +++ b/src/Views/RevisionFileTreeView.axaml @@ -8,12 +8,12 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="SourceGit.Views.RevisionFileTreeView" x:Name="ThisControl"> - + @@ -46,5 +46,5 @@ - + diff --git a/src/Views/RevisionFileTreeView.axaml.cs b/src/Views/RevisionFileTreeView.axaml.cs index 52d19a2c..89f02ccb 100644 --- a/src/Views/RevisionFileTreeView.axaml.cs +++ b/src/Views/RevisionFileTreeView.axaml.cs @@ -103,6 +103,26 @@ namespace SourceGit.Views } } + public class RevisionFileRowsListBox : ListBox + { + protected override Type StyleKeyOverride => typeof(ListBox); + + protected override void OnKeyDown(KeyEventArgs e) + { + if (SelectedItems is [ViewModels.RevisionFileTreeNode { IsFolder: true } node] && e.KeyModifiers == KeyModifiers.None) + { + if ((node.IsExpanded && e.Key == Key.Left) || (!node.IsExpanded && e.Key == Key.Right)) + { + this.FindAncestorOfType()?.ToggleNodeIsExpanded(node); + e.Handled = true; + } + } + + if (!e.Handled) + base.OnKeyDown(e); + } + } + public partial class RevisionFileTreeView : UserControl { public static readonly StyledProperty RevisionProperty = @@ -285,8 +305,8 @@ namespace SourceGit.Views } } - private List _tree = new List(); - private AvaloniaList _rows = new AvaloniaList(); + private List _tree = []; + private AvaloniaList _rows = []; private bool _disableSelectionChangingEvent = false; } } diff --git a/src/Views/Welcome.axaml b/src/Views/Welcome.axaml index 6d79948a..19703fa9 100644 --- a/src/Views/Welcome.axaml +++ b/src/Views/Welcome.axaml @@ -45,18 +45,18 @@ - +