diff --git a/CUE.NET.csproj b/CUE.NET.csproj index 441851d..28b2645 100644 --- a/CUE.NET.csproj +++ b/CUE.NET.csproj @@ -67,6 +67,9 @@ + + + @@ -77,7 +80,7 @@ - + diff --git a/Devices/Generic/AbstractCueDevice.cs b/Devices/Generic/AbstractCueDevice.cs index 7418703..d1d4b32 100644 --- a/Devices/Generic/AbstractCueDevice.cs +++ b/Devices/Generic/AbstractCueDevice.cs @@ -29,15 +29,15 @@ namespace CUE.NET.Devices.Generic protected CorsairLed GetLed(int ledId) { - if (!this.Leds.ContainsKey(ledId)) - this.Leds.Add(ledId, new CorsairLed()); + if (!Leds.ContainsKey(ledId)) + Leds.Add(ledId, new CorsairLed()); - return this.Leds[ledId]; + return Leds[ledId]; } public virtual void UpdateLeds(bool fullUpdate = false) { - IList> ledsToUpdate = (fullUpdate ? this.Leds : this.Leds.Where(x => x.Value.IsDirty)).ToList(); + IList> ledsToUpdate = (fullUpdate ? Leds : Leds.Where(x => x.Value.IsDirty)).ToList(); if (!ledsToUpdate.Any()) return; // CUE seems to crash if 'CorsairSetLedsColors' is called with a zero length array diff --git a/Devices/Keyboard/CorsairKeyboard.cs b/Devices/Keyboard/CorsairKeyboard.cs index 3b4d1af..656971e 100644 --- a/Devices/Keyboard/CorsairKeyboard.cs +++ b/Devices/Keyboard/CorsairKeyboard.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using CUE.NET.Devices.Generic; using CUE.NET.Devices.Keyboard.Enums; +using CUE.NET.Devices.Keyboard.Keys; namespace CUE.NET.Devices.Keyboard { @@ -14,7 +15,11 @@ namespace CUE.NET.Devices.Keyboard private Dictionary _keys = new Dictionary(); public CorsairKey this[CorsairKeyboardKeyId keyId] { - get { return this._keys[keyId]; } + get + { + CorsairKey key; + return _keys.TryGetValue(keyId, out key) ? key : null; + } private set { throw new NotSupportedException(); } } @@ -27,7 +32,7 @@ namespace CUE.NET.Devices.Keyboard { this.KeyboardDeviceInfo = info; - this.InitializeKeys(); + InitializeKeys(); } #endregion @@ -37,7 +42,7 @@ namespace CUE.NET.Devices.Keyboard private void InitializeKeys() { foreach (CorsairKeyboardKeyId keyId in Enum.GetValues(typeof(CorsairKeyboardKeyId))) - this._keys.Add(keyId, new CorsairKey(keyId, this.GetLed((int)keyId))); + _keys.Add(keyId, new CorsairKey(keyId, GetLed((int)keyId))); } #endregion diff --git a/Devices/Keyboard/Keys/BaseKeyGroup.cs b/Devices/Keyboard/Keys/BaseKeyGroup.cs new file mode 100644 index 0000000..747ccb9 --- /dev/null +++ b/Devices/Keyboard/Keys/BaseKeyGroup.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using System.Drawing; + +namespace CUE.NET.Devices.Keyboard.Keys +{ + public class BaseKeyGroup : IKeyGroup + { + #region Properties & Fields + + protected CorsairKeyboard Keyboard { get; } + + public IList Keys { get; } = new List(); + + #endregion + + #region Constructors + + protected BaseKeyGroup(CorsairKeyboard keyboard) + { + this.Keyboard = keyboard; + } + + #endregion + + #region Methods + + public virtual void SetColor(Color color) + { + foreach (CorsairKey key in Keys) + key.Led.Color = color; + } + + public void MergeKeys(IKeyGroup groupToMerge) + { + foreach (CorsairKey key in groupToMerge.Keys) + if (!Keys.Contains(key)) + Keys.Add(key); + } + + #endregion + } +} diff --git a/Devices/Keyboard/CorsairKey.cs b/Devices/Keyboard/Keys/CorsairKey.cs similarity index 92% rename from Devices/Keyboard/CorsairKey.cs rename to Devices/Keyboard/Keys/CorsairKey.cs index 1873512..f63e85d 100644 --- a/Devices/Keyboard/CorsairKey.cs +++ b/Devices/Keyboard/Keys/CorsairKey.cs @@ -1,7 +1,7 @@ using CUE.NET.Devices.Generic; using CUE.NET.Devices.Keyboard.Enums; -namespace CUE.NET.Devices.Keyboard +namespace CUE.NET.Devices.Keyboard.Keys { public class CorsairKey { diff --git a/Devices/Keyboard/Keys/IKeyGroup.cs b/Devices/Keyboard/Keys/IKeyGroup.cs new file mode 100644 index 0000000..e78c9ee --- /dev/null +++ b/Devices/Keyboard/Keys/IKeyGroup.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Drawing; + +namespace CUE.NET.Devices.Keyboard.Keys +{ + public interface IKeyGroup + { + //TODO DarthAffe 19.09.2015: This might be not needed/bad + IList Keys { get; } + + void SetColor(Color color); + + void MergeKeys(IKeyGroup groupToMerge); + } +} diff --git a/Devices/Keyboard/Keys/SimpleKeyGroup.cs b/Devices/Keyboard/Keys/SimpleKeyGroup.cs new file mode 100644 index 0000000..6706544 --- /dev/null +++ b/Devices/Keyboard/Keys/SimpleKeyGroup.cs @@ -0,0 +1,72 @@ +using CUE.NET.Devices.Keyboard.Enums; + +namespace CUE.NET.Devices.Keyboard.Keys +{ + public class SimpleKeyGroup : BaseKeyGroup + { + #region Constructors + + public SimpleKeyGroup(CorsairKeyboard keyboard) + : base(keyboard) + { } + + public SimpleKeyGroup(CorsairKeyboard keyboard, params CorsairKey[] keys) + : base(keyboard) + { + AddKey(keys); + } + + public SimpleKeyGroup(CorsairKeyboard keyboard, params CorsairKeyboardKeyId[] keys) + : base(keyboard) + { + AddKey(keys); + } + + #endregion + + #region Methods + + public void AddKey(params CorsairKey[] keys) + { + if (keys != null) + foreach (CorsairKey key in keys) + if (key != null && !ContainsKey(key)) + Keys.Add(key); + + } + + public void AddKey(params CorsairKeyboardKeyId[] keyIds) + { + if (keyIds != null) + foreach (CorsairKeyboardKeyId keyId in keyIds) + AddKey(Keyboard[keyId]); + } + + public void RemoveKey(params CorsairKey[] keys) + { + if (keys != null) + foreach (CorsairKey key in keys) + if (key != null) + Keys.Remove(key); + } + + public void RemoveKey(params CorsairKeyboardKeyId[] keyIds) + { + if (keyIds != null) + foreach (CorsairKeyboardKeyId keyId in keyIds) + RemoveKey(Keyboard[keyId]); + } + + public bool ContainsKey(CorsairKey key) + { + return key != null && Keys.Contains(key); + } + + public bool ContainsKey(CorsairKeyboardKeyId keyId) + { + return ContainsKey(Keyboard[keyId]); + } + + #endregion + } +} diff --git a/Examples/SimpleDevTest/Program.cs b/Examples/SimpleDevTest/Program.cs index b2fba43..c810842 100644 --- a/Examples/SimpleDevTest/Program.cs +++ b/Examples/SimpleDevTest/Program.cs @@ -4,6 +4,7 @@ using CUE.NET; using CUE.NET.Devices.Generic.Enums; using CUE.NET.Devices.Keyboard; using CUE.NET.Devices.Keyboard.Enums; +using CUE.NET.Devices.Keyboard.Keys; using CUE.NET.Exceptions; namespace SimpleDevTest @@ -24,11 +25,8 @@ namespace SimpleDevTest keyboard[CorsairKeyboardKeyId.G].Led.Color = Color.Green; keyboard[CorsairKeyboardKeyId.B].Led.Color = Color.Blue; - keyboard[CorsairKeyboardKeyId.W].Led.Color = Color.White; - keyboard[CorsairKeyboardKeyId.H].Led.Color = Color.White; - keyboard[CorsairKeyboardKeyId.I].Led.Color = Color.White; - keyboard[CorsairKeyboardKeyId.T].Led.Color = Color.White; - keyboard[CorsairKeyboardKeyId.E].Led.Color = Color.White; + SimpleKeyGroup whiteGroup = new SimpleKeyGroup(keyboard, CorsairKeyboardKeyId.W, CorsairKeyboardKeyId.H, CorsairKeyboardKeyId.I, CorsairKeyboardKeyId.T, CorsairKeyboardKeyId.E); + whiteGroup.SetColor(Color.White); keyboard.UpdateLeds();