Remove "All rights reserved" line from license headers.
[profile/ivi/qtdeclarative.git] / src / qtquick1 / util / qdeclarativepropertychanges.cpp
index 776701e..9950915 100644 (file)
@@ -1,8 +1,7 @@
 /****************************************************************************
 **
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** 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.
 **
@@ -35,6 +34,7 @@
 **
 **
 **
+**
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
@@ -48,7 +48,7 @@
 
 #include <QtDeclarative/qdeclarativeinfo.h>
 #include <QtDeclarative/private/qdeclarativecustomparser_p.h>
-#include <QtDeclarative/private/qdeclarativeparser_p.h>
+#include <QtDeclarative/private/qdeclarativescript_p.h>
 #include <QtDeclarative/qdeclarativeexpression.h>
 #include <QtDeclarative/private/qdeclarativebinding_p.h>
 #include <QtDeclarative/qdeclarativecontext.h>
@@ -174,7 +174,8 @@ public:
         reverseExpression = rewindExpression;
     }
 
-    /*virtual void copyOriginals(QDeclarative1ActionEvent *other)
+    virtual bool needsCopy() { return true; }
+    virtual void copyOriginals(QDeclarative1ActionEvent *other)
     {
         QDeclarative1ReplaceSignalHandler *rsh = static_cast<QDeclarative1ReplaceSignalHandler*>(other);
         saveCurrentValues();
@@ -185,7 +186,7 @@ public:
             ownedExpression = rsh->ownedExpression;
             rsh->ownedExpression = 0;
         }
-    }*/
+    }
 
     virtual void rewind() {
         ownedExpression = QDeclarativePropertyPrivate::setSignalExpression(property, rewindExpression);
@@ -243,11 +244,11 @@ public:
 };
 
 void
-QDeclarative1PropertyChangesParser::compileList(QList<QPair<QByteArray, QVariant> > &list,
-                                     const QByteArray &pre,
+QDeclarative1PropertyChangesParser::compileList(QList<QPair<QString, QVariant> > &list,
+                                     const QString &pre,
                                      const QDeclarativeCustomParserProperty &prop)
 {
-    QByteArray propName = pre + prop.name();
+    QString propName = pre + prop.name();
 
     QList<QVariant> values = prop.assignedValues();
     for (int ii = 0; ii < values.count(); ++ii) {
@@ -261,7 +262,7 @@ QDeclarative1PropertyChangesParser::compileList(QList<QPair<QByteArray, QVariant
 
             QDeclarativeCustomParserProperty prop =
                 qvariant_cast<QDeclarativeCustomParserProperty>(value);
-            QByteArray pre = propName + '.';
+            QString pre = propName + QLatin1Char('.');
             compileList(list, pre, prop);
 
         } else {
@@ -273,41 +274,39 @@ QDeclarative1PropertyChangesParser::compileList(QList<QPair<QByteArray, QVariant
 QByteArray
 QDeclarative1PropertyChangesParser::compile(const QList<QDeclarativeCustomParserProperty> &props)
 {
-    QList<QPair<QByteArray, QVariant> > data;
+    QList<QPair<QString, QVariant> > data;
     for(int ii = 0; ii < props.count(); ++ii)
-        compileList(data, QByteArray(), props.at(ii));
+        compileList(data, QString(), props.at(ii));
 
     QByteArray rv;
     QDataStream ds(&rv, QIODevice::WriteOnly);
 
     ds << data.count();
     for(int ii = 0; ii < data.count(); ++ii) {
-        QDeclarativeParser::Variant v = qvariant_cast<QDeclarativeParser::Variant>(data.at(ii).second);
+        QDeclarativeScript::Variant v = qvariant_cast<QDeclarativeScript::Variant>(data.at(ii).second);
         QVariant var;
         bool isScript = v.isScript();
         QDeclarativeBinding::Identifier id = 0;
         switch(v.type()) {
-        case QDeclarativeParser::Variant::Boolean:
+        case QDeclarativeScript::Variant::Boolean:
             var = QVariant(v.asBoolean());
             break;
-        case QDeclarativeParser::Variant::Number:
+        case QDeclarativeScript::Variant::Number:
             var = QVariant(v.asNumber());
             break;
-        case QDeclarativeParser::Variant::String:
+        case QDeclarativeScript::Variant::String:
             var = QVariant(v.asString());
             break;
-        case QDeclarativeParser::Variant::Invalid:
-        case QDeclarativeParser::Variant::Script:
+        case QDeclarativeScript::Variant::Invalid:
+        case QDeclarativeScript::Variant::Script:
             var = QVariant(v.asScript());
             {
-                // Pre-rewrite the expression
-                QString expression = v.asScript();
-                id = rewriteBinding(expression, data.at(ii).first); //### recreates the AST, which is slow
+                id = rewriteBinding(v, data.at(ii).first);
             }
             break;
         }
 
-        ds << QString::fromUtf8(data.at(ii).first) << isScript << var;
+        ds << data.at(ii).first << isScript << var;
         if (isScript)
             ds << id;
     }
@@ -341,7 +340,7 @@ void QDeclarative1PropertyChangesPrivate::decode()
             QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(q), object, data.toString());
             QDeclarativeData *ddata = QDeclarativeData::get(q);
             if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
             QDeclarative1ReplaceSignalHandler *handler = new QDeclarative1ReplaceSignalHandler;
             handler->property = prop;
             handler->expression = expression;
@@ -350,7 +349,7 @@ void QDeclarative1PropertyChangesPrivate::decode()
             QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(q), object, data.toString());
             QDeclarativeData *ddata = QDeclarativeData::get(q);
             if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
             expressions << ExpressionChange(name, id, expression);
         } else {
             properties << qMakePair(name, data);
@@ -484,7 +483,7 @@ QDeclarative1PropertyChanges::ActionList QDeclarative1PropertyChanges::actions()
                 QDeclarativeBinding *newBinding = id != QDeclarativeBinding::Invalid ? QDeclarativeBinding::createBinding(id, object(), qmlContext(this), e->sourceFile(), e->lineNumber()) : 0;
                 if (!newBinding) {
                     newBinding = new QDeclarativeBinding(e->expression(), object(), qmlContext(this));
-                    newBinding->setSourceLocation(e->sourceFile(), e->lineNumber());
+                    newBinding->setSourceLocation(e->sourceFile(), e->lineNumber(), e->columnNumber());
                 }
                 newBinding->setTarget(prop);
                 a.toBinding = newBinding;