[NUI] Split NUI Assemblies (#865)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.Xaml / src / public / Xaml / MarkupExtensions / ArrayExtension.cs
1 using System;
2 using System.Collections;
3 using System.Collections.Generic;
4 using System.ComponentModel;
5 using Tizen.NUI.XamlBinding;
6
7 namespace Tizen.NUI.Xaml
8 {
9     /// <summary>
10     /// The class ArrayExtension.
11     /// </summary>
12     /// <since_tizen> 6 </since_tizen>
13     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
14     [ContentProperty("Items")]
15     [AcceptEmptyServiceProvider]
16     [EditorBrowsable(EditorBrowsableState.Never)]
17     public class ArrayExtension : IMarkupExtension<Array>
18     {
19         /// <summary>
20         /// Create a new ArrayExtension.
21         /// </summary>
22         /// <since_tizen> 6 </since_tizen>
23         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
24         [EditorBrowsable(EditorBrowsableState.Never)]
25         public ArrayExtension()
26         {
27             Items = new List<object>();
28         }
29
30         /// <summary>
31         /// Attribute Items.
32         /// </summary>
33         /// <since_tizen> 6 </since_tizen>
34         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
35         [EditorBrowsable(EditorBrowsableState.Never)]
36         public IList Items { get; }
37
38         /// <summary>
39         /// Attribute Type.
40         /// </summary>
41         /// <since_tizen> 6 </since_tizen>
42         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
43         [EditorBrowsable(EditorBrowsableState.Never)]
44         public Type Type { get; set; }
45
46         /// <summary>
47         /// Provide value tye service provideer.
48         /// </summary>
49         /// <since_tizen> 6 </since_tizen>
50         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
51         [EditorBrowsable(EditorBrowsableState.Never)]
52         public Array ProvideValue(IServiceProvider serviceProvider)
53         {
54             if (Type == null)
55                 throw new InvalidOperationException("Type argument mandatory for x:Array extension");
56
57             if (Items == null)
58                 return null;
59
60             var array = Array.CreateInstance(Type, Items.Count);
61             for (var i = 0; i < Items.Count; i++)
62                 ((IList)array)[i] = Items[i];
63
64             return array;
65         }
66
67         object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
68         {
69             return (this as IMarkupExtension<Array>).ProvideValue(serviceProvider);
70         }
71     }
72 }