+using System;
using System.Collections.Generic;
+using System.Linq;
using Fitness.Services;
using Tizen.NUI;
using Tizen.NUI.BaseComponents;
/// </summary>
public class NavigationStack : Control, INavigationStack
{
- private Stack<Page> pages = new Stack<Page>();
-
public NavigationStack()
: base()
{
HeightResizePolicy = ResizePolicyType.FillToParent;
}
- public List<Page> Pages { get => new List<Page>(pages); }
+ public List<Page> Pages { get => Children.ConvertAll(x => (Page)x); }
public void Push(Page page)
{
- if (pages.TryPeek(out Page last))
- {
- last.ConnectedPage = page;
- last.InvokeDisappearing();
- }
-
- page.ConnectedPage = last;
Add(page);
- pages.Push(page);
- page.InvokeAppearing();
}
public void Pop()
{
- PopLast();
- ShowLast();
+ if (Children.Count > 0)
+ {
+ Remove(Children[Children.Count - 1]);
+ }
}
public void PopToRoot()
{
- while (pages.Count > 1)
+ while (Children.Count > 1)
{
- PopLast();
+ Pop();
}
+ }
+
+ public override void Add(View child)
+ {
+ if (child is Page page)
+ {
+ var last = PeekPage();
+ if (last != null)
+ {
+ ConnectPages(last, page);
+ HideLast();
+ }
- ShowLast();
+ base.Add(child);
+ ShowLast();
+ }
+ else
+ {
+ throw new ArgumentException("Only Pages can be added to NavigationStack");
+ }
}
- private void PopLast()
+ public override void Remove(View child)
{
- if (pages.TryPeek(out Page last))
+ if (child is Page page)
{
- last.InvokeDisappearing();
- Remove(last);
- pages.Pop();
+ HideLast();
+ base.Remove(child);
+ ShowLast();
}
}
private void ShowLast()
{
- if (pages.TryPeek(out Page current))
+ PeekPage()?.InvokeAppearing();
+ }
+
+ private void HideLast()
+ {
+ PeekPage()?.InvokeDisappearing();
+ }
+
+ private Page PeekPage()
+ {
+ if (Children.Count > 0)
{
- current.InvokeAppearing();
- current.Show();
+ return Children[Children.Count - 1] as Page;
}
+
+ return null;
+ }
+
+ private void ConnectPages(Page page1, Page page2)
+ {
+ page1.ConnectedPage = page2;
+ page2.ConnectedPage = page1;
}
}
}