mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
unify handlers
This commit is contained in:
parent
81e2095c87
commit
cb70e8ec0c
@ -14,6 +14,8 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
{
|
{
|
||||||
public partial class CustomDialog
|
public partial class CustomDialog
|
||||||
{
|
{
|
||||||
|
private class DummyFrameworkElement : FrameworkElement { }
|
||||||
|
|
||||||
private const int MaxElements = 100;
|
private const int MaxElements = 100;
|
||||||
|
|
||||||
private bool _initialised = false;
|
private bool _initialised = false;
|
||||||
@ -23,35 +25,29 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
|
|
||||||
private string ThemeDir { get; set; } = "";
|
private string ThemeDir { get; set; } = "";
|
||||||
|
|
||||||
delegate UIElement? HandleXmlElementDelegate(CustomDialog dialog, XElement xmlElement);
|
delegate object HandleXmlElementDelegate(CustomDialog dialog, XElement xmlElement);
|
||||||
delegate Brush HandleXmlBrushElementDelegate(CustomDialog dialog, XElement xmlElement);
|
|
||||||
delegate void HandleXmlTransformationElementDelegate(TransformGroup group, XElement xmlElement);
|
|
||||||
|
|
||||||
private static Dictionary<string, HandleXmlElementDelegate> _elementHandlerMap = new Dictionary<string, HandleXmlElementDelegate>()
|
private static Dictionary<string, HandleXmlElementDelegate> _elementHandlerMap = new Dictionary<string, HandleXmlElementDelegate>()
|
||||||
{
|
{
|
||||||
//["BloxstrapCustomBootstrapper"] = HandleXmlElement_BloxstrapCustomBootstrapper,
|
|
||||||
["TitleBar"] = HandleXmlElement_TitleBar,
|
["TitleBar"] = HandleXmlElement_TitleBar,
|
||||||
["Button"] = HandleXmlElement_Button,
|
["Button"] = HandleXmlElement_Button,
|
||||||
["ProgressBar"] = HandleXmlElement_ProgressBar,
|
["ProgressBar"] = HandleXmlElement_ProgressBar,
|
||||||
["TextBlock"] = HandleXmlElement_TextBlock,
|
["TextBlock"] = HandleXmlElement_TextBlock,
|
||||||
["MarkdownTextBlock"] = HandleXmlElement_MarkdownTextBlock,
|
["MarkdownTextBlock"] = HandleXmlElement_MarkdownTextBlock,
|
||||||
["Image"] = HandleXmlElement_Image
|
["Image"] = HandleXmlElement_Image,
|
||||||
|
|
||||||
|
["SolidColorBrush"] = HandleXml_SolidColorBrush,
|
||||||
|
["ImageBrush"] = HandleXml_ImageBrush,
|
||||||
|
["LinearGradientBrush"] = HandleXml_LinearGradientBrush,
|
||||||
|
|
||||||
|
["GradientStop"] = HandleXml_GradientStop,
|
||||||
|
|
||||||
|
["ScaleTransform"] = HandleXml_ScaleTransform,
|
||||||
|
["SkewTransform"] = HandleXml_SkewTransform,
|
||||||
|
["RotateTransform"] = HandleXml_RotateTransform,
|
||||||
|
["TranslateTransform"] = HandleXml_TranslateTransform
|
||||||
};
|
};
|
||||||
|
|
||||||
private static Dictionary<string, HandleXmlBrushElementDelegate> _brushHandlerMap = new Dictionary<string, HandleXmlBrushElementDelegate>()
|
|
||||||
{
|
|
||||||
["SolidColorBrush"] = HandleXmlBrush_SolidColorBrush,
|
|
||||||
["ImageBrush"] = HandleXmlBrush_ImageBrush,
|
|
||||||
["LinearGradientBrush"] = HandleXmlBrush_LinearGradientBrush
|
|
||||||
};
|
|
||||||
|
|
||||||
private static Dictionary<string, HandleXmlTransformationElementDelegate> _transformationHandlerMap = new Dictionary<string, HandleXmlTransformationElementDelegate>()
|
|
||||||
{
|
|
||||||
["ScaleTransform"] = HandleXmlTransformationElement_ScaleTransform,
|
|
||||||
["SkewTransform"] = HandleXmlTransformationElement_SkewTransform,
|
|
||||||
["RotateTransform"] = HandleXmlTransformationElement_RotateTransform,
|
|
||||||
["TranslateTransform"] = HandleXmlTransformationElement_TranslateTransform
|
|
||||||
};
|
|
||||||
|
|
||||||
#region Utilities
|
#region Utilities
|
||||||
private static string GetXmlAttribute(XElement element, string attributeName, string? defaultValue = null)
|
private static string GetXmlAttribute(XElement element, string attributeName, string? defaultValue = null)
|
||||||
@ -233,7 +229,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Transformation Elements
|
#region Transformation Elements
|
||||||
private static void HandleXmlTransformationElement_ScaleTransform(TransformGroup group, XElement xmlElement)
|
private static Transform HandleXml_ScaleTransform(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var st = new ScaleTransform();
|
var st = new ScaleTransform();
|
||||||
|
|
||||||
@ -242,10 +238,10 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
st.CenterX = ParseXmlAttribute<double>(xmlElement, "CenterX", 0);
|
st.CenterX = ParseXmlAttribute<double>(xmlElement, "CenterX", 0);
|
||||||
st.CenterY = ParseXmlAttribute<double>(xmlElement, "CenterY", 0);
|
st.CenterY = ParseXmlAttribute<double>(xmlElement, "CenterY", 0);
|
||||||
|
|
||||||
group.Children.Add(st);
|
return st;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleXmlTransformationElement_SkewTransform(TransformGroup group, XElement xmlElement)
|
private static Transform HandleXml_SkewTransform(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var st = new SkewTransform();
|
var st = new SkewTransform();
|
||||||
|
|
||||||
@ -254,10 +250,10 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
st.CenterX = ParseXmlAttribute<double>(xmlElement, "CenterX", 0);
|
st.CenterX = ParseXmlAttribute<double>(xmlElement, "CenterX", 0);
|
||||||
st.CenterY = ParseXmlAttribute<double>(xmlElement, "CenterY", 0);
|
st.CenterY = ParseXmlAttribute<double>(xmlElement, "CenterY", 0);
|
||||||
|
|
||||||
group.Children.Add(st);
|
return st;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleXmlTransformationElement_RotateTransform(TransformGroup group, XElement xmlElement)
|
private static Transform HandleXml_RotateTransform(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var rt = new RotateTransform();
|
var rt = new RotateTransform();
|
||||||
|
|
||||||
@ -265,28 +261,20 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
rt.CenterX = ParseXmlAttribute<double>(xmlElement, "CenterX", 0);
|
rt.CenterX = ParseXmlAttribute<double>(xmlElement, "CenterX", 0);
|
||||||
rt.CenterY = ParseXmlAttribute<double>(xmlElement, "CenterY", 0);
|
rt.CenterY = ParseXmlAttribute<double>(xmlElement, "CenterY", 0);
|
||||||
|
|
||||||
group.Children.Add(rt);
|
return rt;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleXmlTransformationElement_TranslateTransform(TransformGroup group, XElement xmlElement)
|
private static Transform HandleXml_TranslateTransform(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var tt = new TranslateTransform();
|
var tt = new TranslateTransform();
|
||||||
|
|
||||||
tt.X = ParseXmlAttribute<double>(xmlElement, "X", 0);
|
tt.X = ParseXmlAttribute<double>(xmlElement, "X", 0);
|
||||||
tt.Y = ParseXmlAttribute<double>(xmlElement, "Y", 0);
|
tt.Y = ParseXmlAttribute<double>(xmlElement, "Y", 0);
|
||||||
|
|
||||||
group.Children.Add(tt);
|
return tt;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleXmlTransformation(TransformGroup group, XElement xmlElement)
|
private static void ApplyTransformations_UIElement(CustomDialog dialog, UIElement uiElement, XElement xmlElement)
|
||||||
{
|
|
||||||
if (!_transformationHandlerMap.ContainsKey(xmlElement.Name.ToString()))
|
|
||||||
throw new Exception($"Unknown transformation {xmlElement.Name}");
|
|
||||||
|
|
||||||
_transformationHandlerMap[xmlElement.Name.ToString()](group, xmlElement);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void ApplyTransformations_UIElement(UIElement uiElement, XElement xmlElement)
|
|
||||||
{
|
{
|
||||||
var renderTransform = xmlElement.Element($"{xmlElement.Name}.RenderTransform");
|
var renderTransform = xmlElement.Element($"{xmlElement.Name}.RenderTransform");
|
||||||
|
|
||||||
@ -295,24 +283,26 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
var tg = new TransformGroup();
|
var tg = new TransformGroup();
|
||||||
|
|
||||||
foreach (var child in renderTransform.Elements())
|
foreach (var child in renderTransform.Elements())
|
||||||
HandleXmlTransformation(tg, child);
|
{
|
||||||
|
Transform element = HandleXml<Transform>(dialog, child);
|
||||||
|
tg.Children.Add(element);
|
||||||
|
}
|
||||||
|
|
||||||
if (tg.Children.Any())
|
uiElement.RenderTransform = tg;
|
||||||
uiElement.RenderTransform = tg;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Brushes
|
#region Brushes
|
||||||
private static void HandleXmlBrush_Brush(Brush brush, XElement xmlElement)
|
private static void HandleXml_Brush(Brush brush, XElement xmlElement)
|
||||||
{
|
{
|
||||||
brush.Opacity = ParseXmlAttribute<double>(xmlElement, "Opacity", 1.0);
|
brush.Opacity = ParseXmlAttribute<double>(xmlElement, "Opacity", 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Brush HandleXmlBrush_SolidColorBrush(CustomDialog dialog, XElement xmlElement)
|
private static Brush HandleXml_SolidColorBrush(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var brush = new SolidColorBrush();
|
var brush = new SolidColorBrush();
|
||||||
HandleXmlBrush_Brush(brush, xmlElement);
|
HandleXml_Brush(brush, xmlElement);
|
||||||
|
|
||||||
object? color = GetColorFromXElement(xmlElement, "Color");
|
object? color = GetColorFromXElement(xmlElement, "Color");
|
||||||
if (color is Color)
|
if (color is Color)
|
||||||
@ -321,10 +311,10 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
return brush;
|
return brush;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Brush HandleXmlBrush_ImageBrush(CustomDialog dialog, XElement xmlElement)
|
private static Brush HandleXml_ImageBrush(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var imageBrush = new ImageBrush();
|
var imageBrush = new ImageBrush();
|
||||||
HandleXmlBrush_Brush(imageBrush, xmlElement);
|
HandleXml_Brush(imageBrush, xmlElement);
|
||||||
|
|
||||||
imageBrush.AlignmentX = ParseXmlAttribute<AlignmentX>(xmlElement, "AlignmentX", AlignmentX.Center);
|
imageBrush.AlignmentX = ParseXmlAttribute<AlignmentX>(xmlElement, "AlignmentX", AlignmentX.Center);
|
||||||
imageBrush.AlignmentY = ParseXmlAttribute<AlignmentY>(xmlElement, "AlignmentY", AlignmentY.Center);
|
imageBrush.AlignmentY = ParseXmlAttribute<AlignmentY>(xmlElement, "AlignmentY", AlignmentY.Center);
|
||||||
@ -376,7 +366,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
return imageBrush;
|
return imageBrush;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static GradientStop HandleGradientStop(XElement xmlElement)
|
private static GradientStop HandleXml_GradientStop(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var gs = new GradientStop();
|
var gs = new GradientStop();
|
||||||
|
|
||||||
@ -389,10 +379,10 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
return gs;
|
return gs;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Brush HandleXmlBrush_LinearGradientBrush(CustomDialog dialog, XElement xmlElement)
|
private static Brush HandleXml_LinearGradientBrush(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var brush = new LinearGradientBrush();
|
var brush = new LinearGradientBrush();
|
||||||
HandleXmlBrush_Brush(brush, xmlElement);
|
HandleXml_Brush(brush, xmlElement);
|
||||||
|
|
||||||
object? startPoint = GetPointFromXElement(xmlElement, "StartPoint");
|
object? startPoint = GetPointFromXElement(xmlElement, "StartPoint");
|
||||||
if (startPoint is Point)
|
if (startPoint is Point)
|
||||||
@ -407,24 +397,11 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
brush.SpreadMethod = ParseXmlAttribute<GradientSpreadMethod>(xmlElement, "SpreadMethod", GradientSpreadMethod.Pad);
|
brush.SpreadMethod = ParseXmlAttribute<GradientSpreadMethod>(xmlElement, "SpreadMethod", GradientSpreadMethod.Pad);
|
||||||
|
|
||||||
foreach (var child in xmlElement.Elements())
|
foreach (var child in xmlElement.Elements())
|
||||||
{
|
brush.GradientStops.Add(HandleXml<GradientStop>(dialog, child));
|
||||||
if (child.Name != "GradientStop")
|
|
||||||
throw new Exception($"{child.Name} can not be a child of LinearGradientBrush");
|
|
||||||
|
|
||||||
brush.GradientStops.Add(HandleGradientStop(child));
|
|
||||||
}
|
|
||||||
|
|
||||||
return brush;
|
return brush;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Brush HandleXmlBrush(CustomDialog dialog, XElement xmlElement)
|
|
||||||
{
|
|
||||||
if (!_brushHandlerMap.ContainsKey(xmlElement.Name.ToString()))
|
|
||||||
throw new Exception($"Unknown brush {xmlElement.Name}");
|
|
||||||
|
|
||||||
return _brushHandlerMap[xmlElement.Name.ToString()](dialog, xmlElement);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void ApplyBrush_UIElement(CustomDialog dialog, FrameworkElement uiElement, string name, DependencyProperty dependencyProperty, XElement xmlElement)
|
private static void ApplyBrush_UIElement(CustomDialog dialog, FrameworkElement uiElement, string name, DependencyProperty dependencyProperty, XElement xmlElement)
|
||||||
{
|
{
|
||||||
// check if attribute exists
|
// check if attribute exists
|
||||||
@ -449,7 +426,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
if (first == null)
|
if (first == null)
|
||||||
throw new Exception($"{xmlElement.Name} {name} is missing the brush");
|
throw new Exception($"{xmlElement.Name} {name} is missing the brush");
|
||||||
|
|
||||||
var brush = HandleXmlBrush(dialog, first);
|
var brush = HandleXml<Brush>(dialog, first);
|
||||||
uiElement.SetValue(dependencyProperty, brush);
|
uiElement.SetValue(dependencyProperty, brush);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@ -506,7 +483,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
ApplyBrush_UIElement(dialog, uiElement, "BorderBrush", Control.BorderBrushProperty, xmlElement);
|
ApplyBrush_UIElement(dialog, uiElement, "BorderBrush", Control.BorderBrushProperty, xmlElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UIElement? HandleXmlElement_BloxstrapCustomBootstrapper(CustomDialog dialog, XElement xmlElement)
|
private static UIElement HandleXmlElement_BloxstrapCustomBootstrapper(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
xmlElement.SetAttributeValue("Visibility", "Collapsed"); // don't show the bootstrapper yet!!!
|
xmlElement.SetAttributeValue("Visibility", "Collapsed"); // don't show the bootstrapper yet!!!
|
||||||
xmlElement.SetAttributeValue("IsEnabled", "True");
|
xmlElement.SetAttributeValue("IsEnabled", "True");
|
||||||
@ -523,10 +500,10 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
dialog.Margin = new Thickness(0, 0, 0, 0);
|
dialog.Margin = new Thickness(0, 0, 0, 0);
|
||||||
dialog.Padding = new Thickness(0, 0, 0, 0);
|
dialog.Padding = new Thickness(0, 0, 0, 0);
|
||||||
|
|
||||||
return null; // dont add anything
|
return new DummyFrameworkElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UIElement? HandleXmlElement_TitleBar(CustomDialog dialog, XElement xmlElement)
|
private static DummyFrameworkElement HandleXmlElement_TitleBar(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
xmlElement.SetAttributeValue("Name", "TitleBar"); // prevent two titlebars from existing
|
xmlElement.SetAttributeValue("Name", "TitleBar"); // prevent two titlebars from existing
|
||||||
xmlElement.SetAttributeValue("IsEnabled", "True");
|
xmlElement.SetAttributeValue("IsEnabled", "True");
|
||||||
@ -547,7 +524,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
dialog.Title = title;
|
dialog.Title = title;
|
||||||
dialog.RootTitleBar.Title = title;
|
dialog.RootTitleBar.Title = title;
|
||||||
|
|
||||||
return null; // dont add anything
|
return new DummyFrameworkElement(); // dont add anything
|
||||||
}
|
}
|
||||||
|
|
||||||
private static object? GetContentFromXElement(CustomDialog dialog, XElement xmlElement)
|
private static object? GetContentFromXElement(CustomDialog dialog, XElement xmlElement)
|
||||||
@ -563,14 +540,14 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
if (first == null)
|
if (first == null)
|
||||||
throw new Exception($"{xmlElement.Name} Content is missing the content");
|
throw new Exception($"{xmlElement.Name} Content is missing the content");
|
||||||
|
|
||||||
var uiElement = HandleXml(dialog, first);
|
var uiElement = HandleXml<UIElement>(dialog, first);
|
||||||
return uiElement;
|
return uiElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UIElement? HandleXmlElement_Button(CustomDialog dialog, XElement xmlElement)
|
private static UIElement HandleXmlElement_Button(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var button = new Button();
|
var button = new Button();
|
||||||
HandleXmlElement_Control(dialog, button, xmlElement);
|
HandleXmlElement_Control(dialog, button, xmlElement);
|
||||||
@ -586,12 +563,12 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
BindingOperations.SetBinding(button, Button.CommandProperty, cancelCommandBinding);
|
BindingOperations.SetBinding(button, Button.CommandProperty, cancelCommandBinding);
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplyTransformations_UIElement(button, xmlElement);
|
ApplyTransformations_UIElement(dialog, button, xmlElement);
|
||||||
|
|
||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UIElement? HandleXmlElement_ProgressBar(CustomDialog dialog, XElement xmlElement)
|
private static UIElement HandleXmlElement_ProgressBar(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var progressBar = new ProgressBar();
|
var progressBar = new ProgressBar();
|
||||||
HandleXmlElement_Control(dialog, progressBar, xmlElement);
|
HandleXmlElement_Control(dialog, progressBar, xmlElement);
|
||||||
@ -613,7 +590,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
BindingOperations.SetBinding(progressBar, ProgressBar.ValueProperty, valueBinding);
|
BindingOperations.SetBinding(progressBar, ProgressBar.ValueProperty, valueBinding);
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplyTransformations_UIElement(progressBar, xmlElement);
|
ApplyTransformations_UIElement(dialog, progressBar, xmlElement);
|
||||||
|
|
||||||
return progressBar;
|
return progressBar;
|
||||||
}
|
}
|
||||||
@ -655,10 +632,10 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
BindingOperations.SetBinding(textBlock, TextBlock.TextProperty, textBinding);
|
BindingOperations.SetBinding(textBlock, TextBlock.TextProperty, textBinding);
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplyTransformations_UIElement(textBlock, xmlElement);
|
ApplyTransformations_UIElement(dialog, textBlock, xmlElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UIElement? HandleXmlElement_TextBlock(CustomDialog dialog, XElement xmlElement)
|
private static UIElement HandleXmlElement_TextBlock(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var textBlock = new TextBlock();
|
var textBlock = new TextBlock();
|
||||||
HandleXmlElement_TextBlock_Base(dialog, textBlock, xmlElement);
|
HandleXmlElement_TextBlock_Base(dialog, textBlock, xmlElement);
|
||||||
@ -666,7 +643,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
return textBlock;
|
return textBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UIElement? HandleXmlElement_MarkdownTextBlock(CustomDialog dialog, XElement xmlElement)
|
private static UIElement HandleXmlElement_MarkdownTextBlock(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var textBlock = new MarkdownTextBlock();
|
var textBlock = new MarkdownTextBlock();
|
||||||
HandleXmlElement_TextBlock_Base(dialog, textBlock, xmlElement);
|
HandleXmlElement_TextBlock_Base(dialog, textBlock, xmlElement);
|
||||||
@ -678,7 +655,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
return textBlock;
|
return textBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UIElement? HandleXmlElement_Image(CustomDialog dialog, XElement xmlElement)
|
private static UIElement HandleXmlElement_Image(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
var image = new Image();
|
var image = new Image();
|
||||||
HandleXmlElement_FrameworkElement(dialog, image, xmlElement);
|
HandleXmlElement_FrameworkElement(dialog, image, xmlElement);
|
||||||
@ -726,27 +703,30 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplyTransformations_UIElement(image, xmlElement);
|
ApplyTransformations_UIElement(dialog, image, xmlElement);
|
||||||
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UIElement? HandleXml(CustomDialog dialog, XElement xmlElement)
|
private static T HandleXml<T>(CustomDialog dialog, XElement xmlElement) where T : class
|
||||||
{
|
{
|
||||||
if (!_elementHandlerMap.ContainsKey(xmlElement.Name.ToString()))
|
if (!_elementHandlerMap.ContainsKey(xmlElement.Name.ToString()))
|
||||||
throw new Exception($"Unknown element {xmlElement.Name}");
|
throw new Exception($"Unknown element {xmlElement.Name}");
|
||||||
|
|
||||||
var uiElement = _elementHandlerMap[xmlElement.Name.ToString()](dialog, xmlElement);
|
var element = _elementHandlerMap[xmlElement.Name.ToString()](dialog, xmlElement);
|
||||||
return uiElement;
|
if (element is not T)
|
||||||
|
throw new Exception($"{xmlElement.Parent!.Name} cannot have a child of {xmlElement.Name}");
|
||||||
|
|
||||||
|
return (T)element;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleAndAddXml(CustomDialog dialog, XElement xmlElement)
|
private static void AddXml(CustomDialog dialog, XElement xmlElement)
|
||||||
{
|
{
|
||||||
if (xmlElement.Name.ToString().StartsWith($"{xmlElement.Parent!.Name}."))
|
if (xmlElement.Name.ToString().StartsWith($"{xmlElement.Parent!.Name}."))
|
||||||
return; // not an xml element
|
return; // not an xml element
|
||||||
|
|
||||||
var uiElement = HandleXml(dialog, xmlElement);
|
var uiElement = HandleXml<UIElement>(dialog, xmlElement);
|
||||||
if (uiElement != null)
|
if (uiElement is not DummyFrameworkElement)
|
||||||
dialog.ElementGrid.Children.Add(uiElement);
|
dialog.ElementGrid.Children.Add(uiElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -771,7 +751,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
|
|
||||||
// handle everything else
|
// handle everything else
|
||||||
foreach (var child in xml.Elements())
|
foreach (var child in xml.Elements())
|
||||||
HandleAndAddXml(this, child);
|
AddXml(this, child);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user