mirror of
https://github.com/DarthAffe/RGB.NET.git
synced 2025-12-13 01:58:30 +00:00
Updated Layout-XML
This commit is contained in:
parent
12b5574ec8
commit
dd21f81e85
@ -12,19 +12,21 @@
|
|||||||
<xsd:element name="Shape" type="xsd:string" />
|
<xsd:element name="Shape" type="xsd:string" />
|
||||||
<xsd:element name="Width" type="xsd:double" />
|
<xsd:element name="Width" type="xsd:double" />
|
||||||
<xsd:element name="Height" type="xsd:double" />
|
<xsd:element name="Height" type="xsd:double" />
|
||||||
|
<xsd:element name="LedUnitWidth" type="xsd:double" />
|
||||||
|
<xsd:element name="LedUnitHeight" type="xsd:double" />
|
||||||
<xsd:element name="Leds">
|
<xsd:element name="Leds">
|
||||||
<xsd:complexType>
|
<xsd:complexType>
|
||||||
<xsd:sequence>
|
<xsd:sequence>
|
||||||
<xsd:element maxOccurs="unbounded" name="Led">
|
<xsd:element maxOccurs="unbounded" name="Led">
|
||||||
<xsd:complexType>
|
<xsd:complexType>
|
||||||
<xsd:sequence>
|
<xsd:sequence>
|
||||||
<xsd:element name="Id" type="xsd:string" />
|
|
||||||
<xsd:element name="Shape" type="xsd:string" />
|
<xsd:element name="Shape" type="xsd:string" />
|
||||||
<xsd:element name="X" type="xsd:double" />
|
<xsd:element name="X" type="xsd:string" />
|
||||||
<xsd:element name="Y" type="xsd:double" />
|
<xsd:element name="Y" type="xsd:string" />
|
||||||
<xsd:element name="Width" type="xsd:double" />
|
<xsd:element name="Width" type="xsd:string" />
|
||||||
<xsd:element name="Height" type="xsd:double" />
|
<xsd:element name="Height" type="xsd:string" />
|
||||||
</xsd:sequence>
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="Id" type="xsd:string" use="required" />
|
||||||
</xsd:complexType>
|
</xsd:complexType>
|
||||||
</xsd:element>
|
</xsd:element>
|
||||||
</xsd:sequence>
|
</xsd:sequence>
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
@ -54,7 +55,8 @@ namespace RGB.NET.Core.Layout
|
|||||||
/// Gets or sets the <see cref="Core.Shape"/> of the <see cref="DeviceLayout"/>.
|
/// Gets or sets the <see cref="Core.Shape"/> of the <see cref="DeviceLayout"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("Shape")]
|
[XmlElement("Shape")]
|
||||||
public Shape Shape { get; set; }
|
[DefaultValue(Shape.Rectangle)]
|
||||||
|
public Shape Shape { get; set; } = Shape.Rectangle;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the width of the <see cref="DeviceLayout"/>.
|
/// Gets or sets the width of the <see cref="DeviceLayout"/>.
|
||||||
@ -68,6 +70,20 @@ namespace RGB.NET.Core.Layout
|
|||||||
[XmlElement("Height")]
|
[XmlElement("Height")]
|
||||||
public double Height { get; set; }
|
public double Height { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the width of one 'unit' used for the calculation of led positions and sizes.
|
||||||
|
/// </summary>
|
||||||
|
[XmlElement("LedUnitWidth")]
|
||||||
|
[DefaultValue(19.0)]
|
||||||
|
public double LedUnitWidth { get; set; } = 19.0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the height of one 'unit' used for the calculation of led positions and sizes.
|
||||||
|
/// </summary>
|
||||||
|
[XmlElement("LedUnitHeight")]
|
||||||
|
[DefaultValue(19.0)]
|
||||||
|
public double LedUnitHeight { get; set; } = 19.0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a list of <see cref="LedLayout"/> representing all the <see cref="Led"/> of the <see cref="DeviceLayout"/>.
|
/// Gets or sets a list of <see cref="LedLayout"/> representing all the <see cref="Led"/> of the <see cref="DeviceLayout"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -91,7 +107,20 @@ namespace RGB.NET.Core.Layout
|
|||||||
{
|
{
|
||||||
XmlSerializer serializer = new XmlSerializer(typeof(DeviceLayout));
|
XmlSerializer serializer = new XmlSerializer(typeof(DeviceLayout));
|
||||||
using (StreamReader reader = new StreamReader(path))
|
using (StreamReader reader = new StreamReader(path))
|
||||||
return serializer.Deserialize(reader) as DeviceLayout;
|
{
|
||||||
|
DeviceLayout layout = serializer.Deserialize(reader) as DeviceLayout;
|
||||||
|
if (layout?.Leds != null)
|
||||||
|
{
|
||||||
|
LedLayout lastLed = null;
|
||||||
|
foreach (LedLayout led in layout.Leds)
|
||||||
|
{
|
||||||
|
led.CalculateValues(layout, lastLed);
|
||||||
|
lastLed = led;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return layout;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Globalization;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
namespace RGB.NET.Core.Layout
|
namespace RGB.NET.Core.Layout
|
||||||
@ -15,38 +17,145 @@ namespace RGB.NET.Core.Layout
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the Id of the <see cref="LedLayout"/>.
|
/// Gets or sets the Id of the <see cref="LedLayout"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("Id")]
|
[XmlAttribute("Id")]
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the <see cref="RGB.NET.Core.Shape"/> of the <see cref="LedLayout"/>.
|
/// Gets or sets the <see cref="RGB.NET.Core.Shape"/> of the <see cref="LedLayout"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("Shape")]
|
[XmlElement("Shape")]
|
||||||
public Shape Shape { get; set; }
|
[DefaultValue(Shape.Rectangle)]
|
||||||
|
public Shape Shape { get; set; } = Shape.Rectangle;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the descriptive x-position of the <see cref="LedLayout"/>.
|
||||||
|
/// This property is for XML-serialization only and should not be directly accessed.
|
||||||
|
/// </summary>
|
||||||
|
[XmlElement("X")]
|
||||||
|
[DefaultValue("+")]
|
||||||
|
public string DescriptiveX { get; set; } = "+";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the descriptive y-position of the <see cref="LedLayout"/>.
|
||||||
|
/// This property is for XML-serialization only and should not be directly accessed.
|
||||||
|
/// </summary>
|
||||||
|
[XmlElement("Y")]
|
||||||
|
[DefaultValue("=")]
|
||||||
|
public string DescriptiveY { get; set; } = "=";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the descriptive width of the <see cref="LedLayout"/>.
|
||||||
|
/// This property is for XML-serialization only and should not be directly accessed.
|
||||||
|
/// </summary>
|
||||||
|
[XmlElement("Width")]
|
||||||
|
[DefaultValue("1.0")]
|
||||||
|
public string DescriptiveWidth { get; set; } = "1.0";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the descriptive height of the <see cref="LedLayout"/>.
|
||||||
|
/// This property is for XML-serialization only and should not be directly accessed.
|
||||||
|
/// </summary>
|
||||||
|
[XmlElement("Height")]
|
||||||
|
[DefaultValue("1.0")]
|
||||||
|
public string DescriptiveHeight { get; set; } = "1.0";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the x-position of the <see cref="LedLayout"/>.
|
/// Gets or sets the x-position of the <see cref="LedLayout"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("X")]
|
[XmlIgnore]
|
||||||
public double X { get; set; }
|
public double X { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the y-position of the <see cref="LedLayout"/>.
|
/// Gets or sets the y-position of the <see cref="LedLayout"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("Y")]
|
[XmlIgnore]
|
||||||
public double Y { get; set; }
|
public double Y { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the width of the <see cref="LedLayout"/>.
|
/// Gets or sets the width of the <see cref="LedLayout"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("Width")]
|
[XmlIgnore]
|
||||||
public double Width { get; set; }
|
public double Width { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the height of the <see cref="LedLayout"/>.
|
/// Gets or sets the height of the <see cref="LedLayout"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("Height")]
|
[XmlIgnore]
|
||||||
public double Height { get; set; }
|
public double Height { get; private set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Calculates the position- and size-data from the respective descriptive values.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="device">The <see cref="DeviceLayout"/> this <see cref="LedLayout"/> belongs to.</param>
|
||||||
|
/// <param name="lastLed">The <see cref="LedLayout"/> previously calculated.</param>
|
||||||
|
public void CalculateValues(DeviceLayout device, LedLayout lastLed)
|
||||||
|
{
|
||||||
|
Width = GetSizeValue(DescriptiveWidth, device.LedUnitWidth);
|
||||||
|
Height = GetSizeValue(DescriptiveHeight, device.LedUnitHeight);
|
||||||
|
|
||||||
|
X = GetLocationValue(DescriptiveX, lastLed?.X ?? 0, Width, lastLed?.Width ?? 0);
|
||||||
|
Y = GetLocationValue(DescriptiveY, lastLed?.Y ?? 0, Height, lastLed?.Height ?? 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private double GetLocationValue(string value, double lastValue, double currentSize, double lastSize)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(value)) return 0;
|
||||||
|
|
||||||
|
value = value.Replace(" ", string.Empty);
|
||||||
|
|
||||||
|
if (string.Equals(value, "=", StringComparison.Ordinal))
|
||||||
|
return lastValue;
|
||||||
|
|
||||||
|
if (string.Equals(value, "+", StringComparison.Ordinal))
|
||||||
|
return lastValue + lastSize;
|
||||||
|
|
||||||
|
if (value.StartsWith("+", StringComparison.Ordinal))
|
||||||
|
return lastValue + lastSize + double.Parse(value.Substring(1), CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
|
if (string.Equals(value, "-", StringComparison.Ordinal))
|
||||||
|
return lastValue - currentSize;
|
||||||
|
|
||||||
|
if (value.StartsWith("-", StringComparison.Ordinal))
|
||||||
|
return lastValue - currentSize - double.Parse(value.Substring(1), CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
|
if (string.Equals(value, "~", StringComparison.Ordinal))
|
||||||
|
return (lastValue + lastSize) - currentSize;
|
||||||
|
|
||||||
|
if (value.StartsWith("~", StringComparison.Ordinal))
|
||||||
|
return (lastValue + lastSize) - currentSize - double.Parse(value.Substring(1), CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
|
return double.Parse(value, CultureInfo.InvariantCulture);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private double GetSizeValue(string value, double unitSize)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(value)) return 0;
|
||||||
|
|
||||||
|
value = value.Replace(" ", string.Empty);
|
||||||
|
|
||||||
|
if (value.EndsWith("mm", StringComparison.OrdinalIgnoreCase))
|
||||||
|
return double.Parse(value.Substring(0, value.Length - 2), CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
|
return unitSize * double.Parse(value, CultureInfo.InvariantCulture);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
38
RGB.NET.Devices.Corsair/Layouts/DeviceLayout.xsd
Normal file
38
RGB.NET.Devices.Corsair/Layouts/DeviceLayout.xsd
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
|
||||||
|
<xsd:element name="Device">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Name" type="xsd:string" />
|
||||||
|
<xsd:element name="Description" type="xsd:string" />
|
||||||
|
<xsd:element name="Type" type="xsd:string" />
|
||||||
|
<xsd:element name="Lighting" type="xsd:string" />
|
||||||
|
<xsd:element name="Vendor" type="xsd:string" />
|
||||||
|
<xsd:element name="Model" type="xsd:string" />
|
||||||
|
<xsd:element name="Shape" type="xsd:string" />
|
||||||
|
<xsd:element name="Width" type="xsd:double" />
|
||||||
|
<xsd:element name="Height" type="xsd:double" />
|
||||||
|
<xsd:element name="LedUnitWidth" type="xsd:double" />
|
||||||
|
<xsd:element name="LedUnitHeight" type="xsd:double" />
|
||||||
|
<xsd:element name="Leds">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element maxOccurs="unbounded" name="Led">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Shape" type="xsd:string" />
|
||||||
|
<xsd:element name="X" type="xsd:string" />
|
||||||
|
<xsd:element name="Y" type="xsd:string" />
|
||||||
|
<xsd:element name="Width" type="xsd:string" />
|
||||||
|
<xsd:element name="Height" type="xsd:string" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="Id" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xs:schema>
|
||||||
@ -77,6 +77,9 @@
|
|||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="Layouts\DeviceLayout.xsd">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</None>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="targets\RGB.NET.Devices.Corsair.targets" />
|
<None Include="targets\RGB.NET.Devices.Corsair.targets" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user