[NUI] Change GetDefaultWindow() to static func (#900)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / XamlBinding / Internals / NameScope.cs
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Xml;
5 using Tizen.NUI.Binding;
6 using Tizen.NUI.Xaml;
7
8 namespace Tizen.NUI.Binding.Internals
9 {
10     internal class NameScope : INameScope
11     {
12         public static readonly BindableProperty NameScopeProperty = BindableProperty.CreateAttached("NameScope", typeof(INameScope), typeof(NameScope), default(INameScope));
13
14         readonly Dictionary<string, object> _names = new Dictionary<string, object>();
15
16         object INameScope.FindByName(string name)
17         {
18             if (_names.ContainsKey(name))
19                 return _names[name];
20             return null;
21         }
22
23         void INameScope.RegisterName(string name, object scopedElement)
24         {
25             if (_names.ContainsKey(name))
26                 throw new ArgumentException("An element with the same key already exists in NameScope", "name");
27
28             _names[name] = scopedElement;
29         }
30
31         [Obsolete]
32         void INameScope.RegisterName(string name, object scopedElement, IXmlLineInfo xmlLineInfo)
33         {
34             try
35             {
36                 ((INameScope)this).RegisterName(name, scopedElement);
37             }
38             catch (ArgumentException)
39             {
40                 throw new XamlParseException(string.Format("An element with the name \"{0}\" already exists in this NameScope", name), xmlLineInfo);
41             }
42         }
43
44         void INameScope.UnregisterName(string name)
45         {
46             _names.Remove(name);
47         }
48
49         public static INameScope GetNameScope(BindableObject bindable)
50         {
51             return (INameScope)bindable.GetValue(NameScopeProperty);
52         }
53
54         public static void SetNameScope(BindableObject bindable, INameScope value)
55         {
56             bindable.SetValue(NameScopeProperty, value);
57         }
58     }
59 }