public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, object value) { KeyModifierCollection result = new KeyModifierCollection(); string stringValue = value as string; // convert null as None if (value == null || (stringValue != null && stringValue.Trim() == string.Empty)) { result.Add(KeyModifier.None); } else { // respect the following separators: '+', ' ', '|', or ',' foreach (string token in stringValue.Split(new char[] { '+', ' ', '|', ',' }, StringSplitOptions.RemoveEmptyEntries)) { result.Add((KeyModifier)_keyModifierConverter.ConvertFrom(typeDescriptorContext, cultureInfo, token)); } // if nothing added, assume None if (result.Count == 0) { result.Add(KeyModifier.None); } } return(result); }
private bool IsExactMatch() { HashSet <KeyModifier> modifiers = this.GetKeyModifiers(); HashSet <Key> keys = this.GetKeysPressed(); // No key must be pressed for the modifier None. if (this.Contains(KeyModifier.None)) { return((modifiers.Count == 0) && (keys.Count == 0)); } // Make sure every modifier has a matching key pressed. foreach (KeyModifier modifier in modifiers) { if (!KeyModifierCollection.IsKeyPressed(modifier, keys)) { return(false); } } // Make sure every key pressed has a matching modifier. foreach (Key key in keys) { if (!KeyModifierCollection.HasModifier(key, modifiers)) { return(false); } } return(true); }
private bool MatchAny() { if (this.Contains(KeyModifier.None)) { return(true); } HashSet <KeyModifier> modifiers = this.GetKeyModifiers(); HashSet <Key> keys = this.GetKeysPressed(); foreach (KeyModifier modifier in modifiers) { if (KeyModifierCollection.IsKeyPressed(modifier, keys)) { return(true); } } return(false); }