Server/Events/EventHid.cs
changeset 246 30a221eecc06
parent 244 2e4d2558bb21
child 247 afdbe76ab03b
     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  }