1.1 --- a/Server/Events/EventHid.cs Fri Aug 19 19:28:03 2016 +0200
1.2 +++ b/Server/Events/EventHid.cs Sat Aug 20 21:00:35 2016 +0200
1.3 @@ -41,13 +41,13 @@
1.4 public bool IsKeyUp { get; set; } = false;
1.5
1.6 [DataMember]
1.7 - public bool IsMouse { get; set; }
1.8 + public bool IsMouse { get; set; } = false;
1.9
1.10 [DataMember]
1.11 - public bool IsKeyboard { get; set; }
1.12 + public bool IsKeyboard { get; set; } = false;
1.13
1.14 [DataMember]
1.15 - public bool IsGeneric { get; set; }
1.16 + public bool IsGeneric { get; set; } = false;
1.17
1.18 [DataMember]
1.19 public bool HasModifierShift { get; set; } = false;
1.20 @@ -61,6 +61,10 @@
1.21 [DataMember]
1.22 public bool HasModifierWindows { get; set; } = false;
1.23
1.24 + [DataMember]
1.25 + public string PersistedBrief { get; set; } = "Press a key";
1.26 +
1.27 +
1.28
1.29 protected override void DoConstruct()
1.30 {
1.31 @@ -73,7 +77,6 @@
1.32
1.33 }
1.34
1.35 -
1.36 /// <summary>
1.37 /// Make sure we distinguish between various configuration of this event
1.38 /// </summary>
1.39 @@ -108,7 +111,7 @@
1.40 }
1.41 else if (IsGeneric)
1.42 {
1.43 -
1.44 + brief += PersistedBrief;
1.45 }
1.46
1.47 if (IsKeyUp)
1.48 @@ -143,5 +146,111 @@
1.49
1.50 return false;
1.51 }
1.52 +
1.53 +
1.54 + /// <summary>
1.55 + ///
1.56 + /// </summary>
1.57 + protected override void OnStateLeave()
1.58 + {
1.59 + if (CurrentState == State.Edit)
1.60 + {
1.61 + // Leaving edit mode
1.62 + // Unhook HID events
1.63 + Program.HidHandler.OnHidEvent -= HandleHidEvent;
1.64 +
1.65 + }
1.66 + }
1.67 +
1.68 + /// <summary>
1.69 + ///
1.70 + /// </summary>
1.71 + protected override void OnStateEnter()
1.72 + {
1.73 + if (CurrentState == State.Edit)
1.74 + {
1.75 + // Enter edit mode
1.76 + // Hook-in HID events
1.77 + Program.HidHandler.OnHidEvent += HandleHidEvent;
1.78 +
1.79 + }
1.80 + }
1.81 +
1.82 + /// <summary>
1.83 + /// Here we receive HID events from our HID library.
1.84 + /// </summary>
1.85 + /// <param name="aSender"></param>
1.86 + /// <param name="aHidEvent"></param>
1.87 + public void HandleHidEvent(object aSender, SharpLib.Hid.Event aHidEvent)
1.88 + {
1.89 + if (CurrentState != State.Edit
1.90 + || aHidEvent.IsMouse
1.91 + || aHidEvent.IsButtonUp
1.92 + || !aHidEvent.IsValid
1.93 + || aHidEvent.IsBackground
1.94 + || aHidEvent.IsRepeat
1.95 + || aHidEvent.IsStray)
1.96 + {
1.97 + return;
1.98 + }
1.99 +
1.100 + PrivateCopy(aHidEvent);
1.101 + //
1.102 +
1.103 + //Tell observer the object itself changed
1.104 + OnPropertyChanged("Brief");
1.105 + }
1.106 +
1.107 + /// <summary>
1.108 + ///
1.109 + /// </summary>
1.110 + /// <param name="aHidEvent"></param>
1.111 + public void Copy(Hid.Event aHidEvent)
1.112 + {
1.113 + PrivateCopy(aHidEvent);
1.114 + //We need the key up/down too here
1.115 + IsKeyUp = aHidEvent.IsButtonUp;
1.116 + }
1.117 +
1.118 + /// <summary>
1.119 + ///
1.120 + /// </summary>
1.121 + /// <param name="aHidEvent"></param>
1.122 + private void PrivateCopy(Hid.Event aHidEvent)
1.123 + {
1.124 + //Copy for scan
1.125 + UsagePage = aHidEvent.UsagePage;
1.126 + UsageCollection = aHidEvent.UsageCollection;
1.127 + IsGeneric = aHidEvent.IsGeneric;
1.128 + IsKeyboard = aHidEvent.IsKeyboard;
1.129 + IsMouse = aHidEvent.IsMouse;
1.130 +
1.131 + if (IsGeneric)
1.132 + {
1.133 + if (aHidEvent.Usages.Count > 0)
1.134 + {
1.135 + Usage = aHidEvent.Usages[0];
1.136 + PersistedBrief = aHidEvent.UsageName(0);
1.137 + }
1.138 +
1.139 + Key = Keys.None;
1.140 + HasModifierAlt = false;
1.141 + HasModifierControl = false;
1.142 + HasModifierShift = false;
1.143 + HasModifierWindows = false;
1.144 + }
1.145 + else if (IsKeyboard)
1.146 + {
1.147 + Usage = 0;
1.148 + Key = aHidEvent.VirtualKey;
1.149 + HasModifierAlt = aHidEvent.HasModifierAlt;
1.150 + HasModifierControl = aHidEvent.HasModifierControl;
1.151 + HasModifierShift = aHidEvent.HasModifierShift;
1.152 + HasModifierWindows = aHidEvent.HasModifierWindows;
1.153 + }
1.154 +
1.155 + }
1.156 +
1.157 +
1.158 }
1.159 }