Skip to content

Commit

Permalink
Merge branch 'feat.more-keybinds' of https://github.com/zacharied/Ong…
Browse files Browse the repository at this point in the history
…ekiFumenEditor into batch_mode
  • Loading branch information
MikiraSora committed Oct 25, 2024
2 parents 887c150 + 180b803 commit dde182c
Show file tree
Hide file tree
Showing 37 changed files with 1,346 additions and 5,667 deletions.
1 change: 1 addition & 0 deletions OngekiFumenEditor/App.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
</valueconverters:LocalizeConverter>
<valueconverters:AsyncImageLoadConverter x:Key="AsyncImageLoadConverter">
</valueconverters:AsyncImageLoadConverter>
<valueconverters:NullToZeroConverter x:Key="NullToZeroConverter" />
<valueconverters:DisplayFileSizeConverter x:Key="DisplayFileSizeConverter">
</valueconverters:DisplayFileSizeConverter>
<valueconverters:SelectionMovableItemsCheckConverter x:Key="SelectionMovableItemsCheckConverter" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,12 +127,13 @@ public void ChangeKeyBinding(KeyBindingDefinition definition, Key newKey, Modifi
definition.Modifiers = newModifier;
}

public KeyBindingDefinition QueryKeyBinding(Key key, ModifierKeys modifier)
public KeyBindingDefinition QueryKeyBinding(Key key, ModifierKeys modifier, KeyBindingLayer layer)
{
if (key is Key.None)
return default;

return KeyBindingDefinations.FirstOrDefault(x => x.Key == key && modifier == x.Modifiers);
return KeyBindingDefinations.FirstOrDefault(
x => x.Key == key && modifier == x.Modifiers && (x.Layer == KeyBindingLayer.Global || layer == KeyBindingLayer.Global || x.Layer == layer));
}
}
}
2 changes: 1 addition & 1 deletion OngekiFumenEditor/Kernel/KeyBinding/IKeyBindingManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ internal interface IKeyBindingManager
void DefaultKeyBinding(KeyBindingDefinition definition) =>
ChangeKeyBinding(definition, definition.DefaultKey, definition.DefaultModifiers);

KeyBindingDefinition QueryKeyBinding(Key key, ModifierKeys modifier);
KeyBindingDefinition QueryKeyBinding(Key key, ModifierKeys modifier, KeyBindingLayer layer);

void SaveConfig();

Expand Down
18 changes: 12 additions & 6 deletions OngekiFumenEditor/Kernel/KeyBinding/KeyBindingDefinition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using System.Text.RegularExpressions;
using System;
using System.Windows.Input;
using Xceed.Wpf.Toolkit.Core.Input;

namespace OngekiFumenEditor.Kernel.KeyBinding
{
Expand All @@ -13,22 +12,22 @@ public class KeyBindingDefinition : PropertyChangedBase

public Key DefaultKey { get; }
public ModifierKeys DefaultModifiers { get; }
public KeyBindingLayer Layer { get; }

public string ConfigKey => resourceName;

public string Name => Resources.ResourceManager.GetString(resourceName);

public KeyBindingDefinition(string resourceName, Key defaultKey) : this(resourceName, ModifierKeys.None, defaultKey)
{

}
public KeyBindingDefinition(string resourceName, Key defaultKey, KeyBindingLayer layer = KeyBindingLayer.Normal) : this(resourceName, ModifierKeys.None, defaultKey, layer)
{ }

public KeyBindingDefinition(string resourceName, ModifierKeys defaultModifiers, Key defaultKey)
public KeyBindingDefinition(string resourceName, ModifierKeys defaultModifiers, Key defaultKey, KeyBindingLayer layer = KeyBindingLayer.Normal)
{
this.resourceName = resourceName;

DefaultModifiers = defaultModifiers;
DefaultKey = defaultKey;
Layer = layer;
}

private Key? key;
Expand Down Expand Up @@ -114,4 +113,11 @@ public static bool TryParseExpression(string keybindExpr, out Key key, out Modif
return key != Key.None;
}
}

public enum KeyBindingLayer
{
Global,
Normal,
Batch
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,9 @@ private void OnKeyUp(object sender, KeyEventArgs e)

var key = (e.Key == Key.System ? e.SystemKey : e.Key);

if (TryGetModifier(key, out var modifier))
this.modifier = modifier;
if (Definition.Key == Key.None) {
TryClearModifier(key);
}

UpdateExpression();
}
Expand All @@ -67,8 +68,10 @@ private void OnKeyDown(object sender, KeyEventArgs e)

var key = (e.Key == Key.System ? e.SystemKey : e.Key);

if (TryGetModifier(key, out var modifier))
if (TryGetModifier(key, out var modifier)) {
this.modifier = modifier;
this.key = Key.None;
}
else
this.key = key;

Expand Down Expand Up @@ -97,6 +100,21 @@ private bool TryGetModifier(Key key, out ModifierKeys modifier)
}
}

private bool TryClearModifier(Key key)
{
switch (key)
{
case Key.LeftCtrl or Key.RightCtrl:
case Key.LeftShift or Key.RightShift:
case Key.LeftAlt or Key.RightAlt:
case Key.LWin or Key.RWin:
modifier = ModifierKeys.None;
return true;
}

return false;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
//重新设置
Expand All @@ -112,7 +130,7 @@ private void UpdateExpression()

if (!string.IsNullOrWhiteSpace(CurrentExpression))
{
ConflictDefinition = IoC.Get<IKeyBindingManager>().QueryKeyBinding(key, modifier);
ConflictDefinition = IoC.Get<IKeyBindingManager>().QueryKeyBinding(key, modifier, Definition.Layer);
if (ConflictDefinition == Definition)
ConflictDefinition = default;
PropertyChanged?.Invoke(this, new(nameof(ConflictDefinition)));
Expand All @@ -138,4 +156,4 @@ private void Button_Click_2(object sender, RoutedEventArgs e)
UpdateExpression();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void UpdateDisplayList()
x.Key,
x.Modifiers,
x.ConfigKey
]).Contains(FilterKeywords, StringComparison.InvariantCultureIgnoreCase));
]).Contains(FilterKeywords, StringComparison.InvariantCultureIgnoreCase));

Definitions.AddRange(list);
}
Expand Down Expand Up @@ -83,11 +83,12 @@ public void ChangeKeybind(ActionExecutionContext ctx)
var dialog = new ConfigKeyBindingDialog(definition);
if (dialog.ShowDialog() is true)
{
if (dialog.ConflictDefinition is KeyBindingDefinition conflictDefinition)
keybindingManager.ChangeKeyBinding(conflictDefinition, Key.None, ModifierKeys.None);

if (KeyBindingDefinition.TryParseExpression(dialog.CurrentExpression, out var newKey, out var newModifier))
keybindingManager.ChangeKeyBinding(definition, newKey, newModifier);
}
if (dialog.ConflictDefinition is KeyBindingDefinition conflictDefinition)
keybindingManager.ChangeKeyBinding(conflictDefinition, Key.None, ModifierKeys.None);
UpdateDisplayList();
}
public void ResetAllDefinitions()
Expand All @@ -99,4 +100,4 @@ public void ResetAllDefinitions()
UpdateDisplayList();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ public async void OnBrushButtonClick()

if (copiedObjectViewModel?.CopyNew() is null)
{
MessageBox.Show(Resources.ObjectNotSupportBrush);
MessageBox.Show(Resources.ObjectNotSupportedInBatchMode);
return;
}

Expand Down
Loading

0 comments on commit dde182c

Please sign in to comment.