docfix: Some of the scenegraph overview content did not make sense.
[profile/ivi/qtdeclarative.git] / src / quick / qtquick2.cpp
index 8c855d5..b7b1c06 100644 (file)
@@ -1,38 +1,38 @@
 /****************************************************************************
 **
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: http://www.qt-project.org/
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
 **
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the QtQml module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
 ** 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.
+** Alternatively, 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
+** In addition, as a special exception, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
-**
-**
-**
+** 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.
 **
 **
 ** $QT_END_LICENSE$
 ****************************************************************************/
 
 #include "qtquick2_p.h"
-#include <private/qdeclarativeengine_p.h>
-#include <private/qdeclarativeutilmodule_p.h>
-#include <private/qdeclarativevaluetype_p.h>
+#include <private/qqmlengine_p.h>
+#include <private/qquickutilmodule_p.h>
+#include <private/qquickvaluetypes_p.h>
 #include <private/qquickitemsmodule_p.h>
-#include <private/qquickparticlesmodule_p.h>
-#include <private/qquickwindowmodule_p.h>
-
-#include <private/qdeclarativeenginedebugservice_p.h>
-#include <private/qdeclarativedebugstatesdelegate_p.h>
-#include <private/qdeclarativebinding_p.h>
-#include <private/qdeclarativecontext_p.h>
-#include <QtQuick/private/qdeclarativepropertychanges_p.h>
-#include <QtQuick/private/qdeclarativestate_p.h>
-#include <qdeclarativeproperty.h>
-#include <QtCore/QWeakPointer>
+
+#include <private/qqmlenginedebugservice_p.h>
+#include <private/qqmldebugstatesdelegate_p.h>
+#include <private/qqmlbinding_p.h>
+#include <private/qqmlcontext_p.h>
+#include <private/qquickapplication_p.h>
+#include <QtQuick/private/qquickpropertychanges_p.h>
+#include <QtQuick/private/qquickstate_p.h>
+#include <qqmlproperty.h>
+#include <QtCore/QPointer>
 
 QT_BEGIN_NAMESPACE
 
-class QDeclarativeQtQuick2DebugStatesDelegate : public QDeclarativeDebugStatesDelegate
+class QQmlQtQuick2DebugStatesDelegate : public QQmlDebugStatesDelegate
 {
 public:
-    QDeclarativeQtQuick2DebugStatesDelegate();
-    virtual ~QDeclarativeQtQuick2DebugStatesDelegate();
-    virtual void buildStatesList(QDeclarativeContext *ctxt, bool cleanList);
-    virtual void updateBinding(QDeclarativeContext *context,
-                               const QDeclarativeProperty &property,
+    QQmlQtQuick2DebugStatesDelegate();
+    virtual ~QQmlQtQuick2DebugStatesDelegate();
+    virtual void buildStatesList(bool cleanList, const QList<QPointer<QObject> > &instances);
+    virtual void updateBinding(QQmlContext *context,
+                               const QQmlProperty &property,
                                const QVariant &expression, bool isLiteralValue,
                                const QString &fileName, int line, int column,
                                bool *isBaseState);
@@ -79,37 +78,32 @@ public:
 private:
     void buildStatesList(QObject *obj);
 
-    QList<QWeakPointer<QDeclarativeState> > m_allStates;
+    QList<QPointer<QQuickState> > m_allStates;
 };
 
-QDeclarativeQtQuick2DebugStatesDelegate::QDeclarativeQtQuick2DebugStatesDelegate()
+QQmlQtQuick2DebugStatesDelegate::QQmlQtQuick2DebugStatesDelegate()
 {
 }
 
-QDeclarativeQtQuick2DebugStatesDelegate::~QDeclarativeQtQuick2DebugStatesDelegate()
+QQmlQtQuick2DebugStatesDelegate::~QQmlQtQuick2DebugStatesDelegate()
 {
 }
 
-void QDeclarativeQtQuick2DebugStatesDelegate::buildStatesList(QDeclarativeContext *ctxt, bool cleanList)
+void QQmlQtQuick2DebugStatesDelegate::buildStatesList(bool cleanList,
+                                                      const QList<QPointer<QObject> > &instances)
 {
     if (cleanList)
         m_allStates.clear();
 
-    QDeclarativeContextPrivate *ctxtPriv = QDeclarativeContextPrivate::get(ctxt);
-    for (int ii = 0; ii < ctxtPriv->instances.count(); ++ii) {
-        buildStatesList(ctxtPriv->instances.at(ii));
-    }
-
-    QDeclarativeContextData *child = QDeclarativeContextData::get(ctxt)->childContexts;
-    while (child) {
-        buildStatesList(child->asQDeclarativeContext());
-        child = child->nextChild;
+    //only root context has all instances
+    for (int ii = 0; ii < instances.count(); ++ii) {
+        buildStatesList(instances.at(ii));
     }
 }
 
-void QDeclarativeQtQuick2DebugStatesDelegate::buildStatesList(QObject *obj)
+void QQmlQtQuick2DebugStatesDelegate::buildStatesList(QObject *obj)
 {
-    if (QDeclarativeState *state = qobject_cast<QDeclarativeState *>(obj)) {
+    if (QQuickState *state = qobject_cast<QQuickState *>(obj)) {
         m_allStates.append(state);
     }
 
@@ -119,26 +113,28 @@ void QDeclarativeQtQuick2DebugStatesDelegate::buildStatesList(QObject *obj)
     }
 }
 
-void QDeclarativeQtQuick2DebugStatesDelegate::updateBinding(QDeclarativeContext *context,
-                                                            const QDeclarativeProperty &property,
+void QQmlQtQuick2DebugStatesDelegate::updateBinding(QQmlContext *context,
+                                                            const QQmlProperty &property,
                                                             const QVariant &expression, bool isLiteralValue,
                                                             const QString &fileName, int line, int column,
                                                             bool *inBaseState)
 {
+    typedef QPointer<QQuickState> QuickStatePointer;
     QObject *object = property.object();
     QString propertyName = property.name();
-    foreach (QWeakPointer<QDeclarativeState> statePointer, m_allStates) {
-        if (QDeclarativeState *state = statePointer.data()) {
+    foreach (const QuickStatePointer& statePointer, m_allStates) {
+        if (QQuickState *state = statePointer.data()) {
             // here we assume that the revert list on itself defines the base state
             if (state->isStateActive() && state->containsPropertyInRevertList(object, propertyName)) {
                 *inBaseState = false;
 
-                QDeclarativeBinding *newBinding = 0;
+                QQmlBinding *newBinding = 0;
                 if (!isLiteralValue) {
-                    newBinding = new QDeclarativeBinding(expression.toString(), object, context);
+                    newBinding = new QQmlBinding(expression.toString(), false, object,
+                                                 QQmlContextData::get(context), fileName,
+                                                 line, column);
                     newBinding->setTarget(property);
                     newBinding->setNotifyOnValueChanged(true);
-                    newBinding->setSourceLocation(fileName, line, column);
                 }
 
                 state->changeBindingInRevertList(object, propertyName, newBinding);
@@ -150,12 +146,12 @@ void QDeclarativeQtQuick2DebugStatesDelegate::updateBinding(QDeclarativeContext
     }
 }
 
-bool QDeclarativeQtQuick2DebugStatesDelegate::setBindingForInvalidProperty(QObject *object,
+bool QQmlQtQuick2DebugStatesDelegate::setBindingForInvalidProperty(QObject *object,
                                                                            const QString &propertyName,
                                                                            const QVariant &expression,
                                                                            bool isLiteralValue)
 {
-    if (QDeclarativePropertyChanges *propertyChanges = qobject_cast<QDeclarativePropertyChanges *>(object)) {
+    if (QQuickPropertyChanges *propertyChanges = qobject_cast<QQuickPropertyChanges *>(object)) {
         if (isLiteralValue)
             propertyChanges->changeValue(propertyName, expression);
         else
@@ -166,26 +162,27 @@ bool QDeclarativeQtQuick2DebugStatesDelegate::setBindingForInvalidProperty(QObje
     }
 }
 
-void QDeclarativeQtQuick2DebugStatesDelegate::resetBindingForInvalidProperty(QObject *object, const QString &propertyName)
+void QQmlQtQuick2DebugStatesDelegate::resetBindingForInvalidProperty(QObject *object, const QString &propertyName)
 {
-    if (QDeclarativePropertyChanges *propertyChanges = qobject_cast<QDeclarativePropertyChanges *>(object)) {
+    if (QQuickPropertyChanges *propertyChanges = qobject_cast<QQuickPropertyChanges *>(object)) {
         propertyChanges->removeProperty(propertyName);
     }
 }
 
 
-void QDeclarativeQtQuick2Module::defineModule()
+void QQmlQtQuick2Module::defineModule()
 {
-    QDeclarativeUtilModule::defineModule();
-    QDeclarativeEnginePrivate::defineModule();
+    QQuickUtilModule::defineModule();
+    QQmlEnginePrivate::defineQtQuick2Module();
     QQuickItemsModule::defineModule();
-    QQuickParticlesModule::defineModule();
-    QQuickWindowModule::defineModule();
-    QDeclarativeValueTypeFactory::registerValueTypes();
 
-    if (QDeclarativeEngineDebugService::isDebuggingEnabled()) {
-        QDeclarativeEngineDebugService::instance()->setStatesDelegate(
-                    new QDeclarativeQtQuick2DebugStatesDelegate);
+    qmlRegisterUncreatableType<QQuickApplication>("QtQuick",2,0,"Application", QQuickApplication::tr("Application is an abstract class"));
+
+    QQuickValueTypes::registerValueTypes();
+
+    if (QQmlEngineDebugService::isDebuggingEnabled()) {
+        QQmlEngineDebugService::instance()->setStatesDelegate(
+                    new QQmlQtQuick2DebugStatesDelegate);
     }
 }