summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2009-06-30 04:42:16 (GMT)
committerMartin Jones <martin.jones@nokia.com>2009-06-30 04:42:16 (GMT)
commitc9135a429441cb00720866604b79d6613000f7c5 (patch)
treeb338494396f892094afa933d8f10475215752c0a /src
parentdba327eec1a308e61c2bd21941ba982fb9283827 (diff)
parenta77153a64e8559b21a7e6ea53fe26eb2719ce9f5 (diff)
downloadQt-c9135a429441cb00720866604b79d6613000f7c5.zip
Qt-c9135a429441cb00720866604b79d6613000f7c5.tar.gz
Qt-c9135a429441cb00720866604b79d6613000f7c5.tar.bz2
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Conflicts: src/declarative/extra/extra.pri
Diffstat (limited to 'src')
-rw-r--r--src/declarative/debugger/qmldebugclient.cpp4
-rw-r--r--src/declarative/debugger/qmldebugger.cpp3
-rw-r--r--src/declarative/debugger/qmldebugger.h1
-rw-r--r--src/declarative/debugger/qmldebuggerstatus.h1
-rw-r--r--src/declarative/debugger/qmldebugserver.cpp4
-rw-r--r--src/declarative/debugger/qmlobjecttree.cpp3
-rw-r--r--src/declarative/debugger/qmlobjecttree_p.h15
-rw-r--r--src/declarative/debugger/qmlpropertyview.cpp4
-rw-r--r--src/declarative/debugger/qmlpropertyview_p.h11
-rw-r--r--src/declarative/debugger/qmlwatches.cpp4
-rw-r--r--src/declarative/debugger/qmlwatches_p.h11
-rw-r--r--src/declarative/debugger/qpacketprotocol.cpp41
-rw-r--r--src/declarative/debugger/qpacketprotocol.h47
-rw-r--r--src/declarative/extra/extra.pri17
-rw-r--r--src/declarative/extra/qbindablemap.cpp (renamed from src/declarative/util/qbindablemap.cpp)0
-rw-r--r--src/declarative/extra/qbindablemap.h (renamed from src/declarative/util/qbindablemap.h)0
-rw-r--r--src/declarative/extra/qfxanimatedimageitem.cpp (renamed from src/declarative/fx/qfxanimatedimageitem.cpp)0
-rw-r--r--src/declarative/extra/qfxanimatedimageitem.h (renamed from src/declarative/fx/qfxanimatedimageitem.h)0
-rw-r--r--src/declarative/extra/qfxanimatedimageitem_p.h (renamed from src/declarative/fx/qfxanimatedimageitem_p.h)2
-rw-r--r--src/declarative/extra/qfxblendedimage.cpp (renamed from src/declarative/fx/qfxblendedimage.cpp)0
-rw-r--r--src/declarative/extra/qfxblendedimage.h (renamed from src/declarative/fx/qfxblendedimage.h)0
-rw-r--r--src/declarative/extra/qfxflowview.cpp (renamed from src/declarative/fx/qfxflowview.cpp)0
-rw-r--r--src/declarative/extra/qfxflowview.h (renamed from src/declarative/fx/qfxflowview.h)0
-rw-r--r--src/declarative/extra/qmlbehaviour.cpp (renamed from src/declarative/util/qmlbehaviour.cpp)2
-rw-r--r--src/declarative/extra/qmlbehaviour.h (renamed from src/declarative/util/qmlbehaviour.h)0
-rw-r--r--src/declarative/extra/qmldatetimeformatter.cpp (renamed from src/declarative/util/qmldatetimeformatter.cpp)0
-rw-r--r--src/declarative/extra/qmldatetimeformatter.h (renamed from src/declarative/util/qmldatetimeformatter.h)0
-rw-r--r--src/declarative/extra/qmlxmllistmodel.cpp115
-rw-r--r--src/declarative/extra/qmlxmllistmodel.h15
-rw-r--r--src/declarative/fx/fx.pri6
-rw-r--r--src/declarative/fx/qfxanchors.cpp43
-rw-r--r--src/declarative/fx/qfxanchors.h45
-rw-r--r--src/declarative/fx/qfxanchors_p.h24
-rw-r--r--src/declarative/fx/qfxevents_p.h11
-rw-r--r--src/declarative/fx/qfxflickable.cpp4
-rw-r--r--src/declarative/fx/qfxflipable.cpp2
-rw-r--r--src/declarative/fx/qfxgridview.cpp12
-rw-r--r--src/declarative/fx/qfxhighlightfilter.cpp2
-rw-r--r--src/declarative/fx/qfxitem.cpp97
-rw-r--r--src/declarative/fx/qfxitem.h38
-rw-r--r--src/declarative/fx/qfxitem_p.h2
-rw-r--r--src/declarative/fx/qfxlayouts.cpp24
-rw-r--r--src/declarative/fx/qfxlistview.cpp4
-rw-r--r--src/declarative/fx/qfxrect.cpp38
-rw-r--r--src/declarative/fx/qfxrect.h2
-rw-r--r--src/declarative/qml/parser/qmljs.g2
-rw-r--r--src/declarative/qml/parser/qmljsast_p.h2
-rw-r--r--src/declarative/qml/parser/qmljsengine_p.cpp38
-rw-r--r--src/declarative/qml/parser/qmljsengine_p.h49
-rw-r--r--src/declarative/qml/parser/qmljslexer.cpp2
-rw-r--r--src/declarative/qml/parser/qmljsmemorypool_p.h2
-rw-r--r--src/declarative/qml/parser/qmljsnodepool_p.h2
-rw-r--r--src/declarative/qml/parser/qmljsprettypretty.cpp2
-rw-r--r--src/declarative/qml/parser/qmljsprettypretty_p.h2
-rw-r--r--src/declarative/qml/qmlbasicscript.cpp34
-rw-r--r--src/declarative/qml/qmlbasicscript_p.h47
-rw-r--r--src/declarative/qml/qmlbindablevalue.cpp35
-rw-r--r--src/declarative/qml/qmlbindablevalue.h14
-rw-r--r--src/declarative/qml/qmlbindablevalue_p.h17
-rw-r--r--src/declarative/qml/qmlboundsignal_p.h15
-rw-r--r--src/declarative/qml/qmlclassfactory.cpp3
-rw-r--r--src/declarative/qml/qmlclassfactory_p.h11
-rw-r--r--src/declarative/qml/qmlcompiledcomponent_p.h15
-rw-r--r--src/declarative/qml/qmlcompiler.cpp5
-rw-r--r--src/declarative/qml/qmlcompiler_p.h12
-rw-r--r--src/declarative/qml/qmlcomponent.cpp3
-rw-r--r--src/declarative/qml/qmlcomponent.h1
-rw-r--r--src/declarative/qml/qmlcomponent_p.h15
-rw-r--r--src/declarative/qml/qmlcompositetypemanager.cpp4
-rw-r--r--src/declarative/qml/qmlcompositetypemanager_p.h11
-rw-r--r--src/declarative/qml/qmlcontext.h1
-rw-r--r--src/declarative/qml/qmlcontext_p.h13
-rw-r--r--src/declarative/qml/qmlcustomparser_p.h11
-rw-r--r--src/declarative/qml/qmlcustomparser_p_p.h11
-rw-r--r--src/declarative/qml/qmldeclarativedata_p.h11
-rw-r--r--src/declarative/qml/qmldom.cpp21
-rw-r--r--src/declarative/qml/qmldom.h1
-rw-r--r--src/declarative/qml/qmldom_p.h11
-rw-r--r--src/declarative/qml/qmlengine_p.h14
-rw-r--r--src/declarative/qml/qmlexpression.h1
-rw-r--r--src/declarative/qml/qmlinstruction.cpp1
-rw-r--r--src/declarative/qml/qmlinstruction_p.h17
-rw-r--r--src/declarative/qml/qmllist.h1
-rw-r--r--src/declarative/qml/qmlmetaproperty.cpp78
-rw-r--r--src/declarative/qml/qmlmetaproperty.h5
-rw-r--r--src/declarative/qml/qmlmetaproperty_p.h12
-rw-r--r--src/declarative/qml/qmlmetatype.cpp1
-rw-r--r--src/declarative/qml/qmlparser_p.h13
-rw-r--r--src/declarative/qml/qmlparserstatus.h1
-rw-r--r--src/declarative/qml/qmlprivate.h6
-rw-r--r--src/declarative/qml/qmlpropertyvaluesource.cpp2
-rw-r--r--src/declarative/qml/qmlpropertyvaluesource.h7
-rw-r--r--src/declarative/qml/qmlproxymetaobject.cpp2
-rw-r--r--src/declarative/qml/qmlproxymetaobject_p.h12
-rw-r--r--src/declarative/qml/qmlrefcount.cpp4
-rw-r--r--src/declarative/qml/qmlrefcount_p.h11
-rw-r--r--src/declarative/qml/qmlscriptparser.cpp1
-rw-r--r--src/declarative/qml/qmlscriptparser_p.h14
-rw-r--r--src/declarative/qml/qmlstringconverters_p.h11
-rw-r--r--src/declarative/qml/qmlvme.cpp4
-rw-r--r--src/declarative/qml/qmlvme_p.h13
-rw-r--r--src/declarative/qml/qmlvmemetaobject.cpp2
-rw-r--r--src/declarative/qml/qmlvmemetaobject_p.h12
-rw-r--r--src/declarative/qml/qpodvector_p.h12
-rw-r--r--src/declarative/util/qfxglobal.h4
-rw-r--r--src/declarative/util/qfxperf.cpp3
-rw-r--r--src/declarative/util/qfxperf.h11
-rw-r--r--src/declarative/util/qfxview.cpp3
-rw-r--r--src/declarative/util/qmlanimation.cpp939
-rw-r--r--src/declarative/util/qmlanimation.h170
-rw-r--r--src/declarative/util/qmlanimation_p.h89
-rw-r--r--src/declarative/util/qmlbind.cpp1
-rw-r--r--src/declarative/util/qmlconnection.cpp2
-rw-r--r--src/declarative/util/qmlfollow.cpp4
-rw-r--r--src/declarative/util/qmlfont.cpp3
-rw-r--r--src/declarative/util/qmllistmodel.cpp1
-rw-r--r--src/declarative/util/qmllistmodel.h1
-rw-r--r--src/declarative/util/qmlnullablevalue_p.h16
-rw-r--r--src/declarative/util/qmlopenmetaobject.cpp1
-rw-r--r--src/declarative/util/qmlpackage.cpp3
-rw-r--r--src/declarative/util/qmlscript.h3
-rw-r--r--src/declarative/util/qmlsetproperties.cpp67
-rw-r--r--src/declarative/util/qmlsetproperties.h5
-rw-r--r--src/declarative/util/qmlstate.cpp180
-rw-r--r--src/declarative/util/qmlstate.h39
-rw-r--r--src/declarative/util/qmlstate_p.h42
-rw-r--r--src/declarative/util/qmlstategroup.cpp2
-rw-r--r--src/declarative/util/qmlstateoperations.cpp10
-rw-r--r--src/declarative/util/qperformancelog.cpp3
-rw-r--r--src/declarative/util/qperformancelog.h5
-rw-r--r--src/declarative/util/util.pri6
-rw-r--r--src/declarative/widgets/graphicslayouts.h4
-rw-r--r--src/declarative/widgets/graphicswidgets.cpp4
133 files changed, 1648 insertions, 1307 deletions
diff --git a/src/declarative/debugger/qmldebugclient.cpp b/src/declarative/debugger/qmldebugclient.cpp
index 3dacf01..e442333 100644
--- a/src/declarative/debugger/qmldebugclient.cpp
+++ b/src/declarative/debugger/qmldebugclient.cpp
@@ -185,6 +185,6 @@ void QmlDebugClientPlugin::messageReceived(const QByteArray &)
{
}
-#include "qmldebugclient.moc"
-
QT_END_NAMESPACE
+
+#include "qmldebugclient.moc"
diff --git a/src/declarative/debugger/qmldebugger.cpp b/src/declarative/debugger/qmldebugger.cpp
index 9ab3247..aad11de 100644
--- a/src/declarative/debugger/qmldebugger.cpp
+++ b/src/declarative/debugger/qmldebugger.cpp
@@ -62,6 +62,8 @@
#include <private/qmlpropertyview_p.h>
#include <private/qmlwatches_p.h>
+QT_BEGIN_NAMESPACE
+
QmlDebugger::QmlDebugger(QWidget *parent)
: QWidget(parent), m_tree(0), m_warnings(0), m_watchTable(0), m_watches(0),
m_properties(0), m_text(0), m_highlightedItem(0)
@@ -353,3 +355,4 @@ void QmlDebugger::setDebugObject(QObject *obj)
item->setExpanded(true);
}
+QT_END_NAMESPACE
diff --git a/src/declarative/debugger/qmldebugger.h b/src/declarative/debugger/qmldebugger.h
index 10b2f9a..03efeb6 100644
--- a/src/declarative/debugger/qmldebugger.h
+++ b/src/declarative/debugger/qmldebugger.h
@@ -101,4 +101,3 @@ QT_END_NAMESPACE
QT_END_HEADER
#endif // QMLDEBUGGER_H
-
diff --git a/src/declarative/debugger/qmldebuggerstatus.h b/src/declarative/debugger/qmldebuggerstatus.h
index 62336de..a8480f4 100644
--- a/src/declarative/debugger/qmldebuggerstatus.h
+++ b/src/declarative/debugger/qmldebuggerstatus.h
@@ -64,4 +64,3 @@ QT_END_NAMESPACE
QT_END_HEADER
#endif // QLMDEBUGGERSTATUS_P_H
-
diff --git a/src/declarative/debugger/qmldebugserver.cpp b/src/declarative/debugger/qmldebugserver.cpp
index 23e59e0..e055ad5 100644
--- a/src/declarative/debugger/qmldebugserver.cpp
+++ b/src/declarative/debugger/qmldebugserver.cpp
@@ -294,6 +294,6 @@ void QmlDebugServerPlugin::messageReceived(const QByteArray &)
{
}
-#include "qmldebugserver.moc"
-
QT_END_NAMESPACE
+
+#include "qmldebugserver.moc"
diff --git a/src/declarative/debugger/qmlobjecttree.cpp b/src/declarative/debugger/qmlobjecttree.cpp
index 27dc000..8a2358a 100644
--- a/src/declarative/debugger/qmlobjecttree.cpp
+++ b/src/declarative/debugger/qmlobjecttree.cpp
@@ -48,6 +48,8 @@
#include <QtGui/qinputdialog.h>
#include <QtGui/qboxlayout.h>
+QT_BEGIN_NAMESPACE
+
QmlObjectTree::QmlObjectTree(QWidget *parent)
: QTreeWidget(parent)
{
@@ -73,3 +75,4 @@ void QmlObjectTree::mousePressEvent(QMouseEvent *me)
}
}
+QT_END_NAMESPACE
diff --git a/src/declarative/debugger/qmlobjecttree_p.h b/src/declarative/debugger/qmlobjecttree_p.h
index 4e6d484..54d6d8e 100644
--- a/src/declarative/debugger/qmlobjecttree_p.h
+++ b/src/declarative/debugger/qmlobjecttree_p.h
@@ -42,10 +42,23 @@
#ifndef QMLOBJECTTREE_P_H
#define QMLOBJECTTREE_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtGui/qtreewidget.h>
#include <QtCore/qurl.h>
#include <QtCore/qpointer.h>
+QT_BEGIN_NAMESPACE
+
class QmlBindableValue;
class QmlDebuggerItem : public QTreeWidgetItem
{
@@ -82,5 +95,7 @@ protected:
virtual void mousePressEvent(QMouseEvent *);
};
+QT_END_NAMESPACE
+
#endif // QMLOBJECTTREE_P_H
diff --git a/src/declarative/debugger/qmlpropertyview.cpp b/src/declarative/debugger/qmlpropertyview.cpp
index abe1902..76a192d 100644
--- a/src/declarative/debugger/qmlpropertyview.cpp
+++ b/src/declarative/debugger/qmlpropertyview.cpp
@@ -47,6 +47,8 @@
#include <QtDeclarative/qmlbindablevalue.h>
#include <private/qmlboundsignal_p.h>
+QT_BEGIN_NAMESPACE
+
QmlPropertyView::QmlPropertyView(QmlWatches *watches, QWidget *parent)
: QWidget(parent), m_tree(0), m_watches(watches)
{
@@ -221,4 +223,6 @@ void QmlPropertyView::refresh()
setObject(m_object);
}
+QT_END_NAMESPACE
+
#include "qmlpropertyview.moc"
diff --git a/src/declarative/debugger/qmlpropertyview_p.h b/src/declarative/debugger/qmlpropertyview_p.h
index 469a08d..4694482 100644
--- a/src/declarative/debugger/qmlpropertyview_p.h
+++ b/src/declarative/debugger/qmlpropertyview_p.h
@@ -42,6 +42,17 @@
#ifndef QMLPROPERTYVIEW_P_H
#define QMLPROPERTYVIEW_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtGui/qwidget.h>
#include <QtCore/qpointer.h>
#include <private/qmlwatches_p.h>
diff --git a/src/declarative/debugger/qmlwatches.cpp b/src/declarative/debugger/qmlwatches.cpp
index bac4cbd..8fc9e89 100644
--- a/src/declarative/debugger/qmlwatches.cpp
+++ b/src/declarative/debugger/qmlwatches.cpp
@@ -46,6 +46,8 @@
#include <QtDeclarative/qmlmetatype.h>
#include <QtDeclarative/qmlexpression.h>
+QT_BEGIN_NAMESPACE
+
QString QmlWatches::objectToString(QObject *obj)
{
if(!obj)
@@ -301,4 +303,6 @@ QVariant QmlWatches::data(const QModelIndex &idx, int role) const
}
}
+QT_END_NAMESPACE
+
#include "qmlwatches.moc"
diff --git a/src/declarative/debugger/qmlwatches_p.h b/src/declarative/debugger/qmlwatches_p.h
index 6c383a1..dfec979 100644
--- a/src/declarative/debugger/qmlwatches_p.h
+++ b/src/declarative/debugger/qmlwatches_p.h
@@ -42,6 +42,17 @@
#ifndef QMLWATCHES_P_H
#define QMLWATCHES_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qbytearray.h>
#include <QtCore/qobject.h>
#include <QtCore/qpointer.h>
diff --git a/src/declarative/debugger/qpacketprotocol.cpp b/src/declarative/debugger/qpacketprotocol.cpp
index 6911b89..7be23b7 100644
--- a/src/declarative/debugger/qpacketprotocol.cpp
+++ b/src/declarative/debugger/qpacketprotocol.cpp
@@ -1,16 +1,49 @@
/****************************************************************************
**
-** This file is part of the $PACKAGE_NAME$.
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
**
-** Copyright (C) $THISYEAR$ $COMPANY_NAME$.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
-** $QT_EXTENDED_DUAL_LICENSE$
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** 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 version 1.0, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
**
****************************************************************************/
#include "qpacketprotocol.h"
#include <QBuffer>
+QT_BEGIN_NAMESPACE
+
#define MAX_PACKET_SIZE 0x7FFFFFFF
/*!
@@ -458,5 +491,7 @@ QPacketAutoSend::~QPacketAutoSend()
p->send(*this);
}
+QT_END_NAMESPACE
+
#include "qpacketprotocol.moc"
diff --git a/src/declarative/debugger/qpacketprotocol.h b/src/declarative/debugger/qpacketprotocol.h
index 6dd8bda..f3fb44b 100644
--- a/src/declarative/debugger/qpacketprotocol.h
+++ b/src/declarative/debugger/qpacketprotocol.h
@@ -1,10 +1,41 @@
/****************************************************************************
**
-** This file is part of the $PACKAGE_NAME$.
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
**
-** Copyright (C) $THISYEAR$ $COMPANY_NAME$.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
-** $QT_EXTENDED_DUAL_LICENSE$
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** 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 version 1.0, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
**
****************************************************************************/
@@ -14,6 +45,12 @@
#include <QtCore/qobject.h>
#include <QtCore/qdatastream.h>
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Declarative)
+
class QIODevice;
class QBuffer;
class QPacket;
@@ -78,4 +115,8 @@ private:
QPacketProtocol * p;
};
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
#endif
diff --git a/src/declarative/extra/extra.pri b/src/declarative/extra/extra.pri
index 7244f98..fde4e3a 100644
--- a/src/declarative/extra/extra.pri
+++ b/src/declarative/extra/extra.pri
@@ -1,16 +1,29 @@
SOURCES += \
extra/qnumberformat.cpp \
extra/qmlnumberformatter.cpp \
+ extra/qmldatetimeformatter.cpp \
extra/qfxintegermodel.cpp \
extra/qmlfolderlistmodel.cpp \
- extra/qmltimer.cpp
+ extra/qmltimer.cpp \
+ extra/qfxanimatedimageitem.cpp \
+ extra/qfxblendedimage.cpp \
+ extra/qfxflowview.cpp \
+ extra/qmlbehaviour.cpp \
+ extra/qbindablemap.cpp
HEADERS += \
extra/qnumberformat.h \
extra/qmlnumberformatter.h \
+ extra/qmldatetimeformatter.h \
extra/qfxintegermodel.h \
extra/qmlfolderlistmodel.h \
- extra/qmltimer.h
+ extra/qmltimer.h \
+ extra/qfxanimatedimageitem.h \
+ extra/qfxanimatedimageitem_p.h \
+ extra/qfxblendedimage.h \
+ extra/qfxflowview.h \
+ extra/qmlbehaviour.h \
+ extra/qbindablemap.h
contains(QT_CONFIG, xmlpatterns) {
QT+=xmlpatterns
diff --git a/src/declarative/util/qbindablemap.cpp b/src/declarative/extra/qbindablemap.cpp
index c8c8ced..c8c8ced 100644
--- a/src/declarative/util/qbindablemap.cpp
+++ b/src/declarative/extra/qbindablemap.cpp
diff --git a/src/declarative/util/qbindablemap.h b/src/declarative/extra/qbindablemap.h
index c76928d..c76928d 100644
--- a/src/declarative/util/qbindablemap.h
+++ b/src/declarative/extra/qbindablemap.h
diff --git a/src/declarative/fx/qfxanimatedimageitem.cpp b/src/declarative/extra/qfxanimatedimageitem.cpp
index d22959a..d22959a 100644
--- a/src/declarative/fx/qfxanimatedimageitem.cpp
+++ b/src/declarative/extra/qfxanimatedimageitem.cpp
diff --git a/src/declarative/fx/qfxanimatedimageitem.h b/src/declarative/extra/qfxanimatedimageitem.h
index 5d115d7..5d115d7 100644
--- a/src/declarative/fx/qfxanimatedimageitem.h
+++ b/src/declarative/extra/qfxanimatedimageitem.h
diff --git a/src/declarative/fx/qfxanimatedimageitem_p.h b/src/declarative/extra/qfxanimatedimageitem_p.h
index cb5da63..e7d8fb8 100644
--- a/src/declarative/fx/qfxanimatedimageitem_p.h
+++ b/src/declarative/extra/qfxanimatedimageitem_p.h
@@ -53,7 +53,7 @@
// We mean it.
//
-#include "qfximage_p.h"
+#include <private/qfximage_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/fx/qfxblendedimage.cpp b/src/declarative/extra/qfxblendedimage.cpp
index 0c93fef..0c93fef 100644
--- a/src/declarative/fx/qfxblendedimage.cpp
+++ b/src/declarative/extra/qfxblendedimage.cpp
diff --git a/src/declarative/fx/qfxblendedimage.h b/src/declarative/extra/qfxblendedimage.h
index 248cc9d..248cc9d 100644
--- a/src/declarative/fx/qfxblendedimage.h
+++ b/src/declarative/extra/qfxblendedimage.h
diff --git a/src/declarative/fx/qfxflowview.cpp b/src/declarative/extra/qfxflowview.cpp
index 77cd6df..77cd6df 100644
--- a/src/declarative/fx/qfxflowview.cpp
+++ b/src/declarative/extra/qfxflowview.cpp
diff --git a/src/declarative/fx/qfxflowview.h b/src/declarative/extra/qfxflowview.h
index 0e7c2d3..0e7c2d3 100644
--- a/src/declarative/fx/qfxflowview.h
+++ b/src/declarative/extra/qfxflowview.h
diff --git a/src/declarative/util/qmlbehaviour.cpp b/src/declarative/extra/qmlbehaviour.cpp
index 3617541..4beca5e 100644
--- a/src/declarative/util/qmlbehaviour.cpp
+++ b/src/declarative/extra/qmlbehaviour.cpp
@@ -115,7 +115,7 @@ public:
color: "#00ff00"
y: 200 //initial value
y: Behavior {
- NumericAnimation {
+ NumberAnimation {
easing: "easeOutBounce(amplitude:100)"
duration: 200
}
diff --git a/src/declarative/util/qmlbehaviour.h b/src/declarative/extra/qmlbehaviour.h
index 7cc83b2..7cc83b2 100644
--- a/src/declarative/util/qmlbehaviour.h
+++ b/src/declarative/extra/qmlbehaviour.h
diff --git a/src/declarative/util/qmldatetimeformatter.cpp b/src/declarative/extra/qmldatetimeformatter.cpp
index ad0e473..ad0e473 100644
--- a/src/declarative/util/qmldatetimeformatter.cpp
+++ b/src/declarative/extra/qmldatetimeformatter.cpp
diff --git a/src/declarative/util/qmldatetimeformatter.h b/src/declarative/extra/qmldatetimeformatter.h
index 84b27e3..84b27e3 100644
--- a/src/declarative/util/qmldatetimeformatter.h
+++ b/src/declarative/extra/qmldatetimeformatter.h
diff --git a/src/declarative/extra/qmlxmllistmodel.cpp b/src/declarative/extra/qmlxmllistmodel.cpp
index 51905fa..082c9c2 100644
--- a/src/declarative/extra/qmlxmllistmodel.cpp
+++ b/src/declarative/extra/qmlxmllistmodel.cpp
@@ -58,7 +58,7 @@
QT_BEGIN_NAMESPACE
-QML_DEFINE_TYPE(XmlListModelRole, Role)
+QML_DEFINE_TYPE(XmlListModelRole, XmlRole)
QML_DEFINE_TYPE(QmlXmlListModel, XmlListModel)
@@ -105,7 +105,7 @@ public:
m_modelData.clear();
m_size = 0;
m_data = data;
- m_query = query;
+ m_query = QLatin1String("doc($src)") + query;
m_namespaces = namespaces;
m_roleObjects = roleObjects;
if (!isRunning()) {
@@ -224,6 +224,13 @@ void QmlXmlQuery::doSubQueryJob()
//### we might be able to condense even further (query for everything in one go)
for (int i = 0; i < m_roleObjects->size(); ++i) {
XmlListModelRole *role = m_roleObjects->at(i);
+ if (!role->isValid()) {
+ QList<QVariant> resultList;
+ for (int j = 0; j < m_size; ++j)
+ resultList << QVariant();
+ m_modelData << resultList;
+ continue;
+ }
subquery.setQuery(m_prefix + QLatin1String("(let $v := ") + role->query() + QLatin1String(" return if ($v) then ") + role->query() + QLatin1String(" else \"\")"));
QXmlResultItems output3;
subquery.evaluateTo(&output3);
@@ -233,6 +240,9 @@ void QmlXmlQuery::doSubQueryJob()
resultList << item.toAtomicValue(); //### we used to trim strings
item = output3.next();
}
+ //### should warn here if things have gone wrong.
+ while (resultList.count() < m_size)
+ resultList << QVariant();
m_modelData << resultList;
b.seek(0);
}
@@ -308,6 +318,38 @@ void QmlXmlRoleList::append(XmlListModelRole *role) {
model->roleNames << role->name();
++model->highestRole;
}
+
+/*!
+ \qmlclass XmlRole
+ \brief The XmlRole element allows you to specify a role for an XmlListModel.
+*/
+
+/*!
+ \qmlproperty string XmlRole::name
+ The name for the role. This name is used to access the model data for this role from Qml.
+
+ \qml
+ XmlRole { name: "title"; query: "title/string()" }
+
+ ...
+
+ Component {
+ id: Delegate
+ Text { text: title }
+ }
+ \endqml
+*/
+
+/*!
+ \qmlproperty string XmlRole::query
+ The relative XPath query for this role. The query should not start with a '/' (i.e. it must be
+ relative).
+
+ \qml
+ XmlRole { name: "title"; query: "title/string()" }
+ \endqml
+*/
+
//XXX clear, removeAt, and insert need to invalidate any cached data (in data table) as well
// (and the model should emit the appropriate signals)
void QmlXmlRoleList::clear()
@@ -316,12 +358,15 @@ void QmlXmlRoleList::clear()
model->roleNames.clear();
QmlConcreteList<XmlListModelRole *>::clear();
}
+
void QmlXmlRoleList::removeAt(int i)
{
model->roles.removeAt(i);
model->roleNames.removeAt(i);
QmlConcreteList<XmlListModelRole *>::removeAt(i);
}
+
+//### we should enforce unique role names
void QmlXmlRoleList::insert(int i, XmlListModelRole *role)
{
QmlConcreteList<XmlListModelRole *>::insert(i, role);
@@ -332,7 +377,7 @@ void QmlXmlRoleList::insert(int i, XmlListModelRole *role)
/*!
\qmlclass XmlListModel
- \brief The XmlListModel class allows you to specify a model using XQuery.
+ \brief The XmlListModel element allows you to specify a model using XPath expressions.
XmlListModel allows you to construct a model from XML data that can then be used as a data source
for the view classes (ListView, PathView, GridView) and any other classes that interact with model
@@ -343,13 +388,14 @@ void QmlXmlRoleList::insert(int i, XmlListModelRole *role)
XmlListModel {
id: FeedModel
source: "http://rss.news.yahoo.com/rss/oceania"
- query: "doc($src)/rss/channel/item"
- Role { name: "title"; query: "title/string()" }
- Role { name: "link"; query: "link/string()" }
- Role { name: "description"; query: "description/string()" }
+ query: "/rss/channel/item"
+ XmlRole { name: "title"; query: "title/string()" }
+ XmlRole { name: "link"; query: "link/string()" }
+ XmlRole { name: "description"; query: "description/string()" }
}
\endqml
- \note The model is currently static, so the above is really just a snapshot of an RSS feed.
+ \note The model is currently static, so the above is really just a snapshot of an RSS feed. To force a
+ reload of the entire model, you can call the reload function.
*/
QmlXmlListModel::QmlXmlListModel(QObject *parent)
@@ -364,6 +410,11 @@ QmlXmlListModel::~QmlXmlListModel()
{
}
+/*!
+ \qmlproperty list<XmlRole> QmlListModel::roles
+
+ The roles to make available for this model.
+*/
QmlList<XmlListModelRole *> *QmlXmlListModel::roleObjects()
{
Q_D(QmlXmlListModel);
@@ -403,6 +454,10 @@ QString QmlXmlListModel::toString(int role) const
return d->roleNames.at(index);
}
+/*!
+ \qmlproperty url XmlListModel::source
+ The location of the XML data source.
+*/
QUrl QmlXmlListModel::source() const
{
Q_D(const QmlXmlListModel);
@@ -418,6 +473,11 @@ void QmlXmlListModel::setSource(const QUrl &src)
}
}
+/*!
+ \qmlproperty url XmlListModel::query
+ An absolute XPath query representing the base query for the model items. The query should start with
+ a '/' or '//'.
+*/
QString QmlXmlListModel::query() const
{
Q_D(const QmlXmlListModel);
@@ -427,12 +487,21 @@ QString QmlXmlListModel::query() const
void QmlXmlListModel::setQuery(const QString &query)
{
Q_D(QmlXmlListModel);
+ if (!query.startsWith(QLatin1Char('/'))) {
+ qmlInfo(this) << "An XmlListModel query must start with '/' or \"//\"";
+ return;
+ }
+
if (d->query != query) {
d->query = query;
reload();
}
}
+/*!
+ \qmlproperty string XmlListModel::namespaceDeclarations
+ A set of declarations for the namespaces used in the query.
+*/
QString QmlXmlListModel::namespaceDeclarations() const
{
Q_D(const QmlXmlListModel);
@@ -447,12 +516,34 @@ void QmlXmlListModel::setNamespaceDeclarations(const QString &declarations)
reload();
}
}
+
+/*!
+ \qmlproperty enum XmlListModel::status
+
+ This property holds the status of data source loading. It can be one of:
+ \list
+ \o Idle - no data source has been set, or the data source has been loaded
+ \o Loading - the data source is currently being loaded
+ \o Error - an error occurred while loading the data source
+ \endlist
+
+ \sa progress
+
+*/
QmlXmlListModel::Status QmlXmlListModel::status() const
{
Q_D(const QmlXmlListModel);
return d->status;
}
+/*!
+ \qmlproperty real XmlListModel::progress
+
+ This property holds the progress of data source loading, from 0.0 (nothing loaded)
+ to 1.0 (finished).
+
+ \sa status
+*/
qreal QmlXmlListModel::progress() const
{
Q_D(const QmlXmlListModel);
@@ -466,6 +557,12 @@ void QmlXmlListModel::classComplete()
reload();
}
+/*!
+ \qmlmethod XmlListModel::reload()
+
+ Reloads the model. All the existing model data will be removed, and the model
+ will be rebuilt from scratch.
+*/
void QmlXmlListModel::reload()
{
Q_D(QmlXmlListModel);
@@ -484,7 +581,7 @@ void QmlXmlListModel::reload()
emit itemsRemoved(0, count);
if (d->src.isEmpty()) {
- qWarning() << "Can't load empty src string";
+ qmlInfo(this) << "Can't load empty src string";
return;
}
diff --git a/src/declarative/extra/qmlxmllistmodel.h b/src/declarative/extra/qmlxmllistmodel.h
index c6aae4a..0d41456 100644
--- a/src/declarative/extra/qmlxmllistmodel.h
+++ b/src/declarative/extra/qmlxmllistmodel.h
@@ -44,6 +44,7 @@
#include <QtDeclarative/qml.h>
#include <QtDeclarative/QListModelInterface>
+#include <QtDeclarative/qmlinfo.h>
QT_BEGIN_HEADER
@@ -66,7 +67,18 @@ public:
void setName(const QString &name) { m_name = name; }
QString query() const { return m_query; }
- void setQuery(const QString &query) { m_query = query; }
+ void setQuery(const QString &query)
+ {
+ if (query.startsWith(QLatin1Char('/'))) {
+ qmlInfo(this) << "An XmlRole query must not start with '/'";
+ return;
+ }
+ m_query = query;
+ }
+
+ bool isValid() {
+ return !m_name.isEmpty() && !m_query.isEmpty();
+ }
private:
QString m_name;
@@ -88,6 +100,7 @@ class Q_DECLARATIVE_EXPORT QmlXmlListModel : public QListModelInterface, public
Q_PROPERTY(QString namespaceDeclarations READ namespaceDeclarations WRITE setNamespaceDeclarations)
Q_PROPERTY(QmlList<XmlListModelRole *> *roles READ roleObjects)
Q_CLASSINFO("DefaultProperty", "roles")
+
public:
QmlXmlListModel(QObject *parent = 0);
~QmlXmlListModel();
diff --git a/src/declarative/fx/fx.pri b/src/declarative/fx/fx.pri
index 1c819e7..69fada0 100644
--- a/src/declarative/fx/fx.pri
+++ b/src/declarative/fx/fx.pri
@@ -1,8 +1,6 @@
HEADERS += \
fx/qfxanchors.h \
fx/qfxanchors_p.h \
- fx/qfxanimatedimageitem.h \
- fx/qfxblendedimage.h \
fx/qfxblurfilter.h \
fx/qfxcomponentinstance.h \
fx/qfxcomponentinstance_p.h \
@@ -15,7 +13,6 @@ HEADERS += \
fx/qfxfocuspanel.h \
fx/qfxfocusrealm.h \
fx/qfxgridview.h \
- fx/qfxflowview.h \
fx/qfxhighlightfilter.h \
fx/qfximage.h \
fx/qfxpainteditem.h \
@@ -53,8 +50,6 @@ HEADERS += \
SOURCES += \
fx/qfxanchors.cpp \
- fx/qfxanimatedimageitem.cpp \
- fx/qfxblendedimage.cpp \
fx/qfxblurfilter.cpp \
fx/qfxcomponentinstance.cpp \
fx/qfxcontentwrapper.cpp \
@@ -64,7 +59,6 @@ SOURCES += \
fx/qfxfocuspanel.cpp \
fx/qfxfocusrealm.cpp \
fx/qfxgridview.cpp \
- fx/qfxflowview.cpp \
fx/qfxhighlightfilter.cpp \
fx/qfximage.cpp \
fx/qfxpainteditem.cpp \
diff --git a/src/declarative/fx/qfxanchors.cpp b/src/declarative/fx/qfxanchors.cpp
index 3da58a2..9a5c516 100644
--- a/src/declarative/fx/qfxanchors.cpp
+++ b/src/declarative/fx/qfxanchors.cpp
@@ -51,7 +51,6 @@ QT_BEGIN_NAMESPACE
QML_DEFINE_TYPE(QFxAnchors,Anchors)
//TODO: should we cache relationships, so we don't have to check each time (parent-child or sibling)?
-//TODO: baseline support
//TODO: support non-parent, non-sibling (need to find lowest common ancestor)
//### const item?
@@ -402,8 +401,8 @@ void QFxAnchorsPrivate::updateVerticalAnchors()
if (fill || centeredIn || !isItemComplete())
return;
- if (!updatingVerticalAnchor) {
- updatingVerticalAnchor = true;
+ if (updatingVerticalAnchor < 2) {
+ ++updatingVerticalAnchor;
if (usedAnchors & QFxAnchors::HasTopAnchor) {
//Handle stretching
bool invalid = true;
@@ -455,7 +454,7 @@ void QFxAnchorsPrivate::updateVerticalAnchors()
setItemY(position(baseline.item, baseline.anchorLine) - item->baselineOffset());
}
}
- updatingVerticalAnchor = false;
+ --updatingVerticalAnchor;
} else {
// ### Make this certain :)
qmlInfo(item) << "Possible anchor loop detected on vertical anchor.";
@@ -467,8 +466,8 @@ void QFxAnchorsPrivate::updateHorizontalAnchors()
if (fill || centeredIn || !isItemComplete())
return;
- if (!updatingHorizontalAnchor) {
- updatingHorizontalAnchor = true;
+ if (updatingHorizontalAnchor < 2) {
+ ++updatingHorizontalAnchor;
if (usedAnchors & QFxAnchors::HasLeftAnchor) {
//Handle stretching
@@ -514,7 +513,7 @@ void QFxAnchorsPrivate::updateHorizontalAnchors()
}
}
- updatingHorizontalAnchor = false;
+ --updatingHorizontalAnchor;
} else {
// ### Make this certain :)
qmlInfo(item) << "Possible anchor loop detected on horizontal anchor.";
@@ -760,93 +759,99 @@ void QFxAnchors::resetHorizontalCenter()
d->updateHorizontalAnchors();
}
-int QFxAnchors::leftMargin() const
+qreal QFxAnchors::leftMargin() const
{
Q_D(const QFxAnchors);
return d->leftMargin;
}
-void QFxAnchors::setLeftMargin(int offset)
+void QFxAnchors::setLeftMargin(qreal offset)
{
Q_D(QFxAnchors);
if (d->leftMargin == offset)
return;
d->leftMargin = offset;
+ d->updateHorizontalAnchors();
emit leftMarginChanged();
}
-int QFxAnchors::rightMargin() const
+qreal QFxAnchors::rightMargin() const
{
Q_D(const QFxAnchors);
return d->rightMargin;
}
-void QFxAnchors::setRightMargin(int offset)
+void QFxAnchors::setRightMargin(qreal offset)
{
Q_D(QFxAnchors);
if (d->rightMargin == offset)
return;
d->rightMargin = offset;
+ d->updateHorizontalAnchors();
emit rightMarginChanged();
}
-int QFxAnchors::horizontalCenterOffset() const
+qreal QFxAnchors::horizontalCenterOffset() const
{
Q_D(const QFxAnchors);
return d->hCenterOffset;
}
-void QFxAnchors::setHorizontalCenterOffset(int offset)
+void QFxAnchors::setHorizontalCenterOffset(qreal offset)
{
Q_D(QFxAnchors);
if (d->hCenterOffset == offset)
return;
d->hCenterOffset = offset;
+ d->updateHorizontalAnchors();
emit horizontalCenterOffsetChanged();
}
-int QFxAnchors::topMargin() const
+qreal QFxAnchors::topMargin() const
{
Q_D(const QFxAnchors);
return d->topMargin;
}
-void QFxAnchors::setTopMargin(int offset)
+void QFxAnchors::setTopMargin(qreal offset)
{
Q_D(QFxAnchors);
if (d->topMargin == offset)
return;
d->topMargin = offset;
+ d->updateVerticalAnchors();
emit topMarginChanged();
}
-int QFxAnchors::bottomMargin() const
+qreal QFxAnchors::bottomMargin() const
{
Q_D(const QFxAnchors);
return d->bottomMargin;
}
-void QFxAnchors::setBottomMargin(int offset)
+void QFxAnchors::setBottomMargin(qreal offset)
{
Q_D(QFxAnchors);
if (d->bottomMargin == offset)
return;
d->bottomMargin = offset;
+ d->updateVerticalAnchors();
emit bottomMarginChanged();
}
-int QFxAnchors::verticalCenterOffset() const
+qreal QFxAnchors::verticalCenterOffset() const
{
Q_D(const QFxAnchors);
return d->vCenterOffset;
}
-void QFxAnchors::setVerticalCenterOffset(int offset)
+void QFxAnchors::setVerticalCenterOffset(qreal offset)
{
Q_D(QFxAnchors);
if (d->vCenterOffset == offset)
return;
d->vCenterOffset = offset;
+ d->updateVerticalAnchors();
emit verticalCenterOffsetChanged();
}
diff --git a/src/declarative/fx/qfxanchors.h b/src/declarative/fx/qfxanchors.h
index 206a05c..94c22a6 100644
--- a/src/declarative/fx/qfxanchors.h
+++ b/src/declarative/fx/qfxanchors.h
@@ -46,15 +46,13 @@
#include <QtDeclarative/qfxglobal.h>
#include <QtDeclarative/qml.h>
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
-class QFxItem;
-class QFxAnchorsPrivate;
+class QFxItem;
class QFxAnchorLine
{
public:
@@ -93,12 +91,12 @@ class Q_DECLARATIVE_EXPORT QFxAnchors : public QObject
Q_PROPERTY(QFxAnchorLine bottom READ bottom WRITE setBottom RESET resetBottom)
Q_PROPERTY(QFxAnchorLine verticalCenter READ verticalCenter WRITE setVerticalCenter RESET resetVerticalCenter)
Q_PROPERTY(QFxAnchorLine baseline READ baseline WRITE setBaseline RESET resetBaseline)
- Q_PROPERTY(int leftMargin READ leftMargin WRITE setLeftMargin NOTIFY leftMarginChanged)
- Q_PROPERTY(int rightMargin READ rightMargin WRITE setRightMargin NOTIFY rightMarginChanged)
- Q_PROPERTY(int horizontalCenterOffset READ horizontalCenterOffset WRITE setHorizontalCenterOffset NOTIFY horizontalCenterOffsetChanged())
- Q_PROPERTY(int topMargin READ topMargin WRITE setTopMargin NOTIFY topMarginChanged)
- Q_PROPERTY(int bottomMargin READ bottomMargin WRITE setBottomMargin NOTIFY bottomMarginChanged)
- Q_PROPERTY(int verticalCenterOffset READ verticalCenterOffset WRITE setVerticalCenterOffset NOTIFY verticalCenterOffsetChanged())
+ Q_PROPERTY(qreal leftMargin READ leftMargin WRITE setLeftMargin NOTIFY leftMarginChanged)
+ Q_PROPERTY(qreal rightMargin READ rightMargin WRITE setRightMargin NOTIFY rightMarginChanged)
+ Q_PROPERTY(qreal horizontalCenterOffset READ horizontalCenterOffset WRITE setHorizontalCenterOffset NOTIFY horizontalCenterOffsetChanged())
+ Q_PROPERTY(qreal topMargin READ topMargin WRITE setTopMargin NOTIFY topMarginChanged)
+ Q_PROPERTY(qreal bottomMargin READ bottomMargin WRITE setBottomMargin NOTIFY bottomMarginChanged)
+ Q_PROPERTY(qreal verticalCenterOffset READ verticalCenterOffset WRITE setVerticalCenterOffset NOTIFY verticalCenterOffsetChanged())
Q_PROPERTY(QFxItem *fill READ fill WRITE setFill)
Q_PROPERTY(QFxItem *centeredIn READ centeredIn WRITE setCenteredIn)
@@ -121,7 +119,7 @@ public:
QFxAnchorLine left() const;
void setLeft(const QFxAnchorLine &edge);
- Q_INVOKABLE void resetLeft(); //### temporarily invokable for testing
+ void resetLeft();
QFxAnchorLine right() const;
void setRight(const QFxAnchorLine &edge);
@@ -147,23 +145,23 @@ public:
void setBaseline(const QFxAnchorLine &edge);
void resetBaseline();
- int leftMargin() const;
- void setLeftMargin(int);
+ qreal leftMargin() const;
+ void setLeftMargin(qreal);
- int rightMargin() const;
- void setRightMargin(int);
+ qreal rightMargin() const;
+ void setRightMargin(qreal);
- int horizontalCenterOffset() const;
- void setHorizontalCenterOffset(int);
+ qreal horizontalCenterOffset() const;
+ void setHorizontalCenterOffset(qreal);
- int topMargin() const;
- void setTopMargin(int);
+ qreal topMargin() const;
+ void setTopMargin(qreal);
- int bottomMargin() const;
- void setBottomMargin(int);
+ qreal bottomMargin() const;
+ void setBottomMargin(qreal);
- int verticalCenterOffset() const;
- void setVerticalCenterOffset(int);
+ qreal verticalCenterOffset() const;
+ void setVerticalCenterOffset(qreal);
QFxItem *fill() const;
void setFill(QFxItem *);
@@ -188,11 +186,10 @@ private:
Q_DISABLE_COPY(QFxAnchors)
Q_DECLARE_PRIVATE(QFxAnchors)
};
-
QML_DECLARE_TYPE(QFxAnchors)
-
QT_END_NAMESPACE
QT_END_HEADER
+
#endif
diff --git a/src/declarative/fx/qfxanchors_p.h b/src/declarative/fx/qfxanchors_p.h
index 32d8b75..a7c904b 100644
--- a/src/declarative/fx/qfxanchors_p.h
+++ b/src/declarative/fx/qfxanchors_p.h
@@ -56,15 +56,15 @@
#include "qfxanchors.h"
#include "private/qobject_p.h"
-
QT_BEGIN_NAMESPACE
+
class QFxAnchorsPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QFxAnchors)
public:
QFxAnchorsPrivate()
- : updatingMe(false), updatingHorizontalAnchor(false),
- updatingVerticalAnchor(false), item(0), usedAnchors(0), fill(0),
+ : updatingMe(false), updatingHorizontalAnchor(0),
+ updatingVerticalAnchor(0), item(0), usedAnchors(0), fill(0),
centeredIn(0), leftMargin(0), rightMargin(0), topMargin(0),
bottomMargin(0), vCenterOffset(0), hCenterOffset(0)
{
@@ -80,9 +80,9 @@ public:
void remDepend(QFxItem *);
bool isItemComplete() const;
- bool updatingMe:1;
- bool updatingHorizontalAnchor:1;
- bool updatingVerticalAnchor:1;
+ bool updatingMe;
+ int updatingHorizontalAnchor;
+ int updatingVerticalAnchor;
void setItemHeight(qreal);
void setItemWidth(qreal);
@@ -119,12 +119,12 @@ public:
QFxAnchorLine hCenter;
QFxAnchorLine baseline;
- int leftMargin;
- int rightMargin;
- int topMargin;
- int bottomMargin;
- int vCenterOffset;
- int hCenterOffset;
+ qreal leftMargin;
+ qreal rightMargin;
+ qreal topMargin;
+ qreal bottomMargin;
+ qreal vCenterOffset;
+ qreal hCenterOffset;
};
diff --git a/src/declarative/fx/qfxevents_p.h b/src/declarative/fx/qfxevents_p.h
index 2eb29af..60494e6 100644
--- a/src/declarative/fx/qfxevents_p.h
+++ b/src/declarative/fx/qfxevents_p.h
@@ -42,6 +42,17 @@
#ifndef QFXEVENTS_P_H
#define QFXEVENTS_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtDeclarative/qfxglobal.h>
#include <QtDeclarative/qml.h>
#include <QtCore/qobject.h>
diff --git a/src/declarative/fx/qfxflickable.cpp b/src/declarative/fx/qfxflickable.cpp
index bc4a5fc..3580edb 100644
--- a/src/declarative/fx/qfxflickable.cpp
+++ b/src/declarative/fx/qfxflickable.cpp
@@ -112,8 +112,8 @@ void QFxFlickablePrivate::init()
QObject::connect(&_tl, SIGNAL(completed()), q, SLOT(movementEnding()));
q->setAcceptedMouseButtons(Qt::LeftButton);
q->setOptions(QSimpleCanvasItem::ChildMouseFilter | QSimpleCanvasItem::MouseEvents);
- QObject::connect(_flick, SIGNAL(leftChanged()), q, SIGNAL(positionChanged()));
- QObject::connect(_flick, SIGNAL(topChanged()), q, SIGNAL(positionChanged()));
+ QObject::connect(_flick, SIGNAL(xChanged()), q, SIGNAL(positionChanged()));
+ QObject::connect(_flick, SIGNAL(yChanged()), q, SIGNAL(positionChanged()));
QObject::connect(&elasticX, SIGNAL(updated()), q, SLOT(ticked()));
QObject::connect(&elasticY, SIGNAL(updated()), q, SLOT(ticked()));
QObject::connect(q, SIGNAL(heightChanged()), q, SLOT(heightChange()));
diff --git a/src/declarative/fx/qfxflipable.cpp b/src/declarative/fx/qfxflipable.cpp
index 4c02e74..9595724 100644
--- a/src/declarative/fx/qfxflipable.cpp
+++ b/src/declarative/fx/qfxflipable.cpp
@@ -94,7 +94,7 @@ Flipable {
]
transitions: [
Transition {
- NumericAnimation {
+ NumberAnimation {
easing: "easeInOutQuad"
properties: "rotation"
}
diff --git a/src/declarative/fx/qfxgridview.cpp b/src/declarative/fx/qfxgridview.cpp
index a6ffbb9..11b630a 100644
--- a/src/declarative/fx/qfxgridview.cpp
+++ b/src/declarative/fx/qfxgridview.cpp
@@ -368,8 +368,8 @@ void QFxGridViewPrivate::releaseItem(FxGridItem *item)
if (!item)
return;
if (trackedItem == item) {
- QObject::disconnect(trackedItem->item, SIGNAL(topChanged()), q, SLOT(trackedPositionChanged()));
- QObject::disconnect(trackedItem->item, SIGNAL(leftChanged()), q, SLOT(trackedPositionChanged()));
+ QObject::disconnect(trackedItem->item, SIGNAL(yChanged()), q, SLOT(trackedPositionChanged()));
+ QObject::disconnect(trackedItem->item, SIGNAL(xChanged()), q, SLOT(trackedPositionChanged()));
trackedItem = 0;
}
if (model->release(item->item) == 0) {
@@ -548,15 +548,15 @@ void QFxGridViewPrivate::updateTrackedItem()
item = highlight;
if (trackedItem && item != trackedItem) {
- QObject::disconnect(trackedItem->item, SIGNAL(topChanged()), q, SLOT(trackedPositionChanged()));
- QObject::disconnect(trackedItem->item, SIGNAL(leftChanged()), q, SLOT(trackedPositionChanged()));
+ QObject::disconnect(trackedItem->item, SIGNAL(yChanged()), q, SLOT(trackedPositionChanged()));
+ QObject::disconnect(trackedItem->item, SIGNAL(xChanged()), q, SLOT(trackedPositionChanged()));
trackedItem = 0;
}
if (!trackedItem && item) {
trackedItem = item;
- QObject::connect(trackedItem->item, SIGNAL(topChanged()), q, SLOT(trackedPositionChanged()));
- QObject::connect(trackedItem->item, SIGNAL(leftChanged()), q, SLOT(trackedPositionChanged()));
+ QObject::connect(trackedItem->item, SIGNAL(yChanged()), q, SLOT(trackedPositionChanged()));
+ QObject::connect(trackedItem->item, SIGNAL(xChanged()), q, SLOT(trackedPositionChanged()));
q->trackedPositionChanged();
}
if (trackedItem)
diff --git a/src/declarative/fx/qfxhighlightfilter.cpp b/src/declarative/fx/qfxhighlightfilter.cpp
index 1671fc6..78a91af 100644
--- a/src/declarative/fx/qfxhighlightfilter.cpp
+++ b/src/declarative/fx/qfxhighlightfilter.cpp
@@ -80,7 +80,7 @@ Text {
text: "Highlight"
filter: Highlight {
source: "pics/highlight.png"
- xOffset: NumericAnimation {
+ xOffset: NumberAnimation {
running: true
repeat: true
from: 320
diff --git a/src/declarative/fx/qfxitem.cpp b/src/declarative/fx/qfxitem.cpp
index 73786a8..1c35290 100644
--- a/src/declarative/fx/qfxitem.cpp
+++ b/src/declarative/fx/qfxitem.cpp
@@ -65,10 +65,10 @@
#include <qsimplecanvasfilter.h>
#include <qmlcomponent.h>
-
QT_BEGIN_NAMESPACE
-#ifndef INT_MAX
-#define INT_MAX 2147483647
+
+#ifndef FLT_MAX
+#define FLT_MAX 1E+37
#endif
QML_DEFINE_NOCREATE_TYPE(QFxContents)
@@ -123,84 +123,92 @@ QML_DEFINE_NOCREATE_TYPE(QSimpleCanvasFilter)
*/
-QFxContents::QFxContents() : _height(0), _width(0)
+QFxContents::QFxContents() : m_height(0), m_width(0)
{
}
/*!
+ \qmlproperty qreal Item::contents.width
+ \qmlproperty qreal Item::contents.height
+
+ The contents properties allow an item access to the size of its
+ children. This property is useful if you have an item that needs to be
+ sized to fit its children.
+/*!
\property QFxContents::height
\brief The height of the contents.
*/
-int QFxContents::height() const
+qreal QFxContents::height() const
{
- return _height;
+ return m_height;
}
/*!
\property QFxContents::width
\brief The width of the contents.
*/
-int QFxContents::width() const
+qreal QFxContents::width() const
{
- return _width;
+ return m_width;
}
//TODO: optimization: only check sender(), if there is one
void QFxContents::calcHeight()
{
- int oldheight = _height;
+ qreal oldheight = m_height;
- int top = INT_MAX;
- int bottom = 0;
+ qreal top = FLT_MAX;
+ qreal bottom = 0;
- const QList<QSimpleCanvasItem *> &children = _item->QSimpleCanvasItem::children();
+ const QList<QSimpleCanvasItem *> &children = m_item->QSimpleCanvasItem::children();
for (int i = 0; i < children.count(); ++i) {
const QSimpleCanvasItem *child = children.at(i);
- int y = int(child->y());
+ qreal y = child->y();
if (y + child->height() > bottom)
bottom = y + child->height();
if (y < top)
top = y;
}
- _height = bottom - top;
+ m_height = qMax(bottom - top, qreal(0.0));
- if (_height != oldheight)
+ if (m_height != oldheight)
emit heightChanged();
}
//TODO: optimization: only check sender(), if there is one
void QFxContents::calcWidth()
{
- int oldwidth = _width;
+ qreal oldwidth = m_width;
- int left = INT_MAX;
- int right = 0;
- const QList<QSimpleCanvasItem *> &children = _item->QSimpleCanvasItem::children();
+ qreal left = FLT_MAX;
+ qreal right = 0;
+
+ const QList<QSimpleCanvasItem *> &children = m_item->QSimpleCanvasItem::children();
for (int i = 0; i < children.count(); ++i) {
const QSimpleCanvasItem *child = children.at(i);
- int x = int(child->x());
+ qreal x = int(child->x());
if (x + child->width() > right)
right = x + child->width();
if (x < left)
left = x;
}
- _width = right - left;
+ m_width = qMax(right - left, qreal(0.0));
- if (_width != oldwidth)
+ if (m_width != oldwidth)
emit widthChanged();
}
void QFxContents::setItem(QFxItem *item)
{
- _item = item;
+ m_item = item;
- const QList<QSimpleCanvasItem *> &children = _item->QSimpleCanvasItem::children();
+ const QList<QSimpleCanvasItem *> &children = m_item->QSimpleCanvasItem::children();
for (int i = 0; i < children.count(); ++i) {
const QSimpleCanvasItem *child = children.at(i);
connect(child, SIGNAL(heightChanged()), this, SLOT(calcHeight()));
- connect(child, SIGNAL(topChanged()), this, SLOT(calcHeight()));
+ connect(child, SIGNAL(yChanged()), this, SLOT(calcHeight()));
connect(child, SIGNAL(widthChanged()), this, SLOT(calcWidth()));
- connect(child, SIGNAL(leftChanged()), this, SLOT(calcWidth()));
+ connect(child, SIGNAL(xChanged()), this, SLOT(calcWidth()));
}
calcHeight();
@@ -268,15 +276,15 @@ void QFxContents::setItem(QFxItem *item)
*/
/*!
- \fn void QFxItem::leftChanged()
+ \fn void QFxItem::xChanged()
- This signal is emitted when the left coordinate of the item changes.
+ This signal is emitted when the x coordinate of the item changes.
*/
/*!
- \fn void QFxItem::topChanged()
+ \fn void QFxItem::yChanged()
- This signal is emitted when the top coordinate of the item changes.
+ This signal is emitted when the y coordinate of the item changes.
*/
/*!
@@ -925,8 +933,8 @@ void QFxItem::qmlLoaded()
/*!
\qmlproperty real Item::x
\qmlproperty real Item::y
- \qmlproperty int Item::width
- \qmlproperty int Item::height
+ \qmlproperty real Item::width
+ \qmlproperty real Item::height
Defines the item's position and size relative to its parent.
@@ -1067,11 +1075,11 @@ void QFxItem::geometryChanged(const QRectF &newGeometry,
}
if (newGeometry.x() != oldGeometry.x())
- emit leftChanged();
+ emit xChanged();
if (newGeometry.width() != oldGeometry.width())
emit widthChanged();
if (newGeometry.y() != oldGeometry.y())
- emit topChanged();
+ emit yChanged();
if (newGeometry.height() != oldGeometry.height())
emit heightChanged();
@@ -1346,13 +1354,14 @@ QFxAnchorLine QFxItem::baseline() const
\qmlproperty AnchorLine Item::anchors.baseline
\qmlproperty Item Item::anchors.fill
-
- \qmlproperty int Item::anchors.topMargin
- \qmlproperty int Item::anchors.bottomMargin
- \qmlproperty int Item::anchors.leftMargin
- \qmlproperty int Item::anchors.rightMargin
- \qmlproperty int Item::anchors.horizontalCenterOffset
- \qmlproperty int Item::anchors.verticalCenterOffset
+ \qmlproperty Item Item::anchors.centeredIn
+
+ \qmlproperty real Item::anchors.topMargin
+ \qmlproperty real Item::anchors.bottomMargin
+ \qmlproperty real Item::anchors.leftMargin
+ \qmlproperty real Item::anchors.rightMargin
+ \qmlproperty real Item::anchors.horizontalCenterOffset
+ \qmlproperty real Item::anchors.verticalCenterOffset
Anchors provide a way to position an item by specifying its
relationship with other items.
@@ -1411,11 +1420,11 @@ QFxAnchorLine QFxItem::baseline() const
For non-text items, a default baseline offset of 0 is used.
*/
-int QFxItem::baselineOffset() const
+qreal QFxItem::baselineOffset() const
{
Q_D(const QFxItem);
if (!d->_baselineOffset.isValid()) {
- return 0;
+ return 0.0;
} else
return d->_baselineOffset;
}
@@ -1423,7 +1432,7 @@ int QFxItem::baselineOffset() const
/*!
\internal
*/
-void QFxItem::setBaselineOffset(int offset)
+void QFxItem::setBaselineOffset(qreal offset)
{
Q_D(QFxItem);
if (offset == d->_baselineOffset)
diff --git a/src/declarative/fx/qfxitem.h b/src/declarative/fx/qfxitem.h
index 3c872e1..67a4553 100644
--- a/src/declarative/fx/qfxitem.h
+++ b/src/declarative/fx/qfxitem.h
@@ -53,7 +53,6 @@
#include <QtDeclarative/qmlcomponent.h>
#include <QtDeclarative/qmlstate.h>
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -63,14 +62,14 @@ QT_MODULE(Declarative)
class Q_DECLARATIVE_EXPORT QFxContents : public QObject
{
Q_OBJECT
- Q_PROPERTY(int height READ height NOTIFY heightChanged)
- Q_PROPERTY(int width READ width NOTIFY widthChanged)
+ Q_PROPERTY(qreal height READ height NOTIFY heightChanged)
+ Q_PROPERTY(qreal width READ width NOTIFY widthChanged)
public:
QFxContents();
- int height() const;
+ qreal height() const;
- int width() const;
+ qreal width() const;
void setItem(QFxItem *item);
@@ -83,9 +82,9 @@ Q_SIGNALS:
void widthChanged();
private:
- QFxItem *_item;
- int _height;
- int _width;
+ QFxItem *m_item;
+ qreal m_height;
+ qreal m_width;
};
QML_DECLARE_TYPE(QFxContents)
Q_DECLARE_OPERATORS_FOR_FLAGS(QFxAnchors::UsedAnchors)
@@ -113,14 +112,11 @@ class Q_DECLARATIVE_EXPORT QFxItem : public QSimpleCanvasItem, public QmlParserS
Q_PROPERTY(QString state READ state WRITE setState NOTIFY stateChanged)
Q_PROPERTY(QUrl qml READ qml WRITE setQml NOTIFY qmlChanged)
Q_PROPERTY(QFxItem *qmlItem READ qmlItem NOTIFY qmlChanged)
- Q_PROPERTY(qreal x READ x WRITE setX NOTIFY leftChanged)
- Q_PROPERTY(qreal y READ y WRITE setY NOTIFY topChanged)
+ Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
+ Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
Q_PROPERTY(qreal z READ z WRITE setZ)
- Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
- Q_PROPERTY(bool flipVertically READ flipVertically WRITE setFlipVertically)
- Q_PROPERTY(bool flipHorizontally READ flipHorizontally WRITE setFlipHorizontally)
- Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged)
- Q_PROPERTY(int baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged)
+ Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY widthChanged)
+ Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY heightChanged)
Q_PROPERTY(QFxAnchorLine left READ left)
Q_PROPERTY(QFxAnchorLine right READ right)
Q_PROPERTY(QFxAnchorLine horizontalCenter READ horizontalCenter)
@@ -128,6 +124,9 @@ class Q_DECLARATIVE_EXPORT QFxItem : public QSimpleCanvasItem, public QmlParserS
Q_PROPERTY(QFxAnchorLine bottom READ bottom)
Q_PROPERTY(QFxAnchorLine verticalCenter READ verticalCenter)
Q_PROPERTY(QFxAnchorLine baseline READ baseline)
+ Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged)
+ Q_PROPERTY(bool flipVertically READ flipVertically WRITE setFlipVertically)
+ Q_PROPERTY(bool flipHorizontally READ flipHorizontally WRITE setFlipHorizontally)
Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged)
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged)
@@ -179,8 +178,8 @@ public:
bool flipHorizontally() const;
void setFlipHorizontally(bool);
- int baselineOffset() const;
- void setBaselineOffset(int);
+ qreal baselineOffset() const;
+ void setBaselineOffset(qreal);
qreal rotation() const;
void setRotation(qreal);
@@ -213,10 +212,10 @@ public Q_SLOTS:
void newChild(const QString &url);
Q_SIGNALS:
- void leftChanged();
+ void xChanged();
+ void yChanged();
void widthChanged();
void heightChanged();
- void topChanged();
void baselineOffsetChanged();
void stateChanged(const QString &);
void focusChanged();
@@ -274,4 +273,5 @@ QML_DECLARE_TYPE(QSimpleCanvasFilter)
QT_END_NAMESPACE
QT_END_HEADER
+
#endif // QFXITEM_H
diff --git a/src/declarative/fx/qfxitem_p.h b/src/declarative/fx/qfxitem_p.h
index b38d877..32e8aef 100644
--- a/src/declarative/fx/qfxitem_p.h
+++ b/src/declarative/fx/qfxitem_p.h
@@ -138,7 +138,7 @@ public:
QList<QUrl> _qmlnewloading;
QList<QmlComponent*> _qmlnewcomp;
- QmlNullableValue<int> _baselineOffset;
+ QmlNullableValue<qreal> _baselineOffset;
float _rotation;
bool _classComplete:1;
diff --git a/src/declarative/fx/qfxlayouts.cpp b/src/declarative/fx/qfxlayouts.cpp
index a975778..e27135c 100644
--- a/src/declarative/fx/qfxlayouts.cpp
+++ b/src/declarative/fx/qfxlayouts.cpp
@@ -132,7 +132,7 @@ BaseLayout {
id: layout
y: 0
move: Transition {
- NumericAnimation {
+ NumberAnimation {
properties: "y"
ease: "easeOutBounce"
}
@@ -161,7 +161,7 @@ BaseLayout {
id: layout
y: 0
add: Transition {
- NumericAnimation {
+ NumberAnimation {
target: layout.item
properties: "opacity"
from: 0
@@ -196,7 +196,7 @@ BaseLayout {
id: layout
y: 0
remove: Transition {
- NumericAnimation {
+ NumberAnimation {
target: layout.item
properties: "opacity"
from: 1
@@ -512,7 +512,7 @@ VerticalLayout {
VerticalLayout {
id: layout
remove: Transition {
- NumericAnimation {
+ NumberAnimation {
target: layout.item
properties: "opacity"
from: 1
@@ -539,7 +539,7 @@ VerticalLayout {
VerticalLayout {
id: layout
add: Transition {
- NumericAnimation {
+ NumberAnimation {
target: layout.item
properties: "opacity"
from: 0
@@ -566,7 +566,7 @@ VerticalLayout {
VerticalLayout {
id: layout
move: Transition {
- NumericAnimation {
+ NumberAnimation {
properties: "y"
ease: "easeOutBounce"
}
@@ -683,7 +683,7 @@ HorizontalLayout {
HorizontalLayout {
id: layout
remove: Transition {
- NumericAnimation {
+ NumberAnimation {
target: layout.item
properties: "opacity"
from: 1
@@ -705,7 +705,7 @@ HorizontalLayout {
HorizontalLayout {
id: layout
add: Transition {
- NumericAnimation {
+ NumberAnimation {
target: layout.item
properties: "opacity"
from: 0
@@ -727,7 +727,7 @@ HorizontalLayout {
HorizontalLayout {
id: layout
move: Transition {
- NumericAnimation {
+ NumberAnimation {
properties: "x"
ease: "easeOutBounce"
}
@@ -875,7 +875,7 @@ GridLayout {
GridLayout {
id: layout
remove: Transition {
- NumericAnimation {
+ NumberAnimation {
target: layout.item
properties: "opacity"
from: 1
@@ -900,7 +900,7 @@ GridLayout {
GridLayout {
id: layout
add: Transition {
- NumericAnimation {
+ NumberAnimation {
target: layout.item
properties: "opacity"
from: 0
@@ -923,7 +923,7 @@ GridLayout {
GridLayout {
id: layout
move: Transition {
- NumericAnimation {
+ NumberAnimation {
properties: "x,y"
ease: "easeOutBounce"
}
diff --git a/src/declarative/fx/qfxlistview.cpp b/src/declarative/fx/qfxlistview.cpp
index a8c0747..889cfdd 100644
--- a/src/declarative/fx/qfxlistview.cpp
+++ b/src/declarative/fx/qfxlistview.cpp
@@ -444,7 +444,7 @@ void QFxListViewPrivate::releaseItem(FxListItem *item)
else
QObject::disconnect(item->item, SIGNAL(widthChanged()), q, SLOT(itemResized()));
if (trackedItem == item) {
- const char *notifier1 = orient == Qt::Vertical ? SIGNAL(topChanged()) : SIGNAL(leftChanged());
+ const char *notifier1 = orient == Qt::Vertical ? SIGNAL(yChanged()) : SIGNAL(xChanged());
const char *notifier2 = orient == Qt::Vertical ? SIGNAL(heightChanged()) : SIGNAL(widthChanged());
QObject::disconnect(trackedItem->item, notifier1, q, SLOT(trackedPositionChanged()));
QObject::disconnect(trackedItem->item, notifier2, q, SLOT(trackedPositionChanged()));
@@ -588,7 +588,7 @@ void QFxListViewPrivate::updateTrackedItem()
if (highlight)
item = highlight;
- const char *notifier1 = orient == Qt::Vertical ? SIGNAL(topChanged()) : SIGNAL(leftChanged());
+ const char *notifier1 = orient == Qt::Vertical ? SIGNAL(yChanged()) : SIGNAL(xChanged());
const char *notifier2 = orient == Qt::Vertical ? SIGNAL(heightChanged()) : SIGNAL(widthChanged());
if (trackedItem && item != trackedItem) {
diff --git a/src/declarative/fx/qfxrect.cpp b/src/declarative/fx/qfxrect.cpp
index fd8d9ca..0536f12 100644
--- a/src/declarative/fx/qfxrect.cpp
+++ b/src/declarative/fx/qfxrect.cpp
@@ -55,9 +55,9 @@ QML_DEFINE_TYPE(QFxGradient,Gradient)
\brief The QFxPen class provides a pen used for drawing rect borders on a QFxView.
By default, the pen is invalid and nothing is drawn. You must either set a color (then the default
- width is 0) or a width (then the default color is black).
+ width is 1) or a width (then the default color is black).
- A width of 0 indicates a cosmetic pen, a single-pixel line on the border of the item being painted.
+ A width of 1 indicates is a single-pixel line on the border of the item being painted.
Example:
\qml
@@ -68,9 +68,9 @@ QML_DEFINE_TYPE(QFxGradient,Gradient)
/*! \property QFxPen::width
\brief the width of the pen.
- A width of 0 is a single-pixel line on the border of the item being painted.
+ A width of 1 is a single-pixel line on the border of the item being painted.
- If the width is less than 0 the pen is considered invalid and won't be used.
+ If the width is less than 1 the pen is considered invalid and won't be used.
*/
/*!
@@ -103,18 +103,18 @@ void QFxPen::setColor(const QColor &c)
\brief the width of the pen.
\qml
- // rect with green border using hexidecimal notation
Rect { pen.width: 4 }
\endqml
- A width of 0 creates a thin line. For no line, use a negative width or a transparent color.
+ A width of 1 creates a thin line. For no line, use a width of 0 or a transparent color.
- Odd pen widths generally lead to half-pixel painting.
+ To keep the border smooth (rather than blurry), odd pen widths cause the rect to be painted at
+ a half-pixel offset;
*/
void QFxPen::setWidth(int w)
{
_width = w;
- _valid = (_width < 0) ? false : true;
+ _valid = (_width < 1) ? false : true;
emit updated();
}
@@ -505,7 +505,10 @@ void QFxRect::generateRoundedRect()
p.setPen(Qt::NoPen);
}
p.setBrush(d->color);
- p.drawRoundedRect((pw+1)/2, (pw+1)/2, d->rectImage.width()-(pw+1)/2*2, d->rectImage.height()-(pw+1)/2*2, d->radius, d->radius);
+ if (pw%2)
+ p.drawRoundedRect(QRectF(qreal(pw)/2+1, qreal(pw)/2+1, d->rectImage.width()-(pw+1), d->rectImage.height()-(pw+1)), d->radius, d->radius);
+ else
+ p.drawRoundedRect(QRectF(qreal(pw)/2, qreal(pw)/2, d->rectImage.width()-pw, d->rectImage.height()-pw), d->radius, d->radius);
}
}
@@ -520,12 +523,16 @@ void QFxRect::generateBorderedRect()
p.setRenderHint(QPainter::Antialiasing);
if (d->pen && d->pen->isValid()) {
QPen pn(QColor(d->pen->color()), d->pen->width());
+ pn.setJoinStyle(Qt::MiterJoin);
p.setPen(pn);
} else {
p.setPen(Qt::NoPen);
}
p.setBrush(d->color);
- p.drawRect(qreal(pw+1)/2, qreal(pw+1)/2, d->rectImage.width()-(pw+1)/2*2, d->rectImage.height()-(pw+1)/2*2);
+ if (pw%2)
+ p.drawRect(QRectF(qreal(pw)/2+1, qreal(pw)/2+1, d->rectImage.width()-(pw+1), d->rectImage.height()-(pw+1)));
+ else
+ p.drawRect(QRectF(qreal(pw)/2, qreal(pw)/2, d->rectImage.width()-pw, d->rectImage.height()-pw));
}
}
#elif defined(QFX_RENDER_OPENGL)
@@ -550,7 +557,10 @@ void QFxRect::generateRoundedRect()
p.setPen(Qt::NoPen);
}
p.setBrush(d->color);
- p.drawRoundedRect((pw+1)/2, (pw+1)/2, roundRect.width()-(pw+1)/2*2, roundRect.height()-(pw+1)/2*2, d->radius, d->radius);
+ if (pw%2)
+ p.drawRoundedRect(QRectF(qreal(pw)/2+1, qreal(pw)/2+1, roundRect.width()-(pw+1), roundRect.height()-(pw+1)), d->radius, d->radius);
+ else
+ p.drawRoundedRect(QRectF(qreal(pw)/2, qreal(pw)/2, roundRect.width()-pw, roundRect.height()-pw), d->radius, d->radius);
d->rectTexture = cachedTexture(key, roundRect);
}
@@ -573,12 +583,16 @@ void QFxRect::generateBorderedRect()
p.setRenderHint(QPainter::Antialiasing);
if (d->pen && d->pen->isValid()) {
QPen pn(QColor(pen()->color()), pen()->width());
+ pn.setJoinStyle(Qt::MiterJoin);
p.setPen(pn);
} else {
p.setPen(Qt::NoPen);
}
p.setBrush(d->color);
- p.drawRect(qreal(pw+1)/2, qreal(pw+1)/2, borderedRect.width()-(pw+1)/2*2, borderedRect.height()-(pw+1)/2*2);
+ if (pw%2)
+ p.drawRect(QRectF(qreal(pw)/2+1, qreal(pw)/2+1, borderedRect.width()-(pw+1), borderedRect.height()-(pw+1)));
+ else
+ p.drawRect(QRectF(qreal(pw)/2, qreal(pw)/2, borderedRect.width()-pw, borderedRect.height()-pw));
d->rectTexture = cachedTexture(key, borderedRect);
}
}
diff --git a/src/declarative/fx/qfxrect.h b/src/declarative/fx/qfxrect.h
index c279a1c..df490b0 100644
--- a/src/declarative/fx/qfxrect.h
+++ b/src/declarative/fx/qfxrect.h
@@ -58,7 +58,7 @@ class Q_DECLARATIVE_EXPORT QFxPen : public QObject
Q_PROPERTY(QColor color READ color WRITE setColor)
public:
QFxPen(QObject *parent=0)
- : QObject(parent), _width(0), _color("#000000"), _valid(false)
+ : QObject(parent), _width(1), _color("#000000"), _valid(false)
{}
int width() const { return _width; }
diff --git a/src/declarative/qml/parser/qmljs.g b/src/declarative/qml/parser/qmljs.g
index 907ca52..ed5f653 100644
--- a/src/declarative/qml/parser/qmljs.g
+++ b/src/declarative/qml/parser/qmljs.g
@@ -3,7 +3,7 @@
-- Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-- Contact: Qt Software Information (qt-info@nokia.com)
--
--- This file is part of the QtScript module of the Qt Toolkit.
+-- This file is part of the QtDeclarative module of the Qt Toolkit.
--
-- $QT_BEGIN_LICENSE:LGPL$
-- No Commercial Usage
diff --git a/src/declarative/qml/parser/qmljsast_p.h b/src/declarative/qml/parser/qmljsast_p.h
index 8dc32ed..1db037a 100644
--- a/src/declarative/qml/parser/qmljsast_p.h
+++ b/src/declarative/qml/parser/qmljsast_p.h
@@ -3,7 +3,7 @@
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
-** This file is part of the QtScript module of the Qt Toolkit.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/src/declarative/qml/parser/qmljsengine_p.cpp b/src/declarative/qml/parser/qmljsengine_p.cpp
index 42885d8..02d9b9c 100644
--- a/src/declarative/qml/parser/qmljsengine_p.cpp
+++ b/src/declarative/qml/parser/qmljsengine_p.cpp
@@ -1,20 +1,18 @@
-/**************************************************************************
+/****************************************************************************
**
-** This file is part of Qt Creator
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
**
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** Commercial Usage
-**
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
**
** GNU Lesser General Public License Usage
-**
** 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
@@ -22,10 +20,24 @@
** 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.0, 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.
+**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
**
-**************************************************************************/
+****************************************************************************/
#include "qmljsengine_p.h"
#include "qmljsnodepool_p.h"
diff --git a/src/declarative/qml/parser/qmljsengine_p.h b/src/declarative/qml/parser/qmljsengine_p.h
index b9ff042..5aea983 100644
--- a/src/declarative/qml/parser/qmljsengine_p.h
+++ b/src/declarative/qml/parser/qmljsengine_p.h
@@ -1,20 +1,18 @@
-/**************************************************************************
+/****************************************************************************
**
-** This file is part of Qt Creator
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
**
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** Commercial Usage
-**
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
**
** GNU Lesser General Public License Usage
-**
** 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
@@ -22,14 +20,39 @@
** 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.0, 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.
+**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
**
-**************************************************************************/
+****************************************************************************/
#ifndef QMLJSENGINE_P_H
#define QMLJSENGINE_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QString>
#include <QSet>
diff --git a/src/declarative/qml/parser/qmljslexer.cpp b/src/declarative/qml/parser/qmljslexer.cpp
index 843f6ae..e0de71a 100644
--- a/src/declarative/qml/parser/qmljslexer.cpp
+++ b/src/declarative/qml/parser/qmljslexer.cpp
@@ -3,7 +3,7 @@
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
-** This file is part of the QtScript module of the Qt Toolkit.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/src/declarative/qml/parser/qmljsmemorypool_p.h b/src/declarative/qml/parser/qmljsmemorypool_p.h
index d7506be..6bd21f8 100644
--- a/src/declarative/qml/parser/qmljsmemorypool_p.h
+++ b/src/declarative/qml/parser/qmljsmemorypool_p.h
@@ -3,7 +3,7 @@
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
-** This file is part of the QtScript module of the Qt Toolkit.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/src/declarative/qml/parser/qmljsnodepool_p.h b/src/declarative/qml/parser/qmljsnodepool_p.h
index 1a5b7f6..e2f0a3c 100644
--- a/src/declarative/qml/parser/qmljsnodepool_p.h
+++ b/src/declarative/qml/parser/qmljsnodepool_p.h
@@ -3,7 +3,7 @@
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
-** This file is part of the QtScript module of the Qt Toolkit.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/src/declarative/qml/parser/qmljsprettypretty.cpp b/src/declarative/qml/parser/qmljsprettypretty.cpp
index 1045792..b6733e5 100644
--- a/src/declarative/qml/parser/qmljsprettypretty.cpp
+++ b/src/declarative/qml/parser/qmljsprettypretty.cpp
@@ -3,7 +3,7 @@
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
-** This file is part of the QtScript module of the Qt Toolkit.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/src/declarative/qml/parser/qmljsprettypretty_p.h b/src/declarative/qml/parser/qmljsprettypretty_p.h
index fe82ca2..3227e7d 100644
--- a/src/declarative/qml/parser/qmljsprettypretty_p.h
+++ b/src/declarative/qml/parser/qmljsprettypretty_p.h
@@ -3,7 +3,7 @@
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
-** This file is part of the QtScript module of the Qt Toolkit.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/src/declarative/qml/qmlbasicscript.cpp b/src/declarative/qml/qmlbasicscript.cpp
index f02a176..80ca5a9 100644
--- a/src/declarative/qml/qmlbasicscript.cpp
+++ b/src/declarative/qml/qmlbasicscript.cpp
@@ -3,9 +3,39 @@
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
-** This file is part of the $MODULE$ of the Qt Toolkit.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
-** $TROLLTECH_DUAL_LICENSE$
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** 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 version 1.0, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/src/declarative/qml/qmlbasicscript_p.h b/src/declarative/qml/qmlbasicscript_p.h
index 43c0d36..c7ab280 100644
--- a/src/declarative/qml/qmlbasicscript_p.h
+++ b/src/declarative/qml/qmlbasicscript_p.h
@@ -3,15 +3,56 @@
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
-** This file is part of the $MODULE$ of the Qt Toolkit.
+** This file is part of the QtDeclarative module of the Qt Toolkit.
**
-** $TROLLTECH_DUAL_LICENSE$
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** 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 version 1.0, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QMLBASICSCRIPT_P_H
#define QMLBASICSCRIPT_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/QList>
#include <QtCore/QByteArray>
#include <QtCore/QVariant>
@@ -109,5 +150,3 @@ QT_END_NAMESPACE
QT_END_HEADER
#endif // QMLBASICSCRIPT_P_H
-
-
diff --git a/src/declarative/qml/qmlbindablevalue.cpp b/src/declarative/qml/qmlbindablevalue.cpp
index d1835cf..222ea87 100644
--- a/src/declarative/qml/qmlbindablevalue.cpp
+++ b/src/declarative/qml/qmlbindablevalue.cpp
@@ -53,18 +53,18 @@ QT_BEGIN_NAMESPACE
DEFINE_BOOL_CONFIG_OPTION(scriptWarnings, QML_SCRIPT_WARNINGS);
QmlBindableValuePrivate::QmlBindableValuePrivate()
-: inited(false), updating(false), mePtr(0)
+: inited(false), updating(false), enabled(true), mePtr(0)
{
}
QML_DEFINE_NOCREATE_TYPE(QmlBindableValue);
-QmlBindableValue::QmlBindableValue(void *data, QmlRefCount *rc, QObject *obj, QObject *parent)
-: QmlPropertyValueSource(*new QmlBindableValuePrivate, parent), QmlExpression(QmlContext::activeContext(), data, rc, obj)
+QmlBindableValue::QmlBindableValue(void *data, QmlRefCount *rc, QObject *obj, QmlContext *ctxt, QObject *parent)
+: QmlPropertyValueSource(*new QmlBindableValuePrivate, parent), QmlExpression(ctxt, data, rc, obj)
{
}
-QmlBindableValue::QmlBindableValue(const QString &str, QObject *obj, QObject *parent)
-: QmlPropertyValueSource(*new QmlBindableValuePrivate, parent), QmlExpression(QmlContext::activeContext(), str, obj)
+QmlBindableValue::QmlBindableValue(const QString &str, QObject *obj, QmlContext *ctxt, QObject *parent)
+: QmlPropertyValueSource(*new QmlBindableValuePrivate, parent), QmlExpression(ctxt, str, obj)
{
}
@@ -105,6 +105,15 @@ void QmlBindableValue::setExpression(const QString &expr)
update();
}
+void QmlBindableValue::forceUpdate()
+{
+ Q_D(QmlBindableValue);
+ if (!d->inited)
+ init();
+ else
+ update();
+}
+
Q_DECLARE_METATYPE(QList<QObject *>);
void QmlBindableValue::update()
{
@@ -113,7 +122,7 @@ void QmlBindableValue::update()
#ifdef Q_ENABLE_PERFORMANCE_LOG
QFxPerfTimer<QFxPerf::BindableValueUpdate> bu;
#endif
- if (!d->inited)
+ if (!d->inited || !d->enabled)
return;
if (!d->updating) {
@@ -159,4 +168,18 @@ void QmlBindableValue::valueChanged()
update();
}
+void QmlBindableValue::setEnabled(bool e)
+{
+ Q_D(QmlBindableValue);
+ d->enabled = e;
+ setTrackChange(e);
+}
+
+bool QmlBindableValue::enabled() const
+{
+ Q_D(const QmlBindableValue);
+
+ return d->enabled;
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlbindablevalue.h b/src/declarative/qml/qmlbindablevalue.h
index f54481a..00da57e 100644
--- a/src/declarative/qml/qmlbindablevalue.h
+++ b/src/declarative/qml/qmlbindablevalue.h
@@ -48,12 +48,12 @@
#include <QtDeclarative/qmlpropertyvaluesource.h>
#include <QtDeclarative/qmlexpression.h>
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
+
class QmlExpression;
class QmlContext;
class QmlBindableValuePrivate;
@@ -62,8 +62,8 @@ class Q_DECLARATIVE_EXPORT QmlBindableValue : public QmlPropertyValueSource,
{
Q_OBJECT
public:
- QmlBindableValue(const QString &, QObject *, QObject *parent=0);
- QmlBindableValue(void *, QmlRefCount *, QObject *, QObject *parent);
+ QmlBindableValue(const QString &, QObject *, QmlContext *, QObject *parent=0);
+ QmlBindableValue(void *, QmlRefCount *, QObject *, QmlContext *, QObject *parent);
~QmlBindableValue();
virtual void setTarget(const QmlMetaProperty &);
@@ -74,8 +74,12 @@ public:
virtual void setExpression(const QString &);
void init();
+ void forceUpdate();
+
+ void setEnabled(bool);
+ bool enabled() const;
-private Q_SLOTS:
+public Q_SLOTS:
void update();
protected:
@@ -86,8 +90,8 @@ private:
};
QML_DECLARE_TYPE(QmlBindableValue)
-
QT_END_NAMESPACE
QT_END_HEADER
+
#endif // QMLBINDABLEVALUE_H
diff --git a/src/declarative/qml/qmlbindablevalue_p.h b/src/declarative/qml/qmlbindablevalue_p.h
index 9476b80..a37b2c0 100644
--- a/src/declarative/qml/qmlbindablevalue_p.h
+++ b/src/declarative/qml/qmlbindablevalue_p.h
@@ -42,6 +42,17 @@
#ifndef QMLBINDABLEVALUE_P_H
#define QMLBINDABLEVALUE_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <private/qobject_p.h>
#include <QtDeclarative/qmlbindablevalue.h>
#include <QtDeclarative/qmlmetaproperty.h>
@@ -54,8 +65,10 @@ class QmlBindableValuePrivate : public QObjectPrivate
public:
QmlBindableValuePrivate();
- bool inited;
- bool updating;
+ bool inited:1;
+ bool updating:1;
+ bool enabled:1;
+
QmlMetaProperty property;
QmlBindableValue **mePtr;
diff --git a/src/declarative/qml/qmlboundsignal_p.h b/src/declarative/qml/qmlboundsignal_p.h
index 2c05770..39c0c46 100644
--- a/src/declarative/qml/qmlboundsignal_p.h
+++ b/src/declarative/qml/qmlboundsignal_p.h
@@ -42,10 +42,22 @@
#ifndef QMLBOUNDSIGNAL_P_H
#define QMLBOUNDSIGNAL_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtDeclarative/qmlexpression.h>
#include <private/qobject_p.h>
QT_BEGIN_NAMESPACE
+
class QmlBoundSignal : public QmlExpressionObject
{
Q_OBJECT
@@ -98,7 +110,6 @@ private:
QmlBoundSignalParameters *params;
};
+QT_END_NAMESPACE
#endif // QMLBOUNDSIGNAL_P_H
-
-QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlclassfactory.cpp b/src/declarative/qml/qmlclassfactory.cpp
index 7e5b929..ddfbd78 100644
--- a/src/declarative/qml/qmlclassfactory.cpp
+++ b/src/declarative/qml/qmlclassfactory.cpp
@@ -41,7 +41,10 @@
#include "qmlclassfactory_p.h"
+QT_BEGIN_NAMESPACE
+
QmlClassFactory::~QmlClassFactory()
{
}
+QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlclassfactory_p.h b/src/declarative/qml/qmlclassfactory_p.h
index e3e71c9..cd80ffc 100644
--- a/src/declarative/qml/qmlclassfactory_p.h
+++ b/src/declarative/qml/qmlclassfactory_p.h
@@ -42,6 +42,17 @@
#ifndef QMLCLASSFACTORY_P_H
#define QMLCLASSFACTORY_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/qml/qmlcompiledcomponent_p.h b/src/declarative/qml/qmlcompiledcomponent_p.h
index 2201423..0945892 100644
--- a/src/declarative/qml/qmlcompiledcomponent_p.h
+++ b/src/declarative/qml/qmlcompiledcomponent_p.h
@@ -42,13 +42,26 @@
#ifndef QMLCOMPILEDCOMPONENT_P_H
#define QMLCOMPILEDCOMPONENT_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtDeclarative/qml.h>
#include <private/qmlinstruction_p.h>
#include <private/qmlcompiler_p.h>
#include <private/qmlrefcount_p.h>
QT_BEGIN_HEADER
+
QT_BEGIN_NAMESPACE
+
namespace QmlParser {
class Property;
class Object;
@@ -72,8 +85,8 @@ private:
friend class QmlDomDocument;
};
-
QT_END_NAMESPACE
+
QT_END_HEADER
#endif // QMLCOMPILEDCOMPONENT_P_H
diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp
index 8297ac4..cb0c571 100644
--- a/src/declarative/qml/qmlcompiler.cpp
+++ b/src/declarative/qml/qmlcompiler.cpp
@@ -570,7 +570,10 @@ void QmlCompiler::compileTree(Object *tree)
bool QmlCompiler::compileObject(Object *obj, const BindingContext &ctxt)
{
Q_ASSERT (obj->type != -1);
- obj->metatype = output->types.at(obj->type).metaObject();
+ const QmlCompiledData::TypeReference &tr = output->types.at(obj->type);
+ obj->metatype = tr.metaObject();
+ if (tr.component)
+ obj->url = tr.component->url();
if (output->types.at(obj->type).className == "Component") {
COMPILE_CHECK(compileComponent(obj, ctxt));
diff --git a/src/declarative/qml/qmlcompiler_p.h b/src/declarative/qml/qmlcompiler_p.h
index 2559b14..2c722b9 100644
--- a/src/declarative/qml/qmlcompiler_p.h
+++ b/src/declarative/qml/qmlcompiler_p.h
@@ -42,6 +42,17 @@
#ifndef QMLCOMPILER_P_H
#define QMLCOMPILER_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qbytearray.h>
#include <QtCore/qset.h>
#include <QtDeclarative/qml.h>
@@ -215,4 +226,5 @@ private:
};
QT_END_NAMESPACE
+
#endif // QMLCOMPILER_P_H
diff --git a/src/declarative/qml/qmlcomponent.cpp b/src/declarative/qml/qmlcomponent.cpp
index f90af4a..1144639 100644
--- a/src/declarative/qml/qmlcomponent.cpp
+++ b/src/declarative/qml/qmlcomponent.cpp
@@ -58,6 +58,7 @@
#include "qmlscriptparser_p.h"
QT_BEGIN_NAMESPACE
+
class QByteArray;
int statusId = qRegisterMetaType<QmlComponent::Status>("QmlComponent::Status");
@@ -296,6 +297,7 @@ QmlComponent::QmlComponent(QmlEngine *engine, QmlCompiledComponent *cc, int star
cc->addref();
d->start = start;
d->count = count;
+ d->url = cc->url;
}
/*!
@@ -563,4 +565,5 @@ void QmlComponent::completeCreate()
d->completePending = false;
}
}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlcomponent.h b/src/declarative/qml/qmlcomponent.h
index ae2f362..2e80b6b 100644
--- a/src/declarative/qml/qmlcomponent.h
+++ b/src/declarative/qml/qmlcomponent.h
@@ -54,6 +54,7 @@ QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
+
class QmlCompiledComponent;
class QByteArray;
class QmlComponentPrivate;
diff --git a/src/declarative/qml/qmlcomponent_p.h b/src/declarative/qml/qmlcomponent_p.h
index 254d9ba..0be3dc6 100644
--- a/src/declarative/qml/qmlcomponent_p.h
+++ b/src/declarative/qml/qmlcomponent_p.h
@@ -42,6 +42,17 @@
#ifndef QMLCOMPONENT_P_H
#define QMLCOMPONENT_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QList>
@@ -87,6 +98,6 @@ public:
void clear();
};
-#endif // QMLCOMPONENT_P_H
-
QT_END_NAMESPACE
+
+#endif // QMLCOMPONENT_P_H
diff --git a/src/declarative/qml/qmlcompositetypemanager.cpp b/src/declarative/qml/qmlcompositetypemanager.cpp
index 9950b48..ef77803 100644
--- a/src/declarative/qml/qmlcompositetypemanager.cpp
+++ b/src/declarative/qml/qmlcompositetypemanager.cpp
@@ -50,6 +50,8 @@
#include <QtDeclarative/qmlcomponent.h>
#include <private/qmlcomponent_p.h>
+QT_BEGIN_NAMESPACE
+
QmlCompositeTypeData::QmlCompositeTypeData()
: status(Invalid), errorType(NoError), component(0), compiledComponent(0)
{
@@ -365,3 +367,5 @@ void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit)
doComplete(unit);
}
}
+
+QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlcompositetypemanager_p.h b/src/declarative/qml/qmlcompositetypemanager_p.h
index 9312819..96e77d6 100644
--- a/src/declarative/qml/qmlcompositetypemanager_p.h
+++ b/src/declarative/qml/qmlcompositetypemanager_p.h
@@ -42,6 +42,17 @@
#ifndef QMLCOMPOSITETYPEMANAGER_P_H
#define QMLCOMPOSITETYPEMANAGER_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qglobal.h>
#include <private/qmlscriptparser_p.h>
#include <private/qmlrefcount_p.h>
diff --git a/src/declarative/qml/qmlcontext.h b/src/declarative/qml/qmlcontext.h
index 935c7ca..ce5fe52 100644
--- a/src/declarative/qml/qmlcontext.h
+++ b/src/declarative/qml/qmlcontext.h
@@ -99,7 +99,6 @@ private:
QmlContext(QmlEngine *);
};
-
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/declarative/qml/qmlcontext_p.h b/src/declarative/qml/qmlcontext_p.h
index 4d88fc2..569b320 100644
--- a/src/declarative/qml/qmlcontext_p.h
+++ b/src/declarative/qml/qmlcontext_p.h
@@ -42,6 +42,17 @@
#ifndef QMLCONTEXT_P_H
#define QMLCONTEXT_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtDeclarative/qmlcontext.h>
#include <private/qobject_p.h>
#include <private/qmldeclarativedata_p.h>
@@ -50,6 +61,7 @@
#include <QtCore/qset.h>
QT_BEGIN_NAMESPACE
+
class QmlContext;
class QmlExpression;
class QmlEngine;
@@ -99,6 +111,7 @@ public:
QmlSimpleDeclarativeData contextData;
QObjectList contextObjects;
};
+
QT_END_NAMESPACE
#endif // QMLCONTEXT_P_H
diff --git a/src/declarative/qml/qmlcustomparser_p.h b/src/declarative/qml/qmlcustomparser_p.h
index 75da579..67f39d9 100644
--- a/src/declarative/qml/qmlcustomparser_p.h
+++ b/src/declarative/qml/qmlcustomparser_p.h
@@ -42,6 +42,17 @@
#ifndef QMLCUSTOMPARSER_H
#define QMLCUSTOMPARSER_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qbytearray.h>
#include <QtCore/qxmlstream.h>
#include <QtDeclarative/qfxglobal.h>
diff --git a/src/declarative/qml/qmlcustomparser_p_p.h b/src/declarative/qml/qmlcustomparser_p_p.h
index 96e9b32..0011c3b 100644
--- a/src/declarative/qml/qmlcustomparser_p_p.h
+++ b/src/declarative/qml/qmlcustomparser_p_p.h
@@ -42,6 +42,17 @@
#ifndef QMLCUSTOMPARSER_P_H
#define QMLCUSTOMPARSER_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qglobal.h>
#include "qmlcustomparser_p.h"
diff --git a/src/declarative/qml/qmldeclarativedata_p.h b/src/declarative/qml/qmldeclarativedata_p.h
index 85a80fa..559f0ee 100644
--- a/src/declarative/qml/qmldeclarativedata_p.h
+++ b/src/declarative/qml/qmldeclarativedata_p.h
@@ -42,6 +42,17 @@
#ifndef QMLDECLARATIVEDATA_P_H
#define QMLDECLARATIVEDATA_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <private/qobject_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/qml/qmldom.cpp b/src/declarative/qml/qmldom.cpp
index d2608c8..8497bea 100644
--- a/src/declarative/qml/qmldom.cpp
+++ b/src/declarative/qml/qmldom.cpp
@@ -791,6 +791,16 @@ int QmlDomObject::length() const
return 0;
}
+// Returns the URL of the type, if it is an external type, or an empty URL if
+// not
+QUrl QmlDomObject::url() const
+{
+ if (d && d->object)
+ return d->object->url;
+ else
+ return QUrl();
+}
+
QmlDomBasicValuePrivate::QmlDomBasicValuePrivate()
: value(0)
{
@@ -959,11 +969,11 @@ void QmlDomValueBinding::setBinding(const QString &expression)
In QML, value sources are special value generating types that may be
assigned to properties. Value sources inherit the QmlPropertyValueSource
class. In the example below, the "x" property is being assigned the
- NumericAnimation value source.
+ NumberAnimation value source.
\qml
Rect {
- x: NumericAnimation {
+ x: NumberAnimation {
from: 0
to: 100
repeat: true
@@ -1008,11 +1018,11 @@ QmlDomValueValueSource &QmlDomValueValueSource::operator=(const QmlDomValueValue
/*!
Return the value source object.
- In the example below, an object representing the NumericAnimation will be
+ In the example below, an object representing the NumberAnimation will be
returned.
\qml
Rect {
- x: NumericAnimation {
+ x: NumberAnimation {
from: 0
to: 100
repeat: true
@@ -1357,7 +1367,7 @@ Item {
\qml
Item {
x: 10
- x: NumericAnimation {
+ x: NumberAnimation {
running: false
from: 0
to: 100
@@ -1561,4 +1571,3 @@ void QmlDomComponent::setComponentRoot(const QmlDomObject &root)
}
QT_END_NAMESPACE
-
diff --git a/src/declarative/qml/qmldom.h b/src/declarative/qml/qmldom.h
index fde35a8..ab3e39f 100644
--- a/src/declarative/qml/qmldom.h
+++ b/src/declarative/qml/qmldom.h
@@ -143,6 +143,7 @@ public:
int position() const;
int length() const;
+ QUrl url() const;
private:
friend class QmlDomDocument;
friend class QmlDomComponent;
diff --git a/src/declarative/qml/qmldom_p.h b/src/declarative/qml/qmldom_p.h
index 441269c..a7c3cc7 100644
--- a/src/declarative/qml/qmldom_p.h
+++ b/src/declarative/qml/qmldom_p.h
@@ -42,6 +42,17 @@
#ifndef QMLDOM_P_H
#define QMLDOM_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/QtGlobal>
QT_BEGIN_HEADER
diff --git a/src/declarative/qml/qmlengine_p.h b/src/declarative/qml/qmlengine_p.h
index a1028e6..93ae704 100644
--- a/src/declarative/qml/qmlengine_p.h
+++ b/src/declarative/qml/qmlengine_p.h
@@ -42,6 +42,17 @@
#ifndef QMLENGINE_P_H
#define QMLENGINE_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtScript/QScriptClass>
#include <QtScript/QScriptValue>
#include <QtScript/QScriptString>
@@ -61,6 +72,7 @@
#include <QtScript/qscriptengine.h>
QT_BEGIN_NAMESPACE
+
class QmlContext;
class QmlEngine;
class QmlContextPrivate;
@@ -288,7 +300,7 @@ public:
void addLog(const QmlExpressionLog &);
QList<QmlExpressionLog> *log;
};
+
QT_END_NAMESPACE
#endif // QMLENGINE_P_H
-
diff --git a/src/declarative/qml/qmlexpression.h b/src/declarative/qml/qmlexpression.h
index 15d026a..e8cac7a 100644
--- a/src/declarative/qml/qmlexpression.h
+++ b/src/declarative/qml/qmlexpression.h
@@ -109,7 +109,6 @@ Q_SIGNALS:
void valueChanged();
};
-
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/declarative/qml/qmlinstruction.cpp b/src/declarative/qml/qmlinstruction.cpp
index a618fe7..1647a12 100644
--- a/src/declarative/qml/qmlinstruction.cpp
+++ b/src/declarative/qml/qmlinstruction.cpp
@@ -44,6 +44,7 @@
#include <QDebug>
QT_BEGIN_NAMESPACE
+
void QmlCompiledComponent::dump(QmlInstruction *instr, int idx)
{
QByteArray lineNumber = QByteArray::number(instr->line);
diff --git a/src/declarative/qml/qmlinstruction_p.h b/src/declarative/qml/qmlinstruction_p.h
index e3b0dfe..f2f3ac2 100644
--- a/src/declarative/qml/qmlinstruction_p.h
+++ b/src/declarative/qml/qmlinstruction_p.h
@@ -42,10 +42,21 @@
#ifndef QMLINSTRUCTION_P_H
#define QMLINSTRUCTION_P_H
-#include <QtDeclarative/qfxglobal.h>
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+#include <QtDeclarative/qfxglobal.h>
QT_BEGIN_NAMESPACE
+
class QmlCompiledComponent;
class Q_DECLARATIVE_EXPORT QmlInstruction
{
@@ -283,6 +294,6 @@ public:
void dump(QmlCompiledComponent *);
};
-#endif // QMLINSTRUCTION_P_H
-
QT_END_NAMESPACE
+
+#endif // QMLINSTRUCTION_P_H
diff --git a/src/declarative/qml/qmllist.h b/src/declarative/qml/qmllist.h
index cc13924..80c3138 100644
--- a/src/declarative/qml/qmllist.h
+++ b/src/declarative/qml/qmllist.h
@@ -119,7 +119,6 @@ class Qml_ProxyList_ ##ListName : public QmlList<ListType> \
friend class Qml_ProxyList_ ##ListName ; \
Qml_ProxyList_##ListName ListName;
-
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/declarative/qml/qmlmetaproperty.cpp b/src/declarative/qml/qmlmetaproperty.cpp
index 52036c2..218fdf8 100644
--- a/src/declarative/qml/qmlmetaproperty.cpp
+++ b/src/declarative/qml/qmlmetaproperty.cpp
@@ -50,7 +50,6 @@
#include <math.h>
#include <QtCore/qdebug.h>
-
QT_BEGIN_NAMESPACE
class QMetaPropertyEx : public QMetaProperty
@@ -519,7 +518,7 @@ QMetaProperty QmlMetaProperty::property() const
Returns the binding associated with this property, or 0 if no binding
exists.
*/
-QmlBindableValue *QmlMetaProperty::binding()
+QmlBindableValue *QmlMetaProperty::binding() const
{
if (!isProperty() || type() & Attached)
return 0;
@@ -537,6 +536,51 @@ QmlBindableValue *QmlMetaProperty::binding()
return 0;
}
+/*!
+ Set the binding associated with this property to \a binding. Returns
+ the existing binding (if any), otherwise 0.
+
+ \a binding will be enabled, and the returned binding (if any) will be
+ disabled.
+*/
+QmlBindableValue *QmlMetaProperty::setBinding(QmlBindableValue *binding) const
+{
+ if (!isProperty() || type() & Attached)
+ return 0;
+
+ const QObjectList &children = object()->children();
+ for (QObjectList::ConstIterator iter = children.begin();
+ iter != children.end(); ++iter) {
+ QObject *child = *iter;
+ if (child->metaObject() == &QmlBindableValue::staticMetaObject) {
+ QmlBindableValue *v = static_cast<QmlBindableValue *>(child);
+ if (v->property() == *this && v->enabled()) {
+
+ v->setEnabled(false);
+
+ if (binding) {
+ binding->setParent(object());
+ binding->setTarget(*this);
+ binding->setEnabled(true);
+ binding->forceUpdate();
+ }
+
+ return v;
+
+ }
+ }
+ }
+
+ if (binding) {
+ binding->setParent(object());
+ binding->setTarget(*this);
+ binding->setEnabled(true);
+ binding->forceUpdate();
+ }
+
+ return 0;
+}
+
/*! \internal */
int QmlMetaProperty::findSignal(const QObject *obj, const char *name)
{
@@ -990,4 +1034,34 @@ QMetaMethod QmlMetaProperty::method() const
return d->signal;
}
+/*!
+ \internal
+
+ Creates a QmlMetaProperty for the property \a name of \a obj. Unlike
+ the QmlMetaProperty(QObject*, QString) constructor, this static function
+ will correctly handle dot properties.
+*/
+QmlMetaProperty QmlMetaProperty::createProperty(QObject *obj, const QString &name)
+{
+ QStringList path = name.split('.');
+
+ QObject *object = obj;
+
+ for (int jj = 0; jj < path.count() - 1; ++jj) {
+ const QString &pathName = path.at(jj);
+ QmlMetaProperty prop(object, pathName);
+ QObject *objVal = QmlMetaType::toQObject(prop.read());
+ if (!objVal)
+ return QmlMetaProperty();
+ object = objVal;
+ }
+
+ const QString &propName = path.last();
+ QmlMetaProperty prop(object, propName);
+ if (!prop.isValid())
+ return QmlMetaProperty();
+ else
+ return prop;
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlmetaproperty.h b/src/declarative/qml/qmlmetaproperty.h
index 9daef59..6c28a86 100644
--- a/src/declarative/qml/qmlmetaproperty.h
+++ b/src/declarative/qml/qmlmetaproperty.h
@@ -123,8 +123,11 @@ public:
QMetaProperty property() const;
- QmlBindableValue *binding();
+ QmlBindableValue *binding() const;
+ QmlBindableValue *setBinding(QmlBindableValue *) const;
+
static int findSignal(const QObject *, const char *);
+ static QmlMetaProperty createProperty(QObject *, const QString &);
int coreIndex() const;
private:
diff --git a/src/declarative/qml/qmlmetaproperty_p.h b/src/declarative/qml/qmlmetaproperty_p.h
index 738bfec..3bd9089 100644
--- a/src/declarative/qml/qmlmetaproperty_p.h
+++ b/src/declarative/qml/qmlmetaproperty_p.h
@@ -42,6 +42,17 @@
#ifndef QMLMETAPROPERTY_P_H
#define QMLMETAPROPERTY_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include "qmlmetaproperty.h"
class QmlContext;
@@ -79,4 +90,3 @@ public:
};
#endif // QMLMETAPROPERTY_P_H
-
diff --git a/src/declarative/qml/qmlmetatype.cpp b/src/declarative/qml/qmlmetatype.cpp
index 8ce8571..f69e5e5 100644
--- a/src/declarative/qml/qmlmetatype.cpp
+++ b/src/declarative/qml/qmlmetatype.cpp
@@ -60,6 +60,7 @@
#include <private/qmlcustomparser_p.h>
QT_BEGIN_NAMESPACE
+
#ifdef QT_BOOTSTRAPPED
# ifndef QT_NO_GEOM_VARIANT
# define QT_NO_GEOM_VARIANT
diff --git a/src/declarative/qml/qmlparser_p.h b/src/declarative/qml/qmlparser_p.h
index a38ce69..ef038f9 100644
--- a/src/declarative/qml/qmlparser_p.h
+++ b/src/declarative/qml/qmlparser_p.h
@@ -42,6 +42,17 @@
#ifndef QMLPARSER_P_H
#define QMLPARSER_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/QByteArray>
#include <QtCore/QList>
#include <QtCore/qstring.h>
@@ -102,6 +113,8 @@ namespace QmlParser
// QmlCompiledData::types array, or -1 if the object is a fetched
// object.
int type;
+ // The url of this object if it is an external type. Used by the DOM
+ QUrl url;
// The name of this type
QByteArray typeName;
// The id assigned to the object (if any).
diff --git a/src/declarative/qml/qmlparserstatus.h b/src/declarative/qml/qmlparserstatus.h
index 7c2e141..4db6d8c 100644
--- a/src/declarative/qml/qmlparserstatus.h
+++ b/src/declarative/qml/qmlparserstatus.h
@@ -68,7 +68,6 @@ private:
};
Q_DECLARE_INTERFACE(QmlParserStatus, "com.trolltech.qml.QmlParserStatus")
-
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/declarative/qml/qmlprivate.h b/src/declarative/qml/qmlprivate.h
index ed1304a..3d5fa61 100644
--- a/src/declarative/qml/qmlprivate.h
+++ b/src/declarative/qml/qmlprivate.h
@@ -394,10 +394,8 @@ int QmlPrivate::list_interface_op(QmlPrivate::ListOp op, int val,
return 0;
}
-
-#endif // QMLPRIVATE_H
-
-
QT_END_NAMESPACE
QT_END_HEADER
+
+#endif // QMLPRIVATE_H
diff --git a/src/declarative/qml/qmlpropertyvaluesource.cpp b/src/declarative/qml/qmlpropertyvaluesource.cpp
index 18092c8..c6ff596 100644
--- a/src/declarative/qml/qmlpropertyvaluesource.cpp
+++ b/src/declarative/qml/qmlpropertyvaluesource.cpp
@@ -42,8 +42,8 @@
#include "qmlpropertyvaluesource.h"
#include "qml.h"
-
QT_BEGIN_NAMESPACE
+
/*!
\class QmlPropertyValueSource
\brief The QmlPropertyValueSource class is inherited by property value sources such as animations and bindings.
diff --git a/src/declarative/qml/qmlpropertyvaluesource.h b/src/declarative/qml/qmlpropertyvaluesource.h
index 9cef150..c142095 100644
--- a/src/declarative/qml/qmlpropertyvaluesource.h
+++ b/src/declarative/qml/qmlpropertyvaluesource.h
@@ -46,12 +46,12 @@
#include <QtDeclarative/qml.h>
#include <QtCore/QObject>
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
+
class QObjectPrivate;
class QmlMetaProperty;
class Q_DECLARATIVE_EXPORT QmlPropertyValueSource : public QObject
@@ -71,9 +71,8 @@ private:
};
QML_DECLARE_TYPE(QmlPropertyValueSource)
-#endif // QMLPROPERTYVALUESOURCE_H
-
-
QT_END_NAMESPACE
QT_END_HEADER
+
+#endif // QMLPROPERTYVALUESOURCE_H
diff --git a/src/declarative/qml/qmlproxymetaobject.cpp b/src/declarative/qml/qmlproxymetaobject.cpp
index 06d8a50..5568bab 100644
--- a/src/declarative/qml/qmlproxymetaobject.cpp
+++ b/src/declarative/qml/qmlproxymetaobject.cpp
@@ -41,8 +41,8 @@
#include "qmlproxymetaobject_p.h"
-
QT_BEGIN_NAMESPACE
+
QmlProxyMetaObject::QmlProxyMetaObject(QObject *obj, QList<ProxyData> *mList)
: metaObjects(mList), proxies(0), parent(0), object(obj)
{
diff --git a/src/declarative/qml/qmlproxymetaobject_p.h b/src/declarative/qml/qmlproxymetaobject_p.h
index c0ce36e..736bd91 100644
--- a/src/declarative/qml/qmlproxymetaobject_p.h
+++ b/src/declarative/qml/qmlproxymetaobject_p.h
@@ -42,6 +42,17 @@
#ifndef QMLPROXYMETAOBJECT_P_H
#define QMLPROXYMETAOBJECT_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/QMetaObject>
#include <QtCore/QObject>
#include <private/qmetaobjectbuilder_p.h>
@@ -53,6 +64,7 @@ QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
+
class QmlProxyMetaObject : public QAbstractDynamicMetaObject
{
public:
diff --git a/src/declarative/qml/qmlrefcount.cpp b/src/declarative/qml/qmlrefcount.cpp
index 8f71f1b..6c409e1 100644
--- a/src/declarative/qml/qmlrefcount.cpp
+++ b/src/declarative/qml/qmlrefcount.cpp
@@ -41,6 +41,8 @@
#include "qmlrefcount_p.h"
+QT_BEGIN_NAMESPACE
+
QmlRefCount::QmlRefCount()
: refCount(1)
{
@@ -64,3 +66,5 @@ void QmlRefCount::release()
delete this;
}
+QT_END_NAMESPACE
+
diff --git a/src/declarative/qml/qmlrefcount_p.h b/src/declarative/qml/qmlrefcount_p.h
index 1355c86..a87d596 100644
--- a/src/declarative/qml/qmlrefcount_p.h
+++ b/src/declarative/qml/qmlrefcount_p.h
@@ -42,6 +42,17 @@
#ifndef QMLREFCOUNT_P_H
#define QMLREFCOUNT_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qglobal.h>
QT_BEGIN_HEADER
diff --git a/src/declarative/qml/qmlscriptparser.cpp b/src/declarative/qml/qmlscriptparser.cpp
index fb7492d..24e26de 100644
--- a/src/declarative/qml/qmlscriptparser.cpp
+++ b/src/declarative/qml/qmlscriptparser.cpp
@@ -886,5 +886,4 @@ void QmlScriptParser::addNamespacePath(const QString &path)
_nameSpacePaths.insertMulti(QString(), path);
}
-
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlscriptparser_p.h b/src/declarative/qml/qmlscriptparser_p.h
index b057e2b..15f165c 100644
--- a/src/declarative/qml/qmlscriptparser_p.h
+++ b/src/declarative/qml/qmlscriptparser_p.h
@@ -41,13 +41,24 @@
#ifndef QMLSCRIPTPARSER_P_H
#define QMLSCRIPTPARSER_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/QList>
#include <QtCore/QUrl>
#include <QtDeclarative/qmlerror.h>
#include "qmlparser_p.h"
-
QT_BEGIN_HEADER
+
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
@@ -107,6 +118,7 @@ public:
};
QT_END_NAMESPACE
+
QT_END_HEADER
#endif // QMLSCRIPTPARSER_P_H
diff --git a/src/declarative/qml/qmlstringconverters_p.h b/src/declarative/qml/qmlstringconverters_p.h
index ed1f959..52426a7 100644
--- a/src/declarative/qml/qmlstringconverters_p.h
+++ b/src/declarative/qml/qmlstringconverters_p.h
@@ -42,6 +42,17 @@
#ifndef QMLSTRINGCONVERTERS_P_H
#define QMLSTRINGCONVERTERS_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qglobal.h>
class QColor;
class QPointF;
diff --git a/src/declarative/qml/qmlvme.cpp b/src/declarative/qml/qmlvme.cpp
index a3ee4e5..962d917 100644
--- a/src/declarative/qml/qmlvme.cpp
+++ b/src/declarative/qml/qmlvme.cpp
@@ -564,7 +564,7 @@ QObject *QmlVME::run(QStack<QObject *> &stack, QmlContext *ctxt, QmlCompiledComp
QmlMetaProperty mp(target, instr.assignBinding.property,
(QmlMetaProperty::PropertyCategory)instr.assignBinding.category);
- QmlBindableValue *bind = new QmlBindableValue((void *)datas.at(instr.assignBinding.value).constData(), comp, context, 0);
+ QmlBindableValue *bind = new QmlBindableValue((void *)datas.at(instr.assignBinding.value).constData(), comp, context, QmlContext::activeContext(), 0);
bindValues.append(bind);
QmlBindableValuePrivate *p =
static_cast<QmlBindableValuePrivate *>(QObjectPrivate::get(bind));
@@ -584,7 +584,7 @@ QObject *QmlVME::run(QStack<QObject *> &stack, QmlContext *ctxt, QmlCompiledComp
QmlMetaProperty mp(target, instr.assignBinding.property,
(QmlMetaProperty::PropertyCategory)instr.assignBinding.category);
- QmlBindableValue *bind = new QmlBindableValue(primitives.at(instr.assignBinding.value), context, false);
+ QmlBindableValue *bind = new QmlBindableValue(primitives.at(instr.assignBinding.value), context, QmlContext::activeContext());
bindValues.append(bind);
QmlBindableValuePrivate *p =
static_cast<QmlBindableValuePrivate *>(QObjectPrivate::get(bind));
diff --git a/src/declarative/qml/qmlvme_p.h b/src/declarative/qml/qmlvme_p.h
index 149c82c..2da7bb4 100644
--- a/src/declarative/qml/qmlvme_p.h
+++ b/src/declarative/qml/qmlvme_p.h
@@ -42,11 +42,23 @@
#ifndef QMLVME_P_H
#define QMLVME_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/QString>
#include <QtCore/QStack>
#include <QtDeclarative/qmlerror.h>
QT_BEGIN_NAMESPACE
+
class QObject;
class QmlInstruction;
class QmlCompiledComponent;
@@ -70,4 +82,5 @@ private:
};
QT_END_NAMESPACE
+
#endif // QMLVME_P_H
diff --git a/src/declarative/qml/qmlvmemetaobject.cpp b/src/declarative/qml/qmlvmemetaobject.cpp
index 4b2c64c..3b784a4 100644
--- a/src/declarative/qml/qmlvmemetaobject.cpp
+++ b/src/declarative/qml/qmlvmemetaobject.cpp
@@ -48,8 +48,8 @@
#include <QtCore/qdebug.h>
#include <qmlexpression.h>
-
QT_BEGIN_NAMESPACE
+
QmlVMEMetaObject::QmlVMEMetaObject(QObject *obj,
const QMetaObject *other,
QList<QString> *strData,
diff --git a/src/declarative/qml/qmlvmemetaobject_p.h b/src/declarative/qml/qmlvmemetaobject_p.h
index 17140ef..7b6fd2d 100644
--- a/src/declarative/qml/qmlvmemetaobject_p.h
+++ b/src/declarative/qml/qmlvmemetaobject_p.h
@@ -42,6 +42,17 @@
#ifndef QMLVMEMETAOBJECT_P_H
#define QMLVMEMETAOBJECT_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtDeclarative/qml.h>
#include <QtCore/QMetaObject>
#include <QtCore/QBitArray>
@@ -73,4 +84,5 @@ private:
};
QT_END_NAMESPACE
+
#endif // QMLVMEMETAOBJECT_P_H
diff --git a/src/declarative/qml/qpodvector_p.h b/src/declarative/qml/qpodvector_p.h
index 55c04e7..101c62d 100644
--- a/src/declarative/qml/qpodvector_p.h
+++ b/src/declarative/qml/qpodvector_p.h
@@ -42,6 +42,17 @@
#ifndef QPODVECTOR_P_H
#define QPODVECTOR_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
@@ -119,6 +130,7 @@ private:
int m_capacity;
T *m_data;
};
+
QT_END_NAMESPACE
#endif
diff --git a/src/declarative/util/qfxglobal.h b/src/declarative/util/qfxglobal.h
index 6ba9409..6f2a9fb 100644
--- a/src/declarative/util/qfxglobal.h
+++ b/src/declarative/util/qfxglobal.h
@@ -45,12 +45,12 @@
#include <QtCore/qglobal.h>
#include <QtCore/QObject>
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
+
#if defined(QT_OPENGL_ES_1)
#define QFX_CONFIGURATION_OPENGL1
#elif defined(QT_OPENGL_ES_2)
@@ -117,8 +117,8 @@ inline void QFx_setParent_noEvent(QObject *object, QObject *parent)
static_cast<QFx_DerivedObject *>(object)->setParent_noEvent(parent);
}
-
QT_END_NAMESPACE
QT_END_HEADER
+
#endif // QFXGLOBAL_H
diff --git a/src/declarative/util/qfxperf.cpp b/src/declarative/util/qfxperf.cpp
index e4f0c53..9ac9e8d 100644
--- a/src/declarative/util/qfxperf.cpp
+++ b/src/declarative/util/qfxperf.cpp
@@ -41,8 +41,8 @@
#include "qfxperf.h"
-
QT_BEGIN_NAMESPACE
+
Q_DEFINE_PERFORMANCE_LOG(QFxPerf, "QFx") {
Q_DEFINE_PERFORMANCE_METRIC(QmlParsing, "Compilation: QML Parsing")
Q_DEFINE_PERFORMANCE_METRIC(Compilation, " QML Compilation")
@@ -64,4 +64,5 @@ Q_DEFINE_PERFORMANCE_LOG(QFxPerf, "QFx") {
Q_DEFINE_PERFORMANCE_METRIC(QFxText_setText, " QFxText::setText")
Q_DEFINE_PERFORMANCE_METRIC(AddScript, "QmlScript::addScriptToEngine")
}
+
QT_END_NAMESPACE
diff --git a/src/declarative/util/qfxperf.h b/src/declarative/util/qfxperf.h
index 9fcf1d6..0bc0cc9 100644
--- a/src/declarative/util/qfxperf.h
+++ b/src/declarative/util/qfxperf.h
@@ -38,17 +38,17 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-#ifndef _QFXPERF_H_
-#define _QFXPERF_H_
+#ifndef QFXPERF_H
+#define QFXPERF_H
#include "qperformancelog.h"
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
+
Q_DECLARE_PERFORMANCE_LOG(QFxPerf) {
Q_DECLARE_PERFORMANCE_METRIC(QmlParsing)
@@ -73,9 +73,8 @@ Q_DECLARE_PERFORMANCE_LOG(QFxPerf) {
Q_DECLARE_PERFORMANCE_METRIC(AddScript)
}
-#endif // _QFXPERF_H_
-
-
QT_END_NAMESPACE
QT_END_HEADER
+
+#endif // QFXPERF_H
diff --git a/src/declarative/util/qfxview.cpp b/src/declarative/util/qfxview.cpp
index d8d9ba1..0855224 100644
--- a/src/declarative/util/qfxview.cpp
+++ b/src/declarative/util/qfxview.cpp
@@ -62,8 +62,8 @@
#include <QtDeclarative/qmlcontext.h>
#include <QtDeclarative/qmldebugger.h>
-
QT_BEGIN_NAMESPACE
+
DEFINE_BOOL_CONFIG_OPTION(itemTreeDump, ITEMTREE_DUMP);
DEFINE_BOOL_CONFIG_OPTION(qmlDebugger, QML_DEBUGGER);
@@ -561,4 +561,5 @@ void QFxView::dumpRoot()
{
root()->dump();
}
+
QT_END_NAMESPACE
diff --git a/src/declarative/util/qmlanimation.cpp b/src/declarative/util/qmlanimation.cpp
index 2a6cad9..da26bdd 100644
--- a/src/declarative/util/qmlanimation.cpp
+++ b/src/declarative/util/qmlanimation.cpp
@@ -45,6 +45,7 @@
#include "qfile.h"
#include "qmlpropertyvaluesource.h"
#include "qml.h"
+#include "qmlinfo.h"
#include "qmlanimation_p.h"
#include "qmlbehaviour.h"
#include <QParallelAnimationGroup>
@@ -60,7 +61,7 @@
/* TODO:
Check for any memory leaks
easing should be a QEasingCurve-type property
- All other XXXs
+ All other XXXs and ###s
*/
QT_BEGIN_NAMESPACE
@@ -85,11 +86,17 @@ QEasingCurve stringToCurve(const QString &curve)
QString prop_str =
easeName.mid(idx + 1, easeName.length() - 1 - idx - 1);
normalizedCurve = easeName.left(idx);
+ if (!normalizedCurve.startsWith(QLatin1String("ease"))) {
+ qWarning("QEasingCurve: Easing function '%s' must start with 'ease'",
+ curve.toLatin1().constData());
+ }
props = prop_str.split(QLatin1Char(','));
}
- normalizedCurve = normalizedCurve.mid(4);
+ if (normalizedCurve.startsWith(QLatin1String("ease")))
+ normalizedCurve = normalizedCurve.mid(4);
+
//XXX optimize?
int index = QEasingCurve::staticMetaObject.indexOfEnumerator("Type");
QMetaEnum me = QEasingCurve::staticMetaObject.enumerator(index);
@@ -179,7 +186,7 @@ QmlAbstractAnimation::QmlAbstractAnimation(QmlAbstractAnimationPrivate &dd, QObj
\code
Rect {
width: 100; height: 100
- x: NumericAnimation {
+ x: NumberAnimation {
running: MyMouse.pressed
from: 0; to: 100
}
@@ -192,7 +199,7 @@ QmlAbstractAnimation::QmlAbstractAnimation(QmlAbstractAnimationPrivate &dd, QObj
or not the animation is running.
\code
- NumericAnimation { id: MyAnimation }
+ NumberAnimation { id: MyAnimation }
Text { text: MyAnimation.running ? "Animation is running" : "Animation is not running" }
\endcode
@@ -219,6 +226,21 @@ void QmlAbstractAnimationPrivate::commence()
}
}
+//### make static?
+QmlMetaProperty QmlAbstractAnimationPrivate::createProperty(QObject *obj, const QString &str)
+{
+ Q_Q(QmlAbstractAnimation);
+ QmlMetaProperty prop = QmlMetaProperty::createProperty(obj, str);
+ if (!prop.isValid()) {
+ qmlInfo(q) << "Cannot animate non-existant property" << str;
+ return QmlMetaProperty();
+ } else if (!prop.isWritable()) {
+ qmlInfo(q) << "Cannot animate read-only property" << str;
+ return QmlMetaProperty();
+ }
+ return prop;
+}
+
void QmlAbstractAnimation::setRunning(bool r)
{
Q_D(QmlAbstractAnimation);
@@ -349,7 +371,7 @@ void QmlAbstractAnimation::setFinishPlaying(bool f)
\code
Rect {
- rotation: NumericAnimation { running: true; repeat: true; from: 0 to: 360 }
+ rotation: NumberAnimation { running: true; repeat: true; from: 0 to: 360 }
}
\endcode
*/
@@ -371,6 +393,16 @@ void QmlAbstractAnimation::setRepeat(bool r)
emit repeatChanged(r);
}
+int QmlAbstractAnimation::currentTime()
+{
+ return qtAnimation()->currentTime();
+}
+
+void QmlAbstractAnimation::setCurrentTime(int time)
+{
+ qtAnimation()->setCurrentTime(time);
+}
+
QmlAnimationGroup *QmlAbstractAnimation::group() const
{
Q_D(const QmlAbstractAnimation);
@@ -418,7 +450,7 @@ void QmlAbstractAnimation::setTarget(QObject *o)
d->target = o;
if (d->target && !d->propertyName.isEmpty()) {
- d->userProperty = QmlMetaProperty(d->target, d->propertyName);
+ d->userProperty = d->createProperty(d->target, d->propertyName);
} else {
d->userProperty.invalidate();
}
@@ -447,7 +479,7 @@ void QmlAbstractAnimation::setProperty(const QString &n)
d->propertyName = n;
if (d->target && !d->propertyName.isEmpty()) {
- d->userProperty = QmlMetaProperty(d->target, d->propertyName);
+ d->userProperty = d->createProperty(d->target, d->propertyName);
} else {
d->userProperty.invalidate();
}
@@ -502,7 +534,7 @@ void QmlAbstractAnimation::resume()
no further influence on property values. In this example animation
\code
Rect {
- x: NumericAnimation { from: 0; to: 100; duration: 500 }
+ x: NumberAnimation { from: 0; to: 100; duration: 500 }
}
\endcode
was stopped at time 250ms, the \c x property will have a value of 50.
@@ -540,7 +572,7 @@ void QmlAbstractAnimation::restart()
its end. In the following example,
\code
Rect {
- x: NumericAnimation { from: 0; to: 100; duration: 500 }
+ x: NumberAnimation { from: 0; to: 100; duration: 500 }
}
\endcode
calling \c stop() at time 250ms will result in the \c x property having
@@ -596,9 +628,9 @@ void QmlAbstractAnimation::timelineComplete()
A 500ms animation sequence, with a 100ms pause between two animations:
\code
SequentialAnimation {
- NumericAnimation { ... duration: 200 }
+ NumberAnimation { ... duration: 200 }
PauseAnimation { duration: 100 }
- NumericAnimation { ... duration: 200 }
+ NumberAnimation { ... duration: 200 }
}
\endcode
*/
@@ -683,16 +715,12 @@ QAbstractAnimation *QmlPauseAnimation::qtAnimation()
/*!
\qmlclass ColorAnimation QmlColorAnimation
- \inherits Animation
+ \inherits PropertyAnimation
\brief The ColorAnimation allows you to animate color changes.
\code
ColorAnimation { from: "white"; to: "#c0c0c0"; duration: 100 }
\endcode
-
- The default property animated is \c color, but like other animations,
- this can be changed by setting \c property. The \c color property will
- still animate. XXX is this a bug?
*/
/*!
\internal
@@ -706,56 +734,18 @@ QAbstractAnimation *QmlPauseAnimation::qtAnimation()
*/
QmlColorAnimation::QmlColorAnimation(QObject *parent)
-: QmlAbstractAnimation(*(new QmlColorAnimationPrivate), parent)
+: QmlPropertyAnimation(parent)
{
- Q_D(QmlColorAnimation);
+ Q_D(QmlPropertyAnimation);
d->init();
+ d->interpolatorType = QMetaType::QColor;
+ d->interpolator = QVariantAnimationPrivate::getInterpolator(d->interpolatorType);
}
QmlColorAnimation::~QmlColorAnimation()
{
}
-void QmlColorAnimationPrivate::init()
-{
- Q_Q(QmlColorAnimation);
- ca = new QmlTimeLineValueAnimator(q);
- ca->setStartValue(QVariant(0.0f));
- ca->setEndValue(QVariant(1.0f));
-}
-
-/*!
- \qmlproperty int ColorAnimation::duration
- This property holds the duration of the color transition, in milliseconds.
-
- The default value is 250.
-*/
-/*!
- \property QmlColorAnimation::duration
- \brief the duration of the transition, in milliseconds.
-
- The default value is 250.
-*/
-int QmlColorAnimation::duration() const
-{
- Q_D(const QmlColorAnimation);
- return d->ca->duration();
-}
-
-void QmlColorAnimation::setDuration(int duration)
-{
- if (duration < 0) {
- qWarning("QmlColorAnimation: Cannot set a duration of < 0");
- return;
- }
-
- Q_D(QmlColorAnimation);
- if (d->ca->duration() == duration)
- return;
- d->ca->setDuration(duration);
- emit durationChanged(duration);
-}
-
/*!
\qmlproperty color ColorAnimation::from
This property holds the starting color.
@@ -766,18 +756,13 @@ void QmlColorAnimation::setDuration(int duration)
*/
QColor QmlColorAnimation::from() const
{
- Q_D(const QmlColorAnimation);
- return d->fromValue;
+ Q_D(const QmlPropertyAnimation);
+ return d->from.value<QColor>();
}
void QmlColorAnimation::setFrom(const QColor &f)
{
- Q_D(QmlColorAnimation);
- if (d->fromIsDefined && f == d->fromValue)
- return;
- d->fromValue = f;
- d->fromIsDefined = f.isValid();
- emit fromChanged(f);
+ QmlPropertyAnimation::setFrom(f);
}
/*!
@@ -790,202 +775,15 @@ void QmlColorAnimation::setFrom(const QColor &f)
*/
QColor QmlColorAnimation::to() const
{
- Q_D(const QmlColorAnimation);
- return d->toValue;
+ Q_D(const QmlPropertyAnimation);
+ return d->to.value<QColor>();
}
void QmlColorAnimation::setTo(const QColor &t)
{
- Q_D(QmlColorAnimation);
- if (d->toIsDefined && t == d->toValue)
- return;
- d->toValue = t;
- d->toIsDefined = t.isValid();
- emit toChanged(t);
-}
-
-/*!
- \qmlproperty string ColorAnimation::easing
- This property holds the easing curve used for the transition.
-
- Each channel of the color is eased using the same easing curve.
- See NumericAnimation::easing for a full discussion of easing,
- and a list of available curves.
-*/
-QString QmlColorAnimation::easing() const
-{
- Q_D(const QmlColorAnimation);
- return d->easing;
+ QmlPropertyAnimation::setTo(t);
}
-void QmlColorAnimation::setEasing(const QString &e)
-{
- Q_D(QmlColorAnimation);
- if (d->easing == e)
- return;
-
- d->easing = e;
- d->ca->setEasingCurve(stringToCurve(d->easing));
- emit easingChanged(e);
-}
-
-/*!
- \qmlproperty list<Item> ColorAnimation::filter
- This property holds the items selected to be affected by this animation (all if not set).
- \sa exclude
-*/
-QList<QObject *> *QmlColorAnimation::filter()
-{
- Q_D(QmlColorAnimation);
- return &d->filter;
-}
-
-/*!
- \qmlproperty list<Item> ColorAnimation::exclude
- This property holds the items not to be affected by this animation.
- \sa filter
-*/
-QList<QObject *> *QmlColorAnimation::exclude()
-{
- Q_D(QmlColorAnimation);
- return &d->exclude;
-}
-
-void QmlColorAnimation::prepare(QmlMetaProperty &p)
-{
- Q_D(QmlColorAnimation);
- if (d->userProperty.isNull)
- d->property = p;
- else
- d->property = d->userProperty;
- d->fromSourced = false;
- d->value.QmlTimeLineValue::setValue(0.);
- d->ca->setAnimValue(&d->value, QAbstractAnimation::KeepWhenStopped);
- d->ca->setFromSourcedValue(&d->fromSourced);
-}
-
-QAbstractAnimation *QmlColorAnimation::qtAnimation()
-{
- Q_D(QmlColorAnimation);
- return d->ca;
-}
-
-void QmlColorAnimation::transition(QmlStateActions &actions,
- QmlMetaProperties &modified,
- TransitionDirection direction)
-{
- Q_D(QmlColorAnimation);
- Q_UNUSED(direction);
-
- struct NTransitionData : public QmlTimeLineValue
- {
- QmlStateActions actions;
- void write(QmlMetaProperty &property, const QVariant &color)
- {
- if (property.propertyType() == QVariant::Color) {
- property.write(color);
- }
- }
-
- void setValue(qreal v)
- {
- QmlTimeLineValue::setValue(v);
- for (int ii = 0; ii < actions.count(); ++ii) {
- Action &action = actions[ii];
-
- QColor to(action.toValue.value<QColor>());
-
- if (v == 1.) {
- write(action.property, to);
- } else {
- if (action.fromValue.isNull()) {
- action.fromValue = action.property.read();
- if (action.fromValue.isNull())
- action.fromValue = QVariant(QColor());
- }
-
- QColor from(action.fromValue.value<QColor>());
-
- QVariant newColor = QmlColorAnimationPrivate::colorInterpolator(&from, &to, v);
- write(action.property, newColor);
- }
- }
- }
- };
-
- //XXX should we get rid of this?
- QStringList props;
- props << QLatin1String("color");
- if (!d->propertyName.isEmpty() && !props.contains(d->propertyName))
- props.append(d->propertyName);
-
- NTransitionData *data = new NTransitionData;
-
- QSet<QObject *> objs;
- for (int ii = 0; ii < actions.count(); ++ii) {
- Action &action = actions[ii];
-
- QObject *obj = action.property.object();
- QString propertyName = action.property.name();
-
- if ((d->filter.isEmpty() || d->filter.contains(obj)) &&
- (!d->exclude.contains(obj)) && props.contains(propertyName) &&
- (!target() || target() == obj)) {
- objs.insert(obj);
- Action myAction = action;
-
- if (d->fromIsDefined) {
- myAction.fromValue = QVariant(d->fromValue);
- } else {
- myAction.fromValue = QVariant();
- }
- if (d->toIsDefined)
- myAction.toValue = QVariant(d->toValue);
-
- modified << action.property;
- data->actions << myAction;
- action.fromValue = myAction.toValue;
- }
- }
-
- if (d->toValue.isValid() && target() && !objs.contains(target())) {
- QObject *obj = target();
- for (int jj = 0; jj < props.count(); ++jj) {
- Action myAction;
- myAction.property = QmlMetaProperty(obj, props.at(jj));
-
- if (d->fromIsDefined)
- myAction.fromValue = QVariant(d->fromValue);
-
- myAction.toValue = QVariant(d->toValue);
- myAction.bv = 0;
- myAction.event = 0;
- data->actions << myAction;
- }
- }
-
- if (data->actions.count())
- d->ca->setAnimValue(data, QAbstractAnimation::DeleteWhenStopped);
- else
- delete data;
-}
-
-QVariantAnimation::Interpolator QmlColorAnimationPrivate::colorInterpolator = 0;
-
-void QmlColorAnimationPrivate::valueChanged(qreal v)
-{
- if (!fromSourced) {
- if (!fromIsDefined) {
- fromValue = qvariant_cast<QColor>(property.read());
- }
- fromSourced = true;
- }
-
- if (property.propertyType() == QVariant::Color) {
- QVariant newColor = colorInterpolator(&fromValue, &toValue, v);
- property.write(newColor);
- }
-}
QML_DEFINE_TYPE(QmlColorAnimation,ColorAnimation)
/*!
@@ -1249,10 +1047,14 @@ void QmlSetPropertyAction::transition(QmlStateActions &actions,
QObject *obj = action.property.object();
QString propertyName = action.property.name();
-
- if ((d->filter.isEmpty() || d->filter.contains(obj)) &&
- (!d->exclude.contains(obj)) && props.contains(propertyName) &&
- (!target() || target() == obj)) {
+ QObject *sObj = action.specifiedObject;
+ QString sPropertyName = action.specifiedProperty;
+ bool same = (obj == sObj);
+
+ if ((d->filter.isEmpty() || d->filter.contains(obj) || (!same && d->filter.contains(sObj))) &&
+ (!d->exclude.contains(obj)) && (same || (!d->exclude.contains(sObj))) &&
+ (props.contains(propertyName) || (!same && props.contains(sPropertyName))) &&
+ (!target() || target() == obj || (!same && target() == sObj))) {
objs.insert(obj);
Action myAction = action;
@@ -1269,7 +1071,7 @@ void QmlSetPropertyAction::transition(QmlStateActions &actions,
QObject *obj = target();
for (int jj = 0; jj < props.count(); ++jj) {
Action myAction;
- myAction.property = QmlMetaProperty(obj, props.at(jj));
+ myAction.property = d->createProperty(obj, props.at(jj));
myAction.toValue = d->value;
data->actions << myAction;
}
@@ -1395,391 +1197,82 @@ void QmlParentChangeAction::transition(QmlStateActions &actions,
QML_DEFINE_TYPE(QmlParentChangeAction,ParentChangeAction)
/*!
- \qmlclass NumericAnimation QmlNumericAnimation
- \inherits Animation
- \brief The NumericAnimation allows you to animate changes in properties of type qreal.
+ \qmlclass NumberAnimation QmlNumberAnimation
+ \inherits PropertyAnimation
+ \brief The NumberAnimation allows you to animate changes in properties of type qreal.
Animate a set of properties over 200ms, from their values in the start state to
their values in the end state of the transition:
\code
- NumericAnimation { properties: "x,y,scale"; duration: 200 }
+ NumberAnimation { properties: "x,y,scale"; duration: 200 }
\endcode
*/
/*!
\internal
- \class QmlNumericAnimation
+ \class QmlNumberAnimation
\ingroup group_animation
\ingroup group_states
- \brief The QmlNumericAnimation class allows you to animate changes in properties of type qreal.
+ \brief The QmlNumberAnimation class allows you to animate changes in properties of type qreal.
- A QmlNumericAnimation object can be instantiated in Qml using the tag
- \l{xmlNumericAnimation} {&lt;NumericAnimation&gt;}.
+ A QmlNumberAnimation object can be instantiated in Qml using the tag
+ \l{xmlNumberAnimation} {&lt;NumberAnimation&gt;}.
*/
-QmlNumericAnimation::QmlNumericAnimation(QObject *parent)
-: QmlAbstractAnimation(*(new QmlNumericAnimationPrivate), parent)
+QmlNumberAnimation::QmlNumberAnimation(QObject *parent)
+: QmlPropertyAnimation(parent)
{
- Q_D(QmlNumericAnimation);
+ Q_D(QmlPropertyAnimation);
d->init();
+ d->interpolatorType = QMetaType::QReal;
+ d->interpolator = QVariantAnimationPrivate::getInterpolator(d->interpolatorType);
}
-QmlNumericAnimation::~QmlNumericAnimation()
-{
-}
-
-void QmlNumericAnimationPrivate::init()
-{
- Q_Q(QmlNumericAnimation);
- na = new QmlTimeLineValueAnimator(q);
- na->setStartValue(QVariant(0.0f));
- na->setEndValue(QVariant(1.0f));
-}
-
-/*!
- \qmlproperty int NumericAnimation::duration
- This property holds the duration of the transition, in milliseconds.
-
- The default value is 250.
-*/
-/*!
- \property QmlNumericAnimation::duration
- \brief the duration of the transition, in milliseconds.
-
- The default value is 250.
-*/
-int QmlNumericAnimation::duration() const
+QmlNumberAnimation::~QmlNumberAnimation()
{
- Q_D(const QmlNumericAnimation);
- return d->na->duration();
-}
-
-void QmlNumericAnimation::setDuration(int duration)
-{
- if (duration < 0) {
- qWarning("QmlNumericAnimation: Cannot set a duration of < 0");
- return;
- }
-
- Q_D(QmlNumericAnimation);
- if (d->na->duration() == duration)
- return;
- d->na->setDuration(duration);
- emit durationChanged(duration);
}
/*!
- \qmlproperty real NumericAnimation::from
+ \qmlproperty real NumberAnimation::from
This property holds the starting value.
If not set, then the value defined in the start state of the transition.
*/
/*!
- \property QmlNumericAnimation::from
+ \property QmlNumberAnimation::from
\brief the starting value.
*/
-qreal QmlNumericAnimation::from() const
+qreal QmlNumberAnimation::from() const
{
- Q_D(const QmlNumericAnimation);
- return d->from;
+ Q_D(const QmlPropertyAnimation);
+ return d->from.toDouble(); //### toFloat?
}
-void QmlNumericAnimation::setFrom(qreal f)
+void QmlNumberAnimation::setFrom(qreal f)
{
- Q_D(QmlNumericAnimation);
- if (!d->from.isNull && f == d->from)
- return;
- d->from = f;
- emit fromChanged(f);
+ QmlPropertyAnimation::setFrom(f);
}
/*!
- \qmlproperty real NumericAnimation::to
+ \qmlproperty real NumberAnimation::to
This property holds the ending value.
If not set, then the value defined in the end state of the transition.
*/
/*!
- \property QmlNumericAnimation::to
+ \property QmlNumberAnimation::to
\brief the ending value.
*/
-qreal QmlNumericAnimation::to() const
+qreal QmlNumberAnimation::to() const
{
- Q_D(const QmlNumericAnimation);
- return d->to;
+ Q_D(const QmlPropertyAnimation);
+ return d->to.toDouble(); //### toFloat?
}
-void QmlNumericAnimation::setTo(qreal t)
+void QmlNumberAnimation::setTo(qreal t)
{
- Q_D(QmlNumericAnimation);
- if (!d->to.isNull && t == d->to)
- return;
- d->to = t;
- emit toChanged(t);
+ QmlPropertyAnimation::setTo(t);
}
-/*!
- \qmlproperty string NumericAnimation::easing
- \brief the easing curve used for the transition.
-
- Available values are:
-
- \list
- \i \e easeNone - Easing equation function for a simple linear tweening, with no easing.
- \i \e easeInQuad - Easing equation function for a quadratic (t^2) easing in: accelerating from zero velocity.
- \i \e easeOutQuad - Easing equation function for a quadratic (t^2) easing out: decelerating to zero velocity.
- \i \e easeInOutQuad - Easing equation function for a quadratic (t^2) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInQuad - Easing equation function for a quadratic (t^2) easing out/in: deceleration until halfway, then acceleration.
- \i \e easeInCubic - Easing equation function for a cubic (t^3) easing in: accelerating from zero velocity.
- \i \e easeOutCubic - Easing equation function for a cubic (t^3) easing out: decelerating from zero velocity.
- \i \e easeInOutCubic - Easing equation function for a cubic (t^3) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInCubic - Easing equation function for a cubic (t^3) easing out/in: deceleration until halfway, then acceleration.
- \i \e easeInQuart - Easing equation function for a quartic (t^4) easing in: accelerating from zero velocity.
- \i \e easeOutQuart - Easing equation function for a quartic (t^4) easing out: decelerating from zero velocity.
- \i \e easeInOutQuart - Easing equation function for a quartic (t^4) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInQuart - Easing equation function for a quartic (t^4) easing out/in: deceleration until halfway, then acceleration.
- \i \e easeInQuint - Easing equation function for a quintic (t^5) easing in: accelerating from zero velocity.
- \i \e easeOutQuint - Easing equation function for a quintic (t^5) easing out: decelerating from zero velocity.
- \i \e easeInOutQuint - Easing equation function for a quintic (t^5) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInQuint - Easing equation function for a quintic (t^5) easing out/in: deceleration until halfway, then acceleration.
- \i \e easeInSine - Easing equation function for a sinusoidal (sin(t)) easing in: accelerating from zero velocity.
- \i \e easeOutSine - Easing equation function for a sinusoidal (sin(t)) easing out: decelerating from zero velocity.
- \i \e easeInOutSine - Easing equation function for a sinusoidal (sin(t)) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInSine - Easing equation function for a sinusoidal (sin(t)) easing out/in: deceleration until halfway, then acceleration.
- \i \e easeInExpo - Easing equation function for an exponential (2^t) easing in: accelerating from zero velocity.
- \i \e easeOutExpo - Easing equation function for an exponential (2^t) easing out: decelerating from zero velocity.
- \i \e easeInOutExpo - Easing equation function for an exponential (2^t) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInExpo - Easing equation function for an exponential (2^t) easing out/in: deceleration until halfway, then acceleration.
- \i \e easeInCirc - Easing equation function for a circular (sqrt(1-t^2)) easing in: accelerating from zero velocity.
- \i \e easeOutCirc - Easing equation function for a circular (sqrt(1-t^2)) easing out: decelerating from zero velocity.
- \i \e easeInOutCirc - Easing equation function for a circular (sqrt(1-t^2)) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInCirc - Easing equation function for a circular (sqrt(1-t^2)) easing out/in: deceleration until halfway, then acceleration.
- \i \e easeInElastic - Easing equation function for an elastic (exponentially decaying sine wave) easing in: accelerating from zero velocity. The peak amplitude can be set with the \e amplitude parameter, and the period of decay by the \e period parameter.
- \i \e easeOutElastic - Easing equation function for an elastic (exponentially decaying sine wave) easing out: decelerating from zero velocity. The peak amplitude can be set with the \e amplitude parameter, and the period of decay by the \e period parameter.
- \i \e easeInOutElastic - Easing equation function for an elastic (exponentially decaying sine wave) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInElastic - Easing equation function for an elastic (exponentially decaying sine wave) easing out/in: deceleration until halfway, then acceleration.
- \i \e easeInBack - Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in: accelerating from zero velocity.
- \i \e easeOutBack - Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out: decelerating from zero velocity.
- \i \e easeInOutBack - Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInBack - Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out/in: deceleration until halfway, then acceleration.
- \i \e easeOutBounce - Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity.
- \i \e easeInBounce - Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity.
- \i \e easeInOutBounce - Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration.
- \i \e easeOutInBounce - Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out/in: deceleration until halfway, then acceleration.
- \endlist
-*/
-
-/*!
- \property QmlNumericAnimation::easing
- This property holds the easing curve to use.
-
- \sa QEasingCurve
-*/
-QString QmlNumericAnimation::easing() const
-{
- Q_D(const QmlNumericAnimation);
- return d->easing;
-}
-
-void QmlNumericAnimation::setEasing(const QString &e)
-{
- Q_D(QmlNumericAnimation);
- if (d->easing == e)
- return;
-
- d->easing = e;
- d->na->setEasingCurve(stringToCurve(d->easing));
- emit easingChanged(e);
-}
-
-/*!
- \qmlproperty string NumericAnimation::properties
- This property holds the properties this animation should be applied to.
-
- This is a comma-separated list of properties that should use
- this animation when they change.
-*/
-/*!
- \property QmlNumericAnimation::properties
- \brief the properties this animation should be applied to.
-
- properties holds a comma-separated list of properties that should use
- this animation when they change.
-*/
-QString QmlNumericAnimation::properties() const
-{
- Q_D(const QmlNumericAnimation);
- return d->properties;
-}
-
-void QmlNumericAnimation::setProperties(const QString &prop)
-{
- Q_D(QmlNumericAnimation);
- if (d->properties == prop)
- return;
-
- d->properties = prop;
- emit propertiesChanged(prop);
-}
-
-/*!
- \qmlproperty list<Item> NumericAnimation::filter
- This property holds the items selected to be affected by this animation (all if not set).
- \sa exclude
-*/
-QList<QObject *> *QmlNumericAnimation::filter()
-{
- Q_D(QmlNumericAnimation);
- return &d->filter;
-}
-
-/*!
- \qmlproperty list<Item> NumericAnimation::exclude
- This property holds the items not to be affected by this animation.
- \sa filter
-*/
-QList<QObject *> *QmlNumericAnimation::exclude()
-{
- Q_D(QmlNumericAnimation);
- return &d->exclude;
-}
-
-void QmlNumericAnimationPrivate::valueChanged(qreal r)
-{
- if (!fromSourced) {
- if (from.isNull) {
- fromValue = qvariant_cast<qreal>(property.read());
- } else {
- fromValue = from;
- }
- fromSourced = true;
- }
-
- if (r == 1.) {
- property.write(to.value);
- } else {
- qreal val = fromValue + (to-fromValue) * r;
- property.write(val);
- }
-}
-
-void QmlNumericAnimation::prepare(QmlMetaProperty &p)
-{
- Q_D(QmlNumericAnimation);
- if (d->userProperty.isNull)
- d->property = p;
- else
- d->property = d->userProperty;
- d->fromSourced = false;
- d->value.QmlTimeLineValue::setValue(0.);
- d->na->setAnimValue(&d->value, QAbstractAnimation::KeepWhenStopped);
- d->na->setFromSourcedValue(&d->fromSourced);
-}
-
-QAbstractAnimation *QmlNumericAnimation::qtAnimation()
-{
- Q_D(QmlNumericAnimation);
- return d->na;
-}
-
-void QmlNumericAnimation::transition(QmlStateActions &actions,
- QmlMetaProperties &modified,
- TransitionDirection direction)
-{
- Q_D(QmlNumericAnimation);
- Q_UNUSED(direction);
-
- struct NTransitionData : public QmlTimeLineValue
- {
- QmlStateActions actions;
- void setValue(qreal v)
- {
- QmlTimeLineValue::setValue(v);
- for (int ii = 0; ii < actions.count(); ++ii) {
- Action &action = actions[ii];
-
- QmlBehaviour::_ignore = true;
- if (v == 1.)
- action.property.write(action.toValue.toDouble());
- else {
- if (action.fromValue.isNull()) {
- action.fromValue = action.property.read();
- if (action.fromValue.isNull()) {
- action.fromValue = QVariant(0.);
- }
- }
- qreal start = action.fromValue.toDouble();
- qreal end = action.toValue.toDouble();
- qreal val = start + (end-start) * v;
- action.property.write(val);
- }
- QmlBehaviour::_ignore = false;
- }
- }
- };
-
- QStringList props = d->properties.isEmpty() ? QStringList() : d->properties.split(QLatin1Char(','));
- for (int ii = 0; ii < props.count(); ++ii)
- props[ii] = props.at(ii).trimmed();
- if (!d->propertyName.isEmpty() && !props.contains(d->propertyName))
- props.append(d->propertyName);
-
- if (d->userProperty.isValid() && props.isEmpty() && !target()) {
- props.append(d->userProperty.value.name());
- d->target = d->userProperty.value.object();
- }
-
- NTransitionData *data = new NTransitionData;
-
- QSet<QObject *> objs;
- for (int ii = 0; ii < actions.count(); ++ii) {
- Action &action = actions[ii];
-
- QObject *obj = action.property.object();
- QString propertyName = action.property.name();
-
- if ((d->filter.isEmpty() || d->filter.contains(obj)) &&
- (!d->exclude.contains(obj)) && props.contains(propertyName) &&
- (!target() || target() == obj)) {
- objs.insert(obj);
- Action myAction = action;
- if (d->from.isValid()) {
- myAction.fromValue = QVariant(d->from);
- } else {
- myAction.fromValue = QVariant();
- }
- if (d->to.isValid())
- myAction.toValue = QVariant(d->to);
-
- modified << action.property;
-
- data->actions << myAction;
- action.fromValue = myAction.toValue;
- }
- }
-
- if (d->to.isValid() && target() && !objs.contains(target())) {
- QObject *obj = target();
- for (int jj = 0; jj < props.count(); ++jj) {
- Action myAction;
- myAction.property = QmlMetaProperty(obj, props.at(jj));
-
- if (d->from.isValid())
- myAction.fromValue = QVariant(d->from);
-
- myAction.toValue = QVariant(d->to);
- myAction.bv = 0;
- myAction.event = 0;
- data->actions << myAction;
- }
- }
-
- if (data->actions.count()) {
- d->na->setAnimValue(data, QAbstractAnimation::DeleteWhenStopped);
- } else {
- delete data;
- }
-}
-
-QML_DEFINE_TYPE(QmlNumericAnimation,NumericAnimation)
+QML_DEFINE_TYPE(QmlNumberAnimation,NumberAnimation)
QmlAnimationGroup::QmlAnimationGroup(QObject *parent)
: QmlAbstractAnimation(*(new QmlAnimationGroupPrivate), parent)
@@ -1808,8 +1301,8 @@ QmlList<QmlAbstractAnimation *> *QmlAnimationGroup::animations()
\code
SequentialAnimation {
- NumericAnimation { target: MyItem; property: "x"; to: 100 }
- NumericAnimation { target: MyItem; property: "x"; to: 0 }
+ NumberAnimation { target: MyItem; property: "x"; to: 100 }
+ NumberAnimation { target: MyItem; property: "x"; to: 0 }
}
\endcode
@@ -1891,8 +1384,8 @@ QML_DEFINE_TYPE(QmlSequentialAnimation,SequentialAnimation)
\code
ParallelAnimation {
- NumericAnimation { target: MyItem; property: "x"; to: 100 }
- NumericAnimation { target: MyItem; property: "y"; to: 100 }
+ NumberAnimation { target: MyItem; property: "x"; to: 100 }
+ NumberAnimation { target: MyItem; property: "y"; to: 100 }
}
\endcode
@@ -1961,17 +1454,23 @@ void QmlParallelAnimation::transition(QmlStateActions &actions,
QML_DEFINE_TYPE(QmlParallelAnimation,ParallelAnimation)
-QVariant QmlVariantAnimationPrivate::interpolateVariant(const QVariant &from, const QVariant &to, qreal progress)
+//### profile and optimize
+QVariant QmlPropertyAnimationPrivate::interpolateVariant(const QVariant &from, const QVariant &to, qreal progress)
{
if (from.userType() != to.userType())
return QVariant();
QVariantAnimation::Interpolator interpolator = QVariantAnimationPrivate::getInterpolator(from.userType());
- return interpolator(from.constData(), to.constData(), progress);
+ if (interpolator)
+ return interpolator(from.constData(), to.constData(), progress);
+ else
+ return QVariant();
}
//convert a variant from string type to another animatable type
-void QmlVariantAnimationPrivate::convertVariant(QVariant &variant, QVariant::Type type)
+//### should use any registered string convertor
+//### profile and optimize
+void QmlPropertyAnimationPrivate::convertVariant(QVariant &variant, QVariant::Type type)
{
if (variant.type() != QVariant::String) {
variant.convert(type);
@@ -2014,9 +1513,9 @@ void QmlVariantAnimationPrivate::convertVariant(QVariant &variant, QVariant::Typ
}
/*!
- \qmlclass VariantAnimation QmlVariantAnimation
+ \qmlclass PropertyAnimation QmlPropertyAnimation
\inherits Animation
- \brief The VariantAnimation allows you to animate changes in properties of type QVariant.
+ \brief The PropertyAnimation allows you to animate property changes.
Animate a size property over 200ms, from its current size to 20-by-20:
\code
@@ -2024,51 +1523,51 @@ void QmlVariantAnimationPrivate::convertVariant(QVariant &variant, QVariant::Typ
\endcode
*/
-QmlVariantAnimation::QmlVariantAnimation(QObject *parent)
-: QmlAbstractAnimation(*(new QmlVariantAnimationPrivate), parent)
+QmlPropertyAnimation::QmlPropertyAnimation(QObject *parent)
+: QmlAbstractAnimation(*(new QmlPropertyAnimationPrivate), parent)
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
d->init();
}
-QmlVariantAnimation::~QmlVariantAnimation()
+QmlPropertyAnimation::~QmlPropertyAnimation()
{
}
-void QmlVariantAnimationPrivate::init()
+void QmlPropertyAnimationPrivate::init()
{
- Q_Q(QmlVariantAnimation);
+ Q_Q(QmlPropertyAnimation);
va = new QmlTimeLineValueAnimator(q);
va->setStartValue(QVariant(0.0f));
va->setEndValue(QVariant(1.0f));
}
/*!
- \qmlproperty int VariantAnimation::duration
+ \qmlproperty int PropertyAnimation::duration
This property holds the duration of the transition, in milliseconds.
The default value is 250.
*/
/*!
- \property QmlVariantAnimation::duration
+ \property QmlPropertyAnimation::duration
\brief the duration of the transition, in milliseconds.
The default value is 250.
*/
-int QmlVariantAnimation::duration() const
+int QmlPropertyAnimation::duration() const
{
- Q_D(const QmlVariantAnimation);
+ Q_D(const QmlPropertyAnimation);
return d->va->duration();
}
-void QmlVariantAnimation::setDuration(int duration)
+void QmlPropertyAnimation::setDuration(int duration)
{
if (duration < 0) {
- qWarning("QmlVariantAnimation: Cannot set a duration of < 0");
+ qWarning("QmlPropertyAnimation: Cannot set a duration of < 0");
return;
}
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
if (d->va->duration() == duration)
return;
d->va->setDuration(duration);
@@ -2076,23 +1575,23 @@ void QmlVariantAnimation::setDuration(int duration)
}
/*!
- \qmlproperty real VariantAnimation::from
+ \qmlproperty real PropertyAnimation::from
This property holds the starting value.
If not set, then the value defined in the start state of the transition.
*/
/*!
- \property QmlVariantAnimation::from
+ \property QmlPropertyAnimation::from
\brief the starting value.
*/
-QVariant QmlVariantAnimation::from() const
+QVariant QmlPropertyAnimation::from() const
{
- Q_D(const QmlVariantAnimation);
+ Q_D(const QmlPropertyAnimation);
return d->from;
}
-void QmlVariantAnimation::setFrom(const QVariant &f)
+void QmlPropertyAnimation::setFrom(const QVariant &f)
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
if (d->fromIsDefined && f == d->from)
return;
d->from = f;
@@ -2101,23 +1600,23 @@ void QmlVariantAnimation::setFrom(const QVariant &f)
}
/*!
- \qmlproperty real VariantAnimation::to
+ \qmlproperty real PropertyAnimation::to
This property holds the ending value.
If not set, then the value defined in the end state of the transition.
*/
/*!
- \property QmlVariantAnimation::to
+ \property QmlPropertyAnimation::to
\brief the ending value.
*/
-QVariant QmlVariantAnimation::to() const
+QVariant QmlPropertyAnimation::to() const
{
- Q_D(const QmlVariantAnimation);
+ Q_D(const QmlPropertyAnimation);
return d->to;
}
-void QmlVariantAnimation::setTo(const QVariant &t)
+void QmlPropertyAnimation::setTo(const QVariant &t)
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
if (d->toIsDefined && t == d->to)
return;
d->to = t;
@@ -2126,28 +1625,71 @@ void QmlVariantAnimation::setTo(const QVariant &t)
}
/*!
- \qmlproperty string VariantAnimation::easing
- This property holds the easing curve used for the transition.
+ \qmlproperty string PropertyAnimation::easing
+ \brief the easing curve used for the transition.
+
+ Available values are:
- See NumericAnimation::easing for a full discussion of easing,
- and a list of available curves.
+ \list
+ \i \e easeNone - Easing equation function for a simple linear tweening, with no easing.
+ \i \e easeInQuad - Easing equation function for a quadratic (t^2) easing in: accelerating from zero velocity.
+ \i \e easeOutQuad - Easing equation function for a quadratic (t^2) easing out: decelerating to zero velocity.
+ \i \e easeInOutQuad - Easing equation function for a quadratic (t^2) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInQuad - Easing equation function for a quadratic (t^2) easing out/in: deceleration until halfway, then acceleration.
+ \i \e easeInCubic - Easing equation function for a cubic (t^3) easing in: accelerating from zero velocity.
+ \i \e easeOutCubic - Easing equation function for a cubic (t^3) easing out: decelerating from zero velocity.
+ \i \e easeInOutCubic - Easing equation function for a cubic (t^3) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInCubic - Easing equation function for a cubic (t^3) easing out/in: deceleration until halfway, then acceleration.
+ \i \e easeInQuart - Easing equation function for a quartic (t^4) easing in: accelerating from zero velocity.
+ \i \e easeOutQuart - Easing equation function for a quartic (t^4) easing out: decelerating from zero velocity.
+ \i \e easeInOutQuart - Easing equation function for a quartic (t^4) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInQuart - Easing equation function for a quartic (t^4) easing out/in: deceleration until halfway, then acceleration.
+ \i \e easeInQuint - Easing equation function for a quintic (t^5) easing in: accelerating from zero velocity.
+ \i \e easeOutQuint - Easing equation function for a quintic (t^5) easing out: decelerating from zero velocity.
+ \i \e easeInOutQuint - Easing equation function for a quintic (t^5) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInQuint - Easing equation function for a quintic (t^5) easing out/in: deceleration until halfway, then acceleration.
+ \i \e easeInSine - Easing equation function for a sinusoidal (sin(t)) easing in: accelerating from zero velocity.
+ \i \e easeOutSine - Easing equation function for a sinusoidal (sin(t)) easing out: decelerating from zero velocity.
+ \i \e easeInOutSine - Easing equation function for a sinusoidal (sin(t)) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInSine - Easing equation function for a sinusoidal (sin(t)) easing out/in: deceleration until halfway, then acceleration.
+ \i \e easeInExpo - Easing equation function for an exponential (2^t) easing in: accelerating from zero velocity.
+ \i \e easeOutExpo - Easing equation function for an exponential (2^t) easing out: decelerating from zero velocity.
+ \i \e easeInOutExpo - Easing equation function for an exponential (2^t) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInExpo - Easing equation function for an exponential (2^t) easing out/in: deceleration until halfway, then acceleration.
+ \i \e easeInCirc - Easing equation function for a circular (sqrt(1-t^2)) easing in: accelerating from zero velocity.
+ \i \e easeOutCirc - Easing equation function for a circular (sqrt(1-t^2)) easing out: decelerating from zero velocity.
+ \i \e easeInOutCirc - Easing equation function for a circular (sqrt(1-t^2)) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInCirc - Easing equation function for a circular (sqrt(1-t^2)) easing out/in: deceleration until halfway, then acceleration.
+ \i \e easeInElastic - Easing equation function for an elastic (exponentially decaying sine wave) easing in: accelerating from zero velocity. The peak amplitude can be set with the \e amplitude parameter, and the period of decay by the \e period parameter.
+ \i \e easeOutElastic - Easing equation function for an elastic (exponentially decaying sine wave) easing out: decelerating from zero velocity. The peak amplitude can be set with the \e amplitude parameter, and the period of decay by the \e period parameter.
+ \i \e easeInOutElastic - Easing equation function for an elastic (exponentially decaying sine wave) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInElastic - Easing equation function for an elastic (exponentially decaying sine wave) easing out/in: deceleration until halfway, then acceleration.
+ \i \e easeInBack - Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in: accelerating from zero velocity.
+ \i \e easeOutBack - Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out: decelerating from zero velocity.
+ \i \e easeInOutBack - Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInBack - Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out/in: deceleration until halfway, then acceleration.
+ \i \e easeOutBounce - Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity.
+ \i \e easeInBounce - Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity.
+ \i \e easeInOutBounce - Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration.
+ \i \e easeOutInBounce - Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out/in: deceleration until halfway, then acceleration.
+ \endlist
*/
/*!
- \property QmlVariantAnimation::easing
+ \property QmlPropertyAnimation::easing
\brief the easing curve to use.
\sa QEasingCurve
*/
-QString QmlVariantAnimation::easing() const
+QString QmlPropertyAnimation::easing() const
{
- Q_D(const QmlVariantAnimation);
+ Q_D(const QmlPropertyAnimation);
return d->easing;
}
-void QmlVariantAnimation::setEasing(const QString &e)
+void QmlPropertyAnimation::setEasing(const QString &e)
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
if (d->easing == e)
return;
@@ -2157,28 +1699,28 @@ void QmlVariantAnimation::setEasing(const QString &e)
}
/*!
- \qmlproperty string VariantAnimation::properties
+ \qmlproperty string PropertyAnimation::properties
This property holds the properties this animation should be applied to.
This is a comma-separated list of properties that should use
this animation when they change.
*/
/*!
- \property QmlVariantAnimation::properties
+ \property QmlPropertyAnimation::properties
\brief the properties this animation should be applied to
properties holds a copy separated list of properties that should use
this animation when they change.
*/
-QString QmlVariantAnimation::properties() const
+QString QmlPropertyAnimation::properties() const
{
- Q_D(const QmlVariantAnimation);
+ Q_D(const QmlPropertyAnimation);
return d->properties;
}
-void QmlVariantAnimation::setProperties(const QString &prop)
+void QmlPropertyAnimation::setProperties(const QString &prop)
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
if (d->properties == prop)
return;
@@ -2187,32 +1729,33 @@ void QmlVariantAnimation::setProperties(const QString &prop)
}
/*!
- \qmlproperty list<Item> VariantAnimation::filter
+ \qmlproperty list<Item> PropertyAnimation::filter
This property holds the items selected to be affected by this animation (all if not set).
\sa exclude
*/
-QList<QObject *> *QmlVariantAnimation::filter()
+QList<QObject *> *QmlPropertyAnimation::filter()
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
return &d->filter;
}
/*!
- \qmlproperty list<Item> VariantAnimation::exclude
+ \qmlproperty list<Item> PropertyAnimation::exclude
This property holds the items not to be affected by this animation.
\sa filter
*/
-QList<QObject *> *QmlVariantAnimation::exclude()
+QList<QObject *> *QmlPropertyAnimation::exclude()
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
return &d->exclude;
}
-void QmlVariantAnimationPrivate::valueChanged(qreal r)
+void QmlPropertyAnimationPrivate::valueChanged(qreal r)
{
if (!fromSourced) {
if (!fromIsDefined) {
from = property.read();
+ convertVariant(from, (QVariant::Type)(interpolatorType ? interpolatorType : property.propertyType()));
}
fromSourced = true;
}
@@ -2220,28 +1763,30 @@ void QmlVariantAnimationPrivate::valueChanged(qreal r)
if (r == 1.) {
property.write(to);
} else {
- QVariant val = interpolateVariant(from, to, r);
- property.write(val);
+ if (interpolator)
+ property.write(interpolator(from.constData(), to.constData(), r));
+ else
+ property.write(interpolateVariant(from, to, r)); //### optimize
}
}
-QAbstractAnimation *QmlVariantAnimation::qtAnimation()
+QAbstractAnimation *QmlPropertyAnimation::qtAnimation()
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
return d->va;
}
-void QmlVariantAnimation::prepare(QmlMetaProperty &p)
+void QmlPropertyAnimation::prepare(QmlMetaProperty &p)
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
if (d->userProperty.isNull)
d->property = p;
else
d->property = d->userProperty;
- d->convertVariant(d->to, (QVariant::Type)d->property.propertyType());
+ d->convertVariant(d->to, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : d->property.propertyType()));
if (d->fromIsDefined)
- d->convertVariant(d->from, (QVariant::Type)d->property.propertyType());
+ d->convertVariant(d->from, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : d->property.propertyType()));
d->fromSourced = false;
d->value.QmlTimeLineValue::setValue(0.);
@@ -2249,44 +1794,66 @@ void QmlVariantAnimation::prepare(QmlMetaProperty &p)
d->va->setFromSourcedValue(&d->fromSourced);
}
-void QmlVariantAnimation::transition(QmlStateActions &actions,
+void QmlPropertyAnimation::transition(QmlStateActions &actions,
QmlMetaProperties &modified,
TransitionDirection direction)
{
- Q_D(QmlVariantAnimation);
+ Q_D(QmlPropertyAnimation);
Q_UNUSED(direction);
- struct NTransitionData : public QmlTimeLineValue
+ struct PropertyUpdater : public QmlTimeLineValue
{
QmlStateActions actions;
+ int interpolatorType; //for Number/ColorAnimation
+ int prevInterpolatorType; //for generic
+ QVariantAnimation::Interpolator interpolator;
void setValue(qreal v)
{
QmlTimeLineValue::setValue(v);
for (int ii = 0; ii < actions.count(); ++ii) {
Action &action = actions[ii];
+ QmlBehaviour::_ignore = true;
if (v == 1.)
action.property.write(action.toValue);
else {
if (action.fromValue.isNull()) {
action.fromValue = action.property.read();
- /*if (action.fromValue.isNull())
- action.fromValue = QVariant(0.);*/ //XXX can we give a default value for any type?
+ if (interpolatorType)
+ QmlPropertyAnimationPrivate::convertVariant(action.fromValue, (QVariant::Type)interpolatorType);
+ }
+ if (!interpolatorType) {
+ int propType = action.property.propertyType();
+ if (!prevInterpolatorType || prevInterpolatorType != propType) {
+ prevInterpolatorType = propType;
+ interpolator = QVariantAnimationPrivate::getInterpolator(prevInterpolatorType);
+ }
}
- QVariant val = QmlVariantAnimationPrivate::interpolateVariant(action.fromValue, action.toValue, v);
- action.property.write(val);
+ if (interpolator)
+ action.property.write(interpolator(action.fromValue.constData(), action.toValue.constData(), v));
}
+ QmlBehaviour::_ignore = false;
}
}
};
- QStringList props = d->properties.split(QLatin1Char(','));
+ QStringList props = d->properties.isEmpty() ? QStringList() : d->properties.split(QLatin1Char(','));
for (int ii = 0; ii < props.count(); ++ii)
props[ii] = props.at(ii).trimmed();
if (!d->propertyName.isEmpty() && !props.contains(d->propertyName))
props.append(d->propertyName);
- NTransitionData *data = new NTransitionData;
+ /* ### we used to select properties of name 'color' by default for color animations
+ props << QLatin1String("color");*/
+
+ if (d->userProperty.isValid() && props.isEmpty() && !target()) {
+ props.append(d->userProperty.value.name());
+ d->target = d->userProperty.value.object();
+ }
+
+ PropertyUpdater *data = new PropertyUpdater;
+ data->interpolatorType = d->interpolatorType;
+ data->interpolator = d->interpolator;
QSet<QObject *> objs;
for (int ii = 0; ii < actions.count(); ++ii) {
@@ -2294,10 +1861,14 @@ void QmlVariantAnimation::transition(QmlStateActions &actions,
QObject *obj = action.property.object();
QString propertyName = action.property.name();
-
- if ((d->filter.isEmpty() || d->filter.contains(obj)) &&
- (!d->exclude.contains(obj)) && props.contains(propertyName) &&
- (!target() || target() == obj)) {
+ QObject *sObj = action.specifiedObject;
+ QString sPropertyName = action.specifiedProperty;
+ bool same = (obj == sObj);
+
+ if ((d->filter.isEmpty() || d->filter.contains(obj) || (!same && d->filter.contains(sObj))) &&
+ (!d->exclude.contains(obj)) && (same || (!d->exclude.contains(sObj))) &&
+ (props.contains(propertyName) || (!same && props.contains(sPropertyName))) &&
+ (!target() || target() == obj || (!same && target() == sObj))) {
objs.insert(obj);
Action myAction = action;
@@ -2309,8 +1880,8 @@ void QmlVariantAnimation::transition(QmlStateActions &actions,
if (d->toIsDefined)
myAction.toValue = d->to;
- d->convertVariant(myAction.fromValue, (QVariant::Type)myAction.property.propertyType());
- d->convertVariant(myAction.toValue, (QVariant::Type)myAction.property.propertyType());
+ d->convertVariant(myAction.fromValue, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : myAction.property.propertyType()));
+ d->convertVariant(myAction.toValue, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : myAction.property.propertyType()));
modified << action.property;
@@ -2323,17 +1894,14 @@ void QmlVariantAnimation::transition(QmlStateActions &actions,
QObject *obj = target();
for (int jj = 0; jj < props.count(); ++jj) {
Action myAction;
- myAction.property = QmlMetaProperty(obj, props.at(jj));
+ myAction.property = d->createProperty(obj, props.at(jj));
if (d->fromIsDefined) {
- d->convertVariant(d->from, (QVariant::Type)myAction.property.propertyType());
+ d->convertVariant(d->from, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : myAction.property.propertyType()));
myAction.fromValue = d->from;
}
-
- d->convertVariant(d->to, (QVariant::Type)myAction.property.propertyType());
+ d->convertVariant(d->to, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : myAction.property.propertyType()));
myAction.toValue = d->to;
- myAction.bv = 0;
- myAction.event = 0;
data->actions << myAction;
}
}
@@ -2345,7 +1913,6 @@ void QmlVariantAnimation::transition(QmlStateActions &actions,
}
}
-//XXX whats the best name for this? (just Animation?)
-QML_DEFINE_TYPE(QmlVariantAnimation,VariantAnimation)
+QML_DEFINE_TYPE(QmlPropertyAnimation,PropertyAnimation)
QT_END_NAMESPACE
diff --git a/src/declarative/util/qmlanimation.h b/src/declarative/util/qmlanimation.h
index 0452159..110c43e 100644
--- a/src/declarative/util/qmlanimation.h
+++ b/src/declarative/util/qmlanimation.h
@@ -86,6 +86,9 @@ public:
bool repeat() const;
void setRepeat(bool);
+ int currentTime();
+ void setCurrentTime(int);
+
QmlAnimationGroup *group() const;
void setGroup(QmlAnimationGroup *);
@@ -157,53 +160,6 @@ protected:
};
QML_DECLARE_TYPE(QmlPauseAnimation)
-class QmlColorAnimationPrivate;
-class QmlColorAnimation : public QmlAbstractAnimation
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(QmlColorAnimation)
- Q_PROPERTY(int duration READ duration WRITE setDuration NOTIFY durationChanged)
- Q_PROPERTY(QColor from READ from WRITE setFrom NOTIFY fromChanged)
- Q_PROPERTY(QColor to READ to WRITE setTo NOTIFY toChanged)
- Q_PROPERTY(QString easing READ easing WRITE setEasing NOTIFY easingChanged)
- Q_PROPERTY(QList<QObject *>* filter READ filter)
- Q_PROPERTY(QList<QObject *>* exclude READ exclude)
-
-public:
- QmlColorAnimation(QObject *parent=0);
- virtual ~QmlColorAnimation();
-
- int duration() const;
- void setDuration(int);
-
- QColor from() const;
- void setFrom(const QColor &);
-
- QColor to() const;
- void setTo(const QColor &);
-
- QString easing() const;
- void setEasing(const QString &);
-
- QList<QObject *> *filter();
-
- QList<QObject *> *exclude();
-
-protected:
- virtual void transition(QmlStateActions &actions,
- QmlMetaProperties &modified,
- TransitionDirection direction);
- virtual QAbstractAnimation *qtAnimation();
- virtual void prepare(QmlMetaProperty &);
-
-Q_SIGNALS:
- void durationChanged(int);
- void fromChanged(const QColor &);
- void toChanged(const QColor &);
- void easingChanged(const QString &);
-};
-QML_DECLARE_TYPE(QmlColorAnimation)
-
class QmlRunScriptActionPrivate;
class QmlRunScriptAction : public QmlAbstractAnimation
{
@@ -290,32 +246,32 @@ protected:
};
QML_DECLARE_TYPE(QmlParentChangeAction)
-class QmlNumericAnimationPrivate;
-class QmlNumericAnimation : public QmlAbstractAnimation
+class QmlPropertyAnimationPrivate;
+class QmlPropertyAnimation : public QmlAbstractAnimation
{
Q_OBJECT
- Q_DECLARE_PRIVATE(QmlNumericAnimation)
+ Q_DECLARE_PRIVATE(QmlPropertyAnimation)
Q_PROPERTY(int duration READ duration WRITE setDuration NOTIFY durationChanged)
- Q_PROPERTY(qreal from READ from WRITE setFrom NOTIFY fromChanged)
- Q_PROPERTY(qreal to READ to WRITE setTo NOTIFY toChanged)
+ Q_PROPERTY(QVariant from READ from WRITE setFrom NOTIFY fromChanged)
+ Q_PROPERTY(QVariant to READ to WRITE setTo NOTIFY toChanged)
Q_PROPERTY(QString easing READ easing WRITE setEasing NOTIFY easingChanged)
Q_PROPERTY(QString properties READ properties WRITE setProperties NOTIFY propertiesChanged)
Q_PROPERTY(QList<QObject *>* filter READ filter)
Q_PROPERTY(QList<QObject *>* exclude READ exclude)
public:
- QmlNumericAnimation(QObject *parent=0);
- virtual ~QmlNumericAnimation();
+ QmlPropertyAnimation(QObject *parent=0);
+ virtual ~QmlPropertyAnimation();
int duration() const;
void setDuration(int);
- qreal from() const;
- void setFrom(qreal);
+ QVariant from() const;
+ void setFrom(const QVariant &);
- qreal to() const;
- void setTo(qreal);
+ QVariant to() const;
+ void setTo(const QVariant &);
QString easing() const;
void setEasing(const QString &);
@@ -335,19 +291,51 @@ protected:
Q_SIGNALS:
void durationChanged(int);
- void fromChanged(qreal);
- void toChanged(qreal);
+ void fromChanged(QVariant);
+ void toChanged(QVariant);
void easingChanged(const QString &);
void propertiesChanged(const QString &);
};
-QML_DECLARE_TYPE(QmlNumericAnimation)
+QML_DECLARE_TYPE(QmlPropertyAnimation)
+
+class QmlColorAnimation : public QmlPropertyAnimation
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QmlPropertyAnimation)
+ Q_PROPERTY(QColor from READ from WRITE setFrom NOTIFY fromChanged)
+ Q_PROPERTY(QColor to READ to WRITE setTo NOTIFY toChanged)
+
+public:
+ QmlColorAnimation(QObject *parent=0);
+ virtual ~QmlColorAnimation();
+
+ QColor from() const;
+ void setFrom(const QColor &);
+
+ QColor to() const;
+ void setTo(const QColor &);
+};
+QML_DECLARE_TYPE(QmlColorAnimation)
-#if 0
-class QmlDiscreteAnimation : public QmlAbstractAnimation
+class QmlNumberAnimation : public QmlPropertyAnimation
{
-Q_OBJECT
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QmlPropertyAnimation)
+
+ Q_PROPERTY(qreal from READ from WRITE setFrom NOTIFY fromChanged)
+ Q_PROPERTY(qreal to READ to WRITE setTo NOTIFY toChanged)
+
+public:
+ QmlNumberAnimation(QObject *parent=0);
+ virtual ~QmlNumberAnimation();
+
+ qreal from() const;
+ void setFrom(qreal);
+
+ qreal to() const;
+ void setTo(qreal);
};
-#endif
+QML_DECLARE_TYPE(QmlNumberAnimation)
class QmlAnimationGroupPrivate;
class QmlAnimationGroup : public QmlAbstractAnimation
@@ -401,58 +389,6 @@ protected:
};
QML_DECLARE_TYPE(QmlParallelAnimation)
-class QmlVariantAnimationPrivate;
-class QmlVariantAnimation : public QmlAbstractAnimation
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(QmlVariantAnimation)
-
- Q_PROPERTY(int duration READ duration WRITE setDuration NOTIFY durationChanged)
- Q_PROPERTY(QVariant from READ from WRITE setFrom NOTIFY fromChanged)
- Q_PROPERTY(QVariant to READ to WRITE setTo NOTIFY toChanged)
- Q_PROPERTY(QString easing READ easing WRITE setEasing NOTIFY easingChanged)
- Q_PROPERTY(QString properties READ properties WRITE setProperties NOTIFY propertiesChanged)
- Q_PROPERTY(QList<QObject *>* filter READ filter)
- Q_PROPERTY(QList<QObject *>* exclude READ exclude)
-
-public:
- QmlVariantAnimation(QObject *parent=0);
- virtual ~QmlVariantAnimation();
-
- int duration() const;
- void setDuration(int);
-
- QVariant from() const;
- void setFrom(const QVariant &);
-
- QVariant to() const;
- void setTo(const QVariant &);
-
- QString easing() const;
- void setEasing(const QString &);
-
- QString properties() const;
- void setProperties(const QString &);
-
- QList<QObject *> *filter();
- QList<QObject *> *exclude();
-
-protected:
- virtual void transition(QmlStateActions &actions,
- QmlMetaProperties &modified,
- TransitionDirection direction);
- virtual QAbstractAnimation *qtAnimation();
- virtual void prepare(QmlMetaProperty &);
-
-Q_SIGNALS:
- void durationChanged(int);
- void fromChanged(QVariant);
- void toChanged(QVariant);
- void easingChanged(const QString &);
- void propertiesChanged(const QString &);
-};
-QML_DECLARE_TYPE(QmlVariantAnimation)
-
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/declarative/util/qmlanimation_p.h b/src/declarative/util/qmlanimation_p.h
index f09ab88..051516d 100644
--- a/src/declarative/util/qmlanimation_p.h
+++ b/src/declarative/util/qmlanimation_p.h
@@ -42,6 +42,17 @@
#ifndef QMLANIMATION_P_H
#define QMLANIMATION_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <private/qobject_p.h>
#include <private/qmlnullablevalue_p.h>
#include <private/qvariantanimation_p.h>
@@ -193,6 +204,8 @@ public:
QmlMetaProperty property;
QmlAnimationGroup *group;
+
+ QmlMetaProperty createProperty(QObject *obj, const QString &str);
};
class QmlPauseAnimationPrivate : public QmlAbstractAnimationPrivate
@@ -207,40 +220,6 @@ public:
QPauseAnimation *pa;
};
-class QmlColorAnimationPrivate : public QmlAbstractAnimationPrivate
-{
- Q_DECLARE_PUBLIC(QmlColorAnimation)
-public:
- QmlColorAnimationPrivate()
- : QmlAbstractAnimationPrivate(), fromSourced(false), fromIsDefined(false), toIsDefined(false),
- ca(0), value(this, &QmlColorAnimationPrivate::valueChanged)
- {
- if (!colorInterpolator)
- colorInterpolator = QVariantAnimationPrivate::getInterpolator(QVariant::Color);
- }
-
- void init();
-
- QString easing;
-
- QColor fromValue;
- QColor toValue;
-
- QList<QObject *> filter;
- QList<QObject *> exclude;
-
- bool fromSourced;
- bool fromIsDefined;
- bool toIsDefined;
-
- QmlTimeLineValueAnimator *ca;
- virtual void valueChanged(qreal);
-
- QmlTimeLineValueProxy<QmlColorAnimationPrivate> value;
-
- static QVariantAnimation::Interpolator colorInterpolator;
-};
-
class QmlRunScriptActionPrivate : public QmlAbstractAnimationPrivate
{
Q_DECLARE_PUBLIC(QmlRunScriptAction)
@@ -295,32 +274,6 @@ public:
QActionAnimation *cpa;
};
-class QmlNumericAnimationPrivate : public QmlAbstractAnimationPrivate
-{
- Q_DECLARE_PUBLIC(QmlNumericAnimation)
-public:
- QmlNumericAnimationPrivate()
- : QmlAbstractAnimationPrivate(), fromSourced(false), na(0), value(this, &QmlNumericAnimationPrivate::valueChanged) {}
-
- void init();
-
- QmlNullableValue<qreal> from;
- QmlNullableValue<qreal> to;
-
- QString easing;
-
- QString properties;
- QList<QObject *> filter;
- QList<QObject *> exclude;
-
- bool fromSourced;
- qreal fromValue;
- QmlTimeLineValueAnimator *na;
- virtual void valueChanged(qreal);
-
- QmlTimeLineValueProxy<QmlNumericAnimationPrivate> value;
-};
-
class QmlAnimationGroupPrivate : public QmlAbstractAnimationPrivate
{
Q_DECLARE_PUBLIC(QmlAnimationGroup)
@@ -360,13 +313,13 @@ public:
QAnimationGroup *ag;
};
-class QmlVariantAnimationPrivate : public QmlAbstractAnimationPrivate
+class QmlPropertyAnimationPrivate : public QmlAbstractAnimationPrivate
{
- Q_DECLARE_PUBLIC(QmlVariantAnimation)
+ Q_DECLARE_PUBLIC(QmlPropertyAnimation)
public:
- QmlVariantAnimationPrivate()
+ QmlPropertyAnimationPrivate()
: QmlAbstractAnimationPrivate(), fromSourced(false), fromIsDefined(false), toIsDefined(false),
- va(0), value(this, &QmlVariantAnimationPrivate::valueChanged) {}
+ interpolatorType(0), interpolator(0), va(0), value(this, &QmlPropertyAnimationPrivate::valueChanged) {}
void init();
@@ -382,16 +335,18 @@ public:
bool fromSourced;
bool fromIsDefined;
bool toIsDefined;
+ int interpolatorType;
+ QVariantAnimation::Interpolator interpolator;
QmlTimeLineValueAnimator *va;
virtual void valueChanged(qreal);
- QmlTimeLineValueProxy<QmlVariantAnimationPrivate> value;
+ QmlTimeLineValueProxy<QmlPropertyAnimationPrivate> value;
static QVariant interpolateVariant(const QVariant &from, const QVariant &to, qreal progress);
static void convertVariant(QVariant &variant, QVariant::Type type);
};
-#endif // QMLANIMATION_P_H
-
QT_END_NAMESPACE
+
+#endif // QMLANIMATION_P_H
diff --git a/src/declarative/util/qmlbind.cpp b/src/declarative/util/qmlbind.cpp
index b45d07d..bb342bc 100644
--- a/src/declarative/util/qmlbind.cpp
+++ b/src/declarative/util/qmlbind.cpp
@@ -52,6 +52,7 @@
#include "qmlbind.h"
QT_BEGIN_NAMESPACE
+
class QmlBindPrivate : public QObjectPrivate
{
public:
diff --git a/src/declarative/util/qmlconnection.cpp b/src/declarative/util/qmlconnection.cpp
index 6c7b158..95f4573 100644
--- a/src/declarative/util/qmlconnection.cpp
+++ b/src/declarative/util/qmlconnection.cpp
@@ -46,8 +46,8 @@
#include <QtDeclarative/qmlcontext.h>
#include <QtCore/qdebug.h>
-
QT_BEGIN_NAMESPACE
+
class QmlConnectionPrivate : public QObjectPrivate
{
public:
diff --git a/src/declarative/util/qmlfollow.cpp b/src/declarative/util/qmlfollow.cpp
index cf3d629..c6d806a 100644
--- a/src/declarative/util/qmlfollow.cpp
+++ b/src/declarative/util/qmlfollow.cpp
@@ -45,8 +45,8 @@
#include "qmlfollow.h"
#include "private/qmlanimation_p.h"
-
QT_BEGIN_NAMESPACE
+
QML_DEFINE_TYPE(QmlFollow,Follow)
class QmlFollowPrivate : public QObjectPrivate
@@ -183,7 +183,7 @@ void QmlFollowPrivate::stop()
y: SequentialAnimation {
running: true
repeat: true
- NumericAnimation {
+ NumberAnimation {
to: 200
easing: "easeOutBounce(amplitude:100)"
duration: 2000
diff --git a/src/declarative/util/qmlfont.cpp b/src/declarative/util/qmlfont.cpp
index c537a83..3075b82 100644
--- a/src/declarative/util/qmlfont.cpp
+++ b/src/declarative/util/qmlfont.cpp
@@ -43,8 +43,8 @@
#include "qfont.h"
#include "qmlfont.h"
-
QT_BEGIN_NAMESPACE
+
class QmlFontPrivate : public QObjectPrivate
{
public:
@@ -144,4 +144,5 @@ QFont QmlFont::font() const
Q_D(const QmlFont);
return d->font;
}
+
QT_END_NAMESPACE
diff --git a/src/declarative/util/qmllistmodel.cpp b/src/declarative/util/qmllistmodel.cpp
index cc85661..1884e8b 100644
--- a/src/declarative/util/qmllistmodel.cpp
+++ b/src/declarative/util/qmllistmodel.cpp
@@ -567,4 +567,5 @@ ModelNode::~ModelNode()
}
QT_END_NAMESPACE
+
#include "qmllistmodel.moc"
diff --git a/src/declarative/util/qmllistmodel.h b/src/declarative/util/qmllistmodel.h
index ddf1e13..56ed8fb 100644
--- a/src/declarative/util/qmllistmodel.h
+++ b/src/declarative/util/qmllistmodel.h
@@ -51,7 +51,6 @@
#include <QtDeclarative/qml.h>
#include <QtDeclarative/qlistmodelinterface.h>
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/util/qmlnullablevalue_p.h b/src/declarative/util/qmlnullablevalue_p.h
index f16ddd6..6455642 100644
--- a/src/declarative/util/qmlnullablevalue_p.h
+++ b/src/declarative/util/qmlnullablevalue_p.h
@@ -42,6 +42,19 @@
#ifndef QMLNULLABLEVALUE_P_H
#define QMLNULLABLEVALUE_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+QT_BEGIN_NAMESPACE
+
template<typename T>
struct QmlNullableValue
{
@@ -63,5 +76,6 @@ struct QmlNullableValue
T value;
};
-#endif // QMLNULLABLEVALUE_P_H
+QT_END_NAMESPACE
+#endif // QMLNULLABLEVALUE_P_H
diff --git a/src/declarative/util/qmlopenmetaobject.cpp b/src/declarative/util/qmlopenmetaobject.cpp
index d0dd817..7305362 100644
--- a/src/declarative/util/qmlopenmetaobject.cpp
+++ b/src/declarative/util/qmlopenmetaobject.cpp
@@ -43,7 +43,6 @@
#include "private/qmetaobjectbuilder_p.h"
#include <QDebug>
-
QT_BEGIN_NAMESPACE
class QmlOpenMetaObjectPrivate
diff --git a/src/declarative/util/qmlpackage.cpp b/src/declarative/util/qmlpackage.cpp
index e527c1f..eec769e 100644
--- a/src/declarative/util/qmlpackage.cpp
+++ b/src/declarative/util/qmlpackage.cpp
@@ -42,8 +42,8 @@
#include "private/qobject_p.h"
#include "qmlpackage.h"
-
QT_BEGIN_NAMESPACE
+
class QmlPackagePrivate : public QObjectPrivate
{
public:
@@ -150,4 +150,5 @@ QmlPackageAttached *QmlPackage::qmlAttachedProperties(QObject *o)
QML_DEFINE_TYPE(QmlPackage, Package)
QT_END_NAMESPACE
+
#include "qmlpackage.moc"
diff --git a/src/declarative/util/qmlscript.h b/src/declarative/util/qmlscript.h
index 09ebc2c..5b62da5 100644
--- a/src/declarative/util/qmlscript.h
+++ b/src/declarative/util/qmlscript.h
@@ -47,6 +47,7 @@
#include <QtDeclarative/qml.h>
QT_BEGIN_HEADER
+
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
@@ -76,5 +77,7 @@ private Q_SLOTS:
QML_DECLARE_TYPE(QmlScript)
QT_END_NAMESPACE
+
QT_END_HEADER
+
#endif
diff --git a/src/declarative/util/qmlsetproperties.cpp b/src/declarative/util/qmlsetproperties.cpp
index cb97ed9..7a68ba2 100644
--- a/src/declarative/util/qmlsetproperties.cpp
+++ b/src/declarative/util/qmlsetproperties.cpp
@@ -47,9 +47,10 @@
#include <private/qmlcustomparser_p.h>
#include <private/qmlparser_p.h>
#include <QtDeclarative/qmlexpression.h>
-
+#include <QtDeclarative/qmlbindablevalue.h>
QT_BEGIN_NAMESPACE
+
/*!
\qmlclass SetProperties QmlSetProperties
\brief The SetProperties element describes new property values for a state.
@@ -113,7 +114,8 @@ class QmlSetPropertiesPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QmlSetProperties)
public:
- QmlSetPropertiesPrivate() : object(0), decoded(true), restore(true) {}
+ QmlSetPropertiesPrivate() : object(0), decoded(true), restore(true),
+ isExplicit(false) {}
QObject *object;
QByteArray data;
@@ -121,6 +123,7 @@ public:
void decode();
bool restore;
+ bool isExplicit;
QList<QPair<QByteArray, QVariant> > properties;
QList<QPair<QByteArray, QmlExpression *> > expressions;
@@ -205,6 +208,7 @@ QmlSetPropertiesParser::compile(const QList<QmlCustomParserProperty> &props,
void QmlSetPropertiesPrivate::decode()
{
+ Q_Q(QmlSetProperties);
if (decoded)
return;
@@ -221,7 +225,7 @@ void QmlSetPropertiesPrivate::decode()
ds >> data;
if (isScript) {
- QmlExpression *expression = new QmlExpression(qmlContext(object), data.toString(), object);
+ QmlExpression *expression = new QmlExpression(qmlContext(q), data.toString(), object);
expression->setTrackChange(false);
expressions << qMakePair(name, expression);
} else {
@@ -278,39 +282,19 @@ void QmlSetProperties::setRestoreEntryValues(bool v)
d->restore = v;
}
-QmlMetaProperty
-QmlSetPropertiesPrivate::property(const QByteArray &property)
+QmlMetaProperty
+QmlSetPropertiesPrivate::property(const QByteArray &property)
{
Q_Q(QmlSetProperties);
- QList<QByteArray> path = property.split('.');
-
- QObject *obj = this->object;
-
- for (int jj = 0; jj < path.count() - 1; ++jj) {
- const QByteArray &pathName = path.at(jj);
- QmlMetaProperty prop(obj, QLatin1String(pathName));
- QObject *objVal = QmlMetaType::toQObject(prop.read());
- if (!objVal) {
- qmlInfo(q) << obj->metaObject()->className()
- << "has no object property named" << pathName;
- return QmlMetaProperty();
- }
- obj = objVal;
- }
-
- const QByteArray &name = path.last();
- QmlMetaProperty prop(obj, QLatin1String(name));
+ QmlMetaProperty prop = QmlMetaProperty::createProperty(object, QString::fromLatin1(property));
if (!prop.isValid()) {
- qmlInfo(q) << obj->metaObject()->className()
- << "has no property named" << name;
+ qmlInfo(q) << "Cannot assign to non-existant property" << property;
return QmlMetaProperty();
} else if (!prop.isWritable()) {
- qmlInfo(q) << obj->metaObject()->className()
- << name << "is not writable, and cannot be set.";
+ qmlInfo(q) << "Cannot assign to read-only property" << property;
return QmlMetaProperty();
- } else {
- return prop;
}
+ return prop;
}
QmlSetProperties::ActionList QmlSetProperties::actions()
@@ -332,6 +316,8 @@ QmlSetProperties::ActionList QmlSetProperties::actions()
a.property = prop;
a.fromValue = a.property.read();
a.toValue = d->properties.at(ii).second;
+ a.specifiedObject = d->object;
+ a.specifiedProperty = QString::fromLatin1(property);
list << a;
}
@@ -347,16 +333,35 @@ QmlSetProperties::ActionList QmlSetProperties::actions()
a.restore = restoreEntryValues();
a.property = prop;
a.fromValue = a.property.read();
- a.toValue = d->expressions.at(ii).second->value();
+ a.specifiedObject = d->object;
+ a.specifiedProperty = QString::fromLatin1(property);
+
+ if (d->isExplicit) {
+ a.toValue = d->expressions.at(ii).second->value();
+ } else {
+ a.toBinding = new QmlBindableValue(d->expressions.at(ii).second->expression(), object(), qmlContext(this));
+ a.toBinding->setTarget(prop);
+ }
list << a;
}
-
}
return list;
}
+bool QmlSetProperties::isExplicit() const
+{
+ Q_D(const QmlSetProperties);
+ return d->isExplicit;
+}
+
+void QmlSetProperties::setIsExplicit(bool e)
+{
+ Q_D(QmlSetProperties);
+ d->isExplicit = e;
+}
+
QML_DEFINE_CUSTOM_TYPE(QmlSetProperties,SetProperties,QmlSetPropertiesParser)
QT_END_NAMESPACE
diff --git a/src/declarative/util/qmlsetproperties.h b/src/declarative/util/qmlsetproperties.h
index da5fcf2..717d0ee 100644
--- a/src/declarative/util/qmlsetproperties.h
+++ b/src/declarative/util/qmlsetproperties.h
@@ -44,7 +44,6 @@
#include <QtDeclarative/qmlstateoperations.h>
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -59,6 +58,7 @@ class Q_DECLARATIVE_EXPORT QmlSetProperties : public QmlStateOperation
Q_PROPERTY(QObject *target READ object WRITE setObject)
Q_PROPERTY(bool restoreEntryValues READ restoreEntryValues WRITE setRestoreEntryValues)
+ Q_PROPERTY(bool explicit READ isExplicit WRITE setIsExplicit);
public:
QmlSetProperties();
~QmlSetProperties();
@@ -69,6 +69,9 @@ public:
bool restoreEntryValues() const;
void setRestoreEntryValues(bool);
+ bool isExplicit() const;
+ void setIsExplicit(bool);
+
virtual ActionList actions();
};
QML_DECLARE_TYPE(QmlSetProperties)
diff --git a/src/declarative/util/qmlstate.cpp b/src/declarative/util/qmlstate.cpp
index abe8301..8ac1b33 100644
--- a/src/declarative/util/qmlstate.cpp
+++ b/src/declarative/util/qmlstate.cpp
@@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE
DEFINE_BOOL_CONFIG_OPTION(stateChangeDebug, STATECHANGE_DEBUG);
-Action::Action() : restore(true), bv(0), event(0), actionDone(false)
+Action::Action() : restore(true), actionDone(false), fromBinding(0), toBinding(0), event(0), specifiedObject(0)
{
}
@@ -234,24 +234,12 @@ QmlState &QmlState::operator<<(QmlStateOperation *op)
return *this;
}
-#if 0
-static void dump(const QmlStateOperation::ActionList &list)
-{
- if (!QString(getenv("STATE_DEBUG")).isEmpty())
- return;
-
- for (int ii = 0; ii < list.count(); ++ii) {
- const Action &action = list.at(ii);
- qWarning() << action.property.object << action.property.name << action.toValue;
- }
-}
-#endif
-
void QmlStatePrivate::applyBindings()
{
foreach(const Action &action, bindingsList) {
- if (action.bv && !action.toBinding.isEmpty()) {
- action.bv->setExpression(action.toBinding);
+ if (action.toBinding) {
+ action.property.setBinding(action.toBinding);
+ action.toBinding->forceUpdate();
}
}
}
@@ -259,6 +247,7 @@ void QmlStatePrivate::applyBindings()
void QmlStatePrivate::complete()
{
Q_Q(QmlState);
+
//apply bindings (now that all transitions are complete)
applyBindings();
@@ -282,12 +271,16 @@ void QmlStatePrivate::complete()
emit q->completed();
}
-QmlStateOperation::ActionList QmlStatePrivate::generateActionList(QmlStateGroup *group) const
+// Generate a list of actions for this state. This includes coelescing state
+// actions that this state "extends"
+QmlStateOperation::ActionList
+QmlStatePrivate::generateActionList(QmlStateGroup *group) const
{
QmlStateOperation::ActionList applyList;
if (inState)
return applyList;
+ // Prevent "extends" recursion
inState = true;
if (!extends.isEmpty()) {
@@ -325,6 +318,15 @@ void QmlState::cancel()
}
}
+void Action::deleteFromBinding()
+{
+ if (fromBinding) {
+ property.setBinding(0);
+ delete fromBinding;
+ fromBinding = 0;
+ }
+}
+
void QmlState::apply(QmlStateGroup *group, QmlTransition *trans, QmlState *revert)
{
Q_D(QmlState);
@@ -336,27 +338,55 @@ void QmlState::apply(QmlStateGroup *group, QmlTransition *trans, QmlState *rever
d->reverting.clear();
d->bindingsList.clear();
- if (revert)
- d->revertList = static_cast<QmlStatePrivate*>(revert->d_ptr)->revertList;
- QmlStateOperation::RevertActionList additionalReverts;
+ if (revert) {
+ QmlStatePrivate *revertPrivate =
+ static_cast<QmlStatePrivate*>(revert->d_ptr);
+ d->revertList = revertPrivate->revertList;
+ revertPrivate->revertList.clear();
+ }
+ // List of actions caused by this state
QmlStateOperation::ActionList applyList = d->generateActionList(group);
+ // List of actions that need to be reverted to roll back (just) this state
+ QmlStatePrivate::SimpleActionList additionalReverts;
+ // First add the reverse of all the applyList actions
for (int ii = 0; ii < applyList.count(); ++ii) {
- const Action &action = applyList.at(ii);
- if (action.event || !action.restore)
+ Action &action = applyList[ii];
+
+ if (action.event)
continue;
+ action.fromBinding = action.property.binding();
+
bool found = false;
- for (int jj = 0; !found && jj < d->revertList.count(); ++jj) {
- if (d->revertList.at(jj).property == action.property)
+ int jj;
+ for (jj = 0; jj < d->revertList.count(); ++jj) {
+ if (d->revertList.at(jj).property == action.property) {
found = true;
+ break;
+ }
}
+
if (!found) {
- RevertAction r(action);
- additionalReverts << r;
+ if (!action.restore) {
+ action.deleteFromBinding();
+ } else {
+ // Only need to revert the applyList action if the previous
+ // state doesn't have a higher priority revert already
+ SimpleAction r(action);
+ additionalReverts << r;
+ }
+ } else {
+
+ if (!found || d->revertList.at(jj).binding != action.fromBinding) {
+ action.deleteFromBinding();
+ }
}
}
+
+ // Any reverts from a previous state that aren't carried forth
+ // into this state need to be translated into apply actions
for (int ii = 0; ii < d->revertList.count(); ++ii) {
bool found = false;
for (int jj = 0; !found && jj < applyList.count(); ++jj) {
@@ -366,98 +396,130 @@ void QmlState::apply(QmlStateGroup *group, QmlTransition *trans, QmlState *rever
}
if (!found) {
QVariant cur = d->revertList.at(ii).property.read();
+ delete d->revertList.at(ii).property.setBinding(0);
+
Action a;
a.property = d->revertList.at(ii).property;
a.fromValue = cur;
a.toValue = d->revertList.at(ii).value;
a.toBinding = d->revertList.at(ii).binding;
- if (!a.toBinding.isEmpty()) {
- a.fromBinding = d->revertList.at(ii).bv->expression();
- a.bv = d->revertList.at(ii).bv;
- }
+ a.specifiedObject = d->revertList.at(ii).specifiedObject; //###
+ a.specifiedProperty = d->revertList.at(ii).specifiedProperty;
applyList << a;
+ // Store these special reverts in the reverting list
d->reverting << d->revertList.at(ii).property;
}
}
+ // All the local reverts now become part of the ongoing revertList
d->revertList << additionalReverts;
- //apply all changes, and work out any ending positions for bindings
- //then rewind all changes and proceed as normal
- //### 4 foreach loops!
- ////////////////////////////////////////////////////////////////////
- foreach(const Action &action, applyList) {
- if (stateChangeDebug())
- qWarning() << " Action:" << action.property.object() << action.property.name() << action.toValue;
+ // Output for debugging
+ if (stateChangeDebug()) {
+ foreach(const Action &action, applyList) {
+ qWarning() << " Action:" << action.property.object()
+ << action.property.name() << action.toValue;
+ }
+ }
- if (action.bv && !action.toBinding.isEmpty()) {
+ // Determine which actions are binding changes.
+ foreach(const Action &action, applyList) {
+ if (action.toBinding) {
d->bindingsList << action;
- action.bv->clearExpression();
+ if (action.fromBinding)
+ action.property.setBinding(0); // Disable current binding
+ } else if (action.fromBinding) {
+ action.property.setBinding(0); // Disable current binding
}
}
+ // 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?
+
if (!d->bindingsList.isEmpty()) {
+
+ // Apply all the property and binding changes
foreach(const Action &action, applyList) {
- if (action.bv && !action.toBinding.isEmpty()) {
- action.bv->setExpression(action.toBinding);
+ if (action.toBinding) {
+ action.property.setBinding(action.toBinding);
+ action.toBinding->forceUpdate();
} else if (!action.event) {
action.property.write(action.toValue);
}
}
+ // Read all the end values for binding changes
for (int ii = 0; ii < applyList.size(); ++ii) {
Action *action = &applyList[ii];
if (action->event)
continue;
const QmlMetaProperty &prop = action->property;
- if (action->bv && !action->toBinding.isEmpty()) {
+ if (action->toBinding)
action->toValue = prop.read();
- }
}
+ // Revert back to the original values
foreach(const Action &action, applyList) {
if (action.event)
continue;
- if (action.bv && !action.toBinding.isEmpty())
- action.bv->clearExpression();
+ if (action.toBinding)
+ action.property.setBinding(0);
+
action.property.write(action.fromValue);
}
}
- ////////////////////////////////////////////////////////////////////
- QmlStateOperation::ActionList modList = applyList;
- QList<QmlMetaProperty> touched;
+
d->completeList.clear();
+
if (trans) {
+ QList<QmlMetaProperty> touched;
d->transition = trans;
- trans->prepare(modList, touched, this);
- for (int ii = 0; ii < modList.count(); ++ii) {
- const Action &action = modList.at(ii);
+ trans->prepare(applyList, touched, this);
+
+ // Modify the action list to remove actions handled in the transition
+ for (int ii = 0; ii < applyList.count(); ++ii) {
+ const Action &action = applyList.at(ii);
if (action.event) {
+
if (action.actionDone) {
- modList.removeAt(ii);
+ applyList.removeAt(ii);
--ii;
}
+
} else {
- if (action.toValue != action.fromValue) {
- d->completeList << RevertAction(action, false);
- }
if (touched.contains(action.property)) {
- modList.removeAt(ii);
+ if (action.toValue != action.fromValue)
+ d->completeList << SimpleAction(action,
+ SimpleAction::EndState);
+
+ applyList.removeAt(ii);
--ii;
}
+
}
}
}
- foreach(const Action &action, modList) {
- if (action.event)
+ // Any actions remaining have not been handled by the transition and should
+ // be applied immediately. We skip applying transitions, as they are all
+ // applied at the end in applyBindings() to avoid any nastiness mid
+ // transition
+ foreach(const Action &action, applyList) {
+ if (action.event) {
action.event->execute();
- else
+ } else {
action.property.write(action.toValue);
+ }
}
if (!trans)
d->applyBindings(); //### merge into above foreach?
diff --git a/src/declarative/util/qmlstate.h b/src/declarative/util/qmlstate.h
index 0b8d82a..b219b99 100644
--- a/src/declarative/util/qmlstate.h
+++ b/src/declarative/util/qmlstate.h
@@ -60,15 +60,21 @@ class Action
public:
Action();
+ bool restore:1;
+ bool actionDone:1;
+
QmlMetaProperty property;
- bool restore;
QVariant fromValue;
QVariant toValue;
- QString fromBinding;
- QString toBinding;
- QmlBindableValue *bv;
+
+ QmlBindableValue *fromBinding;
+ QmlBindableValue *toBinding;
ActionEvent *event;
- bool actionDone;
+
+ QObject *specifiedObject;
+ QString specifiedProperty;
+
+ void deleteFromBinding();
};
class ActionEvent
@@ -79,28 +85,6 @@ public:
virtual void execute();
};
-class RevertAction
-{
-public:
- RevertAction(const Action &a, bool from = true) : bv(0)
- {
- property = a.property;
- if (from) {
- value = a.fromValue;
- binding = a.fromBinding;
- } else {
- value = a.toValue;
- binding = a.toBinding;
- }
- bv = a.bv;
- }
-
- QmlMetaProperty property;
- QVariant value;
- QString binding;
- QmlBindableValue *bv;
-};
-
class QmlStateGroup;
class Q_DECLARATIVE_EXPORT QmlStateOperation : public QObject
{
@@ -109,7 +93,6 @@ public:
QmlStateOperation(QObject *parent = 0)
: QObject(parent) {}
typedef QList<Action> ActionList;
- typedef QList<RevertAction> RevertActionList;
virtual ActionList actions();
diff --git a/src/declarative/util/qmlstate_p.h b/src/declarative/util/qmlstate_p.h
index da8fdcd..1b784f3 100644
--- a/src/declarative/util/qmlstate_p.h
+++ b/src/declarative/util/qmlstate_p.h
@@ -42,12 +42,48 @@
#ifndef QMLSTATE_P_H
#define QMLSTATE_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtDeclarative/qmlstate.h>
#include <private/qobject_p.h>
#include <private/qmlanimation_p.h>
QT_BEGIN_NAMESPACE
+class SimpleAction
+{
+public:
+ enum State { StartState, EndState };
+ SimpleAction(const Action &a, State state = StartState)
+ {
+ property = a.property;
+ specifiedObject = a.specifiedObject;
+ specifiedProperty = a.specifiedProperty;
+ if (state == StartState) {
+ value = a.fromValue;
+ binding = property.binding();
+ } else {
+ value = a.toValue;
+ binding = a.toBinding;
+ }
+ }
+
+ QmlMetaProperty property;
+ QVariant value;
+ QmlBindableValue *binding;
+ QObject *specifiedObject;
+ QString specifiedProperty;
+};
+
class QmlStatePrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QmlState)
@@ -56,13 +92,15 @@ public:
QmlStatePrivate()
: when(0), transition(0), inState(false), group(0) {}
+ typedef QList<SimpleAction> SimpleActionList;
+
QString name;
QmlBindableValue *when;
QmlConcreteList<QmlStateOperation *> operations;
QmlTransition *transition;
- QmlStateOperation::RevertActionList revertList;
+ SimpleActionList revertList;
QList<QmlMetaProperty> reverting;
- QmlStateOperation::RevertActionList completeList;
+ SimpleActionList completeList;
QmlStateOperation::ActionList bindingsList;
QString extends;
mutable bool inState;
diff --git a/src/declarative/util/qmlstategroup.cpp b/src/declarative/util/qmlstategroup.cpp
index 57ccd37..2b1cf7d 100644
--- a/src/declarative/util/qmlstategroup.cpp
+++ b/src/declarative/util/qmlstategroup.cpp
@@ -45,8 +45,8 @@
#include "qmltransition.h"
#include <QtCore/qdebug.h>
-
QT_BEGIN_NAMESPACE
+
DEFINE_BOOL_CONFIG_OPTION(stateChangeDebug, STATECHANGE_DEBUG);
QML_DEFINE_TYPE(QmlStateGroup,StateGroup)
diff --git a/src/declarative/util/qmlstateoperations.cpp b/src/declarative/util/qmlstateoperations.cpp
index 02b54f8..b7398a3 100644
--- a/src/declarative/util/qmlstateoperations.cpp
+++ b/src/declarative/util/qmlstateoperations.cpp
@@ -417,14 +417,8 @@ QmlSetProperty::ActionList QmlSetProperty::actions()
a.property = prop;
a.fromValue = cur;
a.toValue = d->value;
- if (!d->binding.isEmpty()) {
- QmlBindableValue *bv = prop.binding();
- if (bv) {
- a.fromBinding = bv->expression();
- a.bv = bv;
- }
- }
- a.toBinding = d->binding;
+ if (!d->binding.isEmpty())
+ a.toBinding = new QmlBindableValue(d->binding, object(), qmlContext(this));
return ActionList() << a;
}
diff --git a/src/declarative/util/qperformancelog.cpp b/src/declarative/util/qperformancelog.cpp
index 8065f9d..932e4b3 100644
--- a/src/declarative/util/qperformancelog.cpp
+++ b/src/declarative/util/qperformancelog.cpp
@@ -43,6 +43,7 @@
#include <QHash>
#include <QDebug>
+QT_BEGIN_NAMESPACE
#ifdef Q_ENABLE_PERFORMANCE_LOG
@@ -175,3 +176,5 @@ void QPerformanceLog::clear()
}
#endif // Q_ENABLE_PERFORMANCE_LOG
+
+QT_END_NAMESPACE
diff --git a/src/declarative/util/qperformancelog.h b/src/declarative/util/qperformancelog.h
index 3203685..6655a8d 100644
--- a/src/declarative/util/qperformancelog.h
+++ b/src/declarative/util/qperformancelog.h
@@ -43,6 +43,9 @@
#define QPERFORMANCELOG_H
#include <QtCore/qdatetime.h>
+
+QT_BEGIN_NAMESPACE
+
namespace QPerformanceLog
{
Q_DECLARATIVE_EXPORT void displayData();
@@ -133,4 +136,6 @@ namespace QPerformanceLog
#endif // Q_ENABLE_PERFORMANCE_LOG
+QT_END_NAMESPACE
+
#endif // QPERFORMANCELOG_H
diff --git a/src/declarative/util/util.pri b/src/declarative/util/util.pri
index 030a44e..f35812c 100644
--- a/src/declarative/util/util.pri
+++ b/src/declarative/util/util.pri
@@ -6,7 +6,6 @@ SOURCES += \
util/qmlpackage.cpp \
util/qmlscript.cpp \
util/qmlanimation.cpp \
- util/qmlbehaviour.cpp \
util/qmlfont.cpp \
util/qmlfollow.cpp \
util/qmlstate.cpp\
@@ -14,8 +13,6 @@ SOURCES += \
util/qmlsetproperties.cpp \
util/qmlstategroup.cpp \
util/qmltransition.cpp \
- util/qbindablemap.cpp \
- util/qmldatetimeformatter.cpp \
util/qmllistmodel.cpp\
util/qmllistaccessor.cpp \
util/qmlopenmetaobject.cpp \
@@ -31,7 +28,6 @@ HEADERS += \
util/qmlscript.h \
util/qmlanimation.h \
util/qmlanimation_p.h \
- util/qmlbehaviour.h \
util/qmlfont.h \
util/qmlfollow.h \
util/qmlstate.h\
@@ -40,8 +36,6 @@ HEADERS += \
util/qmlstate_p.h\
util/qmlstategroup.h \
util/qmltransition.h \
- util/qbindablemap.h \
- util/qmldatetimeformatter.h \
util/qmllistmodel.h\
util/qmllistaccessor.h \
util/qmlopenmetaobject.h \
diff --git a/src/declarative/widgets/graphicslayouts.h b/src/declarative/widgets/graphicslayouts.h
index 303f749..525a848 100644
--- a/src/declarative/widgets/graphicslayouts.h
+++ b/src/declarative/widgets/graphicslayouts.h
@@ -183,8 +183,8 @@ private:
};
QML_DECLARE_TYPE(QGraphicsGridLayoutObject)
-#endif // GRAPHICSLAYOUTS_H
-
QT_END_NAMESPACE
QT_END_HEADER
+
+#endif // GRAPHICSLAYOUTS_H
diff --git a/src/declarative/widgets/graphicswidgets.cpp b/src/declarative/widgets/graphicswidgets.cpp
index 86509f5..e7d01e3 100644
--- a/src/declarative/widgets/graphicswidgets.cpp
+++ b/src/declarative/widgets/graphicswidgets.cpp
@@ -168,6 +168,6 @@ QML_DEFINE_EXTENDED_TYPE(QGraphicsWidget,QGraphicsWidget,QGraphicsWidgetDeclarat
QML_DEFINE_INTERFACE(QGraphicsItem)
-#include "graphicswidgets.moc"
-
QT_END_NAMESPACE
+
+#include "graphicswidgets.moc"