From f94e29a368077a4c09dd47ab7938758f7373be88 Mon Sep 17 00:00:00 2001 From: Yoshi Askharoun Date: Sun, 7 Jul 2024 22:46:34 -0500 Subject: [PATCH] Use reflection to get predefined layouts --- .../Iris/Layout/PredefinedLayouts.cs | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/UIX/Microsoft/Iris/Layout/PredefinedLayouts.cs b/UIX/Microsoft/Iris/Layout/PredefinedLayouts.cs index e57aaef..bcdbff7 100644 --- a/UIX/Microsoft/Iris/Layout/PredefinedLayouts.cs +++ b/UIX/Microsoft/Iris/Layout/PredefinedLayouts.cs @@ -1,6 +1,6 @@ using Microsoft.Iris.Layouts; using Microsoft.Iris.Render; -using System.Collections.Generic; +using System.Linq; namespace Microsoft.Iris.Layout; @@ -8,16 +8,28 @@ public static class PredefinedLayouts { public static bool TryGetFromName(string name, out ILayout layout) { - return s_NameToLayoutMap.TryGetValue(name.ToLowerInvariant(), out layout); + var prop = typeof(PredefinedLayouts).GetProperties() + .FirstOrDefault(p => p.Name.Equals(name, System.StringComparison.InvariantCultureIgnoreCase)); + + if (prop is null) + { + layout = null; + return false; + } + + layout = (ILayout)prop.GetValue(null); + return true; } public static bool TryConvertToString(ILayout layout, out string name) { - foreach (var kvp in s_NameToLayoutMap) + foreach (var prop in typeof(PredefinedLayouts).GetProperties()) { - if (kvp.Value.Equals(layout)) + var value = prop.GetValue(null); + + if (value == layout) { - name = kvp.Key; + name = prop.Name; return true; } } @@ -46,18 +58,4 @@ public static class PredefinedLayouts { Orientation = Orientation.Vertical }; - - private static readonly Dictionary s_NameToLayoutMap = new(10) - { - ["anchor"] = Anchor, - ["default"] = Default, - ["dock"] = Dock, - ["grid"] = Grid, - ["scale"] = Scale, - ["popup"] = Popup, - ["stack"] = Stack, - ["form"] = Form, - ["horizontalflow"] = HorizontalFlow, - ["verticalflow"] = VerticalFlow, - }; }