diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Commands/EditorModeSwitch/EditorModeSwitchCommandHandler.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Commands/EditorModeSwitch/EditorModeSwitchCommandHandler.cs index fc342556..f2c1b196 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Commands/EditorModeSwitch/EditorModeSwitchCommandHandler.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Commands/EditorModeSwitch/EditorModeSwitchCommandHandler.cs @@ -28,7 +28,7 @@ public override void Update(Command command) public override Task Run(Command command) { if (editorDocumentManager.CurrentActivatedEditor is FumenVisualEditorViewModel editor) - editor.KeyboardAction_HideOrShow(); + editor.KeyboardAction_HideOrShow(default); command.Checked = editorDocumentManager.CurrentActivatedEditor?.IsPreviewMode ?? false; return TaskUtility.Completed; } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/KeyBindingDefinitions.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/KeyBindingDefinitions.cs index a44383a1..9da86c51 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/KeyBindingDefinitions.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/KeyBindingDefinitions.cs @@ -12,8 +12,99 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor public static class KeyBindingDefinitions { [Export] - public static KeyBindingDefinition KeyBindingDefinition_FastSetObjectIsCritical = new KeyBindingDefinition( - "kbd_FastSetObjectIsCritical", + public static KeyBindingDefinition KBD_FastSetObjectIsCritical = new KeyBindingDefinition( + "kbd_editor_FastSetObjectIsCritical", Key.C); + + [Export] + //KeyboardAction_FastPlaceDockableObjectToWallLeft + public static KeyBindingDefinition KBD_FastPlaceDockableObjectToWallLeft = new KeyBindingDefinition( + "kbd_editor_FastPlaceDockableObjectToWallLeft", + Key.OemTilde); + + [Export] + //KeyboardAction_FastPlaceDockableObjectToWallRight + public static KeyBindingDefinition KBD_FastPlaceDockableObjectToWallRight = new KeyBindingDefinition( + "kbd_editor_FastPlaceDockableObjectToWallRight", + Key.D4); + + [Export] + //KeyboardAction_FastPlaceDockableObjectToRight + public static KeyBindingDefinition KBD_FastPlaceDockableObjectToRight = new KeyBindingDefinition( + "kbd_editor_FastPlaceDockableObjectToRight", + Key.D3); + + [Export] + //[Key H] = [Action KeyboardAction_FastPlaceNewHold($executionContext)] + public static KeyBindingDefinition KBD_FastPlaceNewHold = new KeyBindingDefinition( + "kbd_editor_FastPlaceNewHold", + Key.H); + + [Export] + //[Key T] = [Action KeyboardAction_FastPlaceNewTap($executionContext)]; + public static KeyBindingDefinition KBD_FastPlaceNewTap = new KeyBindingDefinition( + "kbd_editor_FastPlaceNewTap", + Key.T); + + [Export] + //[Key D2] = [Action KeyboardAction_FastPlaceDockableObjectToCenter]; + public static KeyBindingDefinition KBD_FastPlaceDockableObjectToCenter = new KeyBindingDefinition( + "kbd_editor_FastPlaceDockableObjectToCenter", + Key.D2); + + [Export] + //[Key D1] = [Action KeyboardAction_FastPlaceDockableObjectToLeft]; + public static KeyBindingDefinition KBD_FastPlaceDockableObjectToLeft = new KeyBindingDefinition( + "kbd_editor_FastPlaceDockableObjectToLeft", + Key.D1); + + + [Export] + //[Key Delete] = [Action KeyboardAction_DeleteSelectingObjects]; + public static KeyBindingDefinition KBD_DeleteSelectingObjects = new KeyBindingDefinition( + "kbd_editor_DeleteSelectingObjects", + Key.Delete); + + [Export] + //[Gesture Ctrl+A] = [Action KeyboardAction_SelectAllObjects]; + public static KeyBindingDefinition KBD_SelectAllObjects = new KeyBindingDefinition( + "kbd_editor_SelectAllObjects", + ModifierKeys.Control, Key.A); + + [Export] + //[Key Escape] = [Action KeyboardAction_CancelSelectingObjects]; + public static KeyBindingDefinition KBD_CancelSelectingObjects = new KeyBindingDefinition( + "kbd_editor_CancelSelectingObjects", + Key.Escape); + + [Export] + //[Key Q] = [Action KeyboardAction_HideOrShow]; + public static KeyBindingDefinition KBD_HideOrShow = new KeyBindingDefinition( + "kbd_editor_HideOrShow", + Key.Q); + + [Export] + // [Key A] = [Action KeyboardAction_FastAddConnectableChild($executionContext)]; + public static KeyBindingDefinition KBD_FastAddConnectableChild = new KeyBindingDefinition( + "kbd_editor_FastAddConnectableChild", + Key.A); + + [Export] + // [Key F] = [Action KeyboardAction_FastSwitchFlickDirection($executionContext)]; + public static KeyBindingDefinition KBD_FastSwitchFlickDirection = new KeyBindingDefinition( + "kbd_editor_FastSwitchFlickDirection", + Key.F); + + [Export] + // [Gesture Ctrl+C]=[Action MenuItemAction_CopySelectedObjects]; + public static KeyBindingDefinition KBD_CopySelectedObjects = new KeyBindingDefinition( + "kbd_editor_CopySelectedObjects", + ModifierKeys.Control, Key.C); + + [Export] + // [Gesture Ctrl+V]=[Action MenuItemAction_PasteCopiesObjects]; " + public static KeyBindingDefinition KBD_PasteCopiesObjects = new KeyBindingDefinition( + "kbd_editor_PasteCopiesObjects", + ModifierKeys.Control, Key.V); } } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.UserInteractionActions.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.UserInteractionActions.cs index 949009f3..df6956c0 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.UserInteractionActions.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.UserInteractionActions.cs @@ -35,6 +35,7 @@ using OngekiFumenEditor.Base.OngekiObjects.Lane; using OngekiFumenEditor.Base.OngekiObjects.Lane.Base; using OngekiFumenEditor.Base.OngekiObjects.Wall; +using System.Threading; namespace OngekiFumenEditor.Modules.FumenVisualEditor.ViewModels { @@ -159,7 +160,7 @@ public void InitExtraMenuItems() #region Selection Actions - public void MenuItemAction_SelectAll() + public void MenuItemAction_SelectAll(ActionExecutionContext e) { IsPreventMutualExclusionSelecting = true; @@ -169,7 +170,7 @@ public void MenuItemAction_SelectAll() IsPreventMutualExclusionSelecting = false; } - public void MenuItemAction_ReverseSelect() + public void MenuItemAction_ReverseSelect(ActionExecutionContext e) { IsPreventMutualExclusionSelecting = true; @@ -179,7 +180,7 @@ public void MenuItemAction_ReverseSelect() IsPreventMutualExclusionSelecting = false; } - public async void MenuItemAction_CopySelectedObjects() + public async void MenuItemAction_CopySelectedObjects(ActionExecutionContext e) { await IoC.Get().CopyObjects(this, SelectObjects); } @@ -193,7 +194,10 @@ public enum PasteOption None } - public void MenuItemAction_PasteCopiesObjects() + public void KeyboardAction_PasteCopiesObjects(ActionExecutionContext ctx) + => PasteCopiesObjects(PasteOption.None, ctx); + + public void MenuItemAction_PasteCopiesObjects(ActionExecutionContext e) { var placePos = Mouse.GetPosition(GetView() as FrameworkElement); placePos.Y = ViewHeight - placePos.Y + Rect.MinY; @@ -205,8 +209,6 @@ public void MenuItemAction_PasteCopiesObjectsDirectly(ActionExecutionContext ctx PasteCopiesObjects(PasteOption.Direct, default(Point)); } - public void MenuItemAction_PasteCopiesObjects(ActionExecutionContext ctx) - => PasteCopiesObjects(PasteOption.None, ctx); public void MenuItemAction_PasteCopiesObjectsAsSelectedRangeCenterXGridMirror(ActionExecutionContext ctx) => PasteCopiesObjects(PasteOption.SelectedRangeCenterXGridMirror, ctx); public void MenuItemAction_PasteCopiesObjectsAsSelectedRangeCenterTGridMirror(ActionExecutionContext ctx) @@ -399,7 +401,7 @@ private void SelectLaneObjects(ConnectableStartObject start) private bool dragOutBound; private int currentDraggingActionId; - public void MenuItemAction_RememberSelectedObjectAudioTime() + public void MenuItemAction_RememberSelectedObjectAudioTime(ActionExecutionContext e) { if (!IsDesignMode) { @@ -419,7 +421,7 @@ public void MenuItemAction_RememberSelectedObjectAudioTime() ToastNotify(Resources.RememberObjects.Format(cacheObjectAudioTime.Count)); } - public void MenuItemAction_RecoverySelectedObjectToAudioTime() + public void MenuItemAction_RecoverySelectedObjectToAudioTime(ActionExecutionContext e) { if (!IsDesignMode) { @@ -535,15 +537,15 @@ public void ExecuteActionWithRememberCurrentTime(IUndoableAction action) #region Keyboard Actions - public void KeyboardAction_FastPlaceDockableObjectToCenter() + public void KeyboardAction_FastPlaceDockableObjectToCenter(ActionExecutionContext e) => KeyboardAction_FastPlaceDockableObject(LaneType.Center); - public void KeyboardAction_FastPlaceDockableObjectToLeft() + public void KeyboardAction_FastPlaceDockableObjectToLeft(ActionExecutionContext e) => KeyboardAction_FastPlaceDockableObject(LaneType.Left); - public void KeyboardAction_FastPlaceDockableObjectToRight() + public void KeyboardAction_FastPlaceDockableObjectToRight(ActionExecutionContext e) => KeyboardAction_FastPlaceDockableObject(LaneType.Right); - public void KeyboardAction_FastPlaceDockableObjectToWallLeft() + public void KeyboardAction_FastPlaceDockableObjectToWallLeft(ActionExecutionContext e) => KeyboardAction_FastPlaceDockableObject(LaneType.WallLeft); - public void KeyboardAction_FastPlaceDockableObjectToWallRight() + public void KeyboardAction_FastPlaceDockableObjectToWallRight(ActionExecutionContext e) => KeyboardAction_FastPlaceDockableObject(LaneType.WallRight); public void KeyboardAction_FastPlaceNewTap(ActionExecutionContext e) @@ -668,7 +670,7 @@ public void KeyboardAction_FastPlaceDockableObject(LaneType targetType, ILaneDoc })); } - public void KeyboardAction_DeleteSelectingObjects() + public void KeyboardAction_DeleteSelectingObjects(ActionExecutionContext e) { if (IsLocked) return; @@ -737,7 +739,7 @@ public void RemoveObjects(IEnumerable objs) public void RemoveObject(OngekiObjectBase obj) => RemoveObjects(obj.Repeat(1)); - public void KeyboardAction_SelectAllObjects() + public void KeyboardAction_SelectAllObjects(ActionExecutionContext e) { if (IsLocked) return; @@ -746,7 +748,7 @@ public void KeyboardAction_SelectAllObjects() IoC.Get().RefreshSelected(this); } - public void KeyboardAction_CancelSelectingObjects() + public void KeyboardAction_CancelSelectingObjects(ActionExecutionContext e) { if (IsLocked) return; @@ -949,12 +951,12 @@ private void ProcessAsHoldEnd(Hold hold, Point mousePosition) })); } - public void KeyboardAction_PlayOrPause() + public void KeyboardAction_PlayOrPause(ActionExecutionContext e) { IoC.Get().RequestPlayOrPause(); } - public void KeyboardAction_HideOrShow() + public void KeyboardAction_HideOrShow(ActionExecutionContext e) { SwitchMode(!IsPreviewMode); } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/FumenVisualEditorView.xaml b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/FumenVisualEditorView.xaml index 09ac689b..fcf9b477 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/FumenVisualEditorView.xaml +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/FumenVisualEditorView.xaml @@ -9,6 +9,8 @@ xmlns:converters="clr-namespace:OngekiFumenEditor.Modules.FumenVisualEditor.Converters" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:i="http://schemas.microsoft.com/xaml/behaviors" + xmlns:kb="clr-namespace:OngekiFumenEditor.UI.KeyBinding.Input" + xmlns:kbDefs="clr-namespace:OngekiFumenEditor.Modules.FumenVisualEditor" xmlns:markup="clr-namespace:OngekiFumenEditor.UI.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:opentkcontrol="clr-namespace:OpenTK.Wpf;assembly=GLWpfControl" @@ -16,7 +18,7 @@ xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:valueconverters="clr-namespace:OngekiFumenEditor.UI.ValueConverters" xmlns:viewmodels="clr-namespace:OngekiFumenEditor.Modules.FumenVisualEditor.ViewModels" - cal:Message.Attach="[Key OemTilde] = [Action KeyboardAction_FastPlaceDockableObjectToWallLeft]; [Key D4] = [Action KeyboardAction_FastPlaceDockableObjectToWallRight]; [Key D3] = [Action KeyboardAction_FastPlaceDockableObjectToRight];[Key H] = [Action KeyboardAction_FastPlaceNewHold($executionContext)];[Key T] = [Action KeyboardAction_FastPlaceNewTap($executionContext)]; [Key D2] = [Action KeyboardAction_FastPlaceDockableObjectToCenter]; [Key D1] = [Action KeyboardAction_FastPlaceDockableObjectToLeft]; [Event DragEnter] = [Action Grid_DragEnter($executionContext)]; [Event Drop] = [Action Grid_Drop($executionContext)]; [Event FocusableChanged] = [Action OnFocusableChanged($executionContext)]; [Key Delete] = [Action KeyboardAction_DeleteSelectingObjects]; [Gesture Ctrl+A] = [Action KeyboardAction_SelectAllObjects]; [Key Escape] = [Action KeyboardAction_CancelSelectingObjects]; [Key C] = [Action KeyboardAction_FastSetObjectIsCritical($executionContext)]; [Key Q] = [Action KeyboardAction_HideOrShow];[Key A] = [Action KeyboardAction_FastAddConnectableChild($executionContext)]; [Key F] = [Action KeyboardAction_FastSwitchFlickDirection($executionContext)]; [Gesture Ctrl+C]=[Action MenuItemAction_CopySelectedObjects]; [Gesture Ctrl+V]=[Action MenuItemAction_PasteCopiesObjects]; " + cal:Message.Attach="[Event DragEnter] = [Action Grid_DragEnter($executionContext)]; [Event Drop] = [Action Grid_Drop($executionContext)]; [Event FocusableChanged] = [Action OnFocusableChanged($executionContext)];" d:DataContext="{d:DesignInstance Type=viewmodels:FumenVisualEditorViewModel}" d:DesignHeight="450" d:DesignWidth="800" @@ -38,6 +40,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -50,29 +75,29 @@ - - + + - - + + - - + +