98cddaa360172c6217baee3a14f3afabedf1c77e
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / XamlBinding / LayoutOptionsConverter.cs
1 using System;
2 using System.Linq;
3 using System.Reflection;
4 using Tizen.NUI.Binding.Internals;
5
6 using Tizen.NUI;
7
8 namespace Tizen.NUI.Binding
9 {
10     [Xaml.ProvideCompiled("Tizen.NUI.Xaml.Core.XamlC.LayoutOptionsConverter")]
11     [Xaml.TypeConversion(typeof(LayoutOptions))]
12     internal sealed class LayoutOptionsConverter : TypeConverter
13     {
14         public override object ConvertFromInvariantString(string value)
15         {
16             if (value != null) {
17                 var parts = value.Split('.');
18                 if (parts.Length > 2 || (parts.Length == 2 && parts [0] != "LayoutOptions"))
19                     throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(LayoutOptions)}");
20                 value = parts [parts.Length - 1];
21                 switch (value) {
22                 case "Start": return LayoutOptions.Start;
23                 case "Center": return LayoutOptions.Center;
24                 case "End": return LayoutOptions.End;
25                 case "Fill": return LayoutOptions.Fill;
26                 case "StartAndExpand": return LayoutOptions.StartAndExpand;
27                 case "CenterAndExpand": return LayoutOptions.CenterAndExpand;
28                 case "EndAndExpand": return LayoutOptions.EndAndExpand;
29                 case "FillAndExpand": return LayoutOptions.FillAndExpand;
30                 }
31                 FieldInfo field = typeof(LayoutOptions).GetFields().FirstOrDefault(fi => fi.IsStatic && fi.Name == value);
32                 if (field != null)
33                     return (LayoutOptions)field.GetValue(null);
34             }
35
36             throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(LayoutOptions)}");
37         }
38     }
39 }