[NUI]Add xaml support for nui and nui xaml test sample (#230)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / XamlBinding / NavigationMenu.cs
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Linq;
5 using Tizen.NUI;
6 using Tizen.NUI.BaseComponents;
7
8 namespace Tizen.NUI.Binding
9 {
10         // Mark as internal until renderers are ready for release after 1.0
11         // [RenderWith(typeof(_NavigationMenuRenderer))]
12         [EditorBrowsable(EditorBrowsableState.Never)]
13         internal class NavigationMenu : View, /*INavigationMenuController,*/ IElementConfiguration<NavigationMenu>
14         {
15                 readonly List<Page> _targets = new List<Page>();
16
17                 readonly Lazy<PlatformConfigurationRegistry<NavigationMenu>> _platformConfigurationRegistry;
18
19                 public NavigationMenu()
20                 {
21                         _platformConfigurationRegistry = new Lazy<PlatformConfigurationRegistry<NavigationMenu>>(() => new PlatformConfigurationRegistry<NavigationMenu>(this));
22                 }
23
24                 public IEnumerable<Page> Targets
25                 {
26                         get { return _targets; }
27                         set
28                         {
29                                 if (_targets.AsEnumerable().SequenceEqual(value))
30                                         return;
31
32                                 foreach (Page page in value)
33                                 {
34                                         VerifyTarget(page);
35                                 }
36
37                                 OnPropertyChanging();
38                                 _targets.Clear();
39                                 _targets.AddRange(value);
40                                 OnPropertyChanged();
41                         }
42                 }
43
44                 public void Add(Page target)
45                 {
46                         if (_targets.Contains(target))
47                                 return;
48                         VerifyTarget(target);
49
50                         OnPropertyChanging("Targets");
51                         _targets.Add(target);
52                         OnPropertyChanged("Targets");
53                 }
54
55                 public void Remove(Page target)
56                 {
57                         if (_targets.Contains(target))
58                         {
59                                 OnPropertyChanging("Targets");
60                                 if (_targets.Remove(target))
61                                         OnPropertyChanged("Targets");
62                         }
63                 }
64
65                 public IPlatformElementConfiguration<T, NavigationMenu> On<T>() where T : IConfigPlatform
66                 {
67                         return _platformConfigurationRegistry.Value.On<T>();
68                 }
69
70                 [EditorBrowsable(EditorBrowsableState.Never)]
71                 public void SendTargetSelected(Page target)
72                 {
73                         Navigation.PushAsync(target);
74                 }
75
76                 void VerifyTarget(Page target)
77                 {
78                         if (target.Icon == null || string.IsNullOrWhiteSpace(target.Icon.File))
79                                 throw new Exception("Icon must be set for each page before adding them to a Navigation Menu");
80                 }
81         }
82 }