Profile editor - Added back hotkeys for the tools

Profile editor - Fixed hotkeys not always working
This commit is contained in:
Robert committed 2023-10-07 20:12:35 +02:00
1 parent f985682e78
commit 543b62a715
16 files changed
+106 -38

No files matched your search

@@ -28,6 +28,7 @@ public class ProfileEditorViewModel : RoutableScreen<ProfileEditorViewModelParam
private readonly IProfileEditorService _profileEditorService;
private readonly IProfileService _profileService;
private readonly ISettingsService _settingsService;
private readonly IMainWindowService _mainWindowService;
private readonly SourceList<IToolViewModel> _tools;
private ObservableAsPropertyHelper<ProfileEditorHistory?>? _history;
private ProfileConfiguration? _profileConfiguration;
@@ -44,11 +45,13 @@ public class ProfileEditorViewModel : RoutableScreen<ProfileEditorViewModelParam
DisplayConditionScriptViewModel displayConditionScriptViewModel,
StatusBarViewModel statusBarViewModel,
IEnumerable<IToolViewModel> toolViewModels,
IMainWindowService mainWindowService)
IMainWindowService mainWindowService,
IInputService inputService)
{
_profileService = profileService;
_profileEditorService = profileEditorService;
_settingsService = settingsService;
_mainWindowService = mainWindowService;
_tools = new SourceList<IToolViewModel>();
_tools.AddRange(toolViewModels);
@@ -72,11 +75,13 @@ public class ProfileEditorViewModel : RoutableScreen<ProfileEditorViewModelParam
_history = profileEditorService.History.ToProperty(this, vm => vm.History).DisposeWith(d);
_suspendedEditing = profileEditorService.SuspendedEditing.ToProperty(this, vm => vm.SuspendedEditing).DisposeWith(d);
inputService.KeyboardKeyDown += InputServiceOnKeyboardKeyDown;
mainWindowService.MainWindowFocused += MainWindowServiceOnMainWindowFocused;
mainWindowService.MainWindowUnfocused += MainWindowServiceOnMainWindowUnfocused;
Disposable.Create(() =>
{
inputService.KeyboardKeyDown -= InputServiceOnKeyboardKeyDown;
mainWindowService.MainWindowFocused -= MainWindowServiceOnMainWindowFocused;
mainWindowService.MainWindowUnfocused -= MainWindowServiceOnMainWindowUnfocused;
foreach (IToolViewModel toolViewModel in _tools.Items)
@@ -139,6 +144,33 @@ public class ProfileEditorViewModel : RoutableScreen<ProfileEditorViewModelParam
});
}
private void InputServiceOnKeyboardKeyDown(object? sender, ArtemisKeyboardKeyEventArgs e)
{
if (!Shared.UI.KeyBindingsEnabled || !_mainWindowService.IsMainWindowFocused)
return;
if (e.Modifiers == KeyboardModifierKey.Control && e.Key == KeyboardKey.Z)
History?.Undo.Execute().Subscribe();
else if (e.Modifiers == KeyboardModifierKey.Control && e.Key == KeyboardKey.Y)
History?.Redo.Execute().Subscribe();
else if (e.Modifiers == KeyboardModifierKey.None && e.Key == KeyboardKey.F5)
ToggleSuspend.Execute().Subscribe();
else if (e.Modifiers == KeyboardModifierKey.Shift && e.Key == KeyboardKey.F5)
ToggleAutoSuspend.Execute().Subscribe();
else if (e.Modifiers == KeyboardModifierKey.None && e.Key == KeyboardKey.Space)
PropertiesViewModel?.PlaybackViewModel.TogglePlay.Execute().Subscribe();
else if (e.Modifiers == KeyboardModifierKey.Shift && e.Key == KeyboardKey.Space)
PropertiesViewModel?.PlaybackViewModel.PlayFromStart.Execute().Subscribe();
else if (e.Modifiers == KeyboardModifierKey.None && e.Key == KeyboardKey.F)
(TitleBarViewModel as ProfileEditorTitleBarViewModel)?.MenuBarViewModel.CycleFocusMode.Execute().Subscribe();
else
{
IToolViewModel? tool = Tools.FirstOrDefault(t => t.Hotkey != null && t.Hotkey.MatchesEventArgs(e));
if (tool != null)
tool.IsSelected = true;
}
}
private void MainWindowServiceOnMainWindowFocused(object? sender, EventArgs e)
{
if (_settingsService.GetSetting("ProfileEditor.AutoSuspend", true).Value)