diff options
Diffstat (limited to 'src/quicktemplates2')
-rw-r--r-- | src/quicktemplates2/qquickstackview.cpp | 61 | ||||
-rw-r--r-- | src/quicktemplates2/qquickstackview_p.cpp | 53 | ||||
-rw-r--r-- | src/quicktemplates2/qquickstackview_p.h | 7 | ||||
-rw-r--r-- | src/quicktemplates2/qquickstackview_p_p.h | 10 |
4 files changed, 106 insertions, 25 deletions
diff --git a/src/quicktemplates2/qquickstackview.cpp b/src/quicktemplates2/qquickstackview.cpp index 46c1d96e..6fd681c5 100644 --- a/src/quicktemplates2/qquickstackview.cpp +++ b/src/quicktemplates2/qquickstackview.cpp @@ -430,8 +430,11 @@ QQuickItem *QQuickStackView::find(const QJSValue &callback, LoadBehavior behavio An \a operation can be optionally specified as the last argument. Supported operations: - \value StackView.Transition An operation with transitions. + \value StackView.Transition An operation with default transitions (default). \value StackView.Immediate An immediate operation without transitions. + \value StackView.PushTransition An operation with push transitions (since QtQuick.Controls 2.1). + \value StackView.ReplaceTransition An operation with replace transitions (since QtQuick.Controls 2.1). + \value StackView.PopTransition An operation with pop transitions (since QtQuick.Controls 2.1). \sa initialItem */ @@ -447,7 +450,7 @@ void QQuickStackView::push(QQmlV4Function *args) QV4::ExecutionEngine *v4 = args->v4engine(); QV4::Scope scope(v4); - Operation operation = d->elements.isEmpty() ? Immediate : Transition; + Operation operation = d->elements.isEmpty() ? Immediate : PushTransition; QV4::ScopedValue lastArg(scope, (*args)[args->length() - 1]); if (lastArg->isInt32()) operation = static_cast<Operation>(lastArg->toInt32()); @@ -466,8 +469,8 @@ void QQuickStackView::push(QQmlV4Function *args) if (d->pushElements(elements)) { emit depthChanged(); QQuickStackElement *enter = d->elements.top(); - d->startTransition(QQuickStackTransition::enter(QQuickStackTransition::Push, enter, this), - QQuickStackTransition::exit(QQuickStackTransition::Push, exit, this), + d->startTransition(QQuickStackTransition::pushEnter(operation, enter, this), + QQuickStackTransition::pushExit(operation, exit, this), operation == Immediate); d->setCurrentItem(enter->item); } @@ -493,8 +496,11 @@ void QQuickStackView::push(QQmlV4Function *args) An \a operation can be optionally specified as the last argument. Supported operations: - \value StackView.Transition An operation with transitions. + \value StackView.Transition An operation with default transitions (default). \value StackView.Immediate An immediate operation without transitions. + \value StackView.PushTransition An operation with push transitions (since QtQuick.Controls 2.1). + \value StackView.ReplaceTransition An operation with replace transitions (since QtQuick.Controls 2.1). + \value StackView.PopTransition An operation with pop transitions (since QtQuick.Controls 2.1). Examples: \code @@ -540,7 +546,7 @@ void QQuickStackView::pop(QQmlV4Function *args) } } - Operation operation = Transition; + Operation operation = PopTransition; if (argc > 0) { QV4::ScopedValue lastArg(scope, (*args)[argc - 1]); if (lastArg->isInt32()) @@ -555,8 +561,8 @@ void QQuickStackView::pop(QQmlV4Function *args) previousItem = exit->item; } emit depthChanged(); - d->startTransition(QQuickStackTransition::exit(QQuickStackTransition::Pop, exit, this), - QQuickStackTransition::enter(QQuickStackTransition::Pop, enter, this), + d->startTransition(QQuickStackTransition::popExit(operation, exit, this), + QQuickStackTransition::popEnter(operation, enter, this), operation == Immediate); d->setCurrentItem(enter->item); } @@ -612,8 +618,39 @@ void QQuickStackView::pop(QQmlV4Function *args) An \a operation can be optionally specified as the last argument. Supported operations: - \value StackView.Transition An operation with transitions. + \value StackView.Transition An operation with default transitions (default). \value StackView.Immediate An immediate operation without transitions. + \value StackView.PushTransition An operation with push transitions (since QtQuick.Controls 2.1). + \value StackView.ReplaceTransition An operation with replace transitions (since QtQuick.Controls 2.1). + \value StackView.PopTransition An operation with pop transitions (since QtQuick.Controls 2.1). + + The following example illustrates the use of push and pop transitions with replace(). + + \code + StackView { + id: stackView + + initialItem: Component { + id: page + + Page { + Row { + spacing: 20 + anchors.centerIn: parent + + Button { + text: "<" + onClicked: stackView.replace(page, StackView.PopTransition) + } + Button { + text: ">" + onClicked: stackView.replace(page, StackView.PushTransition) + } + } + } + } + } + \endcode \sa push() */ @@ -629,7 +666,7 @@ void QQuickStackView::replace(QQmlV4Function *args) QV4::ExecutionEngine *v4 = args->v4engine(); QV4::Scope scope(v4); - Operation operation = d->elements.isEmpty() ? Immediate : Transition; + Operation operation = d->elements.isEmpty() ? Immediate : ReplaceTransition; QV4::ScopedValue lastArg(scope, (*args)[args->length() - 1]); if (lastArg->isInt32()) operation = static_cast<Operation>(lastArg->toInt32()); @@ -659,8 +696,8 @@ void QQuickStackView::replace(QQmlV4Function *args) if (exit) exit->removal = true; QQuickStackElement *enter = d->elements.top(); - d->startTransition(QQuickStackTransition::exit(QQuickStackTransition::Replace, exit, this), - QQuickStackTransition::enter(QQuickStackTransition::Replace, enter, this), + d->startTransition(QQuickStackTransition::replaceExit(operation, exit, this), + QQuickStackTransition::replaceEnter(operation, enter, this), operation == Immediate); d->setCurrentItem(enter->item); } 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 diff --git a/src/quicktemplates2/qquickstackview_p.h b/src/quicktemplates2/qquickstackview_p.h index 579a6c7f..c76f8167 100644 --- a/src/quicktemplates2/qquickstackview_p.h +++ b/src/quicktemplates2/qquickstackview_p.h @@ -121,8 +121,11 @@ public: Q_INVOKABLE QQuickItem *find(const QJSValue &callback, LoadBehavior behavior = DontLoad); enum Operation { - Transition, - Immediate + Transition = -1, // deprecated + Immediate = 0, + PushTransition = 1, + ReplaceTransition = 2, + PopTransition = 3, }; Q_ENUM(Operation) diff --git a/src/quicktemplates2/qquickstackview_p_p.h b/src/quicktemplates2/qquickstackview_p_p.h index 7fe7f005..c7691c40 100644 --- a/src/quicktemplates2/qquickstackview_p_p.h +++ b/src/quicktemplates2/qquickstackview_p_p.h @@ -140,10 +140,14 @@ public: struct QQuickStackTransition { - enum Operation { Push, Replace, Pop }; + static QQuickStackTransition popExit(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view); + static QQuickStackTransition popEnter(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view); - static QQuickStackTransition exit(Operation operation, QQuickStackElement *element, QQuickStackView *view); - static QQuickStackTransition enter(Operation operation, QQuickStackElement *element, QQuickStackView *view); + static QQuickStackTransition pushExit(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view); + static QQuickStackTransition pushEnter(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view); + + static QQuickStackTransition replaceExit(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view); + static QQuickStackTransition replaceEnter(QQuickStackView::Operation operation, QQuickStackElement *element, QQuickStackView *view); bool target; QQuickStackView::Status status; |