summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core/LayoutOptionsConverter.cs
blob: 46ef25640c74b548fa4d2a932fcf19f9772e8073 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Linq;
using System.Reflection;
using Xamarin.Forms.Internals;

namespace Xamarin.Forms
{
	[Xaml.ProvideCompiled("Xamarin.Forms.Core.XamlC.LayoutOptionsConverter")]
	public sealed class LayoutOptionsConverter : TypeConverter
	{
		public override object ConvertFromInvariantString(string value)
		{
			if (value != null) {
				var parts = value.Split('.');
				if (parts.Length > 2 || (parts.Length == 2 && parts [0] != "LayoutOptions"))
					throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(LayoutOptions)}");
				value = parts [parts.Length - 1];
				switch (value) {
				case "Start": return LayoutOptions.Start;
				case "Center": return LayoutOptions.Center;
				case "End": return LayoutOptions.End;
				case "Fill": return LayoutOptions.Fill;
				case "StartAndExpand": return LayoutOptions.StartAndExpand;
				case "CenterAndExpand": return LayoutOptions.CenterAndExpand;
				case "EndAndExpand": return LayoutOptions.EndAndExpand;
				case "FillAndExpand": return LayoutOptions.FillAndExpand;
				}
				FieldInfo field = typeof(LayoutOptions).GetFields().FirstOrDefault(fi => fi.IsStatic && fi.Name == value);
				if (field != null)
					return (LayoutOptions)field.GetValue(null);
			}

			throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(LayoutOptions)}");
		}
	}
}