From 62b372cb94de37b1d8dc181242e8f3f7f3183b8b Mon Sep 17 00:00:00 2001 From: Daniel Chalmers Date: Sun, 24 May 2026 15:16:51 -0500 Subject: [PATCH] Improve-settings-action-editor --- .../Actions/ActionsSettingsViewModelTests.cs | 21 ++- RadialActions/Settings/ActionEditorView.xaml | 138 ++++++++---------- .../Settings/ActionEditorViewModel.cs | 21 ++- .../Settings/ActionsSettingsViewModel.cs | 8 +- 4 files changed, 102 insertions(+), 86 deletions(-) diff --git a/RadialActions.Tests/Actions/ActionsSettingsViewModelTests.cs b/RadialActions.Tests/Actions/ActionsSettingsViewModelTests.cs index 224eaf0..83dccb7 100644 --- a/RadialActions.Tests/Actions/ActionsSettingsViewModelTests.cs +++ b/RadialActions.Tests/Actions/ActionsSettingsViewModelTests.cs @@ -48,20 +48,33 @@ public void SelectAction_SelectsMatchingAction() } [Fact] - public void AddAction_AppendsBlankActionAndSelectsIt() + public void AddAction_InsertsBlankActionAfterSelectedActionAndSelectsIt() { - var viewModel = CreateViewModel(PieAction.CreateKeyAction("Mute")); + var first = PieAction.CreateKeyAction("Mute"); + var second = PieAction.CreateKeyAction("VolumeUp"); + var third = PieAction.CreateKeyAction("VolumeDown"); + var viewModel = CreateViewModel(first, second, third); + viewModel.SelectAction(second); viewModel.AddActionCommand.Execute(null); - var added = Assert.Single(viewModel.Actions.Skip(1)); + var added = viewModel.Actions[2]; + Assert.Equal([first, second, added, third], viewModel.Actions); Assert.Equal("Blank action", added.Name); Assert.Equal(ActionType.None, added.Type); Assert.Same(added, viewModel.SelectedAction); - Assert.Equal(1, viewModel.SelectedActionIndex); + Assert.Equal(2, viewModel.SelectedActionIndex); Assert.Same(added, viewModel.Editor.SelectedAction); } + [Fact] + public void ActionEditorViewModel_ActionTypes_HidesNoneType() + { + var viewModel = new ActionEditorViewModel(new ActionDefaultsService(), []); + + Assert.Equal([ActionType.Key, ActionType.Shell], viewModel.ActionTypes.Select(option => option.Type)); + } + [Fact] public void RemoveAction_SelectsNextAvailableAction() { diff --git a/RadialActions/Settings/ActionEditorView.xaml b/RadialActions/Settings/ActionEditorView.xaml index 98bb488..a48b5cf 100644 --- a/RadialActions/Settings/ActionEditorView.xaml +++ b/RadialActions/Settings/ActionEditorView.xaml @@ -13,67 +13,53 @@ - - - - - - - - - - - - - - - + - + + - - + + - - + + - - + + + + + + + + + + + - - - - - - - - - - @@ -89,32 +75,24 @@ + - - - + + - - - - - - - - - - - - + @@ -127,18 +105,18 @@ Command="{Binding BrowseShellTargetCommand}" Padding="8,2" /> + - - + + - - + @@ -151,6 +129,8 @@ Command="{Binding BrowseWorkingDirectoryCommand}" Padding="8,2" /> - - + + + diff --git a/RadialActions/Settings/ActionEditorViewModel.cs b/RadialActions/Settings/ActionEditorViewModel.cs index cdf12f4..c487598 100644 --- a/RadialActions/Settings/ActionEditorViewModel.cs +++ b/RadialActions/Settings/ActionEditorViewModel.cs @@ -26,7 +26,12 @@ public ActionEditorViewModel(ActionDefaultsService actionDefaultsService, IEnume _actionDefaultsService.TrackExistingDefaults(actions); } - public ActionType[] ActionTypes { get; } = [ActionType.None, ActionType.Key, ActionType.Shell]; + public IReadOnlyList ActionTypes { get; } = + [ + new(ActionType.Key, "Key", "⌨️"), + new(ActionType.Shell, "Shell", "🚀"), + ]; + public IReadOnlyList KeyActionOptions { get; } = [.. PieAction.KeyActions, CustomKeyActionOption]; public bool HasSelectedAction => SelectedAction != null; @@ -194,3 +199,17 @@ private void SelectedActionPropertyChanged(object sender, PropertyChangedEventAr } } } + +public sealed class ActionTypeOption +{ + public ActionTypeOption(ActionType type, string name, string icon) + { + Type = type; + Name = name; + Icon = icon; + } + + public ActionType Type { get; } + public string Name { get; } + public string Icon { get; } +} diff --git a/RadialActions/Settings/ActionsSettingsViewModel.cs b/RadialActions/Settings/ActionsSettingsViewModel.cs index f867666..3fd4e4f 100644 --- a/RadialActions/Settings/ActionsSettingsViewModel.cs +++ b/RadialActions/Settings/ActionsSettingsViewModel.cs @@ -46,8 +46,12 @@ public void SelectAction(PieAction action) private void AddAction() { var newAction = new PieAction("Blank action") { Type = ActionType.None }; - Actions.Add(newAction); - SelectedActionIndex = Actions.Count - 1; + + var selectedIndex = SelectedAction == null ? -1 : Actions.IndexOf(SelectedAction); + var insertionIndex = selectedIndex >= 0 ? selectedIndex + 1 : Actions.Count; + + Actions.Insert(insertionIndex, newAction); + SelectedActionIndex = insertionIndex; SelectedAction = newAction; Log.Debug("Added new action"); }