summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demos/declarative/calculator/calculator.qmlproject16
-rw-r--r--demos/declarative/demos.qmlproject16
-rw-r--r--demos/declarative/flickr/common/LikeOMeter.qml35
-rw-r--r--demos/declarative/flickr/common/Loading.qml8
-rw-r--r--demos/declarative/flickr/common/RssModel.qml7
-rw-r--r--demos/declarative/flickr/common/Star.qml45
-rw-r--r--demos/declarative/flickr/common/pics/background.pngbin60504 -> 0 bytes
-rw-r--r--demos/declarative/flickr/common/pics/button-pressed.pngbin571 -> 0 bytes
-rw-r--r--demos/declarative/flickr/common/pics/button-pressed.sci5
-rw-r--r--demos/declarative/flickr/common/pics/button.pngbin564 -> 0 bytes
-rw-r--r--demos/declarative/flickr/common/pics/button.sci5
-rw-r--r--demos/declarative/flickr/common/pics/ghns_star.pngbin891 -> 0 bytes
-rw-r--r--demos/declarative/flickr/common/pics/loading.pngbin813 -> 0 bytes
-rw-r--r--demos/declarative/flickr/common/pics/reflection.pngbin4839 -> 0 bytes
-rw-r--r--demos/declarative/flickr/common/pics/shadow-bottom.pngbin656 -> 0 bytes
-rw-r--r--demos/declarative/flickr/common/pics/shadow-corner.pngbin405 -> 0 bytes
-rw-r--r--demos/declarative/flickr/common/pics/shadow-right-screen.pngbin227 -> 0 bytes
-rw-r--r--demos/declarative/flickr/common/pics/shadow-right.pngbin635 -> 0 bytes
-rw-r--r--demos/declarative/flickr/flickr.qml4
-rw-r--r--demos/declarative/flickr/flickr.qmlproject16
-rw-r--r--demos/declarative/minehunt/minehunt.qmlproject16
-rw-r--r--demos/declarative/photoviewer/photoviewer.qmlproject16
-rwxr-xr-xdemos/declarative/samegame/SamegameCore/samegame.js2
-rw-r--r--demos/declarative/samegame/samegame.qmlproject16
-rw-r--r--demos/declarative/snake/content/snake.js4
-rw-r--r--demos/declarative/snake/snake.qmlproject16
-rw-r--r--demos/declarative/twitter/twitter.qmlproject16
-rw-r--r--demos/declarative/webbrowser/webbrowser.qmlproject16
-rw-r--r--doc/src/declarative/advtutorial.qdoc22
-rw-r--r--doc/src/declarative/codingconventions.qdoc1
-rw-r--r--doc/src/declarative/declarativeui.qdoc2
-rw-r--r--doc/src/declarative/examples.qdoc39
-rw-r--r--doc/src/declarative/extending.qdoc64
-rw-r--r--doc/src/declarative/globalobject.qdoc87
-rw-r--r--doc/src/declarative/propertybinding.qdoc56
-rw-r--r--doc/src/declarative/qdeclarativemodels.qdoc12
-rw-r--r--doc/src/declarative/qdeclarativereference.qdoc4
-rw-r--r--doc/src/declarative/qdeclarativesecurity.qdoc4
-rw-r--r--doc/src/declarative/qtdeclarative.qdoc55
-rw-r--r--doc/src/examples/qml-calculator.qdoc49
-rw-r--r--doc/src/examples/qml-flickr.qdoc49
-rw-r--r--doc/src/examples/qml-focus.qdoc49
-rw-r--r--doc/src/examples/qml-minehunt.qdoc49
-rw-r--r--doc/src/examples/qml-photoviewer.qdoc49
-rw-r--r--doc/src/examples/qml-samegame.qdoc49
-rw-r--r--doc/src/examples/qml-snake.qdoc49
-rw-r--r--doc/src/getting-started/examples.qdoc16
-rw-r--r--doc/src/images/declarative-examples.pngbin0 -> 39074 bytes
-rw-r--r--doc/src/images/qml-calculator-example.pngbin0 -> 33956 bytes
-rw-r--r--doc/src/images/qml-flickr-example.pngbin0 -> 280730 bytes
-rw-r--r--doc/src/images/qml-focus-example.pngbin0 -> 26833 bytes
-rw-r--r--doc/src/images/qml-minehunt-example.pngbin0 -> 170648 bytes
-rw-r--r--doc/src/images/qml-photoviewer-example.pngbin0 -> 473306 bytes
-rw-r--r--doc/src/images/qml-samegame-example.pngbin0 -> 285415 bytes
-rw-r--r--doc/src/images/qml-snake-example.pngbin0 -> 105053 bytes
-rw-r--r--doc/src/snippets/declarative/script.js1
-rw-r--r--examples/declarative/animations/animations.qmlproject16
-rw-r--r--examples/declarative/aspectratio/aspectratio.qmlproject16
-rw-r--r--examples/declarative/behaviors/behaviors.qmlproject16
-rw-r--r--examples/declarative/border-image/border-image.qmlproject16
-rw-r--r--examples/declarative/clocks/clocks.qmlproject16
-rw-r--r--examples/declarative/connections/connections.qmlproject16
-rw-r--r--examples/declarative/dial/dial.qmlproject16
-rw-r--r--examples/declarative/dynamic/dynamic.qml37
-rw-r--r--examples/declarative/dynamic/dynamic.qmlproject16
-rw-r--r--examples/declarative/dynamic/qml/itemCreation.js2
-rw-r--r--examples/declarative/effects/effects.qmlproject16
-rw-r--r--examples/declarative/examples.qmlproject16
-rw-r--r--examples/declarative/extending/adding/example.qml2
-rw-r--r--examples/declarative/extending/adding/main.cpp3
-rw-r--r--examples/declarative/extending/adding/person.h12
-rw-r--r--examples/declarative/extending/attached/birthdayparty.cpp10
-rw-r--r--examples/declarative/extending/attached/birthdayparty.h18
-rw-r--r--examples/declarative/extending/attached/example.qml10
-rw-r--r--examples/declarative/extending/attached/main.cpp6
-rw-r--r--examples/declarative/extending/attached/person.h33
-rw-r--r--examples/declarative/extending/binding/binding.pro4
-rw-r--r--examples/declarative/extending/binding/birthdayparty.cpp18
-rw-r--r--examples/declarative/extending/binding/birthdayparty.h26
-rw-r--r--examples/declarative/extending/binding/example.qml6
-rw-r--r--examples/declarative/extending/binding/happybirthdaysong.cpp (renamed from examples/declarative/extending/binding/happybirthday.cpp)12
-rw-r--r--examples/declarative/extending/binding/happybirthdaysong.h (renamed from examples/declarative/extending/binding/happybirthday.h)17
-rw-r--r--examples/declarative/extending/binding/main.cpp10
-rw-r--r--examples/declarative/extending/binding/person.h33
-rw-r--r--examples/declarative/extending/coercion/birthdayparty.cpp10
-rw-r--r--examples/declarative/extending/coercion/birthdayparty.h14
-rw-r--r--examples/declarative/extending/coercion/example.qml4
-rw-r--r--examples/declarative/extending/coercion/main.cpp6
-rw-r--r--examples/declarative/extending/coercion/person.h20
-rw-r--r--examples/declarative/extending/default/birthdayparty.cpp10
-rw-r--r--examples/declarative/extending/default/birthdayparty.h16
-rw-r--r--examples/declarative/extending/default/example.qml4
-rw-r--r--examples/declarative/extending/default/main.cpp6
-rw-r--r--examples/declarative/extending/default/person.h20
-rw-r--r--examples/declarative/extending/extended/lineedit.h10
-rw-r--r--examples/declarative/extending/extending.qmlproject16
-rw-r--r--examples/declarative/extending/grouped/birthdayparty.cpp10
-rw-r--r--examples/declarative/extending/grouped/birthdayparty.h16
-rw-r--r--examples/declarative/extending/grouped/example.qml4
-rw-r--r--examples/declarative/extending/grouped/main.cpp6
-rw-r--r--examples/declarative/extending/grouped/person.h33
-rw-r--r--examples/declarative/extending/properties/birthdayparty.cpp10
-rw-r--r--examples/declarative/extending/properties/birthdayparty.h14
-rw-r--r--examples/declarative/extending/properties/example.qml4
-rw-r--r--examples/declarative/extending/properties/main.cpp4
-rw-r--r--examples/declarative/extending/properties/person.h10
-rw-r--r--examples/declarative/extending/signal/birthdayparty.cpp10
-rw-r--r--examples/declarative/extending/signal/birthdayparty.h18
-rw-r--r--examples/declarative/extending/signal/example.qml4
-rw-r--r--examples/declarative/extending/signal/main.cpp6
-rw-r--r--examples/declarative/extending/signal/person.h33
-rw-r--r--examples/declarative/extending/valuesource/birthdayparty.cpp14
-rw-r--r--examples/declarative/extending/valuesource/birthdayparty.h25
-rw-r--r--examples/declarative/extending/valuesource/example.qml6
-rw-r--r--examples/declarative/extending/valuesource/happybirthdaysong.cpp (renamed from examples/declarative/extending/valuesource/happybirthday.cpp)12
-rw-r--r--examples/declarative/extending/valuesource/happybirthdaysong.h (renamed from examples/declarative/extending/valuesource/happybirthday.h)15
-rw-r--r--examples/declarative/extending/valuesource/main.cpp10
-rw-r--r--examples/declarative/extending/valuesource/person.h33
-rw-r--r--examples/declarative/extending/valuesource/valuesource.pro4
-rw-r--r--examples/declarative/fillmode/fillmode.qmlproject16
-rw-r--r--examples/declarative/flipable/flipable.qmlproject16
-rw-r--r--examples/declarative/focus/Core/GridMenu.qml4
-rw-r--r--examples/declarative/focus/Core/ListViewDelegate.qml61
-rw-r--r--examples/declarative/focus/Core/ListViews.qml6
-rw-r--r--examples/declarative/focus/focus.qmlproject16
-rw-r--r--examples/declarative/fonts/fonts.qmlproject16
-rw-r--r--examples/declarative/gestures/gestures.qmlproject16
-rw-r--r--examples/declarative/gridview/gridview.qmlproject16
-rw-r--r--examples/declarative/imageprovider/imageprovider.qmlproject16
-rw-r--r--examples/declarative/images/images.qmlproject16
-rw-r--r--examples/declarative/layouts/layouts.qmlproject16
-rw-r--r--examples/declarative/listmodel-threaded/dataloader.js5
-rw-r--r--examples/declarative/listmodel-threaded/listmodel-threaded.qmlproject16
-rw-r--r--examples/declarative/listmodel-threaded/timedisplay.qml3
-rw-r--r--examples/declarative/listview/listview.qmlproject16
-rw-r--r--examples/declarative/mousearea/mousearea.qmlproject16
-rw-r--r--examples/declarative/objectlistmodel/objectlistmodel.qmlproject16
-rw-r--r--examples/declarative/package/package.qmlproject16
-rw-r--r--examples/declarative/parallax/parallax.qmlproject16
-rw-r--r--examples/declarative/plugins/plugins.qmlproject16
-rw-r--r--examples/declarative/progressbar/progressbar.qmlproject16
-rw-r--r--examples/declarative/proxywidgets/proxywidgets.qmlproject16
-rw-r--r--examples/declarative/scrollbar/scrollbar.qmlproject16
-rw-r--r--examples/declarative/searchbox/searchbox.qmlproject16
-rw-r--r--examples/declarative/slideswitch/slideswitch.qmlproject16
-rw-r--r--examples/declarative/sql/sql.qmlproject16
-rw-r--r--examples/declarative/states/states.qmlproject16
-rw-r--r--examples/declarative/tabwidget/tabwidget.qmlproject16
-rw-r--r--examples/declarative/tic-tac-toe/tic-tac-toe.qmlproject16
-rw-r--r--examples/declarative/tutorials/samegame/samegame2/samegame.js2
-rw-r--r--examples/declarative/tutorials/samegame/samegame3/samegame.js2
-rwxr-xr-xexamples/declarative/tutorials/samegame/samegame4/content/samegame.js2
-rw-r--r--examples/declarative/tutorials/tutorials.qmlproject16
-rw-r--r--examples/declarative/tvtennis/tvtennis.qmlproject16
-rw-r--r--examples/declarative/velocity/velocity.qmlproject16
-rw-r--r--examples/declarative/webview/webview.qmlproject16
-rw-r--r--examples/declarative/workerscript/workerscript.qmlproject16
-rw-r--r--examples/declarative/xmldata/xmldata.qmlproject16
-rw-r--r--examples/declarative/xmlhttprequest/xmlhttprequest.qmlproject16
-rw-r--r--src/declarative/QmlChanges.txt2
-rw-r--r--src/declarative/graphicsitems/qdeclarativeanchors.cpp104
-rw-r--r--src/declarative/graphicsitems/qdeclarativeanchors_p.h26
-rw-r--r--src/declarative/graphicsitems/qdeclarativeanchors_p_p.h2
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable.cpp4
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview.cpp65
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview_p.h1
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem.cpp44
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem.h1
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp20
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp111
-rw-r--r--src/declarative/graphicsitems/qdeclarativeloader.cpp10
-rw-r--r--src/declarative/graphicsitems/qdeclarativeloader_p.h3
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea.cpp39
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea_p.h6
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea_p_p.h4
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp101
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h9
-rw-r--r--src/declarative/qml/qdeclarative.h14
-rw-r--r--src/declarative/qml/qdeclarativebinding.cpp8
-rw-r--r--src/declarative/qml/qdeclarativecompiler.cpp19
-rw-r--r--src/declarative/qml/qdeclarativecontext.cpp6
-rw-r--r--src/declarative/qml/qdeclarativecustomparser.cpp20
-rw-r--r--src/declarative/qml/qdeclarativecustomparser_p.h4
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp101
-rw-r--r--src/declarative/qml/qdeclarativeinfo.cpp133
-rw-r--r--src/declarative/qml/qdeclarativeinfo.h26
-rw-r--r--src/declarative/qml/qdeclarativemetatype.cpp82
-rw-r--r--src/declarative/qml/qdeclarativemetatype_p.h1
-rw-r--r--src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.cpp6
-rw-r--r--src/declarative/qml/qdeclarativeobjectscriptclass.cpp8
-rw-r--r--src/declarative/qml/qdeclarativeprivate.h1
-rw-r--r--src/declarative/qml/qdeclarativepropertyvaluesource.cpp6
-rw-r--r--src/declarative/qml/qdeclarativetypenotavailable.cpp49
-rw-r--r--src/declarative/qml/qdeclarativetypenotavailable_p.h65
-rw-r--r--src/declarative/qml/qdeclarativevaluetype.cpp2
-rw-r--r--src/declarative/qml/qml.pri2
-rw-r--r--src/declarative/util/qdeclarativepropertychanges.cpp4
-rw-r--r--src/declarative/util/qdeclarativestate.cpp4
-rw-r--r--src/declarative/util/qdeclarativestate_p.h6
-rw-r--r--src/declarative/util/qdeclarativestateoperations.cpp583
-rw-r--r--src/declarative/util/qdeclarativestateoperations_p.h54
-rw-r--r--src/declarative/util/qdeclarativetransitionmanager.cpp5
-rw-r--r--src/declarative/util/qdeclarativeutilmodule.cpp20
-rw-r--r--src/declarative/util/qdeclarativeview.cpp1
-rw-r--r--src/gui/widgets/qlinecontrol.cpp2
-rw-r--r--tests/auto/declarative/declarative.pro1
-rw-r--r--tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp20
-rw-r--r--tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp4
-rw-r--r--tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp8
-rw-r--r--tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp9
-rw-r--r--tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp3
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.1.qml9
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.2.qml11
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/dynamicCreation.qml8
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/dynamicDeletion.qml2
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/extensionObjectsPropertyOverride.qml7
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp10
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/testtypes.h25
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp41
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml81
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/data/test.qml2
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/data/test4.qml2
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/data/test5.qml2
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp57
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.qml5
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/component.7.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/component.7.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/component.8.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/component.8.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/component.9.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/component.9.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.qml5
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.qml5
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.qml8
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidOn.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidOn.qml4
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/noCreation.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/noCreation.qml4
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.qml4
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.qml4
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.qml5
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.qml5
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/testtypes.cpp3
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/testtypes.h8
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp29
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp6
-rw-r--r--tests/auto/declarative/qdeclarativeloader/data/SetSourceComponent.qml5
-rw-r--r--tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp25
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/data/dragging.qml28
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp56
-rw-r--r--tests/auto/declarative/qdeclarativeqt/data/createComponent.qml10
-rw-r--r--tests/auto/declarative/qdeclarativeqt/data/createQmlObject.qml18
-rw-r--r--tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp6
-rw-r--r--tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp39
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/data/visualdatamodel.qml11
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro11
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp111
-rw-r--r--tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp4
-rw-r--r--tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.pngbin26099 -> 28886 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml2
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml2
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.pngbin0 -> 1701 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.pngbin0 -> 1701 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.pngbin0 -> 1721 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.pngbin0 -> 1705 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.pngbin0 -> 1705 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.pngbin0 -> 1701 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.pngbin0 -> 1704 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.pngbin0 -> 1704 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.pngbin0 -> 1705 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.pngbin0 -> 1705 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.pngbin0 -> 1701 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.pngbin0 -> 1701 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.pngbin0 -> 1705 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.pngbin0 -> 1701 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml5127
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/mousearea-flickable.qml52
-rw-r--r--tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp3
-rw-r--r--tools/qdoc3/cppcodeparser.cpp68
-rw-r--r--tools/qml/loggerwidget.cpp70
-rw-r--r--tools/qml/loggerwidget.h63
-rw-r--r--tools/qml/main.cpp118
-rw-r--r--tools/qml/qdeclarativetester.cpp3
-rw-r--r--tools/qml/qml.pri7
-rw-r--r--tools/qml/qmlruntime.cpp3
319 files changed, 9284 insertions, 1285 deletions
diff --git a/demos/declarative/calculator/calculator.qmlproject b/demos/declarative/calculator/calculator.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/demos/declarative/calculator/calculator.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/demos/declarative/demos.qmlproject b/demos/declarative/demos.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/demos/declarative/demos.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/demos/declarative/flickr/common/LikeOMeter.qml b/demos/declarative/flickr/common/LikeOMeter.qml
deleted file mode 100644
index 17e3998..0000000
--- a/demos/declarative/flickr/common/LikeOMeter.qml
+++ /dev/null
@@ -1,35 +0,0 @@
-import Qt 4.7
-
-Item {
- id: container
-
- property int rating: 2
-
- Row {
- Star {
- rating: 0
- onClicked: { container.rating = rating }
- on: container.rating >= 0
- }
- Star {
- rating: 1
- onClicked: { container.rating = rating }
- on: container.rating >= 1
- }
- Star {
- rating: 2
- onClicked: { container.rating = rating }
- on: container.rating >= 2
- }
- Star {
- rating: 3
- onClicked: { container.rating = rating }
- on: container.rating >= 3
- }
- Star {
- rating: 4
- onClicked: { container.rating = rating }
- on: container.rating >= 4
- }
- }
-}
diff --git a/demos/declarative/flickr/common/Loading.qml b/demos/declarative/flickr/common/Loading.qml
deleted file mode 100644
index 8daed48..0000000
--- a/demos/declarative/flickr/common/Loading.qml
+++ /dev/null
@@ -1,8 +0,0 @@
-import Qt 4.7
-
-Image {
- id: loading; source: "pics/loading.png"
- NumberAnimation on rotation {
- from: 0; to: 360; running: loading.visible == true; loops: Animation.Infinite; duration: 900
- }
-}
diff --git a/demos/declarative/flickr/common/RssModel.qml b/demos/declarative/flickr/common/RssModel.qml
index d0960db..415a9e9 100644
--- a/demos/declarative/flickr/common/RssModel.qml
+++ b/demos/declarative/flickr/common/RssModel.qml
@@ -3,7 +3,12 @@ import Qt 4.7
XmlListModel {
property string tags : ""
- source: "http://api.flickr.com/services/feeds/photos_public.gne?"+(tags ? "tags="+tags+"&" : "")+"format=rss2"
+ function commasep(x)
+ {
+ return x.replace(' ',',');
+ }
+
+ source: "http://api.flickr.com/services/feeds/photos_public.gne?"+(tags ? "tags="+commasep(tags)+"&" : "")+"format=rss2"
query: "/rss/channel/item"
namespaceDeclarations: "declare namespace media=\"http://search.yahoo.com/mrss/\";"
diff --git a/demos/declarative/flickr/common/Star.qml b/demos/declarative/flickr/common/Star.qml
deleted file mode 100644
index fcca742..0000000
--- a/demos/declarative/flickr/common/Star.qml
+++ /dev/null
@@ -1,45 +0,0 @@
-import Qt 4.7
-
-Item {
- id: container
- width: 24
- height: 24
-
- property int rating
- property bool on
- signal clicked
-
- Image {
- id: starImage
- source: "pics/ghns_star.png"
- x: 6
- y: 7
- opacity: 0.4
- scale: 0.5
- }
- MouseArea {
- anchors.fill: container
- onClicked: { container.clicked() }
- }
- states: [
- State {
- name: "on"
- when: container.on == true
- PropertyChanges {
- target: starImage
- opacity: 1
- scale: 1
- x: 1
- y: 0
- }
- }
- ]
- transitions: [
- Transition {
- NumberAnimation {
- properties: "opacity,scale,x,y"
- easing.type: "OutBounce"
- }
- }
- ]
-}
diff --git a/demos/declarative/flickr/common/pics/background.png b/demos/declarative/flickr/common/pics/background.png
deleted file mode 100644
index 5b37072..0000000
--- a/demos/declarative/flickr/common/pics/background.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/common/pics/button-pressed.png b/demos/declarative/flickr/common/pics/button-pressed.png
deleted file mode 100644
index e434d32..0000000
--- a/demos/declarative/flickr/common/pics/button-pressed.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/common/pics/button-pressed.sci b/demos/declarative/flickr/common/pics/button-pressed.sci
deleted file mode 100644
index b8db272..0000000
--- a/demos/declarative/flickr/common/pics/button-pressed.sci
+++ /dev/null
@@ -1,5 +0,0 @@
-border.left: 8
-border.top: 4
-border.bottom: 4
-border.right: 8
-source: button.png
diff --git a/demos/declarative/flickr/common/pics/button.png b/demos/declarative/flickr/common/pics/button.png
deleted file mode 100644
index 56a63ce..0000000
--- a/demos/declarative/flickr/common/pics/button.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/common/pics/button.sci b/demos/declarative/flickr/common/pics/button.sci
deleted file mode 100644
index b8db272..0000000
--- a/demos/declarative/flickr/common/pics/button.sci
+++ /dev/null
@@ -1,5 +0,0 @@
-border.left: 8
-border.top: 4
-border.bottom: 4
-border.right: 8
-source: button.png
diff --git a/demos/declarative/flickr/common/pics/ghns_star.png b/demos/declarative/flickr/common/pics/ghns_star.png
deleted file mode 100644
index 4ad43cc..0000000
--- a/demos/declarative/flickr/common/pics/ghns_star.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/common/pics/loading.png b/demos/declarative/flickr/common/pics/loading.png
deleted file mode 100644
index 47a1589..0000000
--- a/demos/declarative/flickr/common/pics/loading.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/common/pics/reflection.png b/demos/declarative/flickr/common/pics/reflection.png
deleted file mode 100644
index c143a48..0000000
--- a/demos/declarative/flickr/common/pics/reflection.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/common/pics/shadow-bottom.png b/demos/declarative/flickr/common/pics/shadow-bottom.png
deleted file mode 100644
index 523f6e7..0000000
--- a/demos/declarative/flickr/common/pics/shadow-bottom.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/common/pics/shadow-corner.png b/demos/declarative/flickr/common/pics/shadow-corner.png
deleted file mode 100644
index ef8c856..0000000
--- a/demos/declarative/flickr/common/pics/shadow-corner.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/common/pics/shadow-right-screen.png b/demos/declarative/flickr/common/pics/shadow-right-screen.png
deleted file mode 100644
index 9856c4f..0000000
--- a/demos/declarative/flickr/common/pics/shadow-right-screen.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/common/pics/shadow-right.png b/demos/declarative/flickr/common/pics/shadow-right.png
deleted file mode 100644
index f534a35..0000000
--- a/demos/declarative/flickr/common/pics/shadow-right.png
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/flickr/flickr.qml b/demos/declarative/flickr/flickr.qml
index aa550d2..8b73beb 100644
--- a/demos/declarative/flickr/flickr.qml
+++ b/demos/declarative/flickr/flickr.qml
@@ -13,7 +13,6 @@ Item {
Image { source: "mobile/images/stripes.png"; fillMode: Image.Tile; anchors.fill: parent; opacity: 0.3 }
Common.RssModel { id: rssModel }
- Common.Loading { anchors.centerIn: parent; visible: rssModel.status == 2 }
Item {
id: views
@@ -22,8 +21,9 @@ Item {
Mobile.GridDelegate { id: gridDelegate }
GridView {
+ x: (width/4-79)/2; y: x
id: photoGridView; model: rssModel; delegate: gridDelegate; cacheBuffer: 100
- cellWidth: 79; cellHeight: 79; width: parent.width; height: parent.height - 1; z: 6
+ cellWidth: (parent.width-2)/4; cellHeight: cellWidth; width: parent.width; height: parent.height - 1; z: 6
}
Mobile.ListDelegate { id: listDelegate }
diff --git a/demos/declarative/flickr/flickr.qmlproject b/demos/declarative/flickr/flickr.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/demos/declarative/flickr/flickr.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/demos/declarative/minehunt/minehunt.qmlproject b/demos/declarative/minehunt/minehunt.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/demos/declarative/minehunt/minehunt.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/demos/declarative/photoviewer/photoviewer.qmlproject b/demos/declarative/photoviewer/photoviewer.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/demos/declarative/photoviewer/photoviewer.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/demos/declarative/samegame/SamegameCore/samegame.js b/demos/declarative/samegame/SamegameCore/samegame.js
index 3888381..aafbfdf 100755
--- a/demos/declarative/samegame/SamegameCore/samegame.js
+++ b/demos/declarative/samegame/SamegameCore/samegame.js
@@ -8,7 +8,7 @@ var blockSrc = "SamegameCore/BoomBlock.qml";
var scoresURL = "http://qtfx-nokia.trolltech.com.au/samegame/scores.php";
var scoresURL = "";
var gameDuration;
-var component = createComponent(blockSrc);
+var component = Qt.createComponent(blockSrc);
//Index function used instead of a 2D array
function index(column,row) {
diff --git a/demos/declarative/samegame/samegame.qmlproject b/demos/declarative/samegame/samegame.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/demos/declarative/samegame/samegame.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/demos/declarative/snake/content/snake.js b/demos/declarative/snake/content/snake.js
index 12176c7..2457fbd 100644
--- a/demos/declarative/snake/content/snake.js
+++ b/demos/declarative/snake/content/snake.js
@@ -5,8 +5,8 @@ var links = new Array;
var scheduledDirections = new Array;
var numRows = 1;
var numColumns = 1;
-var linkComponent = createComponent("content/Link.qml"); // XXX should resolve relative to script, not component
-var cookieComponent = createComponent("content/Cookie.qml");
+var linkComponent = Qt.createComponent("content/Link.qml"); // XXX should resolve relative to script, not component
+var cookieComponent = Qt.createComponent("content/Cookie.qml");
var cookie;
var linksToGrow = 0;
var linksToDie = 0;
diff --git a/demos/declarative/snake/snake.qmlproject b/demos/declarative/snake/snake.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/demos/declarative/snake/snake.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/demos/declarative/twitter/twitter.qmlproject b/demos/declarative/twitter/twitter.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/demos/declarative/twitter/twitter.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/demos/declarative/webbrowser/webbrowser.qmlproject b/demos/declarative/webbrowser/webbrowser.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/demos/declarative/webbrowser/webbrowser.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/doc/src/declarative/advtutorial.qdoc b/doc/src/declarative/advtutorial.qdoc
index 751bf00..c465da4 100644
--- a/doc/src/declarative/advtutorial.qdoc
+++ b/doc/src/declarative/advtutorial.qdoc
@@ -67,7 +67,7 @@ Tutorial chapters:
\list 1
\o \l {QML Advanced Tutorial 1 - Creating the Game Canvas and Blocks}{Creating the Game Canvas and Blocks}
-\o \l {QML Advanced Tutorial 2 - Populating the Game Canvas}{Populating the Game Canvas}}
+\o \l {QML Advanced Tutorial 2 - Populating the Game Canvas}{Populating the Game Canvas}
\o \l {QML Advanced Tutorial 3 - Implementing the Game Logic}{Implementing the Game Logic}
\o \l {QML Advanced Tutorial 4 - Finishing Touches}{Finishing Touches}
\endlist
@@ -83,10 +83,6 @@ directory.
\previouspage QML Advanced Tutorial
\nextpage QML Advanced Tutorial 2 - Populating the Game Canvas
-In this chapter:
-
-\tableofcontents
-
The files referenced on this page can be found in \c $QTDIR\examples\tutorials\samegame\samegame1.
\section2 Creating the application screen
@@ -109,7 +105,7 @@ is the \l SystemPalette item. This provides access to the Qt system palette
and is used to give the button a more native look-and-feel.
Notice the anchors for the \c Item, \c Button and \c Text elements are set using
-\l {Grouped Properties}{group notation} for readability.
+\l {codingconventions.html#Grouped-properties}{group notation} for readability.
\section2 Adding \c Button and \c Block components
@@ -152,10 +148,6 @@ elements to get started. Next, we will populate the game canvas with some blocks
\previouspage QML Advanced Tutorial 1 - Creating the Game Canvas and Blocks
\nextpage QML Advanced Tutorial 3 - Implementing the Game Logic
-In this chapter:
-
-\tableofcontents
-
The files referenced on this page can be found in \c $QTDIR\examples\tutorials\samegame\samegame2.
@@ -224,10 +216,6 @@ Now, we have a screen of blocks, and we can begin to add the game mechanics.
\previouspage QML Advanced Tutorial 2 - Populating the Game Canvas
\nextpage QML Advanced Tutorial 4 - Finishing Touches
-In this chapter:
-
-\tableofcontents
-
The files referenced on this page can be found in \c $QTDIR\examples\tutorials\samegame\samegame3.
\section2 Making a playable game
@@ -313,10 +301,6 @@ until the next chapter - where your application becomes alive!
\contentspage QML Advanced Tutorial
\previouspage QML Advanced Tutorial 3 - Implementing the Game Logic
-In this chapter:
-
-\tableofcontents
-
The files referenced on this page can be found in \c $QTDIR\examples\tutorials\samegame\samegame4.
\section2 Adding some flair
@@ -432,7 +416,7 @@ If the player enters a name, we send the data to the service using this code in
\snippet declarative/tutorials/samegame/samegame4/content/samegame.js 1
-The \c XMLHttpRequest in this code is the same \c XMLHttpRequest() as you'll find in standard browser JavaScript, and can be used in the same way to dynamically get XML
+The \l XMLHttpRequest in this code is the same as the \c XMLHttpRequest() as you'll find in standard browser JavaScript, and can be used in the same way to dynamically get XML
or QML from the web service to display the high scores. We don't worry about the response in this case - we just post the high
score data to the web server. If it had returned a QML file (or a URL to a QML file) you could instantiate it in much the same
way as you did with the blocks.
diff --git a/doc/src/declarative/codingconventions.qdoc b/doc/src/declarative/codingconventions.qdoc
index 7ae5cbd..7ca206b 100644
--- a/doc/src/declarative/codingconventions.qdoc
+++ b/doc/src/declarative/codingconventions.qdoc
@@ -72,6 +72,7 @@ For example, a hypothetical \e photo QML object would look like this:
\snippet doc/src/snippets/declarative/codingconventions/photo.qml 0
+\target Grouped properties
\section1 Grouped properties
If using multiple properties from a group of properties,
diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc
index a2a5283..55945e6 100644
--- a/doc/src/declarative/declarativeui.qdoc
+++ b/doc/src/declarative/declarativeui.qdoc
@@ -75,7 +75,7 @@ completely new applications. QML is fully \l {Extending QML in C++}{extensible
\o \l {Introduction to the QML language}
\o \l {QML Tutorial}{Tutorial: 'Hello World'}
\o \l {QML Advanced Tutorial}{Tutorial: 'Same Game'}
-\o \l {QML Examples and Walkthroughs}
+\o \l {QML Examples and Demos}
\o \l {Using QML in C++ Applications}
\o \l {QML for Qt programmers}
\endlist
diff --git a/doc/src/declarative/examples.qdoc b/doc/src/declarative/examples.qdoc
index 3d8325e..dc6b76c 100644
--- a/doc/src/declarative/examples.qdoc
+++ b/doc/src/declarative/examples.qdoc
@@ -41,18 +41,22 @@
/*!
\page qdeclarativeexamples.html
-\title QML Examples and Walkthroughs
+\title QML Examples and Demos
-\section1 Running Examples and Demos
+\previouspage Graphics View Examples
+\contentspage Qt Examples
+\nextpage Painting Examples
+
+\section1 Running the examples
You can find many simple examples in the \c examples/declarative
sub-directory that show how to use various aspects of QML. In addition, the
\c demos/declarative sub-directory contains more sophisticated demos of large
applications. These demos are intended to show integrated functionality
-rather than being instructive on specifice elements.
+rather than being instructive on specific elements.
-To run the examples and demos, use the included \l {Qt Declarative UI Runtime}{qml}
-application. It has some useful options, revealed by:
+To run the examples and demos, you can use Qt Creator or the included \l {Qt Declarative UI Runtime}{qml}
+command-line application. It has some useful options, revealed by:
\code
bin/qml -help
@@ -66,18 +70,19 @@ For example, from your build directory, run:
\section1 Examples
-These will be documented, and demonstrate how to achieve various things in QML.
+\list
+\o \l{declarative/focus}{Focus}
+\endlist
+
+\section1 Demos
-\table
-\row
- \o Elastic Dial
- \o \image dial-example.gif
-\row
- \o \l{qdeclarativeexampletoggleswitch.html}{Toggle Switch}
- \o \image switch-example.gif
-\row
- \o \l{QML Advanced Tutorial}{SameGame}
- \o \image declarative-adv-tutorial4.gif
-\endtable
+\list
+\o \l{demos/declarative/calculator}{Calculator}
+\o \l{demos/declarative/minehunt}{Minehunt}
+\o \l{demos/declarative/photoviewer}{Photo Viewer}
+\o \l{demos/declarative/flickr}{Flickr Mobile}
+\o \l{demos/declarative/samegame}{Same Game}
+\o \l{demos/declarative/snake}{Snake}
+\endlist
*/
diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc
index a1d8a10..c27d091 100644
--- a/doc/src/declarative/extending.qdoc
+++ b/doc/src/declarative/extending.qdoc
@@ -59,7 +59,7 @@ QML for their own independent use.
\snippet examples/declarative/extending/adding/example.qml 0
The QML snippet shown above instantiates one \c Person instance and sets
-the name and shoeSize properties on it. Everything in QML ultimately comes down
+the \c name and \c shoeSize properties on it. Everything in QML ultimately comes down
to either instantiating an object instance, or assigning a property a value.
QML relies heavily on Qt's meta object system and can only instantiate classes
that derive from QObject.
@@ -124,7 +124,7 @@ the \c Person type.
\snippet examples/declarative/extending/properties/example.qml 0
The QML snippet shown above assigns a \c Person object to the \c BirthdayParty's
-celebrant property, and assigns three \c Person objects to the guests property.
+\c host property, and assigns three \c Person objects to the guests property.
QML can set properties of types that are more complex than basic intrinsics like
integers and strings. Properties can also be object pointers, Qt interface
@@ -133,12 +133,12 @@ is typesafe it ensures that only valid types are assigned to these properties,
just like it does for primitive types.
Properties that are pointers to objects or Qt interfaces are declared with the
-Q_PROPERTY() macro, just like other properties. The celebrant property
+Q_PROPERTY() macro, just like other properties. The \c host property
declaration looks like this:
\snippet examples/declarative/extending/properties/birthdayparty.h 1
-As long as the property type, in this case Person, is registered with QML the
+As long as the property type, in this case \c Person, is registered with QML the
property can be assigned.
QML also supports assigning Qt interfaces. To assign to a property whose type
@@ -158,12 +158,12 @@ Following registration, QML can coerce objects that implement this interface
for assignment to appropriately typed properties.
\endquotation
-The guests property is a list of \c Person objects. Properties that are lists
+The \c guests property is a list of \c Person objects. Properties that are lists
of objects or Qt interfaces are also declared with the Q_PROPERTY() macro, just
like other properties. List properties must have the type \c {QDeclarativeListProperty<T>}.
As with object properties, the type \a T must be registered with QML.
-The guest property declaration looks like this:
+The \c guest property declaration looks like this:
\snippet examples/declarative/extending/properties/birthdayparty.h 2
@@ -175,14 +175,14 @@ code used to create the \c BirthdayParty type.
\snippet examples/declarative/extending/coercion/example.qml 0
The QML snippet shown above assigns a \c Boy object to the \c BirthdayParty's
-celebrant property, and assigns three other objects to the guests property.
+\c host property, and assigns three other objects to the \c guests property.
-QML supports C++ inheritance heirarchies and can freely coerce between known,
+QML supports C++ inheritance hierarchies and can freely coerce between known,
valid object types. This enables the creation of common base classes that allow
the assignment of specialized classes to object or list properties. In the
-snippet shown, both the celebrant and the guests properties retain the Person
-type used in the previous section, but the assignment is valid as both the Boy
-and Girl objects inherit from Person.
+snippet shown, both the \c host and the \c guests properties retain the \c Person
+type used in the previous section, but the assignment is valid as both the \c Boy
+and \c Girl objects inherit from \c Person.
To assign to a property, the property's type must have been registered with QML.
Both the qmlRegisterType() and qmlRegisterInterface() template functions already
@@ -219,7 +219,7 @@ code used to create the \c Boy and \c Girl types.
The QML snippet shown above assigns a collection of objects to the
\c BirthdayParty's default property.
-The default property is a syntactic convenience that allows a type designer to
+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.
@@ -257,12 +257,12 @@ may also simplify the implementation of common property collections across
different types through implementation reuse.
A grouped property block is implemented as a read-only object property. The
-shoe property shown is declared like this:
+\c shoe property shown is declared like this:
\snippet examples/declarative/extending/grouped/person.h 1
-The ShoeDescription type declares the properties available to the grouped
-property block - in this case the size, color, brand and price properties.
+The \c ShoeDescription type declares the properties available to the grouped
+property block - in this case the \c size, \c color, \c brand and \c price properties.
Grouped property blocks may declared and accessed be recusively.
@@ -273,7 +273,7 @@ implement the \c shoe property grouping.
\snippet examples/declarative/extending/attached/example.qml 1
-The QML snippet shown above assigns the rsvp property using the attached
+The QML snippet shown above assigns the \c rsvp property using the attached
property syntax.
Attached properties allow unrelated types to annotate other types with some
@@ -282,7 +282,7 @@ identified through the use of the attacher type name, in the case shown
\c BirthdayParty, as a suffix to the property name.
In the example shown, \c BirthdayParty is called the attaching type, and the
-Boy instance the attachee object instance.
+\c Boy instance the attachee object instance.
For the attaching type, an attached property block is implemented as a new
QObject derived type, called the attachment object. The properties on the
@@ -326,7 +326,7 @@ their effect may be so limited.
For example, a common usage scenario is for a type to enhance the properties
available to its children in order to gather instance specific data. Here we
-add a rsvp field to all the guests coming to a birthday party:
+add a \c rsvp field to all the guests coming to a birthday party:
\code
BirthdayParty {
Boy { BirthdayParty.rsvp: "2009-06-01" }
@@ -362,7 +362,7 @@ implement the rsvp attached property.
\section1 Memory Management and QVariant types
-It is an elements responsibility to ensure that it does not access or return
+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
@@ -427,7 +427,7 @@ implement the onPartyStarted signal property.
\snippet examples/declarative/extending/valuesource/example.qml 0
\snippet examples/declarative/extending/valuesource/example.qml 1
-The QML snippet shown above assigns a property value to the speaker property.
+The QML snippet shown above applies a property value source to the \c announcment property.
A property value source generates a value for a property that changes over time.
Property value sources are most commonly used to do animation. Rather than
@@ -435,9 +435,9 @@ constructing an animation object and manually setting the animation's "target"
property, a property value source can be assigned directly to a property of any
type and automatically set up this association.
-The example shown here is rather contrived: the speaker property of the
-BirthdayParty object is a string that is printed every time it is assigned and
-the HappyBirthday value source generates the lyrics of the song
+The example shown here is rather contrived: the \c announcment property of the
+\c BirthdayParty object is a string that is printed every time it is assigned and
+the \c HappyBirthdaySong value source generates the lyrics of the song
"Happy Birthday".
\snippet examples/declarative/extending/valuesource/birthdayparty.h 0
@@ -451,11 +451,11 @@ Property value sources are special types that derive from the
QDeclarativePropertyValueSource base class. This base class contains a single method,
QDeclarativePropertyValueSource::setTarget(), that the QML engine invokes when
associating the property value source with a property. The relevant part of
-the HappyBirthday type declaration looks like this:
+the \c HappyBirthdaySong type declaration looks like this:
-\snippet examples/declarative/extending/valuesource/happybirthday.h 0
-\snippet examples/declarative/extending/valuesource/happybirthday.h 1
-\snippet examples/declarative/extending/valuesource/happybirthday.h 2
+\snippet examples/declarative/extending/valuesource/happybirthdaysong.h 0
+\snippet examples/declarative/extending/valuesource/happybirthdaysong.h 1
+\snippet examples/declarative/extending/valuesource/happybirthdaysong.h 2
In all other respects, property value sources are regular QML types. They must
be registered with the QML engine using the same macros as other types, and can
@@ -463,11 +463,11 @@ contain properties, signals and methods just like other types.
When a property value source object is assigned to a property, QML first tries
to assign it normally, as though it were a regular QML type. Only if this
-assignment fails does the engine call the setTarget() method. This allows
+assignment fails does the engine call the \l {QDeclarativePropertyValueSource::}{setTarget()} method. This allows
the type to also be used in contexts other than just as a value source.
\l {Extending QML - Property Value Source Example} shows the complete code used
-implement the HappyBirthday property value source.
+implement the \c HappyBirthdaySong property value source.
\section1 Property Binding
@@ -475,7 +475,7 @@ implement the HappyBirthday property value source.
\snippet examples/declarative/extending/binding/example.qml 1
The QML snippet shown above uses a property binding to ensure the
-HappyBirthday's name property remains up to date with the celebrant.
+\c HappyBirthdaySong's \c name property remains up to date with the \c host.
Property binding is a core feature of QML. In addition to assigning literal
values, property bindings allow the developer to assign an arbitrarily complex
@@ -488,9 +488,9 @@ All properties on custom types automatically support property binding. However,
for binding to work correctly, QML must be able to reliably determine when a
property has changed so that it knows to reevaluate any bindings that depend on
the property's value. QML relies on the presence of a
-\c {Qt's Property System}{NOTIFY signal} for this determination.
+\l {Qt's Property System}{NOTIFY signal} for this determination.
-Here is the celebrant property declaration:
+Here is the \c host property declaration:
\snippet examples/declarative/extending/binding/birthdayparty.h 0
diff --git a/doc/src/declarative/globalobject.qdoc b/doc/src/declarative/globalobject.qdoc
index 97f5d91..d729d4f 100644
--- a/doc/src/declarative/globalobject.qdoc
+++ b/doc/src/declarative/globalobject.qdoc
@@ -258,6 +258,11 @@ of their use.
}
\endcode
+ The methods and properties of the Component element are defined in its own
+ page, but when using it dynamically only two methods are usually used.
+ Component.createObject() returns the created object or null if there is an error.
+ If there is an error, Component.errorsString() describes what the error was.
+
If you want to just create an arbitrary string of QML, instead of
loading a QML file, consider the createQmlObject() function.
@@ -277,7 +282,9 @@ of their use.
similarly to eval, but for creating QML elements.
Returns the created object, or null if there is an error. In the case of an
- error, details of the error are output using qWarning().
+ error, a QtScript Error object is thrown. This object has the additional property,
+ qmlErrors, which is an array of all the errors encountered when trying to execute the
+ QML. Each object in the array has the members: lineNumber, columnNumber, fileName and message.
Note that this function returns immediately, and therefore may not work if
the QML loads new components. If you are trying to load a new component,
@@ -286,11 +293,81 @@ of their use.
been loaded, and so it is safe to use createQmlObject to load built-in
components.
-\section1 Asynchronous JavaScript and XML
-QML script supports the XMLHttpRequest object, which can be used to asynchronously obtain data from over a network.
-\section2 XMLHttpRequest()
-In QML you can construct an XMLHttpRequest object just like in a web browser! TODO: Real documentation for this object.
+\section1 XMLHttpRequest
+
+\target XMLHttpRequest
+
+QML script supports the XMLHttpRequest object, which can be used to asynchronously obtain
+data from over a network.
+
+The XMLHttpRequest API implements the same \l {http://www.w3.org/TR/XMLHttpRequest/}{W3C standard}
+as many popular web browsers with following exceptions:
+\list
+\i QML's XMLHttpRequest does not enforce the same origin policty.
+\i QML's XMLHttpRequest does not support \e synchronous requests.
+\endlist
+
+Additionally, the \c responseXML XML DOM tree currently supported by QML is a reduced subset
+of the \l {http://www.w3.org/TR/DOM-Level-3-Core/}{DOM Level 3 Core} API supported in a web
+browser. The following objects and properties are supported by the QML implementation:
+\table
+\header
+\o \bold {Node}
+\o \bold {Document}
+\o \bold {Element}
+\o \bold {Attr}
+\o \bold {CharacterData}
+\o \bold {Text}
+
+\row
+\o
+\list
+\o nodeName
+\o nodeValue
+\o nodeType
+\o parentNode
+\o childNodes
+\o firstChild
+\o lastChild
+\o previousSibling
+\o nextSibling
+\o attribtes
+\endlist
+
+\o
+\list
+\o xmlVersion
+\o xmlEncoding
+\o xmlStandalone
+\o documentElement
+\endlist
+
+\o
+\list
+\o tagName
+\endlist
+
+\o
+\list
+\o name
+\o value
+\o ownerElement
+\endlist
+
+\o
+\list
+\o data
+\o length
+\endlist
+
+\o
+\list
+\o isElementContentWhitespace
+\o wholeText
+\endlist
+
+\endtable
\section1 Offline Storage API
diff --git a/doc/src/declarative/propertybinding.qdoc b/doc/src/declarative/propertybinding.qdoc
index 02f9868..ab3682d 100644
--- a/doc/src/declarative/propertybinding.qdoc
+++ b/doc/src/declarative/propertybinding.qdoc
@@ -78,16 +78,52 @@ Rectangle {
}
\endcode
-Being JavaScript expressions, bindings are evaluated in a scope chain. The \l {QML Scope}
-documentation covers the specifics of scoping in QML.
-
-\list
-\o When does a binding not get updated?
-\o Scope
-\o Assigning a constant/other binding clears existing binding
-\o Loops
-\o Using model data
-\endlist
+While syntactically bindings can be of arbitrary complexity, if a binding starts to become
+overly complex - such as involving multiple lines, or imperative loops - it may be better
+to refactor the component entirely, or at least factor the binding out into a separate
+function.
+
+\section1 Changing Bindings
+
+The \l PropertyChanges element can be used within a state change to modify the bindings on
+properties.
+
+This example modifies the \l Rectangle's width property binding to be \c {otherItem.height}
+when in the "square" state. When it returns to its default state, width's original property
+binding will have been restored.
+
+\code
+Rectangle {
+ id: rectangle
+ width: otherItem.width
+ height: otherItem.height
+
+ states: State {
+ name: "square"
+ PropertyChanges {
+ target: rectangle
+ width: otherItem.height
+ }
+ }
+}
+\endcode
+
+Imperatively assigning a value directly to a property will also implicitly remove a binding
+on a property. A property can only have one value at a time, and if code explicitly sets
+this value the binding must be removed. The \l Rectangle in the example below will have
+a width of 13, regardless of the otherItem's width.
+
+\code
+Rectangle {
+ width: otherItem.width
+
+ Component.onCompleted: {
+ width = 13;
+ }
+}
+\endcode
+
+There is no way to create a property binding directly from imperative JavaScript code.
\section1 Binding Element
diff --git a/doc/src/declarative/qdeclarativemodels.qdoc b/doc/src/declarative/qdeclarativemodels.qdoc
index d8b2a5d..eecc117 100644
--- a/doc/src/declarative/qdeclarativemodels.qdoc
+++ b/doc/src/declarative/qdeclarativemodels.qdoc
@@ -206,8 +206,16 @@ The default role names set by Qt are:
\endtable
QAbstractItemModel presents a heirachy of tables. Views currently provided by QML
-can only display list data. In order to display child lists of a heirachical model
-use the VisualDataModel element with \e rootIndex set to a parent node.
+can only display list data.
+In order to display child lists of a heirachical model
+the VisualDataModel element provides several properties and functions for use
+with models of type QAbstractItemModel:
+\list
+\o \e hasModelChildren role property to determine whether a node has child nodes.
+\o \l VisualDataModel::rootIndex allows the root node to be specifed
+\o \l VisualDataModel::modelIndex() returns a QModelIndex which can be assigned to VisualDataModel::rootIndex
+\o \l VisualDataModel::parentModelIndex() returns a QModelIndex which can be assigned to VisualDataModel::rootIndex
+\endlist
\section2 QStringList
diff --git a/doc/src/declarative/qdeclarativereference.qdoc b/doc/src/declarative/qdeclarativereference.qdoc
index b2cfba8..4c1f449 100644
--- a/doc/src/declarative/qdeclarativereference.qdoc
+++ b/doc/src/declarative/qdeclarativereference.qdoc
@@ -55,7 +55,7 @@
That is, you specify \e what the UI should look like and how it should behave
rather than specifying step-by-step \e how to build it. Specifying a UI declaratively
does not just include the layout of the interface items, but also the way each
- individual item looks and behaves and the overall flow of the application.
+ individual item looks and behaves and the overall flow of the application.
The QML elements provide a sophisticated set of graphical and behavioral building
blocks. These different elements are combined together in \l {QML Documents}{QML documents} to build components
@@ -67,7 +67,7 @@
\o \l {Introduction to the QML language}
\o \l {QML Tutorial}{Tutorial: 'Hello World'}
\o \l {QML Advanced Tutorial}{Advanced Tutorial: 'Same Game'}
- \o \l {QML Examples and Walkthroughs}
+ \o \l {QML Examples and Demos}
\endlist
\section1 Core QML Features:
diff --git a/doc/src/declarative/qdeclarativesecurity.qdoc b/doc/src/declarative/qdeclarativesecurity.qdoc
index 290d78f..91d6d87 100644
--- a/doc/src/declarative/qdeclarativesecurity.qdoc
+++ b/doc/src/declarative/qdeclarativesecurity.qdoc
@@ -72,7 +72,7 @@ A non-exhaustive list of the ways you could shoot yourself in the foot is:
\list
\i Using \c import to import QML or JavaScript you do not control. BAD
\i Using \l Loader to import QML you do not control. BAD
- \i Using \l{XMLHttpRequest()}{XMLHttpRequest} to load data you do not control and executing it. BAD
+ \i Using \l{XMLHttpRequest}{XMLHttpRequest} to load data you do not control and executing it. BAD
\endlist
However, the above does not mean that you have no use for the network transparency of QML.
@@ -81,7 +81,7 @@ There are many good and useful things you \e can do:
\list
\i Create \l Image elements with source URLs of any online images. GOOD
\i Use XmlListModel to present online content. GOOD
- \i Use \l{XMLHttpRequest()}{XMLHttpRequest} to interact with online services. GOOD
+ \i Use \l{XMLHttpRequest}{XMLHttpRequest} to interact with online services. GOOD
\endlist
The only reason this page is necessary at all is that JavaScript, when run in a \e{web browser},
diff --git a/doc/src/declarative/qtdeclarative.qdoc b/doc/src/declarative/qtdeclarative.qdoc
index b4d8a2e..5d1e18f 100644
--- a/doc/src/declarative/qtdeclarative.qdoc
+++ b/doc/src/declarative/qtdeclarative.qdoc
@@ -79,7 +79,7 @@
\relates QDeclarativeEngine
This template function registers the C++ type in the QML system with
- the name \a qmlName. in the library imported from \a uri having the
+ the name \a qmlName, in the library imported from \a uri having the
version number composed from \a versionMajor and \a versionMinor.
Returns the QML type id.
@@ -94,6 +94,59 @@
*/
/*!
+ \fn int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message)
+ \relates QDeclarativeEngine
+
+ This template function registers the C++ type in the QML system with
+ the name \a qmlName, in the library imported from \a uri having the
+ version number composed from \a versionMajor and \a versionMinor.
+
+ While the type has a name and a type, it cannot be created, and the
+ given error \a message will result if creation is attempted.
+
+ This is useful where the type is only intended for providing attached properties or enum values.
+
+ Returns the QML type id.
+
+ \sa qmlRegisterTypeNotAvailable
+*/
+
+/*!
+ \fn int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message)
+ \relates QDeclarativeEngine
+
+ This function registers a type in the QML system with the name \a qmlName, in the library imported from \a uri having the
+ version number composed from \a versionMajor and \a versionMinor, but any attempt to instantiate the type
+ will produce the given error \a message.
+
+ Normally, the types exported by a module should be fixed. However, if a C++ type is not available, you should
+ at least "reserve" the QML type name, and give the user of your module a meaningful error message.
+
+ Returns the QML type id.
+
+ Example:
+
+ \code
+ #ifdef NO_GAMES_ALLOWED
+ qmlRegisterTypeNotAvailable("MinehuntCore", 0, 1, "Game", "Get back to work, slacker!");
+ #else
+ qmlRegisterType<MinehuntGame>("MinehuntCore", 0, 1, "Game");
+ #endif
+ \endcode
+
+ This will cause any QML which uses this module and attempts to use the type to produce an error message:
+ \code
+fun.qml: Get back to work, slacker!
+ Game {
+ ^
+ \endcode
+
+ Without this, a generic "Game is not a type" message would be given.
+
+ \sa qmlRegisterUncreatableType
+*/
+
+/*!
\fn int qmlRegisterType()
\relates QDeclarativeEngine
\overload
diff --git a/doc/src/examples/qml-calculator.qdoc b/doc/src/examples/qml-calculator.qdoc
new file mode 100644
index 0000000..ca05da9
--- /dev/null
+++ b/doc/src/examples/qml-calculator.qdoc
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** 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 Calculator
+ \example demos/declarative/calculator
+
+ This demo shows how to write a simple calculator application in QML and JavaScript.
+
+ \image qml-calculator-example.png
+*/
diff --git a/doc/src/examples/qml-flickr.qdoc b/doc/src/examples/qml-flickr.qdoc
new file mode 100644
index 0000000..ebf3250
--- /dev/null
+++ b/doc/src/examples/qml-flickr.qdoc
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** 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 Flickr Mobile
+ \example demos/declarative/flickr
+
+ This demo shows how to write a mobile Flickr browser application in QML.
+
+ \image qml-flickr-example.png
+*/
diff --git a/doc/src/examples/qml-focus.qdoc b/doc/src/examples/qml-focus.qdoc
new file mode 100644
index 0000000..92d93b2
--- /dev/null
+++ b/doc/src/examples/qml-focus.qdoc
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** 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/doc/src/examples/qml-minehunt.qdoc b/doc/src/examples/qml-minehunt.qdoc
new file mode 100644
index 0000000..773f216
--- /dev/null
+++ b/doc/src/examples/qml-minehunt.qdoc
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** 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 Minehunt
+ \example demos/declarative/minehunt
+
+ This demo shows how to create a simple Minehunt game with QML and C++.
+
+ \image qml-minehunt-example.png
+*/
diff --git a/doc/src/examples/qml-photoviewer.qdoc b/doc/src/examples/qml-photoviewer.qdoc
new file mode 100644
index 0000000..d1c3da2
--- /dev/null
+++ b/doc/src/examples/qml-photoviewer.qdoc
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** 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 Photo Viewer
+ \example demos/declarative/photoviewer
+
+ This demo shows how to write a Flickr photo viewer application in QML.
+
+ \image qml-photoviewer-example.png
+*/
diff --git a/doc/src/examples/qml-samegame.qdoc b/doc/src/examples/qml-samegame.qdoc
new file mode 100644
index 0000000..d9a9c7c
--- /dev/null
+++ b/doc/src/examples/qml-samegame.qdoc
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** 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 Same Game
+ \example demos/declarative/samegame
+
+ This demo shows how to write a Same Game in QML.
+
+ \image qml-samegame-example.png
+*/
diff --git a/doc/src/examples/qml-snake.qdoc b/doc/src/examples/qml-snake.qdoc
new file mode 100644
index 0000000..373ca13
--- /dev/null
+++ b/doc/src/examples/qml-snake.qdoc
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** 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 Snake
+ \example demos/declarative/snake
+
+ This demo shows how to write a Snake game in QML.
+
+ \image qml-snake-example.png
+*/
diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc
index 885e96c..071a107 100644
--- a/doc/src/getting-started/examples.qdoc
+++ b/doc/src/getting-started/examples.qdoc
@@ -151,6 +151,16 @@
classes.
\clearfloat
+ \section1 \l{QML Examples and Demos}{Declarative}
+ \beginfloatleft
+ \l{QML Examples and Demos}{\inlineimage declarative-examples.png
+ }
+
+ \endfloat
+ The Qt Declarative module provides a declarative framework for building
+ highly dynamic, custom user interfaces.
+
+ \clearfloat
\section1 \l{Painting Examples}{Painting}
\beginfloatleft
\l{Painting Examples}{\inlineimage painting-examples.png
@@ -626,7 +636,7 @@
\previouspage Item Views Examples
\contentspage Qt Examples
- \nextpage Painting Examples
+ \nextpage QML Examples and Demos
\image graphicsview-examples.png
@@ -669,7 +679,7 @@
\page examples-painting.html
\title Painting Examples
- \previouspage Graphics View Examples
+ \previouspage QML Examples and Demos
\contentspage Qt Examples
\nextpage Rich Text Examples
@@ -1323,7 +1333,7 @@
\o \l{dbus/complexpingpong}{Complex Ping Pong}
\o \l{dbus/listnames}{List Names}
\o \l{dbus/pingpong}{Ping Pong}
- \o \l{dbus/remotecontrolledcar}{Remote Controlled Car}
+ \o \l{dbus/remotecontrolledcar}{Remote Controlled Car}
\endlist
Examples marked with an asterisk (*) are fully documented.
diff --git a/doc/src/images/declarative-examples.png b/doc/src/images/declarative-examples.png
new file mode 100644
index 0000000..913dfac
--- /dev/null
+++ b/doc/src/images/declarative-examples.png
Binary files differ
diff --git a/doc/src/images/qml-calculator-example.png b/doc/src/images/qml-calculator-example.png
new file mode 100644
index 0000000..19ce1b6
--- /dev/null
+++ b/doc/src/images/qml-calculator-example.png
Binary files differ
diff --git a/doc/src/images/qml-flickr-example.png b/doc/src/images/qml-flickr-example.png
new file mode 100644
index 0000000..71ea567
--- /dev/null
+++ b/doc/src/images/qml-flickr-example.png
Binary files differ
diff --git a/doc/src/images/qml-focus-example.png b/doc/src/images/qml-focus-example.png
new file mode 100644
index 0000000..5a114a0
--- /dev/null
+++ b/doc/src/images/qml-focus-example.png
Binary files differ
diff --git a/doc/src/images/qml-minehunt-example.png b/doc/src/images/qml-minehunt-example.png
new file mode 100644
index 0000000..3b69569
--- /dev/null
+++ b/doc/src/images/qml-minehunt-example.png
Binary files differ
diff --git a/doc/src/images/qml-photoviewer-example.png b/doc/src/images/qml-photoviewer-example.png
new file mode 100644
index 0000000..be6f1bf
--- /dev/null
+++ b/doc/src/images/qml-photoviewer-example.png
Binary files differ
diff --git a/doc/src/images/qml-samegame-example.png b/doc/src/images/qml-samegame-example.png
new file mode 100644
index 0000000..c17b4e0
--- /dev/null
+++ b/doc/src/images/qml-samegame-example.png
Binary files differ
diff --git a/doc/src/images/qml-snake-example.png b/doc/src/images/qml-snake-example.png
new file mode 100644
index 0000000..d3c077d
--- /dev/null
+++ b/doc/src/images/qml-snake-example.png
Binary files differ
diff --git a/doc/src/snippets/declarative/script.js b/doc/src/snippets/declarative/script.js
new file mode 100644
index 0000000..cd67311
--- /dev/null
+++ b/doc/src/snippets/declarative/script.js
@@ -0,0 +1 @@
+# Just here so that workerscript.qml succeeds.
diff --git a/examples/declarative/animations/animations.qmlproject b/examples/declarative/animations/animations.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/animations/animations.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/aspectratio/aspectratio.qmlproject b/examples/declarative/aspectratio/aspectratio.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/aspectratio/aspectratio.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/behaviors/behaviors.qmlproject b/examples/declarative/behaviors/behaviors.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/behaviors/behaviors.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/border-image/border-image.qmlproject b/examples/declarative/border-image/border-image.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/border-image/border-image.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/clocks/clocks.qmlproject b/examples/declarative/clocks/clocks.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/clocks/clocks.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/connections/connections.qmlproject b/examples/declarative/connections/connections.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/connections/connections.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/dial/dial.qmlproject b/examples/declarative/dial/dial.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/dial/dial.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/dynamic/dynamic.qml b/examples/declarative/dynamic/dynamic.qml
index eea528f..0e6e197 100644
--- a/examples/declarative/dynamic/dynamic.qml
+++ b/examples/declarative/dynamic/dynamic.qml
@@ -7,6 +7,34 @@ Item {
//This is a desktop-sized example
width: 1024; height: 512
property int activeSuns: 0
+
+ //This is the message that pops up when there's an error
+ Rectangle{
+ id: dialog
+ opacity: 0
+ anchors.centerIn: parent
+ width: dialogText.width + 6
+ height: dialogText.height + 6
+ border.color: 'black'
+ color: 'lightsteelblue'
+ z: 65535 //Arbitrary number chosen to be above all the items, including the scaled perspective ones.
+ function show(str){
+ dialogText.text = str;
+ dialogAnim.start();
+ }
+ Text{
+ id: dialogText
+ x:3
+ y:3
+ font.pixelSize: 14
+ }
+ SequentialAnimation{
+ id: dialogAnim
+ NumberAnimation{target: dialog; property:"opacity"; to: 1; duration: 1000}
+ PauseAnimation{duration: 5000}
+ NumberAnimation{target: dialog; property:"opacity"; to: 0; duration: 1000}
+ }
+ }
// sky
Rectangle { id: sky
@@ -114,7 +142,14 @@ Item {
}
Button {
text: "Create"
- onClicked: createQmlObject(qmlText.text, window, 'CustomObject');
+ function makeCustom() {
+ try{
+ Qt.createQmlObject(qmlText.text, window, 'CustomObject');
+ }catch(err){
+ dialog.show('Error on line ' + err.qmlErrors[0].lineNumber + '\n' + err.qmlErrors[0].message );
+ }
+ }
+ onClicked: makeCustom();
}
}
}
diff --git a/examples/declarative/dynamic/dynamic.qmlproject b/examples/declarative/dynamic/dynamic.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/dynamic/dynamic.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/dynamic/qml/itemCreation.js b/examples/declarative/dynamic/qml/itemCreation.js
index ccc03aa..4fa0d9f 100644
--- a/examples/declarative/dynamic/qml/itemCreation.js
+++ b/examples/declarative/dynamic/qml/itemCreation.js
@@ -31,7 +31,7 @@ function loadComponent() {
if (itemComponent != null) //Already loaded the component
createItem();
- itemComponent = createComponent(itemButton.file);
+ itemComponent = Qt.createComponent(itemButton.file);
//print(itemButton.file)
if(itemComponent.isLoading){
component.statusChanged.connect(finishCreation);
diff --git a/examples/declarative/effects/effects.qmlproject b/examples/declarative/effects/effects.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/effects/effects.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/examples.qmlproject b/examples/declarative/examples.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/examples.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/extending/adding/example.qml b/examples/declarative/extending/adding/example.qml
index c608f94..dc891e7 100644
--- a/examples/declarative/extending/adding/example.qml
+++ b/examples/declarative/extending/adding/example.qml
@@ -1,6 +1,6 @@
+// ![0]
import People 1.0
-// ![0]
Person {
name: "Bob Jones"
shoeSize: 12
diff --git a/examples/declarative/extending/adding/main.cpp b/examples/declarative/extending/adding/main.cpp
index b9e5aa3..7b33895 100644
--- a/examples/declarative/extending/adding/main.cpp
+++ b/examples/declarative/extending/adding/main.cpp
@@ -47,8 +47,9 @@
int main(int argc, char ** argv)
{
QCoreApplication app(argc, argv);
-
+//![0]
qmlRegisterType<Person>("People", 1,0, "Person");
+//![0]
QDeclarativeEngine engine;
QDeclarativeComponent component(&engine, ":example.qml");
diff --git a/examples/declarative/extending/adding/person.h b/examples/declarative/extending/adding/person.h
index 7a9e0f0..d6de9a9 100644
--- a/examples/declarative/extending/adding/person.h
+++ b/examples/declarative/extending/adding/person.h
@@ -43,12 +43,11 @@
#include <QObject>
// ![0]
-#include <qdeclarative.h>
-
-class Person : public QObject {
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName)
-Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
public:
Person(QObject *parent = 0);
@@ -57,6 +56,7 @@ public:
int shoeSize() const;
void setShoeSize(int);
+
private:
QString m_name;
int m_shoeSize;
diff --git a/examples/declarative/extending/attached/birthdayparty.cpp b/examples/declarative/extending/attached/birthdayparty.cpp
index d4f2675..7fa1748 100644
--- a/examples/declarative/extending/attached/birthdayparty.cpp
+++ b/examples/declarative/extending/attached/birthdayparty.cpp
@@ -56,18 +56,18 @@ void BirthdayPartyAttached::setRsvp(const QDate &d)
}
BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_celebrant(0)
+: QObject(parent), m_host(0)
{
}
-Person *BirthdayParty::celebrant() const
+Person *BirthdayParty::host() const
{
- return m_celebrant;
+ return m_host;
}
-void BirthdayParty::setCelebrant(Person *c)
+void BirthdayParty::setHost(Person *c)
{
- m_celebrant = c;
+ m_host = c;
}
QDeclarativeListProperty<Person> BirthdayParty::guests()
diff --git a/examples/declarative/extending/attached/birthdayparty.h b/examples/declarative/extending/attached/birthdayparty.h
index 7c45d21..1c66f8c 100644
--- a/examples/declarative/extending/attached/birthdayparty.h
+++ b/examples/declarative/extending/attached/birthdayparty.h
@@ -48,8 +48,8 @@
class BirthdayPartyAttached : public QObject
{
-Q_OBJECT
-Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp)
+ Q_OBJECT
+ Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp)
public:
BirthdayPartyAttached(QObject *object);
@@ -62,15 +62,15 @@ private:
class BirthdayParty : public QObject
{
-Q_OBJECT
-Q_PROPERTY(Person *celebrant READ celebrant WRITE setCelebrant)
-Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
-Q_CLASSINFO("DefaultProperty", "guests")
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost)
+ Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
+ Q_CLASSINFO("DefaultProperty", "guests")
public:
BirthdayParty(QObject *parent = 0);
- Person *celebrant() const;
- void setCelebrant(Person *);
+ Person *host() const;
+ void setHost(Person *);
QDeclarativeListProperty<Person> guests();
int guestCount() const;
@@ -78,7 +78,7 @@ public:
static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
private:
- Person *m_celebrant;
+ Person *m_host;
QList<Person *> m_guests;
};
diff --git a/examples/declarative/extending/attached/example.qml b/examples/declarative/extending/attached/example.qml
index 952eb93..50f0a32 100644
--- a/examples/declarative/extending/attached/example.qml
+++ b/examples/declarative/extending/attached/example.qml
@@ -1,16 +1,17 @@
import People 1.0
BirthdayParty {
- celebrant: Boy {
+ host: Boy {
name: "Bob Jones"
shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
}
// ![1]
Boy {
- name: "Joan Hodges"
- BirthdayParty.rsvp: "2009-07-06"
+ name: "Leo Hodges"
shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
+
+ BirthdayParty.rsvp: "2009-07-06"
}
// ![1]
Boy {
@@ -19,11 +20,12 @@ BirthdayParty {
}
Girl {
name: "Anne Brown"
- BirthdayParty.rsvp: "2009-07-01"
shoe.size: 7
shoe.color: "red"
shoe.brand: "Marc Jacobs"
shoe.price: 699.99
+
+ BirthdayParty.rsvp: "2009-07-01"
}
}
diff --git a/examples/declarative/extending/attached/main.cpp b/examples/declarative/extending/attached/main.cpp
index fd2d525..f1055ae 100644
--- a/examples/declarative/extending/attached/main.cpp
+++ b/examples/declarative/extending/attached/main.cpp
@@ -60,10 +60,10 @@ int main(int argc, char ** argv)
QDeclarativeComponent component(&engine, ":example.qml");
BirthdayParty *party = qobject_cast<BirthdayParty *>(component.create());
- if (party && party->celebrant()) {
- qWarning() << party->celebrant()->name() << "is having a birthday!";
+ if (party && party->host()) {
+ qWarning() << party->host()->name() << "is having a birthday!";
- if (qobject_cast<Boy *>(party->celebrant()))
+ if (qobject_cast<Boy *>(party->host()))
qWarning() << "He is inviting:";
else
qWarning() << "She is inviting:";
diff --git a/examples/declarative/extending/attached/person.h b/examples/declarative/extending/attached/person.h
index 7a4b9c3..2f444c5 100644
--- a/examples/declarative/extending/attached/person.h
+++ b/examples/declarative/extending/attached/person.h
@@ -43,14 +43,14 @@
#include <QObject>
#include <QColor>
-#include <qdeclarative.h>
-class ShoeDescription : public QObject {
-Q_OBJECT
-Q_PROPERTY(int size READ size WRITE setSize)
-Q_PROPERTY(QColor color READ color WRITE setColor)
-Q_PROPERTY(QString brand READ brand WRITE setBrand)
-Q_PROPERTY(qreal price READ price WRITE setPrice)
+class ShoeDescription : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int size READ size WRITE setSize)
+ Q_PROPERTY(QColor color READ color WRITE setColor)
+ Q_PROPERTY(QString brand READ brand WRITE setBrand)
+ Q_PROPERTY(qreal price READ price WRITE setPrice)
public:
ShoeDescription(QObject *parent = 0);
@@ -72,10 +72,11 @@ private:
qreal m_price;
};
-class Person : public QObject {
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName)
-Q_PROPERTY(ShoeDescription *shoe READ shoe)
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(ShoeDescription *shoe READ shoe)
public:
Person(QObject *parent = 0);
@@ -88,14 +89,16 @@ private:
ShoeDescription m_shoe;
};
-class Boy : public Person {
-Q_OBJECT
+class Boy : public Person
+{
+ Q_OBJECT
public:
Boy(QObject * parent = 0);
};
-class Girl : public Person {
-Q_OBJECT
+class Girl : public Person
+{
+ Q_OBJECT
public:
Girl(QObject * parent = 0);
};
diff --git a/examples/declarative/extending/binding/binding.pro b/examples/declarative/extending/binding/binding.pro
index 903712e..896ce25 100644
--- a/examples/declarative/extending/binding/binding.pro
+++ b/examples/declarative/extending/binding/binding.pro
@@ -8,10 +8,10 @@ QT += declarative
SOURCES += main.cpp \
person.cpp \
birthdayparty.cpp \
- happybirthday.cpp
+ happybirthdaysong.cpp
HEADERS += person.h \
birthdayparty.h \
- happybirthday.h
+ happybirthdaysong.h
RESOURCES += binding.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/declarative/extending/binding
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS binding.pro
diff --git a/examples/declarative/extending/binding/birthdayparty.cpp b/examples/declarative/extending/binding/birthdayparty.cpp
index e5be2b9..000bb1f 100644
--- a/examples/declarative/extending/binding/birthdayparty.cpp
+++ b/examples/declarative/extending/binding/birthdayparty.cpp
@@ -60,20 +60,20 @@ void BirthdayPartyAttached::setRsvp(const QDate &d)
BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_celebrant(0)
+: QObject(parent), m_host(0)
{
}
-Person *BirthdayParty::celebrant() const
+Person *BirthdayParty::host() const
{
- return m_celebrant;
+ return m_host;
}
-void BirthdayParty::setCelebrant(Person *c)
+void BirthdayParty::setHost(Person *c)
{
- if (c == m_celebrant) return;
- m_celebrant = c;
- emit celebrantChanged();
+ if (c == m_host) return;
+ m_host = c;
+ emit hostChanged();
}
QDeclarativeListProperty<Person> BirthdayParty::guests()
@@ -97,12 +97,12 @@ void BirthdayParty::startParty()
emit partyStarted(time);
}
-QString BirthdayParty::speaker() const
+QString BirthdayParty::announcement() const
{
return QString();
}
-void BirthdayParty::setSpeaker(const QString &speak)
+void BirthdayParty::setAnnouncement(const QString &speak)
{
qWarning() << qPrintable(speak);
}
diff --git a/examples/declarative/extending/binding/birthdayparty.h b/examples/declarative/extending/binding/birthdayparty.h
index e2757bc..c3f033e 100644
--- a/examples/declarative/extending/binding/birthdayparty.h
+++ b/examples/declarative/extending/binding/birthdayparty.h
@@ -49,8 +49,8 @@
class BirthdayPartyAttached : public QObject
{
-Q_OBJECT
-Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp NOTIFY rsvpChanged)
+ Q_OBJECT
+ Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp NOTIFY rsvpChanged)
public:
BirthdayPartyAttached(QObject *object);
@@ -66,35 +66,35 @@ private:
class BirthdayParty : public QObject
{
-Q_OBJECT
+ Q_OBJECT
// ![0]
-Q_PROPERTY(Person *celebrant READ celebrant WRITE setCelebrant NOTIFY celebrantChanged)
+ Q_PROPERTY(Person *host READ host WRITE setHost NOTIFY hostChanged)
// ![0]
-Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
-Q_PROPERTY(QString speaker READ speaker WRITE setSpeaker)
-Q_CLASSINFO("DefaultProperty", "guests")
+ Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
+ Q_PROPERTY(QString announcement READ announcement WRITE setAnnouncement)
+ Q_CLASSINFO("DefaultProperty", "guests")
public:
BirthdayParty(QObject *parent = 0);
- Person *celebrant() const;
- void setCelebrant(Person *);
+ Person *host() const;
+ void setHost(Person *);
QDeclarativeListProperty<Person> guests();
int guestCount() const;
Person *guest(int) const;
- QString speaker() const;
- void setSpeaker(const QString &);
+ QString announcement() const;
+ void setAnnouncement(const QString &);
static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
void startParty();
signals:
void partyStarted(const QTime &time);
- void celebrantChanged();
+ void hostChanged();
private:
- Person *m_celebrant;
+ Person *m_host;
QList<Person *> m_guests;
};
diff --git a/examples/declarative/extending/binding/example.qml b/examples/declarative/extending/binding/example.qml
index b66bc86..82eb3be 100644
--- a/examples/declarative/extending/binding/example.qml
+++ b/examples/declarative/extending/binding/example.qml
@@ -4,9 +4,9 @@ import People 1.0
BirthdayParty {
id: theParty
- speaker: HappyBirthday { name: theParty.celebrant.name }
+ HappyBirthdaySong on announcement { name: theParty.host.name }
- celebrant: Boy {
+ host: Boy {
name: "Bob Jones"
shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
}
@@ -15,7 +15,7 @@ BirthdayParty {
Boy {
- name: "Joan Hodges"
+ name: "Leo Hodges"
BirthdayParty.rsvp: "2009-07-06"
shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
}
diff --git a/examples/declarative/extending/binding/happybirthday.cpp b/examples/declarative/extending/binding/happybirthdaysong.cpp
index aa5f937..a40e7fb 100644
--- a/examples/declarative/extending/binding/happybirthday.cpp
+++ b/examples/declarative/extending/binding/happybirthdaysong.cpp
@@ -38,10 +38,10 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-#include "happybirthday.h"
+#include "happybirthdaysong.h"
#include <QTimer>
-HappyBirthday::HappyBirthday(QObject *parent)
+HappyBirthdaySong::HappyBirthdaySong(QObject *parent)
: QObject(parent), m_line(-1)
{
setName(QString());
@@ -50,17 +50,17 @@ HappyBirthday::HappyBirthday(QObject *parent)
timer->start(1000);
}
-void HappyBirthday::setTarget(const QDeclarativeProperty &p)
+void HappyBirthdaySong::setTarget(const QDeclarativeProperty &p)
{
m_target = p;
}
-QString HappyBirthday::name() const
+QString HappyBirthdaySong::name() const
{
return m_name;
}
-void HappyBirthday::setName(const QString &name)
+void HappyBirthdaySong::setName(const QString &name)
{
if (m_name == name)
return;
@@ -77,7 +77,7 @@ void HappyBirthday::setName(const QString &name)
emit nameChanged();
}
-void HappyBirthday::advance()
+void HappyBirthdaySong::advance()
{
m_line = (m_line + 1) % m_lyrics.count();
diff --git a/examples/declarative/extending/binding/happybirthday.h b/examples/declarative/extending/binding/happybirthdaysong.h
index 0e5a90a..e825b86 100644
--- a/examples/declarative/extending/binding/happybirthday.h
+++ b/examples/declarative/extending/binding/happybirthdaysong.h
@@ -38,22 +38,21 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-#ifndef HAPPYBIRTHDAY_H
-#define HAPPYBIRTHDAY_H
+#ifndef HAPPYBIRTHDAYSONG_H
+#define HAPPYBIRTHDAYSONG_H
#include <QDeclarativePropertyValueSource>
#include <QDeclarativeProperty>
-#include <qdeclarative.h>
#include <QStringList>
-class HappyBirthday : public QObject, public QDeclarativePropertyValueSource
+class HappyBirthdaySong : public QObject, public QDeclarativePropertyValueSource
{
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
-Q_INTERFACES(QDeclarativePropertyValueSource)
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
+ Q_INTERFACES(QDeclarativePropertyValueSource)
public:
- HappyBirthday(QObject *parent = 0);
+ HappyBirthdaySong(QObject *parent = 0);
virtual void setTarget(const QDeclarativeProperty &);
@@ -72,5 +71,5 @@ private:
QString m_name;
};
-#endif // HAPPYBIRTHDAY_H
+#endif // HAPPYBIRTHDAYSONG_H
diff --git a/examples/declarative/extending/binding/main.cpp b/examples/declarative/extending/binding/main.cpp
index ce6c50d..2495676 100644
--- a/examples/declarative/extending/binding/main.cpp
+++ b/examples/declarative/extending/binding/main.cpp
@@ -43,7 +43,7 @@
#include <QDeclarativeComponent>
#include <QDebug>
#include "birthdayparty.h"
-#include "happybirthday.h"
+#include "happybirthdaysong.h"
#include "person.h"
int main(int argc, char ** argv)
@@ -51,7 +51,7 @@ int main(int argc, char ** argv)
QCoreApplication app(argc, argv);
qmlRegisterType<BirthdayPartyAttached>();
qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty");
- qmlRegisterType<HappyBirthday>("People", 1,0, "HappyBirthday");
+ qmlRegisterType<HappyBirthdaySong>("People", 1,0, "HappyBirthdaySong");
qmlRegisterType<ShoeDescription>();
qmlRegisterType<Person>();
qmlRegisterType<Boy>("People", 1,0, "Boy");
@@ -61,10 +61,10 @@ int main(int argc, char ** argv)
QDeclarativeComponent component(&engine, ":example.qml");
BirthdayParty *party = qobject_cast<BirthdayParty *>(component.create());
- if (party && party->celebrant()) {
- qWarning() << party->celebrant()->name() << "is having a birthday!";
+ if (party && party->host()) {
+ qWarning() << party->host()->name() << "is having a birthday!";
- if (qobject_cast<Boy *>(party->celebrant()))
+ if (qobject_cast<Boy *>(party->host()))
qWarning() << "He is inviting:";
else
qWarning() << "She is inviting:";
diff --git a/examples/declarative/extending/binding/person.h b/examples/declarative/extending/binding/person.h
index 0edfcdd..2a68da0 100644
--- a/examples/declarative/extending/binding/person.h
+++ b/examples/declarative/extending/binding/person.h
@@ -43,14 +43,14 @@
#include <QObject>
#include <QColor>
-#include <qdeclarative.h>
-class ShoeDescription : public QObject {
-Q_OBJECT
-Q_PROPERTY(int size READ size WRITE setSize NOTIFY shoeChanged)
-Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY shoeChanged)
-Q_PROPERTY(QString brand READ brand WRITE setBrand NOTIFY shoeChanged)
-Q_PROPERTY(qreal price READ price WRITE setPrice NOTIFY shoeChanged)
+class ShoeDescription : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int size READ size WRITE setSize NOTIFY shoeChanged)
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY shoeChanged)
+ Q_PROPERTY(QString brand READ brand WRITE setBrand NOTIFY shoeChanged)
+ Q_PROPERTY(qreal price READ price WRITE setPrice NOTIFY shoeChanged)
public:
ShoeDescription(QObject *parent = 0);
@@ -75,11 +75,12 @@ private:
qreal m_price;
};
-class Person : public QObject {
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
// ![0]
-Q_PROPERTY(ShoeDescription *shoe READ shoe CONSTANT)
+ Q_PROPERTY(ShoeDescription *shoe READ shoe CONSTANT)
// ![0]
public:
Person(QObject *parent = 0);
@@ -96,14 +97,16 @@ private:
ShoeDescription m_shoe;
};
-class Boy : public Person {
-Q_OBJECT
+class Boy : public Person
+{
+ Q_OBJECT
public:
Boy(QObject * parent = 0);
};
-class Girl : public Person {
-Q_OBJECT
+class Girl : public Person
+{
+ Q_OBJECT
public:
Girl(QObject * parent = 0);
};
diff --git a/examples/declarative/extending/coercion/birthdayparty.cpp b/examples/declarative/extending/coercion/birthdayparty.cpp
index 523a42d..4f415a3 100644
--- a/examples/declarative/extending/coercion/birthdayparty.cpp
+++ b/examples/declarative/extending/coercion/birthdayparty.cpp
@@ -41,18 +41,18 @@
#include "birthdayparty.h"
BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_celebrant(0)
+: QObject(parent), m_host(0)
{
}
-Person *BirthdayParty::celebrant() const
+Person *BirthdayParty::host() const
{
- return m_celebrant;
+ return m_host;
}
-void BirthdayParty::setCelebrant(Person *c)
+void BirthdayParty::setHost(Person *c)
{
- m_celebrant = c;
+ m_host = c;
}
QDeclarativeListProperty<Person> BirthdayParty::guests()
diff --git a/examples/declarative/extending/coercion/birthdayparty.h b/examples/declarative/extending/coercion/birthdayparty.h
index a5d14f9..ee77e9a 100644
--- a/examples/declarative/extending/coercion/birthdayparty.h
+++ b/examples/declarative/extending/coercion/birthdayparty.h
@@ -42,28 +42,28 @@
#define BIRTHDAYPARTY_H
#include <QObject>
-#include <qdeclarative.h>
+#include <QDeclarativeListProperty>
#include "person.h"
class BirthdayParty : public QObject
{
-Q_OBJECT
+ Q_OBJECT
// ![0]
-Q_PROPERTY(Person *celebrant READ celebrant WRITE setCelebrant)
-Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
+ Q_PROPERTY(Person *host READ host WRITE setHost)
+ Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
// ![0]
public:
BirthdayParty(QObject *parent = 0);
- Person *celebrant() const;
- void setCelebrant(Person *);
+ Person *host() const;
+ void setHost(Person *);
QDeclarativeListProperty<Person> guests();
int guestCount() const;
Person *guest(int) const;
private:
- Person *m_celebrant;
+ Person *m_host;
QList<Person *> m_guests;
};
diff --git a/examples/declarative/extending/coercion/example.qml b/examples/declarative/extending/coercion/example.qml
index 64d26b0..7b45950 100644
--- a/examples/declarative/extending/coercion/example.qml
+++ b/examples/declarative/extending/coercion/example.qml
@@ -2,12 +2,12 @@ import People 1.0
// ![0]
BirthdayParty {
- celebrant: Boy {
+ host: Boy {
name: "Bob Jones"
shoeSize: 12
}
guests: [
- Boy { name: "Joan Hodges" },
+ Boy { name: "Leo Hodges" },
Boy { name: "Jack Smith" },
Girl { name: "Anne Brown" }
]
diff --git a/examples/declarative/extending/coercion/main.cpp b/examples/declarative/extending/coercion/main.cpp
index 312aff9..2c7b545 100644
--- a/examples/declarative/extending/coercion/main.cpp
+++ b/examples/declarative/extending/coercion/main.cpp
@@ -60,10 +60,10 @@ int main(int argc, char ** argv)
QDeclarativeComponent component(&engine, ":example.qml");
BirthdayParty *party = qobject_cast<BirthdayParty *>(component.create());
- if (party && party->celebrant()) {
- qWarning() << party->celebrant()->name() << "is having a birthday!";
+ if (party && party->host()) {
+ qWarning() << party->host()->name() << "is having a birthday!";
- if (qobject_cast<Boy *>(party->celebrant()))
+ if (qobject_cast<Boy *>(party->host()))
qWarning() << "He is inviting:";
else
qWarning() << "She is inviting:";
diff --git a/examples/declarative/extending/coercion/person.h b/examples/declarative/extending/coercion/person.h
index 861f135..1c95da7 100644
--- a/examples/declarative/extending/coercion/person.h
+++ b/examples/declarative/extending/coercion/person.h
@@ -42,12 +42,12 @@
#define PERSON_H
#include <QObject>
-#include <qdeclarative.h>
-class Person : public QObject {
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName)
-Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
public:
Person(QObject *parent = 0);
@@ -63,15 +63,17 @@ private:
// ![0]
-class Boy : public Person {
-Q_OBJECT
+class Boy : public Person
+{
+ Q_OBJECT
public:
Boy(QObject * parent = 0);
};
-class Girl : public Person {
-Q_OBJECT
+class Girl : public Person
+{
+ Q_OBJECT
public:
Girl(QObject * parent = 0);
};
diff --git a/examples/declarative/extending/default/birthdayparty.cpp b/examples/declarative/extending/default/birthdayparty.cpp
index 523a42d..4f415a3 100644
--- a/examples/declarative/extending/default/birthdayparty.cpp
+++ b/examples/declarative/extending/default/birthdayparty.cpp
@@ -41,18 +41,18 @@
#include "birthdayparty.h"
BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_celebrant(0)
+: QObject(parent), m_host(0)
{
}
-Person *BirthdayParty::celebrant() const
+Person *BirthdayParty::host() const
{
- return m_celebrant;
+ return m_host;
}
-void BirthdayParty::setCelebrant(Person *c)
+void BirthdayParty::setHost(Person *c)
{
- m_celebrant = c;
+ m_host = c;
}
QDeclarativeListProperty<Person> BirthdayParty::guests()
diff --git a/examples/declarative/extending/default/birthdayparty.h b/examples/declarative/extending/default/birthdayparty.h
index c0cb0a4..9741040 100644
--- a/examples/declarative/extending/default/birthdayparty.h
+++ b/examples/declarative/extending/default/birthdayparty.h
@@ -42,28 +42,28 @@
#define BIRTHDAYPARTY_H
#include <QObject>
-#include <qdeclarative.h>
+#include <QDeclarativeListProperty>
#include "person.h"
// ![0]
class BirthdayParty : public QObject
{
-Q_OBJECT
-Q_PROPERTY(Person *celebrant READ celebrant WRITE setCelebrant)
-Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
-Q_CLASSINFO("DefaultProperty", "guests")
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost)
+ Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
+ Q_CLASSINFO("DefaultProperty", "guests")
public:
BirthdayParty(QObject *parent = 0);
- Person *celebrant() const;
- void setCelebrant(Person *);
+ Person *host() const;
+ void setHost(Person *);
QDeclarativeListProperty<Person> guests();
int guestCount() const;
Person *guest(int) const;
private:
- Person *m_celebrant;
+ Person *m_host;
QList<Person *> m_guests;
};
// ![0]
diff --git a/examples/declarative/extending/default/example.qml b/examples/declarative/extending/default/example.qml
index 58035f9..c0f3cbb 100644
--- a/examples/declarative/extending/default/example.qml
+++ b/examples/declarative/extending/default/example.qml
@@ -2,12 +2,12 @@ import People 1.0
// ![0]
BirthdayParty {
- celebrant: Boy {
+ host: Boy {
name: "Bob Jones"
shoeSize: 12
}
- Boy { name: "Joan Hodges" }
+ Boy { name: "Leo Hodges" }
Boy { name: "Jack Smith" }
Girl { name: "Anne Brown" }
}
diff --git a/examples/declarative/extending/default/main.cpp b/examples/declarative/extending/default/main.cpp
index 06282ad..2ffd180 100644
--- a/examples/declarative/extending/default/main.cpp
+++ b/examples/declarative/extending/default/main.cpp
@@ -58,10 +58,10 @@ int main(int argc, char ** argv)
QDeclarativeComponent component(&engine, ":example.qml");
BirthdayParty *party = qobject_cast<BirthdayParty *>(component.create());
- if (party && party->celebrant()) {
- qWarning() << party->celebrant()->name() << "is having a birthday!";
+ if (party && party->host()) {
+ qWarning() << party->host()->name() << "is having a birthday!";
- if (qobject_cast<Boy *>(party->celebrant()))
+ if (qobject_cast<Boy *>(party->host()))
qWarning() << "He is inviting:";
else
qWarning() << "She is inviting:";
diff --git a/examples/declarative/extending/default/person.h b/examples/declarative/extending/default/person.h
index 832bf11..3e56860 100644
--- a/examples/declarative/extending/default/person.h
+++ b/examples/declarative/extending/default/person.h
@@ -42,12 +42,12 @@
#define PERSON_H
#include <QObject>
-#include <qdeclarative.h>
-class Person : public QObject {
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName)
-Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
public:
Person(QObject *parent = 0);
@@ -61,14 +61,16 @@ private:
int m_shoeSize;
};
-class Boy : public Person {
-Q_OBJECT
+class Boy : public Person
+{
+ Q_OBJECT
public:
Boy(QObject * parent = 0);
};
-class Girl : public Person {
-Q_OBJECT
+class Girl : public Person
+{
+ Q_OBJECT
public:
Girl(QObject * parent = 0);
};
diff --git a/examples/declarative/extending/extended/lineedit.h b/examples/declarative/extending/extended/lineedit.h
index 9730b91..3a464b0 100644
--- a/examples/declarative/extending/extended/lineedit.h
+++ b/examples/declarative/extending/extended/lineedit.h
@@ -45,11 +45,11 @@
class LineEditExtension : public QObject
{
-Q_OBJECT
-Q_PROPERTY(int leftMargin READ leftMargin WRITE setLeftMargin NOTIFY marginsChanged)
-Q_PROPERTY(int rightMargin READ rightMargin WRITE setRightMargin NOTIFY marginsChanged)
-Q_PROPERTY(int topMargin READ topMargin WRITE setTopMargin NOTIFY marginsChanged)
-Q_PROPERTY(int bottomMargin READ bottomMargin WRITE setBottomMargin NOTIFY marginsChanged)
+ Q_OBJECT
+ Q_PROPERTY(int leftMargin READ leftMargin WRITE setLeftMargin NOTIFY marginsChanged)
+ Q_PROPERTY(int rightMargin READ rightMargin WRITE setRightMargin NOTIFY marginsChanged)
+ Q_PROPERTY(int topMargin READ topMargin WRITE setTopMargin NOTIFY marginsChanged)
+ Q_PROPERTY(int bottomMargin READ bottomMargin WRITE setBottomMargin NOTIFY marginsChanged)
public:
LineEditExtension(QObject *);
diff --git a/examples/declarative/extending/extending.qmlproject b/examples/declarative/extending/extending.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/extending/extending.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/extending/grouped/birthdayparty.cpp b/examples/declarative/extending/grouped/birthdayparty.cpp
index 523a42d..4f415a3 100644
--- a/examples/declarative/extending/grouped/birthdayparty.cpp
+++ b/examples/declarative/extending/grouped/birthdayparty.cpp
@@ -41,18 +41,18 @@
#include "birthdayparty.h"
BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_celebrant(0)
+: QObject(parent), m_host(0)
{
}
-Person *BirthdayParty::celebrant() const
+Person *BirthdayParty::host() const
{
- return m_celebrant;
+ return m_host;
}
-void BirthdayParty::setCelebrant(Person *c)
+void BirthdayParty::setHost(Person *c)
{
- m_celebrant = c;
+ m_host = c;
}
QDeclarativeListProperty<Person> BirthdayParty::guests()
diff --git a/examples/declarative/extending/grouped/birthdayparty.h b/examples/declarative/extending/grouped/birthdayparty.h
index 4ac5602..31d21b2 100644
--- a/examples/declarative/extending/grouped/birthdayparty.h
+++ b/examples/declarative/extending/grouped/birthdayparty.h
@@ -42,27 +42,27 @@
#define BIRTHDAYPARTY_H
#include <QObject>
-#include <qdeclarative.h>
+#include <QDeclarativeListProperty>
#include "person.h"
class BirthdayParty : public QObject
{
-Q_OBJECT
-Q_PROPERTY(Person *celebrant READ celebrant WRITE setCelebrant)
-Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
-Q_CLASSINFO("DefaultProperty", "guests")
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost)
+ Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
+ Q_CLASSINFO("DefaultProperty", "guests")
public:
BirthdayParty(QObject *parent = 0);
- Person *celebrant() const;
- void setCelebrant(Person *);
+ Person *host() const;
+ void setHost(Person *);
QDeclarativeListProperty<Person> guests();
int guestCount() const;
Person *guest(int) const;
private:
- Person *m_celebrant;
+ Person *m_host;
QList<Person *> m_guests;
};
diff --git a/examples/declarative/extending/grouped/example.qml b/examples/declarative/extending/grouped/example.qml
index 55912ed..91b7a06 100644
--- a/examples/declarative/extending/grouped/example.qml
+++ b/examples/declarative/extending/grouped/example.qml
@@ -2,13 +2,13 @@ import People 1.0
// ![0]
BirthdayParty {
- celebrant: Boy {
+ host: Boy {
name: "Bob Jones"
shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
}
Boy {
- name: "Joan Hodges"
+ name: "Leo Hodges"
shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
}
// ![1]
diff --git a/examples/declarative/extending/grouped/main.cpp b/examples/declarative/extending/grouped/main.cpp
index b383a8b..baf32cf 100644
--- a/examples/declarative/extending/grouped/main.cpp
+++ b/examples/declarative/extending/grouped/main.cpp
@@ -59,10 +59,10 @@ int main(int argc, char ** argv)
QDeclarativeComponent component(&engine, ":example.qml");
BirthdayParty *party = qobject_cast<BirthdayParty *>(component.create());
- if (party && party->celebrant()) {
- qWarning() << party->celebrant()->name() << "is having a birthday!";
+ if (party && party->host()) {
+ qWarning() << party->host()->name() << "is having a birthday!";
- if (qobject_cast<Boy *>(party->celebrant()))
+ if (qobject_cast<Boy *>(party->host()))
qWarning() << "He is inviting:";
else
qWarning() << "She is inviting:";
diff --git a/examples/declarative/extending/grouped/person.h b/examples/declarative/extending/grouped/person.h
index 216c015..a031e69 100644
--- a/examples/declarative/extending/grouped/person.h
+++ b/examples/declarative/extending/grouped/person.h
@@ -43,14 +43,14 @@
#include <QObject>
#include <QColor>
-#include <qdeclarative.h>
-class ShoeDescription : public QObject {
-Q_OBJECT
-Q_PROPERTY(int size READ size WRITE setSize)
-Q_PROPERTY(QColor color READ color WRITE setColor)
-Q_PROPERTY(QString brand READ brand WRITE setBrand)
-Q_PROPERTY(qreal price READ price WRITE setPrice)
+class ShoeDescription : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int size READ size WRITE setSize)
+ Q_PROPERTY(QColor color READ color WRITE setColor)
+ Q_PROPERTY(QString brand READ brand WRITE setBrand)
+ Q_PROPERTY(qreal price READ price WRITE setPrice)
public:
ShoeDescription(QObject *parent = 0);
@@ -72,11 +72,12 @@ private:
qreal m_price;
};
-class Person : public QObject {
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName)
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName)
// ![1]
-Q_PROPERTY(ShoeDescription *shoe READ shoe)
+ Q_PROPERTY(ShoeDescription *shoe READ shoe)
// ![1]
public:
Person(QObject *parent = 0);
@@ -90,14 +91,16 @@ private:
ShoeDescription m_shoe;
};
-class Boy : public Person {
-Q_OBJECT
+class Boy : public Person
+{
+ Q_OBJECT
public:
Boy(QObject * parent = 0);
};
-class Girl : public Person {
-Q_OBJECT
+class Girl : public Person
+{
+ Q_OBJECT
public:
Girl(QObject * parent = 0);
};
diff --git a/examples/declarative/extending/properties/birthdayparty.cpp b/examples/declarative/extending/properties/birthdayparty.cpp
index 14fd6a3..27d17a1 100644
--- a/examples/declarative/extending/properties/birthdayparty.cpp
+++ b/examples/declarative/extending/properties/birthdayparty.cpp
@@ -41,19 +41,19 @@
#include "birthdayparty.h"
BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_celebrant(0)
+: QObject(parent), m_host(0)
{
}
// ![0]
-Person *BirthdayParty::celebrant() const
+Person *BirthdayParty::host() const
{
- return m_celebrant;
+ return m_host;
}
-void BirthdayParty::setCelebrant(Person *c)
+void BirthdayParty::setHost(Person *c)
{
- m_celebrant = c;
+ m_host = c;
}
QDeclarativeListProperty<Person> BirthdayParty::guests()
diff --git a/examples/declarative/extending/properties/birthdayparty.h b/examples/declarative/extending/properties/birthdayparty.h
index dd01562..39ce9ba 100644
--- a/examples/declarative/extending/properties/birthdayparty.h
+++ b/examples/declarative/extending/properties/birthdayparty.h
@@ -42,33 +42,33 @@
#define BIRTHDAYPARTY_H
#include <QObject>
-#include <qdeclarative.h>
+#include <QDeclarativeListProperty>
#include "person.h"
// ![0]
class BirthdayParty : public QObject
{
-Q_OBJECT
+ Q_OBJECT
// ![0]
// ![1]
-Q_PROPERTY(Person *celebrant READ celebrant WRITE setCelebrant)
+ Q_PROPERTY(Person *host READ host WRITE setHost)
// ![1]
// ![2]
-Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
+ Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
// ![2]
// ![3]
public:
BirthdayParty(QObject *parent = 0);
- Person *celebrant() const;
- void setCelebrant(Person *);
+ Person *host() const;
+ void setHost(Person *);
QDeclarativeListProperty<Person> guests();
int guestCount() const;
Person *guest(int) const;
private:
- Person *m_celebrant;
+ Person *m_host;
QList<Person *> m_guests;
};
// ![3]
diff --git a/examples/declarative/extending/properties/example.qml b/examples/declarative/extending/properties/example.qml
index 9594a84..35abdd6 100644
--- a/examples/declarative/extending/properties/example.qml
+++ b/examples/declarative/extending/properties/example.qml
@@ -2,12 +2,12 @@ import People 1.0
// ![0]
BirthdayParty {
- celebrant: Person {
+ host: Person {
name: "Bob Jones"
shoeSize: 12
}
guests: [
- Person { name: "Joan Hodges" },
+ Person { name: "Leo Hodges" },
Person { name: "Jack Smith" },
Person { name: "Anne Brown" }
]
diff --git a/examples/declarative/extending/properties/main.cpp b/examples/declarative/extending/properties/main.cpp
index 350f8bd..85e9584 100644
--- a/examples/declarative/extending/properties/main.cpp
+++ b/examples/declarative/extending/properties/main.cpp
@@ -56,8 +56,8 @@ int main(int argc, char ** argv)
QDeclarativeComponent component(&engine, ":example.qml");
BirthdayParty *party = qobject_cast<BirthdayParty *>(component.create());
- if (party && party->celebrant()) {
- qWarning() << party->celebrant()->name() << "is having a birthday!";
+ if (party && party->host()) {
+ qWarning() << party->host()->name() << "is having a birthday!";
qWarning() << "They are inviting:";
for (int ii = 0; ii < party->guestCount(); ++ii)
qWarning() << " " << party->guest(ii)->name();
diff --git a/examples/declarative/extending/properties/person.h b/examples/declarative/extending/properties/person.h
index 7504d18..0029b09 100644
--- a/examples/declarative/extending/properties/person.h
+++ b/examples/declarative/extending/properties/person.h
@@ -42,12 +42,12 @@
#define PERSON_H
#include <QObject>
-#include <qdeclarative.h>
-class Person : public QObject {
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName)
-Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
public:
Person(QObject *parent = 0);
diff --git a/examples/declarative/extending/signal/birthdayparty.cpp b/examples/declarative/extending/signal/birthdayparty.cpp
index 65ff530..740c8c9 100644
--- a/examples/declarative/extending/signal/birthdayparty.cpp
+++ b/examples/declarative/extending/signal/birthdayparty.cpp
@@ -57,18 +57,18 @@ void BirthdayPartyAttached::setRsvp(const QDate &d)
BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_celebrant(0)
+: QObject(parent), m_host(0)
{
}
-Person *BirthdayParty::celebrant() const
+Person *BirthdayParty::host() const
{
- return m_celebrant;
+ return m_host;
}
-void BirthdayParty::setCelebrant(Person *c)
+void BirthdayParty::setHost(Person *c)
{
- m_celebrant = c;
+ m_host = c;
}
QDeclarativeListProperty<Person> BirthdayParty::guests()
diff --git a/examples/declarative/extending/signal/birthdayparty.h b/examples/declarative/extending/signal/birthdayparty.h
index a2b35cd..ae4dd39 100644
--- a/examples/declarative/extending/signal/birthdayparty.h
+++ b/examples/declarative/extending/signal/birthdayparty.h
@@ -48,8 +48,8 @@
class BirthdayPartyAttached : public QObject
{
-Q_OBJECT
-Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp)
+ Q_OBJECT
+ Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp)
public:
BirthdayPartyAttached(QObject *object);
@@ -62,15 +62,15 @@ private:
class BirthdayParty : public QObject
{
-Q_OBJECT
-Q_PROPERTY(Person *celebrant READ celebrant WRITE setCelebrant)
-Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
-Q_CLASSINFO("DefaultProperty", "guests")
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost)
+ Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
+ Q_CLASSINFO("DefaultProperty", "guests")
public:
BirthdayParty(QObject *parent = 0);
- Person *celebrant() const;
- void setCelebrant(Person *);
+ Person *host() const;
+ void setHost(Person *);
QDeclarativeListProperty<Person> guests();
int guestCount() const;
@@ -85,7 +85,7 @@ signals:
// ![0]
private:
- Person *m_celebrant;
+ Person *m_host;
QList<Person *> m_guests;
};
QML_DECLARE_TYPEINFO(BirthdayParty, QML_HAS_ATTACHED_PROPERTIES)
diff --git a/examples/declarative/extending/signal/example.qml b/examples/declarative/extending/signal/example.qml
index c7d4792..83d6a23 100644
--- a/examples/declarative/extending/signal/example.qml
+++ b/examples/declarative/extending/signal/example.qml
@@ -5,13 +5,13 @@ BirthdayParty {
onPartyStarted: console.log("This party started rockin' at " + time);
// ![0]
- celebrant: Boy {
+ host: Boy {
name: "Bob Jones"
shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
}
Boy {
- name: "Joan Hodges"
+ name: "Leo Hodges"
BirthdayParty.rsvp: "2009-07-06"
shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
}
diff --git a/examples/declarative/extending/signal/main.cpp b/examples/declarative/extending/signal/main.cpp
index 1b23a46..453f688 100644
--- a/examples/declarative/extending/signal/main.cpp
+++ b/examples/declarative/extending/signal/main.cpp
@@ -60,10 +60,10 @@ int main(int argc, char ** argv)
QDeclarativeComponent component(&engine, ":example.qml");
BirthdayParty *party = qobject_cast<BirthdayParty *>(component.create());
- if (party && party->celebrant()) {
- qWarning() << party->celebrant()->name() << "is having a birthday!";
+ if (party && party->host()) {
+ qWarning() << party->host()->name() << "is having a birthday!";
- if (qobject_cast<Boy *>(party->celebrant()))
+ if (qobject_cast<Boy *>(party->host()))
qWarning() << "He is inviting:";
else
qWarning() << "She is inviting:";
diff --git a/examples/declarative/extending/signal/person.h b/examples/declarative/extending/signal/person.h
index 7a4b9c3..2f444c5 100644
--- a/examples/declarative/extending/signal/person.h
+++ b/examples/declarative/extending/signal/person.h
@@ -43,14 +43,14 @@
#include <QObject>
#include <QColor>
-#include <qdeclarative.h>
-class ShoeDescription : public QObject {
-Q_OBJECT
-Q_PROPERTY(int size READ size WRITE setSize)
-Q_PROPERTY(QColor color READ color WRITE setColor)
-Q_PROPERTY(QString brand READ brand WRITE setBrand)
-Q_PROPERTY(qreal price READ price WRITE setPrice)
+class ShoeDescription : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int size READ size WRITE setSize)
+ Q_PROPERTY(QColor color READ color WRITE setColor)
+ Q_PROPERTY(QString brand READ brand WRITE setBrand)
+ Q_PROPERTY(qreal price READ price WRITE setPrice)
public:
ShoeDescription(QObject *parent = 0);
@@ -72,10 +72,11 @@ private:
qreal m_price;
};
-class Person : public QObject {
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName)
-Q_PROPERTY(ShoeDescription *shoe READ shoe)
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(ShoeDescription *shoe READ shoe)
public:
Person(QObject *parent = 0);
@@ -88,14 +89,16 @@ private:
ShoeDescription m_shoe;
};
-class Boy : public Person {
-Q_OBJECT
+class Boy : public Person
+{
+ Q_OBJECT
public:
Boy(QObject * parent = 0);
};
-class Girl : public Person {
-Q_OBJECT
+class Girl : public Person
+{
+ Q_OBJECT
public:
Girl(QObject * parent = 0);
};
diff --git a/examples/declarative/extending/valuesource/birthdayparty.cpp b/examples/declarative/extending/valuesource/birthdayparty.cpp
index 99d98be..b915f4f 100644
--- a/examples/declarative/extending/valuesource/birthdayparty.cpp
+++ b/examples/declarative/extending/valuesource/birthdayparty.cpp
@@ -57,18 +57,18 @@ void BirthdayPartyAttached::setRsvp(const QDate &d)
BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_celebrant(0)
+: QObject(parent), m_host(0)
{
}
-Person *BirthdayParty::celebrant() const
+Person *BirthdayParty::host() const
{
- return m_celebrant;
+ return m_host;
}
-void BirthdayParty::setCelebrant(Person *c)
+void BirthdayParty::setHost(Person *c)
{
- m_celebrant = c;
+ m_host = c;
}
QDeclarativeListProperty<Person> BirthdayParty::guests()
@@ -92,12 +92,12 @@ void BirthdayParty::startParty()
emit partyStarted(time);
}
-QString BirthdayParty::speaker() const
+QString BirthdayParty::announcement() const
{
return QString();
}
-void BirthdayParty::setSpeaker(const QString &speak)
+void BirthdayParty::setAnnouncement(const QString &speak)
{
qWarning() << qPrintable(speak);
}
diff --git a/examples/declarative/extending/valuesource/birthdayparty.h b/examples/declarative/extending/valuesource/birthdayparty.h
index a9b3102..5f25781 100644
--- a/examples/declarative/extending/valuesource/birthdayparty.h
+++ b/examples/declarative/extending/valuesource/birthdayparty.h
@@ -49,8 +49,8 @@
class BirthdayPartyAttached : public QObject
{
-Q_OBJECT
-Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp)
+ Q_OBJECT
+ Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp)
public:
BirthdayPartyAttached(QObject *object);
@@ -63,26 +63,25 @@ private:
class BirthdayParty : public QObject
{
-Q_OBJECT
-Q_PROPERTY(Person *celebrant READ celebrant WRITE setCelebrant)
-Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost)
+ Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)
// ![0]
-Q_PROPERTY(QString speaker READ speaker WRITE setSpeaker)
+ Q_PROPERTY(QString announcement READ announcement WRITE setAnnouncement)
// ![0]
-Q_CLASSINFO("DefaultProperty", "guests")
+ Q_CLASSINFO("DefaultProperty", "guests")
public:
BirthdayParty(QObject *parent = 0);
- Person *celebrant() const;
- void setCelebrant(Person *);
+ Person *host() const;
+ void setHost(Person *);
QDeclarativeListProperty<Person> guests();
int guestCount() const;
Person *guest(int) const;
-
- QString speaker() const;
- void setSpeaker(const QString &);
+ QString announcement() const;
+ void setAnnouncement(const QString &);
static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
@@ -91,7 +90,7 @@ signals:
void partyStarted(const QTime &time);
private:
- Person *m_celebrant;
+ Person *m_host;
QList<Person *> m_guests;
};
QML_DECLARE_TYPEINFO(BirthdayParty, QML_HAS_ATTACHED_PROPERTIES)
diff --git a/examples/declarative/extending/valuesource/example.qml b/examples/declarative/extending/valuesource/example.qml
index 7cdf8c0..5b8c8af 100644
--- a/examples/declarative/extending/valuesource/example.qml
+++ b/examples/declarative/extending/valuesource/example.qml
@@ -2,19 +2,19 @@ import People 1.0
// ![0]
BirthdayParty {
- speaker: HappyBirthday { name: "Bob Jones" }
+ HappyBirthdaySong on announcement { name: "Bob Jones" }
// ![0]
onPartyStarted: console.log("This party started rockin' at " + time);
- celebrant: Boy {
+ host: Boy {
name: "Bob Jones"
shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
}
Boy {
- name: "Joan Hodges"
+ name: "Leo Hodges"
BirthdayParty.rsvp: "2009-07-06"
shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
}
diff --git a/examples/declarative/extending/valuesource/happybirthday.cpp b/examples/declarative/extending/valuesource/happybirthdaysong.cpp
index 0dbbd6e..8ea5c2b 100644
--- a/examples/declarative/extending/valuesource/happybirthday.cpp
+++ b/examples/declarative/extending/valuesource/happybirthdaysong.cpp
@@ -38,10 +38,10 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-#include "happybirthday.h"
+#include "happybirthdaysong.h"
#include <QTimer>
-HappyBirthday::HappyBirthday(QObject *parent)
+HappyBirthdaySong::HappyBirthdaySong(QObject *parent)
: QObject(parent), m_line(-1)
{
setName(QString());
@@ -50,17 +50,17 @@ HappyBirthday::HappyBirthday(QObject *parent)
timer->start(1000);
}
-void HappyBirthday::setTarget(const QDeclarativeProperty &p)
+void HappyBirthdaySong::setTarget(const QDeclarativeProperty &p)
{
m_target = p;
}
-QString HappyBirthday::name() const
+QString HappyBirthdaySong::name() const
{
return m_name;
}
-void HappyBirthday::setName(const QString &name)
+void HappyBirthdaySong::setName(const QString &name)
{
m_name = name;
@@ -72,7 +72,7 @@ void HappyBirthday::setName(const QString &name)
m_lyrics << "";
}
-void HappyBirthday::advance()
+void HappyBirthdaySong::advance()
{
m_line = (m_line + 1) % m_lyrics.count();
diff --git a/examples/declarative/extending/valuesource/happybirthday.h b/examples/declarative/extending/valuesource/happybirthdaysong.h
index 8548eb8..3d07909 100644
--- a/examples/declarative/extending/valuesource/happybirthday.h
+++ b/examples/declarative/extending/valuesource/happybirthdaysong.h
@@ -38,8 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-#ifndef HAPPYBIRTHDAY_H
-#define HAPPYBIRTHDAY_H
+#ifndef HAPPYBIRTHDAYSONG_H
+#define HAPPYBIRTHDAYSONG_H
#include <QDeclarativePropertyValueSource>
#include <QDeclarativeProperty>
@@ -48,14 +48,15 @@
#include <QStringList>
// ![0]
-class HappyBirthday : public QObject, public QDeclarativePropertyValueSource
+class HappyBirthdaySong : public QObject, public QDeclarativePropertyValueSource
{
-Q_OBJECT
+ Q_OBJECT
+ Q_INTERFACES(QDeclarativePropertyValueSource)
// ![0]
-Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(QString name READ name WRITE setName)
// ![1]
public:
- HappyBirthday(QObject *parent = 0);
+ HappyBirthdaySong(QObject *parent = 0);
virtual void setTarget(const QDeclarativeProperty &);
// ![1]
@@ -75,5 +76,5 @@ private:
};
// ![2]
-#endif // HAPPYBIRTHDAY_H
+#endif // HAPPYBIRTHDAYSONG_H
diff --git a/examples/declarative/extending/valuesource/main.cpp b/examples/declarative/extending/valuesource/main.cpp
index 2574917..00840ee 100644
--- a/examples/declarative/extending/valuesource/main.cpp
+++ b/examples/declarative/extending/valuesource/main.cpp
@@ -43,7 +43,7 @@
#include <QDeclarativeComponent>
#include <QDebug>
#include "birthdayparty.h"
-#include "happybirthday.h"
+#include "happybirthdaysong.h"
#include "person.h"
int main(int argc, char ** argv)
@@ -52,7 +52,7 @@ int main(int argc, char ** argv)
qmlRegisterType<BirthdayPartyAttached>();
qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty");
- qmlRegisterType<HappyBirthday>("People", 1,0, "HappyBirthday");
+ qmlRegisterType<HappyBirthdaySong>("People", 1,0, "HappyBirthdaySong");
qmlRegisterType<ShoeDescription>();
qmlRegisterType<Person>();
qmlRegisterType<Boy>("People", 1,0, "Boy");
@@ -62,10 +62,10 @@ int main(int argc, char ** argv)
QDeclarativeComponent component(&engine, ":example.qml");
BirthdayParty *party = qobject_cast<BirthdayParty *>(component.create());
- if (party && party->celebrant()) {
- qWarning() << party->celebrant()->name() << "is having a birthday!";
+ if (party && party->host()) {
+ qWarning() << party->host()->name() << "is having a birthday!";
- if (qobject_cast<Boy *>(party->celebrant()))
+ if (qobject_cast<Boy *>(party->host()))
qWarning() << "He is inviting:";
else
qWarning() << "She is inviting:";
diff --git a/examples/declarative/extending/valuesource/person.h b/examples/declarative/extending/valuesource/person.h
index 7a4b9c3..2f444c5 100644
--- a/examples/declarative/extending/valuesource/person.h
+++ b/examples/declarative/extending/valuesource/person.h
@@ -43,14 +43,14 @@
#include <QObject>
#include <QColor>
-#include <qdeclarative.h>
-class ShoeDescription : public QObject {
-Q_OBJECT
-Q_PROPERTY(int size READ size WRITE setSize)
-Q_PROPERTY(QColor color READ color WRITE setColor)
-Q_PROPERTY(QString brand READ brand WRITE setBrand)
-Q_PROPERTY(qreal price READ price WRITE setPrice)
+class ShoeDescription : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int size READ size WRITE setSize)
+ Q_PROPERTY(QColor color READ color WRITE setColor)
+ Q_PROPERTY(QString brand READ brand WRITE setBrand)
+ Q_PROPERTY(qreal price READ price WRITE setPrice)
public:
ShoeDescription(QObject *parent = 0);
@@ -72,10 +72,11 @@ private:
qreal m_price;
};
-class Person : public QObject {
-Q_OBJECT
-Q_PROPERTY(QString name READ name WRITE setName)
-Q_PROPERTY(ShoeDescription *shoe READ shoe)
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(ShoeDescription *shoe READ shoe)
public:
Person(QObject *parent = 0);
@@ -88,14 +89,16 @@ private:
ShoeDescription m_shoe;
};
-class Boy : public Person {
-Q_OBJECT
+class Boy : public Person
+{
+ Q_OBJECT
public:
Boy(QObject * parent = 0);
};
-class Girl : public Person {
-Q_OBJECT
+class Girl : public Person
+{
+ Q_OBJECT
public:
Girl(QObject * parent = 0);
};
diff --git a/examples/declarative/extending/valuesource/valuesource.pro b/examples/declarative/extending/valuesource/valuesource.pro
index d3409b6..0626c98 100644
--- a/examples/declarative/extending/valuesource/valuesource.pro
+++ b/examples/declarative/extending/valuesource/valuesource.pro
@@ -8,10 +8,10 @@ QT += declarative
SOURCES += main.cpp \
person.cpp \
birthdayparty.cpp \
- happybirthday.cpp
+ happybirthdaysong.cpp
HEADERS += person.h \
birthdayparty.h \
- happybirthday.h
+ happybirthdaysong.h
RESOURCES += valuesource.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/declarative/extending/valuesource
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS valuesource.pro
diff --git a/examples/declarative/fillmode/fillmode.qmlproject b/examples/declarative/fillmode/fillmode.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/fillmode/fillmode.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/flipable/flipable.qmlproject b/examples/declarative/flipable/flipable.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/flipable/flipable.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/focus/Core/GridMenu.qml b/examples/declarative/focus/Core/GridMenu.qml
index c37b17a..3f727fd 100644
--- a/examples/declarative/focus/Core/GridMenu.qml
+++ b/examples/declarative/focus/Core/GridMenu.qml
@@ -43,9 +43,7 @@ FocusScope {
onClicked: {
GridView.view.currentIndex = index
- container.focus = true
- gridMenu.focus = true
- mainView.focus = true
+ container.forceFocus()
}
}
diff --git a/examples/declarative/focus/Core/ListViewDelegate.qml b/examples/declarative/focus/Core/ListViewDelegate.qml
index 96324d7..14e2548 100644
--- a/examples/declarative/focus/Core/ListViewDelegate.qml
+++ b/examples/declarative/focus/Core/ListViewDelegate.qml
@@ -1,45 +1,40 @@
import Qt 4.7
-Component {
- Item {
- id: container
- x: 5; width: ListView.view.width - 10; height: 60
+Item {
+ id: container
+ x: 5; width: ListView.view.width - 10; height: 60
- Rectangle {
- id: content
- anchors.centerIn: parent; width: container.width - 40; height: container.height - 10
- color: "transparent"
- smooth: true
- radius: 10
+ Rectangle {
+ id: content
+ anchors.centerIn: parent; width: container.width - 40; height: container.height - 10
+ color: "transparent"
+ smooth: true
+ radius: 10
- Rectangle { color: "#91AA9D"; x: 3; y: 3; width: parent.width - 6; height: parent.height - 6; radius: 8 }
- Text {
- text: "List element " + (index + 1); color: "#193441"; font.bold: false; anchors.centerIn: parent
- font.pixelSize: 14
- }
+ Rectangle { color: "#91AA9D"; x: 3; y: 3; width: parent.width - 6; height: parent.height - 6; radius: 8 }
+ Text {
+ text: "List element " + (index + 1); color: "#193441"; font.bold: false; anchors.centerIn: parent
+ font.pixelSize: 14
}
+ }
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- hoverEnabled: true
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ hoverEnabled: true
- onClicked: {
- ListView.view.currentIndex = index
- container.focus = true
- ListView.view.focus = true
- listViews.focus = true
- mainView.focus = true
- }
+ onClicked: {
+ ListView.view.currentIndex = index
+ container.forceFocus()
}
+ }
- states: State {
- name: "active"; when: container.focus == true
- PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 }
- }
+ states: State {
+ name: "active"; when: container.focus == true
+ PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 }
+ }
- transitions: Transition {
- NumberAnimation { properties: "scale"; duration: 100 }
- }
+ transitions: Transition {
+ NumberAnimation { properties: "scale"; duration: 100 }
}
}
diff --git a/examples/declarative/focus/Core/ListViews.qml b/examples/declarative/focus/Core/ListViews.qml
index f4384c8..089f821 100644
--- a/examples/declarative/focus/Core/ListViews.qml
+++ b/examples/declarative/focus/Core/ListViews.qml
@@ -10,7 +10,7 @@ FocusScope {
y: wantsFocus ? 10 : 40; width: parent.width / 3; height: parent.height - 20
focus: true
KeyNavigation.up: gridMenu; KeyNavigation.left: contextMenu; KeyNavigation.right: list2
- model: 10
+ model: 10; cacheBuffer: 200
delegate: ListViewDelegate {}
Behavior on y {
@@ -22,7 +22,7 @@ FocusScope {
id: list2
y: wantsFocus ? 10 : 40; x: parent.width / 3; width: parent.width / 3; height: parent.height - 20
KeyNavigation.up: gridMenu; KeyNavigation.left: list1; KeyNavigation.right: list3
- model: 10
+ model: 10; cacheBuffer: 200
delegate: ListViewDelegate {}
Behavior on y {
@@ -34,7 +34,7 @@ FocusScope {
id: list3
y: wantsFocus ? 10 : 40; x: 2 * parent.width / 3; width: parent.width / 3; height: parent.height - 20
KeyNavigation.up: gridMenu; KeyNavigation.left: list2
- model: 10
+ model: 10; cacheBuffer: 200
delegate: ListViewDelegate {}
Behavior on y {
diff --git a/examples/declarative/focus/focus.qmlproject b/examples/declarative/focus/focus.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/focus/focus.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/fonts/fonts.qmlproject b/examples/declarative/fonts/fonts.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/fonts/fonts.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/gestures/gestures.qmlproject b/examples/declarative/gestures/gestures.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/gestures/gestures.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/gridview/gridview.qmlproject b/examples/declarative/gridview/gridview.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/gridview/gridview.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/imageprovider/imageprovider.qmlproject b/examples/declarative/imageprovider/imageprovider.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/imageprovider/imageprovider.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/images/images.qmlproject b/examples/declarative/images/images.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/images/images.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/layouts/layouts.qmlproject b/examples/declarative/layouts/layouts.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/layouts/layouts.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/listmodel-threaded/dataloader.js b/examples/declarative/listmodel-threaded/dataloader.js
index eac7478..d720f09 100644
--- a/examples/declarative/listmodel-threaded/dataloader.js
+++ b/examples/declarative/listmodel-threaded/dataloader.js
@@ -1,14 +1,9 @@
// ![0]
WorkerScript.onMessage = function(msg) {
- console.log("Worker told to", msg.action);
-
if (msg.action == 'appendCurrentTime') {
var data = {'time': new Date().toTimeString()};
msg.model.append(data);
msg.model.sync(); // updates the changes to the list
-
- var msgToSend = {'msg': 'Model updated!'};
- WorkerScript.sendMessage(msgToSend);
}
}
// ![0]
diff --git a/examples/declarative/listmodel-threaded/listmodel-threaded.qmlproject b/examples/declarative/listmodel-threaded/listmodel-threaded.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/listmodel-threaded/listmodel-threaded.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/listmodel-threaded/timedisplay.qml b/examples/declarative/listmodel-threaded/timedisplay.qml
index 80ac9fa..bad7010 100644
--- a/examples/declarative/listmodel-threaded/timedisplay.qml
+++ b/examples/declarative/listmodel-threaded/timedisplay.qml
@@ -15,9 +15,6 @@ ListView {
WorkerScript {
id: worker
source: "dataloader.js"
- onMessage: {
- console.log("Worker said", messageObject.msg);
- }
}
Timer {
diff --git a/examples/declarative/listview/listview.qmlproject b/examples/declarative/listview/listview.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/listview/listview.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/mousearea/mousearea.qmlproject b/examples/declarative/mousearea/mousearea.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/mousearea/mousearea.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/objectlistmodel/objectlistmodel.qmlproject b/examples/declarative/objectlistmodel/objectlistmodel.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/objectlistmodel/objectlistmodel.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/package/package.qmlproject b/examples/declarative/package/package.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/package/package.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/parallax/parallax.qmlproject b/examples/declarative/parallax/parallax.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/parallax/parallax.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/plugins/plugins.qmlproject b/examples/declarative/plugins/plugins.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/plugins/plugins.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/progressbar/progressbar.qmlproject b/examples/declarative/progressbar/progressbar.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/progressbar/progressbar.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/proxywidgets/proxywidgets.qmlproject b/examples/declarative/proxywidgets/proxywidgets.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/proxywidgets/proxywidgets.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/scrollbar/scrollbar.qmlproject b/examples/declarative/scrollbar/scrollbar.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/scrollbar/scrollbar.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/searchbox/searchbox.qmlproject b/examples/declarative/searchbox/searchbox.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/searchbox/searchbox.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/slideswitch/slideswitch.qmlproject b/examples/declarative/slideswitch/slideswitch.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/slideswitch/slideswitch.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/sql/sql.qmlproject b/examples/declarative/sql/sql.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/sql/sql.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/states/states.qmlproject b/examples/declarative/states/states.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/states/states.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/tabwidget/tabwidget.qmlproject b/examples/declarative/tabwidget/tabwidget.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/tabwidget/tabwidget.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/tic-tac-toe/tic-tac-toe.qmlproject b/examples/declarative/tic-tac-toe/tic-tac-toe.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/tic-tac-toe/tic-tac-toe.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/tutorials/samegame/samegame2/samegame.js b/examples/declarative/tutorials/samegame/samegame2/samegame.js
index 9809c1d..81da31b 100644
--- a/examples/declarative/tutorials/samegame/samegame2/samegame.js
+++ b/examples/declarative/tutorials/samegame/samegame2/samegame.js
@@ -35,7 +35,7 @@ function startNewGame() {
function createBlock(column, row) {
if (component == null)
- component = createComponent("Block.qml");
+ component = Qt.createComponent("Block.qml");
// Note that if Block.qml was not a local file, component.isReady would be
// false and we should wait for the component's statusChanged() signal to
diff --git a/examples/declarative/tutorials/samegame/samegame3/samegame.js b/examples/declarative/tutorials/samegame/samegame3/samegame.js
index c12def7..eaf47d9 100644
--- a/examples/declarative/tutorials/samegame/samegame3/samegame.js
+++ b/examples/declarative/tutorials/samegame/samegame3/samegame.js
@@ -32,7 +32,7 @@ function startNewGame() {
function createBlock(column, row) {
if (component == null)
- component = createComponent("Block.qml");
+ component = Qt.createComponent("Block.qml");
// Note that if Block.qml was not a local file, component.isReady would be
// false and we should wait for the component's statusChanged() signal to
diff --git a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
index 7800b6e..c527f66 100755
--- a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
+++ b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
@@ -43,7 +43,7 @@ function startNewGame() {
function createBlock(column, row) {
if (component == null)
- component = createComponent("content/BoomBlock.qml");
+ component = Qt.createComponent("content/BoomBlock.qml");
// Note that if Block.qml was not a local file, component.isReady would be
// false and we should wait for the component's statusChanged() signal to
diff --git a/examples/declarative/tutorials/tutorials.qmlproject b/examples/declarative/tutorials/tutorials.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/tutorials/tutorials.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/tvtennis/tvtennis.qmlproject b/examples/declarative/tvtennis/tvtennis.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/tvtennis/tvtennis.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/velocity/velocity.qmlproject b/examples/declarative/velocity/velocity.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/velocity/velocity.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/webview/webview.qmlproject b/examples/declarative/webview/webview.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/webview/webview.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/workerscript/workerscript.qmlproject b/examples/declarative/workerscript/workerscript.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/workerscript/workerscript.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/xmldata/xmldata.qmlproject b/examples/declarative/xmldata/xmldata.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/xmldata/xmldata.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/declarative/xmlhttprequest/xmlhttprequest.qmlproject b/examples/declarative/xmlhttprequest/xmlhttprequest.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/declarative/xmlhttprequest/xmlhttprequest.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt
index d5910e3..2cae293 100644
--- a/src/declarative/QmlChanges.txt
+++ b/src/declarative/QmlChanges.txt
@@ -19,6 +19,8 @@ Animation: replace repeat with loops (loops: Animation.Infinite gives the old re
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
+createQmlObject: Moved to the Qt object, now use Qt.createQmlObject()
+createComponent: Moved to the Qt object, now use Qt.createComponent()
C++ API
-------
diff --git a/src/declarative/graphicsitems/qdeclarativeanchors.cpp b/src/declarative/graphicsitems/qdeclarativeanchors.cpp
index 96d0867..f15316b 100644
--- a/src/declarative/graphicsitems/qdeclarativeanchors.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeanchors.cpp
@@ -221,31 +221,31 @@ void QDeclarativeAnchorsPrivate::clearItem(QGraphicsObject *item)
centerIn = 0;
if (left.item == item) {
left.item = 0;
- usedAnchors &= ~QDeclarativeAnchors::HasLeftAnchor;
+ usedAnchors &= ~QDeclarativeAnchors::LeftAnchor;
}
if (right.item == item) {
right.item = 0;
- usedAnchors &= ~QDeclarativeAnchors::HasRightAnchor;
+ usedAnchors &= ~QDeclarativeAnchors::RightAnchor;
}
if (top.item == item) {
top.item = 0;
- usedAnchors &= ~QDeclarativeAnchors::HasTopAnchor;
+ usedAnchors &= ~QDeclarativeAnchors::TopAnchor;
}
if (bottom.item == item) {
bottom.item = 0;
- usedAnchors &= ~QDeclarativeAnchors::HasBottomAnchor;
+ usedAnchors &= ~QDeclarativeAnchors::BottomAnchor;
}
if (vCenter.item == item) {
vCenter.item = 0;
- usedAnchors &= ~QDeclarativeAnchors::HasVCenterAnchor;
+ usedAnchors &= ~QDeclarativeAnchors::VCenterAnchor;
}
if (hCenter.item == item) {
hCenter.item = 0;
- usedAnchors &= ~QDeclarativeAnchors::HasHCenterAnchor;
+ usedAnchors &= ~QDeclarativeAnchors::HCenterAnchor;
}
if (baseline.item == item) {
baseline.item = 0;
- usedAnchors &= ~QDeclarativeAnchors::HasBaselineAnchor;
+ usedAnchors &= ~QDeclarativeAnchors::BaselineAnchor;
}
}
@@ -495,13 +495,13 @@ void QDeclarativeAnchorsPrivate::updateVerticalAnchors()
if (updatingVerticalAnchor < 2) {
++updatingVerticalAnchor;
QGraphicsItemPrivate *itemPrivate = QGraphicsItemPrivate::get(item);
- if (usedAnchors & QDeclarativeAnchors::HasTopAnchor) {
+ if (usedAnchors & QDeclarativeAnchors::TopAnchor) {
//Handle stretching
bool invalid = true;
int height = 0;
- if (usedAnchors & QDeclarativeAnchors::HasBottomAnchor) {
+ if (usedAnchors & QDeclarativeAnchors::BottomAnchor) {
invalid = calcStretch(top, bottom, topMargin, -bottomMargin, QDeclarativeAnchorLine::Top, height);
- } else if (usedAnchors & QDeclarativeAnchors::HasVCenterAnchor) {
+ } else if (usedAnchors & QDeclarativeAnchors::VCenterAnchor) {
invalid = calcStretch(top, vCenter, topMargin, vCenterOffset, QDeclarativeAnchorLine::Top, height);
height *= 2;
}
@@ -514,9 +514,9 @@ void QDeclarativeAnchorsPrivate::updateVerticalAnchors()
} else if (top.item->parentItem() == item->parentItem()) {
setItemY(position(top.item, top.anchorLine) + topMargin);
}
- } else if (usedAnchors & QDeclarativeAnchors::HasBottomAnchor) {
+ } else if (usedAnchors & QDeclarativeAnchors::BottomAnchor) {
//Handle stretching (top + bottom case is handled above)
- if (usedAnchors & QDeclarativeAnchors::HasVCenterAnchor) {
+ if (usedAnchors & QDeclarativeAnchors::VCenterAnchor) {
int height = 0;
bool invalid = calcStretch(vCenter, bottom, vCenterOffset, -bottomMargin,
QDeclarativeAnchorLine::Top, height);
@@ -530,7 +530,7 @@ void QDeclarativeAnchorsPrivate::updateVerticalAnchors()
} else if (bottom.item->parentItem() == item->parentItem()) {
setItemY(position(bottom.item, bottom.anchorLine) - itemPrivate->height() - bottomMargin);
}
- } else if (usedAnchors & QDeclarativeAnchors::HasVCenterAnchor) {
+ } else if (usedAnchors & QDeclarativeAnchors::VCenterAnchor) {
//(stetching handled above)
//Handle vCenter
@@ -540,7 +540,7 @@ void QDeclarativeAnchorsPrivate::updateVerticalAnchors()
} else if (vCenter.item->parentItem() == item->parentItem()) {
setItemY(position(vCenter.item, vCenter.anchorLine) - itemPrivate->height()/2 + vCenterOffset);
}
- } else if (usedAnchors & QDeclarativeAnchors::HasBaselineAnchor) {
+ } else if (usedAnchors & QDeclarativeAnchors::BaselineAnchor) {
//Handle baseline
if (baseline.item == item->parentItem()) {
if (itemPrivate->isDeclarativeItem)
@@ -567,13 +567,13 @@ void QDeclarativeAnchorsPrivate::updateHorizontalAnchors()
if (updatingHorizontalAnchor < 2) {
++updatingHorizontalAnchor;
QGraphicsItemPrivate *itemPrivate = QGraphicsItemPrivate::get(item);
- if (usedAnchors & QDeclarativeAnchors::HasLeftAnchor) {
+ if (usedAnchors & QDeclarativeAnchors::LeftAnchor) {
//Handle stretching
bool invalid = true;
int width = 0;
- if (usedAnchors & QDeclarativeAnchors::HasRightAnchor) {
+ if (usedAnchors & QDeclarativeAnchors::RightAnchor) {
invalid = calcStretch(left, right, leftMargin, -rightMargin, QDeclarativeAnchorLine::Left, width);
- } else if (usedAnchors & QDeclarativeAnchors::HasHCenterAnchor) {
+ } else if (usedAnchors & QDeclarativeAnchors::HCenterAnchor) {
invalid = calcStretch(left, hCenter, leftMargin, hCenterOffset, QDeclarativeAnchorLine::Left, width);
width *= 2;
}
@@ -586,9 +586,9 @@ void QDeclarativeAnchorsPrivate::updateHorizontalAnchors()
} else if (left.item->parentItem() == item->parentItem()) {
setItemX(position(left.item, left.anchorLine) + leftMargin);
}
- } else if (usedAnchors & QDeclarativeAnchors::HasRightAnchor) {
+ } else if (usedAnchors & QDeclarativeAnchors::RightAnchor) {
//Handle stretching (left + right case is handled in updateLeftAnchor)
- if (usedAnchors & QDeclarativeAnchors::HasHCenterAnchor) {
+ if (usedAnchors & QDeclarativeAnchors::HCenterAnchor) {
int width = 0;
bool invalid = calcStretch(hCenter, right, hCenterOffset, -rightMargin,
QDeclarativeAnchorLine::Left, width);
@@ -602,7 +602,7 @@ void QDeclarativeAnchorsPrivate::updateHorizontalAnchors()
} else if (right.item->parentItem() == item->parentItem()) {
setItemX(position(right.item, right.anchorLine) - itemPrivate->width() - rightMargin);
}
- } else if (usedAnchors & QDeclarativeAnchors::HasHCenterAnchor) {
+ } else if (usedAnchors & QDeclarativeAnchors::HCenterAnchor) {
//Handle hCenter
if (hCenter.item == item->parentItem()) {
setItemX(adjustedPosition(hCenter.item, hCenter.anchorLine) - itemPrivate->width()/2 + hCenterOffset);
@@ -630,10 +630,10 @@ void QDeclarativeAnchors::setTop(const QDeclarativeAnchorLine &edge)
if (!d->checkVAnchorValid(edge) || d->top == edge)
return;
- d->usedAnchors |= HasTopAnchor;
+ d->usedAnchors |= TopAnchor;
if (!d->checkVValid()) {
- d->usedAnchors &= ~HasTopAnchor;
+ d->usedAnchors &= ~TopAnchor;
return;
}
@@ -647,7 +647,7 @@ void QDeclarativeAnchors::setTop(const QDeclarativeAnchorLine &edge)
void QDeclarativeAnchors::resetTop()
{
Q_D(QDeclarativeAnchors);
- d->usedAnchors &= ~HasTopAnchor;
+ d->usedAnchors &= ~TopAnchor;
d->remDepend(d->top.item);
d->top = QDeclarativeAnchorLine();
emit topChanged();
@@ -666,10 +666,10 @@ void QDeclarativeAnchors::setBottom(const QDeclarativeAnchorLine &edge)
if (!d->checkVAnchorValid(edge) || d->bottom == edge)
return;
- d->usedAnchors |= HasBottomAnchor;
+ d->usedAnchors |= BottomAnchor;
if (!d->checkVValid()) {
- d->usedAnchors &= ~HasBottomAnchor;
+ d->usedAnchors &= ~BottomAnchor;
return;
}
@@ -683,7 +683,7 @@ void QDeclarativeAnchors::setBottom(const QDeclarativeAnchorLine &edge)
void QDeclarativeAnchors::resetBottom()
{
Q_D(QDeclarativeAnchors);
- d->usedAnchors &= ~HasBottomAnchor;
+ d->usedAnchors &= ~BottomAnchor;
d->remDepend(d->bottom.item);
d->bottom = QDeclarativeAnchorLine();
emit bottomChanged();
@@ -702,10 +702,10 @@ void QDeclarativeAnchors::setVerticalCenter(const QDeclarativeAnchorLine &edge)
if (!d->checkVAnchorValid(edge) || d->vCenter == edge)
return;
- d->usedAnchors |= HasVCenterAnchor;
+ d->usedAnchors |= VCenterAnchor;
if (!d->checkVValid()) {
- d->usedAnchors &= ~HasVCenterAnchor;
+ d->usedAnchors &= ~VCenterAnchor;
return;
}
@@ -719,7 +719,7 @@ void QDeclarativeAnchors::setVerticalCenter(const QDeclarativeAnchorLine &edge)
void QDeclarativeAnchors::resetVerticalCenter()
{
Q_D(QDeclarativeAnchors);
- d->usedAnchors &= ~HasVCenterAnchor;
+ d->usedAnchors &= ~VCenterAnchor;
d->remDepend(d->vCenter.item);
d->vCenter = QDeclarativeAnchorLine();
emit verticalCenterChanged();
@@ -738,10 +738,10 @@ void QDeclarativeAnchors::setBaseline(const QDeclarativeAnchorLine &edge)
if (!d->checkVAnchorValid(edge) || d->baseline == edge)
return;
- d->usedAnchors |= HasBaselineAnchor;
+ d->usedAnchors |= BaselineAnchor;
if (!d->checkVValid()) {
- d->usedAnchors &= ~HasBaselineAnchor;
+ d->usedAnchors &= ~BaselineAnchor;
return;
}
@@ -755,7 +755,7 @@ void QDeclarativeAnchors::setBaseline(const QDeclarativeAnchorLine &edge)
void QDeclarativeAnchors::resetBaseline()
{
Q_D(QDeclarativeAnchors);
- d->usedAnchors &= ~HasBaselineAnchor;
+ d->usedAnchors &= ~BaselineAnchor;
d->remDepend(d->baseline.item);
d->baseline = QDeclarativeAnchorLine();
emit baselineChanged();
@@ -774,10 +774,10 @@ void QDeclarativeAnchors::setLeft(const QDeclarativeAnchorLine &edge)
if (!d->checkHAnchorValid(edge) || d->left == edge)
return;
- d->usedAnchors |= HasLeftAnchor;
+ d->usedAnchors |= LeftAnchor;
if (!d->checkHValid()) {
- d->usedAnchors &= ~HasLeftAnchor;
+ d->usedAnchors &= ~LeftAnchor;
return;
}
@@ -791,7 +791,7 @@ void QDeclarativeAnchors::setLeft(const QDeclarativeAnchorLine &edge)
void QDeclarativeAnchors::resetLeft()
{
Q_D(QDeclarativeAnchors);
- d->usedAnchors &= ~HasLeftAnchor;
+ d->usedAnchors &= ~LeftAnchor;
d->remDepend(d->left.item);
d->left = QDeclarativeAnchorLine();
emit leftChanged();
@@ -810,10 +810,10 @@ void QDeclarativeAnchors::setRight(const QDeclarativeAnchorLine &edge)
if (!d->checkHAnchorValid(edge) || d->right == edge)
return;
- d->usedAnchors |= HasRightAnchor;
+ d->usedAnchors |= RightAnchor;
if (!d->checkHValid()) {
- d->usedAnchors &= ~HasRightAnchor;
+ d->usedAnchors &= ~RightAnchor;
return;
}
@@ -827,7 +827,7 @@ void QDeclarativeAnchors::setRight(const QDeclarativeAnchorLine &edge)
void QDeclarativeAnchors::resetRight()
{
Q_D(QDeclarativeAnchors);
- d->usedAnchors &= ~HasRightAnchor;
+ d->usedAnchors &= ~RightAnchor;
d->remDepend(d->right.item);
d->right = QDeclarativeAnchorLine();
emit rightChanged();
@@ -846,10 +846,10 @@ void QDeclarativeAnchors::setHorizontalCenter(const QDeclarativeAnchorLine &edge
if (!d->checkHAnchorValid(edge) || d->hCenter == edge)
return;
- d->usedAnchors |= HasHCenterAnchor;
+ d->usedAnchors |= HCenterAnchor;
if (!d->checkHValid()) {
- d->usedAnchors &= ~HasHCenterAnchor;
+ d->usedAnchors &= ~HCenterAnchor;
return;
}
@@ -863,7 +863,7 @@ void QDeclarativeAnchors::setHorizontalCenter(const QDeclarativeAnchorLine &edge
void QDeclarativeAnchors::resetHorizontalCenter()
{
Q_D(QDeclarativeAnchors);
- d->usedAnchors &= ~HasHCenterAnchor;
+ d->usedAnchors &= ~HCenterAnchor;
d->remDepend(d->hCenter.item);
d->hCenter = QDeclarativeAnchorLine();
emit horizontalCenterChanged();
@@ -1025,7 +1025,7 @@ void QDeclarativeAnchors::setBaselineOffset(qreal offset)
emit baselineOffsetChanged();
}
-QDeclarativeAnchors::UsedAnchors QDeclarativeAnchors::usedAnchors() const
+QDeclarativeAnchors::Anchors QDeclarativeAnchors::usedAnchors() const
{
Q_D(const QDeclarativeAnchors);
return d->usedAnchors;
@@ -1033,9 +1033,9 @@ QDeclarativeAnchors::UsedAnchors QDeclarativeAnchors::usedAnchors() const
bool QDeclarativeAnchorsPrivate::checkHValid() const
{
- if (usedAnchors & QDeclarativeAnchors::HasLeftAnchor &&
- usedAnchors & QDeclarativeAnchors::HasRightAnchor &&
- usedAnchors & QDeclarativeAnchors::HasHCenterAnchor) {
+ if (usedAnchors & QDeclarativeAnchors::LeftAnchor &&
+ usedAnchors & QDeclarativeAnchors::RightAnchor &&
+ usedAnchors & QDeclarativeAnchors::HCenterAnchor) {
qmlInfo(item) << QDeclarativeAnchors::tr("Cannot specify left, right, and hcenter anchors.");
return false;
}
@@ -1064,15 +1064,15 @@ bool QDeclarativeAnchorsPrivate::checkHAnchorValid(QDeclarativeAnchorLine anchor
bool QDeclarativeAnchorsPrivate::checkVValid() const
{
- if (usedAnchors & QDeclarativeAnchors::HasTopAnchor &&
- usedAnchors & QDeclarativeAnchors::HasBottomAnchor &&
- usedAnchors & QDeclarativeAnchors::HasVCenterAnchor) {
+ if (usedAnchors & QDeclarativeAnchors::TopAnchor &&
+ usedAnchors & QDeclarativeAnchors::BottomAnchor &&
+ usedAnchors & QDeclarativeAnchors::VCenterAnchor) {
qmlInfo(item) << QDeclarativeAnchors::tr("Cannot specify top, bottom, and vcenter anchors.");
return false;
- } else if (usedAnchors & QDeclarativeAnchors::HasBaselineAnchor &&
- (usedAnchors & QDeclarativeAnchors::HasTopAnchor ||
- usedAnchors & QDeclarativeAnchors::HasBottomAnchor ||
- usedAnchors & QDeclarativeAnchors::HasVCenterAnchor)) {
+ } else if (usedAnchors & QDeclarativeAnchors::BaselineAnchor &&
+ (usedAnchors & QDeclarativeAnchors::TopAnchor ||
+ usedAnchors & QDeclarativeAnchors::BottomAnchor ||
+ usedAnchors & QDeclarativeAnchors::VCenterAnchor)) {
qmlInfo(item) << QDeclarativeAnchors::tr("Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.");
return false;
}
diff --git a/src/declarative/graphicsitems/qdeclarativeanchors_p.h b/src/declarative/graphicsitems/qdeclarativeanchors_p.h
index f2e57cc..1bd7608 100644
--- a/src/declarative/graphicsitems/qdeclarativeanchors_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeanchors_p.h
@@ -83,18 +83,18 @@ public:
QDeclarativeAnchors(QGraphicsObject *item, QObject *parent=0);
virtual ~QDeclarativeAnchors();
- enum UsedAnchor {
- HasLeftAnchor = 0x01,
- HasRightAnchor = 0x02,
- HasTopAnchor = 0x04,
- HasBottomAnchor = 0x08,
- HasHCenterAnchor = 0x10,
- HasVCenterAnchor = 0x20,
- HasBaselineAnchor = 0x40,
- Horizontal_Mask = HasLeftAnchor | HasRightAnchor | HasHCenterAnchor,
- Vertical_Mask = HasTopAnchor | HasBottomAnchor | HasVCenterAnchor | HasBaselineAnchor
+ enum Anchor {
+ LeftAnchor = 0x01,
+ RightAnchor = 0x02,
+ TopAnchor = 0x04,
+ BottomAnchor = 0x08,
+ HCenterAnchor = 0x10,
+ VCenterAnchor = 0x20,
+ BaselineAnchor = 0x40,
+ Horizontal_Mask = LeftAnchor | RightAnchor | HCenterAnchor,
+ Vertical_Mask = TopAnchor | BottomAnchor | VCenterAnchor | BaselineAnchor
};
- Q_DECLARE_FLAGS(UsedAnchors, UsedAnchor)
+ Q_DECLARE_FLAGS(Anchors, Anchor)
QDeclarativeAnchorLine left() const;
void setLeft(const QDeclarativeAnchorLine &edge);
@@ -156,7 +156,7 @@ public:
void setCenterIn(QGraphicsObject *);
void resetCenterIn();
- UsedAnchors usedAnchors() const;
+ Anchors usedAnchors() const;
void classBegin();
void componentComplete();
@@ -188,7 +188,7 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_widgetGeometryChanged())
Q_PRIVATE_SLOT(d_func(), void _q_widgetDestroyed(QObject *obj))
};
-Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativeAnchors::UsedAnchors)
+Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativeAnchors::Anchors)
QT_END_NAMESPACE
diff --git a/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h b/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h
index f8489aa..05be6c5 100644
--- a/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h
@@ -139,7 +139,7 @@ public:
void centerInChanged();
QGraphicsObject *item;
- QDeclarativeAnchors::UsedAnchors usedAnchors;
+ QDeclarativeAnchors::Anchors usedAnchors;
QGraphicsObject *fill;
QGraphicsObject *centerIn;
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
index a76d88e..7b9b5e0 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
@@ -655,7 +655,7 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
rejectY = true;
}
if (!rejectY && stealMouse) {
- vData.move.setValue(newY);
+ vData.move.setValue(qRound(newY));
moved = true;
}
if (qAbs(dy) > QApplication::startDragDistance())
@@ -682,7 +682,7 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
rejectX = true;
}
if (!rejectX && stealMouse) {
- hData.move.setValue(newX);
+ hData.move.setValue(qRound(newX));
moved = true;
}
diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index 23140fa..f6666f2 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -347,6 +347,7 @@ public:
void QDeclarativeGridViewPrivate::init()
{
Q_Q(QDeclarativeGridView);
+ QObject::connect(q, SIGNAL(movementEnded()), q, SLOT(animStopped()));
q->setFlag(QGraphicsItem::ItemIsFocusScope);
q->setFlickDirection(QDeclarativeFlickable::VerticalFlick);
addItemChangeListener(this, Geometry);
@@ -747,18 +748,31 @@ void QDeclarativeGridViewPrivate::fixupPosition()
void QDeclarativeGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal maxExtent)
{
Q_Q(QDeclarativeGridView);
+ if ((flow == QDeclarativeGridView::TopToBottom && &data == &vData)
+ || (flow == QDeclarativeGridView::LeftToRight && &data == &hData))
+ return;
+
int oldDuration = fixupDuration;
fixupDuration = moveReason == Mouse ? fixupDuration : 0;
if (haveHighlightRange && highlightRange == QDeclarativeGridView::StrictlyEnforceRange) {
- if (currentItem && currentItem->rowPos() - position() != highlightRangeStart) {
- qreal pos = currentItem->rowPos() - highlightRangeStart;
+ if (currentItem) {
+ updateHighlight();
+ qreal pos = currentItem->rowPos();
+ qreal viewPos = position();
+ if (viewPos < pos + rowSize() - highlightRangeEnd)
+ viewPos = pos + rowSize() - highlightRangeEnd;
+ if (viewPos > pos - highlightRangeStart)
+ viewPos = pos - highlightRangeStart;
+
timeline.reset(data.move);
- if (fixupDuration) {
- timeline.move(data.move, -pos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
- } else {
- data.move.setValue(-pos);
- q->viewportMoved();
+ if (viewPos != position()) {
+ if (fixupDuration) {
+ timeline.move(data.move, -viewPos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
+ } else {
+ data.move.setValue(-viewPos);
+ q->viewportMoved();
+ }
}
vTime = timeline.time();
}
@@ -803,7 +817,7 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
maxDistance = qAbs(minExtent - data.move.value());
}
}
- if (snapMode != QDeclarativeGridView::SnapToRow && highlightRange != QDeclarativeGridView::StrictlyEnforceRange)
+ if (snapMode == QDeclarativeGridView::NoSnap && highlightRange != QDeclarativeGridView::StrictlyEnforceRange)
data.flickTarget = minExtent;
} else {
if (data.move.value() > maxExtent) {
@@ -814,7 +828,7 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
maxDistance = qAbs(maxExtent - data.move.value());
}
}
- if (snapMode != QDeclarativeGridView::SnapToRow && highlightRange != QDeclarativeGridView::StrictlyEnforceRange)
+ if (snapMode == QDeclarativeGridView::NoSnap && highlightRange != QDeclarativeGridView::StrictlyEnforceRange)
data.flickTarget = maxExtent;
}
if (maxDistance > 0 || overShoot) {
@@ -1510,12 +1524,12 @@ void QDeclarativeGridView::viewportMoved()
if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange && d->highlight) {
// reposition highlight
qreal pos = d->highlight->rowPos();
- qreal viewPos = qRound(d->position());
- if (pos > viewPos + d->highlightRangeEnd - 1 - d->rowSize())
- pos = viewPos + d->highlightRangeEnd - 1 - d->rowSize();
+ qreal viewPos = d->position();
+ if (pos > viewPos + d->highlightRangeEnd - d->rowSize())
+ pos = viewPos + d->highlightRangeEnd - d->rowSize();
if (pos < viewPos + d->highlightRangeStart)
pos = viewPos + d->highlightRangeStart;
- d->highlight->setPosition(d->highlight->colPos(), pos);
+ d->highlight->setPosition(d->highlight->colPos(), qRound(pos));
// update current index
int idx = d->snapIndex();
@@ -1538,8 +1552,10 @@ qreal QDeclarativeGridView::minYExtent() const
if (d->flow == QDeclarativeGridView::TopToBottom)
return QDeclarativeFlickable::minYExtent();
qreal extent = -d->startPosition();
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange)
+ if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
extent += d->highlightRangeStart;
+ extent = qMax(extent, -(d->rowPosAt(0) + d->rowSize() - d->highlightRangeEnd));
+ }
return extent;
}
@@ -1550,8 +1566,9 @@ qreal QDeclarativeGridView::maxYExtent() const
return QDeclarativeFlickable::maxYExtent();
qreal extent;
if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- extent = -(d->endPosition() - d->highlightRangeEnd);
- extent = qMax(extent, -(d->rowPosAt(d->model->count()-1) - d->highlightRangeStart));
+ extent = -(d->rowPosAt(d->model->count()-1) - d->highlightRangeStart);
+ if (d->highlightRangeEnd != d->highlightRangeStart)
+ extent = qMin(extent, -(d->endPosition() - d->highlightRangeEnd + 1));
} else {
extent = -(d->endPosition() - height());
}
@@ -1567,8 +1584,10 @@ qreal QDeclarativeGridView::minXExtent() const
if (d->flow == QDeclarativeGridView::LeftToRight)
return QDeclarativeFlickable::minXExtent();
qreal extent = -d->startPosition();
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange)
+ if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
extent += d->highlightRangeStart;
+ extent = qMax(extent, -(d->rowPosAt(0) + d->rowSize() - d->highlightRangeEnd));
+ }
return extent;
}
@@ -1579,8 +1598,9 @@ qreal QDeclarativeGridView::maxXExtent() const
return QDeclarativeFlickable::maxXExtent();
qreal extent;
if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- extent = -(d->endPosition() - d->highlightRangeEnd);
- extent = qMax(extent, -(d->rowPosAt(d->model->count()-1) - d->highlightRangeStart));
+ extent = -(d->rowPosAt(d->model->count()-1) - d->highlightRangeStart);
+ if (d->highlightRangeEnd != d->highlightRangeStart)
+ extent = qMin(extent, -(d->endPosition() - d->highlightRangeEnd + 1));
} else {
extent = -(d->endPosition() - height());
}
@@ -2250,6 +2270,13 @@ void QDeclarativeGridView::destroyingItem(QDeclarativeItem *item)
d->unrequestedItems.remove(item);
}
+void QDeclarativeGridView::animStopped()
+{
+ Q_D(QDeclarativeGridView);
+ d->bufferMode = QDeclarativeGridViewPrivate::NoBuffer;
+ if (d->haveHighlightRange && d->highlightRange == QDeclarativeGridView::StrictlyEnforceRange)
+ d->updateHighlight();
+}
void QDeclarativeGridView::refill()
{
diff --git a/src/declarative/graphicsitems/qdeclarativegridview_p.h b/src/declarative/graphicsitems/qdeclarativegridview_p.h
index 5baa1dd..c06879e 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview_p.h
+++ b/src/declarative/graphicsitems/qdeclarativegridview_p.h
@@ -192,6 +192,7 @@ private Q_SLOTS:
void destroyRemoved();
void createdItem(int index, QDeclarativeItem *item);
void destroyingItem(QDeclarativeItem *item);
+ void animStopped();
private:
void refill();
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index 37c7923..bdd24b6 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -275,17 +275,6 @@ QDeclarativeContents::QDeclarativeContents() : m_x(0), m_y(0), m_width(0), m_hei
{
}
-/*!
- \qmlproperty real Item::childrenRect.x
- \qmlproperty real Item::childrenRect.y
- \qmlproperty real Item::childrenRect.width
- \qmlproperty real Item::childrenRect.height
-
- The childrenRect properties allow an item access to the geometry of its
- children. This property is useful if you have an item that needs to be
- sized to fit its children.
-*/
-
QRectF QDeclarativeContents::rectF() const
{
return QRectF(m_x, m_y, m_width, m_height);
@@ -1457,6 +1446,18 @@ QDeclarativeItem *QDeclarativeItem::parentItem() const
}
/*!
+ \qmlproperty real Item::childrenRect.x
+ \qmlproperty real Item::childrenRect.y
+ \qmlproperty real Item::childrenRect.width
+ \qmlproperty real Item::childrenRect.height
+
+ The childrenRect properties allow an item access to the geometry of its
+ children. This property is useful if you have an item that needs to be
+ sized to fit its children.
+*/
+
+
+/*!
\qmlproperty list<Item> Item::children
\qmlproperty list<Object> Item::resources
@@ -1594,10 +1595,10 @@ void QDeclarativeItemPrivate::transform_clear(QDeclarativeListProperty<QGraphics
}
}
-void QDeclarativeItemPrivate::parentProperty(QObject *o, void *rv, QDeclarativeNotifierEndpoint *e)
+void QDeclarativeItemPrivate::parentProperty(QObject *o, void *rv, QDeclarativeNotifierEndpoint *e)
{
QDeclarativeItem *item = static_cast<QDeclarativeItem*>(o);
- if (e)
+ if (e)
e->connect(&item->d_func()->parentNotifier);
*((QDeclarativeItem **)rv) = item->parentItem();
}
@@ -2279,6 +2280,23 @@ QScriptValue QDeclarativeItem::mapToItem(const QScriptValue &item, qreal x, qrea
return sv;
}
+/*!
+ \qmlmethod Item::forceFocus()
+
+ Force the focus on the item.
+ This method sets the focus on the item and makes sure that all the focus scopes higher in the object hierarchy are given focus.
+*/
+void QDeclarativeItem::forceFocus()
+{
+ setFocus(true);
+ QGraphicsItem *parent = parentItem();
+ while (parent) {
+ if (parent->flags() & QGraphicsItem::ItemIsFocusScope)
+ parent->setFocus(Qt::OtherFocusReason);
+ parent = parent->parentItem();
+ }
+}
+
void QDeclarativeItemPrivate::focusChanged(bool flag)
{
Q_Q(QDeclarativeItem);
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.h b/src/declarative/graphicsitems/qdeclarativeitem.h
index 51889f6..da5a36e 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.h
+++ b/src/declarative/graphicsitems/qdeclarativeitem.h
@@ -157,6 +157,7 @@ public:
Q_INVOKABLE QScriptValue mapFromItem(const QScriptValue &item, qreal x, qreal y) const;
Q_INVOKABLE QScriptValue mapToItem(const QScriptValue &item, qreal x, qreal y) const;
+ Q_INVOKABLE void forceFocus();
QDeclarativeAnchorLine left() const;
QDeclarativeAnchorLine right() const;
diff --git a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp
index 2d01eef..16972a8 100644
--- a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp
@@ -82,7 +82,10 @@
void QDeclarativeItemModule::defineModule()
{
-#ifndef QT_NO_MOVIE
+#ifdef QT_NO_MOVIE
+ qmlRegisterTypeNotAvailable("Qt",4,6,"AnimatedImage",
+ qApp->translate("QDeclarativeAnimatedImage","Qt was built without support for QMovie"));
+#else
qmlRegisterType<QDeclarativeAnimatedImage>("Qt",4,6,"AnimatedImage");
#endif
qmlRegisterType<QDeclarativeBorderImage>("Qt",4,6,"BorderImage");
@@ -141,17 +144,20 @@ void QDeclarativeItemModule::defineModule()
qmlRegisterType<QAction>();
qmlRegisterType<QDeclarativePen>();
qmlRegisterType<QDeclarativeFlickableVisibleArea>();
-#ifndef QT_NO_GRAPHICSEFFECT
+#ifdef QT_NO_GRAPHICSEFFECT
+ QString no_graphicseffect = qApp->translate("QGraphicsBlurEffect","Qt was built without support for graphicseffects");
+ qmlRegisterTypeNotAvailable("Qt",4,6,"Blur",no_graphicseffect);
+ qmlRegisterTypeNotAvailable("Qt",4,6,"Colorize",no_graphicseffect);
+ qmlRegisterTypeNotAvailable("Qt",4,6,"DropShadow",no_graphicseffect);
+ qmlRegisterTypeNotAvailable("Qt",4,6,"Opacity",no_graphicseffect);
+#else
qmlRegisterType<QGraphicsEffect>();
qmlRegisterType<QGraphicsBlurEffect>("Qt",4,6,"Blur");
qmlRegisterType<QGraphicsColorizeEffect>("Qt",4,6,"Colorize");
qmlRegisterType<QGraphicsDropShadowEffect>("Qt",4,6,"DropShadow");
qmlRegisterType<QGraphicsOpacityEffect>("Qt",4,6,"Opacity");
#endif
-#ifdef QT_WEBKIT_LIB
- qmlRegisterType<QDeclarativeWebSettings>();
-#endif
- qmlRegisterUncreatableType<QDeclarativeKeyNavigationAttached>("Qt",4,6,"KeyNavigation");
- qmlRegisterUncreatableType<QDeclarativeKeysAttached>("Qt",4,6,"Keys");
+ qmlRegisterUncreatableType<QDeclarativeKeyNavigationAttached>("Qt",4,6,"KeyNavigation",QDeclarativeKeyNavigationAttached::tr("KeyNavigation is only available via attached properties"));
+ qmlRegisterUncreatableType<QDeclarativeKeysAttached>("Qt",4,6,"Keys",QDeclarativeKeysAttached::tr("Keys is only available via attached properties"));
}
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 672f723..a4ca651 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -271,6 +271,28 @@ public:
return 0;
}
+ qreal endPositionAt(int modelIndex) const {
+ if (FxListItem *item = visibleItem(modelIndex))
+ return item->endPosition();
+ if (!visibleItems.isEmpty()) {
+ if (modelIndex < visibleIndex) {
+ int count = visibleIndex - modelIndex;
+ return (*visibleItems.constBegin())->position() - (count - 1) * (averageSize + spacing) - spacing - 1;
+ } else {
+ int idx = visibleItems.count() - 1;
+ while (idx >= 0 && visibleItems.at(idx)->index == -1)
+ --idx;
+ if (idx < 0)
+ idx = visibleIndex;
+ else
+ idx = visibleItems.at(idx)->index;
+ int count = modelIndex - idx - 1;
+ return (*(--visibleItems.constEnd()))->endPosition() + count * (averageSize + spacing);
+ }
+ }
+ return 0;
+ }
+
QString sectionAt(int modelIndex) {
if (FxListItem *item = visibleItem(modelIndex))
return item->attached->section();
@@ -396,13 +418,16 @@ public:
}
void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) {
+ Q_Q(QDeclarativeListView);
QDeclarativeFlickablePrivate::itemGeometryChanged(item, newGeometry, oldGeometry);
- if (item != viewport) {
+ if (item != viewport && (!highlight || item != highlight->item)) {
if ((orient == QDeclarativeListView::Vertical && newGeometry.height() != oldGeometry.height())
|| (orient == QDeclarativeListView::Horizontal && newGeometry.width() != oldGeometry.width())) {
scheduleLayout();
}
}
+ if (trackedItem && trackedItem->item == item)
+ q->trackedPositionChanged();
}
// for debugging only
@@ -567,13 +592,8 @@ void QDeclarativeListViewPrivate::releaseItem(FxListItem *item)
Q_Q(QDeclarativeListView);
if (!item || !model)
return;
- if (trackedItem == item) {
- const char *notifier1 = orient == QDeclarativeListView::Vertical ? SIGNAL(yChanged()) : SIGNAL(xChanged());
- const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged()) : SIGNAL(widthChanged());
- QObject::disconnect(trackedItem->item, notifier1, q, SLOT(trackedPositionChanged()));
- QObject::disconnect(trackedItem->item, notifier2, q, SLOT(trackedPositionChanged()));
+ if (trackedItem == item)
trackedItem = 0;
- }
QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item->item));
itemPrivate->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
if (model->release(item->item) == 0) {
@@ -770,21 +790,7 @@ void QDeclarativeListViewPrivate::updateTrackedItem()
FxListItem *item = currentItem;
if (highlight)
item = highlight;
-
- const char *notifier1 = orient == QDeclarativeListView::Vertical ? SIGNAL(yChanged()) : SIGNAL(xChanged());
- const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged()) : SIGNAL(widthChanged());
-
- if (trackedItem && item != trackedItem) {
- QObject::disconnect(trackedItem->item, notifier1, q, SLOT(trackedPositionChanged()));
- QObject::disconnect(trackedItem->item, notifier2, q, SLOT(trackedPositionChanged()));
- trackedItem = 0;
- }
-
- if (!trackedItem && item) {
- trackedItem = item;
- QObject::connect(trackedItem->item, notifier1, q, SLOT(trackedPositionChanged()));
- QObject::connect(trackedItem->item, notifier2, q, SLOT(trackedPositionChanged()));
- }
+ trackedItem = item;
if (trackedItem)
q->trackedPositionChanged();
}
@@ -833,6 +839,8 @@ void QDeclarativeListViewPrivate::createHighlight()
highlight->item->setWidth(currentItem->item->width());
}
}
+ QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
+ itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
const QLatin1String posProp(orient == QDeclarativeListView::Vertical ? "y" : "x");
highlightPosAnimator = new QSmoothedAnimation(q);
highlightPosAnimator->target = QDeclarativeProperty(highlight->item, posProp);
@@ -1106,14 +1114,23 @@ void QDeclarativeListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m
fixupDuration = moveReason == Mouse ? fixupDuration : 0;
if (haveHighlightRange && highlightRange == QDeclarativeListView::StrictlyEnforceRange) {
- if (currentItem && currentItem->position() - position() != highlightRangeStart) {
- qreal pos = currentItem->position() - highlightRangeStart;
+ if (currentItem) {
+ updateHighlight();
+ qreal pos = currentItem->position();
+ qreal viewPos = position();
+ if (viewPos < pos + currentItem->size() - highlightRangeEnd)
+ viewPos = pos + currentItem->size() - highlightRangeEnd;
+ if (viewPos > pos - highlightRangeStart)
+ viewPos = pos - highlightRangeStart;
+
timeline.reset(data.move);
- if (fixupDuration) {
- timeline.move(data.move, -pos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
- } else {
- data.move.setValue(-pos);
- q->viewportMoved();
+ if (viewPos != position()) {
+ if (fixupDuration) {
+ timeline.move(data.move, -viewPos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
+ } else {
+ data.move.setValue(-viewPos);
+ q->viewportMoved();
+ }
}
vTime = timeline.time();
}
@@ -2066,12 +2083,12 @@ void QDeclarativeListView::viewportMoved()
if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange && d->highlight) {
// reposition highlight
qreal pos = d->highlight->position();
- qreal viewPos = qRound(d->position());
- if (pos > viewPos + d->highlightRangeEnd - 1 - d->highlight->size())
- pos = viewPos + d->highlightRangeEnd - 1 - d->highlight->size();
+ qreal viewPos = d->position();
+ if (pos > viewPos + d->highlightRangeEnd - d->highlight->size())
+ pos = viewPos + d->highlightRangeEnd - d->highlight->size();
if (pos < viewPos + d->highlightRangeStart)
pos = viewPos + d->highlightRangeStart;
- d->highlight->setPosition(pos);
+ d->highlight->setPosition(qRound(pos));
// update current index
int idx = d->snapIndex();
@@ -2128,8 +2145,10 @@ qreal QDeclarativeListView::minYExtent() const
d->minExtent = -d->startPosition();
if (d->header && d->visibleItems.count())
d->minExtent += d->header->size();
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange)
+ if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
d->minExtent += d->highlightRangeStart;
+ d->minExtent = qMax(d->minExtent, -(d->endPositionAt(0) - d->highlightRangeEnd + 1));
+ }
d->minExtentDirty = false;
}
@@ -2143,10 +2162,12 @@ qreal QDeclarativeListView::maxYExtent() const
return height();
if (d->maxExtentDirty) {
if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- d->maxExtent = -(d->endPosition() - d->highlightRangeEnd);
- d->maxExtent = qMax(d->maxExtent, -(d->positionAt(d->model->count()-1) - d->highlightRangeStart));
- } else
+ d->maxExtent = -(d->positionAt(d->model->count()-1) - d->highlightRangeStart);
+ if (d->highlightRangeEnd != d->highlightRangeStart)
+ d->maxExtent = qMin(d->maxExtent, -(d->endPosition() - d->highlightRangeEnd + 1));
+ } else {
d->maxExtent = -(d->endPosition() - height() + 1);
+ }
if (d->footer)
d->maxExtent -= d->footer->size();
qreal minY = minYExtent();
@@ -2166,8 +2187,10 @@ qreal QDeclarativeListView::minXExtent() const
d->minExtent = -d->startPosition();
if (d->header)
d->minExtent += d->header->size();
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange)
+ if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
d->minExtent += d->highlightRangeStart;
+ d->minExtent = qMax(d->minExtent, -(d->endPositionAt(0) - d->highlightRangeEnd + 1));
+ }
d->minExtentDirty = false;
}
@@ -2181,10 +2204,12 @@ qreal QDeclarativeListView::maxXExtent() const
return width();
if (d->maxExtentDirty) {
if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- d->maxExtent = -(d->endPosition() - d->highlightRangeEnd);
- d->maxExtent = qMax(d->maxExtent, -(d->positionAt(d->model->count()-1) - d->highlightRangeStart));
- } else
+ d->maxExtent = -(d->positionAt(d->model->count()-1) - d->highlightRangeStart);
+ if (d->highlightRangeEnd != d->highlightRangeStart)
+ d->maxExtent = qMin(d->maxExtent, -(d->endPosition() - d->highlightRangeEnd + 1));
+ } else {
d->maxExtent = -(d->endPosition() - width() + 1);
+ }
if (d->footer)
d->maxExtent -= d->footer->size();
qreal minX = minXExtent();
@@ -2393,7 +2418,7 @@ void QDeclarativeListView::trackedPositionChanged()
if (!d->trackedItem || !d->currentItem)
return;
if (!isFlicking() && !d->moving && d->moveReason == QDeclarativeListViewPrivate::SetIndex) {
- const qreal trackedPos = d->trackedItem->position();
+ const qreal trackedPos = qCeil(d->trackedItem->position());
const qreal viewPos = d->position();
if (d->haveHighlightRange) {
if (d->highlightRange == StrictlyEnforceRange) {
@@ -2827,6 +2852,8 @@ void QDeclarativeListView::animStopped()
{
Q_D(QDeclarativeListView);
d->bufferMode = QDeclarativeListViewPrivate::NoBuffer;
+ if (d->haveHighlightRange && d->highlightRange == QDeclarativeListView::StrictlyEnforceRange)
+ d->updateHighlight();
}
QDeclarativeListViewAttached *QDeclarativeListView::qmlAttachedProperties(QObject *obj)
diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp
index 3f257b5..bdd2c87 100644
--- a/src/declarative/graphicsitems/qdeclarativeloader.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp
@@ -132,12 +132,15 @@ void QDeclarativeLoaderPrivate::initResize()
\endcode
If the Loader source is changed, any previous items instantiated
- will be destroyed. Setting \c source to an empty string
+ will be destroyed. Setting \c source to an empty string, or setting
+ sourceComponent to \e undefined
will destroy the currently instantiated items, freeing resources
and leaving the Loader empty. For example:
\code
pageLoader.source = ""
+ or
+ pageLoader.sourceComponent = undefined
\endcode
unloads "Page1.qml" and frees resources consumed by it.
@@ -271,6 +274,11 @@ void QDeclarativeLoader::setSourceComponent(QDeclarativeComponent *comp)
}
}
+void QDeclarativeLoader::resetSourceComponent()
+{
+ setSourceComponent(0);
+}
+
void QDeclarativeLoaderPrivate::_q_sourceLoaded()
{
Q_Q(QDeclarativeLoader);
diff --git a/src/declarative/graphicsitems/qdeclarativeloader_p.h b/src/declarative/graphicsitems/qdeclarativeloader_p.h
index 65538a8..e9fd8e9 100644
--- a/src/declarative/graphicsitems/qdeclarativeloader_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeloader_p.h
@@ -58,7 +58,7 @@ class Q_DECLARATIVE_EXPORT QDeclarativeLoader : public QDeclarativeItem
Q_ENUMS(ResizeMode)
Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
- Q_PROPERTY(QDeclarativeComponent *sourceComponent READ sourceComponent WRITE setSourceComponent NOTIFY sourceChanged)
+ Q_PROPERTY(QDeclarativeComponent *sourceComponent READ sourceComponent WRITE setSourceComponent RESET resetSourceComponent NOTIFY sourceChanged)
Q_PROPERTY(ResizeMode resizeMode READ resizeMode WRITE setResizeMode NOTIFY resizeModeChanged)
Q_PROPERTY(QGraphicsObject *item READ item NOTIFY itemChanged)
Q_PROPERTY(Status status READ status NOTIFY statusChanged)
@@ -73,6 +73,7 @@ public:
QDeclarativeComponent *sourceComponent() const;
void setSourceComponent(QDeclarativeComponent *);
+ void resetSourceComponent();
enum Status { Null, Ready, Loading, Error };
Status status() const;
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
index bdb4868..126d041 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp
+++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
@@ -50,7 +50,8 @@ QT_BEGIN_NAMESPACE
static const int PressAndHoldDelay = 800;
QDeclarativeDrag::QDeclarativeDrag(QObject *parent)
-: QObject(parent), _target(0), _axis(XandYAxis), _xmin(0), _xmax(0), _ymin(0), _ymax(0)
+: QObject(parent), _target(0), _axis(XandYAxis), _xmin(0), _xmax(0), _ymin(0), _ymax(0),
+_active(false)
{
}
@@ -144,6 +145,19 @@ void QDeclarativeDrag::setYmax(qreal m)
emit maximumYChanged();
}
+bool QDeclarativeDrag::active() const
+{
+ return _active;
+}
+
+void QDeclarativeDrag::setActive(bool drag)
+{
+ if (_active == drag)
+ return;
+ _active = drag;
+ emit activeChanged();
+}
+
QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate()
{
delete drag;
@@ -389,7 +403,8 @@ void QDeclarativeMouseArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
d->dragX = drag()->axis() & QDeclarativeDrag::XAxis;
d->dragY = drag()->axis() & QDeclarativeDrag::YAxis;
}
- d->dragged = false;
+ if (d->drag)
+ d->drag->setActive(false);
setHovered(true);
d->startScene = event->scenePos();
// we should only start timer if pressAndHold is connected to.
@@ -438,7 +453,7 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
qreal dx = qAbs(curLocalPos.x() - startLocalPos.x());
qreal dy = qAbs(curLocalPos.y() - startLocalPos.y());
if ((d->dragX && !(dx < dragThreshold)) || (d->dragY && !(dy < dragThreshold)))
- d->dragged = true;
+ d->drag->setActive(true);
if (!keepMouseGrab()) {
if ((!d->dragY && dy < dragThreshold && d->dragX && dx > dragThreshold)
|| (!d->dragX && dx < dragThreshold && d->dragY && dy > dragThreshold)
@@ -447,7 +462,7 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
}
}
- if (d->dragX && d->dragged) {
+ if (d->dragX && d->drag->active()) {
qreal x = (curLocalPos.x() - startLocalPos.x()) + d->startX;
if (x < drag()->xmin())
x = drag()->xmin();
@@ -455,7 +470,7 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
x = drag()->xmax();
drag()->target()->setX(x);
}
- if (d->dragY && d->dragged) {
+ if (d->dragY && d->drag->active()) {
qreal y = (curLocalPos.y() - startLocalPos.y()) + d->startY;
if (y < drag()->ymin())
y = drag()->ymin();
@@ -481,6 +496,8 @@ void QDeclarativeMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
} else {
d->saveEvent(event);
setPressed(false);
+ if (d->drag)
+ d->drag->setActive(false);
// If we don't accept hover, we need to reset containsMouse.
if (!acceptHoverEvents())
setHovered(false);
@@ -547,8 +564,10 @@ bool QDeclarativeMouseArea::sceneEvent(QEvent *event)
// state
d->pressed = false;
setKeepMouseGrab(false);
+ QDeclarativeMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, false);
+ emit released(&me);
emit pressedChanged();
- //emit hoveredChanged();
+ setHovered(false);
}
}
return rv;
@@ -559,7 +578,8 @@ void QDeclarativeMouseArea::timerEvent(QTimerEvent *event)
Q_D(QDeclarativeMouseArea);
if (event->timerId() == d->pressAndHoldTimer.timerId()) {
d->pressAndHoldTimer.stop();
- if (d->pressed && d->dragged == false && d->hovered == true) {
+ bool dragged = d->drag && d->drag->active();
+ if (d->pressed && dragged == false && d->hovered == true) {
d->longPress = true;
QDeclarativeMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress);
emit pressAndHold(&me);
@@ -659,7 +679,8 @@ void QDeclarativeMouseArea::setAcceptedButtons(Qt::MouseButtons buttons)
bool QDeclarativeMouseArea::setPressed(bool p)
{
Q_D(QDeclarativeMouseArea);
- bool isclick = d->pressed == true && p == false && d->dragged == false && d->hovered == true;
+ bool dragged = d->drag && d->drag->active();
+ bool isclick = d->pressed == true && p == false && dragged == false && d->hovered == true;
if (d->pressed != p) {
d->pressed = p;
@@ -693,6 +714,7 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag()
/*!
\qmlproperty Item MouseArea::drag.target
+ \qmlproperty bool MouseArea::drag.active
\qmlproperty Axis MouseArea::drag.axis
\qmlproperty real MouseArea::drag.minimumX
\qmlproperty real MouseArea::drag.maximumX
@@ -703,6 +725,7 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag()
\list
\i \c target specifies the item to drag.
+ \i \c active specifies if the target item is being currently dragged.
\i \c axis specifies whether dragging can be done horizontally (XAxis), vertically (YAxis), or both (XandYAxis)
\i the minimum and maximum properties limit how far the target can be dragged along the corresponding axes.
\endlist
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea_p.h b/src/declarative/graphicsitems/qdeclarativemousearea_p.h
index 630840f..4f7df62 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea_p.h
+++ b/src/declarative/graphicsitems/qdeclarativemousearea_p.h
@@ -61,6 +61,7 @@ class Q_DECLARATIVE_EXPORT QDeclarativeDrag : public QObject
Q_PROPERTY(qreal maximumX READ xmax WRITE setXmax NOTIFY maximumXChanged)
Q_PROPERTY(qreal minimumY READ ymin WRITE setYmin NOTIFY minimumYChanged)
Q_PROPERTY(qreal maximumY READ ymax WRITE setYmax NOTIFY maximumYChanged)
+ Q_PROPERTY(bool active READ active NOTIFY activeChanged)
//### consider drag and drop
public:
@@ -84,6 +85,9 @@ public:
qreal ymax() const;
void setYmax(qreal);
+ bool active() const;
+ void setActive(bool);
+
Q_SIGNALS:
void targetChanged();
void axisChanged();
@@ -91,6 +95,7 @@ Q_SIGNALS:
void maximumXChanged();
void minimumYChanged();
void maximumYChanged();
+ void activeChanged();
private:
QGraphicsObject *_target;
@@ -99,6 +104,7 @@ private:
qreal _xmax;
qreal _ymin;
qreal _ymax;
+ bool _active;
Q_DISABLE_COPY(QDeclarativeDrag)
};
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
index 4973957..4e909ff 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
@@ -67,7 +67,8 @@ class QDeclarativeMouseAreaPrivate : public QDeclarativeItemPrivate
public:
QDeclarativeMouseAreaPrivate()
- : absorb(true), hovered(false), pressed(false), longPress(false), drag(0)
+ : absorb(true), hovered(false), pressed(false), longPress(false),
+ moved(false), drag(0)
{
}
@@ -100,7 +101,6 @@ public:
bool moved : 1;
bool dragX : 1;
bool dragY : 1;
- bool dragged : 1;
QDeclarativeDrag *drag;
QPointF startScene;
qreal startX;
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
index 207232d..7fa8cc4 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
@@ -262,6 +262,7 @@ public:
}
if (m_roles.count() == 1)
m_roleNames.insert("modelData", m_roles.at(0));
+ m_roleNames.insert("hasModelChildren", 0);
} else if (m_listAccessor) {
m_roleNames.insert("modelData", 0);
if (m_listAccessor->type() == QDeclarativeListAccessor::Instance) {
@@ -473,11 +474,16 @@ QVariant QDeclarativeVisualDataModelDataMetaObject::initialValue(int propId)
}
} else if (model->m_abstractItemModel) {
model->ensureRoles();
- QHash<QByteArray,int>::const_iterator it = model->m_roleNames.find(propName);
- if (it != model->m_roleNames.end()) {
- roleToProp.insert(*it, propId);
+ if (propName == "hasModelChildren") {
QModelIndex index = model->m_abstractItemModel->index(data->m_index, 0, model->m_root);
- return model->m_abstractItemModel->data(index, *it);
+ return model->m_abstractItemModel->hasChildren(index);
+ } else {
+ QHash<QByteArray,int>::const_iterator it = model->m_roleNames.find(propName);
+ if (it != model->m_roleNames.end()) {
+ roleToProp.insert(*it, propId);
+ QModelIndex index = model->m_abstractItemModel->index(data->m_index, 0, model->m_root);
+ return model->m_abstractItemModel->data(index, *it);
+ }
}
}
Q_ASSERT(!"Can never be reached");
@@ -784,34 +790,13 @@ void QDeclarativeVisualDataModel::setDelegate(QDeclarativeComponent *delegate)
\qmlproperty QModelIndex VisualDataModel::rootIndex
QAbstractItemModel provides a heirachical tree of data, whereas
- QML only operates on list data. rootIndex allows the children of
+ QML only operates on list data. \c rootIndex allows the children of
any node in a QAbstractItemModel to be provided by this model.
This property only affects models of type QAbstractItemModel.
\code
// main.cpp
- Q_DECLARE_METATYPE(QModelIndex)
-
- class MyModel : public QDirModel
- {
- Q_OBJECT
- public:
- MyModel(QDeclarativeContext *ctxt) : QDirModel(), context(ctxt) {
- QHash<int,QByteArray> roles = roleNames();
- roles.insert(FilePathRole, "path");
- setRoleNames(roles);
- context->setContextProperty("myModel", this);
- context->setContextProperty("myRoot", QVariant::fromValue(index(0,0,QModelIndex())));
- }
-
- Q_INVOKABLE void setRoot(const QString &path) {
- QModelIndex root = index(path);
- context->setContextProperty("myRoot", QVariant::fromValue(root));
- }
-
- QDeclarativeContext *context;
- };
int main(int argc, char ** argv)
{
@@ -819,7 +804,8 @@ void QDeclarativeVisualDataModel::setDelegate(QDeclarativeComponent *delegate)
QDeclarativeView view;
- MyModel model(view.rootContext());
+ QDirModel model;
+ view.rootContext()->setContextProperty("myModel", &model);
view.setSource(QUrl("qrc:view.qml"));
view.show();
@@ -835,18 +821,18 @@ void QDeclarativeVisualDataModel::setDelegate(QDeclarativeComponent *delegate)
import Qt 4.7
ListView {
+ id: view
width: 200
height: 200
model: VisualDataModel {
model: myModel
- rootIndex: myRoot
delegate: Component {
Rectangle {
- height: 25; width: 100
- Text { text: path }
+ height: 25; width: 200
+ Text { text: filePath }
MouseArea {
anchors.fill: parent;
- onClicked: myModel.setRoot(path)
+ onClicked: if (hasModelChildren) view.model.rootIndex = view.model.modelIndex(index)
}
}
}
@@ -854,19 +840,21 @@ void QDeclarativeVisualDataModel::setDelegate(QDeclarativeComponent *delegate)
}
\endcode
+ \sa modelIndex(), parentModelIndex()
*/
-QModelIndex QDeclarativeVisualDataModel::rootIndex() const
+QVariant QDeclarativeVisualDataModel::rootIndex() const
{
Q_D(const QDeclarativeVisualDataModel);
- return d->m_root;
+ return QVariant::fromValue(d->m_root);
}
-void QDeclarativeVisualDataModel::setRootIndex(const QModelIndex &root)
+void QDeclarativeVisualDataModel::setRootIndex(const QVariant &root)
{
Q_D(QDeclarativeVisualDataModel);
- if (d->m_root != root) {
+ QModelIndex modelIndex = qvariant_cast<QModelIndex>(root);
+ if (d->m_root != modelIndex) {
int oldCount = d->modelCount();
- d->m_root = root;
+ d->m_root = modelIndex;
int newCount = d->modelCount();
if (d->m_delegate && oldCount)
emit itemsRemoved(0, oldCount);
@@ -878,6 +866,47 @@ void QDeclarativeVisualDataModel::setRootIndex(const QModelIndex &root)
}
}
+
+/*!
+ \qmlmethod QModelIndex VisualDataModel::modelIndex(int index)
+
+ QAbstractItemModel provides a heirachical tree of data, whereas
+ QML only operates on list data. This function assists in using
+ tree models in QML.
+
+ Returns a QModelIndex for the specified index.
+ This value can be assigned to rootIndex.
+
+ \sa rootIndex
+*/
+QVariant QDeclarativeVisualDataModel::modelIndex(int idx) const
+{
+ Q_D(const QDeclarativeVisualDataModel);
+ if (d->m_abstractItemModel)
+ return QVariant::fromValue(d->m_abstractItemModel->index(idx, 0, d->m_root));
+ return QVariant::fromValue(QModelIndex());
+}
+
+/*!
+ \qmlmethod QModelIndex VisualDataModel::parentModelIndex()
+
+ QAbstractItemModel provides a heirachical tree of data, whereas
+ QML only operates on list data. This function assists in using
+ tree models in QML.
+
+ Returns a QModelIndex for the parent of the current rootIndex.
+ This value can be assigned to rootIndex.
+
+ \sa rootIndex
+*/
+QVariant QDeclarativeVisualDataModel::parentModelIndex() const
+{
+ Q_D(const QDeclarativeVisualDataModel);
+ if (d->m_abstractItemModel)
+ return QVariant::fromValue(d->m_abstractItemModel->parent(d->m_root));
+ return QVariant::fromValue(QModelIndex());
+}
+
QString QDeclarativeVisualDataModel::part() const
{
Q_D(const QDeclarativeVisualDataModel);
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
index d34bcaf..0a9173f 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
@@ -150,7 +150,7 @@ class Q_DECLARATIVE_EXPORT QDeclarativeVisualDataModel : public QDeclarativeVisu
Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate)
Q_PROPERTY(QString part READ part WRITE setPart)
Q_PROPERTY(QObject *parts READ parts CONSTANT)
- Q_PROPERTY(QModelIndex rootIndex READ rootIndex WRITE setRootIndex NOTIFY rootIndexChanged)
+ Q_PROPERTY(QVariant rootIndex READ rootIndex WRITE setRootIndex NOTIFY rootIndexChanged)
Q_CLASSINFO("DefaultProperty", "delegate")
public:
QDeclarativeVisualDataModel();
@@ -163,8 +163,11 @@ public:
QDeclarativeComponent *delegate() const;
void setDelegate(QDeclarativeComponent *);
- QModelIndex rootIndex() const;
- void setRootIndex(const QModelIndex &root);
+ QVariant rootIndex() const;
+ void setRootIndex(const QVariant &root);
+
+ Q_INVOKABLE QVariant modelIndex(int idx) const;
+ Q_INVOKABLE QVariant parentModelIndex() const;
QString part() const;
void setPart(const QString &);
diff --git a/src/declarative/qml/qdeclarative.h b/src/declarative/qml/qdeclarative.h
index 6e36d4f..d75f0a8 100644
--- a/src/declarative/qml/qdeclarative.h
+++ b/src/declarative/qml/qdeclarative.h
@@ -100,6 +100,7 @@ int qmlRegisterType()
qRegisterMetaType<T *>(pointerName.constData()),
qRegisterMetaType<QDeclarativeListProperty<T> >(listName.constData()),
0, 0,
+ QString(),
0, 0, 0, 0, &T::staticMetaObject,
@@ -118,8 +119,10 @@ int qmlRegisterType()
return QDeclarativePrivate::registerType(type);
}
+int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message);
+
template<typename T>
-int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
+int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& reason)
{
QByteArray name(T::staticMetaObject.className());
@@ -132,6 +135,7 @@ int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMin
qRegisterMetaType<T *>(pointerName.constData()),
qRegisterMetaType<QDeclarativeListProperty<T> >(listName.constData()),
0, 0,
+ reason,
uri, versionMajor, versionMinor, qmlName, &T::staticMetaObject,
@@ -164,6 +168,7 @@ int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const c
qRegisterMetaType<T *>(pointerName.constData()),
qRegisterMetaType<QDeclarativeListProperty<T> >(listName.constData()),
sizeof(T), QDeclarativePrivate::createInto<T>,
+ QString(),
uri, versionMajor, versionMinor, qmlName, &T::staticMetaObject,
@@ -196,6 +201,7 @@ int qmlRegisterExtendedType()
qRegisterMetaType<T *>(pointerName.constData()),
qRegisterMetaType<QDeclarativeListProperty<T> >(listName.constData()),
0, 0,
+ QString(),
0, 0, 0, 0, &T::staticMetaObject,
@@ -236,6 +242,7 @@ int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor,
qRegisterMetaType<T *>(pointerName.constData()),
qRegisterMetaType<QDeclarativeListProperty<T> >(listName.constData()),
sizeof(T), QDeclarativePrivate::createInto<T>,
+ QString(),
uri, versionMajor, versionMinor, qmlName, &T::staticMetaObject,
@@ -276,9 +283,9 @@ int qmlRegisterInterface(const char *typeName)
template<typename T>
int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor,
- const char *qmlName, const char *typeName, QDeclarativeCustomParser *parser)
+ const char *qmlName, QDeclarativeCustomParser *parser)
{
- QByteArray name(typeName);
+ QByteArray name(T::staticMetaObject.className());
QByteArray pointerName(name + '*');
QByteArray listName("QDeclarativeListProperty<" + name + ">");
@@ -289,6 +296,7 @@ int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor,
qRegisterMetaType<T *>(pointerName.constData()),
qRegisterMetaType<QDeclarativeListProperty<T> >(listName.constData()),
sizeof(T), QDeclarativePrivate::createInto<T>,
+ QString(),
uri, versionMajor, versionMinor, qmlName, &T::staticMetaObject,
diff --git a/src/declarative/qml/qdeclarativebinding.cpp b/src/declarative/qml/qdeclarativebinding.cpp
index d759427..d44e7fb 100644
--- a/src/declarative/qml/qdeclarativebinding.cpp
+++ b/src/declarative/qml/qdeclarativebinding.cpp
@@ -156,6 +156,9 @@ void QDeclarativeBinding::update(QDeclarativePropertyPrivate::WriteFlags flags)
QScriptValue scriptValue = d->scriptValue(0, &isUndefined);
if (data->property.propertyTypeCategory() == QDeclarativeProperty::List) {
value = ep->scriptValueToVariant(scriptValue, qMetaTypeId<QList<QObject *> >());
+ } else if (scriptValue.isNull() &&
+ data->property.propertyTypeCategory() == QDeclarativeProperty::Object) {
+ value = QVariant::fromValue((QObject *)0);
} else {
value = ep->scriptValueToVariant(scriptValue, data->property.propertyType());
if (value.userType() == QMetaType::QObjectStar && !qvariant_cast<QObject*>(value)) {
@@ -168,6 +171,7 @@ void QDeclarativeBinding::update(QDeclarativePropertyPrivate::WriteFlags flags)
}
}
+
if (data->error.isValid()) {
} else if (isUndefined && data->property.isResettable()) {
@@ -357,8 +361,10 @@ void QDeclarativeAbstractBinding::removeFromObject()
void QDeclarativeAbstractBinding::clear()
{
- if (m_mePtr)
+ if (m_mePtr) {
*m_mePtr = 0;
+ m_mePtr = 0;
+ }
}
QString QDeclarativeAbstractBinding::expression() const
diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index 2614764..10cd886 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -571,8 +571,12 @@ bool QDeclarativeCompiler::compile(QDeclarativeEngine *engine,
QDeclarativeScriptParser::TypeReference *parserRef = unit->data.referencedTypes().at(ii);
if (tref.type) {
ref.type = tref.type;
- if (!ref.type->isCreatable())
- COMPILE_EXCEPTION(parserRef->refObjects.first(), tr( "Element is not creatable."));
+ if (!ref.type->isCreatable()) {
+ QString err = ref.type->noCreationReason();
+ if (err.isEmpty())
+ err = tr( "Element is not creatable.");
+ COMPILE_EXCEPTION(parserRef->refObjects.first(), err);
+ }
} else if (tref.unit) {
ref.component = tref.unit->toComponent(engine);
@@ -864,12 +868,14 @@ bool QDeclarativeCompiler::buildObject(Object *obj, const BindingContext &ctxt)
defaultProperty->release();
// Compile custom parser parts
- if (isCustomParser && !customProps.isEmpty()) {
+ if (isCustomParser/* && !customProps.isEmpty()*/) {
QDeclarativeCustomParser *cp = output->types.at(obj->type).type->customParser();
cp->clearErrors();
cp->compiler = this;
+ cp->object = obj;
obj->custom = cp->compile(customProps);
cp->compiler = 0;
+ cp->object = 0;
foreach (QDeclarativeError err, cp->errors()) {
err.setUrl(output->url);
exceptions << err;
@@ -1185,6 +1191,13 @@ bool QDeclarativeCompiler::buildComponent(QDeclarativeParser::Object *obj,
(obj->defaultProperty->values.count() == 1 && !obj->defaultProperty->values.first()->object)))
COMPILE_EXCEPTION(obj, tr("Invalid component body specification"));
+ if (!obj->dynamicProperties.isEmpty())
+ COMPILE_EXCEPTION(obj, tr("Component objects cannot declare new properties."));
+ if (!obj->dynamicSignals.isEmpty())
+ COMPILE_EXCEPTION(obj, tr("Component objects cannot declare new signals."));
+ if (!obj->dynamicSlots.isEmpty())
+ COMPILE_EXCEPTION(obj, tr("Component objects cannot declare new functions."));
+
Object *root = 0;
if (obj->defaultProperty && obj->defaultProperty->values.count())
root = obj->defaultProperty->values.first()->object;
diff --git a/src/declarative/qml/qdeclarativecontext.cpp b/src/declarative/qml/qdeclarativecontext.cpp
index 2041e0a..ae4223e 100644
--- a/src/declarative/qml/qdeclarativecontext.cpp
+++ b/src/declarative/qml/qdeclarativecontext.cpp
@@ -208,6 +208,12 @@ QDeclarativeContext::~QDeclarativeContext()
d->data->destroy();
}
+/*!
+ Returns whether the context is valid.
+
+ To be valid, a context must have a engine, and it's contextObject(), if any,
+ must not have been deleted.
+*/
bool QDeclarativeContext::isValid() const
{
Q_D(const QDeclarativeContext);
diff --git a/src/declarative/qml/qdeclarativecustomparser.cpp b/src/declarative/qml/qdeclarativecustomparser.cpp
index 1a97315..472a883 100644
--- a/src/declarative/qml/qdeclarativecustomparser.cpp
+++ b/src/declarative/qml/qdeclarativecustomparser.cpp
@@ -89,6 +89,8 @@ using namespace QDeclarativeParser;
by \a data, which is a block of data previously returned by a call
to compile().
+ Errors should be reported using qmlInfo(object).
+
The \a object will be an instance of the TypeClass specified by QML_REGISTER_CUSTOM_TYPE.
*/
@@ -235,6 +237,24 @@ void QDeclarativeCustomParser::clearErrors()
}
/*!
+ Reports an error with the given \a description.
+
+ This can only be used during the compile() step. For errors during setCustomData(), use qmlInfo().
+
+ An error is generated referring to the position of the element in the source file.
+*/
+void QDeclarativeCustomParser::error(const QString& description)
+{
+ Q_ASSERT(object);
+ QDeclarativeError error;
+ QString exceptionDescription;
+ error.setLine(object->location.start.line);
+ error.setColumn(object->location.start.column);
+ error.setDescription(description);
+ exceptions << error;
+}
+
+/*!
Reports an error in parsing \a prop, with the given \a description.
An error is generated referring to the position of \a node in the source file.
diff --git a/src/declarative/qml/qdeclarativecustomparser_p.h b/src/declarative/qml/qdeclarativecustomparser_p.h
index da0358a..0e397c5 100644
--- a/src/declarative/qml/qdeclarativecustomparser_p.h
+++ b/src/declarative/qml/qdeclarativecustomparser_p.h
@@ -113,7 +113,7 @@ private:
class Q_DECLARATIVE_EXPORT QDeclarativeCustomParser
{
public:
- QDeclarativeCustomParser() : compiler(0) {}
+ QDeclarativeCustomParser() : compiler(0), object(0) {}
virtual ~QDeclarativeCustomParser() {}
void clearErrors();
@@ -124,6 +124,7 @@ public:
QList<QDeclarativeError> errors() const { return exceptions; }
protected:
+ void error(const QString& description);
void error(const QDeclarativeCustomParserProperty&, const QString& description);
void error(const QDeclarativeCustomParserNode&, const QString& description);
@@ -132,6 +133,7 @@ protected:
private:
QList<QDeclarativeError> exceptions;
QDeclarativeCompiler *compiler;
+ QDeclarativeParser::Object *object;
friend class QDeclarativeCompiler;
};
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index 9cd6b3c..a41eaa9 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -152,10 +152,10 @@ void QDeclarativeEnginePrivate::defineModule()
}
QDeclarativeEnginePrivate::QDeclarativeEnginePrivate(QDeclarativeEngine *e)
-: captureProperties(false), rootContext(0), currentExpression(0), isDebugging(false),
- outputWarningsToStdErr(true), contextClass(0), sharedContext(0), sharedScope(0),
- objectClass(0), valueTypeClass(0), globalClass(0), cleanup(0), erroredBindings(0),
- inProgressCreations(0), scriptEngine(this), workerScriptEngine(0), componentAttached(0),
+: captureProperties(false), rootContext(0), currentExpression(0), isDebugging(false),
+ outputWarningsToStdErr(true), contextClass(0), sharedContext(0), sharedScope(0),
+ objectClass(0), valueTypeClass(0), globalClass(0), cleanup(0), erroredBindings(0),
+ inProgressCreations(0), scriptEngine(this), workerScriptEngine(0), componentAttached(0),
inBeginCreate(false), networkAccessManager(0), networkAccessManagerFactory(0),
typeManager(e), uniqueId(1)
{
@@ -254,19 +254,19 @@ QDeclarativeScriptEngine::QDeclarativeScriptEngine(QDeclarativeEnginePrivate *pr
qtObject.setProperty(QLatin1String("quit"), newFunction(QDeclarativeEnginePrivate::quit, 0));
qtObject.setProperty(QLatin1String("resolvedUrl"),newFunction(QDeclarativeScriptEngine::resolvedUrl, 1));
+ if (mainthread) {
+ qtObject.setProperty(QLatin1String("createQmlObject"),
+ newFunction(QDeclarativeEnginePrivate::createQmlObject, 1));
+ qtObject.setProperty(QLatin1String("createComponent"),
+ newFunction(QDeclarativeEnginePrivate::createComponent, 1));
+ }
+
//firebug/webkit compat
QScriptValue consoleObject = newObject();
consoleObject.setProperty(QLatin1String("log"),newFunction(QDeclarativeEnginePrivate::consoleLog, 1));
consoleObject.setProperty(QLatin1String("debug"),newFunction(QDeclarativeEnginePrivate::consoleLog, 1));
globalObject().setProperty(QLatin1String("console"), consoleObject);
- if (mainthread) {
- globalObject().setProperty(QLatin1String("createQmlObject"),
- newFunction(QDeclarativeEnginePrivate::createQmlObject, 1));
- globalObject().setProperty(QLatin1String("createComponent"),
- newFunction(QDeclarativeEnginePrivate::createComponent, 1));
- }
-
// translation functions need to be installed
// before the global script class is constructed (QTBUG-6437)
installTranslatorFunctions();
@@ -353,7 +353,7 @@ void QDeclarativePrivate::qdeclarativeelement_destructor(QObject *o)
QObjectPrivate *p = QObjectPrivate::get(o);
Q_ASSERT(p->declarativeData);
QDeclarativeData *d = static_cast<QDeclarativeData*>(p->declarativeData);
- if (d->ownContext)
+ if (d->ownContext)
d->context->destroy();
}
@@ -394,7 +394,7 @@ void QDeclarativeEnginePrivate::init()
QDeclarativeWorkerScriptEngine *QDeclarativeEnginePrivate::getWorkerScriptEngine()
{
Q_Q(QDeclarativeEngine);
- if (!workerScriptEngine)
+ if (!workerScriptEngine)
workerScriptEngine = new QDeclarativeWorkerScriptEngine(q);
return workerScriptEngine;
}
@@ -419,7 +419,7 @@ QDeclarativeWorkerScriptEngine *QDeclarativeEnginePrivate::getWorkerScriptEngine
QDeclarativeComponent component(&engine);
component.setData("import Qt 4.7\nText { text: \"Hello world!\" }", QUrl());
QDeclarativeItem *item = qobject_cast<QDeclarativeItem *>(component.create());
-
+
//add item to view, etc
...
\endcode
@@ -648,7 +648,7 @@ void QDeclarativeEngine::setBaseUrl(const QUrl &url)
{
Q_D(QDeclarativeEngine);
d->baseUrl = url;
-}
+}
/*!
Returns true if warning messages will be output to stderr in addition
@@ -667,7 +667,7 @@ bool QDeclarativeEngine::outputWarningsToStandardError() const
If \a enabled is true, any warning messages generated by QML will be
output to stderr and emitted by the warnings() signal. If \a enabled
- is false, on the warnings() signal will be emitted. This allows
+ is false, on the warnings() signal will be emitted. This allows
applications to handle warning output themselves.
The default value is true.
@@ -781,7 +781,7 @@ void QDeclarativeEngine::setObjectOwnership(QObject *object, ObjectOwnership own
QDeclarativeEngine::ObjectOwnership QDeclarativeEngine::objectOwnership(QObject *object)
{
QDeclarativeData *ddata = QDeclarativeData::get(object, false);
- if (!ddata)
+ if (!ddata)
return CppOwnership;
else
return ddata->indestructible?CppOwnership:JavaScriptOwnership;
@@ -803,7 +803,7 @@ void qmlExecuteDeferred(QObject *object)
QDeclarativeComponentPrivate::complete(ep, &state);
- if (!state.errors.isEmpty())
+ if (!state.errors.isEmpty())
ep->warning(state.errors);
}
}
@@ -844,7 +844,7 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre
return rv;
}
-QObject *qmlAttachedPropertiesObject(int *idCache, const QObject *object,
+QObject *qmlAttachedPropertiesObject(int *idCache, const QObject *object,
const QMetaObject *attachedMetaObject, bool create)
{
if (*idCache == -1)
@@ -863,7 +863,7 @@ void QDeclarativeData::destroyed(QObject *object)
if (attachedProperties)
delete attachedProperties;
- if (nextContextObject)
+ if (nextContextObject)
nextContextObject->prevContextObject = prevContextObject;
if (prevContextObject)
*prevContextObject = nextContextObject;
@@ -910,7 +910,7 @@ void QDeclarativeData::parentChanged(QObject *, QObject *parent)
bool QDeclarativeData::hasBindingBit(int bit) const
{
- if (bindingBitsSize > bit)
+ if (bindingBitsSize > bit)
return bindingBits[bit / 32] & (1 << (bit % 32));
else
return false;
@@ -918,7 +918,7 @@ bool QDeclarativeData::hasBindingBit(int bit) const
void QDeclarativeData::clearBindingBit(int bit)
{
- if (bindingBitsSize > bit)
+ if (bindingBitsSize > bit)
bindingBits[bit / 32] &= ~(1 << (bit % 32));
}
@@ -931,10 +931,10 @@ void QDeclarativeData::setBindingBit(QObject *obj, int bit)
int arraySize = (props + 31) / 32;
int oldArraySize = bindingBitsSize / 32;
- bindingBits = (quint32 *)realloc(bindingBits,
+ bindingBits = (quint32 *)realloc(bindingBits,
arraySize * sizeof(quint32));
- memset(bindingBits + oldArraySize,
+ memset(bindingBits + oldArraySize,
0x00,
sizeof(quint32) * (arraySize - oldArraySize));
@@ -1019,7 +1019,7 @@ QScriptValue QDeclarativeEnginePrivate::createQmlObject(QScriptContext *ctxt, QS
url = context->resolvedUrl(url);
QObject *parentArg = activeEnginePriv->objectClass->toQObject(ctxt->argument(1));
- if(!parentArg)
+ if(!parentArg)
return ctxt->throwError(QDeclarativeEngine::tr("parent object not found"));
QDeclarativeComponent component(activeEngine);
@@ -1027,10 +1027,21 @@ QScriptValue QDeclarativeEnginePrivate::createQmlObject(QScriptContext *ctxt, QS
if(component.isError()) {
QList<QDeclarativeError> errors = component.errors();
- QString errstr = QLatin1String("Qt.createQmlObject(): ");
- foreach (const QDeclarativeError &error, errors)
+ QString errstr = QLatin1String("Qt.createQmlObject() failed to create object: ");
+ QScriptValue arr = ctxt->engine()->newArray(errors.length());
+ int i = 0;
+ foreach (const QDeclarativeError &error, errors){
errstr += QLatin1String(" ") + error.toString() + QLatin1String("\n");
- return ctxt->throwError(errstr);
+ QScriptValue qmlErrObject = ctxt->engine()->newObject();
+ qmlErrObject.setProperty("lineNumber", QScriptValue(error.line()));
+ qmlErrObject.setProperty("columnNumber", QScriptValue(error.column()));
+ qmlErrObject.setProperty("fileName", QScriptValue(error.url().toString()));
+ qmlErrObject.setProperty("message", QScriptValue(error.description()));
+ arr.setProperty(i++, qmlErrObject);
+ }
+ QScriptValue err = ctxt->throwError(errstr);
+ err.setProperty("qmlErrors",arr);
+ return err;
}
if (!component.isReady())
@@ -1040,10 +1051,21 @@ QScriptValue QDeclarativeEnginePrivate::createQmlObject(QScriptContext *ctxt, QS
if(component.isError()) {
QList<QDeclarativeError> errors = component.errors();
- QString errstr = QLatin1String("Qt.createQmlObject(): ");
- foreach (const QDeclarativeError &error, errors)
+ QString errstr = QLatin1String("Qt.createQmlObject() failed to create object: ");
+ QScriptValue arr = ctxt->engine()->newArray(errors.length());
+ int i = 0;
+ foreach (const QDeclarativeError &error, errors){
errstr += QLatin1String(" ") + error.toString() + QLatin1String("\n");
- return ctxt->throwError(errstr);
+ QScriptValue qmlErrObject = ctxt->engine()->newObject();
+ qmlErrObject.setProperty("lineNumber", QScriptValue(error.line()));
+ qmlErrObject.setProperty("columnNumber", QScriptValue(error.column()));
+ qmlErrObject.setProperty("fileName", QScriptValue(error.url().toString()));
+ qmlErrObject.setProperty("message", QScriptValue(error.description()));
+ arr.setProperty(i++, qmlErrObject);
+ }
+ QScriptValue err = ctxt->throwError(errstr);
+ err.setProperty("qmlErrors",arr);
+ return err;
}
Q_ASSERT(obj);
@@ -1343,7 +1365,7 @@ void QDeclarativeEnginePrivate::warning(const QList<QDeclarativeError> &errors)
{
Q_Q(QDeclarativeEngine);
q->warnings(errors);
- if (outputWarningsToStdErr)
+ if (outputWarningsToStdErr)
dumpwarning(errors);
}
@@ -1439,7 +1461,7 @@ QScriptValue QDeclarativeEnginePrivate::tint(QScriptContext *ctxt, QScriptEngine
QScriptValue QDeclarativeEnginePrivate::scriptValueFromVariant(const QVariant &val)
{
if (val.userType() == qMetaTypeId<QDeclarativeListReference>()) {
- QDeclarativeListReferencePrivate *p =
+ QDeclarativeListReferencePrivate *p =
QDeclarativeListReferencePrivate::get((QDeclarativeListReference*)val.constData());
if (p->object) {
return listClass->newList(p->property, p->propertyType);
@@ -1472,7 +1494,7 @@ QVariant QDeclarativeEnginePrivate::scriptValueToVariant(const QScriptValue &val
QScriptDeclarativeClass *dc = QScriptDeclarativeClass::scriptClass(val);
if (dc == objectClass)
return QVariant::fromValue(objectClass->toQObject(val));
- else if (dc == valueTypeClass)
+ else if (dc == valueTypeClass)
return valueTypeClass->toVariant(val);
else if (dc == contextClass)
return QVariant();
@@ -1683,7 +1705,7 @@ public:
if (importType == QDeclarativeScriptParser::Import::Library) {
url.replace(QLatin1Char('.'), QLatin1Char('/'));
bool found = false;
- QString dir;
+ QString dir;
foreach (const QString &p,
@@ -1861,8 +1883,8 @@ static QDeclarativeTypeNameCache *cacheForNamespace(QDeclarativeEngine *engine,
int minor = set.minversions.at(ii);
foreach (QDeclarativeType *type, types) {
- if (type->qmlTypeName().startsWith(base) &&
- type->qmlTypeName().lastIndexOf('/') == (base.length() - 1) &&
+ if (type->qmlTypeName().startsWith(base) &&
+ type->qmlTypeName().lastIndexOf('/') == (base.length() - 1) &&
type->availableInVersion(major,minor))
{
QString name = QString::fromUtf8(type->qmlTypeName().mid(base.length()));
@@ -2031,7 +2053,8 @@ QStringList QDeclarativeEngine::pluginPathList() const
/*!
Sets the list of directories where the engine searches for
- native plugins for imported modules (referenced in the \c qmldir file).
+ native plugins for imported modules (referenced in the \c qmldir file)
+ to \a paths.
By default, the list contains only \c ., i.e. the engine searches
in the directory of the \c qmldir file itself.
@@ -2049,6 +2072,8 @@ void QDeclarativeEngine::setPluginPathList(const QStringList &paths)
Imports the plugin named \a filePath with the \a uri provided.
Returns true if the plugin was successfully imported; otherwise returns false.
+ On failure and if non-null, *\a errorString will be set to a message describing the failure.
+
The plugin has to be a Qt plugin which implements the QDeclarativeExtensionPlugin interface.
*/
bool QDeclarativeEngine::importPlugin(const QString &filePath, const QString &uri, QString *errorString)
diff --git a/src/declarative/qml/qdeclarativeinfo.cpp b/src/declarative/qml/qdeclarativeinfo.cpp
index f6560a6..ffed14e 100644
--- a/src/declarative/qml/qdeclarativeinfo.cpp
+++ b/src/declarative/qml/qdeclarativeinfo.cpp
@@ -80,92 +80,97 @@ QT_BEGIN_NAMESPACE
struct QDeclarativeInfoPrivate
{
+ QDeclarativeInfoPrivate() : ref (1), object(0) {}
+
+ int ref;
const QObject *object;
- QString *buffer;
+ QString buffer;
QList<QDeclarativeError> errors;
};
-QDeclarativeInfo::QDeclarativeInfo(const QObject *object)
-: QDebug((*(QString **)&d) = new QString)
+QDeclarativeInfo::QDeclarativeInfo(QDeclarativeInfoPrivate *p)
+: QDebug(&p->buffer), d(p)
{
- QDeclarativeInfoPrivate *p = new QDeclarativeInfoPrivate;
- p->buffer = (QString *)d;
- d = p;
-
- d->object = object;
nospace();
}
-QDeclarativeInfo::QDeclarativeInfo(const QObject *object, const QList<QDeclarativeError> &errors)
-: QDebug((*(QString **)&d) = new QString)
+QDeclarativeInfo::QDeclarativeInfo(const QDeclarativeInfo &other)
+: QDebug(other), d(other.d)
{
- QDeclarativeInfoPrivate *p = new QDeclarativeInfoPrivate;
- p->buffer = (QString *)d;
- d = p;
-
- d->object = object;
- d->errors = errors;
- nospace();
-}
-
-QDeclarativeInfo::QDeclarativeInfo(const QObject *object, const QDeclarativeError &error)
-: QDebug((*(QString **)&d) = new QString)
-{
- QDeclarativeInfoPrivate *p = new QDeclarativeInfoPrivate;
- p->buffer = (QString *)d;
- d = p;
-
- d->object = object;
- d->errors << error;
- nospace();
+ d->ref++;
}
QDeclarativeInfo::~QDeclarativeInfo()
{
- QList<QDeclarativeError> errors = d->errors;
-
- QDeclarativeEngine *engine = 0;
-
- if (!d->buffer->isEmpty()) {
- QDeclarativeError error;
-
- QObject *object = const_cast<QObject *>(d->object);
-
- if (object) {
- engine = qmlEngine(d->object);
- QString typeName;
- QDeclarativeType *type = QDeclarativeMetaType::qmlType(object->metaObject());
- if (type) {
- typeName = QLatin1String(type->qmlTypeName());
- int lastSlash = typeName.lastIndexOf(QLatin1Char('/'));
- if (lastSlash != -1)
- typeName = typeName.mid(lastSlash+1);
- } else {
- typeName = QString::fromUtf8(object->metaObject()->className());
- int marker = typeName.indexOf(QLatin1String("_QMLTYPE_"));
- if (marker != -1)
- typeName = typeName.left(marker);
+ if (0 == --d->ref) {
+ QList<QDeclarativeError> errors = d->errors;
+
+ QDeclarativeEngine *engine = 0;
+
+ if (!d->buffer.isEmpty()) {
+ QDeclarativeError error;
+
+ QObject *object = const_cast<QObject *>(d->object);
+
+ if (object) {
+ engine = qmlEngine(d->object);
+ QString typeName;
+ QDeclarativeType *type = QDeclarativeMetaType::qmlType(object->metaObject());
+ if (type) {
+ typeName = QLatin1String(type->qmlTypeName());
+ int lastSlash = typeName.lastIndexOf(QLatin1Char('/'));
+ if (lastSlash != -1)
+ typeName = typeName.mid(lastSlash+1);
+ } else {
+ typeName = QString::fromUtf8(object->metaObject()->className());
+ int marker = typeName.indexOf(QLatin1String("_QMLTYPE_"));
+ if (marker != -1)
+ typeName = typeName.left(marker);
+ }
+
+ d->buffer.prepend(QLatin1String("QML ") + typeName + QLatin1String(": "));
+
+ QDeclarativeData *ddata = QDeclarativeData::get(object, false);
+ if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty()) {
+ error.setUrl(ddata->outerContext->url);
+ error.setLine(ddata->lineNumber);
+ error.setColumn(ddata->columnNumber);
+ }
}
- d->buffer->prepend(QLatin1String("QML ") + typeName + QLatin1String(": "));
+ error.setDescription(d->buffer);
- QDeclarativeData *ddata = QDeclarativeData::get(object, false);
- if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty()) {
- error.setUrl(ddata->outerContext->url);
- error.setLine(ddata->lineNumber);
- error.setColumn(ddata->columnNumber);
- }
+ errors.prepend(error);
}
- error.setDescription(*d->buffer);
+ QDeclarativeEnginePrivate::warning(engine, errors);
- errors.prepend(error);
+ delete d;
}
+}
- QDeclarativeEnginePrivate::warning(engine, errors);
+QDeclarativeInfo qmlInfo(const QObject *me)
+{
+ QDeclarativeInfoPrivate *d = new QDeclarativeInfoPrivate;
+ d->object = me;
+ return QDeclarativeInfo(d);
+}
- delete d->buffer;
- delete d;
+QDeclarativeInfo qmlInfo(const QObject *me, const QDeclarativeError &error)
+{
+ QDeclarativeInfoPrivate *d = new QDeclarativeInfoPrivate;
+ d->object = me;
+ d->errors << error;
+ return QDeclarativeInfo(d);
}
+QDeclarativeInfo qmlInfo(const QObject *me, const QList<QDeclarativeError> &errors)
+{
+ QDeclarativeInfoPrivate *d = new QDeclarativeInfoPrivate;
+ d->object = me;
+ d->errors = errors;
+ return QDeclarativeInfo(d);
+}
+
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativeinfo.h b/src/declarative/qml/qdeclarativeinfo.h
index 3d5a111..82f44f2 100644
--- a/src/declarative/qml/qdeclarativeinfo.h
+++ b/src/declarative/qml/qdeclarativeinfo.h
@@ -56,9 +56,7 @@ class QDeclarativeInfoPrivate;
class Q_DECLARATIVE_EXPORT QDeclarativeInfo : public QDebug
{
public:
- QDeclarativeInfo(const QObject *);
- QDeclarativeInfo(const QObject *, const QDeclarativeError &);
- QDeclarativeInfo(const QObject *, const QList<QDeclarativeError> &);
+ QDeclarativeInfo(const QDeclarativeInfo &);
~QDeclarativeInfo();
inline QDeclarativeInfo &operator<<(QChar t) { QDebug::operator<<(t); return *this; }
@@ -86,23 +84,17 @@ public:
inline QDeclarativeInfo &operator<<(const QUrl &t) { static_cast<QDebug &>(*this) << t; return *this; }
private:
+ friend QDeclarativeInfo qmlInfo(const QObject *me);
+ friend QDeclarativeInfo qmlInfo(const QObject *me, const QDeclarativeError &error);
+ friend QDeclarativeInfo qmlInfo(const QObject *me, const QList<QDeclarativeError> &errors);
+
+ QDeclarativeInfo(QDeclarativeInfoPrivate *);
QDeclarativeInfoPrivate *d;
};
-Q_DECLARATIVE_EXPORT inline QDeclarativeInfo qmlInfo(const QObject *me)
-{
- return QDeclarativeInfo(me);
-}
-
-Q_DECLARATIVE_EXPORT inline QDeclarativeInfo qmlInfo(const QObject *me, const QDeclarativeError &error)
-{
- return QDeclarativeInfo(me, error);
-}
-
-Q_DECLARATIVE_EXPORT inline QDeclarativeInfo qmlInfo(const QObject *me, const QList<QDeclarativeError> &errors)
-{
- return QDeclarativeInfo(me, errors);
-}
+Q_DECLARATIVE_EXPORT QDeclarativeInfo qmlInfo(const QObject *me);
+Q_DECLARATIVE_EXPORT QDeclarativeInfo qmlInfo(const QObject *me, const QDeclarativeError &error);
+Q_DECLARATIVE_EXPORT QDeclarativeInfo qmlInfo(const QObject *me, const QList<QDeclarativeError> &errors);
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp
index d41bd43..8fee8a7 100644
--- a/src/declarative/qml/qdeclarativemetatype.cpp
+++ b/src/declarative/qml/qdeclarativemetatype.cpp
@@ -134,6 +134,7 @@ public:
int m_allocationSize;
void (*m_newFunc)(void *);
+ QString m_noCreationReason;
const QMetaObject *m_baseMetaObject;
QDeclarativeAttachedPropertiesFunc m_attachedPropertiesFunc;
@@ -186,6 +187,7 @@ QDeclarativeType::QDeclarativeType(int index, const QDeclarativePrivate::Registe
d->m_listId = type.listId;
d->m_allocationSize = type.objectSize;
d->m_newFunc = type.create;
+ d->m_noCreationReason = type.noCreationReason;
d->m_baseMetaObject = type.metaObject;
d->m_attachedPropertiesFunc = type.attachedPropertiesFunction;
d->m_attachedPropertiesType = type.attachedPropertiesMetaObject;
@@ -221,6 +223,76 @@ bool QDeclarativeType::availableInVersion(int vmajor, int vminor) const
return vmajor > d->m_version_maj || (vmajor == d->m_version_maj && vminor >= d->m_version_min);
}
+static void clone(QMetaObjectBuilder &builder, const QMetaObject *mo,
+ const QMetaObject *ignoreStart, const QMetaObject *ignoreEnd)
+{
+ // Clone Q_CLASSINFO
+ for (int ii = mo->classInfoOffset(); ii < mo->classInfoCount(); ++ii) {
+ QMetaClassInfo info = mo->classInfo(ii);
+
+ int otherIndex = ignoreEnd->indexOfClassInfo(info.name());
+ if (otherIndex >= ignoreStart->classInfoOffset() + ignoreStart->classInfoCount()) {
+ // Skip
+ } else {
+ builder.addClassInfo(info.name(), info.value());
+ }
+ }
+
+ // Clone Q_PROPERTY
+ for (int ii = mo->propertyOffset(); ii < mo->propertyCount(); ++ii) {
+ QMetaProperty property = mo->property(ii);
+
+ int otherIndex = ignoreEnd->indexOfProperty(property.name());
+ if (otherIndex >= ignoreStart->classInfoOffset() + ignoreStart->classInfoCount()) {
+ builder.addProperty(QByteArray("__qml_ignore__") + property.name(), QByteArray("void"));
+ // Skip
+ } else {
+ builder.addProperty(property);
+ }
+ }
+
+ // Clone Q_METHODS
+ for (int ii = mo->methodOffset(); ii < mo->methodCount(); ++ii) {
+ QMetaMethod method = mo->method(ii);
+
+ // More complex - need to search name
+ QByteArray name = method.signature();
+ int parenIdx = name.indexOf('(');
+ if (parenIdx != -1) name = name.left(parenIdx);
+
+
+ bool found = false;
+
+ for (int ii = ignoreStart->methodOffset() + ignoreStart->methodCount();
+ !found && ii < ignoreEnd->methodOffset() + ignoreEnd->methodCount();
+ ++ii) {
+
+ QMetaMethod other = ignoreEnd->method(ii);
+ QByteArray othername = other.signature();
+ int parenIdx = othername.indexOf('(');
+ if (parenIdx != -1) othername = othername.left(parenIdx);
+
+ found = name == othername;
+ }
+
+ QMetaMethodBuilder m = builder.addMethod(method);
+ if (found) // SKIP
+ m.setAccess(QMetaMethod::Private);
+ }
+
+ // Clone Q_ENUMS
+ for (int ii = mo->enumeratorOffset(); ii < mo->enumeratorCount(); ++ii) {
+ QMetaEnum enumerator = mo->enumerator(ii);
+
+ int otherIndex = ignoreEnd->indexOfEnumerator(enumerator.name());
+ if (otherIndex >= ignoreStart->enumeratorOffset() + ignoreStart->enumeratorCount()) {
+ // Skip
+ } else {
+ builder.addEnumerator(enumerator);
+ }
+ }
+}
+
void QDeclarativeTypePrivate::init() const
{
if (m_isSetup) return;
@@ -245,8 +317,9 @@ void QDeclarativeTypePrivate::init() const
QDeclarativeType *t = metaTypeData()->metaObjectToType.value(mo);
if (t) {
if (t->d->m_extFunc) {
- QMetaObject *mmo = new QMetaObject;
- *mmo = *t->d->m_extMetaObject;
+ QMetaObjectBuilder builder;
+ clone(builder, t->d->m_extMetaObject, t->d->m_baseMetaObject, m_baseMetaObject);
+ QMetaObject *mmo = builder.toMetaObject();
mmo->d.superdata = m_baseMetaObject;
if (!m_metaObjects.isEmpty())
m_metaObjects.last().metaObject->d.superdata = mmo;
@@ -318,6 +391,11 @@ QDeclarativeType::CreateFunc QDeclarativeType::createFunction() const
return d->m_newFunc;
}
+QString QDeclarativeType::noCreationReason() const
+{
+ return d->m_noCreationReason;
+}
+
int QDeclarativeType::createSize() const
{
return d->m_allocationSize;
diff --git a/src/declarative/qml/qdeclarativemetatype_p.h b/src/declarative/qml/qdeclarativemetatype_p.h
index 70b7c90..bf6a700 100644
--- a/src/declarative/qml/qdeclarativemetatype_p.h
+++ b/src/declarative/qml/qdeclarativemetatype_p.h
@@ -123,6 +123,7 @@ public:
bool isCreatable() const;
bool isExtendedType() const;
+ QString noCreationReason() const;
bool isInterface() const;
int typeId() const;
diff --git a/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.cpp b/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.cpp
index f5f1a1f..b116129 100644
--- a/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.cpp
+++ b/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.cpp
@@ -45,8 +45,8 @@ QT_BEGIN_NAMESPACE
/*!
\class QDeclarativeNetworkAccessManagerFactory
- \since 4.7
- \brief The QDeclarativeNetworkAccessManagerFactory class provides a factory for QNetworkAccessManager
+ \since 4.7
+ \brief The QDeclarativeNetworkAccessManagerFactory class provides a factory for QNetworkAccessManager for use by a Qt Declarative engine.
QNetworkAccessManager is used for all network access by QML.
By implementing a factory it is possible to create custom
@@ -82,6 +82,8 @@ QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactor
Implement this method to create a QNetworkAccessManager with \a parent.
This allows proxies, caching and cookie support to be setup appropriately.
+ This method should return a new QNetworkAccessManager each time it is called.
+
Note: this method may be called by multiple threads, so ensure the
implementation of this method is reentrant.
*/
diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
index a194354..bb5c8b7 100644
--- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
+++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
@@ -353,7 +353,13 @@ void QDeclarativeObjectScriptClass::setProperty(QObject *obj,
if (delBinding)
delBinding->destroy();
- if (value.isUndefined() && lastData->flags & QDeclarativePropertyCache::Data::IsResettable) {
+ if (value.isNull() && lastData->flags & QDeclarativePropertyCache::Data::IsQObjectDerived) {
+ QObject *o = 0;
+ int status = -1;
+ int flags = 0;
+ void *argv[] = { &o, 0, &status, &flags };
+ QMetaObject::metacall(obj, QMetaObject::WriteProperty, lastData->coreIndex, argv);
+ } else if (value.isUndefined() && lastData->flags & QDeclarativePropertyCache::Data::IsResettable) {
void *a[] = { 0 };
QMetaObject::metacall(obj, QMetaObject::ResetProperty, lastData->coreIndex, a);
} else if (value.isUndefined() && lastData->propType == qMetaTypeId<QVariant>()) {
diff --git a/src/declarative/qml/qdeclarativeprivate.h b/src/declarative/qml/qdeclarativeprivate.h
index 6e240d8..e657dd5 100644
--- a/src/declarative/qml/qdeclarativeprivate.h
+++ b/src/declarative/qml/qdeclarativeprivate.h
@@ -184,6 +184,7 @@ namespace QDeclarativePrivate
int listId;
int objectSize;
void (*create)(void *);
+ QString noCreationReason;
const char *uri;
int versionMajor;
diff --git a/src/declarative/qml/qdeclarativepropertyvaluesource.cpp b/src/declarative/qml/qdeclarativepropertyvaluesource.cpp
index b106d4f..a0ed78f 100644
--- a/src/declarative/qml/qdeclarativepropertyvaluesource.cpp
+++ b/src/declarative/qml/qdeclarativepropertyvaluesource.cpp
@@ -47,8 +47,10 @@ QT_BEGIN_NAMESPACE
/*!
\class QDeclarativePropertyValueSource
- \brief The QDeclarativePropertyValueSource class is inherited by property value sources such as animations and bindings.
- \internal
+ \brief The QDeclarativePropertyValueSource class is an interface for property value sources such as animations and bindings.
+
+ See \l{Property Value Sources} for information on writing custom property
+ value sources.
*/
/*!
diff --git a/src/declarative/qml/qdeclarativetypenotavailable.cpp b/src/declarative/qml/qdeclarativetypenotavailable.cpp
new file mode 100644
index 0000000..7a84732
--- /dev/null
+++ b/src/declarative/qml/qdeclarativetypenotavailable.cpp
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module 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$
+**
+****************************************************************************/
+
+#include "qdeclarativetypenotavailable_p.h"
+
+int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message)
+{
+ return qmlRegisterUncreatableType<QDeclarativeTypeNotAvailable>(uri,versionMajor,versionMinor,qmlName,message);
+}
+
+QDeclarativeTypeNotAvailable::QDeclarativeTypeNotAvailable() { }
diff --git a/src/declarative/qml/qdeclarativetypenotavailable_p.h b/src/declarative/qml/qdeclarativetypenotavailable_p.h
new file mode 100644
index 0000000..9c1c256
--- /dev/null
+++ b/src/declarative/qml/qdeclarativetypenotavailable_p.h
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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 QtDeclarative module 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$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVETYPENOTAVAILABLE_H
+#define QDECLARATIVETYPENOTAVAILABLE_H
+
+#include <qdeclarative.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Declarative)
+
+class QDeclarativeTypeNotAvailable : public QObject {
+ Q_OBJECT
+public:
+ QDeclarativeTypeNotAvailable();
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QDeclarativeTypeNotAvailable)
+
+QT_END_HEADER
+
+#endif // QDECLARATIVETYPENOTAVAILABLE_H
diff --git a/src/declarative/qml/qdeclarativevaluetype.cpp b/src/declarative/qml/qdeclarativevaluetype.cpp
index c5f6d6a..d4bb8ee 100644
--- a/src/declarative/qml/qdeclarativevaluetype.cpp
+++ b/src/declarative/qml/qdeclarativevaluetype.cpp
@@ -59,6 +59,8 @@ int qmlRegisterValueTypeEnums(const char *qmlName)
qRegisterMetaType<T *>(pointerName.constData()), 0, 0, 0,
+ QString(),
+
"Qt", 4, 6, qmlName, &T::staticMetaObject,
0, 0,
diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri
index c48662c..3848593 100644
--- a/src/declarative/qml/qml.pri
+++ b/src/declarative/qml/qml.pri
@@ -40,6 +40,7 @@ SOURCES += \
$$PWD/qdeclarativepropertycache.cpp \
$$PWD/qdeclarativenotifier.cpp \
$$PWD/qdeclarativeintegercache.cpp \
+ $$PWD/qdeclarativetypenotavailable.cpp \
$$PWD/qdeclarativetypenamecache.cpp \
$$PWD/qdeclarativescriptstring.cpp \
$$PWD/qdeclarativeobjectscriptclass.cpp \
@@ -112,6 +113,7 @@ HEADERS += \
$$PWD/qdeclarativepropertycache_p.h \
$$PWD/qdeclarativenotifier_p.h \
$$PWD/qdeclarativeintegercache_p.h \
+ $$PWD/qdeclarativetypenotavailable_p.h \
$$PWD/qdeclarativetypenamecache_p.h \
$$PWD/qdeclarativescriptstring.h \
$$PWD/qdeclarativeobjectscriptclass_p.h \
diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp
index 9c3ee9f..8a6937d 100644
--- a/src/declarative/util/qdeclarativepropertychanges.cpp
+++ b/src/declarative/util/qdeclarativepropertychanges.cpp
@@ -159,12 +159,12 @@ public:
QDeclarativeExpression *rewindExpression;
QDeclarativeGuard<QDeclarativeExpression> ownedExpression;
- virtual void execute() {
+ virtual void execute(Reason) {
ownedExpression = QDeclarativePropertyPrivate::setSignalExpression(property, expression);
}
virtual bool isReversable() { return true; }
- virtual void reverse() {
+ virtual void reverse(Reason) {
ownedExpression = QDeclarativePropertyPrivate::setSignalExpression(property, reverseExpression);
}
diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp
index 78813fa..684f527 100644
--- a/src/declarative/util/qdeclarativestate.cpp
+++ b/src/declarative/util/qdeclarativestate.cpp
@@ -95,7 +95,7 @@ QString QDeclarativeActionEvent::typeName() const
return QString();
}
-void QDeclarativeActionEvent::execute()
+void QDeclarativeActionEvent::execute(Reason)
{
}
@@ -104,7 +104,7 @@ bool QDeclarativeActionEvent::isReversable()
return false;
}
-void QDeclarativeActionEvent::reverse()
+void QDeclarativeActionEvent::reverse(Reason)
{
}
diff --git a/src/declarative/util/qdeclarativestate_p.h b/src/declarative/util/qdeclarativestate_p.h
index 472897e..0ba67b0 100644
--- a/src/declarative/util/qdeclarativestate_p.h
+++ b/src/declarative/util/qdeclarativestate_p.h
@@ -90,9 +90,11 @@ public:
virtual ~QDeclarativeActionEvent();
virtual QString typeName() const;
- virtual void execute();
+ enum Reason { ActualChange, FastForward };
+
+ virtual void execute(Reason reason = ActualChange);
virtual bool isReversable();
- virtual void reverse();
+ virtual void reverse(Reason reason = ActualChange);
virtual void saveOriginals() {}
virtual void copyOriginals(QDeclarativeActionEvent *) {}
diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp
index eb6ac7b..0aad498 100644
--- a/src/declarative/util/qdeclarativestateoperations.cpp
+++ b/src/declarative/util/qdeclarativestateoperations.cpp
@@ -50,6 +50,8 @@
#include <qdeclarativeguard_p.h>
#include <qdeclarativenullablevalue_p_p.h>
#include "private/qdeclarativecontext_p.h"
+#include "private/qdeclarativeproperty_p.h"
+#include "private/qdeclarativebinding_p.h"
#include <QtCore/qdebug.h>
#include <QtGui/qgraphicsitem.h>
@@ -86,7 +88,6 @@ public:
void QDeclarativeParentChangePrivate::doChange(QDeclarativeItem *targetParent, QDeclarativeItem *stackBefore)
{
if (targetParent && target && target->parentItem()) {
- //### for backwards direction, can we just restore original x, y, scale, rotation
Q_Q(QDeclarativeParentChange);
bool ok;
const QTransform &transform = target->parentItem()->itemTransform(targetParent, &ok);
@@ -123,6 +124,10 @@ void QDeclarativeParentChangePrivate::doChange(QDeclarativeItem *targetParent, Q
const QPointF &point = transform.map(QPointF(target->x(),target->y()));
qreal x = point.x();
qreal y = point.y();
+
+ // setParentItem will update the transformOriginPoint if needed
+ target->setParentItem(targetParent);
+
if (ok && target->transformOrigin() != QDeclarativeItem::TopLeft) {
qreal tempxt = target->transformOriginPoint().x();
qreal tempyt = target->transformOriginPoint().y();
@@ -136,7 +141,6 @@ void QDeclarativeParentChangePrivate::doChange(QDeclarativeItem *targetParent, Q
y += offset.y();
}
- target->setParentItem(targetParent);
if (ok) {
//qDebug() << x << y << rotation << scale;
target->setX(x);
@@ -415,7 +419,7 @@ void QDeclarativeParentChange::copyOriginals(QDeclarativeActionEvent *other)
saveCurrentValues();
}
-void QDeclarativeParentChange::execute()
+void QDeclarativeParentChange::execute(Reason)
{
Q_D(QDeclarativeParentChange);
d->doChange(d->parent);
@@ -426,7 +430,7 @@ bool QDeclarativeParentChange::isReversable()
return true;
}
-void QDeclarativeParentChange::reverse()
+void QDeclarativeParentChange::reverse(Reason)
{
Q_D(QDeclarativeParentChange);
d->doChange(d->origParent, d->origStackBefore);
@@ -566,7 +570,7 @@ void QDeclarativeStateChangeScript::setName(const QString &n)
d->name = n;
}
-void QDeclarativeStateChangeScript::execute()
+void QDeclarativeStateChangeScript::execute(Reason)
{
Q_D(QDeclarativeStateChangeScript);
const QString &script = d->script.script();
@@ -601,15 +605,22 @@ QString QDeclarativeStateChangeScript::typeName() const
In the following example we change the top and bottom anchors of an item:
\qml
- AnchorChanges {
- target: content; top: window.top; bottom: window.bottom
+ State {
+ name: "reanchored"
+ AnchorChanges {
+ target: content;
+ anchors.top: window.top;
+ anchors.bottom: window.bottom
+ }
}
\endqml
AnchorChanges can be animated using AnchorAnimation.
\qml
//animate our anchor changes
- AnchorAnimation {}
+ Transition {
+ AnchorAnimation {}
+ }
\endqml
For more information on anchors see \l {anchor-layout}{Anchor Layouts}.
@@ -620,26 +631,25 @@ class QDeclarativeAnchorSetPrivate : public QObjectPrivate
Q_DECLARE_PUBLIC(QDeclarativeAnchorSet)
public:
QDeclarativeAnchorSetPrivate()
- : usedAnchors(0), fill(0),
+ : usedAnchors(0), resetAnchors(0), fill(0),
centerIn(0)/*, leftMargin(0), rightMargin(0), topMargin(0), bottomMargin(0),
margins(0), vCenterOffset(0), hCenterOffset(0), baselineOffset(0)*/
{
}
- QDeclarativeAnchors::UsedAnchors usedAnchors;
- //### change to QDeclarativeAnchors::UsedAnchors resetAnchors
- QStringList resetList;
+ QDeclarativeAnchors::Anchors usedAnchors;
+ QDeclarativeAnchors::Anchors resetAnchors;
QDeclarativeItem *fill;
QDeclarativeItem *centerIn;
- QDeclarativeAnchorLine left;
- QDeclarativeAnchorLine right;
- QDeclarativeAnchorLine top;
- QDeclarativeAnchorLine bottom;
- QDeclarativeAnchorLine vCenter;
- QDeclarativeAnchorLine hCenter;
- QDeclarativeAnchorLine baseline;
+ QDeclarativeScriptString leftScript;
+ QDeclarativeScriptString rightScript;
+ QDeclarativeScriptString topScript;
+ QDeclarativeScriptString bottomScript;
+ QDeclarativeScriptString hCenterScript;
+ QDeclarativeScriptString vCenterScript;
+ QDeclarativeScriptString baselineScript;
/*qreal leftMargin;
qreal rightMargin;
@@ -660,151 +670,165 @@ QDeclarativeAnchorSet::~QDeclarativeAnchorSet()
{
}
-QDeclarativeAnchorLine QDeclarativeAnchorSet::top() const
+QDeclarativeScriptString QDeclarativeAnchorSet::top() const
{
Q_D(const QDeclarativeAnchorSet);
- return d->top;
+ return d->topScript;
}
-void QDeclarativeAnchorSet::setTop(const QDeclarativeAnchorLine &edge)
+void QDeclarativeAnchorSet::setTop(const QDeclarativeScriptString &edge)
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors |= QDeclarativeAnchors::HasTopAnchor;
- d->top = edge;
+ d->usedAnchors |= QDeclarativeAnchors::TopAnchor;
+ d->topScript = edge;
+ if (edge.script() == QLatin1String("undefined"))
+ resetTop();
}
void QDeclarativeAnchorSet::resetTop()
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors &= ~QDeclarativeAnchors::HasTopAnchor;
- d->top = QDeclarativeAnchorLine();
- d->resetList << QLatin1String("top");
+ d->usedAnchors &= ~QDeclarativeAnchors::TopAnchor;
+ d->topScript = QDeclarativeScriptString();
+ d->resetAnchors |= QDeclarativeAnchors::TopAnchor;
}
-QDeclarativeAnchorLine QDeclarativeAnchorSet::bottom() const
+QDeclarativeScriptString QDeclarativeAnchorSet::bottom() const
{
Q_D(const QDeclarativeAnchorSet);
- return d->bottom;
+ return d->bottomScript;
}
-void QDeclarativeAnchorSet::setBottom(const QDeclarativeAnchorLine &edge)
+void QDeclarativeAnchorSet::setBottom(const QDeclarativeScriptString &edge)
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors |= QDeclarativeAnchors::HasBottomAnchor;
- d->bottom = edge;
+ d->usedAnchors |= QDeclarativeAnchors::BottomAnchor;
+ d->bottomScript = edge;
+ if (edge.script() == QLatin1String("undefined"))
+ resetBottom();
}
void QDeclarativeAnchorSet::resetBottom()
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors &= ~QDeclarativeAnchors::HasBottomAnchor;
- d->bottom = QDeclarativeAnchorLine();
- d->resetList << QLatin1String("bottom");
+ d->usedAnchors &= ~QDeclarativeAnchors::BottomAnchor;
+ d->bottomScript = QDeclarativeScriptString();
+ d->resetAnchors |= QDeclarativeAnchors::BottomAnchor;
}
-QDeclarativeAnchorLine QDeclarativeAnchorSet::verticalCenter() const
+QDeclarativeScriptString QDeclarativeAnchorSet::verticalCenter() const
{
Q_D(const QDeclarativeAnchorSet);
- return d->vCenter;
+ return d->vCenterScript;
}
-void QDeclarativeAnchorSet::setVerticalCenter(const QDeclarativeAnchorLine &edge)
+void QDeclarativeAnchorSet::setVerticalCenter(const QDeclarativeScriptString &edge)
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors |= QDeclarativeAnchors::HasVCenterAnchor;
- d->vCenter = edge;
+ d->usedAnchors |= QDeclarativeAnchors::VCenterAnchor;
+ d->vCenterScript = edge;
+ if (edge.script() == QLatin1String("undefined"))
+ resetVerticalCenter();
}
void QDeclarativeAnchorSet::resetVerticalCenter()
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors &= ~QDeclarativeAnchors::HasVCenterAnchor;
- d->vCenter = QDeclarativeAnchorLine();
- d->resetList << QLatin1String("verticalCenter");
+ d->usedAnchors &= ~QDeclarativeAnchors::VCenterAnchor;
+ d->vCenterScript = QDeclarativeScriptString();
+ d->resetAnchors |= QDeclarativeAnchors::VCenterAnchor;
}
-QDeclarativeAnchorLine QDeclarativeAnchorSet::baseline() const
+QDeclarativeScriptString QDeclarativeAnchorSet::baseline() const
{
Q_D(const QDeclarativeAnchorSet);
- return d->baseline;
+ return d->baselineScript;
}
-void QDeclarativeAnchorSet::setBaseline(const QDeclarativeAnchorLine &edge)
+void QDeclarativeAnchorSet::setBaseline(const QDeclarativeScriptString &edge)
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors |= QDeclarativeAnchors::HasBaselineAnchor;
- d->baseline = edge;
+ d->usedAnchors |= QDeclarativeAnchors::BaselineAnchor;
+ d->baselineScript = edge;
+ if (edge.script() == QLatin1String("undefined"))
+ resetBaseline();
}
void QDeclarativeAnchorSet::resetBaseline()
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors &= ~QDeclarativeAnchors::HasBaselineAnchor;
- d->baseline = QDeclarativeAnchorLine();
- d->resetList << QLatin1String("baseline");
+ d->usedAnchors &= ~QDeclarativeAnchors::BaselineAnchor;
+ d->baselineScript = QDeclarativeScriptString();
+ d->resetAnchors |= QDeclarativeAnchors::BaselineAnchor;
}
-QDeclarativeAnchorLine QDeclarativeAnchorSet::left() const
+QDeclarativeScriptString QDeclarativeAnchorSet::left() const
{
Q_D(const QDeclarativeAnchorSet);
- return d->left;
+ return d->leftScript;
}
-void QDeclarativeAnchorSet::setLeft(const QDeclarativeAnchorLine &edge)
+void QDeclarativeAnchorSet::setLeft(const QDeclarativeScriptString &edge)
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors |= QDeclarativeAnchors::HasLeftAnchor;
- d->left = edge;
+ d->usedAnchors |= QDeclarativeAnchors::LeftAnchor;
+ d->leftScript = edge;
+ if (edge.script() == QLatin1String("undefined"))
+ resetLeft();
}
void QDeclarativeAnchorSet::resetLeft()
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors &= ~QDeclarativeAnchors::HasLeftAnchor;
- d->left = QDeclarativeAnchorLine();
- d->resetList << QLatin1String("left");
+ d->usedAnchors &= ~QDeclarativeAnchors::LeftAnchor;
+ d->leftScript = QDeclarativeScriptString();
+ d->resetAnchors |= QDeclarativeAnchors::LeftAnchor;
}
-QDeclarativeAnchorLine QDeclarativeAnchorSet::right() const
+QDeclarativeScriptString QDeclarativeAnchorSet::right() const
{
Q_D(const QDeclarativeAnchorSet);
- return d->right;
+ return d->rightScript;
}
-void QDeclarativeAnchorSet::setRight(const QDeclarativeAnchorLine &edge)
+void QDeclarativeAnchorSet::setRight(const QDeclarativeScriptString &edge)
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors |= QDeclarativeAnchors::HasRightAnchor;
- d->right = edge;
+ d->usedAnchors |= QDeclarativeAnchors::RightAnchor;
+ d->rightScript = edge;
+ if (edge.script() == QLatin1String("undefined"))
+ resetRight();
}
void QDeclarativeAnchorSet::resetRight()
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors &= ~QDeclarativeAnchors::HasRightAnchor;
- d->right = QDeclarativeAnchorLine();
- d->resetList << QLatin1String("right");
+ d->usedAnchors &= ~QDeclarativeAnchors::RightAnchor;
+ d->rightScript = QDeclarativeScriptString();
+ d->resetAnchors |= QDeclarativeAnchors::RightAnchor;
}
-QDeclarativeAnchorLine QDeclarativeAnchorSet::horizontalCenter() const
+QDeclarativeScriptString QDeclarativeAnchorSet::horizontalCenter() const
{
Q_D(const QDeclarativeAnchorSet);
- return d->hCenter;
+ return d->hCenterScript;
}
-void QDeclarativeAnchorSet::setHorizontalCenter(const QDeclarativeAnchorLine &edge)
+void QDeclarativeAnchorSet::setHorizontalCenter(const QDeclarativeScriptString &edge)
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors |= QDeclarativeAnchors::HasHCenterAnchor;
- d->hCenter = edge;
+ d->usedAnchors |= QDeclarativeAnchors::HCenterAnchor;
+ d->hCenterScript = edge;
+ if (edge.script() == QLatin1String("undefined"))
+ resetHorizontalCenter();
}
void QDeclarativeAnchorSet::resetHorizontalCenter()
{
Q_D(QDeclarativeAnchorSet);
- d->usedAnchors &= ~QDeclarativeAnchors::HasHCenterAnchor;
- d->hCenter = QDeclarativeAnchorLine();
- d->resetList << QLatin1String("horizontalCenter");
+ d->usedAnchors &= ~QDeclarativeAnchors::HCenterAnchor;
+ d->hCenterScript = QDeclarativeScriptString();
+ d->resetAnchors |= QDeclarativeAnchors::HCenterAnchor;
}
QDeclarativeItem *QDeclarativeAnchorSet::fill() const
@@ -846,19 +870,35 @@ class QDeclarativeAnchorChangesPrivate : public QObjectPrivate
{
public:
QDeclarativeAnchorChangesPrivate()
- : target(0), anchorSet(new QDeclarativeAnchorSet) {}
+ : target(0), anchorSet(new QDeclarativeAnchorSet),
+ leftBinding(0), rightBinding(0), hCenterBinding(0),
+ topBinding(0), bottomBinding(0), vCenterBinding(0), baselineBinding(0),
+ origLeftBinding(0), origRightBinding(0), origHCenterBinding(0),
+ origTopBinding(0), origBottomBinding(0), origVCenterBinding(0),
+ origBaselineBinding(0)
+ {
+
+ }
~QDeclarativeAnchorChangesPrivate() { delete anchorSet; }
QDeclarativeItem *target;
QDeclarativeAnchorSet *anchorSet;
- QDeclarativeAnchorLine origLeft;
- QDeclarativeAnchorLine origRight;
- QDeclarativeAnchorLine origHCenter;
- QDeclarativeAnchorLine origTop;
- QDeclarativeAnchorLine origBottom;
- QDeclarativeAnchorLine origVCenter;
- QDeclarativeAnchorLine origBaseline;
+ QDeclarativeBinding *leftBinding;
+ QDeclarativeBinding *rightBinding;
+ QDeclarativeBinding *hCenterBinding;
+ QDeclarativeBinding *topBinding;
+ QDeclarativeBinding *bottomBinding;
+ QDeclarativeBinding *vCenterBinding;
+ QDeclarativeBinding *baselineBinding;
+
+ QDeclarativeAbstractBinding *origLeftBinding;
+ QDeclarativeAbstractBinding *origRightBinding;
+ QDeclarativeAbstractBinding *origHCenterBinding;
+ QDeclarativeAbstractBinding *origTopBinding;
+ QDeclarativeAbstractBinding *origBottomBinding;
+ QDeclarativeAbstractBinding *origVCenterBinding;
+ QDeclarativeAbstractBinding *origBaselineBinding;
QDeclarativeAnchorLine rewindLeft;
QDeclarativeAnchorLine rewindRight;
@@ -890,6 +930,16 @@ public:
bool applyOrigBottom;
bool applyOrigVCenter;
bool applyOrigBaseline;
+
+ QList<QDeclarativeAbstractBinding*> oldBindings;
+
+ QDeclarativeProperty leftProp;
+ QDeclarativeProperty rightProp;
+ QDeclarativeProperty hCenterProp;
+ QDeclarativeProperty topProp;
+ QDeclarativeProperty bottomProp;
+ QDeclarativeProperty vCenterProp;
+ QDeclarativeProperty baselineProp;
};
/*!
@@ -908,6 +958,47 @@ QDeclarativeAnchorChanges::~QDeclarativeAnchorChanges()
QDeclarativeAnchorChanges::ActionList QDeclarativeAnchorChanges::actions()
{
+ Q_D(QDeclarativeAnchorChanges);
+ d->leftBinding = d->rightBinding = d->hCenterBinding = d->topBinding
+ = d->bottomBinding = d->vCenterBinding = d->baselineBinding = 0;
+
+ d->leftProp = QDeclarativeProperty(d->target, QLatin1String("anchors.left"));
+ d->rightProp = QDeclarativeProperty(d->target, QLatin1String("anchors.right"));
+ d->hCenterProp = QDeclarativeProperty(d->target, QLatin1String("anchors.horizontalCenter"));
+ d->topProp = QDeclarativeProperty(d->target, QLatin1String("anchors.top"));
+ d->bottomProp = QDeclarativeProperty(d->target, QLatin1String("anchors.bottom"));
+ d->vCenterProp = QDeclarativeProperty(d->target, QLatin1String("anchors.verticalCenter"));
+ d->baselineProp = QDeclarativeProperty(d->target, QLatin1String("anchors.baseline"));
+
+ if (d->anchorSet->d_func()->usedAnchors & QDeclarativeAnchors::LeftAnchor) {
+ d->leftBinding = new QDeclarativeBinding(d->anchorSet->d_func()->leftScript.script(), d->target, qmlContext(this));
+ d->leftBinding->setTarget(d->leftProp);
+ }
+ if (d->anchorSet->d_func()->usedAnchors & QDeclarativeAnchors::RightAnchor) {
+ d->rightBinding = new QDeclarativeBinding(d->anchorSet->d_func()->rightScript.script(), d->target, qmlContext(this));
+ d->rightBinding->setTarget(d->rightProp);
+ }
+ if (d->anchorSet->d_func()->usedAnchors & QDeclarativeAnchors::HCenterAnchor) {
+ d->hCenterBinding = new QDeclarativeBinding(d->anchorSet->d_func()->hCenterScript.script(), d->target, qmlContext(this));
+ d->hCenterBinding->setTarget(d->hCenterProp);
+ }
+ if (d->anchorSet->d_func()->usedAnchors & QDeclarativeAnchors::TopAnchor) {
+ d->topBinding = new QDeclarativeBinding(d->anchorSet->d_func()->topScript.script(), d->target, qmlContext(this));
+ d->topBinding->setTarget(d->topProp);
+ }
+ if (d->anchorSet->d_func()->usedAnchors & QDeclarativeAnchors::BottomAnchor) {
+ d->bottomBinding = new QDeclarativeBinding(d->anchorSet->d_func()->bottomScript.script(), d->target, qmlContext(this));
+ d->bottomBinding->setTarget(d->bottomProp);
+ }
+ if (d->anchorSet->d_func()->usedAnchors & QDeclarativeAnchors::VCenterAnchor) {
+ d->vCenterBinding = new QDeclarativeBinding(d->anchorSet->d_func()->vCenterScript.script(), d->target, qmlContext(this));
+ d->vCenterBinding->setTarget(d->vCenterProp);
+ }
+ if (d->anchorSet->d_func()->usedAnchors & QDeclarativeAnchors::BaselineAnchor) {
+ d->baselineBinding = new QDeclarativeBinding(d->anchorSet->d_func()->baselineScript.script(), d->target, qmlContext(this));
+ d->baselineBinding->setTarget(d->baselineProp);
+ }
+
QDeclarativeAction a;
a.event = this;
return ActionList() << a;
@@ -952,59 +1043,104 @@ void QDeclarativeAnchorChanges::setObject(QDeclarativeItem *target)
\endqml
*/
-void QDeclarativeAnchorChanges::execute()
+void QDeclarativeAnchorChanges::execute(Reason reason)
{
Q_D(QDeclarativeAnchorChanges);
if (!d->target)
return;
//incorporate any needed "reverts"
- if (d->applyOrigLeft)
- d->target->anchors()->setLeft(d->origLeft);
- if (d->applyOrigRight)
- d->target->anchors()->setRight(d->origRight);
- if (d->applyOrigHCenter)
- d->target->anchors()->setHorizontalCenter(d->origHCenter);
- if (d->applyOrigTop)
- d->target->anchors()->setTop(d->origTop);
- if (d->applyOrigBottom)
- d->target->anchors()->setBottom(d->origBottom);
- if (d->applyOrigVCenter)
- d->target->anchors()->setVerticalCenter(d->origVCenter);
- if (d->applyOrigBaseline)
- d->target->anchors()->setBaseline(d->origBaseline);
-
- //reset any anchors that have been specified
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("left")))
+ if (d->applyOrigLeft) {
+ if (!d->origLeftBinding)
+ d->target->anchors()->resetLeft();
+ QDeclarativePropertyPrivate::setBinding(d->leftProp, d->origLeftBinding);
+ }
+ if (d->applyOrigRight) {
+ if (!d->origRightBinding)
+ d->target->anchors()->resetRight();
+ QDeclarativePropertyPrivate::setBinding(d->rightProp, d->origRightBinding);
+ }
+ if (d->applyOrigHCenter) {
+ if (!d->origHCenterBinding)
+ d->target->anchors()->resetHorizontalCenter();
+ QDeclarativePropertyPrivate::setBinding(d->hCenterProp, d->origHCenterBinding);
+ }
+ if (d->applyOrigTop) {
+ if (!d->origTopBinding)
+ d->target->anchors()->resetTop();
+ QDeclarativePropertyPrivate::setBinding(d->topProp, d->origTopBinding);
+ }
+ if (d->applyOrigBottom) {
+ if (!d->origBottomBinding)
+ d->target->anchors()->resetBottom();
+ QDeclarativePropertyPrivate::setBinding(d->bottomProp, d->origBottomBinding);
+ }
+ if (d->applyOrigVCenter) {
+ if (!d->origVCenterBinding)
+ d->target->anchors()->resetVerticalCenter();
+ QDeclarativePropertyPrivate::setBinding(d->vCenterProp, d->origVCenterBinding);
+ }
+ if (d->applyOrigBaseline) {
+ if (!d->origBaselineBinding)
+ d->target->anchors()->resetBaseline();
+ QDeclarativePropertyPrivate::setBinding(d->baselineProp, d->origBaselineBinding);
+ }
+
+ //destroy old bindings
+ if (reason == ActualChange) {
+ for (int i = 0; i < d->oldBindings.size(); ++i) {
+ QDeclarativeAbstractBinding *binding = d->oldBindings.at(i);
+ if (binding)
+ binding->destroy();
+ }
+ d->oldBindings.clear();
+ }
+
+ //reset any anchors that have been specified as "undefined"
+ if (d->anchorSet->d_func()->resetAnchors & QDeclarativeAnchors::LeftAnchor) {
d->target->anchors()->resetLeft();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("right")))
+ QDeclarativePropertyPrivate::setBinding(d->leftProp, 0);
+ }
+ if (d->anchorSet->d_func()->resetAnchors & QDeclarativeAnchors::RightAnchor) {
d->target->anchors()->resetRight();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("horizontalCenter")))
+ QDeclarativePropertyPrivate::setBinding(d->rightProp, 0);
+ }
+ if (d->anchorSet->d_func()->resetAnchors & QDeclarativeAnchors::HCenterAnchor) {
d->target->anchors()->resetHorizontalCenter();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("top")))
+ QDeclarativePropertyPrivate::setBinding(d->hCenterProp, 0);
+ }
+ if (d->anchorSet->d_func()->resetAnchors & QDeclarativeAnchors::TopAnchor) {
d->target->anchors()->resetTop();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("bottom")))
+ QDeclarativePropertyPrivate::setBinding(d->topProp, 0);
+ }
+ if (d->anchorSet->d_func()->resetAnchors & QDeclarativeAnchors::BottomAnchor) {
d->target->anchors()->resetBottom();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("verticalCenter")))
+ QDeclarativePropertyPrivate::setBinding(d->bottomProp, 0);
+ }
+ if (d->anchorSet->d_func()->resetAnchors & QDeclarativeAnchors::VCenterAnchor) {
d->target->anchors()->resetVerticalCenter();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("baseline")))
+ QDeclarativePropertyPrivate::setBinding(d->vCenterProp, 0);
+ }
+ if (d->anchorSet->d_func()->resetAnchors & QDeclarativeAnchors::BaselineAnchor) {
d->target->anchors()->resetBaseline();
+ QDeclarativePropertyPrivate::setBinding(d->baselineProp, 0);
+ }
//set any anchors that have been specified
- if (d->anchorSet->d_func()->left.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setLeft(d->anchorSet->d_func()->left);
- if (d->anchorSet->d_func()->right.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setRight(d->anchorSet->d_func()->right);
- if (d->anchorSet->d_func()->hCenter.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setHorizontalCenter(d->anchorSet->d_func()->hCenter);
- if (d->anchorSet->d_func()->top.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setTop(d->anchorSet->d_func()->top);
- if (d->anchorSet->d_func()->bottom.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setBottom(d->anchorSet->d_func()->bottom);
- if (d->anchorSet->d_func()->vCenter.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setVerticalCenter(d->anchorSet->d_func()->vCenter);
- if (d->anchorSet->d_func()->baseline.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setBaseline(d->anchorSet->d_func()->baseline);
+ if (d->leftBinding)
+ QDeclarativePropertyPrivate::setBinding(d->leftBinding->property(), d->leftBinding);
+ if (d->rightBinding)
+ QDeclarativePropertyPrivate::setBinding(d->rightBinding->property(), d->rightBinding);
+ if (d->hCenterBinding)
+ QDeclarativePropertyPrivate::setBinding(d->hCenterBinding->property(), d->hCenterBinding);
+ if (d->topBinding)
+ QDeclarativePropertyPrivate::setBinding(d->topBinding->property(), d->topBinding);
+ if (d->bottomBinding)
+ QDeclarativePropertyPrivate::setBinding(d->bottomBinding->property(), d->bottomBinding);
+ if (d->vCenterBinding)
+ QDeclarativePropertyPrivate::setBinding(d->vCenterBinding->property(), d->vCenterBinding);
+ if (d->baselineBinding)
+ QDeclarativePropertyPrivate::setBinding(d->baselineBinding->property(), d->baselineBinding);
}
bool QDeclarativeAnchorChanges::isReversable()
@@ -1012,43 +1148,78 @@ bool QDeclarativeAnchorChanges::isReversable()
return true;
}
-void QDeclarativeAnchorChanges::reverse()
+void QDeclarativeAnchorChanges::reverse(Reason reason)
{
Q_D(QDeclarativeAnchorChanges);
if (!d->target)
return;
//reset any anchors set by the state
- if (d->anchorSet->d_func()->left.anchorLine != QDeclarativeAnchorLine::Invalid)
+ if (d->leftBinding) {
d->target->anchors()->resetLeft();
- if (d->anchorSet->d_func()->right.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->leftBinding->property(), 0);
+ if (reason == ActualChange) {
+ d->leftBinding->destroy(); d->leftBinding = 0;
+ }
+ }
+ if (d->rightBinding) {
d->target->anchors()->resetRight();
- if (d->anchorSet->d_func()->hCenter.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->rightBinding->property(), 0);
+ if (reason == ActualChange) {
+ d->rightBinding->destroy(); d->rightBinding = 0;
+ }
+ }
+ if (d->hCenterBinding) {
d->target->anchors()->resetHorizontalCenter();
- if (d->anchorSet->d_func()->top.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->hCenterBinding->property(), 0);
+ if (reason == ActualChange) {
+ d->hCenterBinding->destroy(); d->hCenterBinding = 0;
+ }
+ }
+ if (d->topBinding) {
d->target->anchors()->resetTop();
- if (d->anchorSet->d_func()->bottom.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->topBinding->property(), 0);
+ if (reason == ActualChange) {
+ d->topBinding->destroy(); d->topBinding = 0;
+ }
+ }
+ if (d->bottomBinding) {
d->target->anchors()->resetBottom();
- if (d->anchorSet->d_func()->vCenter.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->bottomBinding->property(), 0);
+ if (reason == ActualChange) {
+ d->bottomBinding->destroy(); d->bottomBinding = 0;
+ }
+ }
+ if (d->vCenterBinding) {
d->target->anchors()->resetVerticalCenter();
- if (d->anchorSet->d_func()->baseline.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->vCenterBinding->property(), 0);
+ if (reason == ActualChange) {
+ d->vCenterBinding->destroy(); d->vCenterBinding = 0;
+ }
+ }
+ if (d->baselineBinding) {
d->target->anchors()->resetBaseline();
+ QDeclarativePropertyPrivate::setBinding(d->baselineBinding->property(), 0);
+ if (reason == ActualChange) {
+ d->baselineBinding->destroy(); d->baselineBinding = 0;
+ }
+ }
//restore previous anchors
- if (d->origLeft.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setLeft(d->origLeft);
- if (d->origRight.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setRight(d->origRight);
- if (d->origHCenter.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setHorizontalCenter(d->origHCenter);
- if (d->origTop.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setTop(d->origTop);
- if (d->origBottom.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setBottom(d->origBottom);
- if (d->origVCenter.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setVerticalCenter(d->origVCenter);
- if (d->origBaseline.anchorLine != QDeclarativeAnchorLine::Invalid)
- d->target->anchors()->setBaseline(d->origBaseline);
+ if (d->origLeftBinding)
+ QDeclarativePropertyPrivate::setBinding(d->leftProp, d->origLeftBinding);
+ if (d->origRightBinding)
+ QDeclarativePropertyPrivate::setBinding(d->rightProp, d->origRightBinding);
+ if (d->origHCenterBinding)
+ QDeclarativePropertyPrivate::setBinding(d->hCenterProp, d->origHCenterBinding);
+ if (d->origTopBinding)
+ QDeclarativePropertyPrivate::setBinding(d->topProp, d->origTopBinding);
+ if (d->origBottomBinding)
+ QDeclarativePropertyPrivate::setBinding(d->bottomProp, d->origBottomBinding);
+ if (d->origVCenterBinding)
+ QDeclarativePropertyPrivate::setBinding(d->vCenterProp, d->origVCenterBinding);
+ if (d->origBaselineBinding)
+ QDeclarativePropertyPrivate::setBinding(d->baselineProp, d->origBaselineBinding);
}
QString QDeclarativeAnchorChanges::typeName() const
@@ -1099,13 +1270,13 @@ void QDeclarativeAnchorChanges::saveOriginals()
if (!d->target)
return;
- d->origLeft = d->target->anchors()->left();
- d->origRight = d->target->anchors()->right();
- d->origHCenter = d->target->anchors()->horizontalCenter();
- d->origTop = d->target->anchors()->top();
- d->origBottom = d->target->anchors()->bottom();
- d->origVCenter = d->target->anchors()->verticalCenter();
- d->origBaseline = d->target->anchors()->baseline();
+ d->origLeftBinding = QDeclarativePropertyPrivate::binding(d->leftProp);
+ d->origRightBinding = QDeclarativePropertyPrivate::binding(d->rightProp);
+ d->origHCenterBinding = QDeclarativePropertyPrivate::binding(d->hCenterProp);
+ d->origTopBinding = QDeclarativePropertyPrivate::binding(d->topProp);
+ d->origBottomBinding = QDeclarativePropertyPrivate::binding(d->bottomProp);
+ d->origVCenterBinding = QDeclarativePropertyPrivate::binding(d->vCenterProp);
+ d->origBaselineBinding = QDeclarativePropertyPrivate::binding(d->baselineProp);
d->applyOrigLeft = d->applyOrigRight = d->applyOrigHCenter = d->applyOrigTop
= d->applyOrigBottom = d->applyOrigVCenter = d->applyOrigBaseline = false;
@@ -1119,35 +1290,29 @@ void QDeclarativeAnchorChanges::copyOriginals(QDeclarativeActionEvent *other)
QDeclarativeAnchorChanges *ac = static_cast<QDeclarativeAnchorChanges*>(other);
QDeclarativeAnchorChangesPrivate *acp = ac->d_func();
- //probably also need to revert some things
- d->applyOrigLeft = (acp->anchorSet->d_func()->left.anchorLine != QDeclarativeAnchorLine::Invalid ||
- acp->anchorSet->d_func()->resetList.contains(QLatin1String("left")));
-
- d->applyOrigRight = (acp->anchorSet->d_func()->right.anchorLine != QDeclarativeAnchorLine::Invalid ||
- acp->anchorSet->d_func()->resetList.contains(QLatin1String("right")));
-
- d->applyOrigHCenter = (acp->anchorSet->d_func()->hCenter.anchorLine != QDeclarativeAnchorLine::Invalid ||
- acp->anchorSet->d_func()->resetList.contains(QLatin1String("horizontalCenter")));
-
- d->applyOrigTop = (acp->anchorSet->d_func()->top.anchorLine != QDeclarativeAnchorLine::Invalid ||
- acp->anchorSet->d_func()->resetList.contains(QLatin1String("top")));
-
- d->applyOrigBottom = (acp->anchorSet->d_func()->bottom.anchorLine != QDeclarativeAnchorLine::Invalid ||
- acp->anchorSet->d_func()->resetList.contains(QLatin1String("bottom")));
+ QDeclarativeAnchors::Anchors combined = acp->anchorSet->d_func()->usedAnchors |
+ acp->anchorSet->d_func()->resetAnchors;
- d->applyOrigVCenter = (acp->anchorSet->d_func()->vCenter.anchorLine != QDeclarativeAnchorLine::Invalid ||
- acp->anchorSet->d_func()->resetList.contains(QLatin1String("verticalCenter")));
-
- d->applyOrigBaseline = (acp->anchorSet->d_func()->baseline.anchorLine != QDeclarativeAnchorLine::Invalid ||
- acp->anchorSet->d_func()->resetList.contains(QLatin1String("baseline")));
-
- d->origLeft = ac->d_func()->origLeft;
- d->origRight = ac->d_func()->origRight;
- d->origHCenter = ac->d_func()->origHCenter;
- d->origTop = ac->d_func()->origTop;
- d->origBottom = ac->d_func()->origBottom;
- d->origVCenter = ac->d_func()->origVCenter;
- d->origBaseline = ac->d_func()->origBaseline;
+ //probably also need to revert some things
+ d->applyOrigLeft = (combined & QDeclarativeAnchors::LeftAnchor);
+ d->applyOrigRight = (combined & QDeclarativeAnchors::RightAnchor);
+ d->applyOrigHCenter = (combined & QDeclarativeAnchors::HCenterAnchor);
+ d->applyOrigTop = (combined & QDeclarativeAnchors::TopAnchor);
+ d->applyOrigBottom = (combined & QDeclarativeAnchors::BottomAnchor);
+ d->applyOrigVCenter = (combined & QDeclarativeAnchors::VCenterAnchor);
+ d->applyOrigBaseline = (combined & QDeclarativeAnchors::BaselineAnchor);
+
+ d->origLeftBinding = acp->origLeftBinding;
+ d->origRightBinding = acp->origRightBinding;
+ d->origHCenterBinding = acp->origHCenterBinding;
+ d->origTopBinding = acp->origTopBinding;
+ d->origBottomBinding = acp->origBottomBinding;
+ d->origVCenterBinding = acp->origVCenterBinding;
+ d->origBaselineBinding = acp->origBaselineBinding;
+
+ d->oldBindings.clear();
+ d->oldBindings << acp->leftBinding << acp->rightBinding << acp->hCenterBinding
+ << acp->topBinding << acp->bottomBinding << acp->baselineBinding;
saveCurrentValues();
}
@@ -1164,52 +1329,38 @@ void QDeclarativeAnchorChanges::clearBindings()
d->fromHeight = d->target->height();
//reset any anchors with corresponding reverts
- if (d->applyOrigLeft)
- d->target->anchors()->resetLeft();
- if (d->applyOrigRight)
- d->target->anchors()->resetRight();
- if (d->applyOrigHCenter)
- d->target->anchors()->resetHorizontalCenter();
- if (d->applyOrigTop)
- d->target->anchors()->resetTop();
- if (d->applyOrigBottom)
- d->target->anchors()->resetBottom();
- if (d->applyOrigVCenter)
- d->target->anchors()->resetVerticalCenter();
- if (d->applyOrigBaseline)
- d->target->anchors()->resetBaseline();
-
- //reset any anchors that have been specified
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("left")))
- d->target->anchors()->resetLeft();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("right")))
- d->target->anchors()->resetRight();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("horizontalCenter")))
- d->target->anchors()->resetHorizontalCenter();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("top")))
- d->target->anchors()->resetTop();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("bottom")))
- d->target->anchors()->resetBottom();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("verticalCenter")))
- d->target->anchors()->resetVerticalCenter();
- if (d->anchorSet->d_func()->resetList .contains(QLatin1String("baseline")))
- d->target->anchors()->resetBaseline();
-
+ //reset any anchors that have been specified as "undefined"
//reset any anchors that we'll be setting in the state
- if (d->anchorSet->d_func()->left.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativeAnchors::Anchors combined = d->anchorSet->d_func()->resetAnchors |
+ d->anchorSet->d_func()->usedAnchors;
+ if (d->applyOrigLeft || (combined & QDeclarativeAnchors::LeftAnchor)) {
d->target->anchors()->resetLeft();
- if (d->anchorSet->d_func()->right.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->leftProp, 0);
+ }
+ if (d->applyOrigRight || (combined & QDeclarativeAnchors::RightAnchor)) {
d->target->anchors()->resetRight();
- if (d->anchorSet->d_func()->hCenter.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->rightProp, 0);
+ }
+ if (d->applyOrigHCenter || (combined & QDeclarativeAnchors::HCenterAnchor)) {
d->target->anchors()->resetHorizontalCenter();
- if (d->anchorSet->d_func()->top.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->hCenterProp, 0);
+ }
+ if (d->applyOrigTop || (combined & QDeclarativeAnchors::TopAnchor)) {
d->target->anchors()->resetTop();
- if (d->anchorSet->d_func()->bottom.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->topProp, 0);
+ }
+ if (d->applyOrigBottom || (combined & QDeclarativeAnchors::BottomAnchor)) {
d->target->anchors()->resetBottom();
- if (d->anchorSet->d_func()->vCenter.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->bottomProp, 0);
+ }
+ if (d->applyOrigVCenter || (combined & QDeclarativeAnchors::VCenterAnchor)) {
d->target->anchors()->resetVerticalCenter();
- if (d->anchorSet->d_func()->baseline.anchorLine != QDeclarativeAnchorLine::Invalid)
+ QDeclarativePropertyPrivate::setBinding(d->vCenterProp, 0);
+ }
+ if (d->applyOrigBaseline || (combined & QDeclarativeAnchors::BaselineAnchor)) {
d->target->anchors()->resetBaseline();
+ QDeclarativePropertyPrivate::setBinding(d->baselineProp, 0);
+ }
}
bool QDeclarativeAnchorChanges::override(QDeclarativeActionEvent*other)
diff --git a/src/declarative/util/qdeclarativestateoperations_p.h b/src/declarative/util/qdeclarativestateoperations_p.h
index d49ec63..e22c1e2 100644
--- a/src/declarative/util/qdeclarativestateoperations_p.h
+++ b/src/declarative/util/qdeclarativestateoperations_p.h
@@ -108,9 +108,9 @@ public:
virtual void saveOriginals();
virtual void copyOriginals(QDeclarativeActionEvent*);
- virtual void execute();
+ virtual void execute(Reason reason = ActualChange);
virtual bool isReversable();
- virtual void reverse();
+ virtual void reverse(Reason reason = ActualChange);
virtual QString typeName() const;
virtual bool override(QDeclarativeActionEvent*other);
virtual void rewind();
@@ -140,7 +140,7 @@ public:
QString name() const;
void setName(const QString &);
- virtual void execute();
+ virtual void execute(Reason reason = ActualChange);
};
class QDeclarativeAnchorChanges;
@@ -149,13 +149,13 @@ class Q_AUTOTEST_EXPORT QDeclarativeAnchorSet : public QObject
{
Q_OBJECT
- Q_PROPERTY(QDeclarativeAnchorLine left READ left WRITE setLeft RESET resetLeft)
- Q_PROPERTY(QDeclarativeAnchorLine right READ right WRITE setRight RESET resetRight)
- Q_PROPERTY(QDeclarativeAnchorLine horizontalCenter READ horizontalCenter WRITE setHorizontalCenter RESET resetHorizontalCenter)
- Q_PROPERTY(QDeclarativeAnchorLine top READ top WRITE setTop RESET resetTop)
- Q_PROPERTY(QDeclarativeAnchorLine bottom READ bottom WRITE setBottom RESET resetBottom)
- Q_PROPERTY(QDeclarativeAnchorLine verticalCenter READ verticalCenter WRITE setVerticalCenter RESET resetVerticalCenter)
- Q_PROPERTY(QDeclarativeAnchorLine baseline READ baseline WRITE setBaseline RESET resetBaseline)
+ Q_PROPERTY(QDeclarativeScriptString left READ left WRITE setLeft RESET resetLeft)
+ Q_PROPERTY(QDeclarativeScriptString right READ right WRITE setRight RESET resetRight)
+ Q_PROPERTY(QDeclarativeScriptString horizontalCenter READ horizontalCenter WRITE setHorizontalCenter RESET resetHorizontalCenter)
+ Q_PROPERTY(QDeclarativeScriptString top READ top WRITE setTop RESET resetTop)
+ Q_PROPERTY(QDeclarativeScriptString bottom READ bottom WRITE setBottom RESET resetBottom)
+ Q_PROPERTY(QDeclarativeScriptString verticalCenter READ verticalCenter WRITE setVerticalCenter RESET resetVerticalCenter)
+ Q_PROPERTY(QDeclarativeScriptString baseline READ baseline WRITE setBaseline RESET resetBaseline)
//Q_PROPERTY(QDeclarativeItem *fill READ fill WRITE setFill RESET resetFill)
//Q_PROPERTY(QDeclarativeItem *centerIn READ centerIn WRITE setCenterIn RESET resetCenterIn)
@@ -172,32 +172,32 @@ public:
QDeclarativeAnchorSet(QObject *parent=0);
virtual ~QDeclarativeAnchorSet();
- QDeclarativeAnchorLine left() const;
- void setLeft(const QDeclarativeAnchorLine &edge);
+ QDeclarativeScriptString left() const;
+ void setLeft(const QDeclarativeScriptString &edge);
void resetLeft();
- QDeclarativeAnchorLine right() const;
- void setRight(const QDeclarativeAnchorLine &edge);
+ QDeclarativeScriptString right() const;
+ void setRight(const QDeclarativeScriptString &edge);
void resetRight();
- QDeclarativeAnchorLine horizontalCenter() const;
- void setHorizontalCenter(const QDeclarativeAnchorLine &edge);
+ QDeclarativeScriptString horizontalCenter() const;
+ void setHorizontalCenter(const QDeclarativeScriptString &edge);
void resetHorizontalCenter();
- QDeclarativeAnchorLine top() const;
- void setTop(const QDeclarativeAnchorLine &edge);
+ QDeclarativeScriptString top() const;
+ void setTop(const QDeclarativeScriptString &edge);
void resetTop();
- QDeclarativeAnchorLine bottom() const;
- void setBottom(const QDeclarativeAnchorLine &edge);
+ QDeclarativeScriptString bottom() const;
+ void setBottom(const QDeclarativeScriptString &edge);
void resetBottom();
- QDeclarativeAnchorLine verticalCenter() const;
- void setVerticalCenter(const QDeclarativeAnchorLine &edge);
+ QDeclarativeScriptString verticalCenter() const;
+ void setVerticalCenter(const QDeclarativeScriptString &edge);
void resetVerticalCenter();
- QDeclarativeAnchorLine baseline() const;
- void setBaseline(const QDeclarativeAnchorLine &edge);
+ QDeclarativeScriptString baseline() const;
+ void setBaseline(const QDeclarativeScriptString &edge);
void resetBaseline();
QDeclarativeItem *fill() const;
@@ -232,7 +232,7 @@ public:
qreal baselineOffset() const;
void setBaselineOffset(qreal);*/
- QDeclarativeAnchors::UsedAnchors usedAnchors() const;
+ QDeclarativeAnchors::Anchors usedAnchors() const;
/*Q_SIGNALS:
void leftMarginChanged();
@@ -270,9 +270,9 @@ public:
QDeclarativeItem *object() const;
void setObject(QDeclarativeItem *);
- virtual void execute();
+ virtual void execute(Reason reason = ActualChange);
virtual bool isReversable();
- virtual void reverse();
+ virtual void reverse(Reason reason = ActualChange);
virtual QString typeName() const;
virtual bool override(QDeclarativeActionEvent*other);
virtual bool changesBindings();
diff --git a/src/declarative/util/qdeclarativetransitionmanager.cpp b/src/declarative/util/qdeclarativetransitionmanager.cpp
index bc40377..368d484 100644
--- a/src/declarative/util/qdeclarativetransitionmanager.cpp
+++ b/src/declarative/util/qdeclarativetransitionmanager.cpp
@@ -42,6 +42,7 @@
#include "private/qdeclarativetransitionmanager_p_p.h"
#include "private/qdeclarativestate_p_p.h"
+#include "private/qdeclarativestate_p.h"
#include <qdeclarativebinding_p.h>
#include <qdeclarativeglobal_p.h>
@@ -150,9 +151,9 @@ void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &
QDeclarativePropertyPrivate::write(action.property, action.toValue, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
} else if (action.event->isReversable()) {
if (action.reverseEvent)
- action.event->reverse();
+ action.event->reverse(QDeclarativeActionEvent::FastForward);
else
- action.event->execute();
+ action.event->execute(QDeclarativeActionEvent::FastForward);
}
}
diff --git a/src/declarative/util/qdeclarativeutilmodule.cpp b/src/declarative/util/qdeclarativeutilmodule.cpp
index b9f1abb..0611093 100644
--- a/src/declarative/util/qdeclarativeutilmodule.cpp
+++ b/src/declarative/util/qdeclarativeutilmodule.cpp
@@ -68,6 +68,8 @@
#include "private/qdeclarativetransitionmanager_p_p.h"
#include "private/qdeclarativetransition_p.h"
#include "qdeclarativeview.h"
+#include "qdeclarativeinfo.h"
+#include "private/qdeclarativetypenotavailable_p.h"
#ifndef QT_NO_XMLPATTERNS
#include "private/qdeclarativexmllistmodel_p.h"
#endif
@@ -103,7 +105,12 @@ void QDeclarativeUtilModule::defineModule()
qmlRegisterType<QDeclarativeTimer>("Qt",4,6,"Timer");
qmlRegisterType<QDeclarativeTransition>("Qt",4,6,"Transition");
qmlRegisterType<QDeclarativeVector3dAnimation>("Qt",4,6,"Vector3dAnimation");
-#ifndef QT_NO_XMLPATTERNS
+#ifdef QT_NO_XMLPATTERNS
+ qmlRegisterTypeNotAvailable("Qt",4,6,"XmlListModel",
+ qApp->translate("QDeclarativeXmlListModel","Qt was built without support for xmlpatterns"));
+ qmlRegisterTypeNotAvailable("Qt",4,6,"XmlRole",
+ qApp->translate("QDeclarativeXmlListModel","Qt was built without support for xmlpatterns"));
+#else
qmlRegisterType<QDeclarativeXmlListModel>("Qt",4,6,"XmlListModel");
qmlRegisterType<QDeclarativeXmlListModelRole>("Qt",4,6,"XmlRole");
#endif
@@ -112,12 +119,9 @@ void QDeclarativeUtilModule::defineModule()
qmlRegisterType<QDeclarativeStateOperation>();
qmlRegisterType<QDeclarativeAnchorSet>();
- qmlRegisterUncreatableType<QDeclarativeAbstractAnimation>("Qt",4,6,"Animation");
+ qmlRegisterUncreatableType<QDeclarativeAbstractAnimation>("Qt",4,6,"Animation",QDeclarativeAbstractAnimation::tr("Animation is an abstract class"));
- qmlRegisterCustomType<QDeclarativeListModel>("Qt", 4,6, "ListModel", "QDeclarativeListModel",
- new QDeclarativeListModelParser);
- qmlRegisterCustomType<QDeclarativePropertyChanges>("Qt", 4, 6, "PropertyChanges", "QDeclarativePropertyChanges",
- new QDeclarativePropertyChangesParser);
- qmlRegisterCustomType<QDeclarativeConnections>("Qt", 4, 6, "Connections", "QDeclarativeConnections",
- new QDeclarativeConnectionsParser);
+ qmlRegisterCustomType<QDeclarativeListModel>("Qt", 4,6, "ListModel", new QDeclarativeListModelParser);
+ qmlRegisterCustomType<QDeclarativePropertyChanges>("Qt", 4, 6, "PropertyChanges", new QDeclarativePropertyChangesParser);
+ qmlRegisterCustomType<QDeclarativeConnections>("Qt", 4, 6, "Connections", new QDeclarativeConnectionsParser);
}
diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp
index 5cfa0e8..62d913c 100644
--- a/src/declarative/util/qdeclarativeview.cpp
+++ b/src/declarative/util/qdeclarativeview.cpp
@@ -599,6 +599,7 @@ void QDeclarativeView::timerEvent(QTimerEvent* e)
}
}
+/*! \reimp */
bool QDeclarativeView::eventFilter(QObject *watched, QEvent *e)
{
if (watched == d->root && d->resizeMode == SizeViewToRootObject) {
diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp
index 42df800..d027b91 100644
--- a/src/gui/widgets/qlinecontrol.cpp
+++ b/src/gui/widgets/qlinecontrol.cpp
@@ -1350,6 +1350,7 @@ bool QLineControl::processEvent(QEvent* ev)
#endif
switch(ev->type()){
#ifndef QT_NO_GRAPHICSVIEW
+ case QEvent::GraphicsSceneMouseDoubleClick:
case QEvent::GraphicsSceneMouseMove:
case QEvent::GraphicsSceneMouseRelease:
case QEvent::GraphicsSceneMousePress:{
@@ -1439,6 +1440,7 @@ void QLineControl::processMouseEvent(QMouseEvent* ev)
moveCursor(cursor, mark);
break;
}
+ case QEvent::GraphicsSceneMouseDoubleClick:
case QEvent::MouseButtonDblClick:
if (ev->button() == Qt::LeftButton) {
selectWordAtPos(xToPos(ev->pos().x()));
diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro
index 58371c1..9b3b3d0 100644
--- a/tests/auto/declarative/declarative.pro
+++ b/tests/auto/declarative/declarative.pro
@@ -64,6 +64,7 @@ SUBDIRS += \
qdeclarativeimageprovider \ # Cover
qdeclarativestyledtext \ # Cover
qdeclarativesqldatabase \ # Cover
+ qdeclarativevisualdatamodel \ # Cover
qmlvisual # Cover
contains(QT_CONFIG, webkit) {
diff --git a/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp b/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp
index 06a8f64..dff62c7 100644
--- a/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp
+++ b/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp
@@ -49,7 +49,7 @@
#include <private/qdeclarativetext_p.h>
#include <QtDeclarative/private/qdeclarativeanchors_p_p.h>
-Q_DECLARE_METATYPE(QDeclarativeAnchors::UsedAnchor)
+Q_DECLARE_METATYPE(QDeclarativeAnchors::Anchor)
Q_DECLARE_METATYPE(QDeclarativeAnchorLine::AnchorLine)
@@ -367,7 +367,7 @@ void tst_qdeclarativeanchors::reset()
{
QFETCH(QString, side);
QFETCH(QDeclarativeAnchorLine::AnchorLine, anchorLine);
- QFETCH(QDeclarativeAnchors::UsedAnchor, usedAnchor);
+ QFETCH(QDeclarativeAnchors::Anchor, usedAnchor);
QDeclarativeItem *baseItem = new QDeclarativeItem;
@@ -394,16 +394,16 @@ void tst_qdeclarativeanchors::reset_data()
{
QTest::addColumn<QString>("side");
QTest::addColumn<QDeclarativeAnchorLine::AnchorLine>("anchorLine");
- QTest::addColumn<QDeclarativeAnchors::UsedAnchor>("usedAnchor");
+ QTest::addColumn<QDeclarativeAnchors::Anchor>("usedAnchor");
- QTest::newRow("left") << "left" << QDeclarativeAnchorLine::Left << QDeclarativeAnchors::HasLeftAnchor;
- QTest::newRow("top") << "top" << QDeclarativeAnchorLine::Top << QDeclarativeAnchors::HasTopAnchor;
- QTest::newRow("right") << "right" << QDeclarativeAnchorLine::Right << QDeclarativeAnchors::HasRightAnchor;
- QTest::newRow("bottom") << "bottom" << QDeclarativeAnchorLine::Bottom << QDeclarativeAnchors::HasBottomAnchor;
+ QTest::newRow("left") << "left" << QDeclarativeAnchorLine::Left << QDeclarativeAnchors::LeftAnchor;
+ QTest::newRow("top") << "top" << QDeclarativeAnchorLine::Top << QDeclarativeAnchors::TopAnchor;
+ QTest::newRow("right") << "right" << QDeclarativeAnchorLine::Right << QDeclarativeAnchors::RightAnchor;
+ QTest::newRow("bottom") << "bottom" << QDeclarativeAnchorLine::Bottom << QDeclarativeAnchors::BottomAnchor;
- QTest::newRow("hcenter") << "horizontalCenter" << QDeclarativeAnchorLine::HCenter << QDeclarativeAnchors::HasHCenterAnchor;
- QTest::newRow("vcenter") << "verticalCenter" << QDeclarativeAnchorLine::VCenter << QDeclarativeAnchors::HasVCenterAnchor;
- QTest::newRow("baseline") << "baseline" << QDeclarativeAnchorLine::Baseline << QDeclarativeAnchors::HasBaselineAnchor;
+ QTest::newRow("hcenter") << "horizontalCenter" << QDeclarativeAnchorLine::HCenter << QDeclarativeAnchors::HCenterAnchor;
+ QTest::newRow("vcenter") << "verticalCenter" << QDeclarativeAnchorLine::VCenter << QDeclarativeAnchors::VCenterAnchor;
+ QTest::newRow("baseline") << "baseline" << QDeclarativeAnchorLine::Baseline << QDeclarativeAnchors::BaselineAnchor;
}
void tst_qdeclarativeanchors::resetConvenience()
diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
index 49d430e..e2d3ee4 100644
--- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
+++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
@@ -276,6 +276,7 @@ void tst_QDeclarativeDebug::initTestCase()
{
qRegisterMetaType<QDeclarativeDebugWatch::State>();
+ QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3768...");
qputenv("QML_DEBUG_SERVER_PORT", "3768");
m_engine = new QDeclarativeEngine(this);
@@ -301,13 +302,14 @@ void tst_QDeclarativeDebug::initTestCase()
}
m_rootItem = qobject_cast<QDeclarativeItem*>(m_components.first());
-
// add an extra context to test for multiple contexts
QDeclarativeContext *context = new QDeclarativeContext(m_engine->rootContext(), this);
context->setObjectName("tst_QDeclarativeDebug_childContext");
m_conn = new QDeclarativeDebugConnection(this);
m_conn->connectToHost("127.0.0.1", 3768);
+
+ QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Connection established");
bool ok = m_conn->waitForConnected();
Q_ASSERT(ok);
QTRY_VERIFY(QDeclarativeDebugService::hasDebuggingClient());
diff --git a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
index fb17f90..a19c2c2 100644
--- a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
+++ b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
@@ -74,11 +74,15 @@ private slots:
void tst_QDeclarativeDebugClient::initTestCase()
{
- qputenv("QML_DEBUG_SERVER_PORT", "3768");
+ QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3770...");
+
+ qputenv("QML_DEBUG_SERVER_PORT", "3770");
new QDeclarativeEngine(this);
m_conn = new QDeclarativeDebugConnection(this);
- m_conn->connectToHost("127.0.0.1", 3768);
+ m_conn->connectToHost("127.0.0.1", 3770);
+
+ QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Connection established");
bool ok = m_conn->waitForConnected();
Q_ASSERT(ok);
diff --git a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
index 80d7f76..9ebbbaf 100644
--- a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
+++ b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
@@ -76,11 +76,14 @@ private slots:
void tst_QDeclarativeDebugService::initTestCase()
{
- qputenv("QML_DEBUG_SERVER_PORT", "3768");
+ QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3769...");
+ qputenv("QML_DEBUG_SERVER_PORT", "3769");
new QDeclarativeEngine(this);
m_conn = new QDeclarativeDebugConnection(this);
- m_conn->connectToHost("127.0.0.1", 3768);
+ m_conn->connectToHost("127.0.0.1", 3769);
+
+ QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Connection established");
bool ok = m_conn->waitForConnected();
Q_ASSERT(ok);
@@ -151,7 +154,7 @@ void tst_QDeclarativeDebugService::idForObject()
int idB = QDeclarativeDebugService::idForObject(objB);
QVERIFY(idB != idA);
QCOMPARE(QDeclarativeDebugService::objectForId(idB), objB);
-
+
delete objA;
delete objB;
}
diff --git a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp
index 1f0c47c..a951827 100644
--- a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp
+++ b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp
@@ -1303,7 +1303,8 @@ void tst_qdeclarativedom::position()
QCOMPARE(child2Value.length(), 6);
// All QDeclarativeDomList
- qWarning("QDeclarativeListValue position test required");
+ QCOMPARE(childrenList.position(), 189);
+ QCOMPARE(childrenList.length(), 18);
}
QTEST_MAIN(tst_qdeclarativedom)
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.1.qml b/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.1.qml
new file mode 100644
index 0000000..3fd9131
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.1.qml
@@ -0,0 +1,9 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ property bool runTest: false
+
+ property variant a: MyQmlObject {}
+
+ objectProperty: (runTest == false)?a:null
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.2.qml
new file mode 100644
index 0000000..19b0c42
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.2.qml
@@ -0,0 +1,11 @@
+import Qt.test 1.0
+import Qt 4.6
+
+MyQmlObject {
+ objectProperty: MyQmlObject {}
+
+ Component.onCompleted: {
+ objectProperty = null;
+ }
+}
+
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/dynamicCreation.qml b/tests/auto/declarative/qdeclarativeecmascript/data/dynamicCreation.qml
index 2fef03a..3047e9b 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/data/dynamicCreation.qml
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/dynamicCreation.qml
@@ -5,23 +5,23 @@ MyQmlObject{
objectName: "obj"
function createOne()
{
- obj.objectProperty = createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"objectOne"}', obj);
+ obj.objectProperty = Qt.createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"objectOne"}', obj);
}
function createTwo()
{
- var component = createComponent('dynamicCreation.helper.qml');
+ var component = Qt.createComponent('dynamicCreation.helper.qml');
obj.objectProperty = component.createObject();
}
function createThree()
{
- obj.objectProperty = createQmlObject('TypeForDynamicCreation{}', obj);
+ obj.objectProperty = Qt.createQmlObject('TypeForDynamicCreation{}', obj);
}
function dontCrash()
{
- var component = createComponent('file-doesnt-exist.qml');
+ var component = Qt.createComponent('file-doesnt-exist.qml');
obj.objectProperty = component.createObject();
}
}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/dynamicDeletion.qml b/tests/auto/declarative/qdeclarativeecmascript/data/dynamicDeletion.qml
index 0855b29..f41e526 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/data/dynamicDeletion.qml
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/dynamicDeletion.qml
@@ -5,7 +5,7 @@ MyQmlObject{
objectName: "obj"
function create()
{
- obj.objectProperty = createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"emptyObject"}', obj);
+ obj.objectProperty = Qt.createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"emptyObject"}', obj);
}
function killOther()
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/extensionObjectsPropertyOverride.qml b/tests/auto/declarative/qdeclarativeecmascript/data/extensionObjectsPropertyOverride.qml
new file mode 100644
index 0000000..3c443cb
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/extensionObjectsPropertyOverride.qml
@@ -0,0 +1,7 @@
+import Qt.test 1.0
+
+OverrideDefaultPropertyObject
+{
+ MyBaseExtendedObject {
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
index 0d07055..154ff4d 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
@@ -72,6 +72,14 @@ private:
int m_value;
};
+class DefaultPropertyExtensionObject : public QObject
+{
+ Q_OBJECT
+ Q_CLASSINFO("DefaultProperty", "firstProperty")
+public:
+ DefaultPropertyExtensionObject(QObject *parent) : QObject(parent) {}
+};
+
void registerTypes()
{
qmlRegisterType<MyQmlObject>("Qt.test", 1,0, "MyQmlObject");
@@ -81,6 +89,8 @@ void registerTypes()
qmlRegisterExtendedType<MyExtendedObject, ExtensionObject>("Qt.test", 1,0, "MyExtendedObject");
qmlRegisterType<MyTypeObject>("Qt.test", 1,0, "MyTypeObject");
qmlRegisterType<NumberAssignment>("Qt.test", 1,0, "NumberAssignment");
+ qmlRegisterExtendedType<DefaultPropertyExtendedObject, DefaultPropertyExtensionObject>("Qt.test", 1,0, "DefaultPropertyExtendedObject");
+ qmlRegisterType<OverrideDefaultPropertyObject>("Qt.test", 1,0, "OverrideDefaultPropertyObject");
}
#include "testtypes.moc"
diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
index 79d3226..1381d57 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
+++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
@@ -659,6 +659,31 @@ public:
void setTest12(unsigned int v) { _test12 = v; }
};
+class DefaultPropertyExtendedObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QObject *firstProperty READ firstProperty WRITE setFirstProperty)
+ Q_PROPERTY(QObject *secondProperty READ secondProperty WRITE setSecondProperty)
+public:
+ DefaultPropertyExtendedObject(QObject *parent = 0) : QObject(parent), m_firstProperty(0), m_secondProperty(0) {}
+
+ QObject *firstProperty() const { return m_firstProperty; }
+ QObject *secondProperty() const { return m_secondProperty; }
+ void setFirstProperty(QObject *property) { m_firstProperty = property; }
+ void setSecondProperty(QObject *property) { m_secondProperty = property; }
+private:
+ QObject* m_firstProperty;
+ QObject* m_secondProperty;
+};
+
+class OverrideDefaultPropertyObject : public DefaultPropertyExtendedObject
+{
+ Q_OBJECT
+ Q_CLASSINFO("DefaultProperty", "secondProperty")
+public:
+ OverrideDefaultPropertyObject() {}
+};
+
void registerTypes();
#endif // TESTTYPES_H
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 33629b8..6939290 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -90,6 +90,7 @@ private slots:
void objectPropertiesTriggerReeval();
void deferredProperties();
void extensionObjects();
+ void overrideExtensionProperties();
void attachedProperties();
void enums();
void valueTypeFunctions();
@@ -140,6 +141,7 @@ private slots:
void variantsAssignedUndefined();
void qtbug_9792();
void noSpuriousWarningsAtShutdown();
+ void canAssignNullToQObject();
void callQtInvokables();
private:
@@ -565,6 +567,16 @@ void tst_qdeclarativeecmascript::extensionObjects()
}
+void tst_qdeclarativeecmascript::overrideExtensionProperties()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("extensionObjectsPropertyOverride.qml"));
+ OverrideDefaultPropertyObject *object =
+ qobject_cast<OverrideDefaultPropertyObject *>(component.create());
+ QVERIFY(object != 0);
+ QVERIFY(object->secondProperty() != 0);
+ QVERIFY(object->firstProperty() == 0);
+}
+
void tst_qdeclarativeecmascript::attachedProperties()
{
QDeclarativeComponent component(&engine, TEST_FILE("attachedProperty.qml"));
@@ -2179,6 +2191,35 @@ void tst_qdeclarativeecmascript::noSpuriousWarningsAtShutdown()
}
}
+void tst_qdeclarativeecmascript::canAssignNullToQObject()
+{
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("canAssignNullToQObject.1.qml"));
+
+ MyQmlObject *o = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(o != 0);
+
+ QVERIFY(o->objectProperty() != 0);
+
+ o->setProperty("runTest", true);
+
+ QVERIFY(o->objectProperty() == 0);
+
+ delete o;
+ }
+
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("canAssignNullToQObject.2.qml"));
+
+ MyQmlObject *o = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(o != 0);
+
+ QVERIFY(o->objectProperty() == 0);
+
+ delete o;
+ }
+}
+
QTEST_MAIN(tst_qdeclarativeecmascript)
#include "tst_qdeclarativeecmascript.moc"
diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml b/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml
new file mode 100644
index 0000000..adde522
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml
@@ -0,0 +1,81 @@
+import Qt 4.6
+
+Rectangle {
+ width: 800; height: 600
+
+ FocusScope {
+ focus: true
+
+ FocusScope {
+ id: firstScope
+ focus: true
+
+ Rectangle {
+ objectName: "item0"
+ height: 120; width: 420
+
+ color: "transparent"
+ border.width: 5; border.color: firstScope.wantsFocus?"blue":"black"
+
+ Rectangle {
+ id: item1; objectName: "item1"
+ x: 10; y: 10; width: 100; height: 100; color: "green"
+ border.width: 5; border.color: wantsFocus?"blue":"black"
+ focus: true
+
+ Rectangle {
+ width: 50; height: 50; anchors.centerIn: parent
+ color: parent.focus?"red":"transparent"
+ }
+ }
+
+ Rectangle {
+ id: item2; objectName: "item2"
+ x: 310; y: 10; width: 100; height: 100; color: "green"
+ border.width: 5; border.color: wantsFocus?"blue":"black"
+
+ Rectangle {
+ width: 50; height: 50; anchors.centerIn: parent
+ color: parent.focus?"red":"transparent"
+ }
+ }
+ }
+ }
+
+ FocusScope {
+ id: secondScope
+
+ Rectangle {
+ objectName: "item3"
+ y: 160; height: 120; width: 420
+
+ color: "transparent"
+ border.width: 5; border.color: secondScope.wantsFocus?"blue":"black"
+
+ Rectangle {
+ id: item4; objectName: "item4"
+ x: 10; y: 10; width: 100; height: 100; color: "green"
+ border.width: 5; border.color: wantsFocus?"blue":"black"
+
+ Rectangle {
+ width: 50; height: 50; anchors.centerIn: parent
+ color: parent.focus?"red":"transparent"
+ }
+ }
+
+ Rectangle {
+ id: item5; objectName: "item5"
+ x: 310; y: 10; width: 100; height: 100; color: "green"
+ border.width: 5; border.color: wantsFocus?"blue":"black"
+
+ Rectangle {
+ width: 50; height: 50; anchors.centerIn: parent
+ color: parent.focus?"red":"transparent"
+ }
+ }
+ }
+ }
+ }
+ Keys.onDigit4Pressed: item4.focus = true
+ Keys.onDigit5Pressed: item5.forceFocus()
+}
diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test.qml
index 647e5bf..f060bdc 100644
--- a/tests/auto/declarative/qdeclarativefocusscope/data/test.qml
+++ b/tests/auto/declarative/qdeclarativefocusscope/data/test.qml
@@ -20,7 +20,7 @@ Rectangle {
color: "transparent"
border.width: 5
- //border.color: myScope.wantsFocus?"blue":"black"
+ border.color: myScope.wantsFocus?"blue":"black"
Rectangle {
id: item1; objectName: "item1"
diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml
index d8bd390..e41c6b8 100644
--- a/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml
+++ b/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml
@@ -19,7 +19,7 @@ Rectangle {
color: "transparent"
border.width: 5
- //border.color: myScope.wantsFocus?"blue":"black"
+ border.color: myScope.wantsFocus?"blue":"black"
Rectangle {
id: item1; objectName: "item1"
diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml
index da452cf..838e557 100644
--- a/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml
+++ b/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml
@@ -20,7 +20,7 @@ Rectangle {
color: "transparent"
border.width: 5
- //border.color: myScope.wantsFocus?"blue":"black"
+ border.color: myScope.wantsFocus?"blue":"black"
Rectangle {
x: 10; y: 10
diff --git a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp
index 1bd8331..04bb1c5 100644
--- a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp
+++ b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp
@@ -63,6 +63,7 @@ private slots:
void nested();
void noFocus();
void textEdit();
+ void forceFocus();
};
/*
@@ -273,6 +274,62 @@ void tst_qdeclarativefocusscope::textEdit()
delete view;
}
+void tst_qdeclarativefocusscope::forceFocus()
+{
+ QDeclarativeView *view = new QDeclarativeView;
+ view->setSource(QUrl::fromLocalFile(SRCDIR "/data/forcefocus.qml"));
+
+ QDeclarativeRectangle *item0 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item0"));
+ QDeclarativeRectangle *item1 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item1"));
+ QDeclarativeRectangle *item2 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item2"));
+ QDeclarativeRectangle *item3 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item3"));
+ QDeclarativeRectangle *item4 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item4"));
+ QDeclarativeRectangle *item5 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item5"));
+ QVERIFY(item0 != 0);
+ QVERIFY(item1 != 0);
+ QVERIFY(item2 != 0);
+ QVERIFY(item3 != 0);
+ QVERIFY(item4 != 0);
+ QVERIFY(item5 != 0);
+
+ view->show();
+ qApp->setActiveWindow(view);
+ qApp->processEvents();
+
+#ifdef Q_WS_X11
+ // to be safe and avoid failing setFocus with window managers
+ qt_x11_wait_for_window_manager(view);
+#endif
+
+ QVERIFY(view->hasFocus());
+ QVERIFY(view->scene()->hasFocus());
+ QVERIFY(item0->wantsFocus() == true);
+ QVERIFY(item1->hasFocus() == true);
+ QVERIFY(item2->hasFocus() == false);
+ QVERIFY(item3->wantsFocus() == false);
+ QVERIFY(item4->hasFocus() == false);
+ QVERIFY(item5->hasFocus() == false);
+
+ QTest::keyClick(view, Qt::Key_4);
+ QVERIFY(item0->wantsFocus() == true);
+ QVERIFY(item1->hasFocus() == true);
+ QVERIFY(item2->hasFocus() == false);
+ QVERIFY(item3->wantsFocus() == false);
+ QVERIFY(item4->hasFocus() == false);
+ QVERIFY(item5->hasFocus() == false);
+
+ QTest::keyClick(view, Qt::Key_5);
+ QVERIFY(item0->wantsFocus() == false);
+ QVERIFY(item1->hasFocus() == false);
+ QVERIFY(item2->hasFocus() == false);
+ QVERIFY(item3->wantsFocus() == true);
+ QVERIFY(item4->hasFocus() == false);
+ QVERIFY(item5->hasFocus() == true);
+
+ delete view;
+}
+
+
QTEST_MAIN(tst_qdeclarativefocusscope)
#include "tst_qdeclarativefocusscope.moc"
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.errors.txt
new file mode 100644
index 0000000..78aa471
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.errors.txt
@@ -0,0 +1 @@
+4:5:Invalid use of namespace
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.qml b/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.qml
new file mode 100644
index 0000000..4681879
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.qml
@@ -0,0 +1,5 @@
+import Qt 4.6 as Qt
+
+Qt.QtObject {
+ Qt: 10
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.7.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/component.7.errors.txt
new file mode 100644
index 0000000..b144814
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/component.7.errors.txt
@@ -0,0 +1 @@
+3:1:Component objects cannot declare new properties.
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.7.qml b/tests/auto/declarative/qdeclarativelanguage/data/component.7.qml
new file mode 100644
index 0000000..ad708fe
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/component.7.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+Component {
+ property int a
+ QtObject {}
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.8.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/component.8.errors.txt
new file mode 100644
index 0000000..6f2d0d2
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/component.8.errors.txt
@@ -0,0 +1 @@
+3:1:Component objects cannot declare new signals.
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.8.qml b/tests/auto/declarative/qdeclarativelanguage/data/component.8.qml
new file mode 100644
index 0000000..67b1b89
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/component.8.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+Component {
+ signal a
+ QtObject {}
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.9.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/component.9.errors.txt
new file mode 100644
index 0000000..92f1456
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/component.9.errors.txt
@@ -0,0 +1 @@
+3:1:Component objects cannot declare new functions.
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.9.qml b/tests/auto/declarative/qdeclarativelanguage/data/component.9.qml
new file mode 100644
index 0000000..a4dbae0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/component.9.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+Component {
+ function a() {}
+ QtObject {}
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.errors.txt
new file mode 100644
index 0000000..1f9f916
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.errors.txt
@@ -0,0 +1 @@
+5:5:Duplicate default property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.qml
new file mode 100644
index 0000000..1efe791
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ default property QtObject a
+ default property QtObject b
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.errors.txt
new file mode 100644
index 0000000..7a4f63b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.errors.txt
@@ -0,0 +1 @@
+5:5:Duplicate property name
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.qml
new file mode 100644
index 0000000..4e7b5ae
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ property int a
+ property bool a
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt
new file mode 100644
index 0000000..c5860a2
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt
@@ -0,0 +1 @@
+3:1:Duplicate signal name
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.qml
new file mode 100644
index 0000000..573c1ba
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ signal a
+ signal a
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt
new file mode 100644
index 0000000..b293c86
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt
@@ -0,0 +1 @@
+3:1:Duplicate method name
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.qml
new file mode 100644
index 0000000..51dd834
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ function a() {}
+ function a() {}
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.errors.txt
new file mode 100644
index 0000000..015d55b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.errors.txt
@@ -0,0 +1 @@
+3:1:UnknownType is not a type
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.qml
new file mode 100644
index 0000000..6b93e00
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ property UnknownType a
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.errors.txt
new file mode 100644
index 0000000..9848e48
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.errors.txt
@@ -0,0 +1 @@
+3:1:No property alias location
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.qml
new file mode 100644
index 0000000..985fb94
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.qml
@@ -0,0 +1,5 @@
+import Qt 4.7
+
+QtObject {
+ property alias a
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.errors.txt
new file mode 100644
index 0000000..3e15628
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.errors.txt
@@ -0,0 +1 @@
+4:23:Invalid alias location
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.qml
new file mode 100644
index 0000000..a2ac91c
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.qml
@@ -0,0 +1,6 @@
+import Qt 4.7
+
+QtObject {
+ property alias a: 10
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt
new file mode 100644
index 0000000..7260be4
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias reference. An alias reference must be specified as <id> or <id>.<property>
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml
new file mode 100644
index 0000000..cc71753
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: root.rectProperty.x
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt
new file mode 100644
index 0000000..7260be4
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias reference. An alias reference must be specified as <id> or <id>.<property>
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.qml
new file mode 100644
index 0000000..cfdfca0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: print("Hello!")
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.errors.txt
new file mode 100644
index 0000000..6f78e59
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias reference. Unable to find id "otherroot"
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.qml
new file mode 100644
index 0000000..0c1d5d7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: otherroot
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.errors.txt
new file mode 100644
index 0000000..93652a7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias location
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.qml
new file mode 100644
index 0000000..edfdb24
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: root.foobar
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.errors.txt
new file mode 100644
index 0000000..189a795
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.errors.txt
@@ -0,0 +1 @@
+4:13:Attached properties cannot be used here
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.qml
new file mode 100644
index 0000000..7de503e
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ grouped.MyQmlObject.value: 10
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.errors.txt
new file mode 100644
index 0000000..46d7be2
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.errors.txt
@@ -0,0 +1 @@
+5:9:Attached properties cannot be used here
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.qml
new file mode 100644
index 0000000..986ab85
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ grouped {
+ MyQmlObject.value: 10
+ }
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.errors.txt
new file mode 100644
index 0000000..b4210a1
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.errors.txt
@@ -0,0 +1 @@
+3:5:"MyQmlObject" cannot operate on "value"
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.qml
new file mode 100644
index 0000000..d748bf4
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ MyQmlObject on value {}
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.errors.txt
new file mode 100644
index 0000000..35d2d35
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.errors.txt
@@ -0,0 +1 @@
+4:24:Cannot assign object to list
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.qml
new file mode 100644
index 0000000..6c628e4
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+import Qt 4.7
+MyContainer {
+ containerChildren: QtObject {}
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.errors.txt
new file mode 100644
index 0000000..e1f7ec5
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.errors.txt
@@ -0,0 +1 @@
+5:5:Property value set multiple times
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.qml b/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.qml
new file mode 100644
index 0000000..7d03139
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ rectProperty.x: 10
+ rectProperty.x: 11
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/noCreation.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/noCreation.errors.txt
new file mode 100644
index 0000000..23cd3f3
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/noCreation.errors.txt
@@ -0,0 +1 @@
+3:1:Keys is only available via attached properties
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/noCreation.qml b/tests/auto/declarative/qdeclarativelanguage/data/noCreation.qml
new file mode 100644
index 0000000..0612fa2
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/noCreation.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+Keys {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.errors.txt
new file mode 100644
index 0000000..d857a04
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.errors.txt
@@ -0,0 +1 @@
+3:5:Invalid property assignment: "readOnlyString" is a read-only property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.qml b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.qml
new file mode 100644
index 0000000..5338ac7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ MyPropertyValueSource on readOnlyString {}
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.errors.txt
new file mode 100644
index 0000000..baf4766
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.errors.txt
@@ -0,0 +1 @@
+3:27:Invalid property assignment: "readOnlyEnumProperty" is a read-only property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.qml b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.qml
new file mode 100644
index 0000000..422d13d
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyTypeObject {
+ readOnlyEnumProperty: MyTypeObject.EnumValue1
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.errors.txt
new file mode 100644
index 0000000..14463e0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.errors.txt
@@ -0,0 +1 @@
+4:21:Invalid property assignment: script expected
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.qml
new file mode 100644
index 0000000..f07d223
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyTypeObject {
+ scriptProperty: MyTypeObject {}
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.errors.txt
new file mode 100644
index 0000000..f8a776f
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.errors.txt
@@ -0,0 +1 @@
+4:40:Cannot assign multiple values to a script property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.qml
new file mode 100644
index 0000000..dc825c7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ scriptProperty: [ MyTypeObject {}, MyTypeObject {} ]
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.errors.txt
new file mode 100644
index 0000000..77cf210
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.errors.txt
@@ -0,0 +1 @@
+4:24:Cannot assign object to property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.qml b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.qml
new file mode 100644
index 0000000..1ddccc0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+import Qt 4.7
+MyQmlObject {
+ qmlobjectProperty: QtObject {}
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp
index 623775a..5d87404 100644
--- a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp
@@ -52,8 +52,7 @@ void registerTypes()
qmlRegisterType<MyNamespace::MySecondNamespacedType>("Test",1,0,"MySecondNamespacedType");
qmlRegisterType<MyGroupedObject>();
- qmlRegisterCustomType<MyCustomParserType>("Test", 1, 0, "MyCustomParserType", "MyCustomParserType",
- new MyCustomParserTypeParser);
+ qmlRegisterCustomType<MyCustomParserType>("Test", 1, 0, "MyCustomParserType", new MyCustomParserTypeParser);
}
QVariant myCustomVariantTypeConverter(const QString &data)
diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.h b/tests/auto/declarative/qdeclarativelanguage/testtypes.h
index 951cea0..89f99c8 100644
--- a/tests/auto/declarative/qdeclarativelanguage/testtypes.h
+++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.h
@@ -200,6 +200,7 @@ class MyTypeObject : public QObject
Q_PROPERTY(QDeclarativeComponent *componentProperty READ componentProperty WRITE setComponentProperty)
Q_PROPERTY(MyFlags flagProperty READ flagProperty WRITE setFlagProperty)
Q_PROPERTY(MyEnum enumProperty READ enumProperty WRITE setEnumProperty)
+ Q_PROPERTY(MyEnum readOnlyEnumProperty READ readOnlyEnumProperty)
Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty)
Q_PROPERTY(uint uintProperty READ uintProperty WRITE setUintProperty)
Q_PROPERTY(int intProperty READ intProperty WRITE setIntProperty)
@@ -273,6 +274,10 @@ public:
enumPropertyValue = v;
}
+ MyEnum readOnlyEnumProperty() const {
+ return EnumVal1;
+ }
+
QString stringPropertyValue;
QString stringProperty() const {
return stringPropertyValue;
@@ -467,16 +472,19 @@ class MyContainer : public QObject
{
Q_OBJECT
Q_PROPERTY(QDeclarativeListProperty<QObject> children READ children)
+ Q_PROPERTY(QDeclarativeListProperty<MyContainer> containerChildren READ containerChildren)
Q_PROPERTY(QDeclarativeListProperty<MyInterface> qlistInterfaces READ qlistInterfaces)
Q_CLASSINFO("DefaultProperty", "children")
public:
MyContainer() {}
QDeclarativeListProperty<QObject> children() { return QDeclarativeListProperty<QObject>(this, m_children); }
+ QDeclarativeListProperty<MyContainer> containerChildren() { return QDeclarativeListProperty<MyContainer>(this, m_containerChildren); }
QList<QObject *> *getChildren() { return &m_children; }
QDeclarativeListProperty<MyInterface> qlistInterfaces() { return QDeclarativeListProperty<MyInterface>(this, m_interfaces); }
QList<MyInterface *> *getQListInterfaces() { return &m_interfaces; }
+ QList<MyContainer*> m_containerChildren;
QList<QObject*> m_children;
QList<MyInterface *> m_interfaces;
};
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 07fbf83..c1397de 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -225,11 +225,15 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("wrongType (number string for int)") << "wrongType.13.qml" << "wrongType.13.errors.txt" << false;
QTest::newRow("wrongType (int for string)") << "wrongType.14.qml" << "wrongType.14.errors.txt" << false;
QTest::newRow("wrongType (int for url)") << "wrongType.15.qml" << "wrongType.15.errors.txt" << false;
+ QTest::newRow("wrongType (invalid object)") << "wrongType.16.qml" << "wrongType.16.errors.txt" << false;
QTest::newRow("readOnly.1") << "readOnly.1.qml" << "readOnly.1.errors.txt" << false;
QTest::newRow("readOnly.2") << "readOnly.2.qml" << "readOnly.2.errors.txt" << false;
QTest::newRow("readOnly.3") << "readOnly.3.qml" << "readOnly.3.errors.txt" << false;
+ QTest::newRow("readOnly.4") << "readOnly.4.qml" << "readOnly.4.errors.txt" << false;
+ QTest::newRow("readOnly.5") << "readOnly.5.qml" << "readOnly.5.errors.txt" << false;
+ QTest::newRow("listAssignment.1") << "listAssignment.1.qml" << "listAssignment.1.errors.txt" << false;
QTest::newRow("listAssignment.2") << "listAssignment.2.qml" << "listAssignment.2.errors.txt" << false;
QTest::newRow("listAssignment.3") << "listAssignment.3.qml" << "listAssignment.3.errors.txt" << false;
@@ -243,6 +247,9 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("invalidID.8") << "invalidID.8.qml" << "invalidID.8.errors.txt" << false;
QTest::newRow("invalidID.9") << "invalidID.9.qml" << "invalidID.9.errors.txt" << false;
+ QTest::newRow("scriptString.1") << "scriptString.1.qml" << "scriptString.1.errors.txt" << false;
+ QTest::newRow("scriptString.2") << "scriptString.2.qml" << "scriptString.2.errors.txt" << false;
+
QTest::newRow("unsupportedProperty") << "unsupportedProperty.qml" << "unsupportedProperty.errors.txt" << false;
QTest::newRow("nullDotProperty") << "nullDotProperty.qml" << "nullDotProperty.errors.txt" << true;
QTest::newRow("fakeDotProperty") << "fakeDotProperty.qml" << "fakeDotProperty.errors.txt" << false;
@@ -296,6 +303,9 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("Component.4") << "component.4.qml" << "component.4.errors.txt" << false;
QTest::newRow("Component.5") << "component.5.qml" << "component.5.errors.txt" << false;
QTest::newRow("Component.6") << "component.6.qml" << "component.6.errors.txt" << false;
+ QTest::newRow("Component.7") << "component.7.qml" << "component.7.errors.txt" << false;
+ QTest::newRow("Component.8") << "component.8.qml" << "component.8.errors.txt" << false;
+ QTest::newRow("Component.9") << "component.9.qml" << "component.9.errors.txt" << false;
QTest::newRow("MultiSet.1") << "multiSet.1.qml" << "multiSet.1.errors.txt" << false;
QTest::newRow("MultiSet.2") << "multiSet.2.qml" << "multiSet.2.errors.txt" << false;
@@ -307,6 +317,20 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("MultiSet.8") << "multiSet.8.qml" << "multiSet.8.errors.txt" << false;
QTest::newRow("MultiSet.9") << "multiSet.9.qml" << "multiSet.9.errors.txt" << false;
QTest::newRow("MultiSet.10") << "multiSet.10.qml" << "multiSet.10.errors.txt" << false;
+ QTest::newRow("MultiSet.11") << "multiSet.11.qml" << "multiSet.11.errors.txt" << false;
+
+ QTest::newRow("dynamicMeta.1") << "dynamicMeta.1.qml" << "dynamicMeta.1.errors.txt" << false;
+ QTest::newRow("dynamicMeta.2") << "dynamicMeta.2.qml" << "dynamicMeta.2.errors.txt" << false;
+ QTest::newRow("dynamicMeta.3") << "dynamicMeta.3.qml" << "dynamicMeta.3.errors.txt" << false;
+ QTest::newRow("dynamicMeta.4") << "dynamicMeta.4.qml" << "dynamicMeta.4.errors.txt" << false;
+ QTest::newRow("dynamicMeta.5") << "dynamicMeta.5.qml" << "dynamicMeta.5.errors.txt" << false;
+
+ QTest::newRow("invalidAlias.1") << "invalidAlias.1.qml" << "invalidAlias.1.errors.txt" << false;
+ QTest::newRow("invalidAlias.2") << "invalidAlias.2.qml" << "invalidAlias.2.errors.txt" << false;
+ QTest::newRow("invalidAlias.3") << "invalidAlias.3.qml" << "invalidAlias.3.errors.txt" << false;
+ QTest::newRow("invalidAlias.4") << "invalidAlias.4.qml" << "invalidAlias.4.errors.txt" << false;
+ QTest::newRow("invalidAlias.5") << "invalidAlias.5.qml" << "invalidAlias.5.errors.txt" << false;
+ QTest::newRow("invalidAlias.6") << "invalidAlias.6.qml" << "invalidAlias.6.errors.txt" << false;
QTest::newRow("invalidAttachedProperty.1") << "invalidAttachedProperty.1.qml" << "invalidAttachedProperty.1.errors.txt" << false;
QTest::newRow("invalidAttachedProperty.2") << "invalidAttachedProperty.2.qml" << "invalidAttachedProperty.2.errors.txt" << false;
@@ -319,6 +343,8 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("invalidAttachedProperty.9") << "invalidAttachedProperty.9.qml" << "invalidAttachedProperty.9.errors.txt" << false;
QTest::newRow("invalidAttachedProperty.10") << "invalidAttachedProperty.10.qml" << "invalidAttachedProperty.10.errors.txt" << false;
QTest::newRow("invalidAttachedProperty.11") << "invalidAttachedProperty.11.qml" << "invalidAttachedProperty.11.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.12") << "invalidAttachedProperty.12.qml" << "invalidAttachedProperty.12.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.13") << "invalidAttachedProperty.13.qml" << "invalidAttachedProperty.13.errors.txt" << false;
QTest::newRow("emptySignal") << "emptySignal.qml" << "emptySignal.errors.txt" << false;
QTest::newRow("emptySignal.2") << "emptySignal.2.qml" << "emptySignal.2.errors.txt" << false;
@@ -330,7 +356,10 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("missingValueTypeProperty") << "missingValueTypeProperty.qml" << "missingValueTypeProperty.errors.txt" << false;
QTest::newRow("objectValueTypeProperty") << "objectValueTypeProperty.qml" << "objectValueTypeProperty.errors.txt" << false;
QTest::newRow("enumTypes") << "enumTypes.qml" << "enumTypes.errors.txt" << false;
+ QTest::newRow("noCreation") << "noCreation.qml" << "noCreation.errors.txt" << false;
QTest::newRow("destroyedSignal") << "destroyedSignal.qml" << "destroyedSignal.errors.txt" << false;
+ QTest::newRow("assignToNamespace") << "assignToNamespace.qml" << "assignToNamespace.errors.txt" << false;
+ QTest::newRow("invalidOn") << "invalidOn.qml" << "invalidOn.errors.txt" << false;
}
diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
index bbea98a..e4c296f 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
@@ -326,6 +326,12 @@ void tst_qdeclarativelistmodel::dynamic_worker()
if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: Cannot add nested list values when modifying or after modification from a worker script");
+ if (QByteArray(QTest::currentDataTag()).startsWith("nested-append")) {
+ int callsToGet = script.count(QLatin1String(";get("));
+ for (int i=0; i<callsToGet; i++)
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: get: index 0 out of range");
+ }
+
QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
Q_ARG(QVariant, operations.mid(0, operations.length()-1))));
waitForWorker(item);
diff --git a/tests/auto/declarative/qdeclarativeloader/data/SetSourceComponent.qml b/tests/auto/declarative/qdeclarativeloader/data/SetSourceComponent.qml
index 1db56c4..f600e85 100644
--- a/tests/auto/declarative/qdeclarativeloader/data/SetSourceComponent.qml
+++ b/tests/auto/declarative/qdeclarativeloader/data/SetSourceComponent.qml
@@ -1,6 +1,9 @@
import Qt 4.6
Item {
+ function clear() {
+ loader.sourceComponent = undefined
+ }
Component { id: comp; Rectangle { width: 100; height: 50 } }
- Loader { sourceComponent: comp }
+ Loader { id: loader; sourceComponent: comp }
}
diff --git a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
index 1b17a56..7cdadb4 100644
--- a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
+++ b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
@@ -198,6 +198,26 @@ void tst_QDeclarativeLoader::clear()
delete item;
}
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("/SetSourceComponent.qml"));
+ QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(component.create());
+ QVERIFY(item);
+
+ QDeclarativeLoader *loader = qobject_cast<QDeclarativeLoader*>(item->QGraphicsObject::children().at(1));
+ QVERIFY(loader);
+ QVERIFY(loader->item());
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+
+ QMetaObject::invokeMethod(item, "clear");
+
+ QVERIFY(loader->item() == 0);
+ QCOMPARE(loader->progress(), 0.0);
+ QCOMPARE(loader->status(), QDeclarativeLoader::Null);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 0);
+
+ delete item;
+ }
}
void tst_QDeclarativeLoader::urlToComponent()
@@ -518,9 +538,8 @@ void tst_QDeclarativeLoader::nonItem()
void tst_QDeclarativeLoader::vmeErrors()
{
QDeclarativeComponent component(&engine, TEST_FILE("vmeErrors.qml"));
- //ignore message for now
- //QString err = QUrl::fromLocalFile(SRCDIR "/data/VmeError.qml:6: Cannot assign object type QObject with no default method\n onSomethingHappened: QtObject {}) ");
- //QTest::ignoreMessage(QtWarningMsg, err.toLatin1().constData());
+ QString err = QUrl::fromLocalFile(SRCDIR).toString() + "/data/VmeError.qml:6: Cannot assign object type QObject with no default method";
+ QTest::ignoreMessage(QtWarningMsg, err.toLatin1().constData());
QDeclarativeLoader *loader = qobject_cast<QDeclarativeLoader*>(component.create());
QVERIFY(loader);
QVERIFY(loader->item() == 0);
diff --git a/tests/auto/declarative/qdeclarativemousearea/data/dragging.qml b/tests/auto/declarative/qdeclarativemousearea/data/dragging.qml
new file mode 100644
index 0000000..a28f049
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemousearea/data/dragging.qml
@@ -0,0 +1,28 @@
+import Qt 4.7
+Rectangle {
+ id: whiteRect
+ width: 200
+ height: 200
+ color: "white"
+ Rectangle {
+ id: blackRect
+ objectName: "blackrect"
+ color: "black"
+ y: 50
+ x: 50
+ width: 100
+ height: 100
+ opacity: (whiteRect.width-blackRect.x+whiteRect.height-blackRect.y-199)/200
+ Text { text: blackRect.opacity}
+ MouseArea {
+ objectName: "mouseregion"
+ anchors.fill: parent
+ drag.target: blackRect
+ drag.axis: Drag.XandYAxis
+ drag.minimumX: 0
+ drag.maximumX: whiteRect.width-blackRect.width
+ drag.minimumY: 0
+ drag.maximumY: whiteRect.height-blackRect.height
+ }
+ }
+ }
diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
index 4a58049..eb4aa12 100644
--- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
+++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
@@ -52,6 +52,7 @@ class tst_QDeclarativeMouseArea: public QObject
private slots:
void dragProperties();
void resetDrag();
+ void dragging();
void updateMouseAreaPosOnClick();
void updateMouseAreaPosOnResize();
void noOnClickedWithPressAndHold();
@@ -163,6 +164,61 @@ void tst_QDeclarativeMouseArea::resetDrag()
}
+void tst_QDeclarativeMouseArea::dragging()
+{
+ QDeclarativeView *canvas = createView();
+
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/dragging.qml"));
+ canvas->show();
+ canvas->setFocus();
+ QVERIFY(canvas->rootObject() != 0);
+
+ QDeclarativeMouseArea *mouseRegion = canvas->rootObject()->findChild<QDeclarativeMouseArea*>("mouseregion");
+ QDeclarativeDrag *drag = mouseRegion->drag();
+ QVERIFY(mouseRegion != 0);
+ QVERIFY(drag != 0);
+
+ // target
+ QDeclarativeItem *blackRect = canvas->rootObject()->findChild<QDeclarativeItem*>("blackrect");
+ QVERIFY(blackRect != 0);
+ QVERIFY(blackRect == drag->target());
+
+ QVERIFY(!drag->active());
+
+ QGraphicsScene *scene = canvas->scene();
+ QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
+ pressEvent.setScenePos(QPointF(100, 100));
+ pressEvent.setButton(Qt::LeftButton);
+ pressEvent.setButtons(Qt::LeftButton);
+ QApplication::sendEvent(scene, &pressEvent);
+
+ QVERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 50.0);
+ QCOMPARE(blackRect->y(), 50.0);
+
+ QGraphicsSceneMouseEvent moveEvent(QEvent::GraphicsSceneMouseMove);
+ moveEvent.setScenePos(QPointF(110, 110));
+ moveEvent.setButton(Qt::LeftButton);
+ moveEvent.setButtons(Qt::LeftButton);
+ QApplication::sendEvent(scene, &moveEvent);
+
+ QVERIFY(drag->active());
+ QCOMPARE(blackRect->x(), 60.0);
+ QCOMPARE(blackRect->y(), 60.0);
+
+ QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease);
+ releaseEvent.setScenePos(QPointF(110, 110));
+ releaseEvent.setButton(Qt::LeftButton);
+ releaseEvent.setButtons(Qt::LeftButton);
+ QApplication::sendEvent(scene, &releaseEvent);
+
+ QVERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 60.0);
+ QCOMPARE(blackRect->y(), 60.0);
+
+ delete canvas;
+}
+
QDeclarativeView *tst_QDeclarativeMouseArea::createView()
{
QDeclarativeView *canvas = new QDeclarativeView(0);
diff --git a/tests/auto/declarative/qdeclarativeqt/data/createComponent.qml b/tests/auto/declarative/qdeclarativeqt/data/createComponent.qml
index 412c467..253a4e3 100644
--- a/tests/auto/declarative/qdeclarativeqt/data/createComponent.qml
+++ b/tests/auto/declarative/qdeclarativeqt/data/createComponent.qml
@@ -6,15 +6,15 @@ QtObject {
property string relativeUrl
property string absoluteUrl
- property QtObject incorectArgCount1: createComponent()
- property QtObject incorectArgCount2: createComponent("main.qml", 10)
+ property QtObject incorectArgCount1: Qt.createComponent()
+ property QtObject incorectArgCount2: Qt.createComponent("main.qml", 10)
Component.onCompleted: {
- emptyArg = (createComponent("") == null);
- var r = createComponent("createComponentData.qml");
+ emptyArg = (Qt.createComponent("") == null);
+ var r = Qt.createComponent("createComponentData.qml");
relativeUrl = r.url;
- var a = createComponent("http://www.example.com/test.qml");
+ var a = Qt.createComponent("http://www.example.com/test.qml");
absoluteUrl = a.url;
}
}
diff --git a/tests/auto/declarative/qdeclarativeqt/data/createQmlObject.qml b/tests/auto/declarative/qdeclarativeqt/data/createQmlObject.qml
index 8e6c58e..9fe169d 100644
--- a/tests/auto/declarative/qdeclarativeqt/data/createQmlObject.qml
+++ b/tests/auto/declarative/qdeclarativeqt/data/createQmlObject.qml
@@ -4,11 +4,11 @@ Item {
id: root
// errors resulting in exceptions
- property QtObject incorrectArgCount1: createQmlObject()
- property QtObject incorrectArgCount2: createQmlObject("import Qt 4.6\nQtObject{}", root, "main.qml", 10)
- property QtObject noParent: createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13}", 0)
- property QtObject notAvailable: createQmlObject("import Qt 4.6\nQtObject{Blah{}}", root)
- property QtObject errors: createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\nproperty int test: 13\n}", root, "main.qml")
+ property QtObject incorrectArgCount1: Qt.createQmlObject()
+ property QtObject incorrectArgCount2: Qt.createQmlObject("import Qt 4.6\nQtObject{}", root, "main.qml", 10)
+ property QtObject noParent: Qt.createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13}", 0)
+ property QtObject notAvailable: Qt.createQmlObject("import Qt 4.6\nQtObject{Blah{}}", root)
+ property QtObject errors: Qt.createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\nproperty int test: 13\n}", root, "main.qml")
property bool emptyArg: false
@@ -16,16 +16,16 @@ Item {
Component.onCompleted: {
// errors resulting in nulls
- emptyArg = (createQmlObject("", root) == null);
+ emptyArg = (Qt.createQmlObject("", root) == null);
try {
- createQmlObject("import Qt 4.6\nQtObject{property int test\nonTestChanged: QtObject{}\n}", root)
+ Qt.createQmlObject("import Qt 4.6\nQtObject{property int test\nonTestChanged: QtObject{}\n}", root)
} catch (error) {
console.log("RunTimeError: ",error.message);
}
- var o = createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\n}", root);
+ var o = Qt.createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\n}", root);
success = (o.test == 13);
- createQmlObject("import Qt 4.6\nItem {}\n", root);
+ Qt.createQmlObject("import Qt 4.6\nItem {}\n", root);
}
}
diff --git a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
index 4d22b0a..727d74c 100644
--- a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
+++ b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
@@ -354,11 +354,11 @@ void tst_qdeclarativeqt::createQmlObject()
QDeclarativeComponent component(&engine, TEST_FILE("createQmlObject.qml"));
QString warning1 = component.url().toString() + ":7: Error: expected 2 or 3 parameters";
- QString warning2 = component.url().toString()+ ":10: Error: Qt.createQmlObject(): " + TEST_FILE("inline").toString() + ":2:10: Blah is not a type\n";
- QString warning3 = component.url().toString()+ ":11: Error: Qt.createQmlObject(): " + TEST_FILE("main.qml").toString() + ":4:1: Duplicate property name\n";
+ QString warning2 = component.url().toString()+ ":10: Error: Qt.createQmlObject() failed to create object: " + TEST_FILE("inline").toString() + ":2:10: Blah is not a type\n";
+ QString warning3 = component.url().toString()+ ":11: Error: Qt.createQmlObject() failed to create object: " + TEST_FILE("main.qml").toString() + ":4:1: Duplicate property name\n";
QString warning4 = component.url().toString()+ ":9: Error: parent object not found";
QString warning5 = component.url().toString()+ ":8: Error: expected 2 or 3 parameters";
- QString warning6 = "RunTimeError: Qt.createQmlObject(): " + TEST_FILE("inline").toString() + ":3: Cannot assign object type QObject with no default method\n";
+ QString warning6 = "RunTimeError: Qt.createQmlObject() failed to create object: " + TEST_FILE("inline").toString() + ":3: Cannot assign object type QObject with no default method\n";
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1));
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2));
diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp
index bd3186a..a016fa7 100644
--- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp
+++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp
@@ -566,10 +566,10 @@ void tst_qdeclarativestates::anchorChanges()
rect->setState("right");
QCOMPARE(innerRect->x(), qreal(150));
- QCOMPARE(aChanges->anchors()->left().anchorLine, QDeclarativeAnchorLine::Invalid); //### was reset (how do we distinguish from not set at all)
QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect));
- QCOMPARE(aChanges->anchors()->right().item, rect->right().item);
- QCOMPARE(aChanges->anchors()->right().anchorLine, rect->right().anchorLine);
+ QCOMPARE(aChanges->object()->anchors()->left().anchorLine, QDeclarativeAnchorLine::Invalid); //### was reset (how do we distinguish from not set at all)
+ QCOMPARE(aChanges->object()->anchors()->right().item, rect->right().item);
+ QCOMPARE(aChanges->object()->anchors()->right().anchorLine, rect->right().anchorLine);
rect->setState("");
QCOMPARE(innerRect->x(), qreal(5));
@@ -589,7 +589,6 @@ void tst_qdeclarativestates::anchorChanges2()
QVERIFY(innerRect != 0);
rect->setState("right");
- QEXPECT_FAIL("", "QTBUG-5338", Continue);
QCOMPARE(innerRect->x(), qreal(150));
rect->setState("");
@@ -625,14 +624,14 @@ void tst_qdeclarativestates::anchorChanges3()
rect->setState("reanchored");
QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect));
- QCOMPARE(aChanges->anchors()->left().item, leftGuideline->left().item);
- QCOMPARE(aChanges->anchors()->left().anchorLine, leftGuideline->left().anchorLine);
- QCOMPARE(aChanges->anchors()->right().item, rect->right().item);
- QCOMPARE(aChanges->anchors()->right().anchorLine, rect->right().anchorLine);
- QCOMPARE(aChanges->anchors()->top().item, rect->top().item);
- QCOMPARE(aChanges->anchors()->top().anchorLine, rect->top().anchorLine);
- QCOMPARE(aChanges->anchors()->bottom().item, bottomGuideline->bottom().item);
- QCOMPARE(aChanges->anchors()->bottom().anchorLine, bottomGuideline->bottom().anchorLine);
+ QCOMPARE(aChanges->object()->anchors()->left().item, leftGuideline->left().item);
+ QCOMPARE(aChanges->object()->anchors()->left().anchorLine, leftGuideline->left().anchorLine);
+ QCOMPARE(aChanges->object()->anchors()->right().item, rect->right().item);
+ QCOMPARE(aChanges->object()->anchors()->right().anchorLine, rect->right().anchorLine);
+ QCOMPARE(aChanges->object()->anchors()->top().item, rect->top().item);
+ QCOMPARE(aChanges->object()->anchors()->top().anchorLine, rect->top().anchorLine);
+ QCOMPARE(aChanges->object()->anchors()->bottom().item, bottomGuideline->bottom().item);
+ QCOMPARE(aChanges->object()->anchors()->bottom().anchorLine, bottomGuideline->bottom().anchorLine);
QCOMPARE(innerRect->x(), qreal(10));
QCOMPARE(innerRect->y(), qreal(0));
@@ -675,10 +674,10 @@ void tst_qdeclarativestates::anchorChanges4()
rect->setState("reanchored");
QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect));
- QCOMPARE(aChanges->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item);
- QCOMPARE(aChanges->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine);
- QCOMPARE(aChanges->anchors()->verticalCenter().item, leftGuideline->verticalCenter().item);
- QCOMPARE(aChanges->anchors()->verticalCenter().anchorLine, leftGuideline->verticalCenter().anchorLine);
+ QCOMPARE(aChanges->object()->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item);
+ QCOMPARE(aChanges->object()->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine);
+ QCOMPARE(aChanges->object()->anchors()->verticalCenter().item, leftGuideline->verticalCenter().item);
+ QCOMPARE(aChanges->object()->anchors()->verticalCenter().anchorLine, leftGuideline->verticalCenter().anchorLine);
delete rect;
}
@@ -710,10 +709,10 @@ void tst_qdeclarativestates::anchorChanges5()
rect->setState("reanchored");
QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect));
- QCOMPARE(aChanges->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item);
- QCOMPARE(aChanges->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine);
- QCOMPARE(aChanges->anchors()->baseline().item, leftGuideline->baseline().item);
- QCOMPARE(aChanges->anchors()->baseline().anchorLine, leftGuideline->baseline().anchorLine);
+ //QCOMPARE(aChanges->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item);
+ //QCOMPARE(aChanges->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine);
+ //QCOMPARE(aChanges->anchors()->baseline().item, leftGuideline->baseline().item);
+ //QCOMPARE(aChanges->anchors()->baseline().anchorLine, leftGuideline->baseline().anchorLine);
delete rect;
}
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/data/visualdatamodel.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/visualdatamodel.qml
new file mode 100644
index 0000000..d70f82b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/visualdatamodel.qml
@@ -0,0 +1,11 @@
+import Qt 4.7
+
+VisualDataModel {
+ function setRoot() {
+ rootIndex = modelIndex(0);
+ }
+ function setRootToParent() {
+ rootIndex = parentModelIndex();
+ }
+ model: myModel
+}
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro
new file mode 100644
index 0000000..d76b582
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro
@@ -0,0 +1,11 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qdeclarativevisualdatamodel.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
+
+CONFIG += parallel_test
+
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
new file mode 100644
index 0000000..7de15a3
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** 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 test suite 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$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtTest/QSignalSpy>
+#include <QStandardItemModel>
+#include <QtDeclarative/qdeclarativeengine.h>
+#include <QtDeclarative/qdeclarativecomponent.h>
+#include <QtDeclarative/qdeclarativecontext.h>
+#include <private/qdeclarativevisualitemmodel_p.h>
+#include <private/qdeclarativevaluetype_p.h>
+#include <math.h>
+
+static void initStandardTreeModel(QStandardItemModel *model)
+{
+ QStandardItem *item;
+ item = new QStandardItem(QLatin1String("Row 1 Item"));
+ model->insertRow(0, item);
+
+ item = new QStandardItem(QLatin1String("Row 2 Item"));
+ item->setCheckable(true);
+ model->insertRow(1, item);
+
+ QStandardItem *childItem = new QStandardItem(QLatin1String("Row 2 Child Item"));
+ item->setChild(0, childItem);
+
+ item = new QStandardItem(QLatin1String("Row 3 Item"));
+ item->setIcon(QIcon());
+ model->insertRow(2, item);
+}
+
+class tst_qdeclarativevisualdatamodel : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qdeclarativevisualdatamodel();
+
+private slots:
+ void rootIndex();
+
+private:
+ QDeclarativeEngine engine;
+};
+
+tst_qdeclarativevisualdatamodel::tst_qdeclarativevisualdatamodel()
+{
+}
+
+void tst_qdeclarativevisualdatamodel::rootIndex()
+{
+ QDeclarativeEngine engine;
+ QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/visualdatamodel.qml"));
+
+ QStandardItemModel model;
+ initStandardTreeModel(&model);
+
+ engine.rootContext()->setContextProperty("myModel", &model);
+
+ QDeclarativeVisualDataModel *obj = qobject_cast<QDeclarativeVisualDataModel*>(c.create());
+ QVERIFY(obj != 0);
+
+ QMetaObject::invokeMethod(obj, "setRoot");
+ QVERIFY(qvariant_cast<QModelIndex>(obj->rootIndex()) == model.index(0,0));
+
+ QMetaObject::invokeMethod(obj, "setRootToParent");
+ QVERIFY(qvariant_cast<QModelIndex>(obj->rootIndex()) == QModelIndex());
+
+ delete obj;
+}
+
+
+QTEST_MAIN(tst_qdeclarativevisualdatamodel)
+
+#include "tst_qdeclarativevisualdatamodel.moc"
diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
index cf7e357..831e318 100644
--- a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
@@ -222,7 +222,7 @@ void tst_qdeclarativexmllistmodel::roles()
void tst_qdeclarativexmllistmodel::roleErrors()
{
QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/roleErrors.qml"));
- QTest::ignoreMessage(QtWarningMsg, QString("QML XmlRole (" + QUrl::fromLocalFile(SRCDIR "/data/roleErrors.qml").toString() + ":6:5) An XmlRole query must not start with '/'").toUtf8().constData());
+ QTest::ignoreMessage(QtWarningMsg, (QUrl::fromLocalFile(SRCDIR "/data/roleErrors.qml").toString() + ":6:5: QML XmlRole: An XmlRole query must not start with '/'").toUtf8().constData());
//### make sure we receive all expected warning messages.
QDeclarativeXmlListModel *model = qobject_cast<QDeclarativeXmlListModel*>(component.create());
QVERIFY(model != 0);
@@ -247,7 +247,7 @@ void tst_qdeclarativexmllistmodel::roleErrors()
void tst_qdeclarativexmllistmodel::uniqueRoleNames()
{
QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/unique.qml"));
- QTest::ignoreMessage(QtWarningMsg, QString("QML XmlRole (" + QUrl::fromLocalFile(SRCDIR "/data/unique.qml").toString() + ":7:5) \"name\" duplicates a previous role name and will be disabled.").toUtf8().constData());
+ QTest::ignoreMessage(QtWarningMsg, (QUrl::fromLocalFile(SRCDIR "/data/unique.qml").toString() + ":7:5: QML XmlRole: \"name\" duplicates a previous role name and will be disabled.").toUtf8().constData());
QDeclarativeXmlListModel *model = qobject_cast<QDeclarativeXmlListModel*>(component.create());
QVERIFY(model != 0);
QTRY_COMPARE(model->count(), 9);
diff --git a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png
index 9c9ceae..02fa5c9 100644
--- a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png
+++ b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml
index 08ed609..1dc2d29 100644
--- a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml
+++ b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml
@@ -7,5 +7,5 @@ VisualTest {
Frame {
msec: 16
image: "fillmode.0.png"
- }
+ }
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml
index 1403d35..dd38ea5 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml
@@ -6,6 +6,6 @@ VisualTest {
}
Frame {
msec: 16
- hash: "258a7e75b491e4f51a91739c776803b3"
+ image: "borders.0.png"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png
new file mode 100644
index 0000000..993610f
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png
new file mode 100644
index 0000000..993610f
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png
new file mode 100644
index 0000000..12c6cf5
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png
new file mode 100644
index 0000000..ccb9fdd
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png
new file mode 100644
index 0000000..ace0752
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png
new file mode 100644
index 0000000..993610f
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png
new file mode 100644
index 0000000..e58c68b
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png
new file mode 100644
index 0000000..e58c68b
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png
new file mode 100644
index 0000000..cb6d2f8
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png
new file mode 100644
index 0000000..db6bea2
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png
new file mode 100644
index 0000000..c18bb34
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png
new file mode 100644
index 0000000..c18bb34
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png
new file mode 100644
index 0000000..3b56301
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png
new file mode 100644
index 0000000..993610f
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml
new file mode 100644
index 0000000..e6a09bf
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml
@@ -0,0 +1,5127 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 32
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 48
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 64
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 80
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 96
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 112
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 128
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 144
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 160
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 176
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 192
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 208
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 224
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 240
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 256
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 272
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 288
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 304
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 320
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 336
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 352
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 368
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 384
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 400
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 416
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 432
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 448
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 464
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 480
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 496
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 512
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 528
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 544
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 560
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 576
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 592
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 608
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 624
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 640
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 656
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 672
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 688
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 704
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 720
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 736
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 752
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 768
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 784
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 800
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 816
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 832
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 848
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 864
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 880
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 896
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 912
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 928
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 944
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 960
+ image: "mousearea-flickable.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 992
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1008
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1024
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1040
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1056
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1072
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1088
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1104
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1120
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1136
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1152
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1168
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1184
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1200
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1216
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1232
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1248
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1264
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1280
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1296
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1312
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1328
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1344
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1360
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1376
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1392
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1408
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1424
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1440
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1456
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1472
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1488
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1504
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1520
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1536
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1552
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1568
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1584
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1600
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1616
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1632
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1648
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1664
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1680
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1696
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1712
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1728
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1744
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1760
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1776
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1792
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1808
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1824
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1840
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1856
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1872
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1888
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1904
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1920
+ image: "mousearea-flickable.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1952
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1968
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 1984
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2000
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2016
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2032
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2048
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2064
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2080
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2096
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2112
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2128
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2144
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2160
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2176
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2192
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2208
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2224
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2240
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2256
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2272
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2288
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2304
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2320
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2336
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2352
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2368
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2384
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2400
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2416
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2432
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2448
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2464
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2480
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2496
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2512
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2528
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2544
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2560
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2576
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2592
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 2608
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 188; y: 41
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2624
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2640
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2656
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2672
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2688
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2704
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2720
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2736
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2752
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2768
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2784
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2800
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2816
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2832
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2848
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2864
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2880
+ image: "mousearea-flickable.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2912
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2928
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2944
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2960
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2976
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 2992
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3008
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3024
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3040
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3056
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3072
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3088
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3104
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3120
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3136
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3152
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3168
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3184
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3200
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3216
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3232
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3248
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3264
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3280
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3296
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3312
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3328
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3344
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3360
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3376
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3392
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3408
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3424
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3440
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3456
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3472
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3488
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3504
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3520
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3536
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3552
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3568
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3584
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3600
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3616
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3632
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3648
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3664
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3680
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3696
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3712
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3728
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3744
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3760
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3776
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3792
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3808
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3824
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3840
+ image: "mousearea-flickable.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3872
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3888
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3904
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3920
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3936
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3952
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3968
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 3984
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4000
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4016
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4032
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4048
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4064
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4080
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4096
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4112
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4128
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4144
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4160
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4176
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4192
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4208
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4224
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4240
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4256
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4272
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4288
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4304
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4320
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4336
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4352
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4368
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4384
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4400
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4416
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4432
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4448
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4464
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4480
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4496
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Frame {
+ msec: 4512
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 189; y: 42
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4528
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 189; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4544
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 190; y: 45
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 190; y: 47
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4560
+ hash: "4a60ab820ca66548384b2257b21de8ec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 190; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 190; y: 50
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4576
+ hash: "86b32befe0dada5bdce82a7dd14777ce"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 51
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 53
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4592
+ hash: "7a5f69a1eecb5de0fc2295cd287eb449"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 54
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 56
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4608
+ hash: "144eeb7c2a32cedb6ebba063501c9176"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 57
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 59
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4624
+ hash: "11120d6de575ffa639b6abb3af4afef7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 61
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 62
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4640
+ hash: "ab4c936a81299adf080f3b14f7e6be49"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 64
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 66
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4656
+ hash: "6602009ffe3c0f3072640ebc8749b76f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 68
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 70
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4672
+ hash: "8517007d5102af238935e93a3b38087f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 195; y: 72
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 195; y: 75
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4688
+ hash: "4e129ebba85d1f3717d09f71eb5a1a7d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 79
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4704
+ hash: "82f54d7e254edcf499ea12a63118e8a7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 82
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4720
+ hash: "572cb62d69ccb973ea18d3b0eaff571b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4736
+ hash: "79650397b868019909b931a32a115823"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 90
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4752
+ hash: "43e50f4d4d37373e26af0a5d3cb64c4c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4768
+ hash: "a0f8eb8a796f67c368b0a479e8d14681"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4784
+ hash: "01bf03313a0229e810a24e2adbbe9775"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 106
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4800
+ image: "mousearea-flickable.4.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4816
+ hash: "aafb12a520eb443ee1348282f2c54e4a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4832
+ hash: "806d22bc3533c729cd10dc889c36902d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 201; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4848
+ hash: "05b3013c9e42ed9ced7009d2e2999357"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 201; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 130
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4864
+ hash: "cb49adcd2c8afe27fd5926bd622added"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 133
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 135
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4880
+ hash: "d0b4215b43403c97d83250add6d2b6db"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 138
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4896
+ hash: "ee0523fe6a33b59871ad3b311ca0cbeb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 149
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 152
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4912
+ hash: "29ca97cc573d3a1fde65320b61678c60"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 161
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4928
+ hash: "021bda841eaefa76ce5e1c97150af6f6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 166
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4944
+ hash: "80edf52cc9e64a29f677bc2203220ba9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 172
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4960
+ hash: "c09f4002ed9d41f62bb1aaff95723cce"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 177
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4976
+ hash: "7bb17b13db811b02c86a24a0051336d9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 180
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 182
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4992
+ hash: "da5c33ee9e9e1d9aaa7d5efa83b8bf69"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 187
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5008
+ hash: "3ca9742356b6ff833fd287a95520174a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 189
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5024
+ hash: "d1372239a681d1fccc25257b4a02fb39"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 194
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 196
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5040
+ hash: "1f37473ab2fb0643e11e4a41a2ee4561"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 198
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 200
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5056
+ hash: "1533c6ff17e79a47a5d3510aa85bcf8a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 202
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 204
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5072
+ hash: "4cad3c6caf8d3009f63923df897c4723"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 205
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 207
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5088
+ hash: "b81183233961b34c2a3f21a249b0fbfb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 209
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5104
+ hash: "9f876eb93a16c24843dd6a5acd303ab3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5120
+ hash: "237dd62011f4253970b946b335e3fb71"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 215
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5136
+ hash: "6206ad3e633b6b1b068304caa4efe48a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 217
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5152
+ hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 218
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5168
+ hash: "d9e953d132330f8a58a190d61aec6ec3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 219
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 220
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5184
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 222
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5200
+ hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
+ }
+ Frame {
+ msec: 5216
+ hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 223
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5232
+ hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 224
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5248
+ hash: "c6a81be579382f25ac583734897c2570"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 225
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5264
+ hash: "c6a81be579382f25ac583734897c2570"
+ }
+ Frame {
+ msec: 5280
+ hash: "c6a81be579382f25ac583734897c2570"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 226
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5296
+ hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 227
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5312
+ hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ }
+ Frame {
+ msec: 5328
+ hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ }
+ Frame {
+ msec: 5344
+ hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ }
+ Frame {
+ msec: 5360
+ hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 209; y: 227
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5376
+ hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ }
+ Frame {
+ msec: 5392
+ hash: "c6a81be579382f25ac583734897c2570"
+ }
+ Frame {
+ msec: 5408
+ hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
+ }
+ Frame {
+ msec: 5424
+ hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b"
+ }
+ Frame {
+ msec: 5440
+ hash: "9f876eb93a16c24843dd6a5acd303ab3"
+ }
+ Frame {
+ msec: 5456
+ hash: "1533c6ff17e79a47a5d3510aa85bcf8a"
+ }
+ Frame {
+ msec: 5472
+ hash: "9a9d1e0b1d7b9291480b3ec641f354ce"
+ }
+ Frame {
+ msec: 5488
+ hash: "ee40862a59f14667c89fa62f380c10fb"
+ }
+ Frame {
+ msec: 5504
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
+ }
+ Frame {
+ msec: 5520
+ hash: "52d45e8dde81fef5ee93bbd5a40d4851"
+ }
+ Frame {
+ msec: 5536
+ hash: "05b3013c9e42ed9ced7009d2e2999357"
+ }
+ Frame {
+ msec: 5552
+ hash: "7d03030f5a672d87aeabefdf4f3a39a4"
+ }
+ Frame {
+ msec: 5568
+ hash: "79650397b868019909b931a32a115823"
+ }
+ Frame {
+ msec: 5584
+ hash: "82f54d7e254edcf499ea12a63118e8a7"
+ }
+ Frame {
+ msec: 5600
+ hash: "8517007d5102af238935e93a3b38087f"
+ }
+ Frame {
+ msec: 5616
+ hash: "dc272fc8fc98d822a154da1d495d4f7e"
+ }
+ Frame {
+ msec: 5632
+ hash: "11120d6de575ffa639b6abb3af4afef7"
+ }
+ Frame {
+ msec: 5648
+ hash: "70e522f64236dfa4e1613ffc29b4b23e"
+ }
+ Frame {
+ msec: 5664
+ hash: "7a5f69a1eecb5de0fc2295cd287eb449"
+ }
+ Frame {
+ msec: 5680
+ hash: "a569789b082296415321ba11c859abe5"
+ }
+ Frame {
+ msec: 5696
+ hash: "9f9f85d5f879b0e52ebc751d6668cfb8"
+ }
+ Frame {
+ msec: 5712
+ hash: "9f9f85d5f879b0e52ebc751d6668cfb8"
+ }
+ Frame {
+ msec: 5728
+ hash: "43fc85bb3b1501f5e12f1fedaaa14c64"
+ }
+ Frame {
+ msec: 5744
+ hash: "43fc85bb3b1501f5e12f1fedaaa14c64"
+ }
+ Frame {
+ msec: 5760
+ image: "mousearea-flickable.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 5792
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 5808
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 5824
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5840
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5856
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5872
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5888
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5904
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5920
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5936
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5952
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5968
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 5984
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6000
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6016
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6032
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6048
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6064
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6080
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6096
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6112
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6128
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6144
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6160
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6176
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6192
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6208
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6224
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6240
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6256
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6272
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6288
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6304
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6320
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6336
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6352
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 6368
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 188; y: 180
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6384
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6400
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6416
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6432
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6448
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6464
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6480
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6496
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6512
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6528
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6544
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6560
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6576
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6592
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6608
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6624
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6640
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6656
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6672
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6688
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6704
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6720
+ image: "mousearea-flickable.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6752
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6768
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6784
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6800
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6816
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6832
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6848
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6864
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6880
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6896
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6912
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6928
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6944
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6960
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6976
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 6992
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7008
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7024
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7040
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7056
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7072
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7088
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7104
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7120
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7136
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7152
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7168
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7184
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7200
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7216
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7232
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7248
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7264
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7280
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7296
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7312
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7328
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7344
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7360
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7376
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7392
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7408
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7424
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7440
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7456
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7472
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7488
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7504
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7520
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7536
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7552
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7568
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7584
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7600
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7616
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7632
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7648
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7664
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7680
+ image: "mousearea-flickable.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7712
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7728
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7744
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7760
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7776
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7792
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7808
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7824
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7840
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7856
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7872
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7888
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7904
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7920
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7936
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7952
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7968
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 7984
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8000
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8016
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8032
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8048
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8064
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8080
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8096
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8112
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8128
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8144
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8160
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8176
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Frame {
+ msec: 8192
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 188; y: 182
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8208
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 188; y: 183
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8224
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 189; y: 185
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 189; y: 186
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8240
+ hash: "9f9f85d5f879b0e52ebc751d6668cfb8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 194
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8256
+ hash: "70e522f64236dfa4e1613ffc29b4b23e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 196
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 198
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8272
+ hash: "11120d6de575ffa639b6abb3af4afef7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 201
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 203
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8288
+ hash: "dc272fc8fc98d822a154da1d495d4f7e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8304
+ hash: "4e129ebba85d1f3717d09f71eb5a1a7d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 219
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8320
+ hash: "837deeb2a92648d830acf29e829ebb53"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 225
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8336
+ hash: "7d2606d432858288dac019e0002ff85a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 231
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 234
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8352
+ hash: "c37507a29e3a6d80446ad68f2d92f266"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 240
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8368
+ hash: "01bf03313a0229e810a24e2adbbe9775"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 245
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8384
+ hash: "8ffbbed46737837e55383833b96d2624"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 248
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 251
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8400
+ hash: "6d49fc41fb6d74643c7613df7e417833"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 257
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8416
+ hash: "1978cda418856b542d7c5a155b74f09c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 259
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 262
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8432
+ hash: "cc6619c7cd6e4e274df4729aad6cca46"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 265
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 267
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8448
+ hash: "0b16e524cd5253d07aa9b5855967fa71"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 270
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 272
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8464
+ hash: "0121c18897c37481fddbac57db636a60"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 275
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 278
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8480
+ hash: "091d1ad7aba4b662cba98214c98a4707"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 283
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8496
+ hash: "f334bfcc3af89bf1405762a215c54ea6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 285
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 288
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8512
+ hash: "66f71641c7a607152f140428ab9621d6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 290
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 293
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8528
+ hash: "7b41d651ad46341859d0188db341ae10"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 298
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8544
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 299
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 305
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8560
+ hash: "80edf52cc9e64a29f677bc2203220ba9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 306
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 308
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8576
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 310
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 312
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8592
+ hash: "c09f4002ed9d41f62bb1aaff95723cce"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 316
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8608
+ hash: "7bb17b13db811b02c86a24a0051336d9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 318
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 320
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8624
+ hash: "6d6cec95a6a2445d88b015ff76af032e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 322
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 324
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8640
+ image: "mousearea-flickable.8.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 328
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8656
+ hash: "9a9d1e0b1d7b9291480b3ec641f354ce"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 330
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 332
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8672
+ hash: "d1372239a681d1fccc25257b4a02fb39"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 335
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 338
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8688
+ hash: "2010f6f0c34e59f505bbe1aab262b646"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 341
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 347
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8704
+ hash: "2dc2def0c748ac94d33d90d4a3610136"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 350
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 356
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8720
+ hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 358
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 360
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8736
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 201; y: 364
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8752
+ hash: "c6a81be579382f25ac583734897c2570"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 201; y: 366
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8768
+ hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 202; y: 368
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8784
+ hash: "b34a796f25ad62f952101b296f9c2bac"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 202; y: 369
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8800
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8816
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8832
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8848
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8864
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8880
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8896
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8912
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8928
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8944
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8960
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 8976
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 202; y: 369
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8992
+ hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ }
+ Frame {
+ msec: 9008
+ hash: "b34a796f25ad62f952101b296f9c2bac"
+ }
+ Frame {
+ msec: 9024
+ hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ }
+ Frame {
+ msec: 9040
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
+ }
+ Frame {
+ msec: 9056
+ hash: "237dd62011f4253970b946b335e3fb71"
+ }
+ Frame {
+ msec: 9072
+ hash: "c5980322acf00a04efbd5e1b92aa0e98"
+ }
+ Frame {
+ msec: 9088
+ hash: "d1372239a681d1fccc25257b4a02fb39"
+ }
+ Frame {
+ msec: 9104
+ hash: "524db6ce45674c777d72f9206415be2f"
+ }
+ Frame {
+ msec: 9120
+ hash: "021bda841eaefa76ce5e1c97150af6f6"
+ }
+ Frame {
+ msec: 9136
+ hash: "ce673b66f695f5b002515a5416bbf913"
+ }
+ Frame {
+ msec: 9152
+ hash: "cc6619c7cd6e4e274df4729aad6cca46"
+ }
+ Frame {
+ msec: 9168
+ hash: "7fb0ed99b7d751d1f335afd7c0de2f2c"
+ }
+ Frame {
+ msec: 9184
+ hash: "3d75735eefbf95f37e2a8605b9167ba1"
+ }
+ Frame {
+ msec: 9200
+ hash: "82f54d7e254edcf499ea12a63118e8a7"
+ }
+ Frame {
+ msec: 9216
+ hash: "8517007d5102af238935e93a3b38087f"
+ }
+ Frame {
+ msec: 9232
+ hash: "dc272fc8fc98d822a154da1d495d4f7e"
+ }
+ Frame {
+ msec: 9248
+ hash: "11120d6de575ffa639b6abb3af4afef7"
+ }
+ Frame {
+ msec: 9264
+ hash: "70e522f64236dfa4e1613ffc29b4b23e"
+ }
+ Frame {
+ msec: 9280
+ hash: "7a5f69a1eecb5de0fc2295cd287eb449"
+ }
+ Frame {
+ msec: 9296
+ hash: "a569789b082296415321ba11c859abe5"
+ }
+ Frame {
+ msec: 9312
+ hash: "9f9f85d5f879b0e52ebc751d6668cfb8"
+ }
+ Frame {
+ msec: 9328
+ hash: "9f9f85d5f879b0e52ebc751d6668cfb8"
+ }
+ Frame {
+ msec: 9344
+ hash: "43fc85bb3b1501f5e12f1fedaaa14c64"
+ }
+ Frame {
+ msec: 9360
+ hash: "43fc85bb3b1501f5e12f1fedaaa14c64"
+ }
+ Frame {
+ msec: 9376
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 9392
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 9408
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 9424
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 9440
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9456
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9472
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9488
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9504
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9520
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9536
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9552
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9568
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9584
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9600
+ image: "mousearea-flickable.9.png"
+ }
+ Frame {
+ msec: 9616
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9632
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9648
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9664
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9680
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9696
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9712
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9728
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 9744
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 205; y: 307
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9760
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9776
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9792
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9808
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9824
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9840
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9856
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9872
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9888
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9904
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9920
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9936
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9952
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9968
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 9984
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10000
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10016
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10032
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10048
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10064
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10080
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10096
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10112
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10128
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10144
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10160
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10176
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10192
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10208
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10224
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10240
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10256
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10272
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10288
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10304
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10320
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10336
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10352
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10368
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10384
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10400
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10416
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10432
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10448
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10464
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10480
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10496
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10512
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10528
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10544
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10560
+ image: "mousearea-flickable.10.png"
+ }
+ Frame {
+ msec: 10576
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10592
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10608
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10624
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10640
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10656
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10672
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10688
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10704
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10720
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10736
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10752
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10768
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10784
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10800
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10816
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10832
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10848
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10864
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10880
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10896
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10912
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10928
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10944
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10960
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10976
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 10992
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11008
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11024
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11040
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11056
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11072
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11088
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 308
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11104
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11120
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11136
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 309
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11152
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11168
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Frame {
+ msec: 11184
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 310
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11200
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 311
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11216
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 312
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11232
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 313
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 314
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11248
+ hash: "a569789b082296415321ba11c859abe5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 316
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 317
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11264
+ hash: "86b32befe0dada5bdce82a7dd14777ce"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 319
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 321
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11280
+ hash: "70e522f64236dfa4e1613ffc29b4b23e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 324
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11296
+ hash: "11120d6de575ffa639b6abb3af4afef7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 326
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 327
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11312
+ hash: "8e05207e0d0d9d15a61a0d21d985a83a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 330
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 332
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11328
+ hash: "6602009ffe3c0f3072640ebc8749b76f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 335
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 337
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11344
+ hash: "8517007d5102af238935e93a3b38087f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 343
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 345
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11360
+ hash: "82f54d7e254edcf499ea12a63118e8a7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 348
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 350
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11376
+ hash: "572cb62d69ccb973ea18d3b0eaff571b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 352
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 355
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11392
+ hash: "79650397b868019909b931a32a115823"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 357
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 359
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11408
+ hash: "43e50f4d4d37373e26af0a5d3cb64c4c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 361
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 363
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11424
+ hash: "a0f8eb8a796f67c368b0a479e8d14681"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 365
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 367
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11440
+ hash: "01bf03313a0229e810a24e2adbbe9775"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 369
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 371
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11456
+ hash: "7fb0ed99b7d751d1f335afd7c0de2f2c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 373
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 375
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11472
+ hash: "363eca81f97f20f14e8d480f83d2bc7d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 379
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11488
+ hash: "6d49fc41fb6d74643c7613df7e417833"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 381
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 383
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11504
+ hash: "806d22bc3533c729cd10dc889c36902d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 385
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 387
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11520
+ image: "mousearea-flickable.11.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 389
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 392
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11536
+ hash: "929bf28dcb97e8c93dae5dbe23beecc8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 394
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 396
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11552
+ hash: "cb49adcd2c8afe27fd5926bd622added"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 398
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 399
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11568
+ hash: "0121c18897c37481fddbac57db636a60"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 402
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11584
+ hash: "c0a569ee064d844835dddab11eadcd33"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 404
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 406
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11600
+ hash: "52d45e8dde81fef5ee93bbd5a40d4851"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 407
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 409
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11616
+ hash: "ce673b66f695f5b002515a5416bbf913"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 410
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11632
+ hash: "f334bfcc3af89bf1405762a215c54ea6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 411
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 412
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11648
+ hash: "ee0523fe6a33b59871ad3b311ca0cbeb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 414
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11664
+ hash: "66f71641c7a607152f140428ab9621d6"
+ }
+ Frame {
+ msec: 11680
+ hash: "66f71641c7a607152f140428ab9621d6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 415
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11696
+ hash: "66f71641c7a607152f140428ab9621d6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 416
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11712
+ hash: "ddd3d8cb82e238358cdb16c1df7d27b7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 417
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11728
+ hash: "ddd3d8cb82e238358cdb16c1df7d27b7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 418
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11744
+ hash: "29ca97cc573d3a1fde65320b61678c60"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 419
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11760
+ hash: "29ca97cc573d3a1fde65320b61678c60"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 421
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11776
+ hash: "7b41d651ad46341859d0188db341ae10"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 423
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11792
+ hash: "6b236864b7d95bf9f76b8afd6ba78613"
+ }
+ Frame {
+ msec: 11808
+ hash: "6b236864b7d95bf9f76b8afd6ba78613"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 424
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11824
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 425
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11840
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 426
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11856
+ hash: "021bda841eaefa76ce5e1c97150af6f6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 428
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11872
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ }
+ Frame {
+ msec: 11888
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 429
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11904
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ }
+ Frame {
+ msec: 11920
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 430
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11936
+ hash: "1709dda08ce7494ff6d082cc5d93f0d2"
+ }
+ Frame {
+ msec: 11952
+ hash: "1709dda08ce7494ff6d082cc5d93f0d2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 431
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11968
+ hash: "1709dda08ce7494ff6d082cc5d93f0d2"
+ }
+ Frame {
+ msec: 11984
+ hash: "1709dda08ce7494ff6d082cc5d93f0d2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 432
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12000
+ hash: "80edf52cc9e64a29f677bc2203220ba9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 433
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12016
+ hash: "80edf52cc9e64a29f677bc2203220ba9"
+ }
+ Frame {
+ msec: 12032
+ hash: "80edf52cc9e64a29f677bc2203220ba9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 434
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12048
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12064
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12080
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12096
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12112
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 435
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12128
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12144
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12160
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12176
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12192
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 210; y: 435
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12208
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12224
+ hash: "68c8c95edb8cce11320715266bd62628"
+ }
+ Frame {
+ msec: 12240
+ hash: "80edf52cc9e64a29f677bc2203220ba9"
+ }
+ Frame {
+ msec: 12256
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ }
+ Frame {
+ msec: 12272
+ hash: "6b236864b7d95bf9f76b8afd6ba78613"
+ }
+ Frame {
+ msec: 12288
+ hash: "ddd3d8cb82e238358cdb16c1df7d27b7"
+ }
+ Frame {
+ msec: 12304
+ hash: "ce673b66f695f5b002515a5416bbf913"
+ }
+ Frame {
+ msec: 12320
+ hash: "0121c18897c37481fddbac57db636a60"
+ }
+ Frame {
+ msec: 12336
+ hash: "cc6619c7cd6e4e274df4729aad6cca46"
+ }
+ Frame {
+ msec: 12352
+ hash: "aafb12a520eb443ee1348282f2c54e4a"
+ }
+ Frame {
+ msec: 12368
+ hash: "c37507a29e3a6d80446ad68f2d92f266"
+ }
+ Frame {
+ msec: 12384
+ hash: "6ef4abc294d928381346e8ff9b012475"
+ }
+ Frame {
+ msec: 12400
+ hash: "4e129ebba85d1f3717d09f71eb5a1a7d"
+ }
+ Frame {
+ msec: 12416
+ hash: "6602009ffe3c0f3072640ebc8749b76f"
+ }
+ Frame {
+ msec: 12432
+ hash: "8e05207e0d0d9d15a61a0d21d985a83a"
+ }
+ Frame {
+ msec: 12448
+ hash: "144eeb7c2a32cedb6ebba063501c9176"
+ }
+ Frame {
+ msec: 12464
+ hash: "7a5f69a1eecb5de0fc2295cd287eb449"
+ }
+ Frame {
+ msec: 12480
+ image: "mousearea-flickable.12.png"
+ }
+ Frame {
+ msec: 12496
+ hash: "a569789b082296415321ba11c859abe5"
+ }
+ Frame {
+ msec: 12512
+ hash: "9f9f85d5f879b0e52ebc751d6668cfb8"
+ }
+ Frame {
+ msec: 12528
+ hash: "43fc85bb3b1501f5e12f1fedaaa14c64"
+ }
+ Frame {
+ msec: 12544
+ hash: "43fc85bb3b1501f5e12f1fedaaa14c64"
+ }
+ Frame {
+ msec: 12560
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 12576
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 12592
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 12608
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 12624
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
+ }
+ Frame {
+ msec: 12640
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12656
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12672
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12688
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12704
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12720
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12736
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12752
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12768
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12784
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12800
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12816
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12832
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12848
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12864
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12880
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12896
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12912
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12928
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12944
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12960
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12976
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 12992
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13008
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13024
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13040
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13056
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13072
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13088
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13104
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13120
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13136
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13152
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13168
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13184
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13200
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13216
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13232
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13248
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13264
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13280
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13296
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13312
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13328
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13344
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13360
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Key {
+ type: 6
+ key: 16777251
+ modifiers: 134217728
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 13376
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13392
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13408
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13424
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13440
+ image: "mousearea-flickable.13.png"
+ }
+ Frame {
+ msec: 13456
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13472
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13488
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+ Frame {
+ msec: 13504
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ }
+}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/mousearea-flickable.qml b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/mousearea-flickable.qml
new file mode 100644
index 0000000..a0b787f
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/mousearea-flickable.qml
@@ -0,0 +1,52 @@
+import Qt 4.7
+
+Rectangle {
+ width: 400; height: 480
+ color: "white"
+
+ Flickable {
+ anchors.fill: parent
+ contentHeight: 100
+
+ Rectangle {
+ id: yellow
+ width: 400; height: 120
+ color: "yellow"
+ MouseArea {
+ anchors.fill: parent
+ onPressedChanged: pressed ? yellow.color = "lightyellow": yellow.color = "yellow"
+ }
+ }
+ Rectangle {
+ id: blue
+ width: 400; height: 120
+ y: 120
+ color: "steelblue"
+ MouseArea {
+ anchors.fill: parent
+ onPressed: blue.color = "lightsteelblue"
+ onReleased: blue.color = "steelblue"
+ }
+ }
+ Rectangle {
+ id: red
+ y: 240
+ width: 400; height: 120
+ color: "red"
+ MouseArea {
+ anchors.fill: parent
+ onEntered: { red.color = "darkred"; tooltip.opacity = 1 }
+ onExited: { red.color = "red"; tooltip.opacity = 0 }
+ }
+ Rectangle {
+ id: tooltip
+ x: 10; y: 20
+ width: 100; height: 50
+ color: "green"
+ opacity: 0
+ }
+ }
+
+ }
+
+}
diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp
index 681b530..5f25882 100644
--- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp
+++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp
@@ -117,6 +117,9 @@ void tst_qmlvisual::visual_data()
files << QT_TEST_SOURCE_DIR "/qdeclarativemousearea/drag.qml";
files << QT_TEST_SOURCE_DIR "/fillmode/fillmode.qml";
+ // new tests
+ files << QT_TEST_SOURCE_DIR "/qdeclarativemousearea/mousearea-flickable.qml";
+
//these reliably fail in CI, for unknown reasons
//files << QT_TEST_SOURCE_DIR "/animation/easing/easing.qml";
//files << QT_TEST_SOURCE_DIR "/animation/pauseAnimation/pauseAnimation-visual.qml";
diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp
index 6884781..730f122 100644
--- a/tools/qdoc3/cppcodeparser.cpp
+++ b/tools/qdoc3/cppcodeparser.cpp
@@ -492,7 +492,7 @@ const FunctionNode *CppCodeParser::findFunctionNode(const QString& synopsis,
candidates << overload;
}
-
+
/*
There are several functions with the correct
parameter count, but only one has the correct
@@ -545,7 +545,7 @@ QSet<QString> CppCodeParser::topicCommands()
}
/*!
- Process the topic \a command in context \a doc with argument \a arg.
+ Process the topic \a command in context \a doc with argument \a arg.
*/
Node *CppCodeParser::processTopicCommand(const Doc& doc,
const QString& command,
@@ -731,7 +731,7 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc,
return new QmlClassNode(tre->root(), names[0], classNode);
}
else if (command == COMMAND_QMLBASICTYPE) {
-#if 0
+#if 0
QStringList parts = arg.split(" ");
qDebug() << command << parts;
if (parts.size() > 1) {
@@ -741,7 +741,7 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc,
return new QmlBasicTypeNode(pageNode, parts[0]);
}
}
-#endif
+#endif
return new QmlBasicTypeNode(tre->root(), arg);
}
else if ((command == COMMAND_QMLSIGNAL) ||
@@ -912,13 +912,13 @@ QSet<QString> CppCodeParser::otherMetaCommands()
<< COMMAND_NEXTPAGE
<< COMMAND_PREVIOUSPAGE
<< COMMAND_INDEXPAGE
-#ifdef QDOC_QML
+#ifdef QDOC_QML
<< COMMAND_STARTPAGE
<< COMMAND_QMLINHERITS
<< COMMAND_QMLDEFAULT;
-#else
+#else
<< COMMAND_STARTPAGE;
-#endif
+#endif
}
/*!
@@ -2119,7 +2119,7 @@ bool CppCodeParser::matchDocsAndStuff()
}
++a;
}
-#endif
+#endif
}
NodeList::Iterator n = nodes.begin();
@@ -2268,31 +2268,46 @@ void CppCodeParser::instantiateIteratorMacro(const QString &container,
void CppCodeParser::createExampleFileNodes(FakeNode *fake)
{
QString examplePath = fake->name();
-
- // we can assume that this file always exists
- QString proFileName = examplePath + "/" +
- examplePath.split("/").last() + ".pro";
-
QString userFriendlyFilePath;
+ bool isQmlExample = false;
+
+ // let's check if this is a QML example
+ QString proFileName = examplePath + "/" + examplePath.split("/").last() + ".qmlproject";
QString fullPath = Config::findFile(fake->doc().location(),
exampleFiles,
exampleDirs,
proFileName,
userFriendlyFilePath);
-
- if (fullPath.isEmpty()) {
- QString tmp = proFileName;
- proFileName = examplePath + "/" + "qbuild.pro";
+
+ if (!fullPath.isEmpty()) {
+ isQmlExample = true;
+ } else {
+ // let's check if there is a .pro file
+ proFileName = examplePath + "/" + examplePath.split("/").last() + ".pro";
userFriendlyFilePath.clear();
+
fullPath = Config::findFile(fake->doc().location(),
exampleFiles,
exampleDirs,
proFileName,
userFriendlyFilePath);
+
if (fullPath.isEmpty()) {
- fake->doc().location().warning(
- tr("Cannot find file '%1' or '%2'").arg(tmp).arg(proFileName));
- return;
+ // let's check if there is a qbuild.pro file
+ QString tmp = proFileName;
+ proFileName = examplePath + "/" + "qbuild.pro";
+ userFriendlyFilePath.clear();
+ fullPath = Config::findFile(fake->doc().location(),
+ exampleFiles,
+ exampleDirs,
+ proFileName,
+ userFriendlyFilePath);
+
+ if (fullPath.isEmpty()) {
+ fake->doc().location().warning(
+ tr("Cannot find file '%1' or '%2'").arg(tmp).arg(proFileName));
+ return;
+ }
}
}
@@ -2300,7 +2315,14 @@ void CppCodeParser::createExampleFileNodes(FakeNode *fake)
fullPath.truncate(fullPath.lastIndexOf('/'));
QStringList exampleFiles = Config::getFilesHere(fullPath,exampleNameFilter);
- QString imagesPath = fullPath + "/images";
+
+ // QML examples do not put images in a "images" directory.
+ QString imagesPath;
+ if (isQmlExample)
+ imagesPath = fullPath;
+ else
+ imagesPath = fullPath + "/images";
+
QStringList imageFiles = Config::getFilesHere(imagesPath,exampleImageFilter);
if (!exampleFiles.isEmpty()) {
@@ -2315,14 +2337,14 @@ void CppCodeParser::createExampleFileNodes(FakeNode *fake)
i.remove();
}
else if (fileName.contains("/qrc_") || fileName.contains("/moc_")
- || fileName.contains("/ui_"))
+ || fileName.contains("/ui_"))
i.remove();
}
if (!mainCpp.isEmpty())
exampleFiles.append(mainCpp);
// add any qmake Qt resource files and qmake project files
- exampleFiles += Config::getFilesHere(fullPath, "*.qrc *.pro");
+ exampleFiles += Config::getFilesHere(fullPath, "*.qrc *.pro qmldir");
}
foreach (const QString &exampleFile, exampleFiles)
diff --git a/tools/qml/loggerwidget.cpp b/tools/qml/loggerwidget.cpp
new file mode 100644
index 0000000..015d1b0
--- /dev/null
+++ b/tools/qml/loggerwidget.cpp
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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 tools applications 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$
+**
+****************************************************************************/
+
+#include "loggerwidget.h"
+#include <qglobal.h>
+#include <QDebug>
+
+QT_BEGIN_NAMESPACE
+
+LoggerWidget::LoggerWidget(QWidget *parent) :
+ QPlainTextEdit(parent),
+ m_keepClosed(false)
+{
+ setAttribute(Qt::WA_QuitOnClose, false);
+ setWindowTitle(tr("Qt Declarative UI Viewer - Logger"));
+}
+
+void LoggerWidget::append(const QString &msg)
+{
+ appendPlainText(msg);
+
+ if (!m_keepClosed && !isVisible())
+ setVisible(true);
+}
+
+void LoggerWidget::closeEvent(QCloseEvent *event)
+{
+ m_keepClosed = true;
+ QWidget::closeEvent(event);
+}
+
+QT_END_NAMESPACE
diff --git a/tools/qml/loggerwidget.h b/tools/qml/loggerwidget.h
new file mode 100644
index 0000000..5c4a701
--- /dev/null
+++ b/tools/qml/loggerwidget.h
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** 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 tools applications 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$
+**
+****************************************************************************/
+
+#ifndef LOGGERWIDGET_H
+#define LOGGERWIDGET_H
+
+#include <QPlainTextEdit>
+
+QT_BEGIN_NAMESPACE
+
+class LoggerWidget : public QPlainTextEdit {
+Q_OBJECT
+public:
+ LoggerWidget(QWidget *parent=0);
+public slots:
+ void append(const QString &msg);
+protected:
+ void closeEvent(QCloseEvent *event);
+private:
+ bool m_keepClosed;
+};
+
+QT_END_NAMESPACE
+
+#endif // LOGGERWIDGET_H
diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp
index 15e8f64..cba5650 100644
--- a/tools/qml/main.cpp
+++ b/tools/qml/main.cpp
@@ -42,16 +42,20 @@
#include "qdeclarative.h"
#include "qmlruntime.h"
#include "qdeclarativeengine.h"
+#include "loggerwidget.h"
#include <QWidget>
#include <QDir>
#include <QApplication>
#include <QTranslator>
#include <QDebug>
+#include <QMessageBox>
#include "qdeclarativetester.h"
#include "qdeclarativefolderlistmodel.h"
QT_USE_NAMESPACE
+QtMsgHandler systemMsgOutput;
+
#if defined (Q_OS_SYMBIAN)
#include <unistd.h>
#include <sys/types.h>
@@ -73,6 +77,36 @@ void myMessageOutput(QtMsgType type, const char *msg)
abort();
}
}
+
+#else // !defined (Q_OS_SYMBIAN)
+
+QWeakPointer<LoggerWidget> logger;
+
+QString warnings;
+void showWarnings()
+{
+ if (!warnings.isEmpty()) {
+ QMessageBox::warning(0, QApplication::tr("Qt Declarative UI Runtime"), warnings);
+ }
+}
+
+void myMessageOutput(QtMsgType type, const char *msg)
+{
+ if (!logger.isNull()) {
+ QString strMsg = QString::fromAscii(msg);
+ QMetaObject::invokeMethod(logger.data(), "append", Q_ARG(QString, strMsg));
+ } else {
+ warnings += msg;
+ warnings += QLatin1Char('\n');
+ }
+ if (systemMsgOutput) { // Windows
+ systemMsgOutput(type, msg);
+ } else { // Unix
+ fprintf(stderr, "%s\n",msg);
+ fflush(stderr);
+ }
+}
+
#endif
void usage()
@@ -91,6 +125,7 @@ void usage()
qWarning(" -sizeviewtorootobject .................... the view resizes to the changes in the content");
qWarning(" -sizerootobjecttoview .................... the content resizes to the changes in the view");
qWarning(" -qmlbrowser .............................. use a QML-based file browser");
+ qWarning(" -nolog ................................... do not show log window");
qWarning(" -recordfile <output> ..................... set video recording file");
qWarning(" - ImageMagick 'convert' for GIF)");
qWarning(" - png file for raw frames");
@@ -137,6 +172,14 @@ int main(int argc, char ** argv)
{
#if defined (Q_OS_SYMBIAN)
qInstallMsgHandler(myMessageOutput);
+#else
+ systemMsgOutput = qInstallMsgHandler(myMessageOutput);
+#endif
+
+#if defined (Q_OS_WIN)
+ // Debugging output is not visible by default on Windows -
+ // therefore show modal dialog with errors instad.
+ atexit(showWarnings);
#endif
#if defined (Q_WS_X11)
@@ -186,6 +229,7 @@ int main(int argc, char ** argv)
bool stayOnTop = false;
bool maximized = false;
bool useNativeFileBrowser = true;
+ bool showLogWidget = true;
bool sizeToView = true;
#if defined(Q_OS_SYMBIAN)
@@ -237,8 +281,8 @@ int main(int argc, char ** argv)
if (lastArg) usage();
app.setStartDragDistance(QString(argv[++i]).toInt());
} else if (arg == QLatin1String("-v") || arg == QLatin1String("-version")) {
- fprintf(stderr, "Qt Declarative UI Viewer version %s\n", QT_VERSION_STR);
- return 0;
+ qWarning("Qt Declarative UI Viewer version %s", QT_VERSION_STR);
+ exit(0);
} else if (arg == "-translation") {
if (lastArg) usage();
translationFile = argv[++i];
@@ -246,14 +290,16 @@ int main(int argc, char ** argv)
useGL = true;
} else if (arg == "-qmlbrowser") {
useNativeFileBrowser = false;
+ } else if (arg == "-nolog") {
+ showLogWidget = false;
} else if (arg == "-I" || arg == "-L") {
if (arg == "-L")
- fprintf(stderr, "-L option provided for compatibility only, use -I instead\n");
+ qWarning("-L option provided for compatibility only, use -I instead");
if (lastArg) {
QDeclarativeEngine tmpEngine;
QString paths = tmpEngine.importPathList().join(QLatin1String(":"));
- fprintf(stderr, "Current search path: %s\n", paths.toLocal8Bit().constData());
- return 0;
+ qWarning("Current search path: %s", paths.toLocal8Bit().constData());
+ exit(0);
}
imports << QString(argv[++i]);
} else if (arg == "-P") {
@@ -294,7 +340,14 @@ int main(int argc, char ** argv)
if (stayOnTop)
wflags |= Qt::WindowStaysOnTopHint;
- QDeclarativeViewer viewer(0, wflags);
+#if !defined(Q_OS_SYMBIAN)
+ LoggerWidget loggerWidget(0);
+ if (showLogWidget) {
+ logger = &loggerWidget;
+ }
+#endif
+
+ QDeclarativeViewer *viewer = new QDeclarativeViewer(0, wflags);
if (!scriptopts.isEmpty()) {
QStringList options =
scriptopts.split(QLatin1Char(','), QString::SkipEmptyParts);
@@ -330,45 +383,45 @@ int main(int argc, char ** argv)
if (!(scriptOptions & QDeclarativeViewer::Record) && !(scriptOptions & QDeclarativeViewer::Play))
scriptOptsUsage();
- viewer.setScriptOptions(scriptOptions);
- viewer.setScript(script);
+ viewer->setScriptOptions(scriptOptions);
+ viewer->setScript(script);
} else if (!script.isEmpty()) {
usage();
}
- viewer.addLibraryPath(QCoreApplication::applicationDirPath());
+ viewer->addLibraryPath(QCoreApplication::applicationDirPath());
foreach (QString lib, imports)
- viewer.addLibraryPath(lib);
+ viewer->addLibraryPath(lib);
foreach (QString plugin, plugins)
- viewer.addPluginPath(plugin);
+ viewer->addPluginPath(plugin);
- viewer.setNetworkCacheSize(cache);
- viewer.setRecordFile(recordfile);
- viewer.setSizeToView(sizeToView);
+ viewer->setNetworkCacheSize(cache);
+ viewer->setRecordFile(recordfile);
+ viewer->setSizeToView(sizeToView);
if (resizeview)
- viewer.setScaleView();
+ viewer->setScaleView();
if (fps>0)
- viewer.setRecordRate(fps);
+ viewer->setRecordRate(fps);
if (autorecord_to)
- viewer.setAutoRecord(autorecord_from,autorecord_to);
+ viewer->setAutoRecord(autorecord_from,autorecord_to);
if (!skin.isEmpty()) {
if (skin == "list") {
- foreach (QString s, viewer.builtinSkins())
+ foreach (QString s, viewer->builtinSkins())
qWarning() << qPrintable(s);
exit(0);
} else {
- viewer.setSkin(skin);
+ viewer->setSkin(skin);
}
}
if (devkeys)
- viewer.setDeviceKeys(true);
- viewer.setRecordDither(dither);
+ viewer->setDeviceKeys(true);
+ viewer->setRecordDither(dither);
if (recordargs.count())
- viewer.setRecordArgs(recordargs);
+ viewer->setRecordArgs(recordargs);
- viewer.setUseNativeFileBrowser(useNativeFileBrowser);
+ viewer->setUseNativeFileBrowser(useNativeFileBrowser);
if (fullScreen && maximized)
qWarning() << "Both -fullscreen and -maximized specified. Using -fullscreen.";
@@ -387,16 +440,19 @@ int main(int argc, char ** argv)
}
if (!fileName.isEmpty()) {
- viewer.open(fileName);
- fullScreen ? viewer.showFullScreen() : maximized ? viewer.showMaximized() : viewer.show();
+ viewer->open(fileName);
+ fullScreen ? viewer->showFullScreen() : maximized ? viewer->showMaximized() : viewer->show();
} else {
if (!useNativeFileBrowser)
- viewer.openFile();
- fullScreen ? viewer.showFullScreen() : maximized ? viewer.showMaximized() : viewer.show();
+ viewer->openFile();
+ fullScreen ? viewer->showFullScreen() : maximized ? viewer->showMaximized() : viewer->show();
if (useNativeFileBrowser)
- viewer.openFile();
+ viewer->openFile();
}
- viewer.setUseGL(useGL);
- viewer.raise();
- return app.exec();
+ viewer->setUseGL(useGL);
+ viewer->raise();
+
+ int rv = app.exec();
+ delete viewer;
+ exit(rv);
}
diff --git a/tools/qml/qdeclarativetester.cpp b/tools/qml/qdeclarativetester.cpp
index 11fa22f..6a6048a 100644
--- a/tools/qml/qdeclarativetester.cpp
+++ b/tools/qml/qdeclarativetester.cpp
@@ -251,7 +251,8 @@ void QDeclarativeTester::updateCurrentTime(int msec)
m_view->render(&p);
}
- bool snapshot = msec == 16 && options & QDeclarativeViewer::Snapshot;
+ bool snapshot = msec == 16 && (options & QDeclarativeViewer::Snapshot
+ || (testscript && testscript->count() == 2));
FrameEvent fe;
fe.msec = msec;
diff --git a/tools/qml/qml.pri b/tools/qml/qml.pri
index c48e919..d343c76 100644
--- a/tools/qml/qml.pri
+++ b/tools/qml/qml.pri
@@ -10,11 +10,13 @@ HEADERS += $$PWD/qmlruntime.h \
$$PWD/proxysettings.h \
$$PWD/qdeclarativetester.h \
$$PWD/deviceorientation.h \
- $$PWD/qdeclarativefolderlistmodel.h
+ $$PWD/qdeclarativefolderlistmodel.h \
+ $$PWD/loggerwidget.h
SOURCES += $$PWD/qmlruntime.cpp \
$$PWD/proxysettings.cpp \
$$PWD/qdeclarativetester.cpp \
- $$PWD/qdeclarativefolderlistmodel.cpp
+ $$PWD/qdeclarativefolderlistmodel.cpp \
+ $$PWD/loggerwidget.cpp
RESOURCES = $$PWD/qmlruntime.qrc
maemo5 {
@@ -26,4 +28,3 @@ FORMS = $$PWD/recopts.ui \
$$PWD/proxysettings.ui
include(../shared/deviceskin/deviceskin.pri)
-
diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp
index 7b4706b..87a4d21 100644
--- a/tools/qml/qmlruntime.cpp
+++ b/tools/qml/qmlruntime.cpp
@@ -1000,7 +1000,6 @@ bool QDeclarativeViewer::open(const QString& file_or_url)
t.start();
canvas->setSource(url);
- qWarning() << "Wall startup time:" << t.elapsed();
return true;
}
@@ -1431,7 +1430,7 @@ void QDeclarativeViewer::registerTypes()
if (!registered) {
// registering only for exposing the DeviceOrientation::Orientation enum
- qmlRegisterUncreatableType<DeviceOrientation>("Qt",4,6,"Orientation");
+ qmlRegisterUncreatableType<DeviceOrientation>("Qt",4,6,"Orientation","");
registered = true;
}
}