You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.7 KiB
61 lines
1.7 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Windows.Input; |
|
using System.ComponentModel; |
|
using System.Globalization; |
|
|
|
namespace SharpDevelop.XamlDesigner.Commanding |
|
{ |
|
[TypeConverter(typeof(SimpleKeyGestureConverter))] |
|
public class SimpleKeyGesture : InputGesture |
|
{ |
|
public Key Key; |
|
public ModifierKeys Modifiers; |
|
|
|
static KeyConverter KeyConverter = new KeyConverter(); |
|
static ModifierKeysConverter ModifierKeysConverter = new ModifierKeysConverter(); |
|
|
|
public override bool Matches(object targetElement, InputEventArgs inputEventArgs) |
|
{ |
|
KeyEventArgs e = inputEventArgs as KeyEventArgs; |
|
return e != null && e.Key == Key && Keyboard.Modifiers == Modifiers; |
|
} |
|
|
|
public static SimpleKeyGesture FromString(string s) |
|
{ |
|
var result = new SimpleKeyGesture(); |
|
var index = s.LastIndexOf('+'); |
|
|
|
if (index >= 0) { |
|
result.Modifiers = (ModifierKeys)ModifierKeysConverter.ConvertFromString(s.Substring(0, index)); |
|
result.Key = (Key)KeyConverter.ConvertFromString(s.Substring(index + 1)); |
|
} |
|
else { |
|
result.Key = (Key)KeyConverter.ConvertFromString(s); |
|
} |
|
|
|
return result; |
|
} |
|
|
|
public override string ToString() |
|
{ |
|
if (Modifiers == ModifierKeys.None) return KeyConverter.ConvertToString(Key); |
|
return ModifierKeysConverter.ConvertToString(Modifiers) + "+" + KeyConverter.ConvertToString(Key); |
|
} |
|
} |
|
|
|
class SimpleKeyGestureConverter : TypeConverter |
|
{ |
|
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) |
|
{ |
|
return sourceType == typeof(string); |
|
} |
|
|
|
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) |
|
{ |
|
return SimpleKeyGesture.FromString((string)value); |
|
} |
|
} |
|
}
|
|
|