aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickstackview_p.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-07-14 13:02:27 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-07-14 13:16:47 +0000
commitbc86a96c56934d98d641844319a905753f56895a (patch)
tree9ffc1537cc828dd7380dd9a348d1743d177419cf /src/quicktemplates2/qquickstackview_p.cpp
parentacecb06f1890feab9fee20345cd768ae61a8ae35 (diff)
StackView: allow choosing which transition to run
This is mostly useful for being able to use either push or pop transition for replace operations, but there doesn't seem to be any reason to limit the others. So, now it's able to run any of the push/pop/replace transitions (or none with "immediate") for any push/pop/replace operation. [ChangeLog][StackView] Made it possible to choose the visual transition type for any operation. This allows using for example push and pop transitions with replace(), which allows implementing an "infinite" back and forward navigation pattern while keeping the amount of instantiated items constant. Change-Id: I93b87cf854c3d6e2f33ef73ef25ffb3456ec27f4 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickstackview_p.cpp')
-rw-r--r--src/quicktemplates2/qquickstackview_p.cpp53
1 files changed, 45 insertions, 8 deletions
diff --git a/src/quicktemplates2/qquickstackview_p.cpp b/src/quicktemplates2/qquickstackview_p.cpp
index c021ba77..5d25793e 100644
--- a/src/quicktemplates2/qquickstackview_p.cpp
+++ b/src/quicktemplates2/qquickstackview_p.cpp
@@ -501,7 +501,7 @@ void QQuickStackViewPrivate::setBusy(bool b)
emit q->busyChanged();
}
-QQuickStackTransition QQuickStackTransition::exit(Operation operation, QQuickStackElement *element, QQuickStackView *view)
+static QQuickStackTransition exitTransition(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view)
{
QQuickStackTransition st;
st.status = QQuickStackView::Deactivating;
@@ -511,21 +511,21 @@ QQuickStackTransition QQuickStackTransition::exit(Operation operation, QQuickSta
const QQuickItemViewTransitioner *transitioner = QQuickStackViewPrivate::get(view)->transitioner;
switch (operation) {
- case Push:
+ case QQuickStackView::PushTransition:
st.target = false;
st.type = QQuickItemViewTransitioner::AddTransition;
st.viewBounds = QRectF();
if (transitioner)
st.transition = transitioner->addDisplacedTransition;
break;
- case Replace:
+ case QQuickStackView::ReplaceTransition:
st.target = false;
st.type = QQuickItemViewTransitioner::MoveTransition;
st.viewBounds = QRectF();
if (transitioner)
st.transition = transitioner->moveDisplacedTransition;
break;
- case Pop:
+ case QQuickStackView::PopTransition:
st.target = true;
st.type = QQuickItemViewTransitioner::RemoveTransition;
st.viewBounds = view->boundingRect();
@@ -540,7 +540,7 @@ QQuickStackTransition QQuickStackTransition::exit(Operation operation, QQuickSta
return st;
}
-QQuickStackTransition QQuickStackTransition::enter(Operation operation, QQuickStackElement *element, QQuickStackView *view)
+static QQuickStackTransition enterTransition(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view)
{
QQuickStackTransition st;
st.status = QQuickStackView::Activating;
@@ -550,21 +550,21 @@ QQuickStackTransition QQuickStackTransition::enter(Operation operation, QQuickSt
const QQuickItemViewTransitioner *transitioner = QQuickStackViewPrivate::get(view)->transitioner;
switch (operation) {
- case Push:
+ case QQuickStackView::PushTransition:
st.target = true;
st.type = QQuickItemViewTransitioner::AddTransition;
st.viewBounds = view->boundingRect();
if (transitioner)
st.transition = transitioner->addTransition;
break;
- case Replace:
+ case QQuickStackView::ReplaceTransition:
st.target = true;
st.type = QQuickItemViewTransitioner::MoveTransition;
st.viewBounds = view->boundingRect();
if (transitioner)
st.transition = transitioner->moveTransition;
break;
- case Pop:
+ case QQuickStackView::PopTransition:
st.target = false;
st.type = QQuickItemViewTransitioner::RemoveTransition;
st.viewBounds = QRectF();
@@ -579,4 +579,41 @@ QQuickStackTransition QQuickStackTransition::enter(Operation operation, QQuickSt
return st;
}
+static QQuickStackView::Operation operationTransition(QQuickStackView::Operation operation, QQuickStackView::Operation transition)
+{
+ if (operation == QQuickStackView::Immediate || operation == QQuickStackView::Transition)
+ return transition;
+ return operation;
+}
+
+QQuickStackTransition QQuickStackTransition::popExit(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view)
+{
+ return exitTransition(operationTransition(operation, QQuickStackView::PopTransition), element, view);
+}
+
+QQuickStackTransition QQuickStackTransition::popEnter(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view)
+{
+ return enterTransition(operationTransition(operation, QQuickStackView::PopTransition), element, view);
+}
+
+QQuickStackTransition QQuickStackTransition::pushExit(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view)
+{
+ return exitTransition(operationTransition(operation, QQuickStackView::PushTransition), element, view);
+}
+
+QQuickStackTransition QQuickStackTransition::pushEnter(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view)
+{
+ return enterTransition(operationTransition(operation, QQuickStackView::PushTransition), element, view);
+}
+
+QQuickStackTransition QQuickStackTransition::replaceExit(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view)
+{
+ return exitTransition(operationTransition(operation, QQuickStackView::ReplaceTransition), element, view);
+}
+
+QQuickStackTransition QQuickStackTransition::replaceEnter(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view)
+{
+ return enterTransition(operationTransition(operation, QQuickStackView::ReplaceTransition), element, view);
+}
+
QT_END_NAMESPACE