mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
move converters into a separate file
This commit is contained in:
parent
3ecea91985
commit
8abb33b222
@ -0,0 +1,92 @@
|
|||||||
|
using System.ComponentModel;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
|
||||||
|
namespace Bloxstrap.UI.Elements.Bootstrapper
|
||||||
|
{
|
||||||
|
public partial class CustomDialog
|
||||||
|
{
|
||||||
|
// https://stackoverflow.com/a/2961702
|
||||||
|
private static T? ConvertValue<T>(string input) where T : struct
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var converter = TypeDescriptor.GetConverter(typeof(T));
|
||||||
|
if (converter != null)
|
||||||
|
{
|
||||||
|
return (T?)converter.ConvertFromInvariantString(input);
|
||||||
|
}
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
catch (NotSupportedException)
|
||||||
|
{
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static object? GetTypeFromXElement(TypeConverter converter, XElement xmlElement, string attributeName)
|
||||||
|
{
|
||||||
|
string? attributeValue = xmlElement.Attribute(attributeName)?.Value?.ToString();
|
||||||
|
if (attributeValue == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return converter.ConvertFromInvariantString(attributeValue);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new Exception($"{xmlElement.Name} has invalid {attributeName}: {ex.Message}", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ThicknessConverter? _thicknessConverter = null;
|
||||||
|
private static ThicknessConverter ThicknessConverter { get => _thicknessConverter ??= new ThicknessConverter(); }
|
||||||
|
|
||||||
|
private static object? GetThicknessFromXElement(XElement xmlElement, string attributeName) => GetTypeFromXElement(ThicknessConverter, xmlElement, attributeName);
|
||||||
|
|
||||||
|
private static RectConverter? _rectConverter = null;
|
||||||
|
public static RectConverter RectConverter { get => _rectConverter ??= new RectConverter(); }
|
||||||
|
|
||||||
|
private static object? GetRectFromXElement(XElement xmlElement, string attributeName) => GetTypeFromXElement(RectConverter, xmlElement, attributeName);
|
||||||
|
|
||||||
|
private static ColorConverter? _colorConverter = null;
|
||||||
|
public static ColorConverter ColorConverter { get => _colorConverter ??= new ColorConverter(); }
|
||||||
|
|
||||||
|
private static object? GetColorFromXElement(XElement xmlElement, string attributeName) => GetTypeFromXElement(ColorConverter, xmlElement, attributeName);
|
||||||
|
|
||||||
|
private static PointConverter? _pointConverter = null;
|
||||||
|
public static PointConverter PointConverter { get => _pointConverter ??= new PointConverter(); }
|
||||||
|
|
||||||
|
private static object? GetPointFromXElement(XElement xmlElement, string attributeName) => GetTypeFromXElement(PointConverter, xmlElement, attributeName);
|
||||||
|
|
||||||
|
|
||||||
|
private static BrushConverter? _brushConverter = null;
|
||||||
|
private static BrushConverter BrushConverter { get => _brushConverter ??= new BrushConverter(); }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Return type of string = Name of DynamicResource
|
||||||
|
/// Return type of brush = ... The Brush!!!
|
||||||
|
/// </summary>
|
||||||
|
private static object? GetBrushFromXElement(XElement element, string attributeName)
|
||||||
|
{
|
||||||
|
string? value = element.Attribute(attributeName)?.Value?.ToString();
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// dynamic resource name
|
||||||
|
if (value.StartsWith('{') && value.EndsWith('}'))
|
||||||
|
return value[1..^1];
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return BrushConverter.ConvertFromInvariantString(value);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new Exception($"{element.Name} has invalid {attributeName}: {ex.Message}", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -16,18 +16,6 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
{
|
{
|
||||||
private const int MaxElements = 100;
|
private const int MaxElements = 100;
|
||||||
|
|
||||||
private static ThicknessConverter? _thicknessConverter = null;
|
|
||||||
private static ThicknessConverter ThicknessConverter { get => _thicknessConverter ??= new ThicknessConverter(); }
|
|
||||||
|
|
||||||
private static BrushConverter? _brushConverter = null;
|
|
||||||
private static BrushConverter BrushConverter { get => _brushConverter ??= new BrushConverter(); }
|
|
||||||
|
|
||||||
private static RectConverter? _rectConverter = null;
|
|
||||||
public static RectConverter RectConverter { get => _rectConverter ??= new RectConverter(); }
|
|
||||||
|
|
||||||
private static ColorConverter? _colorConverter = null;
|
|
||||||
public static ColorConverter ColorConverter { get => _colorConverter ??= new ColorConverter(); }
|
|
||||||
|
|
||||||
private bool _initialised = false;
|
private bool _initialised = false;
|
||||||
|
|
||||||
// prevent users from creating elements with the same name multiple times
|
// prevent users from creating elements with the same name multiple times
|
||||||
@ -65,26 +53,6 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
};
|
};
|
||||||
|
|
||||||
#region Utilities
|
#region Utilities
|
||||||
// https://stackoverflow.com/a/2961702
|
|
||||||
private static T? ConvertValue<T>(string input) where T : struct
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var converter = TypeDescriptor.GetConverter(typeof(T));
|
|
||||||
if (converter != null)
|
|
||||||
{
|
|
||||||
// Cast ConvertFromString(string text) : object to (T)
|
|
||||||
//return (T?)converter.ConvertFromString(input);
|
|
||||||
return (T?)converter.ConvertFromInvariantString(input);
|
|
||||||
}
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
catch (NotSupportedException)
|
|
||||||
{
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string GetXmlAttribute(XElement element, string attributeName, string? defaultValue = null)
|
private static string GetXmlAttribute(XElement element, string attributeName, string? defaultValue = null)
|
||||||
{
|
{
|
||||||
var attribute = element.Attribute(attributeName);
|
var attribute = element.Attribute(attributeName);
|
||||||
@ -167,72 +135,6 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static object? GetThicknessFromXElement(XElement xmlElement, string attributeName)
|
|
||||||
{
|
|
||||||
string? attributeValue = xmlElement.Attribute(attributeName)?.Value?.ToString();
|
|
||||||
if (attributeValue == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
object? thickness;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
thickness = ThicknessConverter.ConvertFromInvariantString(attributeValue);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
throw new Exception($"{xmlElement.Name} has invalid {attributeName}: {ex.Message}", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (thickness == null)
|
|
||||||
throw new Exception($"{xmlElement.Name} has invalid {attributeName}");
|
|
||||||
|
|
||||||
return thickness;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static object? GetRectFromXElement(XElement xmlElement, string attributeName)
|
|
||||||
{
|
|
||||||
string? attributeValue = xmlElement.Attribute(attributeName)?.Value?.ToString();
|
|
||||||
if (attributeValue == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
object? rect;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
rect = RectConverter.ConvertFromInvariantString(attributeValue);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
throw new Exception($"{xmlElement.Name} has invalid {attributeName}: {ex.Message}", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rect == null)
|
|
||||||
throw new Exception($"{xmlElement.Name} has invalid {attributeName}");
|
|
||||||
|
|
||||||
return rect;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static object? GetColorFromXElement(XElement xmlElement, string attributeName)
|
|
||||||
{
|
|
||||||
string? attributeValue = xmlElement.Attribute(attributeName)?.Value?.ToString();
|
|
||||||
if (attributeValue == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
object? color;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
color = ColorConverter.ConvertFromInvariantString(attributeValue);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
throw new Exception($"{xmlElement.Name} has invalid {attributeName}: {ex.Message}", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (color == null)
|
|
||||||
throw new Exception($"{xmlElement.Name} has invalid {attributeName}");
|
|
||||||
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static FontWeight GetFontWeightFromXElement(XElement element)
|
private static FontWeight GetFontWeightFromXElement(XElement element)
|
||||||
{
|
{
|
||||||
string? value = element.Attribute("FontWeight")?.Value?.ToString();
|
string? value = element.Attribute("FontWeight")?.Value?.ToString();
|
||||||
@ -327,30 +229,6 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
throw new Exception($"{element.Name} Unknown TextDecorations {value}");
|
throw new Exception($"{element.Name} Unknown TextDecorations {value}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Return type of string = Name of DynamicResource
|
|
||||||
/// Return type of brush = ... The Brush!!!
|
|
||||||
/// </summary>
|
|
||||||
private static object? GetBrushFromXElement(XElement element, string attributeName)
|
|
||||||
{
|
|
||||||
string? value = element.Attribute(attributeName)?.Value?.ToString();
|
|
||||||
if (value == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
// dynamic resource name
|
|
||||||
if (value.StartsWith('{') && value.EndsWith('}'))
|
|
||||||
return value[1..^1];
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return BrushConverter.ConvertFromInvariantString(value);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
throw new Exception($"{element.Name} has invalid {attributeName}: {ex.Message}", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Transformation Elements
|
#region Transformation Elements
|
||||||
|
Loading…
Reference in New Issue
Block a user