summaryrefslogtreecommitdiffstats
path: root/src/declarative/QmlChanges.txt
blob: d5910e33a06b52a6bb7f0ff1a7ee06ff0f7dcce2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
=============================================================================
The changes below are pre Qt 4.7.0 beta

TextEdit: wrap property is replaced by wrapMode enumeration.
Text: wrap property is replaced by wrapMode enumeration.
Removed Q-prefix from validators (IntValidator, DoubleValidator, and RegExpValidator)
PathView: offset property now uses range 0-1.0 rather than 0-100
ListView, GridView::positionViewAtIndex() gained a 'mode' parameter
Removed Qt.playSound (replaced by SoundEffect element)
Removed Qt.closestAngle (use RotationAnimation instead)
Removed NumberFormatter
Removed DateTimeFormatter (use Qt.formatDateTime() instead)
Using WebView now requires "import org.webkit 1.0"
Using Particles now requires "import Qt.labs.particles 1.0"
AnchorAnimation must now be used to animate anchor changes (and not NumberAnimation)
Removed ParentAction (use ParentAnimation instead)
ScriptAction: renamed stateChangeScriptName -> scriptName
Animation: replace repeat with loops (loops: Animation.Infinite gives the old repeat behavior)
AnchorChanges: use natural form to specify anchors (anchors.left instead of left)
AnchorChanges: removed reset property. (reset: "left" should now be anchors.left: undefined)
PathView: snapPosition replaced by preferredHighlightBegin, preferredHighlightEnd

C++ API
-------
QDeclarativeContext::addDefaultObject() has been replaced with
QDeclarativeContext::setContextObject()

Behavior and Animation syntax
-----------------------------
Previously animations and behaviors could be "assigned" to properties like this:
    Item { x: Behavior {}; y: NumberAnimation {} }
To make it more obvious that these are not regular value assignments a new "on"
syntax has been introduced:
    Item { Behavior on x {}; NumberAnimation on y {} }
Only the syntax has changed, the behavior is identical.

EaseFollow renamed to SmoothedFollow
---------------------------------------
This element shares the internal implementation with SmoothedAnimation,
both providing the same easing function, but with SmoothedFollow it's
easier to set a start value to animate intially and then start to follow,
while SmoothedAnimation is still convenient for using inside Behaviors
and Transitions.


Add SmoothedAnimation element
---------------------------------------
SmoothedAnimation inherits from NumberAnimaton and as a
consequence SmoothedAnimation can be used inside Behaviors,
as PropertySourceValues or in state transitions, like any other animation.

The old EaseFollow properties changed to comply with the other declarative
animations ('source' changed to 'to'), so now 'to' changes are not
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 } }
     }

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 }
    }

This is a syntax and behavior change.


Script element removed
----------------------
Inline Script{} blocks have been deprecated, and will soon be removed entirely.
If you used Script to write inline javascript code, it can simply be removed.
For example

Item {
    Script {
        function doSomething() {}
    }
}

becomes

Item {
    function doSomething() {}
}

If you used Script to include external JavaScript files, you can replace the
Script element with an “import” line.  For example

MouseArea {
    Script {
        source: “foo.js”
    }
    onClicked: foo()
}

becomes

import “foo.js” as Foo
MouseArea {
    onClicked: Foo.foo()
}

The “as” qualifier is mandatory for script imports (as opposed to type
imports where it is optional).


=============================================================================
The changes below are pre Qt 4.7.0 alpha

Flickable: renamed viewportWidth -> contentWidth
Flickable: renamed viewportHeight -> contentHeight
Flickable: renamed viewportX -> contentX
Flickable: renamed viewportY -> contentY
Removed Flickable.reportedVelocitySmoothing
Renamed MouseRegion -> MouseArea
Connection: syntax and rename:
    Connection { sender: a; signal: foo(); script: xxx }
    Connection { sender: a; signal: bar(); script: yyy }
  becomes:
    Connections { target: a; onFoo: xxx; onBar: yyy }

ListView::sectionExpression has been replaced by section.property, section.criteria

ListModel
---------
- types are strictly checked (previously, everything was a string)
 - foo: "bar"  continues to work as before
 - foo: bar  is now invalid, use  foo: "bar"
 - foo: true  is now a bool (not string "true")
 - foo: false  is now a bool (not string "false" == true!)

PropertyAnimation
------------------
matchProperties and matchTargets have been renamed back to properties and targets.
The semantics are explained in the PropertyAnimation::properties documentation
and the animation overview documentation.

Easing curves and their parameters are now specified via dot properties:
* easing.type : enum
* easing.amplitude : real
* easing.overshoot : real
* easing.period : real
For example:
PropertyAnimation { properties: "y"; easing.type: "InOutElastic"; easing.amplitude: 2.0; easing.period: 1.5 }

C++ API
-------
QML_DEFINE_... definition macros, previously global macros, are replaced by
qmlRegisterType registration functions, which must be called explicitly.
C++ API users should also consider using the QmlExtensionPlugin (previously
named QmlModulePlugin) as a cleaner mechanism for publishing libraries of QML
types, or the upcoming application plugin features of the qmlviewer /
qmlruntime / qml.

QmlView
-------
The API of QmlView has been narrowed and its role as a convenience class
reinforced.
- remove addItem()
- remove clearItems() - use 'delete root()'
- remove reset()
- resizeContent -> enum ResizeMode { SizeViewToRootObject, SizeRootObjectToView }
- remove setQml(), qml()
- rename setUrl(), ur() to setSource(), source()
- root() -> rootObject(),  returns QGraphicsObject rather than QmlGraphicsItem
- remove quit() signal -> use quit() signal of engine()
- initialSize() signal removed
- Added status() to determine status of the internal QmlComponent
- removed execute() - setSource() will also execute the QML.


=============================================================================
The changes below are pre-4.6.0 release.

QML API Review
==============

The QML API is being reviewed.  This file documents the changes.
Note that the changes are incremental, so a rename A->B for example may be followed
by another subsequent rename B->C, if later reviews override earlier reviews.

API Changes
===========

Renamed Elements:
LineEdit         -> TextInput
VerticalLayout   -> Column
HorizontalLayout -> Row
VerticalPositioner -> Column
HorizontalPositioner -> Row
GridLayout       -> Grid
GridPositioner   -> Grid
Rect             -> Rectangle
FocusRealm       -> FocusScope
FontFamily       -> FontLoader
Palette          -> SystemPalette
Bind             -> Binding
SetProperties    -> PropertyChanges
RunScript        -> StateChangeScript
SetAnchors       -> AnchorChanges
SetPropertyAction  -> PropertyAction
RunScriptAction    -> ScriptAction
ParentChangeAction -> ParentAction
VisualModel        -> VisualDataModel
Follow             -> SpringFollow

Renamed properties:
Item: contents         -> childrenRect
MouseRegion: xmin      -> minimumX
MouseRegion: xmax      -> maximumX
MouseRegion: ymin      -> minimumY
MouseRegion: ymin      -> maximumY
Text elements: hAlign  -> horizontalAlignment
Text elements: vAlign  -> verticalAlignment
Text elements: highlightColor -> selectionColor
Text elements: highlightedTextColor -> selectedTextColor
Text elements: preserveSelection -> persistentSelection
State: operations      -> changes
Transition: operations -> animations
Transition: fromState  -> from
Transition: toState    -> to
Follow: followValue    -> value
Flickable: xPosition   -> viewportX
Flickable: yPosition   -> viewportY
Flickable: xVelocity   -> horizontalVelocity
Flickable: yVelocity   -> verticalVelocity
Flickable: velocityDecay -> reportedVelocitySmoothing
Flickable: locked      -> interactive (note reversal of meaning)
Flickable: pageXPosition -> visibleArea.xPosition
Flickable: pageYPosition -> visibleArea.yPosition
Flickable: pageWidth    -> visibleArea.widthRatio
Flickable: pageHeight   -> visibleArea.heightRatio
WebView: idealWidth    -> preferredWidth
WebView: idealHeight   -> preferredHeight
WebView: status        -> statusText
WebView: mouseX        -> clickX (parameter to onDoubleClick)
WebView: mouseY        -> clickY (parameter to onDoubleClick)
WebView: cacheSize     -> pixelCacheSize
Repeater: component    -> delegate
Repeater: dataSource   -> model
ListView: current      -> currentItem
GridView: current      -> currentItem
ListView: wrap         -> keyNavigationWraps
ListView: autoHighlight -> highlightFollowsCurrentItem
GridView: wrap         -> keyNavigationWraps
GridView: autoHighlight -> highlightFollowsCurrentItem
Animation: targets -> matchTargets
Animation: properties -> matchProperties

Additions:
MouseRegion: add "acceptedButtons" property
MouseRegion: add "hoverEnabled" property
MouseRegion: add "pressedButtons" property
Timer: add start() and stop() slots
WebView: add newWindowComponent and newWindowParent properties
Loader: add status() and progress() properties
Loader: add sourceComponent property
Loader: add resizeMode property
ListView: preferredHighlightBegin, preferredHighlightEnd
ListView: strictlyEnforceHighlightRange
Particles: Added emissionRate, emissionVariance and burst()

Deletions:
Column/VerticalPositioner: lost "margins" property
Row/HorizontalPositioner: lost "margins" property
Grid/Positioner/Layout: lost "margins" property
WebView: lost "interactive" property (always true now)
Flickable: removed "dragMode" property
ComponentInstance: removed.  Replaced by Loader.sourceComponent
ListView: removed currentItemMode.  Replaced by highligh range.
ListView: removed snapPos.
Particles: removed streamIn. Replaced by emissionRate

Other Changes:
ids must be lowercase: Text { id: foo }, not Text { id: Foo }
Drag: axis becomes an enum with values "XAxis", "YAxis", "XandYAxis"
Image: scaleGrid property removed. New item called BorderImage instead.
KeyActions: changed to a Keys attached property on any item.
KeyProxy: changed to a Keys.forwardTo property on any item.
Script: now an intrinsic type in the language
 - cannot be assigned to properties
 - good: Item { Script { ... } }
 - bad:  Item { resources: Script { ... } }
Script: delay-loaded of the QML file until their source has been loaded (this only effects QML files loaded across the network.)
Scope: declared properties shadow a property of the same name (was previously the reverse)
ScriptAction and StateChangeScript: the script property now takes script rather than a string containing script (script: doSomething() rather than script: "doSomething()")
QmlGraphicsItem::transformOrigin default changed from TopLeft to Center
Animations used as PropertySourceValues are set to 'running: true' as default