2 using System.Collections.Generic;
3 using System.ComponentModel;
5 namespace Tizen.NUI.Binding
7 [System.ComponentModel.TypeConverter(typeof(AcceleratorTypeConverter))]
8 internal class Accelerator
10 const char Separator = '+';
13 internal Accelerator(string text)
15 if (string.IsNullOrEmpty(text))
16 throw new ArgumentNullException(nameof(text));
20 [EditorBrowsable(EditorBrowsableState.Never)]
21 public IEnumerable<string> Modifiers { get; set; }
23 [EditorBrowsable(EditorBrowsableState.Never)]
24 public IEnumerable<string> Keys { get; set; }
26 public static Accelerator FromString(string text)
28 var accelarat = new Accelerator(text);
30 var acceleratorParts = text.Split(Separator);
32 if (acceleratorParts.Length > 1)
34 var modifiers = new List<string>();
35 for (int i = 0; i < acceleratorParts.Length; i++)
37 var modifierMask = acceleratorParts[i];
38 var modiferMaskLower = modifierMask.ToLower();
39 switch (modiferMaskLower)
47 modifiers.Add(modiferMaskLower);
48 text = text.Replace(modifierMask, "");
52 accelarat.Modifiers = modifiers;
56 var keys = text.Split(new char[] { Separator }, StringSplitOptions.RemoveEmptyEntries);
57 accelarat.Keys = keys;
61 public override string ToString()
66 public override bool Equals(object obj)
68 return obj != null && obj is Accelerator && Equals((Accelerator)obj);
71 bool Equals(Accelerator other)
73 return other.ToString() == ToString();
76 public override int GetHashCode()
78 return ToString().GetHashCode();
81 public static implicit operator Accelerator(string accelerator)
83 return FromString(accelerator);