summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWarwick Allison <warwick.allison@nokia.com>2010-04-23 07:02:24 (GMT)
committerWarwick Allison <warwick.allison@nokia.com>2010-04-23 07:02:24 (GMT)
commit80d1bc3da3ac03deb321a307a87df1f5f331e48f (patch)
tree54f3ef183a295d7682db3c92bd86cc6f21370f1c
parent8ede65299dc5644d84a394d6a96cbdbd39e69ecf (diff)
parent571de030b02a5549c6069bf31dec69eb239870a6 (diff)
downloadQt-80d1bc3da3ac03deb321a307a87df1f5f331e48f.zip
Qt-80d1bc3da3ac03deb321a307a87df1f5f331e48f.tar.gz
Qt-80d1bc3da3ac03deb321a307a87df1f5f331e48f.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-qml into 4.7
-rwxr-xr-xdemos/declarative/samegame/SamegameCore/samegame.js9
-rw-r--r--demos/declarative/snake/content/snake.js8
-rw-r--r--doc/src/declarative/anchor-layout.qdoc8
-rw-r--r--doc/src/declarative/animation.qdoc2
-rw-r--r--doc/src/declarative/elements.qdoc1
-rw-r--r--doc/src/declarative/examples.qdoc40
-rw-r--r--doc/src/declarative/extending.qdoc39
-rw-r--r--doc/src/declarative/globalobject.qdoc4
-rw-r--r--doc/src/declarative/integrating.qdoc4
-rw-r--r--doc/src/declarative/javascriptblocks.qdoc17
-rw-r--r--doc/src/declarative/measuring-performance.qdoc122
-rw-r--r--doc/src/declarative/network.qdoc11
-rw-r--r--doc/src/declarative/qdeclarativedocument.qdoc2
-rw-r--r--doc/src/declarative/qdeclarativei18n.qdoc2
-rw-r--r--doc/src/declarative/qdeclarativeintro.qdoc4
-rw-r--r--doc/src/declarative/qdeclarativestates.qdoc2
-rw-r--r--doc/src/declarative/qmlruntime.qdoc16
-rw-r--r--doc/src/declarative/qtprogrammers.qdoc4
-rw-r--r--doc/src/declarative/snippets/qtbinding/contextproperties/main.cpp2
-rw-r--r--doc/src/declarative/snippets/qtbinding/custompalette/main.cpp2
-rw-r--r--doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp2
-rw-r--r--doc/src/examples/qml-examples.qdoc260
-rw-r--r--doc/src/examples/qml-focus.qdoc49
-rw-r--r--examples/declarative/dynamic/qml/itemCreation.js6
-rw-r--r--examples/declarative/tutorials/samegame/samegame2/samegame.js8
-rw-r--r--examples/declarative/tutorials/samegame/samegame3/samegame.js8
-rwxr-xr-xexamples/declarative/tutorials/samegame/samegame4/content/samegame.js8
-rw-r--r--examples/declarative/workerscript/workerscript.qml6
-rw-r--r--src/declarative/QmlChanges.txt31
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp1
-rw-r--r--src/declarative/graphicsitems/qdeclarativerectangle.cpp4
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext.cpp12
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext_p.h3
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextedit.cpp13
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextedit_p.h3
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp6
-rw-r--r--src/declarative/qml/qdeclarativeboundsignal.cpp10
-rw-r--r--src/declarative/qml/qdeclarativeboundsignal_p.h5
-rw-r--r--src/declarative/qml/qdeclarativecomponent.cpp119
-rw-r--r--src/declarative/qml/qdeclarativecomponent.h1
-rw-r--r--src/declarative/qml/qdeclarativecontext.h1
-rw-r--r--src/declarative/qml/qdeclarativeengine.h1
-rw-r--r--src/declarative/qml/qdeclarativeenginedebug.cpp2
-rw-r--r--src/declarative/qml/qdeclarativeexpression.cpp24
-rw-r--r--src/declarative/qml/qdeclarativeexpression.h7
-rw-r--r--src/declarative/qml/qdeclarativeexpression_p.h1
-rw-r--r--src/declarative/qml/qdeclarativeextensionplugin.h3
-rw-r--r--src/declarative/qml/qdeclarativewatcher.cpp2
-rw-r--r--src/declarative/util/qdeclarativeanimation.cpp2
-rw-r--r--src/declarative/util/qdeclarativeconnections.cpp10
-rw-r--r--src/declarative/util/qdeclarativepropertychanges.cpp2
-rw-r--r--src/declarative/util/qdeclarativestategroup.cpp2
-rw-r--r--src/declarative/util/qdeclarativestateoperations.cpp2
-rw-r--r--src/declarative/util/qdeclarativeview.h2
-rw-r--r--tests/auto/declarative/qdeclarativeconnection/data/connection-targetchange.qml25
-rw-r--r--tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp26
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp38
-rw-r--r--tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp6
-rw-r--r--tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp2
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.pngbin23029 -> 22832 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml166
63 files changed, 721 insertions, 461 deletions
diff --git a/demos/declarative/samegame/SamegameCore/samegame.js b/demos/declarative/samegame/SamegameCore/samegame.js
index aafbfdf..bf99ca3 100755
--- a/demos/declarative/samegame/SamegameCore/samegame.js
+++ b/demos/declarative/samegame/SamegameCore/samegame.js
@@ -5,7 +5,6 @@ var maxRow = 15;
var maxIndex = maxColumn*maxRow;
var board = new Array(maxIndex);
var blockSrc = "SamegameCore/BoomBlock.qml";
-var scoresURL = "http://qtfx-nokia.trolltech.com.au/samegame/scores.php";
var scoresURL = "";
var gameDuration;
var component = Qt.createComponent(blockSrc);
@@ -179,8 +178,8 @@ function createBlock(column,row){
if(component.isReady){
var dynamicObject = component.createObject();
if(dynamicObject == null){
- print("error creating block");
- print(component.errorsString());
+ console.log("error creating block");
+ console.log(component.errorsString());
return false;
}
dynamicObject.type = Math.floor(Math.random() * 3);
@@ -193,8 +192,8 @@ function createBlock(column,row){
dynamicObject.spawned = true;
board[index(column,row)] = dynamicObject;
}else{
- print("error loading block component");
- print(component.errorsString());
+ console.log("error loading block component");
+ console.log(component.errorsString());
return false;
}
return true;
diff --git a/demos/declarative/snake/content/snake.js b/demos/declarative/snake/content/snake.js
index 2457fbd..02f9757 100644
--- a/demos/declarative/snake/content/snake.js
+++ b/demos/declarative/snake/content/snake.js
@@ -54,9 +54,9 @@ function startNewGame()
} else {
if(linkComponent.isReady == false){
if(linkComponent.isError == true)
- print(linkComponent.errorsString());
+ console.log(linkComponent.errorsString());
else
- print("Still loading linkComponent");
+ console.log("Still loading linkComponent");
continue;//TODO: Better error handling?
}
var link = linkComponent.createObject();
@@ -295,9 +295,9 @@ function createCookie(value) {
if(cookieComponent.isReady == false){
if(cookieComponent.isError == true)
- print(cookieComponent.errorsString());
+ console.log(cookieComponent.errorsString());
else
- print("Still loading cookieComponent");
+ console.log("Still loading cookieComponent");
return;//TODO: Better error handling?
}
cookie = cookieComponent.createObject();
diff --git a/doc/src/declarative/anchor-layout.qdoc b/doc/src/declarative/anchor-layout.qdoc
index ff47694..5340de6 100644
--- a/doc/src/declarative/anchor-layout.qdoc
+++ b/doc/src/declarative/anchor-layout.qdoc
@@ -44,10 +44,16 @@
\target anchor-layout
\title Anchor-based Layout in QML
-In addition to the more traditional \l Grid, \l Row, and \l Column, QML also provides a way to layout items using the concept of \e anchors. Each item can be thought of as having a set of 6 invisible "anchor lines": \e left, \e horizontalCenter, \e right, \e top, \e verticalCenter, and \e bottom.
+In addition to the more traditional \l Grid, \l Row, and \l Column,
+QML also provides a way to layout items using the concept of \e anchors.
+Each item can be thought of as having a set of 7 invisible "anchor lines":
+\e left, \e horizontalCenter, \e right, \e top, \e verticalCenter, \e baseline, and \e bottom.
\image edges_qml.png
+The baseline (not pictured above) corresponds to the imaginary line on which
+text would sit. For items with no text it is the same as \e top.
+
The QML anchoring system allows you to define relationships between the anchor lines of different items. For example, you can write:
\code
diff --git a/doc/src/declarative/animation.qdoc b/doc/src/declarative/animation.qdoc
index 9969e8f..88aca1b 100644
--- a/doc/src/declarative/animation.qdoc
+++ b/doc/src/declarative/animation.qdoc
@@ -94,7 +94,7 @@ Rectangle {
Rectangle {
color: "red"
width: 50; height: 50
- NumberAnimation on x { to: 50; }
+ NumberAnimation on x { to: 50 }
}
}
\endqml
diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc
index 355c0f4..bbe01e4 100644
--- a/doc/src/declarative/elements.qdoc
+++ b/doc/src/declarative/elements.qdoc
@@ -122,6 +122,7 @@ The following table lists the QML elements provided by the Qt Declarative module
\o \l Rectangle
\o \l Image
\o \l BorderImage
+\o \l AnimatedImage
\o \l Text
\o \l TextInput
\o \l TextEdit
diff --git a/doc/src/declarative/examples.qdoc b/doc/src/declarative/examples.qdoc
index dc6b76c..e01459f 100644
--- a/doc/src/declarative/examples.qdoc
+++ b/doc/src/declarative/examples.qdoc
@@ -71,7 +71,47 @@ For example, from your build directory, run:
\section1 Examples
\list
+\o \l{declarative/animations}{Animations}
+\o \l{declarative/aspectratio}{Aspect Ratio}
+\o \l{declarative/behaviors}{Behaviors}
+\o \l{declarative/border-image}{Border Image}
+\o \l{declarative/clocks}{Clocks}
+\o \l{declarative/connections}{Connections}
+\o \l{declarative/dial}{Dial}
+\o \l{declarative/dynamic}{Dynamic}
+\o \l{declarative/extending}{Extending}
+\o \l{declarative/fillmode}{Fillmode}
+\o \l{declarative/flipable}{Flipable}
\o \l{declarative/focus}{Focus}
+\o \l{declarative/fonts}{Fonts}
+\o \l{declarative/gridview}{GridView}
+\o \l{declarative/imageprovider}{Image Provider}
+\o \l{declarative/images}{Images}
+\o \l{declarative/layouts}{Layouts}
+\o \l{declarative/listmodel-threaded}{ListModel Threaded}
+\o \l{declarative/listview}{ListView}
+\o \l{declarative/mousearea}{Mouse Area}
+\o \l{declarative/objectlistmodel}{Object ListModel}
+\o \l{declarative/package}{Package}
+\o \l{declarative/parallax}{Parallax}
+\o \l{declarative/plugins}{Plugins}
+\o \l{declarative/progressbar}{Progress Bars}
+\o \l{declarative/proxywidgets}{Proxy Widgets}
+\o \l{declarative/scrollbar}{Scrollbar}
+\o \l{declarative/searchbox}{Search Box}
+\o \l{declarative/slideswitch}{Slide Switch}
+\o \l{declarative/sql}{SQL}
+\o \l{declarative/states}{States}
+\o \l{declarative/stringlistmodel}{String ListModel}
+\o \l{declarative/tabwidget}{Tab Widget}
+\o \l{declarative/tic-tac-toe}{Tic-Tac-Toe}
+\o \l{declarative/tvtennis}{TV Tennis}
+\o \l{declarative/velocity}{Velocity}
+\o \l{declarative/webview}{WebView}
+\o \l{declarative/workerscript}{WorkerScript}
+\o \l{declarative/xmldata}{XML Data}
+\o \l{declarative/xmlhttprequest}{XMLHttpRequest}
+
\endlist
\section1 Demos
diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc
index c27d091..1c159e4 100644
--- a/doc/src/declarative/extending.qdoc
+++ b/doc/src/declarative/extending.qdoc
@@ -43,7 +43,7 @@
\page qml-extending.html
\title Extending QML in C++
-The QML syntax declaratively describes how to construct an in memory object
+The QML syntax declaratively describes how to construct an in-memory object
tree. In Qt, QML is mainly used to describe a visual scene graph, but it is
not conceptually limited to this: the QML format is an abstract description of
any object tree. All the QML element types included in Qt are implemented using
@@ -65,7 +65,7 @@ QML relies heavily on Qt's meta object system and can only instantiate classes
that derive from QObject.
The QML engine has no intrinsic knowledge of any class types. Instead the
-programmer must define the C++ types, and their corresponding QML name.
+programmer must register the C++ types with their corresponding QML names.
Custom C++ types are registered using a template function:
@@ -152,7 +152,7 @@ template<typename T>
int qmlRegisterInterface(const char *typeName)
\endcode
-Registers the C++ interface \a T with the QML system as \a typeName.
+This registers the C++ interface \a T with the QML system as \a typeName.
Following registration, QML can coerce objects that implement this interface
for assignment to appropriately typed properties.
@@ -196,7 +196,7 @@ registered, the following function can be used:
int qmlRegisterType()
\endcode
-Registers the C++ type \a T with the QML system. The parameterless call to the template
+This registers the C++ type \a T with the QML system. The parameterless call to the template
function qmlRegisterType() does not define a mapping between the
C++ class and a QML element name, so the type is not instantiable from QML, but
it is available for type coercion.
@@ -222,7 +222,7 @@ The QML snippet shown above assigns a collection of objects to the
The \e {default property} is a syntactic convenience that allows a type designer to
specify a single property as the type's default. The default property is
assigned to whenever no explicit property is specified. As a convenience, it is
-behaviorally identical to assigning the default property explicitly by name.
+behaviorally identical to assigning to the default property explicitly by name.
From C++, type designers mark the default property using a Q_CLASSINFO()
annotation:
@@ -232,7 +232,7 @@ annotation:
Q_CLASSINFO("DefaultProperty", "property")
\endcode
-Mark \a property as the class's default property. \a property must be either
+This marks \a property as the class's default property. \a property must be either
an object property, or a list property.
A default property is optional. A derived class inherits its base class's
@@ -248,7 +248,7 @@ specify a default property.
\snippet examples/declarative/extending/grouped/example.qml 1
-The QML snippet shown above assigns a number properties to the \c Boy object,
+The QML snippet shown above assigns a number of properties to the \c Boy object,
including four properties using the grouped property syntax.
Grouped properties collect similar properties together into a single named
@@ -273,13 +273,13 @@ implement the \c shoe property grouping.
\snippet examples/declarative/extending/attached/example.qml 1
-The QML snippet shown above assigns the \c rsvp property using the attached
+The QML snippet shown above assigns a date to the \c rsvp property using the attached
property syntax.
Attached properties allow unrelated types to annotate other types with some
additional properties, generally for their own use. Attached properties are
identified through the use of the attacher type name, in the case shown
-\c BirthdayParty, as a suffix to the property name.
+\c BirthdayParty, as a prefix to the property name.
In the example shown, \c BirthdayParty is called the attaching type, and the
\c Boy instance the attachee object instance.
@@ -306,7 +306,7 @@ public:
QML_DECLARE_TYPEINFO(MyType, QML_HAS_ATTACHED_PROPERTIES)
\endcode
-Return an attachment object, of type \a AttachedPropertiesType, for the
+This returns an attachment object, of type \a AttachedPropertiesType, for the
attachee \a object instance. It is customary, though not strictly required, for
the attachment object to be parented to \a object to prevent memory leaks.
@@ -349,7 +349,7 @@ an instance can be accessed using the following method:
template<typename T>
QObject *qmlAttachedPropertiesObject<T>(QObject *attachee, bool create = true);
\endcode
-Returns the attachment object attached to \a attachee by the attaching type
+This returns the attachment object attached to \a attachee by the attaching type
\a T. If type \a T is not a valid attaching type, this method always returns 0.
If \a create is true, a valid attachment object will always be returned,
@@ -366,7 +366,7 @@ It is an element's responsibility to ensure that it does not access or return
pointers to invalid objects. QML makes the following guarentees:
\list
-\o An object assigned to an QObject (or QObject-derived) pointer property will be
+\o An object assigned to a QObject (or QObject-derived) pointer property will be
valid at the time of assignment.
Following assignment, it is the responsibility of the class to subsequently guard
@@ -562,19 +562,22 @@ extension type - when registering the target class whose properties are
transparently merged with the original target class when used from within QML.
An extension class is a regular QObject, with a constructor that takes a QObject
-pointer. When needed (extension classes are delay created until the first extended
+pointer. When needed (extension class creation is delayed until the first extended
property is accessed) the extension class is created and the target object is
passed in as the parent. When an extended property on the original is accessed,
the appropriate property on the extension object is used instead.
When an extended type is installed, one of the
\code
- #define QML_REGISTER_EXTENDED_TYPE(URI, VMAJ, VFROM, VTO, QDeclarativeName,T, ExtendedT)
- #define QML_REGISTER_EXTENDED_NOCREATE_TYPE(T, ExtendedT)
+template<typename T, typename ExtendedT>
+int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
+
+template<typename T, typename ExtendedT>
+int qmlRegisterType()
\endcode
-macros should be used instead of the regular \c QML_REGISTER_TYPE or
-\c QML_REGISTER_NOCREATE_TYPE. The arguments are identical to the corresponding
-non-extension object macro, except for the ExtendedT parameter which is the type
+functions should be used instead of the regular \c qmlRegisterType() variations.
+The arguments are identical to the corresponding non-extension registration functions,
+except for the ExtendedT parameter which is the type
of the extension object.
\section1 Optimization
diff --git a/doc/src/declarative/globalobject.qdoc b/doc/src/declarative/globalobject.qdoc
index 6709ab4..57eaae7 100644
--- a/doc/src/declarative/globalobject.qdoc
+++ b/doc/src/declarative/globalobject.qdoc
@@ -223,7 +223,7 @@ of their use.
function finishCreation(){
if(component.isReady()){
sprite = component.createObject();
- if(sprite == 0){
+ if(sprite == null){
// Error Handling
}else{
sprite.parent = page;
@@ -248,7 +248,7 @@ of their use.
\code
component = createComponent("Sprite.qml");
sprite = component.createObject();
- if(sprite == 0){
+ if(sprite == null){
// Error Handling
console.log(component.errorsString());
}else{
diff --git a/doc/src/declarative/integrating.qdoc b/doc/src/declarative/integrating.qdoc
index 65413ec..0051f09 100644
--- a/doc/src/declarative/integrating.qdoc
+++ b/doc/src/declarative/integrating.qdoc
@@ -152,8 +152,8 @@ Here is a screenshot of the result:
\image declarative-integrating-graphicswidgets.png
-Note this approach of creating your graphics widgets from QML does not work
-with QGraphicsItem objects that are not QGraphicsWidget-based, since they are not QObjects.
+Note this approach of creating your graphics objects from QML does not work
+with QGraphicsItems that are not QGraphicsObject-based, since they are not QObjects.
See \l{Extending QML in C++} for further information on using C++ types.
diff --git a/doc/src/declarative/javascriptblocks.qdoc b/doc/src/declarative/javascriptblocks.qdoc
index 7c0570e..2db7e8e 100644
--- a/doc/src/declarative/javascriptblocks.qdoc
+++ b/doc/src/declarative/javascriptblocks.qdoc
@@ -75,7 +75,7 @@ Item {
MouseArea {
anchors.fill: parent
- onClicked: print(factorial(10))
+ onClicked: console.log(factorial(10))
}
}
\endcode
@@ -99,7 +99,7 @@ import "factorial.js" as MathFunctions
Item {
MouseArea {
anchors.fill: parent
- onClicked: print(MathFunctions.factorial(10))
+ onClicked: console.log(MathFunctions.factorial(10))
}
}
\endcode
@@ -184,6 +184,9 @@ Any element in a QML file - including nested elements and nested QML component
instances - can use this attached property. If there is more than one \c onCompleted()
handler to execute at startup, they are run sequentially in an undefined order.
+Likewise, the \l {Component::onDestruction} attached property is triggered on
+component destruction.
+
\section1 QML JavaScript Restrictions
QML executes standard JavaScript code, with the following restrictions:
@@ -204,16 +207,18 @@ is illegal in QML.
\code
// Illegal modification of undeclared variable
a = 1;
-for (var ii = 1; ii < 10; ++ii) a = a * ii;
- console.log("Result: " + a);
+for (var ii = 1; ii < 10; ++ii)
+ a = a * ii;
+console.log("Result: " + a);
\endcode
It can be trivially modified to this legal code.
\code
var a = 1;
-for (var ii = 1; ii < 10; ++ii) a = a * ii;
- console.log("Result: " + a);
+for (var ii = 1; ii < 10; ++ii)
+ a = a * ii;
+console.log("Result: " + a);
\endcode
Any attempt to modify the global object - either implicitly or explicitly - will
diff --git a/doc/src/declarative/measuring-performance.qdoc b/doc/src/declarative/measuring-performance.qdoc
deleted file mode 100644
index cb608bf..0000000
--- a/doc/src/declarative/measuring-performance.qdoc
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $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 Technology Preview License Agreement accompanying
-** this package.
-**
-** 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.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-\page optimizing-performance.html
-\target optimizing-performance
-\title Optimizing Performance in QML
-
-The Qt Declarative module includes several tools to help measure performance.
-
-\section1 Performance Logging
-
-The declarative module uses the functionality provided by QPerformanceLog to log performance information. To see this information you can add the following to src.pro:
-
-\code
-DEFINES += Q_ENABLE_PERFORMANCE_LOG
-\endcode
-
-The performance information will be printed to screen on a QML application startup, or when running the viewer can be forced at anytime by pressing 'F3' on the keyboard.
-
-Additional logging can be enabled by adding the relevant categories to qfxperf.h and qfxperf.cpp.
-
-For example, to measure the cost of calculating the size of a text item, you would first define a TextSize category by adding the following:
-
-\code
-//in qfxperf.h
-Q_DECLARE_PERFORMANCE_METRIC(TextSize);
-
-//in qfxperf.cpp
-Q_DEFINE_PERFORMANCE_METRIC(TextSize, "Text Size Calculation");
-\endcode
-
-You could then use this category in the code:
-
-\code
-void QDeclarativeText::updateSize()
-{
- QDeclarativePerfTimer<QDeclarativePerf::TextSize> perf;
- ...
-}
-\endcode
-
-Because there is no cost for a QDeclarativePerfTimer when Q_ENABLE_PERFORMANCE_LOG is not defined, this line can persist in the code and be used to help detect performance bottlenecks and regressions. See the QPerformanceLog documentation for more information on this performance framework.
-
-\section1 FPS Measurements
-
-When running the viewer, pressing 'F2' on the keyboard while a QML program is running will cause information on cost-per-frame and frames-per-second (FPS) to be printed to the console.
-
-The information printed includes:
-\list
-\o \e repaint(): the total time spent painting.
-\o \e paint(): the time spent by Qt painting.
-\o \e timeBetweenFrames: the total time spent per frame. This number minus repaint() gives a good idea of how much time is spent on things besides painting. A high number here with a low number for repaint() indicates expensive calculations happening each frame.
-\endlist
-
-\section1 Improving Performance
-
-The following tips can help decrease startup time for QML-based appications.
-
-\section2 Images
-
-\list
-\o Use jpg instead of png for photo-like images. On the N810, this can save 150ms for a large (320x480) image.
-
-\o If you are configuring Qt, configure out any image plugins you don't plan to support (mng and svg are the most expensive). On the N810, this can save 75-100ms startup time. For example:
-
-\code
-configure -no-libmng -no-svg -no-libtiff
-\endcode
-
-\o In some cases running pngcrush, optipng, gifsicle or other similar tools can give some improvement.
-
-We are also investigating support for the loading of uncompressed images. This will provide opportunites to decrease startup time at the cost of increased storage space.
-\endlist
-
-\section2 Fonts
-
-\list
-\o Use qpf instead of ttf. When using multiple font sizes and weights on the N810, this can save 125ms startup time compared to a ttf 'clean' run, and 40-50ms on subsequent runs (ttfs are shared by open applications).
-\endlist
-
-*/
-
-*/
diff --git a/doc/src/declarative/network.qdoc b/doc/src/declarative/network.qdoc
index d268a13..68768c6 100644
--- a/doc/src/declarative/network.qdoc
+++ b/doc/src/declarative/network.qdoc
@@ -130,11 +130,12 @@ See the \tt demos/declarative/flickr for a real demonstration of this.
\section1 Configuring the Network Access Manager
All network access from QML is managed by a QNetworkAccessManager set on the QDeclarativeEngine which executes the QML.
-By default, this is an unmodified Qt QNetworkAccessManager. You may set a different manager using
-QDeclarativeEngine::setNetworkAccessManager() as appropriate for the policies of your application.
-For example, the \l {Qt Declarative UI Runtime}{qml} tool sets a new QNetworkAccessManager which
-trusts HTTP Expiry headers to avoid network cache checks, allows HTTP Pipelining, adds a persistent HTTP CookieJar,
-a simple disk cache, and supports proxy settings.
+By default, this is an unmodified Qt QNetworkAccessManager. You may set a different manager by
+providing a QDeclarativeNetworkAccessManagerFactory and setting it via
+QDeclarativeEngine::setNetworkAccessManagerFactory().
+For example, the \l {Qt Declarative UI Runtime}{qml} tool sets a QDeclarativeNetworkAccessManagerFactory which
+creates QNetworkAccessManager that trusts HTTP Expiry headers to avoid network cache checks,
+allows HTTP Pipelining, adds a persistent HTTP CookieJar, a simple disk cache, and supports proxy settings.
\section1 QRC Resources
diff --git a/doc/src/declarative/qdeclarativedocument.qdoc b/doc/src/declarative/qdeclarativedocument.qdoc
index cf3aae2..bc099ce 100644
--- a/doc/src/declarative/qdeclarativedocument.qdoc
+++ b/doc/src/declarative/qdeclarativedocument.qdoc
@@ -93,7 +93,7 @@ behaviour. As it is a template, a single QML component can be "run" multiple ti
produce several objects, each of which are said to be \e instances of the component.
Once created, instances are not dependent on the component that created them, so they can
-operate on independent data. Here is an example of a simple "button" component that is
+operate on independent data. Here is an example of a simple "Button" component that is
instantiated four times, each with a different value for its \c text property.
\table
diff --git a/doc/src/declarative/qdeclarativei18n.qdoc b/doc/src/declarative/qdeclarativei18n.qdoc
index 0a48dd9..c7dbd4d 100644
--- a/doc/src/declarative/qdeclarativei18n.qdoc
+++ b/doc/src/declarative/qdeclarativei18n.qdoc
@@ -86,7 +86,7 @@ lupdate hello.qml -ts hello.ts
\endcode
Then we open \c hello.ts in \l{Qt Linguist Manual} {Linguist}, provide
-a translation and create the release file \c hello.qml.
+a translation and create the release file \c hello.qm.
Finally, we can test the translation:
\code
diff --git a/doc/src/declarative/qdeclarativeintro.qdoc b/doc/src/declarative/qdeclarativeintro.qdoc
index 4d05a8c..a98c9e1 100644
--- a/doc/src/declarative/qdeclarativeintro.qdoc
+++ b/doc/src/declarative/qdeclarativeintro.qdoc
@@ -142,8 +142,8 @@ Commenting in QML is similar to JavaScript.
\quotefile doc/src/snippets/declarative/comments.qml
-Comments are ignored by the engine. The are useful for explaining what you
-are doing: for referring back to at a later date, or for others reading
+Comments are ignored by the engine. They are useful for explaining what you
+are doing; for referring back to at a later date, or for others reading
your QML files.
Comments can also be used to prevent the execution of code, which is
diff --git a/doc/src/declarative/qdeclarativestates.qdoc b/doc/src/declarative/qdeclarativestates.qdoc
index 0fea6f8..fd0c677 100644
--- a/doc/src/declarative/qdeclarativestates.qdoc
+++ b/doc/src/declarative/qdeclarativestates.qdoc
@@ -70,7 +70,7 @@ In QML:
\o A state can affect the properties of other objects, not just the object owning the state (and not just that object's children).
\endlist
-Here is an example of using states. In the default state \c myRect is positioned at 0,0. In the 'moved' state it is positioned at 50,50. Clicking within the mouse region changes the state from the default state to the 'moved' state, thus moving the rectangle.
+Here is an example of using states. In the default state \c myRect is positioned at 0,0. In the 'moved' state it is positioned at 50,50. Clicking within the mouse area changes the state from the default state to the 'moved' state, thus moving the rectangle.
\qml
Item {
diff --git a/doc/src/declarative/qmlruntime.qdoc b/doc/src/declarative/qmlruntime.qdoc
index 9f7183a..a724c7d 100644
--- a/doc/src/declarative/qmlruntime.qdoc
+++ b/doc/src/declarative/qmlruntime.qdoc
@@ -52,7 +52,7 @@
QML is a runtime, as you can run plain qml files which pull in their required modules.
To run apps with the QML runtime, you can either start the runtime
- from your on application (using a QDeclarativeView) or with the simple \c qml application.
+ from your own application (using a QDeclarativeView) or with the simple \c qml application.
The \c qml application can be
installed in a production environment, assuming that it is not already
present in the system. It is generally packaged alongside Qt.
@@ -137,8 +137,8 @@
\section2 Runtime Object
All applications using the qmlruntime will have access to the 'runtime'
- property on the root context. This property contains several information
- about the runtime environment of the application.
+ property on the root context. This property contains several pieces of
+ information about the runtime environment of the application.
\section3 Screen Orientation
@@ -150,11 +150,11 @@
which can be either Orientation.Landscape or Orientation.Portrait and which can be bound to in your
application. An example is below:
-\code
+ \code
Item {
state: (runtime.orientation == Orientation.Landscape) ? 'landscape' : ''
}
-\endcode
+ \endcode
This allows your application to respond to the orientation of the screen changing. The runtime
will automatically update this on some platforms (currently the N900 only) to match the physical
@@ -163,12 +163,12 @@
\section3 Window Active
The runtime.isActiveWindow property tells whether the main window of the qml runtime is currently active
- or not. This is specially useful for embedded devices when you want to pause parts of your application,
+ or not. This is especially useful for embedded devices when you want to pause parts of your application,
including animations, when your application loses focus or goes to the background.
The example below, stops the animation when the application's window is deactivated and resumes on activation:
-\code
+ \code
Item {
width: 300; height: 200
Rectangle {
@@ -182,6 +182,6 @@
}
}
}
-\endcode
+ \endcode
*/
diff --git a/doc/src/declarative/qtprogrammers.qdoc b/doc/src/declarative/qtprogrammers.qdoc
index 05ffeb0..0b40840 100644
--- a/doc/src/declarative/qtprogrammers.qdoc
+++ b/doc/src/declarative/qtprogrammers.qdoc
@@ -62,7 +62,7 @@ QML provides direct access to the following concepts from Qt:
\o QObject signals and slots - available as functions to call in JavaScript
\o QObject properties - available as variables in JavaScript
\o QWidget - QDeclarativeView is a QML-displaying widget
- \o Qt models - used directly in data binding (QAbstractItemModel and next generation QListModelInterface)
+ \o Qt models - used directly in data binding (QAbstractItemModel)
\endlist
Qt knowledge is \e required for \l {Extending QML in C++}, and also for \l{Integrating QML with existing Qt UI code}.
@@ -104,7 +104,7 @@ and exactly how it respond to mouse, key, or touch input, should all be left for
in QML.
It is illustrative to note that QDeclarativeTextEdit is built upon QTextControl,
-QDeclarativeWebView is built upon QWebPage, and ListView uses QListModelInterface,
+QDeclarativeWebView is built upon QWebPage, and ListView uses QAbstractItemModel,
just as QTextEdit, QWebView, and QListView are built upon
those same UI-agnostic components.
diff --git a/doc/src/declarative/snippets/qtbinding/contextproperties/main.cpp b/doc/src/declarative/snippets/qtbinding/contextproperties/main.cpp
index 15e3d4c..4073a6c 100644
--- a/doc/src/declarative/snippets/qtbinding/contextproperties/main.cpp
+++ b/doc/src/declarative/snippets/qtbinding/contextproperties/main.cpp
@@ -56,7 +56,7 @@ int main(int argc, char *argv[])
context->setContextProperty("backgroundColor",
QColor(Qt::yellow));
- view.setSource(QUrl("main.qml"));
+ view.setSource(QUrl::fromLocalFile("main.qml"));
view.show();
return app.exec();
diff --git a/doc/src/declarative/snippets/qtbinding/custompalette/main.cpp b/doc/src/declarative/snippets/qtbinding/custompalette/main.cpp
index c723688..dc651f6 100644
--- a/doc/src/declarative/snippets/qtbinding/custompalette/main.cpp
+++ b/doc/src/declarative/snippets/qtbinding/custompalette/main.cpp
@@ -53,7 +53,7 @@ int main(int argc, char *argv[])
QDeclarativeView view;
view.rootContext()->setContextProperty("palette", new CustomPalette);
- view.setSource(QUrl("main.qml"));
+ view.setSource(QUrl::fromLocalFile("main.qml"));
view.show();
return app.exec();
diff --git a/doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp b/doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp
index 13e3b9f..537a288 100644
--- a/doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp
+++ b/doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp
@@ -54,7 +54,7 @@ int main(int argc, char *argv[])
view.rootContext()->setContextProperty("stopwatch",
new Stopwatch);
- view.setSource(QUrl("main.qml"));
+ view.setSource(QUrl::fromLocalFile("main.qml"));
view.show();
return app.exec();
diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc
new file mode 100644
index 0000000..93e4a46
--- /dev/null
+++ b/doc/src/examples/qml-examples.qdoc
@@ -0,0 +1,260 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $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 Technology Preview License Agreement accompanying
+** this package.
+**
+** 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.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \title Animations
+ \example declarative/animations
+
+ This example shows how to use animations in QML.
+*/
+
+/*!
+ \title AspectRatio
+ \example declarative/aspectratio
+
+ This example shows how to implement different aspect ratios in QML.
+*/
+
+/*!
+ \example declarative/behaviors
+ \title Behaviors
+*/
+
+/*!
+ \title Border Image
+ \example declarative/border-image
+
+ This example shows how to use a BorderImage in QML.
+*/
+
+/*!
+ \title Clocks
+ \example declarative/clocks
+
+ This example shows how to create a Clock component and reuse it in a grid.
+*/
+
+/*!
+ \title Connections
+ \example declarative/connections
+
+ This example shows how to use a Connection element in QML.
+*/
+
+/*!
+ \title Dial
+ \example declarative/dial
+
+ This example shows how to implement a dial in QML.
+*/
+
+/*!
+ \title Dynamic
+ \example declarative/dynamic
+
+ This example shows how to create dynamic objects QML.
+*/
+
+/*!
+ \example declarative/extending
+ \title Extending
+*/
+
+/*!
+ \example declarative/fillmode
+ \title Fillmode
+*/
+
+/*!
+ \title Flipable
+ \example declarative/flipable
+
+ This example shows how to use a Flipable element in QML.
+*/
+
+/*!
+ \title Focus
+ \example declarative/focus
+
+ This example shows how to handle keys and focus in QML.
+
+ \image qml-focus-example.png
+*/
+
+/*!
+ \example declarative/fonts
+ \title Fonts
+*/
+
+/*!
+ \example declarative/gridview
+ \title GridView
+*/
+
+/*!
+ \example declarative/imageprovider
+ \title Image Provider
+*/
+
+/*!
+ \example declarative/images
+ \title Images
+*/
+
+/*!
+ \example declarative/layouts
+ \title Layouts
+*/
+
+/*!
+ \example declarative/listmodel-threaded
+ \title ListModel Threaded
+*/
+
+/*!
+ \example declarative/listview
+ \title ListView
+*/
+
+/*!
+ \example declarative/mousearea
+ \title Mouse Area
+*/
+
+/*!
+ \example declarative/objectlistmodel
+ \title Object ListModel
+*/
+
+/*!
+ \example declarative/package
+ \title Package
+*/
+
+/*!
+ \example declarative/parallax
+ \title Parallax
+*/
+
+/*!
+ \example declarative/plugins
+ \title Plugins
+*/
+
+/*!
+ \example declarative/progressbar
+ \title Progress Bars
+*/
+
+/*!
+ \example declarative/proxywidgets
+ \title Proxy Widgets
+*/
+
+/*!
+ \example declarative/scrollbar
+ \title Scrollbar
+*/
+
+/*!
+ \example declarative/searchbox
+ \title Search Box
+*/
+
+/*!
+ \example declarative/slideswitch
+ \title Slide Switch
+*/
+
+/*!
+ \example declarative/sql
+ \title SQL
+*/
+
+/*!
+ \example declarative/states
+ \title States
+*/
+
+/*!
+ \example declarative/stringlistmodel
+ \title String ListModel
+*/
+
+/*!
+ \example declarative/tabwidget
+ \title Tab Widget
+*/
+
+/*!
+ \example declarative/tic-tac-toe
+ \title Tic-Tac-Toe
+*/
+
+/*!
+ \example declarative/tvtennis
+ \title TV Tennis
+*/
+
+/*!
+ \example declarative/velocity
+ \title Velocity
+*/
+
+/*!
+ \example declarative/webview
+ \title WebView
+*/
+
+/*!
+ \example declarative/workerscript
+ \title WorkerScript
+*/
+
+/*!
+ \example declarative/xmldata
+ \title XML Data
+*/
+
+/*!
+ \example declarative/xmlhttprequest
+ \title XMLHttpRequest
+*/
diff --git a/doc/src/examples/qml-focus.qdoc b/doc/src/examples/qml-focus.qdoc
deleted file mode 100644
index 92d93b2..0000000
--- a/doc/src/examples/qml-focus.qdoc
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $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 Technology Preview License Agreement accompanying
-** this package.
-**
-** 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.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \title Focus
- \example declarative/focus
-
- This example shows how to handle keys and focus in QML.
-
- \image qml-focus-example.png
-*/
diff --git a/examples/declarative/dynamic/qml/itemCreation.js b/examples/declarative/dynamic/qml/itemCreation.js
index 4fa0d9f..98d48a8 100644
--- a/examples/declarative/dynamic/qml/itemCreation.js
+++ b/examples/declarative/dynamic/qml/itemCreation.js
@@ -32,7 +32,7 @@ function loadComponent() {
createItem();
itemComponent = Qt.createComponent(itemButton.file);
- //print(itemButton.file)
+ //console.log(itemButton.file)
if(itemComponent.isLoading){
component.statusChanged.connect(finishCreation);
}else{//Depending on the content, it can be ready or error immediately
@@ -51,8 +51,8 @@ function createItem() {
draggedItem.z = 4;//On top
} else if (itemComponent.isError) {
draggedItem = null;
- print("error creating component");
- print(component.errorsString());
+ console.log("error creating component");
+ console.log(component.errorsString());
}
}
diff --git a/examples/declarative/tutorials/samegame/samegame2/samegame.js b/examples/declarative/tutorials/samegame/samegame2/samegame.js
index 81da31b..e5c790d 100644
--- a/examples/declarative/tutorials/samegame/samegame2/samegame.js
+++ b/examples/declarative/tutorials/samegame/samegame2/samegame.js
@@ -43,8 +43,8 @@ function createBlock(column, row) {
if (component.isReady) {
var dynamicObject = component.createObject();
if (dynamicObject == null) {
- print("error creating block");
- print(component.errorsString());
+ console.log("error creating block");
+ console.log(component.errorsString());
return false;
}
dynamicObject.parent = background;
@@ -54,8 +54,8 @@ function createBlock(column, row) {
dynamicObject.height = blockSize;
board[index(column, row)] = dynamicObject;
} else {
- print("error loading block component");
- print(component.errorsString());
+ console.log("error loading block component");
+ console.log(component.errorsString());
return false;
}
return true;
diff --git a/examples/declarative/tutorials/samegame/samegame3/samegame.js b/examples/declarative/tutorials/samegame/samegame3/samegame.js
index eaf47d9..da0f76e 100644
--- a/examples/declarative/tutorials/samegame/samegame3/samegame.js
+++ b/examples/declarative/tutorials/samegame/samegame3/samegame.js
@@ -40,8 +40,8 @@ function createBlock(column, row) {
if (component.isReady) {
var dynamicObject = component.createObject();
if (dynamicObject == null) {
- print("error creating block");
- print(component.errorsString());
+ console.log("error creating block");
+ console.log(component.errorsString());
return false;
}
dynamicObject.type = Math.floor(Math.random() * 3);
@@ -52,8 +52,8 @@ function createBlock(column, row) {
dynamicObject.height = gameCanvas.blockSize;
board[index(column, row)] = dynamicObject;
} else {
- print("error loading block component");
- print(component.errorsString());
+ console.log("error loading block component");
+ console.log(component.errorsString());
return false;
}
return true;
diff --git a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
index c527f66..1454f0b 100755
--- a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
+++ b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
@@ -51,8 +51,8 @@ function createBlock(column, row) {
if (component.isReady) {
var dynamicObject = component.createObject();
if (dynamicObject == null) {
- print("error creating block");
- print(component.errorsString());
+ console.log("error creating block");
+ console.log(component.errorsString());
return false;
}
dynamicObject.type = Math.floor(Math.random() * 3);
@@ -65,8 +65,8 @@ function createBlock(column, row) {
dynamicObject.spawned = true;
board[index(column, row)] = dynamicObject;
} else {
- print("error loading block component");
- print(component.errorsString());
+ console.log("error loading block component");
+ console.log(component.errorsString());
return false;
}
return true;
diff --git a/examples/declarative/workerscript/workerscript.qml b/examples/declarative/workerscript/workerscript.qml
index 6c6253b..2294a81 100644
--- a/examples/declarative/workerscript/workerscript.qml
+++ b/examples/declarative/workerscript/workerscript.qml
@@ -8,9 +8,9 @@ Rectangle {
source: "workerscript.js"
onMessage: {
- print("Moved " + messageObject.xmove + " along the X axis.");
- print("Moved " + messageObject.ymove + " along the Y axis.");
- print("Moved " + messageObject.move + " pixels.");
+ console.log("Moved " + messageObject.xmove + " along the X axis.");
+ console.log("Moved " + messageObject.ymove + " along the Y axis.");
+ console.log("Moved " + messageObject.move + " pixels.");
}
}
diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt
index 55f7b21..9c46467 100644
--- a/src/declarative/QmlChanges.txt
+++ b/src/declarative/QmlChanges.txt
@@ -3,6 +3,11 @@ The changes below are pre Qt 4.7.0 RC
Flickable: overShoot is replaced by boundsBehavior enumeration.
+C++ API
+-------
+QDeclarativeExpression::value() has been renamed to
+QDeclarativeExpression::evaluate()
+
=============================================================================
The changes below are pre Qt 4.7.0 beta
@@ -62,22 +67,22 @@ automatically 'followed' anymore.
If you want to follow an hypothetical rect1, you should do now:
-     Rectangle {
-         color: "green"
-         width: 60; height: 60;
-         x: rect1.x - 5; y: rect1.y - 5;
-         Behavior on x { SmoothedAnimation { velocity: 200 } }
-         Behavior on y { SmoothedAnimation { velocity: 200 } }
-     }
+ Rectangle {
+ color: "green"
+ width: 60; height: 60;
+ x: rect1.x - 5; y: rect1.y - 5;
+ Behavior on x { SmoothedAnimation { velocity: 200 } }
+ Behavior on y { SmoothedAnimation { velocity: 200 } }
+ }
instead of the old automatic source changed tracking:
-     Rectangle {
-         color: "green"
-         width: 60; height: 60;
-         EaseFollow on x { source: rect1.x - 5; velocity: 200 }
-         EaseFollow on y { source: rect1.y - 5; velocity: 200 }
-    }
+ Rectangle {
+ color: "green"
+ width: 60; height: 60;
+ EaseFollow on x { source: rect1.x - 5; velocity: 200 }
+ EaseFollow on y { source: rect1.y - 5; velocity: 200 }
+ }
This is a syntax and behavior change.
diff --git a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp
index 4238c53..2945b6c 100644
--- a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp
@@ -143,6 +143,7 @@ void QDeclarativeItemModule::defineModule()
qmlRegisterType<QAction>();
qmlRegisterType<QDeclarativePen>();
qmlRegisterType<QDeclarativeFlickableVisibleArea>();
+ qmlRegisterType<QGraphicsEffect>();
qmlRegisterUncreatableType<QDeclarativeKeyNavigationAttached>("Qt",4,7,"KeyNavigation",QDeclarativeKeyNavigationAttached::tr("KeyNavigation is only available via attached properties"));
qmlRegisterUncreatableType<QDeclarativeKeysAttached>("Qt",4,7,"Keys",QDeclarativeKeysAttached::tr("Keys is only available via attached properties"));
diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp
index 3daa83f..0328f91 100644
--- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp
+++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp
@@ -357,9 +357,7 @@ void QDeclarativeRectangle::generateBorderedRect()
Q_D(QDeclarativeRectangle);
if (d->rectImage.isNull()) {
const int pw = d->pen && d->pen->isValid() ? d->pen->width() : 0;
- // Adding 5 here makes qDrawBorderPixmap() paint correctly with smooth: true
- // Ideally qDrawBorderPixmap() would be fixed - QTBUG-7999
- d->rectImage = QPixmap(pw*2 + 5, pw*2 + 5);
+ d->rectImage = QPixmap(pw*2 + 3, pw*2 + 3);
d->rectImage.fill(Qt::transparent);
QPainter p(&(d->rectImage));
p.setRenderHint(QPainter::Antialiasing);
diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp
index a95c930..0b59503 100644
--- a/src/declarative/graphicsitems/qdeclarativetext.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetext.cpp
@@ -525,18 +525,6 @@ void QDeclarativeText::setWrapMode(WrapMode mode)
emit wrapModeChanged();
}
-bool QDeclarativeText::wrap() const
-{
- Q_D(const QDeclarativeText);
- return d->wrapMode != NoWrap;
-}
-
-void QDeclarativeText::setWrap(bool w)
-{
- qmlInfo(this) << "\"wrap\" property is deprecated and will soon be removed. Use wrapMode";
- setWrapMode(w ? WordWrap : NoWrap);
-}
-
/*!
\qmlproperty enumeration Text::textFormat
diff --git a/src/declarative/graphicsitems/qdeclarativetext_p.h b/src/declarative/graphicsitems/qdeclarativetext_p.h
index 4fd5e3a..00ce126 100644
--- a/src/declarative/graphicsitems/qdeclarativetext_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetext_p.h
@@ -69,7 +69,6 @@ class Q_DECLARATIVE_EXPORT QDeclarativeText : public QDeclarativeItem
Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign NOTIFY horizontalAlignmentChanged)
Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged)
Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged)
- Q_PROPERTY(bool wrap READ wrap WRITE setWrap NOTIFY wrapModeChanged)
Q_PROPERTY(TextFormat textFormat READ textFormat WRITE setTextFormat NOTIFY textFormatChanged)
Q_PROPERTY(TextElideMode elide READ elideMode WRITE setElideMode NOTIFY elideModeChanged) //### elideMode?
@@ -123,8 +122,6 @@ public:
VAlignment vAlign() const;
void setVAlign(VAlignment align);
- bool wrap() const;
- void setWrap(bool w);
WrapMode wrapMode() const;
void setWrapMode(WrapMode w);
diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
index 77fb459..25eaef6 100644
--- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
@@ -495,19 +495,6 @@ void QDeclarativeTextEdit::setWrapMode(WrapMode mode)
emit wrapModeChanged();
}
-bool QDeclarativeTextEdit::wrap() const
-{
- Q_D(const QDeclarativeTextEdit);
- return d->wrapMode != QDeclarativeTextEdit::NoWrap;
-}
-
-void QDeclarativeTextEdit::setWrap(bool w)
-{
-
- qmlInfo(this) << "\"wrap\" property is deprecated and will soon be removed. Use wrapMode";
- setWrapMode(w ? WordWrap : NoWrap);
-}
-
/*!
\qmlproperty bool TextEdit::cursorVisible
If true the text edit shows a cursor.
diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h
index 605b620..474de09 100644
--- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h
@@ -73,7 +73,6 @@ class Q_DECLARATIVE_EXPORT QDeclarativeTextEdit : public QDeclarativePaintedItem
Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign NOTIFY horizontalAlignmentChanged)
Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged)
- Q_PROPERTY(bool wrap READ wrap WRITE setWrap NOTIFY wrapChanged) //### deprecated
Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged)
Q_PROPERTY(TextFormat textFormat READ textFormat WRITE setTextFormat NOTIFY textFormatChanged)
Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged)
@@ -139,8 +138,6 @@ public:
VAlignment vAlign() const;
void setVAlign(VAlignment align);
- bool wrap() const;
- void setWrap(bool w);
WrapMode wrapMode() const;
void setWrapMode(WrapMode w);
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
index 7fa8cc4..e2d8bc7 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
@@ -198,7 +198,7 @@ QVariant QDeclarativeVisualItemModel::evaluate(int index, const QString &express
QDeclarativeContext *ctxt = new QDeclarativeContext(ccontext);
ctxt->setContextObject(d->children.at(index));
QDeclarativeExpression e(ctxt, expression, objectContext);
- QVariant value = e.value();
+ QVariant value = e.evaluate();
delete ctxt;
return value;
}
@@ -1138,7 +1138,7 @@ QVariant QDeclarativeVisualDataModel::evaluate(int index, const QString &express
QDeclarativeItem *item = qobject_cast<QDeclarativeItem *>(nobj);
if (item) {
QDeclarativeExpression e(qmlContext(item), expression, objectContext);
- value = e.value();
+ value = e.evaluate();
}
} else {
QDeclarativeContext *ccontext = d->m_context;
@@ -1147,7 +1147,7 @@ QVariant QDeclarativeVisualDataModel::evaluate(int index, const QString &express
QDeclarativeVisualDataModelData *data = new QDeclarativeVisualDataModelData(index, this);
ctxt->setContextObject(data);
QDeclarativeExpression e(ctxt, expression, objectContext);
- value = e.value();
+ value = e.evaluate();
delete data;
delete ctxt;
}
diff --git a/src/declarative/qml/qdeclarativeboundsignal.cpp b/src/declarative/qml/qdeclarativeboundsignal.cpp
index 00a93cc..89f1256 100644
--- a/src/declarative/qml/qdeclarativeboundsignal.cpp
+++ b/src/declarative/qml/qdeclarativeboundsignal.cpp
@@ -95,10 +95,8 @@ QDeclarativeAbstractBoundSignal::~QDeclarativeAbstractBoundSignal()
QDeclarativeBoundSignal::QDeclarativeBoundSignal(QObject *scope, const QMetaMethod &signal,
QObject *parent)
-: m_expression(0), m_signal(signal), m_paramsValid(false), m_params(0)
+: m_expression(0), m_signal(signal), m_paramsValid(false), m_isEvaluating(false), m_params(0)
{
- // A cached evaluation of the QDeclarativeExpression::value() slot index.
- //
// This is thread safe. Although it may be updated by two threads, they
// will both set it to the same value - so the worst thing that can happen
// is that they both do the work to figure it out. Boo hoo.
@@ -111,10 +109,8 @@ QDeclarativeBoundSignal::QDeclarativeBoundSignal(QObject *scope, const QMetaMeth
QDeclarativeBoundSignal::QDeclarativeBoundSignal(QDeclarativeContext *ctxt, const QString &val,
QObject *scope, const QMetaMethod &signal,
QObject *parent)
-: m_expression(0), m_signal(signal), m_paramsValid(false), m_params(0)
+: m_expression(0), m_signal(signal), m_paramsValid(false), m_isEvaluating(false), m_params(0)
{
- // A cached evaluation of the QDeclarativeExpression::value() slot index.
- //
// This is thread safe. Although it may be updated by two threads, they
// will both set it to the same value - so the worst thing that can happen
// is that they both do the work to figure it out. Boo hoo.
@@ -169,6 +165,7 @@ QDeclarativeBoundSignal *QDeclarativeBoundSignal::cast(QObject *o)
int QDeclarativeBoundSignal::qt_metacall(QMetaObject::Call c, int id, void **a)
{
if (c == QMetaObject::InvokeMetaMethod && id == evaluateIdx) {
+ m_isEvaluating = true;
if (!m_paramsValid) {
if (!m_signal.parameterTypes().isEmpty())
m_params = new QDeclarativeBoundSignalParameters(m_signal, this);
@@ -182,6 +179,7 @@ int QDeclarativeBoundSignal::qt_metacall(QMetaObject::Call c, int id, void **a)
QDeclarativeEnginePrivate::warning(m_expression->engine(), m_expression->error());
}
if (m_params) m_params->clearValues();
+ m_isEvaluating = false;
return -1;
} else {
return QObject::qt_metacall(c, id, a);
diff --git a/src/declarative/qml/qdeclarativeboundsignal_p.h b/src/declarative/qml/qdeclarativeboundsignal_p.h
index bba4eec..06900d7 100644
--- a/src/declarative/qml/qdeclarativeboundsignal_p.h
+++ b/src/declarative/qml/qdeclarativeboundsignal_p.h
@@ -83,6 +83,8 @@ public:
QDeclarativeExpression *expression() const;
QDeclarativeExpression *setExpression(QDeclarativeExpression *);
+ bool isEvaluating() const { return m_isEvaluating; }
+
static QDeclarativeBoundSignal *cast(QObject *);
protected:
@@ -91,7 +93,8 @@ protected:
private:
QDeclarativeExpression *m_expression;
QMetaMethod m_signal;
- bool m_paramsValid;
+ bool m_paramsValid : 1;
+ bool m_isEvaluating : 1;
QDeclarativeBoundSignalParameters *m_params;
};
diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp
index c86f089..161ce56 100644
--- a/src/declarative/qml/qdeclarativecomponent.cpp
+++ b/src/declarative/qml/qdeclarativecomponent.cpp
@@ -67,14 +67,14 @@ int statusId = qRegisterMetaType<QDeclarativeComponent::Status>("QDeclarativeCom
/*!
\class QDeclarativeComponent
- \since 4.7
+ \since 4.7
\brief The QDeclarativeComponent class encapsulates a QML component description.
\mainclass
*/
/*!
\qmlclass Component QDeclarativeComponent
- \since 4.7
+ \since 4.7
\brief The Component element encapsulates a QML component description.
Components are reusable, encapsulated Qml element with a well-defined interface.
@@ -86,26 +86,26 @@ int statusId = qRegisterMetaType<QDeclarativeComponent::Status>("QDeclarativeCom
file containing it.
\qml
-Item {
- Component {
- id: redSquare
- Rectangle {
- color: "red"
- width: 10
- height: 10
+ Item {
+ Component {
+ id: redSquare
+ Rectangle {
+ color: "red"
+ width: 10
+ height: 10
+ }
}
+ Loader { sourceComponent: redSquare }
+ Loader { sourceComponent: redSquare; x: 20 }
}
- Loader { sourceComponent: redSquare }
- Loader { sourceComponent: redSquare; x: 20 }
-}
\endqml
+*/
- \section1 Attached Properties
-
- \e onCompleted
+/*!
+ \qmlattachedsignal Component::onCompleted()
Emitted after component "startup" has completed. This can be used to
- execute script code at startup, once the full QML environment has been
+ execute script code at startup, once the full QML environment has been
established.
The \c {Component::onCompleted} attached property can be applied to
@@ -120,8 +120,10 @@ Item {
}
}
\endqml
+*/
- \e onDestruction
+/*!
+ \qmlattachedsignal Component::onDestruction()
Emitted as the component begins destruction. This can be used to undo
work done in the onCompleted signal, or other imperative code in your
@@ -129,7 +131,7 @@ Item {
The \c {Component::onDestruction} attached property can be applied to
any element. However, it applies to the destruction of the component as
- a whole, and not the destruction of the specific object. The order of
+ a whole, and not the destruction of the specific object. The order of
running the \c onDestruction scripts is undefined.
\qml
@@ -150,7 +152,7 @@ Item {
\value Null This QDeclarativeComponent has no data. Call loadUrl() or setData() to add QML content.
\value Ready This QDeclarativeComponent is ready and create() may be called.
\value Loading This QDeclarativeComponent is loading network data.
- \value Error An error has occured. Calling errorDescription() to retrieve a description.
+ \value Error An error has occured. Call errors() to retrieve a list of \{QDeclarativeError}{errors}.
*/
void QDeclarativeComponentPrivate::typeDataReady()
@@ -235,6 +237,18 @@ QDeclarativeComponent::~QDeclarativeComponent()
}
/*!
+ \qmlproperty enumeration Component::status
+ This property holds the status of component loading. It can be one of:
+ \list
+ \o Null - no data is available for the component
+ \o Ready - the component has been loaded, and can be used to create instances.
+ \o Loading - the component is currently being loaded
+ \o Error - an error occurred while loading the component.
+ Calling errorsString() will provide a human-readable description of any errors.
+ \endlist
+ */
+
+/*!
\property QDeclarativeComponent::status
The component's current \l{QDeclarativeComponent::Status} {status}.
*/
@@ -253,6 +267,14 @@ QDeclarativeComponent::Status QDeclarativeComponent::status() const
}
/*!
+ \qmlproperty bool Component::isNull
+
+ Is true if the component is in the Null state, false otherwise.
+
+ Equivalent to status == Component.Null.
+*/
+
+/*!
\property QDeclarativeComponent::isNull
Is true if the component is in the Null state, false otherwise.
@@ -265,6 +287,14 @@ bool QDeclarativeComponent::isNull() const
}
/*!
+ \qmlproperty bool Component::isReady
+
+ Is true if the component is in the Ready state, false otherwise.
+
+ Equivalent to status == Component.Ready.
+*/
+
+/*!
\property QDeclarativeComponent::isReady
Is true if the component is in the Ready state, false otherwise.
@@ -277,6 +307,16 @@ bool QDeclarativeComponent::isReady() const
}
/*!
+ \qmlproperty bool Component::isError
+
+ Is true if the component is in the Error state, false otherwise.
+
+ Equivalent to status == Component.Error.
+
+ Calling errorsString() will provide a human-readable description of any errors.
+*/
+
+/*!
\property QDeclarativeComponent::isError
Is true if the component is in the Error state, false otherwise.
@@ -289,6 +329,14 @@ bool QDeclarativeComponent::isError() const
}
/*!
+ \qmlproperty bool Component::isLoading
+
+ Is true if the component is in the Loading state, false otherwise.
+
+ Equivalent to status == Component::Loading.
+*/
+
+/*!
\property QDeclarativeComponent::isLoading
Is true if the component is in the Loading state, false otherwise.
@@ -301,6 +349,12 @@ bool QDeclarativeComponent::isLoading() const
}
/*!
+ \qmlproperty real Component::progress
+ The progress of loading the component, from 0.0 (nothing loaded)
+ to 1.0 (finished).
+*/
+
+/*!
\property QDeclarativeComponent::progress
The progress of loading the component, from 0.0 (nothing loaded)
to 1.0 (finished).
@@ -486,6 +540,17 @@ QList<QDeclarativeError> QDeclarativeComponent::errors() const
}
/*!
+ \qmlmethod string Component::errorsString()
+
+ Returns a human-readable description of any errors.
+
+ The string includes the file, location, and description of each error.
+ If multiple errors are present they are separated by a newline character.
+
+ If no errors are present, an empty string is returned.
+*/
+
+/*!
\internal
errorsString is only meant as a way to get the errors in script
*/
@@ -504,6 +569,11 @@ QString QDeclarativeComponent::errorsString() const
}
/*!
+ \qmlproperty url Component::url
+ The component URL. This is the URL that was used to construct the component.
+*/
+
+/*!
\property QDeclarativeComponent::url
The component URL. This is the URL passed to either the constructor,
or the loadUrl() or setData() methods.
@@ -523,6 +593,13 @@ QDeclarativeComponent::QDeclarativeComponent(QDeclarativeComponentPrivate &dd, Q
}
/*!
+ \qmlmethod object Component::createObject()
+ Returns an object instance from this component, or null if object creation fails.
+
+ The object will be created in the same context as the component was created in.
+*/
+
+/*!
\internal
A version of create which returns a scriptObject, for use in script
*/
@@ -531,10 +608,10 @@ QScriptValue QDeclarativeComponent::createObject()
Q_D(QDeclarativeComponent);
QDeclarativeContext* ctxt = creationContext();
if(!ctxt)
- return QScriptValue();
+ return QScriptValue(QScriptValue::NullValue);
QObject* ret = create(ctxt);
if (!ret)
- return QScriptValue();
+ return QScriptValue(QScriptValue::NullValue);
QDeclarativeEnginePrivate *priv = QDeclarativeEnginePrivate::get(d->engine);
QDeclarativeData::get(ret, true)->setImplicitDestructible();
return priv->objectClass->newQObject(ret, QMetaType::QObjectStar);
diff --git a/src/declarative/qml/qdeclarativecomponent.h b/src/declarative/qml/qdeclarativecomponent.h
index 526a319..f3cfe3c 100644
--- a/src/declarative/qml/qdeclarativecomponent.h
+++ b/src/declarative/qml/qdeclarativecomponent.h
@@ -117,6 +117,7 @@ protected:
private:
QDeclarativeComponent(QDeclarativeEngine *, QDeclarativeCompiledData *, int, int, QObject *parent);
+ Q_DISABLE_COPY(QDeclarativeComponent)
friend class QDeclarativeVME;
friend class QDeclarativeCompositeTypeData;
};
diff --git a/src/declarative/qml/qdeclarativecontext.h b/src/declarative/qml/qdeclarativecontext.h
index 94c9f4a..548869c 100644
--- a/src/declarative/qml/qdeclarativecontext.h
+++ b/src/declarative/qml/qdeclarativecontext.h
@@ -103,6 +103,7 @@ private:
friend class QDeclarativeContextData;
QDeclarativeContext(QDeclarativeContextData *);
QDeclarativeContext(QDeclarativeEngine *, bool);
+ Q_DISABLE_COPY(QDeclarativeContext)
};
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativeengine.h b/src/declarative/qml/qdeclarativeengine.h
index e161cd9..01487f5 100644
--- a/src/declarative/qml/qdeclarativeengine.h
+++ b/src/declarative/qml/qdeclarativeengine.h
@@ -118,6 +118,7 @@ Q_SIGNALS:
void warnings(const QList<QDeclarativeError> &warnings);
private:
+ Q_DISABLE_COPY(QDeclarativeEngine)
Q_DECLARE_PRIVATE(QDeclarativeEngine)
};
diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp
index 264fd8d..69e42f8 100644
--- a/src/declarative/qml/qdeclarativeenginedebug.cpp
+++ b/src/declarative/qml/qdeclarativeenginedebug.cpp
@@ -416,7 +416,7 @@ void QDeclarativeEngineDebugServer::messageReceived(const QByteArray &message)
if (object && context) {
QDeclarativeExpression exprObj(context, expr, object);
bool undefined = false;
- QVariant value = exprObj.value(&undefined);
+ QVariant value = exprObj.evaluate(&undefined);
if (undefined)
result = QLatin1String("<undefined>");
else
diff --git a/src/declarative/qml/qdeclarativeexpression.cpp b/src/declarative/qml/qdeclarativeexpression.cpp
index 8b5a62f..f561a7e 100644
--- a/src/declarative/qml/qdeclarativeexpression.cpp
+++ b/src/declarative/qml/qdeclarativeexpression.cpp
@@ -479,18 +479,18 @@ QVariant QDeclarativeExpressionPrivate::value(QObject *secondaryScope, bool *isU
}
/*!
- Returns the value of the expression, or an invalid QVariant if the
- expression is invalid or has an error.
+ Evaulates the expression, returning the result of the evaluation,
+ or an invalid QVariant if the expression is invalid or has an error.
- \a isUndefined is set to true if the expression resulted in an
+ \a valueIsUndefined is set to true if the expression resulted in an
undefined value.
\sa hasError(), error()
*/
-QVariant QDeclarativeExpression::value(bool *isUndefined)
+QVariant QDeclarativeExpression::evaluate(bool *valueIsUndefined)
{
Q_D(QDeclarativeExpression);
- return d->value(0, isUndefined);
+ return d->value(0, valueIsUndefined);
}
/*!
@@ -569,7 +569,7 @@ QObject *QDeclarativeExpression::scopeObject() const
}
/*!
- Returns true if the last call to value() resulted in an error,
+ Returns true if the last call to evaluate() resulted in an error,
otherwise false.
\sa error(), clearError()
@@ -593,7 +593,7 @@ void QDeclarativeExpression::clearError()
}
/*!
- Return any error from the last call to value(). If there was no error,
+ Return any error from the last call to evaluate(). If there was no error,
this returns an invalid QDeclarativeError instance.
\sa hasError(), clearError()
@@ -606,10 +606,9 @@ QDeclarativeError QDeclarativeExpression::error() const
}
/*! \internal */
-void QDeclarativeExpression::__q_notify()
+void QDeclarativeExpressionPrivate::_q_notify()
{
- Q_D(QDeclarativeExpression);
- d->emitValueChanged();
+ emitValueChanged();
}
void QDeclarativeExpressionPrivate::clearGuards()
@@ -625,7 +624,7 @@ void QDeclarativeExpressionPrivate::updateGuards(const QPODVector<QDeclarativeEn
static int notifyIdx = -1;
if (notifyIdx == -1)
- notifyIdx = QDeclarativeExpression::staticMetaObject.indexOfMethod("__q_notify()");
+ notifyIdx = QDeclarativeExpression::staticMetaObject.indexOfMethod("_q_notify()");
if (properties.count() != data->guardListLength) {
QDeclarativeNotifierEndpoint *newGuardList =
@@ -711,7 +710,7 @@ void QDeclarativeExpressionPrivate::updateGuards(const QPODVector<QDeclarativeEn
Emitted each time the expression value changes from the last time it was
evaluated. The expression must have been evaluated at least once (by
- calling QDeclarativeExpression::value()) before this signal will be emitted.
+ calling QDeclarativeExpression::evaluate()) before this signal will be emitted.
*/
void QDeclarativeExpressionPrivate::emitValueChanged()
@@ -771,3 +770,4 @@ bool QDeclarativeAbstractExpression::isValid() const
QT_END_NAMESPACE
+#include <moc_qdeclarativeexpression.cpp>
diff --git a/src/declarative/qml/qdeclarativeexpression.h b/src/declarative/qml/qdeclarativeexpression.h
index 35d6949..6c72e4d 100644
--- a/src/declarative/qml/qdeclarativeexpression.h
+++ b/src/declarative/qml/qdeclarativeexpression.h
@@ -86,7 +86,7 @@ public:
void clearError();
QDeclarativeError error() const;
- QVariant value(bool *isUndefined = 0);
+ QVariant evaluate(bool *valueIsUndefined = 0);
Q_SIGNALS:
void valueChanged();
@@ -97,13 +97,12 @@ protected:
QDeclarativeExpression(QDeclarativeContextData *, void *, QDeclarativeRefCount *rc,
QObject *me, const QString &, int, QDeclarativeExpressionPrivate &dd);
-private Q_SLOTS:
- void __q_notify();
-
private:
QDeclarativeExpression(QDeclarativeContextData *, const QString &, QObject *);
+ Q_DISABLE_COPY(QDeclarativeExpression)
Q_DECLARE_PRIVATE(QDeclarativeExpression)
+ Q_PRIVATE_SLOT(d_func(), void _q_notify())
friend class QDeclarativeDebugger;
friend class QDeclarativeContext;
friend class QDeclarativeVME;
diff --git a/src/declarative/qml/qdeclarativeexpression_p.h b/src/declarative/qml/qdeclarativeexpression_p.h
index d39aa2c..4ff3162 100644
--- a/src/declarative/qml/qdeclarativeexpression_p.h
+++ b/src/declarative/qml/qdeclarativeexpression_p.h
@@ -164,6 +164,7 @@ public:
return expr->q_func();
}
+ void _q_notify();
virtual void emitValueChanged();
static void exceptionToError(QScriptEngine *, QDeclarativeError &);
diff --git a/src/declarative/qml/qdeclarativeextensionplugin.h b/src/declarative/qml/qdeclarativeextensionplugin.h
index 8095ec7..8a9378a 100644
--- a/src/declarative/qml/qdeclarativeextensionplugin.h
+++ b/src/declarative/qml/qdeclarativeextensionplugin.h
@@ -64,6 +64,9 @@ public:
virtual void registerTypes(const char *uri) = 0;
virtual void initializeEngine(QDeclarativeEngine *engine, const char *uri);
+
+private:
+ Q_DISABLE_COPY(QDeclarativeExtensionPlugin)
};
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativewatcher.cpp b/src/declarative/qml/qdeclarativewatcher.cpp
index 9ea84b8..842b3c4 100644
--- a/src/declarative/qml/qdeclarativewatcher.cpp
+++ b/src/declarative/qml/qdeclarativewatcher.cpp
@@ -110,7 +110,7 @@ void QDeclarativeWatchProxy::notifyValueChanged()
{
QVariant v;
if (m_expr)
- v = m_expr->value();
+ v = m_expr->evaluate();
else
v = m_property.read(m_object);
diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp
index 4f7719b..3b0d264 100644
--- a/src/declarative/util/qdeclarativeanimation.cpp
+++ b/src/declarative/util/qdeclarativeanimation.cpp
@@ -780,7 +780,7 @@ void QDeclarativeScriptActionPrivate::execute()
QDeclarativeData *ddata = QDeclarativeData::get(q);
if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
- expr.value();
+ expr.evaluate();
if (expr.hasError())
qmlInfo(q) << expr.error();
}
diff --git a/src/declarative/util/qdeclarativeconnections.cpp b/src/declarative/util/qdeclarativeconnections.cpp
index 596b306..c188521 100644
--- a/src/declarative/util/qdeclarativeconnections.cpp
+++ b/src/declarative/util/qdeclarativeconnections.cpp
@@ -150,8 +150,14 @@ void QDeclarativeConnections::setTarget(QObject *obj)
Q_D(QDeclarativeConnections);
if (d->target == obj)
return;
- foreach (QDeclarativeBoundSignal *s, d->boundsignals)
- delete s;
+ foreach (QDeclarativeBoundSignal *s, d->boundsignals) {
+ // It is possible that target is being changed due to one of our signal
+ // handlers -> use deleteLater().
+ if (s->isEvaluating())
+ s->deleteLater();
+ else
+ delete s;
+ }
d->boundsignals.clear();
d->target = obj;
connectSignals();
diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp
index 8a6937d..2641dcf 100644
--- a/src/declarative/util/qdeclarativepropertychanges.cpp
+++ b/src/declarative/util/qdeclarativepropertychanges.cpp
@@ -434,7 +434,7 @@ QDeclarativePropertyChanges::ActionList QDeclarativePropertyChanges::actions()
a.specifiedProperty = QString::fromUtf8(property);
if (d->isExplicit) {
- a.toValue = d->expressions.at(ii).second->value();
+ a.toValue = d->expressions.at(ii).second->evaluate();
} else {
QDeclarativeBinding *newBinding =
new QDeclarativeBinding(d->expressions.at(ii).second->expression(), object(), qmlContext(this));
diff --git a/src/declarative/util/qdeclarativestategroup.cpp b/src/declarative/util/qdeclarativestategroup.cpp
index 81f4230..2349ce1 100644
--- a/src/declarative/util/qdeclarativestategroup.cpp
+++ b/src/declarative/util/qdeclarativestategroup.cpp
@@ -288,7 +288,7 @@ bool QDeclarativeStateGroupPrivate::updateAutoState()
QDeclarativeState *state = states.at(ii);
if (state->isWhenKnown()) {
if (!state->name().isEmpty()) {
- if (state->when() && state->when()->value().toBool()) {
+ if (state->when() && state->when()->evaluate().toBool()) {
if (stateChangeDebug())
qWarning() << "Setting auto state due to:"
<< state->when()->expression();
diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp
index 0aad498..9049b83 100644
--- a/src/declarative/util/qdeclarativestateoperations.cpp
+++ b/src/declarative/util/qdeclarativestateoperations.cpp
@@ -579,7 +579,7 @@ void QDeclarativeStateChangeScript::execute(Reason)
QDeclarativeData *ddata = QDeclarativeData::get(this);
if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
- expr.value();
+ expr.evaluate();
if (expr.hasError())
qmlInfo(this, expr.error());
}
diff --git a/src/declarative/util/qdeclarativeview.h b/src/declarative/util/qdeclarativeview.h
index 1807758..3513c04 100644
--- a/src/declarative/util/qdeclarativeview.h
+++ b/src/declarative/util/qdeclarativeview.h
@@ -105,8 +105,10 @@ protected:
virtual void setRootObject(QObject *obj);
virtual bool eventFilter(QObject *watched, QEvent *e);
+private:
friend class QDeclarativeViewPrivate;
QDeclarativeViewPrivate *d;
+ Q_DISABLE_COPY(QDeclarativeView)
};
QT_END_NAMESPACE
diff --git a/tests/auto/declarative/qdeclarativeconnection/data/connection-targetchange.qml b/tests/auto/declarative/qdeclarativeconnection/data/connection-targetchange.qml
new file mode 100644
index 0000000..bb9a3bc
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeconnection/data/connection-targetchange.qml
@@ -0,0 +1,25 @@
+import Qt 4.7
+
+Item {
+ Component {
+ id: item1
+ Item {
+ objectName: "item1"
+ }
+ }
+ Component {
+ id: item2
+ Item {
+ objectName: "item2"
+ }
+ }
+ Loader {
+ id: loader
+ sourceComponent: item1
+ }
+ Connections {
+ objectName: "connections"
+ target: loader.item
+ onWidthChanged: loader.sourceComponent = item2
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp b/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp
index f4914e1..0efae3b 100644
--- a/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp
+++ b/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp
@@ -58,6 +58,7 @@ private slots:
void properties();
void connection();
void trimming();
+ void targetChanged();
private:
QDeclarativeEngine engine;
@@ -130,6 +131,31 @@ void tst_qdeclarativeconnection::trimming()
delete item;
}
+// Confirm that target can be changed by one of our signal handlers
+void tst_qdeclarativeconnection::targetChanged()
+{
+ QDeclarativeEngine engine;
+ QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/connection-targetchange.qml"));
+ QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(c.create());
+ QVERIFY(item != 0);
+
+ QDeclarativeConnections *connections = item->findChild<QDeclarativeConnections*>("connections");
+ QVERIFY(connections);
+
+ QDeclarativeItem *item1 = item->findChild<QDeclarativeItem*>("item1");
+ QVERIFY(item1);
+
+ item1->setWidth(200);
+
+ QDeclarativeItem *item2 = item->findChild<QDeclarativeItem*>("item2");
+ QVERIFY(item2);
+ QVERIFY(connections->target() == item2);
+
+ // If we don't crash then we're OK
+
+ delete item;
+}
+
QTEST_MAIN(tst_qdeclarativeconnection)
#include "tst_qdeclarativeconnection.moc"
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 6939290..97fced4 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -381,7 +381,7 @@ void tst_qdeclarativeecmascript::basicExpressions()
nestedContext.setContextProperty("millipedeLegs", QVariant(100));
MyExpression expr(nest?&nestedContext:&context, expression);
- QCOMPARE(expr.value(), result);
+ QCOMPARE(expr.evaluate(), result);
}
void tst_qdeclarativeecmascript::arrayExpressions()
@@ -396,7 +396,7 @@ void tst_qdeclarativeecmascript::arrayExpressions()
context.setContextProperty("c", &obj3);
MyExpression expr(&context, "[a, b, c, 10]");
- QVariant result = expr.value();
+ QVariant result = expr.evaluate();
QCOMPARE(result.userType(), qMetaTypeId<QList<QObject *> >());
QList<QObject *> list = qvariant_cast<QList<QObject *> >(result);
QCOMPARE(list.count(), 4);
@@ -424,47 +424,47 @@ void tst_qdeclarativeecmascript::contextPropertiesTriggerReeval()
{
MyExpression expr(&context, "testProp + 1");
QCOMPARE(expr.changed, false);
- QCOMPARE(expr.value(), QVariant(2));
+ QCOMPARE(expr.evaluate(), QVariant(2));
context.setContextProperty("testProp", QVariant(2));
QCOMPARE(expr.changed, true);
- QCOMPARE(expr.value(), QVariant(3));
+ QCOMPARE(expr.evaluate(), QVariant(3));
}
{
MyExpression expr(&context, "testProp + testProp + testProp");
QCOMPARE(expr.changed, false);
- QCOMPARE(expr.value(), QVariant(6));
+ QCOMPARE(expr.evaluate(), QVariant(6));
context.setContextProperty("testProp", QVariant(4));
QCOMPARE(expr.changed, true);
- QCOMPARE(expr.value(), QVariant(12));
+ QCOMPARE(expr.evaluate(), QVariant(12));
}
{
MyExpression expr(&context, "testObj.stringProperty");
QCOMPARE(expr.changed, false);
- QCOMPARE(expr.value(), QVariant("Hello"));
+ QCOMPARE(expr.evaluate(), QVariant("Hello"));
context.setContextProperty("testObj", &object2);
QCOMPARE(expr.changed, true);
- QCOMPARE(expr.value(), QVariant("World"));
+ QCOMPARE(expr.evaluate(), QVariant("World"));
}
{
MyExpression expr(&context, "testObj.stringProperty /**/");
QCOMPARE(expr.changed, false);
- QCOMPARE(expr.value(), QVariant("World"));
+ QCOMPARE(expr.evaluate(), QVariant("World"));
context.setContextProperty("testObj", &object1);
QCOMPARE(expr.changed, true);
- QCOMPARE(expr.value(), QVariant("Hello"));
+ QCOMPARE(expr.evaluate(), QVariant("Hello"));
}
{
MyExpression expr(&context, "testObj2");
QCOMPARE(expr.changed, false);
- QCOMPARE(expr.value(), QVariant::fromValue((QObject *)object3));
+ QCOMPARE(expr.evaluate(), QVariant::fromValue((QObject *)object3));
}
}
@@ -484,42 +484,42 @@ void tst_qdeclarativeecmascript::objectPropertiesTriggerReeval()
{
MyExpression expr(&context, "testObj.stringProperty");
QCOMPARE(expr.changed, false);
- QCOMPARE(expr.value(), QVariant("Hello"));
+ QCOMPARE(expr.evaluate(), QVariant("Hello"));
object1.setStringProperty(QLatin1String("World"));
QCOMPARE(expr.changed, true);
- QCOMPARE(expr.value(), QVariant("World"));
+ QCOMPARE(expr.evaluate(), QVariant("World"));
}
{
MyExpression expr(&context, "testObj.objectProperty.stringProperty");
QCOMPARE(expr.changed, false);
- QCOMPARE(expr.value(), QVariant());
+ QCOMPARE(expr.evaluate(), QVariant());
object1.setObjectProperty(&object2);
QCOMPARE(expr.changed, true);
expr.changed = false;
- QCOMPARE(expr.value(), QVariant("Dog"));
+ QCOMPARE(expr.evaluate(), QVariant("Dog"));
object1.setObjectProperty(&object3);
QCOMPARE(expr.changed, true);
expr.changed = false;
- QCOMPARE(expr.value(), QVariant("Cat"));
+ QCOMPARE(expr.evaluate(), QVariant("Cat"));
object1.setObjectProperty(0);
QCOMPARE(expr.changed, true);
expr.changed = false;
- QCOMPARE(expr.value(), QVariant());
+ QCOMPARE(expr.evaluate(), QVariant());
object1.setObjectProperty(&object3);
QCOMPARE(expr.changed, true);
expr.changed = false;
- QCOMPARE(expr.value(), QVariant("Cat"));
+ QCOMPARE(expr.evaluate(), QVariant("Cat"));
object3.setStringProperty("Donkey");
QCOMPARE(expr.changed, true);
expr.changed = false;
- QCOMPARE(expr.value(), QVariant("Donkey"));
+ QCOMPARE(expr.evaluate(), QVariant("Donkey"));
}
}
diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
index 73aefaf..e0143a6 100644
--- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
+++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
@@ -401,7 +401,7 @@ T *tst_qdeclarativeimage::findItem(QGraphicsObject *parent, const QString &objec
if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) {
if (index != -1) {
QDeclarativeExpression e(qmlContext(item), "index", item);
- if (e.value().toInt() == index)
+ if (e.evaluate().toInt() == index)
return static_cast<T*>(item);
} else {
return static_cast<T*>(item);
diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
index e4c296f..ec97461 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
@@ -279,7 +279,7 @@ void tst_qdeclarativelistmodel::dynamic()
if (!warning.isEmpty())
QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
- int actual = e.value().toInt();
+ int actual = e.evaluate().toInt();
if (e.hasError())
qDebug() << e.error(); // errors not expected
QVERIFY(!e.hasError());
@@ -338,9 +338,9 @@ void tst_qdeclarativelistmodel::dynamic_worker()
QDeclarativeExpression e(eng.rootContext(), operations.last().toString(), &model);
if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
- QVERIFY(e.value().toInt() != result);
+ QVERIFY(e.evaluate().toInt() != result);
else
- QCOMPARE(e.value().toInt(), result);
+ QCOMPARE(e.evaluate().toInt(), result);
}
delete item;
diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
index 6b7a361..cab4d52 100644
--- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
+++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
@@ -1551,7 +1551,7 @@ T *tst_QDeclarativeListView::findItem(QGraphicsObject *parent, const QString &ob
if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) {
if (index != -1) {
QDeclarativeExpression e(qmlContext(item), "index", item);
- if (e.value().toInt() == index)
+ if (e.evaluate().toInt() == index)
return static_cast<T*>(item);
} else {
return static_cast<T*>(item);
diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
index df7c511..0e3a74d 100644
--- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
+++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
@@ -697,7 +697,7 @@ T *tst_QDeclarativePathView::findItem(QGraphicsObject *parent, const QString &ob
if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) {
if (index != -1) {
QDeclarativeExpression e(qmlContext(item), "index", item);
- if (e.value().toInt() == index)
+ if (e.evaluate().toInt() == index)
return static_cast<T*>(item);
} else {
return static_cast<T*>(item);
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png
index 80cbd26..bb9dfbb 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml
index a4036fe..b293d70 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml
@@ -6,334 +6,334 @@ VisualTest {
}
Frame {
msec: 16
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 32
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 48
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 64
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 80
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 96
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 112
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 128
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 144
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 160
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 176
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 192
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 208
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 224
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 240
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 256
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 272
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 288
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 304
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 320
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 336
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 352
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 368
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 384
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 400
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 416
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 432
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 448
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 464
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 480
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 496
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 512
- hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ hash: "b72bfb206ae52e0e4fb8927b82d64b64"
}
Frame {
msec: 528
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 544
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 560
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 576
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 592
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 608
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 624
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 640
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 656
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 672
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 688
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 704
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 720
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 736
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 752
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 768
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 784
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 800
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 816
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 832
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 848
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 864
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 880
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 896
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 912
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 928
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 944
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 960
- image: "repeater.0.png"
+ image: "usingRepeater.0.png"
}
Frame {
msec: 976
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 992
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1008
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1024
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1040
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1056
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1072
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1088
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1104
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1120
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1136
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1152
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1168
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1184
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1200
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1216
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1232
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1248
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1264
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1280
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1296
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1312
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
Frame {
msec: 1328
- hash: "53a01771047c8ec806a335a1a3d6af71"
+ hash: "f2de1f70c5f242604beb4ee0251c8032"
}
}