c45cb55c741c1fc6f718e334121628d0c2dd04d0
[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 }