90518b8b077edc1909d685f3d3130e9ab5f19948
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / XamlBinding / ResourcesExtensions.cs
1 using System;
2 using System.Collections.Generic;
3
4 namespace Tizen.NUI.Binding
5 {
6         static class ResourcesExtensions
7         {
8                 public static IEnumerable<KeyValuePair<string, object>> GetMergedResources(this IElement element)
9                 {
10                         Dictionary<string, object> resources = null;
11                         while (element != null)
12                         {
13                                 var ve = element as IResourcesProvider;
14                                 if (ve != null && ve.IsResourcesCreated)
15                                 {
16                                         resources = resources ?? new Dictionary<string, object>();
17                                         foreach (KeyValuePair<string, object> res in ve.Resources.MergedResources)
18                                                 if (!resources.ContainsKey(res.Key))
19                                                         resources.Add(res.Key, res.Value);
20                                                 else if (res.Key.StartsWith(Style.StyleClassPrefix, StringComparison.Ordinal))
21                                                 {
22                                                         var mergedClassStyles = new List<Style>(resources[res.Key] as List<Style>);
23                                                         mergedClassStyles.AddRange(res.Value as List<Style>);
24                                                         resources[res.Key] = mergedClassStyles;
25                                                 }
26                                 }
27                                 var app = element as Application;
28                                 if (app != null && app.SystemResources != null)
29                                 {
30                                         resources = resources ?? new Dictionary<string, object>(8);
31                                         foreach (KeyValuePair<string, object> res in app.SystemResources)
32                                                 if (!resources.ContainsKey(res.Key))
33                                                         resources.Add(res.Key, res.Value);
34                                                 else if (res.Key.StartsWith(Style.StyleClassPrefix, StringComparison.Ordinal))
35                                                 {
36                                                         var mergedClassStyles = new List<Style>(resources[res.Key] as List<Style>);
37                                                         mergedClassStyles.AddRange(res.Value as List<Style>);
38                                                         resources[res.Key] = mergedClassStyles;
39                                                 }
40                                 }
41                                 element = element.Parent;
42                         }
43                         return resources;
44                 }
45
46                 public static bool TryGetResource(this IElement element, string key, out object value)
47                 {
48                         while (element != null)
49                         {
50                                 var ve = element as IResourcesProvider;
51                                 if (ve != null && ve.IsResourcesCreated && ve.Resources.TryGetValue(key, out value))
52                                         return true;
53                                 var app = element as Application;
54                                 if (app != null && app.SystemResources != null && app.SystemResources.TryGetValue(key, out value))
55                                         return true;
56                                 element = element.Parent;
57                         }
58
59                         //Fallback for the XF previewer
60                         if (Application.Current != null && ((IResourcesProvider)Application.Current).IsResourcesCreated && Application.Current.Resources.TryGetValue(key, out value))
61                                 return true;
62
63                         value = null;
64                         return false;
65                 }
66         }
67 }