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();