Revert "[NUI] Fix ConvertIdToView (#877)" (#889)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / XamlBinding / ThicknessTypeConverter.cs
1 using System;
2 using System.Globalization;
3
4 namespace Tizen.NUI.Binding
5 {
6     [Xaml.ProvideCompiled("Tizen.NUI.Xaml.Core.XamlC.ThicknessTypeConverter")]
7     [Xaml.TypeConversion(typeof(Thickness))]
8     internal class ThicknessTypeConverter : TypeConverter
9     {
10         public override object ConvertFromInvariantString(string value)
11         {
12             if (value != null) {
13                 value = value.Trim();
14                 if (value.Contains(",")) { //Xaml
15                     var thickness = value.Split(',');
16                     switch (thickness.Length) {
17                     case 2:
18                         if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out double h)
19                             && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out double v))
20                             return new Thickness(h, v);
21                         break;
22                     case 4:
23                         if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out double l)
24                             && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out double t)
25                             && double.TryParse(thickness[2], NumberStyles.Number, CultureInfo.InvariantCulture, out double r)
26                             && double.TryParse(thickness[3], NumberStyles.Number, CultureInfo.InvariantCulture, out double b))
27                             return new Thickness(l, t, r, b);
28                         break;
29                     }
30                 }
31                 else if (value.Contains(" ")) { //CSS
32                     var thickness = value.Split(' ');
33                     switch (thickness.Length) {
34                     case 2:
35                         if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out double v)
36                             && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out double h))
37                             return new Thickness(h, v);
38                         break;
39                     case 3:
40                         if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out double t)
41                             && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out h)
42                             && double.TryParse(thickness[2], NumberStyles.Number, CultureInfo.InvariantCulture, out double b))
43                             return new Thickness(h, t, h, b);
44                         break;
45                     case 4:
46                         if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out t)
47                             && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out double r)
48                             && double.TryParse(thickness[2], NumberStyles.Number, CultureInfo.InvariantCulture, out b)
49                             && double.TryParse(thickness[3], NumberStyles.Number, CultureInfo.InvariantCulture, out double l))
50                             return new Thickness(l, t, r, b);
51                         break;
52                     }
53                 }
54                 else { //single uniform thickness
55                     if (double.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, out double l))
56                         return new Thickness(l);
57                 }
58             }
59
60             throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(Thickness)}");
61         }
62     }
63 }