[NUI] Change GetDefaultWindow() to static func (#900)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / XamlBinding / Accelerator.cs
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4
5 namespace Tizen.NUI.Binding
6 {
7     [System.ComponentModel.TypeConverter(typeof(AcceleratorTypeConverter))]
8     internal class Accelerator
9     {
10         const char Separator = '+';
11         string _text;
12
13         internal Accelerator(string text)
14         {
15             if (string.IsNullOrEmpty(text))
16                 throw new ArgumentNullException(nameof(text));
17             _text = text;
18         }
19
20         [EditorBrowsable(EditorBrowsableState.Never)]
21         public IEnumerable<string> Modifiers { get; set; }
22
23         [EditorBrowsable(EditorBrowsableState.Never)]
24         public IEnumerable<string> Keys { get; set; }
25
26         public static Accelerator FromString(string text)
27         {
28             var accelarat = new Accelerator(text);
29
30             var acceleratorParts = text.Split(Separator);
31
32             if (acceleratorParts.Length > 1)
33             {
34                 var modifiers = new List<string>();
35                 for (int i = 0; i < acceleratorParts.Length; i++)
36                 {
37                     var modifierMask = acceleratorParts[i];
38                     var modiferMaskLower = modifierMask.ToLower();
39                     switch (modiferMaskLower)
40                     {
41                         case "ctrl":
42                         case "cmd":
43                         case "alt":
44                         case "shift":
45                         case "fn":
46                         case "win":
47                             modifiers.Add(modiferMaskLower);
48                             text = text.Replace(modifierMask, "");
49                             break;
50                     }
51                 }
52                 accelarat.Modifiers = modifiers;
53
54             }
55
56             var keys = text.Split(new char[] { Separator }, StringSplitOptions.RemoveEmptyEntries);
57             accelarat.Keys = keys;
58             return accelarat;
59         }
60
61         public override string ToString()
62         {
63             return _text;
64         }
65
66         public override bool Equals(object obj)
67         {
68             return obj != null && obj is Accelerator && Equals((Accelerator)obj);
69         }
70
71         bool Equals(Accelerator other)
72         {
73             return other.ToString() == ToString();
74         }
75
76         public override int GetHashCode()
77         {
78             return ToString().GetHashCode();
79         }
80
81         public static implicit operator Accelerator(string accelerator)
82         {
83             return FromString(accelerator);
84         }
85     }
86 }