public override void ReadXml(System.Xml.XmlReader reader) { SerialNumber = Int32.Parse(reader.ReadElementString("SerialNumber"), CultureInfo.InvariantCulture); Voltage = int.Parse(reader.ReadElementString("Voltage"), CultureInfo.InvariantCulture); CurrentLimit = int.Parse(reader.ReadElementString("CurrentLimit"), CultureInfo.InvariantCulture); if (!reader.IsEmptyElement) { reader.ReadStartElement("Groups"); while (reader.NodeType != System.Xml.XmlNodeType.EndElement) { reader.ReadStartElement("Group"); LEDGroup group = new LEDGroup(this, reader.ReadElementString("Name")); group.DefaultLevel = int.Parse(reader.ReadElementString("DefaultLevel"), CultureInfo.InvariantCulture); string leds = reader.ReadElementString("Leds"); if (!string.IsNullOrWhiteSpace(leds)) { string[] ledSplit = leds.Split(','); foreach (string led in ledSplit) { group.Leds.Add(int.Parse(led, CultureInfo.InvariantCulture)); } } LedGroups.Add(group); reader.ReadEndElement(); } reader.ReadEndElement(); } else { reader.Read(); } }
/// <summary> /// Performs an update for all dirty keys, or all keys if flushLeds is set to true. /// </summary> /// <param name="flushLeds">Specifies whether all keys (including clean ones) should be updated.</param> public void Update(bool flushLeds = false) { OnUpdating(); // Update effects foreach (ILedGroup ledGroup in LedGroups) { ledGroup.UpdateEffects(); } // Render brushes Render(this); foreach (ILedGroup ledGroup in LedGroups.OrderBy(x => x.ZIndex)) { Render(ledGroup); } // Device-specific updates DeviceUpdate(); // Send LEDs to SDK ICollection <LedUpateRequest> ledsToUpdate = (flushLeds ? LedMapping : LedMapping.Where(x => x.Value.IsDirty)).Select(x => new LedUpateRequest(x.Key, x.Value.RequestedColor)).ToList(); foreach (LedUpateRequest updateRequest in ledsToUpdate) { LedMapping[updateRequest.LedId].Update(); } UpdateLeds(ledsToUpdate); OnUpdated(); }
/// <summary> /// Attaches the given ledgroup. /// </summary> /// <param name="ledGroup">The ledgroup to attach.</param> /// <returns><c>true</c> if the ledgroup could be attached; otherwise, <c>false</c>.</returns> public bool AttachLedGroup(ILedGroup ledGroup) { lock (LedGroups) { if (ledGroup == null || LedGroups.Contains(ledGroup)) { return(false); } LedGroups.AddLast(ledGroup); return(true); } }
/// <summary> /// Detaches the given ledgroup. /// </summary> /// <param name="ledGroup">The ledgroup to detached.</param> /// <returns><c>true</c> if the ledgroup could be detached; otherwise, <c>false</c>.</returns> public bool DetachLedGroup(ILedGroup ledGroup) { lock (LedGroups) { if (ledGroup == null) { return(false); } LinkedListNode <ILedGroup> node = LedGroups.Find(ledGroup); if (node == null) { return(false); } LedGroups.Remove(node); return(true); } }