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();
            }
        }
Beispiel #2
0
        /// <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();
        }
Beispiel #3
0
        /// <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);
            }
        }
Beispiel #4
0
        /// <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);
            }
        }