using System.Collections.Generic;
using System.Threading.Tasks;
using System.ComponentModel;
namespace Tizen.NUI.Binding
{
///
/// Interface abstracting platform-specific navigation.
///
[EditorBrowsable(EditorBrowsableState.Never)]
internal interface INavigation
{
///
/// Gets the modal navigation stack.
///
IReadOnlyList ModalStack { get; }
///
/// Gets the stack of pages in the navigation.
///
IReadOnlyList NavigationStack { get; }
///
/// Inserts a page in the navigation stack before an existing page in the stack.
///
/// The page to add.
/// The existing page, before which page will be inserted.
void InsertPageBefore(Page page, Page before);
///
/// Asynchronously removes the most recent Page from the navigation stack.
///
/// The Page that had been at the top of the navigation stack.
Task PopAsync();
///
/// Asynchronously removes the most recent Page from the navigation stack, with optional animation.
///
/// Whether to animate the pop.
/// The Page that had been at the top of the navigation stack.
Task PopAsync(bool animated);
///
/// Asynchronously dismisses the most recent modally presented Page.
///
/// An awaitable instance, indicating the PopModalAsync completion. The Task.Result is the Page that has been popped.
Task PopModalAsync();
///
/// Asynchronously dismisses the most recent modally presented Page, with optional animation.
///
/// Whether to animate the pop.
/// An awaitable, indicating the PopModalAsync completion. The Task.Result is the Page that has been popped.
Task PopModalAsync(bool animated);
///
/// Pops all but the root Page off the navigation stack.
///
/// A task representing the asynchronous dismiss operation.
Task PopToRootAsync();
///
/// Pops all but the root Page off the navigation stack, with optional animation.
///
/// Whether to animate the pop.
/// A task representing the asynchronous dismiss operation.
Task PopToRootAsync(bool animated);
///
/// Asynchronously adds a Page to the top of the navigation stack.
///
/// The Page to be pushed on top of the navigation stack.
/// A task that represents the asynchronous push operation.
Task PushAsync(Page page);
///
/// Asynchronously adds a Page to the top of the navigation stack, with optional animation.
///
/// The page to push.
/// Whether to animate the push.
/// A task that represents the asynchronous push operation.
Task PushAsync(Page page, bool animated);
///
/// Presents a Page modally.
///
/// The Page to present modally.
/// An awaitable Task, indicating the PushModal completion.
Task PushModalAsync(Page page);
///
/// Presents a Page modally, with optional animation.
///
/// The page to push.
/// Whether to animate the push.
/// An awaitable Task, indicating the PushModal completion.
Task PushModalAsync(Page page, bool animated);
///
/// Removes the specified page from the navigation stack.
///
/// The page to remove.
void RemovePage(Page page);
}
}