aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util/qdeclarativetransitionmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/util/qdeclarativetransitionmanager.cpp')
-rw-r--r--src/quick/util/qdeclarativetransitionmanager.cpp294
1 files changed, 0 insertions, 294 deletions
diff --git a/src/quick/util/qdeclarativetransitionmanager.cpp b/src/quick/util/qdeclarativetransitionmanager.cpp
deleted file mode 100644
index ebe7805c62..0000000000
--- a/src/quick/util/qdeclarativetransitionmanager.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativetransitionmanager_p_p.h"
-
-#include "qdeclarativetransition_p.h"
-#include "qdeclarativestate_p_p.h"
-
-#include <private/qdeclarativebinding_p.h>
-#include <private/qdeclarativeglobal_p.h>
-#include <private/qdeclarativeproperty_p.h>
-
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-DEFINE_BOOL_CONFIG_OPTION(stateChangeDebug, STATECHANGE_DEBUG);
-
-class QDeclarativeTransitionManagerPrivate
-{
-public:
- QDeclarativeTransitionManagerPrivate()
- : state(0), transitionInstance(0) {}
-
- void applyBindings();
- typedef QList<QDeclarativeSimpleAction> SimpleActionList;
- QDeclarativeState *state;
- QDeclarativeTransitionInstance *transitionInstance;
- QDeclarativeStateOperation::ActionList bindingsList;
- SimpleActionList completeList;
-};
-
-QDeclarativeTransitionManager::QDeclarativeTransitionManager()
-: d(new QDeclarativeTransitionManagerPrivate)
-{
-}
-
-void QDeclarativeTransitionManager::setState(QDeclarativeState *s)
-{
- d->state = s;
-}
-
-QDeclarativeTransitionManager::~QDeclarativeTransitionManager()
-{
- delete d->transitionInstance;
- delete d; d = 0;
-}
-
-bool QDeclarativeTransitionManager::isRunning() const
-{
- return d->transitionInstance && d->transitionInstance->isRunning();
-}
-
-void QDeclarativeTransitionManager::complete()
-{
- d->applyBindings();
-
- for (int ii = 0; ii < d->completeList.count(); ++ii) {
- const QDeclarativeProperty &prop = d->completeList.at(ii).property();
- prop.write(d->completeList.at(ii).value());
- }
-
- d->completeList.clear();
-
- if (d->state)
- static_cast<QDeclarativeStatePrivate*>(QObjectPrivate::get(d->state))->complete();
-
- finished();
-}
-
-void QDeclarativeTransitionManagerPrivate::applyBindings()
-{
- foreach(const QDeclarativeAction &action, bindingsList) {
- if (!action.toBinding.isNull()) {
- QDeclarativePropertyPrivate::setBinding(action.property, action.toBinding.data());
- } else if (action.event) {
- if (action.reverseEvent)
- action.event->reverse();
- else
- action.event->execute();
- }
-
- }
-
- bindingsList.clear();
-}
-
-void QDeclarativeTransitionManager::finished()
-{
-}
-
-void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &list,
- QDeclarativeTransition *transition,
- QObject *defaultTarget)
-{
- cancel();
-
- QDeclarativeStateOperation::ActionList applyList = list;
- // Determine which actions are binding changes and disable any current bindings
- foreach(const QDeclarativeAction &action, applyList) {
- if (action.toBinding)
- d->bindingsList << action;
- if (action.fromBinding)
- QDeclarativePropertyPrivate::setBinding(action.property, 0); // Disable current binding
- if (action.event && action.event->changesBindings()) { //### assume isReversable()?
- d->bindingsList << action;
- action.event->clearBindings();
- }
- }
-
- // Animated transitions need both the start and the end value for
- // each property change. In the presence of bindings, the end values
- // are non-trivial to calculate. As a "best effort" attempt, we first
- // apply all the property and binding changes, then read all the actual
- // final values, then roll back the changes and proceed as normal.
- //
- // This doesn't catch everything, and it might be a little fragile in
- // some cases - but whatcha going to do?
- //
- // Note that we only fast forward if both a transition and bindings are
- // present, as it is unneccessary (and potentially expensive) otherwise.
-
- if (transition && !d->bindingsList.isEmpty()) {
-
- // Apply all the property and binding changes
- for (int ii = 0; ii < applyList.size(); ++ii) {
- const QDeclarativeAction &action = applyList.at(ii);
- if (!action.toBinding.isNull()) {
- QDeclarativePropertyPrivate::setBinding(action.property, action.toBinding.data(), QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
- } else if (!action.event) {
- QDeclarativePropertyPrivate::write(action.property, action.toValue, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
- } else if (action.event->isReversable()) {
- if (action.reverseEvent)
- action.event->reverse(QDeclarativeActionEvent::FastForward);
- else
- action.event->execute(QDeclarativeActionEvent::FastForward);
- }
- }
-
- // Read all the end values for binding changes
- for (int ii = 0; ii < applyList.size(); ++ii) {
- QDeclarativeAction *action = &applyList[ii];
- if (action->event) {
- action->event->saveTargetValues();
- continue;
- }
- const QDeclarativeProperty &prop = action->property;
- if (!action->toBinding.isNull() || !action->toValue.isValid()) {
- action->toValue = prop.read();
- }
- }
-
- // Revert back to the original values
- foreach(const QDeclarativeAction &action, applyList) {
- if (action.event) {
- if (action.event->isReversable()) {
- action.event->clearBindings();
- action.event->rewind();
- action.event->clearBindings(); //### shouldn't be needed
- }
- continue;
- }
-
- if (action.toBinding)
- QDeclarativePropertyPrivate::setBinding(action.property, 0); // Make sure this is disabled during the transition
-
- QDeclarativePropertyPrivate::write(action.property, action.fromValue, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
- }
- }
-
- if (transition) {
- QList<QDeclarativeProperty> touched;
- QDeclarativeTransitionInstance *oldInstance = d->transitionInstance;
- d->transitionInstance = transition->prepare(applyList, touched, this, defaultTarget);
- d->transitionInstance->start();
- if (oldInstance && oldInstance != d->transitionInstance)
- delete oldInstance;
-
- // Modify the action list to remove actions handled in the transition
- for (int ii = 0; ii < applyList.count(); ++ii) {
- const QDeclarativeAction &action = applyList.at(ii);
-
- if (action.event) {
-
- if (action.actionDone) {
- applyList.removeAt(ii);
- --ii;
- }
-
- } else {
-
- if (touched.contains(action.property)) {
- if (action.toValue != action.fromValue)
- d->completeList <<
- QDeclarativeSimpleAction(action, QDeclarativeSimpleAction::EndState);
-
- applyList.removeAt(ii);
- --ii;
- }
-
- }
- }
- }
-
- // Any actions remaining have not been handled by the transition and should
- // be applied immediately. We skip applying bindings, as they are all
- // applied at the end in applyBindings() to avoid any nastiness mid
- // transition
- foreach(const QDeclarativeAction &action, applyList) {
- if (action.event && !action.event->changesBindings()) {
- if (action.event->isReversable() && action.reverseEvent)
- action.event->reverse();
- else
- action.event->execute();
- } else if (!action.event && !action.toBinding) {
- action.property.write(action.toValue);
- }
- }
-#ifndef QT_NO_DEBUG_STREAM
- if (stateChangeDebug()) {
- foreach(const QDeclarativeAction &action, applyList) {
- if (action.event)
- qWarning() << " No transition for event:" << action.event->type();
- else
- qWarning() << " No transition for:" << action.property.object()
- << action.property.name() << "From:" << action.fromValue
- << "To:" << action.toValue;
- }
- }
-#endif
- if (!transition)
- complete();
-}
-
-void QDeclarativeTransitionManager::cancel()
-{
- if (d->transitionInstance && d->transitionInstance->isRunning())
- d->transitionInstance->stop();
-
- for(int i = 0; i < d->bindingsList.count(); ++i) {
- QDeclarativeAction action = d->bindingsList[i];
- if (!action.toBinding.isNull() && action.deletableToBinding) {
- QDeclarativePropertyPrivate::setBinding(action.property, 0);
- action.toBinding.data()->destroy();
- action.toBinding.clear();
- action.deletableToBinding = false;
- } else if (action.event) {
- //### what do we do here?
- }
-
- }
- d->bindingsList.clear();
- d->completeList.clear();
-}
-
-QT_END_NAMESPACE