size_t getPageCount() const;
/**
+ * @brief Add view to navigator.
+ * @details Adding a view may also result in navigating to it
+ * if it's a first view or this is a #StackNavigator.
+ * @param[in] view View to add
+ */
+ void appendView(View *view);
+
+ /**
* @brief Navigate to existing or new View.
* @param[in] view View to navigate to
*/
return m_PageCount;
}
+void Navigator::appendView(View *view)
+{
+ if (!view) {
+ return;
+ }
+
+ Navigator *stackNavi = m_StackNavi;
+ Navigator *tabNavi = m_TabNavi;
+ if (getType() == StackNavigator) {
+ stackNavi = this;
+ } else {
+ tabNavi = this;
+ }
+
+ NavigatorPage *page = attachView(view);
+ page->onNavigatorAttached(this, view);
+ view->onNavigatorAttached(stackNavi, tabNavi, page);
+
+ ++m_PageCount;
+}
+
void Navigator::navigateTo(View *view)
{
if (!view) {
return;
}
- NavigatorType navigatorType = NavigatorType(getType());
- if (view->getNavigator(navigatorType) != this) {
- Navigator *stackNavi = m_StackNavi;
- Navigator *tabNavi = m_TabNavi;
- if (navigatorType == StackNavigator) {
- stackNavi = this;
- } else {
- tabNavi = this;
- }
-
- page = attachView(view);
- page->onNavigatorAttached(this, view);
- view->onNavigatorAttached(stackNavi, tabNavi, page);
-
- ++m_PageCount;
+ if (view->getNavigator(NavigatorType(getType())) != this) {
+ appendView(view);
+ page = view->getPage();
}
navigateToPage(page);