_transitionFinished.On += (s, e) => AnimationFinished?.Invoke(this, EventArgs.Empty);
}
+ /// <summary>
+ ///
+ /// </summary>
+ /// <remarks>
+ /// It is always called when NaviItem was removed.
+ /// (even if removed by NaviItem.Delete())
+ /// This event will be invoked in progress of Pop/Delete operation.
+ /// After called Popped event, Pop/Delete method will be returned
+ /// </remarks>
public event EventHandler<NaviframeEventArgs> Popped;
public event EventHandler AnimationFinished;
public IReadOnlyList<NaviItem> NavigationStack
IntPtr item = Interop.Elementary.elm_naviframe_item_push(Handle, title, IntPtr.Zero, IntPtr.Zero, content.Handle, null);
NaviItem naviItem = NaviItem.FromNativeHandle(item, content);
_itemStack.Add(naviItem);
- naviItem.Popped += (s, e) =>
- {
- _itemStack.Remove(naviItem);
- Popped?.Invoke(this, new NaviframeEventArgs() { Content = naviItem.Content });
- };
+ naviItem.Popped += ItemPoppedHandler;
return naviItem;
}
NaviItem naviItem = NaviItem.FromNativeHandle(item, content);
int idx = _itemStack.IndexOf(before);
_itemStack.Insert(idx, naviItem);
- naviItem.Popped += (s, e) =>
- {
- _itemStack.Remove(naviItem);
- Popped?.Invoke(this, new NaviframeEventArgs() { Content = naviItem.Content });
- };
+ naviItem.Popped += ItemPoppedHandler;
+ return naviItem;
+ }
+
+ public NaviItem InsertAfter(NaviItem after, EvasObject content)
+ {
+ return InsertAfter(after, content, "");
+ }
+ public NaviItem InsertAfter(NaviItem after, EvasObject content, string title)
+ {
+ IntPtr item = Interop.Elementary.elm_naviframe_item_insert_after(Handle, after, title, IntPtr.Zero, IntPtr.Zero, content, null);
+ NaviItem naviItem = NaviItem.FromNativeHandle(item, content);
+ int idx = _itemStack.IndexOf(after);
+ _itemStack.Insert(idx + 1, naviItem);
+ naviItem.Popped += ItemPoppedHandler;
return naviItem;
}
{
return Interop.Elementary.elm_naviframe_add(parent.Handle);
}
+
+ void ItemPoppedHandler(object sender, EventArgs e)
+ {
+ NaviItem item = sender as NaviItem;
+ if (item == null)
+ return;
+ _itemStack.Remove(item);
+ Popped?.Invoke(this, new NaviframeEventArgs() { Content = item.Content });
+ }
}
}
internal static extern IntPtr elm_naviframe_item_insert_before(IntPtr naviframe, IntPtr before, string title, IntPtr prev, IntPtr next, IntPtr content, string style);
[DllImport(Libraries.Elementary)]
+ internal static extern IntPtr elm_naviframe_item_insert_after(IntPtr naviframe, IntPtr after, string title, IntPtr prev, IntPtr next, IntPtr content, string style);
+
+ [DllImport(Libraries.Elementary)]
internal static extern IntPtr elm_naviframe_top_item_get(IntPtr naviframe);
[DllImport(Libraries.Elementary)]
<Compile Include="TC\LabelTest1.cs" />\r
<Compile Include="TC\ListTest1.cs" />\r
<Compile Include="TC\NaviframeTest1.cs" />\r
+ <Compile Include="TC\NaviframeTest2.cs" />\r
<Compile Include="TC\PanelTest1.cs" />\r
<Compile Include="TC\PanelTest2.cs" />\r
<Compile Include="TC\PanesTest1.cs" />\r
<Compile Include="TC\LabelTest1.cs" />\r
<Compile Include="TC\ListTest1.cs" />\r
<Compile Include="TC\NaviframeTest1.cs" />\r
+ <Compile Include="TC\NaviframeTest2.cs" />\r
<Compile Include="TC\PanelTest1.cs" />\r
<Compile Include="TC\PanelTest2.cs" />\r
<Compile Include="TC\PanesTest1.cs" />\r
--- /dev/null
+using System;
+using System.Linq;
+
+namespace ElmSharp.Test
+{
+ public class NaviframeTest2 : TestCaseBase
+ {
+ public override string TestName => "NaviframeTest2";
+ public override string TestDescription => "Naviframe test";
+
+ Naviframe _navi;
+ int _sequence = 0;
+
+ public override void Run(Window window)
+ {
+ Conformant conformant = new Conformant(window);
+ conformant.Show();
+
+ Naviframe navi = new Naviframe(window)
+ {
+ PreserveContentOnPop = true,
+ DefaultBackButtonEnabled = true
+ };
+ _navi = navi;
+
+ navi.Popped += (s, e) =>
+ {
+ Console.WriteLine("----- Naviframe was popped {0:x} ", (int)(IntPtr)e.Content);
+ };
+
+ navi.Push(CreatePage(window), "0 Page");
+ navi.Show();
+ conformant.SetContent(navi);
+ }
+
+ EvasObject CreatePage(Window parent)
+ {
+ Box box = new Box(parent);
+ box.Show();
+
+ Label label = new Label(parent) {
+ Text = string.Format("{0} Page", _sequence++),
+ WeightX = 1,
+ AlignmentX = -1,
+ };
+ Button push = new Button(parent) {
+ Text = "Push",
+ WeightX = 1,
+ AlignmentX = -1,
+ };
+ Button pop = new Button(parent) {
+ Text = "pop",
+ WeightX = 1,
+ AlignmentX = -1,
+ };
+ Button insertBeforeTop = new Button(parent) {
+ Text = "insertBeforeTop",
+ WeightX = 1,
+ AlignmentX = -1,
+ };
+ Button insertAfterTop = new Button(parent) {
+ Text = "insertAfterTop",
+ WeightX = 1,
+ AlignmentX = -1,
+ };
+
+ Button removeTop = new Button(parent)
+ {
+ Text = "removeTop",
+ WeightX = 1,
+ AlignmentX = -1,
+ };
+
+ label.Show();
+ push.Show();
+ pop.Show();
+ insertBeforeTop.Show();
+ insertAfterTop.Show();
+ removeTop.Show();
+
+ push.Clicked += (s, e) =>
+ {
+ _navi.Push(CreatePage(parent), string.Format("{0} Page", _sequence-1));
+ };
+
+ pop.Clicked += (s, e) =>
+ {
+ var item = _navi.NavigationStack.LastOrDefault();
+ int nativePointer = (int)(IntPtr)(item.Content);
+ Console.WriteLine("----- Before Call _navi.Pop() {0:x} ", nativePointer);
+ _navi.Pop();
+ Console.WriteLine("----- After Call _navi.Pop() {0:x} ", nativePointer);
+ };
+
+ insertBeforeTop.Clicked += (s, e) =>
+ {
+ _navi.InsertBefore(_navi.NavigationStack.LastOrDefault(), CreatePage(parent), string.Format("{0} Page", _sequence - 1));
+ };
+
+ insertAfterTop.Clicked += (s, e) =>
+ {
+ _navi.InsertAfter(_navi.NavigationStack.LastOrDefault(), CreatePage(parent), string.Format("{0} Page", _sequence - 1));
+ };
+ removeTop.Clicked += (s, e) =>
+ {
+ var item = _navi.NavigationStack.LastOrDefault();
+ int nativePointer = (int)(IntPtr)(item.Content);
+ Console.WriteLine("----- Before Call NaviItem.Delete() {0:x} ", nativePointer);
+ item.Delete();
+ Console.WriteLine("----- After Call NaviItem.Delete() {0:x} ", nativePointer);
+ };
+
+ box.PackEnd(label);
+ box.PackEnd(push);
+ box.PackEnd(pop);
+ box.PackEnd(insertBeforeTop);
+ box.PackEnd(insertAfterTop);
+ box.PackEnd(removeTop);
+
+ return box;
+ }
+ }
+}