aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Hansen <kent.hansen@nokia.com>2012-03-19 12:29:32 +0100
committerKent Hansen <kent.hansen@nokia.com>2012-03-19 12:37:03 +0100
commit4821058f10118be55a541ad39e25ec9165cca3b3 (patch)
tree167973e3c68fc442b0e37d6f628f3fdbe759f15a
parent83f11e33745180e9370d484cbcedd0bac020c9dd (diff)
parent26d5f2e833f0e3686aaa27e695bbfab5fbd808ad (diff)
Merge master into api_changes
Conflicts: src/qml/debugger/qqmlenginedebugservice.cpp src/qml/qml/v8/qv8qobjectwrapper.cpp src/quick/util/qquickimageprovider.cpp tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp Change-Id: Ie78ba2fabd32f4812bcae9dbdd66ed289dc11dcb
-rw-r--r--doc/src/examples/advtutorial.qdoc36
-rw-r--r--doc/src/examples/dynamicview-tutorial.qdoc8
-rw-r--r--doc/src/examples/example-slideswitch.qdoc20
-rw-r--r--doc/src/examples/examples.qdoc142
-rw-r--r--doc/src/examples/tutorial.qdoc32
-rw-r--r--doc/src/localstorage/localstorage.qdoc46
-rw-r--r--doc/src/qml/basictypes.qdoc36
-rw-r--r--doc/src/qml/c++models.qdoc32
-rw-r--r--doc/src/qml/codingconventions.qdoc22
-rw-r--r--doc/src/qml/dynamicobjects.qdoc18
-rw-r--r--doc/src/qml/extending-tutorial.qdoc46
-rw-r--r--doc/src/qml/integrating.qdoc6
-rw-r--r--doc/src/qml/javascriptblocks.qdoc32
-rw-r--r--doc/src/qml/modules.qdoc46
-rw-r--r--doc/src/qml/network.qdoc86
-rw-r--r--doc/src/qml/performance.qdoc28
-rw-r--r--doc/src/qml/propertybinding.qdoc24
-rw-r--r--doc/src/qml/qmlcomponents.qdoc18
-rw-r--r--doc/src/qml/qmldate.qdoc92
-rw-r--r--doc/src/qml/qmldocument.qdoc24
-rw-r--r--doc/src/qml/qmlengine.qdoc50
-rw-r--r--doc/src/qml/qmlevents.qdoc6
-rw-r--r--doc/src/qml/qmli18n.qdoc4
-rw-r--r--doc/src/qml/qmlintro.qdoc24
-rw-r--r--doc/src/qml/qmlnumber.qdoc10
-rw-r--r--doc/src/qml/qmlplugins.qdoc18
-rw-r--r--doc/src/qml/qmlruntime.qdoc4
-rw-r--r--doc/src/qml/qmlsyntax.qdoc10
-rw-r--r--doc/src/qml/qmltypes.qdoc52
-rw-r--r--doc/src/qml/qmlviewer.qdoc22
-rw-r--r--doc/src/qml/qtbinding.qdoc154
-rw-r--r--doc/src/qml/qtdeclarative.qdoc4
-rw-r--r--doc/src/qml/qtjavascript.qdoc2
-rw-r--r--doc/src/qml/qtprogrammers.qdoc26
-rw-r--r--doc/src/qml/scope.qdoc2
-rw-r--r--doc/src/qml/security.qdoc16
-rw-r--r--doc/src/qtdeclarative.qdoc76
-rw-r--r--doc/src/qtquick2/anchor-layout.qdoc16
-rw-r--r--doc/src/qtquick2/animation.qdoc52
-rw-r--r--doc/src/qtquick2/basicelements.qdoc20
-rw-r--r--doc/src/qtquick2/behaviors-and-states.qdoc4
-rw-r--r--doc/src/qtquick2/canvaspainting.qdoc4
-rw-r--r--doc/src/qtquick2/elements.qdoc176
-rw-r--r--doc/src/qtquick2/focus.qdoc22
-rw-r--r--doc/src/qtquick2/modelview.qdoc50
-rw-r--r--doc/src/qtquick2/mouseevents.qdoc22
-rw-r--r--doc/src/qtquick2/positioners.qdoc8
-rw-r--r--doc/src/qtquick2/qmltexthandling.qdoc12
-rw-r--r--doc/src/qtquick2/qtquick-intro.qdoc16
-rw-r--r--doc/src/qtquick2/states.qdoc46
-rw-r--r--doc/src/qtquick2/writingcomponents.qdoc52
-rw-r--r--doc/src/whatsnew.qdoc14
-rw-r--r--examples/demos/stockchart/README (renamed from examples/quick/canvas/stockchart/README)0
-rw-r--r--examples/demos/stockchart/com/nokia/StockChartExample/qmldir (renamed from examples/quick/canvas/stockchart/com/nokia/StockChartExample/qmldir)0
-rw-r--r--examples/demos/stockchart/model.cpp (renamed from examples/quick/canvas/stockchart/model.cpp)0
-rw-r--r--examples/demos/stockchart/model.h (renamed from examples/quick/canvas/stockchart/model.h)0
-rw-r--r--examples/demos/stockchart/plugin.cpp (renamed from examples/quick/canvas/stockchart/plugin.cpp)0
-rw-r--r--examples/demos/stockchart/stock.qml (renamed from examples/quick/canvas/stockchart/stock.qml)0
-rw-r--r--examples/demos/stockchart/stockchart.pro (renamed from examples/quick/canvas/stockchart/stockchart.pro)0
-rw-r--r--examples/demos/stockchart/stockchart.qmlproject16
-rw-r--r--examples/demos/twitterfriends/TwitterUser.qml (renamed from examples/quick/canvas/twitterfriends/TwitterUser.qml)0
-rw-r--r--examples/demos/twitterfriends/cache.js (renamed from examples/quick/canvas/twitterfriends/cache.js)0
-rw-r--r--examples/demos/twitterfriends/friends.qml (renamed from examples/quick/canvas/twitterfriends/twitter.qml)1
-rw-r--r--examples/demos/twitterfriends/twitterfriends.qmlproject16
-rw-r--r--examples/localstorage/localstorage.pro10
-rw-r--r--examples/localstorage/localstorage.qml66
-rw-r--r--examples/localstorage/localstorage.qmlproject16
-rw-r--r--examples/localstorage/main.cpp41
-rw-r--r--examples/qml/xmlhttprequest/get.qml (renamed from examples/qml/xmlhttprequest/xmlhttprequest-example.qml)0
-rw-r--r--examples/qml/xmlhttprequest/main.cpp41
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.pro9
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.qml66
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.qmlproject16
-rw-r--r--examples/quick/canvas/bezierCurve/bezierCurve.qml24
-rw-r--r--examples/quick/canvas/canvas.pro9
-rw-r--r--examples/quick/canvas/canvas.qml85
-rw-r--r--examples/quick/canvas/clip/clip.qml24
-rw-r--r--examples/quick/canvas/contents/Button.qml2
-rw-r--r--examples/quick/canvas/main.cpp41
-rw-r--r--examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml24
-rw-r--r--examples/quick/canvas/roundedrect/roundedrect.qml24
-rw-r--r--examples/quick/canvas/smile/smile.qml24
-rw-r--r--examples/quick/canvas/squircle/squircle.qml24
-rw-r--r--examples/quick/canvas/tiger/tiger.qml22
-rw-r--r--examples/quick/mousearea/mousearea-wheel-example.qml (renamed from examples/qtquick/mousearea/mousearea-wheel-example.qml)0
-rw-r--r--examples/quick/openglunderqml/squircle.cpp3
-rw-r--r--examples/quick/openglunderqml/squircle.h2
-rw-r--r--src/imports/folderlistmodel/qquickfolderlistmodel.cpp44
-rw-r--r--src/imports/localstorage/plugin.cpp46
-rw-r--r--src/imports/testlib/TestCase.qml16
-rw-r--r--src/imports/testlib/main.cpp7
-rw-r--r--src/imports/testlib/testcase.qdoc4
-rw-r--r--src/imports/xmllistmodel/qqmlxmllistmodel.cpp8
-rw-r--r--src/plugins/qmltooling/qmldbg_ost/qmlostplugin.cpp2
-rw-r--r--src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp2
-rw-r--r--src/qml/animations/qabstractanimationjob.cpp36
-rw-r--r--src/qml/animations/qabstractanimationjob_p.h13
-rw-r--r--src/qml/debugger/qdebugmessageservice.cpp2
-rw-r--r--src/qml/debugger/qqmldebugserver.cpp26
-rw-r--r--src/qml/debugger/qqmldebugservice.cpp4
-rw-r--r--src/qml/debugger/qqmldebugstatesdelegate_p.h5
-rw-r--r--src/qml/debugger/qqmlenginedebugservice.cpp64
-rw-r--r--src/qml/debugger/qqmlenginedebugservice_p.h6
-rw-r--r--src/qml/debugger/qqmlinspectorservice.cpp2
-rw-r--r--src/qml/debugger/qqmlprofilerservice.cpp2
-rw-r--r--src/qml/debugger/qv8debugservice.cpp2
-rw-r--r--src/qml/debugger/qv8profilerservice.cpp2
-rw-r--r--src/qml/qml/qml.pri13
-rw-r--r--src/qml/qml/qqmlabstractbinding.cpp200
-rw-r--r--src/qml/qml/qqmlabstractbinding_p.h132
-rw-r--r--src/qml/qml/qqmlabstractexpression.cpp101
-rw-r--r--src/qml/qml/qqmlabstractexpression_p.h124
-rw-r--r--src/qml/qml/qqmlbinding.cpp478
-rw-r--r--src/qml/qml/qqmlbinding_p.h170
-rw-r--r--src/qml/qml/qqmlcomponent.cpp138
-rw-r--r--src/qml/qml/qqmlcomponent.h6
-rw-r--r--src/qml/qml/qqmlcomponent_p.h2
-rw-r--r--src/qml/qml/qqmlcontext.cpp2
-rw-r--r--src/qml/qml/qqmldata_p.h7
-rw-r--r--src/qml/qml/qqmlengine.cpp50
-rw-r--r--src/qml/qml/qqmlexpression.cpp425
-rw-r--r--src/qml/qml/qqmlexpression.h2
-rw-r--r--src/qml/qml/qqmlexpression_p.h289
-rw-r--r--src/qml/qml/qqmlextensionplugin.cpp6
-rw-r--r--src/qml/qml/qqmlimport.cpp18
-rw-r--r--src/qml/qml/qqmlincubator.cpp10
-rw-r--r--src/qml/qml/qqmljavascriptexpression.cpp371
-rw-r--r--src/qml/qml/qqmljavascriptexpression_p.h283
-rw-r--r--src/qml/qml/qqmllocale.cpp28
-rw-r--r--src/qml/qml/qqmlnetworkaccessmanagerfactory.cpp4
-rw-r--r--src/qml/qml/qqmlproperty.cpp19
-rw-r--r--src/qml/qml/qqmlproperty_p.h8
-rw-r--r--src/qml/qml/qqmltypeloader.cpp39
-rw-r--r--src/qml/qml/qqmltypeloader_p.h2
-rw-r--r--src/qml/qml/qqmlvaluetypeproxybinding.cpp138
-rw-r--r--src/qml/qml/qqmlvaluetypeproxybinding_p.h (renamed from src/qml/qml/qqmlbinding_p_p.h)42
-rw-r--r--src/qml/qml/qqmlvme.cpp10
-rw-r--r--src/qml/qml/qqmlvmemetaobject.cpp67
-rw-r--r--src/qml/qml/qqmlvmemetaobject_p.h16
-rw-r--r--src/qml/qml/qquickworkerscript.cpp6
-rw-r--r--src/qml/qml/v4/qv4bindings.cpp68
-rw-r--r--src/qml/qml/v4/qv4compiler.cpp32
-rw-r--r--src/qml/qml/v4/qv4instruction.cpp18
-rw-r--r--src/qml/qml/v4/qv4instruction_p.h12
-rw-r--r--src/qml/qml/v4/qv4ir.cpp13
-rw-r--r--src/qml/qml/v4/qv4ir_p.h2
-rw-r--r--src/qml/qml/v4/qv4irbuilder.cpp91
-rw-r--r--src/qml/qml/v4/qv4program_p.h1
-rw-r--r--src/qml/qml/v8/qjsengine.cpp2
-rw-r--r--src/qml/qml/v8/qjsvalue.cpp44
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions.cpp107
-rw-r--r--src/qml/qml/v8/qv8bindings.cpp6
-rw-r--r--src/qml/qml/v8/qv8contextwrapper.cpp18
-rw-r--r--src/qml/qml/v8/qv8qobjectwrapper.cpp21
-rw-r--r--src/qml/qml/v8/qv8valuetypewrapper.cpp4
-rw-r--r--src/qml/util/qqmlpropertymap.cpp4
-rw-r--r--src/qmltest/quicktest.cpp7
-rw-r--r--src/quick/items/context2d/qquickcanvasitem.cpp20
-rw-r--r--src/quick/items/context2d/qquickcontext2d.cpp168
-rw-r--r--src/quick/items/qquickaccessibleattached.cpp25
-rw-r--r--src/quick/items/qquickaccessibleattached_p.h2
-rw-r--r--src/quick/items/qquickanimatedimage.cpp2
-rw-r--r--src/quick/items/qquickborderimage.cpp22
-rw-r--r--src/quick/items/qquickcanvas.cpp8
-rw-r--r--src/quick/items/qquickdrag.cpp8
-rw-r--r--src/quick/items/qquickdroparea.cpp8
-rw-r--r--src/quick/items/qquickevents.cpp54
-rw-r--r--src/quick/items/qquickflickable.cpp22
-rw-r--r--src/quick/items/qquickgridview.cpp79
-rw-r--r--src/quick/items/qquickimage.cpp54
-rw-r--r--src/quick/items/qquickitem.cpp96
-rw-r--r--src/quick/items/qquickitemanimation.cpp10
-rw-r--r--src/quick/items/qquickitemview.cpp13
-rw-r--r--src/quick/items/qquickitemview_p_p.h7
-rw-r--r--src/quick/items/qquickitemviewtransition.cpp62
-rw-r--r--src/quick/items/qquicklistview.cpp99
-rw-r--r--src/quick/items/qquickloader.cpp61
-rw-r--r--src/quick/items/qquickmousearea.cpp24
-rw-r--r--src/quick/items/qquickmultipointtoucharea.cpp12
-rw-r--r--src/quick/items/qquickpathview.cpp6
-rw-r--r--src/quick/items/qquickpincharea.cpp40
-rw-r--r--src/quick/items/qquickpositioners.cpp52
-rw-r--r--src/quick/items/qquickrepeater.cpp16
-rw-r--r--src/quick/items/qquickshadereffect.cpp38
-rw-r--r--src/quick/items/qquickshadereffectmesh.cpp4
-rw-r--r--src/quick/items/qquickshadereffectsource.cpp24
-rw-r--r--src/quick/items/qquickstateoperations.cpp12
-rw-r--r--src/quick/items/qquicktext.cpp94
-rw-r--r--src/quick/items/qquicktextedit.cpp94
-rw-r--r--src/quick/items/qquicktextinput.cpp108
-rw-r--r--src/quick/items/qquicktextinput_p_p.h1
-rw-r--r--src/quick/items/qquickvisualadaptormodel.cpp24
-rw-r--r--src/quick/items/qquickvisualdatamodel.cpp30
-rw-r--r--src/quick/items/qquickvisualdatamodel_p_p.h2
-rw-r--r--src/quick/items/qquickwindowmanager.cpp12
-rw-r--r--src/quick/particles/qquickimageparticle.cpp14
-rw-r--r--src/quick/particles/qquickpointattractor.cpp16
-rw-r--r--src/quick/particles/qquickwander.cpp6
-rw-r--r--src/quick/qtquick2.cpp22
-rw-r--r--src/quick/scenegraph/coreapi/qsgrendernode.cpp34
-rw-r--r--src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp86
-rw-r--r--src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h59
-rw-r--r--src/quick/scenegraph/qsgdistancefieldglyphnode.cpp67
-rw-r--r--src/quick/scenegraph/qsgdistancefieldglyphnode_p.h5
-rw-r--r--src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp19
-rw-r--r--src/quick/scenegraph/qsgshareddistancefieldglyphcache_p.h12
-rw-r--r--src/quick/util/qquickanimation.cpp282
-rw-r--r--src/quick/util/qquickanimationcontroller.cpp2
-rw-r--r--src/quick/util/qquickconnections.cpp6
-rw-r--r--src/quick/util/qquickfontloader.cpp14
-rw-r--r--src/quick/util/qquickimageprovider.cpp6
-rw-r--r--src/quick/util/qquickpath.cpp56
-rw-r--r--src/quick/util/qquickpixmapcache.cpp4
-rw-r--r--src/quick/util/qquickpropertychanges.cpp11
-rw-r--r--src/quick/util/qquicksmoothedanimation.cpp6
-rw-r--r--src/quick/util/qquicksystempalette.cpp6
-rw-r--r--src/quick/util/qquicktimeline.cpp14
-rw-r--r--tests/auto/auto.pro2
-rw-r--r--tests/auto/particles/qquickimageparticle/tst_qquickimageparticle.cpp5
-rw-r--r--tests/auto/qml/debugger/qqmldebugclient/tst_qqmldebugclient.cpp6
-rw-r--r--tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp16
-rw-r--r--tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp4
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp33
-rw-r--r--tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp2
-rw-r--r--tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.pro1
-rw-r--r--tests/auto/qml/debugger/shared/qqmldebugclient.h4
-rw-r--r--tests/auto/qml/debugger/shared/qqmlenginedebug_p.h28
-rw-r--r--tests/auto/qml/parserstress/tst_parserstress.cpp3
-rw-r--r--tests/auto/qml/qjsengine/tst_qjsengine.cpp24
-rw-r--r--tests/auto/qml/qjsvalue/tst_qjsvalue.cpp34
-rw-r--r--tests/auto/qml/qqmlcomponent/data/TestComponent.2.qml591
-rw-r--r--tests/auto/qml/qqmlcomponent/data/TestComponent.qml534
-rw-r--r--tests/auto/qml/qqmlcomponent/qqmlcomponent.pro8
-rw-r--r--tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp101
-rw-r--r--tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp2
-rw-r--r--tests/auto/qml/qqmlecmascript/data/ComponentWithVarProp.qml5
-rw-r--r--tests/auto/qml/qqmlecmascript/data/dynamicDeletion.3.qml30
-rw-r--r--tests/auto/qml/qqmlecmascript/data/moduleapi/qobjectModuleApiWriting.qml8
-rw-r--r--tests/auto/qml/qqmlecmascript/data/propertyVarOwnership.5.qml28
-rw-r--r--tests/auto/qml/qqmlecmascript/data/qtbug_24448.js6
-rw-r--r--tests/auto/qml/qqmlecmascript/data/qtbug_24448.qml7
-rw-r--r--tests/auto/qml/qqmlecmascript/testtypes.cpp1
-rw-r--r--tests/auto/qml/qqmlecmascript/testtypes.h14
-rw-r--r--tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp114
-rw-r--r--tests/auto/qml/qqmlincubator/tst_qqmlincubator.cpp117
-rw-r--r--tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp44
-rw-r--r--tests/auto/qml/qqmlqt/data/TestComponent.2.qml592
-rw-r--r--tests/auto/qml/qqmlqt/data/TestComponent.3.qml89
-rw-r--r--tests/auto/qml/qqmlqt/data/TestComponent.qml534
-rw-r--r--tests/auto/qml/qqmlqt/data/createComponent.2.qml27
-rw-r--r--tests/auto/qml/qqmlqt/data/createComponent.qml13
-rw-r--r--tests/auto/qml/qqmlqt/tst_qqmlqt.cpp13
-rw-r--r--tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp2
-rw-r--r--tests/auto/qml/qquickfolderlistmodel/qquickfolderlistmodel.pro2
-rw-r--r--tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp2
-rw-r--r--tests/auto/qml/v4/data/equals.qml48
-rw-r--r--tests/auto/qml/v4/data/logicalAnd.2.qml6
-rw-r--r--tests/auto/qml/v4/data/logicalAnd.3.qml8
-rw-r--r--tests/auto/qml/v4/data/logicalAnd.4.qml8
-rw-r--r--tests/auto/qml/v4/data/logicalAnd.5.qml7
-rw-r--r--tests/auto/qml/v4/data/logicalAnd.6.qml9
-rw-r--r--tests/auto/qml/v4/data/logicalAnd.7.qml9
-rw-r--r--tests/auto/qml/v4/data/logicalAnd.qml6
-rw-r--r--tests/auto/qml/v4/data/nestedLogicalAnd.qml14
-rw-r--r--tests/auto/qml/v4/data/strictEquals.qml48
-rw-r--r--tests/auto/qml/v4/tst_v4.cpp113
-rw-r--r--tests/auto/qmltest/events/tst_drag.qml74
-rw-r--r--tests/auto/quick/examples/tst_examples.cpp40
-rwxr-xr-xtests/auto/quick/qquickanimationcontroller/data/tst_coloranimation.qml38
-rw-r--r--tests/auto/quick/qquickanimationcontroller/data/tst_parallelanimation.qml63
-rw-r--r--tests/auto/quick/qquickanimationcontroller/data/tst_sequentialanimation.qml65
-rw-r--r--tests/auto/quick/qquickcanvas/tst_qquickcanvas.cpp2
-rw-r--r--tests/auto/quick/qquickflickable/tst_qquickflickable.cpp2
-rw-r--r--tests/auto/quick/qquickfontloader/qquickfontloader.pro2
-rw-r--r--tests/auto/quick/qquickfontloader/tst_qquickfontloader.cpp2
-rw-r--r--tests/auto/quick/qquickgridview/data/headerfooter.qml31
-rw-r--r--tests/auto/quick/qquickgridview/tst_qquickgridview.cpp276
-rw-r--r--tests/auto/quick/qquickimage/tst_qquickimage.cpp4
-rw-r--r--tests/auto/quick/qquickitem/data/multipleFocusClears.qml18
-rw-r--r--tests/auto/quick/qquickitem/tst_qquickitem.cpp11
-rw-r--r--tests/auto/quick/qquickitemlayer/qquickitemlayer.pro8
-rw-r--r--tests/auto/quick/qquickitemlayer/tst_qquickitemlayer.cpp32
-rw-r--r--tests/auto/quick/qquicklistview/data/headerfooter.qml2
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp189
-rw-r--r--tests/auto/quick/qquickloader/data/TestComponent.2.qml592
-rw-r--r--tests/auto/quick/qquickloader/data/TestComponent.qml89
-rw-r--r--tests/auto/quick/qquickloader/data/simultaneous.qml22
-rw-r--r--tests/auto/quick/qquickloader/tst_qquickloader.cpp55
-rw-r--r--tests/auto/quick/qquickmultipointtoucharea/qquickmultipointtoucharea.pro2
-rw-r--r--tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp6
-rw-r--r--tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp4
-rw-r--r--tests/auto/quick/qquicktext/qquicktext.pro2
-rw-r--r--tests/auto/quick/qquicktextinput/qquicktextinput.pro2
-rw-r--r--tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp12
-rw-r--r--tests/auto/quick/quick.pro1
-rw-r--r--tests/auto/quick/rendernode/tst_rendernode.cpp8
-rw-r--r--tests/auto/shared/testhttpserver.cpp12
-rw-r--r--tools/easingcurveeditor/Button.qml177
-rw-r--r--tools/easingcurveeditor/easingcurveeditor.pro25
-rw-r--r--tools/easingcurveeditor/main.cpp55
-rw-r--r--tools/easingcurveeditor/mainwindow.cpp136
-rw-r--r--tools/easingcurveeditor/mainwindow.h77
-rw-r--r--tools/easingcurveeditor/pane.ui112
-rw-r--r--tools/easingcurveeditor/preview.qml148
-rw-r--r--tools/easingcurveeditor/properties.ui131
-rw-r--r--tools/easingcurveeditor/resources.qrc6
-rw-r--r--tools/easingcurveeditor/segmentproperties.cpp128
-rw-r--r--tools/easingcurveeditor/segmentproperties.h94
-rw-r--r--tools/easingcurveeditor/splineeditor.cpp714
-rw-r--r--tools/easingcurveeditor/splineeditor.h143
-rw-r--r--tools/qmlprofiler/constants.h11
-rw-r--r--tools/qmlprofiler/profiledata.cpp1902
-rw-r--r--tools/qmlprofiler/profiledata.h247
-rw-r--r--tools/qmlprofiler/qmlprofiler.pro11
-rw-r--r--tools/qmlprofiler/qmlprofilerapplication.cpp22
-rw-r--r--tools/qmlprofiler/qmlprofilerapplication.h9
-rw-r--r--tools/qmlprofiler/qmlprofilerclient.cpp (renamed from tools/qmlprofiler/profileclient.cpp)56
-rw-r--r--tools/qmlprofiler/qmlprofilerclient.h (renamed from tools/qmlprofiler/profileclient.h)33
-rw-r--r--tools/qmlprofiler/qmlprofilerdata.cpp602
-rw-r--r--tools/qmlprofiler/qmlprofilerdata.h104
-rw-r--r--tools/qmlprofiler/qmlprofilereventlocation.h61
-rw-r--r--tools/tools.pro2
322 files changed, 12387 insertions, 6110 deletions
diff --git a/doc/src/examples/advtutorial.qdoc b/doc/src/examples/advtutorial.qdoc
index d682a73430..bbb145cd40 100644
--- a/doc/src/examples/advtutorial.qdoc
+++ b/doc/src/examples/advtutorial.qdoc
@@ -36,7 +36,7 @@ This tutorial walks step-by-step through the creation of a full application usin
It assumes that you already know the basics of QML (for example, from reading the
\l{QML Tutorial}{simple tutorial}).
-In this tutorial we write a game, \i {Same Game}, based on the Same Game application
+In this tutorial we write a game, \e {Same Game}, based on the Same Game application
included in the declarative \c examples directory, which looks like this:
\image declarative-samegame.png
@@ -53,10 +53,10 @@ control QML elements.
Tutorial chapters:
\list 1
-\o \l {declarative/tutorials/samegame/samegame1}{Creating the Game Canvas and Blocks}
-\o \l {declarative/tutorials/samegame/samegame2}{Populating the Game Canvas}
-\o \l {declarative/tutorials/samegame/samegame3}{Implementing the Game Logic}
-\o \l {declarative/tutorials/samegame/samegame4}{Finishing Touches}
+\li \l {declarative/tutorials/samegame/samegame1}{Creating the Game Canvas and Blocks}
+\li \l {declarative/tutorials/samegame/samegame2}{Populating the Game Canvas}
+\li \l {declarative/tutorials/samegame/samegame3}{Implementing the Game Logic}
+\li \l {declarative/tutorials/samegame/samegame4}{Finishing Touches}
\endlist
All the code in this tutorial can be found in Qt's \c examples/declarative/tutorials/samegame
@@ -168,18 +168,18 @@ and moves the new block to its position on the game canvas. This involves severa
\list
-\o \l {QML:Qt::createComponent()}{Qt.createComponent()} is called to
+\li \l {QML:Qt::createComponent()}{Qt.createComponent()} is called to
generate an element from \c Block.qml. If the component is ready,
we can call \c createObject() to create an instance of the \c Block
item.
-\o If \c createObject() returned null (i.e. if there was an error
+\li If \c createObject() returned null (i.e. if there was an error
while loading the object), print the error information.
-\o Place the block in its position on the board and set its width and
+\li Place the block in its position on the board and set its width and
height. Also, store it in the blocks array for future reference.
-\o Finally, print error information to the console if the component
+\li Finally, print error information to the console if the component
could not be loaded for some reason (for example, if the file is
missing).
@@ -228,11 +228,11 @@ until it is won or lost.
To do this, we have added the following functions to \c samegame.js:
\list
-\o \c{handleClick(x,y)}
-\o \c{floodFill(xIdx,yIdx,type)}
-\o \c{shuffleDown()}
-\o \c{victoryCheck()}
-\o \c{floodMoveCheck(xIdx, yIdx, type)}
+\li \c{handleClick(x,y)}
+\li \c{floodFill(xIdx,yIdx,type)}
+\li \c{shuffleDown()}
+\li \c{victoryCheck()}
+\li \c{floodMoveCheck(xIdx, yIdx, type)}
\endlist
As this is a tutorial about QML, not game design, we will only discuss \c handleClick() and \c victoryCheck() below since they interface directly with the QML elements. Note that although the game logic here is written in JavaScript, it could have been written in C++ and then exposed to QML.
@@ -459,10 +459,10 @@ makes it very easy to fetch and display XML based data such as RSS in a QML appl
By following this tutorial you've seen how you can write a fully functional application in QML:
\list
-\o Build your application with \l {{QML Elements}}{QML elements}
-\o Add application logic \l{JavaScript Expressions in QML}{with JavaScript code}
-\o Add animations with \l {Behavior}{Behaviors} and \l{QML States}{states}
-\o Store persistent application data using, for example, the \l{Offline Storage API} or \l XMLHttpRequest
+\li Build your application with \l {{QML Elements}}{QML elements}
+\li Add application logic \l{JavaScript Expressions in QML}{with JavaScript code}
+\li Add animations with \l {Behavior}{Behaviors} and \l{QML States}{states}
+\li Store persistent application data using, for example, the \l{Offline Storage API} or \l XMLHttpRequest
\endlist
There is so much more to learn about QML that we haven't been able to cover in this tutorial. Check out all the
diff --git a/doc/src/examples/dynamicview-tutorial.qdoc b/doc/src/examples/dynamicview-tutorial.qdoc
index 517dacc2f1..d1f69c28bb 100644
--- a/doc/src/examples/dynamicview-tutorial.qdoc
+++ b/doc/src/examples/dynamicview-tutorial.qdoc
@@ -39,10 +39,10 @@ data to dynamically sort all items in a view.
Tutorial chapters:
\list 1
-\o \l {declarative/tutorials/dynamicview/dynamicview1}{A Simple ListView and Delegate}
-\o \l {declarative/tutorials/dynamicview/dynamicview2}{Dragging View Items}
-\o \l {declarative/tutorials/dynamicview/dynamicview3}{Moving Dragged Items}
-\o \l {declarative/tutorials/dynamicview/dynamicview4}{Sorting Items}
+\li \l {declarative/tutorials/dynamicview/dynamicview1}{A Simple ListView and Delegate}
+\li \l {declarative/tutorials/dynamicview/dynamicview2}{Dragging View Items}
+\li \l {declarative/tutorials/dynamicview/dynamicview3}{Moving Dragged Items}
+\li \l {declarative/tutorials/dynamicview/dynamicview4}{Sorting Items}
\endlist
All the code in this tutorial can be found in Qt's \c examples/declarative/tutorials/dynamicview
diff --git a/doc/src/examples/example-slideswitch.qdoc b/doc/src/examples/example-slideswitch.qdoc
index 689841a78b..25e81861b7 100644
--- a/doc/src/examples/example-slideswitch.qdoc
+++ b/doc/src/examples/example-slideswitch.qdoc
@@ -37,12 +37,12 @@ The code for this example can be found in the \c examples/declarative/ui-compone
The elements that compose the switch are:
\list
-\o a \c on property (the interface to interact with the switch),
-\o two images (the background image and the knob),
-\o two mouse regions for user interation (on the background image and on the knob),
-\o two states (a \i on state and a \i off state),
-\o two functions or slots to react to the user interation (\c toggle() and \c dorelease()),
-\o and a transition that describe how to go from one state to the other.
+\li a \c on property (the interface to interact with the switch),
+\li two images (the background image and the knob),
+\li two mouse regions for user interation (on the background image and on the knob),
+\li two states (an \e on state and an \e off state),
+\li two functions or slots to react to the user interation (\c toggle() and \c dorelease()),
+\li and a transition that describe how to go from one state to the other.
\endlist
\section1 Switch.qml
@@ -93,8 +93,8 @@ in the \c dorelease() function that is called in the \c onReleased property.
We define the two states of the switch:
\list
-\o In the \i on state the knob is on the right (\c x position is 78) and the \c on property is \c true.
-\o In the \i off state the knob is on the left (\c x position is 1) and the \c on property is \c false.
+\li In the \e on state the knob is on the right (\c x position is 78) and the \c on property is \c true.
+\li In the \e off state the knob is on the left (\c x position is 1) and the \c on property is \c false.
\endlist
For more information on states see \l{qmlstates}{QML States}.
@@ -106,13 +106,13 @@ We add two JavaScript functions to our switch:
\snippet examples/declarative/ui-components/slideswitch/content/Switch.qml 2
This first function is called when the background image or the knob are clicked. We simply want the switch to toggle between the two
-states (\i on and \i off).
+states (\e on and \e off).
\snippet examples/declarative/ui-components/slideswitch/content/Switch.qml 3
This second function is called when the knob is released and we want to make sure that the knob does not end up between states
-(neither \i on nor \i off). If it is the case call the \c toggle() function otherwise we do nothing.
+(neither \e on nor \e off). If it is the case call the \c toggle() function otherwise we do nothing.
For more information on scripts see \l{JavaScript Expressions in QML}.
diff --git a/doc/src/examples/examples.qdoc b/doc/src/examples/examples.qdoc
index f9c89d87f4..a99dc8c263 100644
--- a/doc/src/examples/examples.qdoc
+++ b/doc/src/examples/examples.qdoc
@@ -103,10 +103,10 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Mouse and Keyboard Input
\enddiv
\list
- \o \l{declarative/text/fonts}{Fonts}
- \o \l{declarative/text/textselection}{Text Selection}
- \o \l{declarative/keyinteraction/focus}{Keyboard Focus}
- \o \l{declarative/touchinteraction/mousearea}{MouseArea}
+ \li \l{declarative/text/fonts}{Fonts}
+ \li \l{declarative/text/textselection}{Text Selection}
+ \li \l{declarative/keyinteraction/focus}{Keyboard Focus}
+ \li \l{declarative/touchinteraction/mousearea}{MouseArea}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -114,10 +114,10 @@ This set of code samples are part of the collection of \l{Qt Examples}.
States and Transitions
\enddiv
\list
- \o \l{declarative/animation/states}{States}
- \o \l{declarative/animation/basics}{Animation Essentials}
- \o \l{declarative/animation/behaviors}{Behaviors}
- \o \l{declarative/animation/easing}{Easing}
+ \li \l{declarative/animation/states}{States}
+ \li \l{declarative/animation/basics}{Animation Essentials}
+ \li \l{declarative/animation/behaviors}{Behaviors}
+ \li \l{declarative/animation/easing}{Easing}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -125,14 +125,14 @@ This set of code samples are part of the collection of \l{Qt Examples}.
UI Components
\enddiv
\list
- \o \l{declarative/ui-components/dialcontrol}{Dial Control}
- \o \l{declarative/ui-components/flipable}{Flipable}
- \o \l{declarative/ui-components/progressbar}{Progress Bar}
- \o \l{declarative/ui-components/scrollbar}{Scroll Bar}
- \o \l{declarative/ui-components/searchbox}{Search Box}
- \o \l{declarative/ui-components/slideswitch}{Slide Switch}
- \o \l{declarative/ui-components/spinner}{Spinner}
- \o \l{declarative/ui-components/tabwidget}{Tab Widget}
+ \li \l{declarative/ui-components/dialcontrol}{Dial Control}
+ \li \l{declarative/ui-components/flipable}{Flipable}
+ \li \l{declarative/ui-components/progressbar}{Progress Bar}
+ \li \l{declarative/ui-components/scrollbar}{Scroll Bar}
+ \li \l{declarative/ui-components/searchbox}{Search Box}
+ \li \l{declarative/ui-components/slideswitch}{Slide Switch}
+ \li \l{declarative/ui-components/spinner}{Spinner}
+ \li \l{declarative/ui-components/tabwidget}{Tab Widget}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -140,11 +140,11 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Positioners and Layout
\enddiv
\list
- \o \l{declarative/positioners}{Row and Column}
- \o \l{declarative/righttoleft/layoutmirroring}{Layout Mirroring}
- \o \l{declarative/righttoleft/layoutdirection}{Layout Direction}
- \o \l{declarative/righttoleft/textalignment}{Text Alignment}
- \o \l{declarative/screenorientation}{Screen Orientation}
+ \li \l{declarative/positioners}{Row and Column}
+ \li \l{declarative/righttoleft/layoutmirroring}{Layout Mirroring}
+ \li \l{declarative/righttoleft/layoutdirection}{Layout Direction}
+ \li \l{declarative/righttoleft/textalignment}{Text Alignment}
+ \li \l{declarative/screenorientation}{Screen Orientation}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -152,15 +152,15 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Data with Models and Views
\enddiv
\list
- \o \l{declarative/modelviews/gridview}{GridView}
- \o \l{declarative/modelviews/listview}{ListView}
- \o \l{declarative/modelviews/pathview}{PathView}
- \o \l{declarative/modelviews/package}{Package}
- \o \l{declarative/modelviews/visualitemmodel}{VisualItemModel}
- \o \l{declarative/modelviews/stringlistmodel}{String ListModel}
- \o \l{declarative/modelviews/objectlistmodel}{Object ListModel}
- \o \l{declarative/modelviews/abstractitemmodel}{AbstractItemModel}
- \o \l{declarative/modelviews/webview}{WebView}
+ \li \l{declarative/modelviews/gridview}{GridView}
+ \li \l{declarative/modelviews/listview}{ListView}
+ \li \l{declarative/modelviews/pathview}{PathView}
+ \li \l{declarative/modelviews/package}{Package}
+ \li \l{declarative/modelviews/visualitemmodel}{VisualItemModel}
+ \li \l{declarative/modelviews/stringlistmodel}{String ListModel}
+ \li \l{declarative/modelviews/objectlistmodel}{Object ListModel}
+ \li \l{declarative/modelviews/abstractitemmodel}{AbstractItemModel}
+ \li \l{declarative/modelviews/webview}{WebView}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -168,12 +168,12 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Advance UI Components
\enddiv
\list
- \o \l{declarative/modelviews/parallax}{Parallax}
- \o \l{declarative/toys/clocks}{Clocks}
- \o \l{declarative/toys/corkboards}{Corkboards}
- \o \l{declarative/toys/dynamicscene}{Dynamic Scene}
- \o \l{declarative/toys/tic-tac-toe}{Tic Tac Toe}
- \o \l{declarative/toys/tvtennis}{TV Tennis}
+ \li \l{declarative/modelviews/parallax}{Parallax}
+ \li \l{declarative/toys/clocks}{Clocks}
+ \li \l{declarative/toys/corkboards}{Corkboards}
+ \li \l{declarative/toys/dynamicscene}{Dynamic Scene}
+ \li \l{declarative/toys/tic-tac-toe}{Tic Tac Toe}
+ \li \l{declarative/toys/tvtennis}{TV Tennis}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -181,8 +181,8 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Image Elements
\enddiv
\list
- \o \l{declarative/imageelements/borderimage}{BorderImage}
- \o \l{declarative/imageelements/image}{Image}
+ \li \l{declarative/imageelements/borderimage}{BorderImage}
+ \li \l{declarative/imageelements/image}{Image}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -190,8 +190,8 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Loading Resources
\enddiv
\list
- \o \l{declarative/sqllocalstorage}{SQL Local Storage}
- \o \l{declarative/xml/xmlhttprequest}{XmlHttpRequest}
+ \li \l{declarative/sqllocalstorage}{SQL Local Storage}
+ \li \l{declarative/xml/xmlhttprequest}{XmlHttpRequest}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -199,7 +199,7 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Localization
\enddiv
\list
- \o \l{declarative/i18n}{Translation}
+ \li \l{declarative/i18n}{Translation}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -207,8 +207,8 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Threading
\enddiv
\list
- \o \l{declarative/threading/threadedlistmodel}{Threaded ListModel}
- \o \l{declarative/threading/workerscript}{WorkerScript Element}
+ \li \l{declarative/threading/threadedlistmodel}{Threaded ListModel}
+ \li \l{declarative/threading/workerscript}{WorkerScript Element}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -216,7 +216,7 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Graphical Effects
\enddiv
\list
- \o \l{declarative/shadereffects}{Shader Effects}
+ \li \l{declarative/shadereffects}{Shader Effects}
\endlist
\enddiv
\enddiv
@@ -231,16 +231,16 @@ This set of code samples are part of the collection of \l{Qt Examples}.
From Qt C++ to QML
\enddiv
\list
- \o \l {declarative/cppextensions/referenceexamples/adding}{Exporting C++ Classes}
- \o \l {declarative/cppextensions/referenceexamples/properties}{Exporting Qt C++ Properties}
- \o \l {declarative/cppextensions/referenceexamples/coercion}{C++ Inheritance and Coercion}
- \o \l {declarative/cppextensions/referenceexamples/default}{Default Property}
- \o \l {declarative/cppextensions/referenceexamples/grouped}{Grouped Properties}
- \o \l {declarative/cppextensions/referenceexamples/attached}{Attached Properties}
- \o \l {declarative/cppextensions/referenceexamples/signal}{Signal Support}
- \o \l {declarative/cppextensions/referenceexamples/methods}{Methods Support}
- \o \l {declarative/cppextensions/referenceexamples/valuesource}{Property Value Source}
- \o \l {declarative/cppextensions/referenceexamples/binding}{Binding}
+ \li \l {declarative/cppextensions/referenceexamples/adding}{Exporting C++ Classes}
+ \li \l {declarative/cppextensions/referenceexamples/properties}{Exporting Qt C++ Properties}
+ \li \l {declarative/cppextensions/referenceexamples/coercion}{C++ Inheritance and Coercion}
+ \li \l {declarative/cppextensions/referenceexamples/default}{Default Property}
+ \li \l {declarative/cppextensions/referenceexamples/grouped}{Grouped Properties}
+ \li \l {declarative/cppextensions/referenceexamples/attached}{Attached Properties}
+ \li \l {declarative/cppextensions/referenceexamples/signal}{Signal Support}
+ \li \l {declarative/cppextensions/referenceexamples/methods}{Methods Support}
+ \li \l {declarative/cppextensions/referenceexamples/valuesource}{Property Value Source}
+ \li \l {declarative/cppextensions/referenceexamples/binding}{Binding}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -248,10 +248,10 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Plugins and Resources
\enddiv
\list
- \o \l{declarative/cppextensions/plugins}{Plugins}
- \o \l{declarative/cppextensions/imageprovider}{Image Provider}
- \o \l{declarative/cppextensions/networkaccessmanagerfactory}{Network Access Manager}
- \o \l{src/imports/folderlistmodel}{Folder List Model} - a C++ model plugin
+ \li \l{declarative/cppextensions/plugins}{Plugins}
+ \li \l{declarative/cppextensions/imageprovider}{Image Provider}
+ \li \l{declarative/cppextensions/networkaccessmanagerfactory}{Network Access Manager}
+ \li \l{src/imports/folderlistmodel}{Folder List Model} - a C++ model plugin
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -259,8 +259,8 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Qt UI and QML Integration
\enddiv
\list
- \o \l{declarative-cppextensions-qgraphicslayouts.html}{QGraphicsLayouts}
- \o \l{declarative/cppextensions/qwidgets}{QWidgets}
+ \li \l{declarative-cppextensions-qgraphicslayouts.html}{QGraphicsLayouts}
+ \li \l{declarative/cppextensions/qwidgets}{QWidgets}
\endlist
\enddiv
\enddiv
@@ -276,11 +276,11 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Elements and Components
\enddiv
\list
- \o \l{QML Elements}
- \o \l{external: Qt Mobility QML Plugins}{QML Plugins}
- \o \l{external: Qt Quick Components for Symbian}{Symbian Components}
- \o MeeGo Components
- \o \l{QtWebKit QML Module}
+ \li \l{QML Elements}
+ \li \l{external: Qt Mobility QML Plugins}{QML Plugins}
+ \li \l{external: Qt Quick Components for Symbian}{Symbian Components}
+ \li MeeGo Components
+ \li \l{QtWebKit QML Module}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -288,9 +288,9 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Qt Developer Network
\enddiv
\list
- \o \l{Qt eLearning}{Training Materials}
- \o \l{Forums on Qt Developer Network}{Forums}
- \o \l{Wiki on Qt Developer Network}{Wiki}
+ \li \l{Qt eLearning}{Training Materials}
+ \li \l{Forums on Qt Developer Network}{Forums}
+ \li \l{Wiki on Qt Developer Network}{Wiki}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -298,9 +298,9 @@ This set of code samples are part of the collection of \l{Qt Examples}.
Reference
\enddiv
\list
- \o \l{All Classes}{Qt API}
- \o \l{external: Qt Creator Manual}{Qt Creator Manual}
- \o \l{Develop with Qt}
+ \li \l{All Classes}{Qt API}
+ \li \l{external: Qt Creator Manual}{Qt Creator Manual}
+ \li \l{Develop with Qt}
\endlist
\enddiv
\enddiv
diff --git a/doc/src/examples/tutorial.qdoc b/doc/src/examples/tutorial.qdoc
index 9042b5e3d8..d8d6e14f09 100644
--- a/doc/src/examples/tutorial.qdoc
+++ b/doc/src/examples/tutorial.qdoc
@@ -46,9 +46,9 @@ The tutorial's source code is located in the $QTDIR/examples/declarative/tutoria
Tutorial chapters:
\list 1
-\o \l {QML Tutorial 1 - Basic Types}{Basic Types}
-\o \l {QML Tutorial 2 - QML Components}{QML Components}
-\o \l {QML Tutorial 3 - States and Transitions}{States and Transitions}
+\li \l {QML Tutorial 1 - Basic Types}{Basic Types}
+\li \l {QML Tutorial 2 - QML Components}{QML Components}
+\li \l {QML Tutorial 3 - States and Transitions}{States and Transitions}
\endlist
*/
@@ -97,7 +97,7 @@ We add a \l Text element as a child of the root Rectangle element that displays
The \c y property is used to position the text vertically at 30 pixels from the top of its parent.
The \c anchors.horizontalCenter property refers to the horizontal center of an element.
-In this case, we specify that our text element should be horizontally centered in the \i page element (see \l{anchor-layout}{Anchor-Based Layout}).
+In this case, we specify that our text element should be horizontally centered in the \e page element (see \l{anchor-layout}{Anchor-Based Layout}).
The \c font.pointSize and \c font.bold properties are related to fonts and use the \l{dot properties}{dot notation}.
@@ -141,24 +141,24 @@ Here is the QML code for \c Cell.qml:
\snippet examples/declarative/tutorials/helloworld/Cell.qml 1
-The root element of our component is an \l Item with the \c id \i container.
+The root element of our component is an \l Item with the \c id \e container.
An \l Item is the most basic visual element in QML and is often used as a container for other elements.
\snippet examples/declarative/tutorials/helloworld/Cell.qml 4
-We declare a \c cellColor property. This property is accessible from \i outside our component, this allows us
+We declare a \c cellColor property. This property is accessible from \e outside our component, this allows us
to instantiate the cells with different colors.
This property is just an alias to an existing property - the color of the rectangle that compose the cell
(see \l{Property Binding in QML}).
\snippet examples/declarative/tutorials/helloworld/Cell.qml 5
-We want our component to also have a signal that we call \i clicked with a \i cellColor parameter of type \i color.
+We want our component to also have a signal that we call \e clicked with a \e cellColor parameter of type \e color.
We will use this signal to change the color of the text in the main QML file later.
\snippet examples/declarative/tutorials/helloworld/Cell.qml 2
-Our cell component is basically a colored rectangle with the \c id \i rectangle.
+Our cell component is basically a colored rectangle with the \c id \e rectangle.
The \c anchors.fill property is a convenient way to set the size of an element.
In this case the rectangle will have the same size as its parent (see \l{anchor-layout}{Anchor-Based Layout}).
@@ -168,8 +168,8 @@ In this case the rectangle will have the same size as its parent (see \l{anchor-
In order to change the color of the text when clicking on a cell, we create a \l MouseArea element with
the same size as its parent.
-A \l MouseArea defines a signal called \i clicked.
-When this signal is triggered we want to emit our own \i clicked signal with the color as parameter.
+A \l MouseArea defines a signal called \e clicked.
+When this signal is triggered we want to emit our own \e clicked signal with the color as parameter.
\section2 The main QML file
@@ -181,8 +181,8 @@ We create the color picker by putting 6 cells with different colors in a grid.
\snippet examples/declarative/tutorials/helloworld/tutorial2.qml 1
-When the \i clicked signal of our cell is triggered, we want to set the color of the text to the \i cellColor passed as a parameter.
-We can react to any signal of our component through a property of the name \i 'onSignalName' (see \l{Signal Handlers}).
+When the \e clicked signal of our cell is triggered, we want to set the color of the text to the \e cellColor passed as a parameter.
+We can react to any signal of our component through a property of the name \e 'onSignalName' (see \l{Signal Handlers}).
*/
/*!
@@ -206,10 +206,10 @@ Here is the QML code:
\snippet examples/declarative/tutorials/helloworld/tutorial3.qml 2
-First, we create a new \i down state for our text element.
+First, we create a new \e down state for our text element.
This state will be activated when the \l MouseArea is pressed, and deactivated when it is released.
-The \i down state includes a set of property changes from our implicit \i {default state}
+The \e down state includes a set of property changes from our implicit \e {default state}
(the items as they were initially defined in the QML).
Specifically, we set the \c y property of the text to \c 160, the rotation to \c 180 and the \c color to red.
@@ -219,9 +219,9 @@ Because we don't want the text to appear at the bottom instantly but rather move
we add a transition between our two states.
\c from and \c to define the states between which the transition will run.
-In this case, we want a transition from the default state to our \i down state.
+In this case, we want a transition from the default state to our \li down state.
-Because we want the same transition to be run in reverse when changing back from the \i down state to the default state,
+Because we want the same transition to be run in reverse when changing back from the \e down state to the default state,
we set \c reversible to \c true.
This is equivalent to writing the two transitions separately.
diff --git a/doc/src/localstorage/localstorage.qdoc b/doc/src/localstorage/localstorage.qdoc
index 5287120e86..596dbf700e 100644
--- a/doc/src/localstorage/localstorage.qdoc
+++ b/doc/src/localstorage/localstorage.qdoc
@@ -74,9 +74,9 @@ using the Local Storage API.
\section3 db = openDatabaseSync(identifier, version, description, estimated_size, callback(db))
-Returns the database identified by \i identifier. If the database does not already exist, it
-is created, and the function \i callback is called with the database as a parameter. \i description
-and \i estimated_size are written to the INI file (described below), but are otherwise currently
+Returns the database identified by \e identifier. If the database does not already exist, it
+is created, and the function \e callback is called with the database as a parameter. \e description
+and \e estimated_size are written to the INI file (described below), but are otherwise currently
unused.
May throw exception with code property SQLException.DATABASE_ERR, or SQLException.VERSION_ERR.
@@ -84,51 +84,51 @@ May throw exception with code property SQLException.DATABASE_ERR, or SQLExceptio
When a database is first created, an INI file is also created specifying its characteristics:
\table
-\header \o \bold {Key} \o \bold {Value}
-\row \o Name \o The name of the database passed to \c openDatabase()
-\row \o Version \o The version of the database passed to \c openDatabase()
-\row \o Description \o The description of the database passed to \c openDatabase()
-\row \o EstimatedSize \o The estimated size (in bytes) of the database passed to \c openDatabase()
-\row \o Driver \o Currently "QSQLITE"
+\header \li \b {Key} \li \b {Value}
+\row \li Name \li The name of the database passed to \c openDatabase()
+\row \li Version \li The version of the database passed to \c openDatabase()
+\row \li Description \li The description of the database passed to \c openDatabase()
+\row \li EstimatedSize \li The estimated size (in bytes) of the database passed to \c openDatabase()
+\row \li Driver \li Currently "QSQLITE"
\endtable
This data can be used by application tools.
\section3 db.changeVersion(from, to, callback(tx))
-This method allows you to perform a \i{Scheme Upgrade}.
+This method allows you to perform a \e{Scheme Upgrade}.
-If the current version of \i db is not \i from, then an exception is thrown.
+If the current version of \e db is not \e from, then an exception is thrown.
-Otherwise, a database transaction is created and passed to \i callback. In this function,
-you can call \i executeSql on \i tx to upgrade the database.
+Otherwise, a database transaction is created and passed to \e callback. In this function,
+you can call \e executeSql on \e tx to upgrade the database.
May throw exception with code property SQLException.DATABASE_ERR or SQLException.UNKNOWN_ERR.
\section3 db.transaction(callback(tx))
-This method creates a read/write transaction and passed to \i callback. In this function,
-you can call \i executeSql on \i tx to read and modify the database.
+This method creates a read/write transaction and passed to \e callback. In this function,
+you can call \e executeSql on \e tx to read and modify the database.
If the callback throws exceptions, the transaction is rolled back.
\section3 db.readTransaction(callback(tx))
-This method creates a read-only transaction and passed to \i callback. In this function,
-you can call \i executeSql on \i tx to read the database (with SELECT statements).
+This method creates a read-only transaction and passed to \e callback. In this function,
+you can call \e executeSql on \e tx to read the database (with SELECT statements).
\section3 results = tx.executeSql(statement, values)
-This method executes a SQL \i statement, binding the list of \i values to SQL positional parameters ("?").
+This method executes a SQL \e statement, binding the list of \e values to SQL positional parameters ("?").
It returns a results object, with the following properties:
\table
-\header \o \bold {Type} \o \bold {Property} \o \bold {Value} \o \bold {Applicability}
-\row \o int \o rows.length \o The number of rows in the result \o SELECT
-\row \o var \o rows.item(i) \o Function that returns row \i i of the result \o SELECT
-\row \o int \o rowsAffected \o The number of rows affected by a modification \o UPDATE, DELETE
-\row \o string \o insertId \o The id of the row inserted \o INSERT
+\header \li \b {Type} \li \b {Property} \li \b {Value} \li \b {Applicability}
+\row \li int \li rows.length \li The number of rows in the result \li SELECT
+\row \li var \li rows.item(i) \li Function that returns row \e i of the result \li SELECT
+\row \li int \li rowsAffected \li The number of rows affected by a modification \li UPDATE, DELETE
+\row \li string \li insertId \li The id of the row inserted \li INSERT
\endtable
May throw exception with code property SQLException.DATABASE_ERR, SQLException.SYNTAX_ERR, or SQLException.UNKNOWN_ERR.
diff --git a/doc/src/qml/basictypes.qdoc b/doc/src/qml/basictypes.qdoc
index 5b207cfa72..c9998fe6e2 100644
--- a/doc/src/qml/basictypes.qdoc
+++ b/doc/src/qml/basictypes.qdoc
@@ -88,7 +88,7 @@
Item { width: 100.45; height: 150.82 }
\endqml
- \bold{Note:} In QML all reals are stored in double precision, \l
+ \b{Note:} In QML all reals are stored in double precision, \l
{http://en.wikipedia.org/wiki/IEEE_754} {IEEE floating point}
format.
@@ -331,12 +331,12 @@
A font type has the properties of a QFont. The properties are:
\list
- \o \c string font.family
- \o \c bool font.bold
- \o \c bool font.italic
- \o \c bool font.underline
- \o \c real font.pointSize
- \o \c int font.pixelSize
+ \li \c string font.family
+ \li \c bool font.bold
+ \li \c bool font.italic
+ \li \c bool font.underline
+ \li \c real font.pointSize
+ \li \c int font.pixelSize
\endlist
Example:
@@ -357,9 +357,9 @@
are:
\list
- \o \c slot action.trigger - invoke the action
- \o \c bool action.enabled - true if the action is enabled
- \o \c string action.text - the text associated with the action
+ \li \c slot action.trigger - invoke the action
+ \li \c bool action.enabled - true if the action is enabled
+ \li \c string action.text - the text associated with the action
\endlist
Actions are used like this:
@@ -458,7 +458,7 @@
\endqml
It is important to note that changes in regular properties of JavaScript
- objects assigned to a var property will \bold{not} trigger updates of bindings
+ objects assigned to a var property will \b{not} trigger updates of bindings
that access them. The example below will display "The car has 4 wheels" as
the change to the wheels property will not cause the reevaluation of the
binding assigned to the "text" property:
@@ -537,8 +537,8 @@
Finally, the \c variant type can also hold:
\list
- \o An array of \l {QML Basic Types}{basic type} values
- \o A map of key-value pairs with \l {QML Basic Types}{basic-type} values
+ \li An array of \l {QML Basic Types}{basic type} values
+ \li A map of key-value pairs with \l {QML Basic Types}{basic-type} values
\endlist
For example, below is an \c items array and an \c attributes map. Their
@@ -562,12 +562,12 @@
\endqml
While this is a convenient way to store array and map-type values, you
- must be aware that the \c items and \c attributes properties above are \i not
+ must be aware that the \c items and \c attributes properties above are \e not
QML objects (and certainly not JavaScript object either) and the key-value
- pairs in \c attributes are \i not QML properties. Rather, the \c items
+ pairs in \c attributes are \e not QML properties. Rather, the \c items
property holds an array of values, and \c attributes holds a set of key-value
pairs. Since they are stored as a set of values, instead of as an object,
- their contents \i cannot be modified individually:
+ their contents \e cannot be modified individually:
\qml
Item {
@@ -593,7 +593,7 @@
One way to "update" the contents of an array or map is to copy the property
to a JavaScript object, modify the copy as desired, and then reassign the
property to the updated copy. Note, however, that this is not efficient.
- In the example below, which reassigns the \c attributes property, the \i entire
+ In the example below, which reassigns the \c attributes property, the \e entire
set of key-value pairs must be serialized and deserialized every time it is
copied between a JavaScript object and a QML property:
@@ -616,7 +616,7 @@
within a JavaScript file.
JavaScript programmers should also note that when a JavaScript object is
- copied to an array or map property, the \i contents of the object (that is,
+ copied to an array or map property, the \e contents of the object (that is,
its key-value properties) are copied, rather than the object itself. The
property does not hold a reference to the original JavaScript object, and
extra data such as the object's JavaScript prototype chain is also lost in
diff --git a/doc/src/qml/c++models.qdoc b/doc/src/qml/c++models.qdoc
index 943c79c184..e2f2f32b5c 100644
--- a/doc/src/qml/c++models.qdoc
+++ b/doc/src/qml/c++models.qdoc
@@ -41,7 +41,7 @@ models.
\section1 QStringList-based Model
A model may be a simple \l QStringList, which provides the contents of the list
- via the \i modelData role.
+ via the \e modelData role.
Here is a ListView with a delegate that references its model item's
value using the \c modelData role:
@@ -55,7 +55,7 @@ models.
The complete example is available in Qt's \l {declarative/modelviews/stringlistmodel}{examples/declarative/modelviews/stringlistmodel} directory.
- \bold{Note:} There is no way for the view to know that the contents of a QStringList
+ \b{Note:} There is no way for the view to know that the contents of a QStringList
have changed. If the QStringList changes, it will be necessary to reset
the model by calling QQmlContext::setContextProperty() again.
@@ -107,18 +107,18 @@ models.
\table
\header
- \o Qt Role
- \o QML Role Name
+ \li Qt Role
+ \li QML Role Name
\row
- \o Qt::DisplayRole
- \o display
+ \li Qt::DisplayRole
+ \li display
\row
- \o Qt::DecorationRole
- \o decoration
+ \li Qt::DecorationRole
+ \li decoration
\endtable
Here is an application with a QAbstractListModel subclass named \c AnimalModel
- that has \i type and \i size roles. It calls QAbstractItemModel::setRoleNames() to set the
+ that has \e type and \e size roles. It calls QAbstractItemModel::setRoleNames() to set the
role names for accessing the properties via QML:
\snippet examples/declarative/modelviews/abstractitemmodel/model.h 0
@@ -132,7 +132,7 @@ models.
\snippet examples/declarative/modelviews/abstractitemmodel/main.cpp 0
\dots
- This model is displayed by a ListView delegate that accesses the \i type and \i size
+ This model is displayed by a ListView delegate that accesses the \e type and \e size
roles:
\snippet examples/declarative/modelviews/abstractitemmodel/view.qml 0
@@ -152,10 +152,10 @@ models.
with models of type QAbstractItemModel:
\list
- \o \i hasModelChildren role property to determine whether a node has child nodes.
- \o \l VisualDataModel::rootIndex allows the root node to be specified
- \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
+ \li \e hasModelChildren role property to determine whether a node has child nodes.
+ \li \l VisualDataModel::rootIndex allows the root node to be specified
+ \li \l VisualDataModel::modelIndex() returns a QModelIndex which can be assigned to VisualDataModel::rootIndex
+ \li \l VisualDataModel::parentModelIndex() returns a QModelIndex which can be assigned to VisualDataModel::rootIndex
\endlist
\section1 Exposing C++ Data Models to QML
@@ -169,7 +169,7 @@ created directly as elements within QML:
\table
\row
-\o
+\li
\code
class MyModelPlugin : public QQmlExtensionPlugin
{
@@ -184,7 +184,7 @@ public:
Q_EXPORT_PLUGIN2(mymodelplugin, MyModelPlugin);
\endcode
-\o
+\li
\qml
MyModel {
id: myModel
diff --git a/doc/src/qml/codingconventions.qdoc b/doc/src/qml/codingconventions.qdoc
index 9e1ce34c2c..92d8ee112a 100644
--- a/doc/src/qml/codingconventions.qdoc
+++ b/doc/src/qml/codingconventions.qdoc
@@ -37,20 +37,20 @@ This document contains the QML coding conventions that we follow in our document
Through our documentation and examples, QML objects are always structured in the following order:
\list
-\o id
-\o property declarations
-\o signal declarations
-\o JavaScript functions
-\o object properties
-\o child objects
-\o states
-\o transitions
+\li id
+\li property declarations
+\li signal declarations
+\li JavaScript functions
+\li object properties
+\li child objects
+\li states
+\li transitions
\endlist
For better readability, we separate these different parts with an empty line.
-For example, a hypothetical \i photo QML object would look like this:
+For example, a hypothetical \e photo QML object would look like this:
\snippet doc/src/snippets/qml/codingconventions/photo.qml 0
@@ -58,7 +58,7 @@ For example, a hypothetical \i photo QML object would look like this:
\section1 Grouped Properties
If using multiple properties from a group of properties,
-we use the \i {group notation} rather than the \i {dot notation} to improve readability.
+we use the \e {group notation} rather than the \e {dot notation} to improve readability.
For example, this:
@@ -74,7 +74,7 @@ can be written like this:
QML and JavaScript do not enforce private properties like C++. There is a need
to hide these private properties, for example, when the properties are part of
the implementation. As a convention, private properties begin with two
-\i underscore characters. For example, \c __area, is a property that is
+\e underscore characters. For example, \c __area, is a property that is
accessible but is not meant for public use. Note that QML and JavaScript will
grant the user access to these properties.
diff --git a/doc/src/qml/dynamicobjects.qdoc b/doc/src/qml/dynamicobjects.qdoc
index c50f9dd337..2886d5b28a 100644
--- a/doc/src/qml/dynamicobjects.qdoc
+++ b/doc/src/qml/dynamicobjects.qdoc
@@ -68,10 +68,10 @@ a \l Component object from this URL.
Once you have a \l Component, you can call its \l {Component::createObject()}{createObject()} method to create an instance of
the component. This function can take one or two arguments:
\list
-\o The first is the parent for the new item. Since graphical items will not appear on the scene without a parent, it is
+\li The first is the parent for the new item. Since graphical items will not appear on the scene without a parent, it is
recommended that you set the parent this way. However, if you wish to set the parent later you can safely pass \c null to
this function.
-\o The second is optional and is a map of property-value items that define initial any property values for the item.
+\li The second is optional and is a map of property-value items that define initial any property values for the item.
Property values specified by this argument are applied to the object before its creation is finalized, avoiding
binding errors that may occur if particular properties must be initialized to enable other property bindings.
when certain properties have been bound to before they have been set by the code. Additionally, there are small
@@ -144,11 +144,11 @@ the bindings in the dynamic item will no longer work.
The actual creation context depends on how an item is created:
\list
-\o If \l {QML:Qt::createComponent()}{Qt.createComponent()} is used, the creation context
+\li If \l {QML:Qt::createComponent()}{Qt.createComponent()} is used, the creation context
is the QQmlContext in which this method is called
-\o If \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()}
+\li If \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()}
if called, the creation context is the context of the parent item passed to this method
-\o If a \c {Component{}} item is defined and \l {Component::createObject()}{createObject()}
+\li If a \c {Component{}} item is defined and \l {Component::createObject()}{createObject()}
is called on that item, the creation context is the context in which the \c Component is defined
\endlist
@@ -177,12 +177,12 @@ component. Each instance runs a NumberAnimation, and when the animation has fini
\table
\row
-\o \c application.qml
-\o \c SelfDestroyingRect.qml
+\li \c application.qml
+\li \c SelfDestroyingRect.qml
\row
-\o \snippet doc/src/snippets/qml/dynamicObjects-destroy.qml 0
-\o \snippet doc/src/snippets/qml/SelfDestroyingRect.qml 0
+\li \snippet doc/src/snippets/qml/dynamicObjects-destroy.qml 0
+\li \snippet doc/src/snippets/qml/SelfDestroyingRect.qml 0
\endtable
diff --git a/doc/src/qml/extending-tutorial.qdoc b/doc/src/qml/extending-tutorial.qdoc
index b995c32cca..a17cd24cac 100644
--- a/doc/src/qml/extending-tutorial.qdoc
+++ b/doc/src/qml/extending-tutorial.qdoc
@@ -44,13 +44,13 @@ examples/declarative/tutorials/extending directory.
Tutorial chapters:
\list 1
-\o \l{declarative/tutorials/extending/chapter1-basics}{Creating a New Type}
-\o \l{declarative/tutorials/extending/chapter2-methods}{Connecting to C++ Methods and Signals}
-\o \l{declarative/tutorials/extending/chapter3-bindings}{Property Binding}
-\o \l{declarative/tutorials/extending/chapter4-customPropertyTypes}{Using Custom Property Types}
-\o \l{declarative/tutorials/extending/chapter5-listproperties}{Using List Property Types}
-\o \l{declarative/tutorials/extending/chapter6-plugins}{Writing an Extension Plugin}
-\o \l{qml-extending-tutorial7.html}{In Summary}
+\li \l{declarative/tutorials/extending/chapter1-basics}{Creating a New Type}
+\li \l{declarative/tutorials/extending/chapter2-methods}{Connecting to C++ Methods and Signals}
+\li \l{declarative/tutorials/extending/chapter3-bindings}{Property Binding}
+\li \l{declarative/tutorials/extending/chapter4-customPropertyTypes}{Using Custom Property Types}
+\li \l{declarative/tutorials/extending/chapter5-listproperties}{Using List Property Types}
+\li \l{declarative/tutorials/extending/chapter6-plugins}{Writing an Extension Plugin}
+\li \l{qml-extending-tutorial7.html}{In Summary}
\endlist
*/
@@ -92,8 +92,8 @@ properties. Since QML makes extensive use of Qt's \l{Meta-Object System}{meta ob
this new class must:
\list
-\o Inherit from QObject
-\o Declare its properties using the Q_PROPERTY macro
+\li Inherit from QObject
+\li Declare its properties using the Q_PROPERTY macro
\endlist
Here is our \c PieChart class, defined in \c piechart.h:
@@ -290,11 +290,11 @@ We can also use various other property types. QML has built-in support for the t
listed in the \l{QML Basic Types} documentation, which includes the following:
\list
-\o bool, unsigned int, int, float, double, qreal
-\o QString, QUrl, QColor
-\o QDate, QTime, QDateTime
-\o QPoint, QPointF, QSize, QSizeF, QRect, QRectF
-\o QVariant
+\li bool, unsigned int, int, float, double, qreal
+\li QString, QUrl, QColor
+\li QDate, QTime, QDateTime
+\li QPoint, QPointF, QSize, QSizeF, QRect, QRectF
+\li QVariant
\endlist
If we want to create a property whose type is not supported by QML by default,
@@ -409,9 +409,9 @@ loading our own C++ application.
To create a plugin library, we need:
\list
-\o A plugin class that registers our QML types
-\o A project file that describes the plugin
-\o A \l{Writing a qmldir file}{qmldir} file that tells the QML engine to load the plugin
+\li A plugin class that registers our QML types
+\li A project file that describes the plugin
+\li A \l{Writing a qmldir file}{qmldir} file that tells the QML engine to load the plugin
\endlist
First, we create a plugin class named \c ChartsPlugin. It subclasses QQmlExtensionPlugin
@@ -460,12 +460,12 @@ be used by \c app.qml without import statements.
In this tutorial, we've shown the basic steps for creating a QML extension:
\list
-\o Define new QML types by subclassing QObject and registering them with qmlRegisterType()
-\o Add callable methods using Q_INVOKABLE or Qt slots, and connect to Qt signals with an \c onSignal syntax
-\o Add property bindings by defining \l{Qt's Property System}{NOTIFY} signals
-\o Define custom property types if the built-in types are not sufficient
-\o Define list property types using QQmlListProperty
-\o Create a plugin library by defining a Qt plugin and writing a \c qmldir file
+\li Define new QML types by subclassing QObject and registering them with qmlRegisterType()
+\li Add callable methods using Q_INVOKABLE or Qt slots, and connect to Qt signals with an \c onSignal syntax
+\li Add property bindings by defining \l{Qt's Property System}{NOTIFY} signals
+\li Define custom property types if the built-in types are not sufficient
+\li Define list property types using QQmlListProperty
+\li Create a plugin library by defining a Qt plugin and writing a \c qmldir file
\endlist
diff --git a/doc/src/qml/integrating.qdoc b/doc/src/qml/integrating.qdoc
index 2a88246006..83dcaeae74 100644
--- a/doc/src/qml/integrating.qdoc
+++ b/doc/src/qml/integrating.qdoc
@@ -90,9 +90,9 @@ The following QGraphicsView options are recommended for optimal performance
of QML UIs:
\list
-\o QGraphicsView::setOptimizationFlags(QGraphicsView::DontSavePainterState)
-\o QGraphicsView::setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate)
-\o QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex)
+\li QGraphicsView::setOptimizationFlags(QGraphicsView::DontSavePainterState)
+\li QGraphicsView::setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate)
+\li QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex)
\endlist
\section2 Loading QGraphicsWidget Objects in QML
diff --git a/doc/src/qml/javascriptblocks.qdoc b/doc/src/qml/javascriptblocks.qdoc
index 5a30324d1a..a898f20049 100644
--- a/doc/src/qml/javascriptblocks.qdoc
+++ b/doc/src/qml/javascriptblocks.qdoc
@@ -200,8 +200,8 @@ in \c script.js:
\table
\row
-\o \snippet doc/src/snippets/qml/integrating-javascript/connectjs.qml 0
-\o \snippet doc/src/snippets/qml/integrating-javascript/script.js 0
+\li \snippet doc/src/snippets/qml/integrating-javascript/connectjs.qml 0
+\li \snippet doc/src/snippets/qml/integrating-javascript/script.js 0
\endtable
The \c jsFunction() will now be called whenever MouseArea's \c clicked signal is emitted.
@@ -243,10 +243,10 @@ which in turn can call \c factorial() in \c factorial.js, as it has included
\table
\row
-\o {1,2} \snippet doc/src/snippets/qml/integrating-javascript/includejs/app.qml 0
-\o \snippet doc/src/snippets/qml/integrating-javascript/includejs/script.js 0
+\li {1,2} \snippet doc/src/snippets/qml/integrating-javascript/includejs/app.qml 0
+\li \snippet doc/src/snippets/qml/integrating-javascript/includejs/script.js 0
\row
-\o \snippet doc/src/snippets/qml/integrating-javascript/includejs/factorial.js 0
+\li \snippet doc/src/snippets/qml/integrating-javascript/includejs/factorial.js 0
\endtable
Notice that calling \l {QML:Qt::include()}{Qt.include()} imports all functions from
@@ -280,9 +280,9 @@ via a module API; see qmlRegisterModuleApi() for more information.
Due to the ability of a JavaScript file to import another script or QML module in
this fashion in QtQuick 2.0, some extra semantics are defined:
\list
-\o a script with imports will not inherit imports from the QML file which imported it (so accessing Component.error will fail, for example)
-\o a script without imports will inherit imports from the QML file which imported it (so accessing Component.error will succeed, for example)
-\o a shared script (i.e., defined as .pragma library) does not inherit imports from any QML file even if it imports no other scripts
+\li a script with imports will not inherit imports from the QML file which imported it (so accessing Component.error will fail, for example)
+\li a script without imports will inherit imports from the QML file which imported it (so accessing Component.error will succeed, for example)
+\li a shared script (i.e., defined as .pragma library) does not inherit imports from any QML file even if it imports no other scripts
\endlist
The first semantic is conceptually correct, given that a particular script
@@ -339,12 +339,12 @@ parameters.
It is occasionally necessary to run some imperative code at application (or
component instance) startup. While it is tempting to just include the startup
-script as \i {global code} in an external script file, this can have severe limitations
+script as \e {global code} in an external script file, this can have severe limitations
as the QML environment may not have been fully established. For example, some objects
might not have been created or some \l {Property Binding}s may not have been run.
\l {QML JavaScript Restrictions} covers the exact limitations of global script code.
-The QML \l Component element provides an \i attached \c onCompleted property that
+The QML \l Component element provides an \e attached \c onCompleted property that
can be used to trigger the execution of script code at startup after the
QML environment has been completely established. For example:
@@ -380,7 +380,7 @@ See \l {qml-javascript-assignment}{Property Assignment versus Property Binding}
QML executes standard JavaScript code, with the following restrictions:
\list
-\o JavaScript code cannot modify the global object.
+\li JavaScript code cannot modify the global object.
In QML, the global object is constant - existing properties cannot be modified or
deleted, and no new properties may be created.
@@ -413,7 +413,7 @@ Any attempt to modify the global object - either implicitly or explicitly - will
cause an exception. If uncaught, this will result in an warning being printed,
that includes the file and line number of the offending code.
-\o Global code is run in a reduced scope
+\li Global code is run in a reduced scope
During startup, if a QML file includes an external JavaScript file with "global"
code, it is executed in a scope that contains only the external file itself and
@@ -438,7 +438,7 @@ This restriction exists as the QML environment is not yet fully established.
To run code after the environment setup has completed, refer to
\l {Running JavaScript at Startup}.
-\o The value of \c this is currently undefined in QML in the majority of contexts
+\li The value of \c this is currently undefined in QML in the majority of contexts
The \c this keyword is supported when binding properties from JavaScript.
In all other situations, the value of
@@ -475,9 +475,9 @@ property may hold a "scarce resource" (image or pixmap). There are several
important semantics of scarce resources which should be noted:
\list
-\o By default, a scarce resource is automatically released by the declarative engine as soon as evaluation of the expression in which the scarce resource is allocated is complete if there are no other references to the resource
-\o A client may explicitly preserve a scarce resource, which will ensure that the resource will not be released until all references to the resource are released and the JavaScript engine runs its garbage collector
-\o A client may explicitly destroy a scarce resource, which will immediately release the resource
+\li By default, a scarce resource is automatically released by the declarative engine as soon as evaluation of the expression in which the scarce resource is allocated is complete if there are no other references to the resource
+\li A client may explicitly preserve a scarce resource, which will ensure that the resource will not be released until all references to the resource are released and the JavaScript engine runs its garbage collector
+\li A client may explicitly destroy a scarce resource, which will immediately release the resource
\endlist
In most cases, allowing the engine to automatically release the resource is
diff --git a/doc/src/qml/modules.qdoc b/doc/src/qml/modules.qdoc
index 27f8ae8fb1..c346f731b1 100644
--- a/doc/src/qml/modules.qdoc
+++ b/doc/src/qml/modules.qdoc
@@ -43,10 +43,10 @@ explicitly using the \c import statement to import them as modules. For
example, an \c import statement is required to use:
\list
-\o A component defined in another QML file that is not in the same directory
-\o A component defined in a QML file located on a remote server
-\o A \l{QQmlExtensionPlugin}{QML extension plugin} library (unless the plugin is installed in the same directory)
-\o A JavaScript file (note this must be imported using \l {#namespaces}{named imports})
+\li A component defined in another QML file that is not in the same directory
+\li A component defined in a QML file located on a remote server
+\li A \l{QQmlExtensionPlugin}{QML extension plugin} library (unless the plugin is installed in the same directory)
+\li A JavaScript file (note this must be imported using \l {#namespaces}{named imports})
\endlist
An \c import statement includes the module name, and possibly a version number.
@@ -58,7 +58,7 @@ This imports version 1.0 of the "QtQuick" module into the global namespace. (The
library itself must be imported to use any of the \l {QML Elements}, as they
are not included in the global namespace by default.)
-The \c Qt module is an \i installed module; it is found in the
+The \c Qt module is an \e installed module; it is found in the
\l{#import-path}{import path}. There are two types of QML modules:
located modules (defined by a URL) and installed modules (defined by a URI).
@@ -77,11 +77,11 @@ directory using a relative or absolute path, like this:
\table
\row
-\o Directory structure
-\o Contents of application.qml
+\li Directory structure
+\li Contents of application.qml
\row
-\o
+\li
\code
MyQMLProject
|- MyComponents
@@ -92,7 +92,7 @@ MyQMLProject
|- application.qml
\endcode
-\o
+\li
\qml
import "../MyComponents"
@@ -182,9 +182,9 @@ locations to be searched by the QML engine for a matching module. By default, th
contains:
\list
-\o The directory of the current file
-\o The location specified by QLibraryInfo::ImportsPath
-\o Paths specified by the \c QML_IMPORT_PATH environment variable
+\li The directory of the current file
+\li The location specified by QLibraryInfo::ImportsPath
+\li Paths specified by the \c QML_IMPORT_PATH environment variable
\endlist
Additional import paths can be added through QQmlEngine::addImportPath() or the
@@ -269,7 +269,7 @@ a module that is imported as a network resource.
By default, when a module is imported, its contents are imported into the global namespace. You may choose to import the module into another namespace, either to allow identically-named types to be referenced, or purely for readability.
-To import a module into a specific namespace, use the \i as keyword:
+To import a module into a specific namespace, use the \e as keyword:
\snippet doc/src/snippets/qml/imports/named-imports.qml imports
@@ -347,9 +347,9 @@ plugin <Name> [<Path>]
typeinfo <File>
\endcode
-\bold {# <Comment>} lines are used for comments. They are ignored by the QML engine.
+\b {# <Comment>} lines are used for comments. They are ignored by the QML engine.
-\bold {<TypeName> [<InitialVersion>] <File>} lines are used to add QML files as types.
+\b {<TypeName> [<InitialVersion>] <File>} lines are used to add QML files as types.
<TypeName> is the type being made available, the optional <InitialVersion> is a version
number, and <File> is the (relative) file name of the QML file defining the type.
@@ -357,11 +357,11 @@ Installed files do not need to import the module of which they are a part, as th
to the other QML files in the module as relative (local) files, but
if the module is imported from a remote location, those files must nevertheless be listed in
the \c qmldir file. Types which you do not wish to export to users of your module
-may be marked with the \c internal keyword: \bold {internal <TypeName> <File>}.
+may be marked with the \c internal keyword: \b {internal <TypeName> <File>}.
The same type can be provided by different files in different versions, in which
case later versions (e.g. 1.2) must precede earlier versions (e.g. 1.0),
-since the \i first name-version match is used and a request for a version of a type
+since the \e first name-version match is used and a request for a version of a type
can be fulfilled by one defined in an earlier version of the module. If a user attempts
to import a version earlier than the earliest provided or later than the latest provided,
the import produces a runtime error, but if the user imports a version within the range of versions provided,
@@ -372,16 +372,16 @@ If multiple are provided, only the first in the search path will be used (regard
are provided by directories later in the search path).
The versioning system ensures that a given QML file will work regardless of the version
-of installed software, since a versioned import \i only imports types for that version,
+of installed software, since a versioned import \e only imports types for that version,
leaving other identifiers available, even if the actual installed version might otherwise
provide those identifiers.
-\bold {<Namespace> <InitialVersion> <File>} lines are used to import javascript files
+\b {<Namespace> <InitialVersion> <File>} lines are used to import javascript files
into a Namespace exported by the module. The contents of the script file are made
available inside the namespace <Namespace>, which has the version number
<InitialVersion>.
-\bold {plugin <Name> [<Path>]} lines are used to add \l{QQmlExtensionPlugin}{QML C++ plugins} to the module. <Name> is the name of the library. It is usually not the same as the file name
+\b{plugin <Name> [<Path>]} lines are used to add \l{QQmlExtensionPlugin}{QML C++ plugins} to the module. <Name> is the name of the library. It is usually not the same as the file name
of the plugin binary, which is platform dependent; e.g. the library \c MyAppTypes would produce
\c libMyAppTypes.so on Linux and \c MyAppTypes.dll on Windows.
@@ -390,7 +390,7 @@ plugin file, or a relative path from the directory containing the \c qmldir file
containing the plugin file. By default the engine searches for the plugin library in the directory that contains the \c qmldir
file. The plugin search path can be queried with QQmlEngine::pluginPathList() and modified using QQmlEngine::addPluginPath(). When running the \l {QML Viewer}, use the \c -P option to add paths to the plugin search path.
-\bold {typeinfo <File>} lines add \l{Writing a qmltypes file}{type description files} to
+\b {typeinfo <File>} lines add \l{Writing a qmltypes file}{type description files} to
the module that can be read by QML tools such as Qt Creator to get information about the
types defined by the module's plugins. <File> is the (relative) file name of a .qmltypes
file.
@@ -434,9 +434,9 @@ to \c /tmp/imports/My/Module/qmldir to register it.
While the qmldump tool covers most cases, it does not work if:
\list
-\o The plugin uses a \l{QQmlCustomParser}. The component that uses
+\li The plugin uses a \l{QQmlCustomParser}. The component that uses
the custom parser will not get its members documented.
-\o The plugin can not be loaded. In particular if you cross-compiled
+\li The plugin can not be loaded. In particular if you cross-compiled
the plugin for a different architecture, qmldump will not be able to
load it.
\endlist
diff --git a/doc/src/qml/network.qdoc b/doc/src/qml/network.qdoc
index 71f42a4bfe..049bdddf5a 100644
--- a/doc/src/qml/network.qdoc
+++ b/doc/src/qml/network.qdoc
@@ -41,7 +41,7 @@ Image {
}
\endqml
-Since a \i relative URL is the same
+Since a \e relative URL is the same
as a relative file, development of QML on regular file systems remains simple:
\qml
@@ -53,8 +53,8 @@ Image {
Network transparency is supported throughout QML, for example:
\list
-\o Fonts - the \c source property of FontLoader is a URL
-\o WebViews - the \c url property of WebView (obviously!)
+\li Fonts - the \c source property of FontLoader is a URL
+\li WebViews - the \c url property of WebView (obviously!)
\endlist
Even QML types themselves can be on the network - if the \l {QML Viewer} is used to load
@@ -148,10 +148,10 @@ The \c import statement is only network transparent if it has an "as" clause.
More specifically:
\list
-\o \c{import "dir"} only works on local file systems
-\o \c{import libraryUri} only works on local file systems
-\o \c{import "dir" as D} works network transparently
-\o \c{import libraryUrl as U} works network transparently
+\li \c{import "dir"} only works on local file systems
+\li \c{import libraryUri} only works on local file systems
+\li \c{import "dir" as D} works network transparently
+\li \c{import libraryUrl as U} works network transparently
\endlist
\section1 XMLHttpRequest
@@ -164,8 +164,8 @@ 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 policy.
-\i QML's XMLHttpRequest does not support \i synchronous requests.
+\li QML's XMLHttpRequest does not enforce the same origin policy.
+\li 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
@@ -174,58 +174,58 @@ browser. The following objects and properties are supported by the QML implemen
\table
\header
-\o \bold {Node}
-\o \bold {Document}
-\o \bold {Element}
-\o \bold {Attr}
-\o \bold {CharacterData}
-\o \bold {Text}
+\li \b {Node}
+\li \b {Document}
+\li \b {Element}
+\li \b {Attr}
+\li \b {CharacterData}
+\li \b {Text}
\row
-\o
+\li
\list
-\o nodeName
-\o nodeValue
-\o nodeType
-\o parentNode
-\o childNodes
-\o firstChild
-\o lastChild
-\o previousSibling
-\o nextSibling
-\o attributes
+\li nodeName
+\li nodeValue
+\li nodeType
+\li parentNode
+\li childNodes
+\li firstChild
+\li lastChild
+\li previousSibling
+\li nextSibling
+\li attributes
\endlist
-\o
+\li
\list
-\o xmlVersion
-\o xmlEncoding
-\o xmlStandalone
-\o documentElement
+\li xmlVersion
+\li xmlEncoding
+\li xmlStandalone
+\li documentElement
\endlist
-\o
+\li
\list
-\o tagName
+\li tagName
\endlist
-\o
+\li
\list
-\o name
-\o value
-\o ownerElement
+\li name
+\li value
+\li ownerElement
\endlist
-\o
+\li
\list
-\o data
-\o length
+\li data
+\li length
\endlist
-\o
+\li
\list
-\o isElementContentWhitespace
-\o wholeText
+\li isElementContentWhitespace
+\li wholeText
\endlist
\endtable
diff --git a/doc/src/qml/performance.qdoc b/doc/src/qml/performance.qdoc
index 1d6b041803..c5db0e0b2d 100644
--- a/doc/src/qml/performance.qdoc
+++ b/doc/src/qml/performance.qdoc
@@ -443,8 +443,8 @@ with much worse performance. As such, always try to ensure you meet the followi
criteria:
\list
-\o Avoid using eval() if at all possible
-\o Do not delete properties of objects
+\li Avoid using eval() if at all possible
+\li Do not delete properties of objects
\endlist
\section1 Common Interface Elements
@@ -545,10 +545,10 @@ QML. While the optimal implementation of any such model will depend heavily on
use-case it must fulfil, some general guidelines are as follows:
\list
-\o Be as asynchronous as possible
-\o Do all processing in a (low priority) worker thread
-\o Batch up backend operations so that (potentially slow) I/O and IPC is minimised
-\o Use a sliding slice window to cache results, whose parameters are determined with the help of profiling
+\li Be as asynchronous as possible
+\li Do all processing in a (low priority) worker thread
+\li Batch up backend operations so that (potentially slow) I/O and IPC is minimised
+\li Use a sliding slice window to cache results, whose parameters are determined with the help of profiling
\endlist
It is important to note that using a low-priority worker thread is recommended to
@@ -592,15 +592,15 @@ needed (see the upcoming section on lazy initialisation).
The following list is a good summary of things to keep in mind when designing a delegate:
\list
-\o The fewer elements that are in a delegate, the faster they can be created, and thus
+\li The fewer elements that are in a delegate, the faster they can be created, and thus
the faster the view can be scrolled.
-\o Keep the number of bindings in a delegate to a minimum; in particular, use anchors
+\li Keep the number of bindings in a delegate to a minimum; in particular, use anchors
rather than bindings for relative positioning within a delegate.
-\o Set a cacheBuffer to allow asynchronous creation of delegates outside the visible area.
+\li Set a cacheBuffer to allow asynchronous creation of delegates outside the visible area.
Be mindful that this creates additional delegates and therefore the size of the
cacheBuffer must be balanced against additional memory usage.
-\o Avoid using ShaderEffect elements within delegates.
-\o Never enable clipping on a delegate.
+\li Avoid using ShaderEffect elements within delegates.
+\li Never enable clipping on a delegate.
\endlist
\section1 Visual Effects
@@ -669,10 +669,10 @@ it is necessary. This may be achieved by using either \l Loader or creating com
The Loader is an element which allows dynamic loading and unloading of components.
\list
-\o Using the "active" property of a Loader, initialisation can be delayed until required.
-\o Using the overloaded version of the "setSource()" function, initial property values can
+\li Using the "active" property of a Loader, initialisation can be delayed until required.
+\li Using the overloaded version of the "setSource()" function, initial property values can
be supplied.
-\o Setting the Loader \l {Loader::asynchronous}{asynchronous} property to true may also
+\li Setting the Loader \l {Loader::asynchronous}{asynchronous} property to true may also
improve fluidity while a component is instantiated.
\endlist
diff --git a/doc/src/qml/propertybinding.qdoc b/doc/src/qml/propertybinding.qdoc
index ce5ad0be4a..6922f54003 100644
--- a/doc/src/qml/propertybinding.qdoc
+++ b/doc/src/qml/propertybinding.qdoc
@@ -33,7 +33,7 @@
\section1 Properties
-QML components have \i properties that can be read and modified by other objects.
+QML components have \e properties that can be read and modified by other objects.
In QML, properties serve many purposes but their main function is to hold to
values. Values may be a \l{QML Basic Types}{basic type}, or other QML elements.
@@ -156,7 +156,7 @@ JavaScript code.
\section1 Types of Properties
-Properties may bind to different types, but they are are \i type-safe. That is,
+Properties may bind to different types, but they are are \e type-safe. That is,
properties only allow you to assign a value that matches the property type. For
example, if a property is a real, and if you try to assign a string to it you
will get an error.
@@ -200,21 +200,21 @@ For more information about the \c children property, please read the
\keyword attached-properties
\section2 Attached Properties
-Certain objects provide additional properties by \i attaching properties to other
-objects. For example, the \l Keys element have properties that can \i attach to other QML
+Certain objects provide additional properties by \e attaching properties to other
+objects. For example, the \l Keys element have properties that can \e attach to other QML
objects to provide keyboard handling.
\snippet doc/src/snippets/qml/properties.qml list attached property
The element \l ListView provides the delegate, \c listdelegate, the property
\c isCurrentItem as an attached property. The \c ListView.isCurrentItem
-\i{attached property} provides highlight information to the delegate.
+\e{attached property} provides highlight information to the delegate.
Effectively, the \l ListView element attaches the \c ListView.isCurrentItem
property to each delegate it creates.
\keyword attached-signalhandlers
\section2 Attached Signal Handlers
-\i {Attached signal handlers} are similar
+\e {Attached signal handlers} are similar
to \l{Attached Properties}{attached properties} in that they attach to objects
to provide additional functionality to objects. Two prominent elements,
\l Component and \l Keys element provide
@@ -247,8 +247,8 @@ for more details about list properties and their available operations.
\keyword qml-grouped-properties
\section2 Grouped Properties
-In some cases properties form a logical group and use either the \i dot notation
-or \i group notation.
+In some cases properties form a logical group and use either the \e dot notation
+or \e group notation.
Grouped properties may be written both ways:
\snippet doc/src/snippets/qml/properties.qml grouped properties
@@ -259,8 +259,8 @@ In the element documentation grouped properties are shown using the dot notation
Unlike a property definition, which allocates a new, unique storage space for
the property, a property alias connects the newly declared property, called the
-\i{aliasing property} as a direct reference to an existing property, the
-\i{aliased property}. Read or write operations on the aliasing property results
+\e{aliasing property} as a direct reference to an existing property, the
+\e{aliased property}. Read or write operations on the aliasing property results
in a read or write operations on the aliased property, respectively.
A property alias declaration is similar to an ordinary property definition:
@@ -322,8 +322,8 @@ aliases to reassign children to the \l ListView, creating a tab effect.
\section2 Default Properties
When imported, QML components will bind declared children to their designated
-\i{default properties}. The optional \c default attribute specifies a property
-as the \i {default property}. For example, the State element's default property
+\e{default properties}. The optional \c default attribute specifies a property
+as the \e {default property}. For example, the State element's default property
is its \l{State::changes}{changes} property. \l PropertyChanges elements
may simply be placed as the \c{State}'s children and they will be bound to the
\c changes property.
diff --git a/doc/src/qml/qmlcomponents.qdoc b/doc/src/qml/qmlcomponents.qdoc
index 21b94f2ae3..6d116df979 100644
--- a/doc/src/qml/qmlcomponents.qdoc
+++ b/doc/src/qml/qmlcomponents.qdoc
@@ -33,10 +33,10 @@
\title QML Components
\brief creating and instantiating components
-A \i component is an instantiable QML definition, typically contained in a \c
-.qml file. For instance, a Button \i component may be defined in \c Button.qml
+A \e component is an instantiable QML definition, typically contained in a \c
+.qml file. For instance, a Button \e component may be defined in \c Button.qml
file. The \l{The QML Engine}{QML engine} may instantiate this Button
-component to create Button \i objects. Alternatively, a component may be defined
+component to create Button \e objects. Alternatively, a component may be defined
inside a \l Component element.
Moreover, the Button definition may also contain other components. A Button
@@ -67,12 +67,12 @@ component.
Components may incorporate any \l{Qt Quick}{QML feature} such as:
\list
-\o \l{Property Binding in QML}{Properties} - for binding to data and functions
-\o \l{JavaScript Expressions in QML}{JavaScript functions} - for performing routines and logic
-\o \l{QML Signal and Handler Event System}{Signals and handlers} - t notify other
+\li \l{Property Binding in QML}{Properties} - for binding to data and functions
+\li \l{JavaScript Expressions in QML}{JavaScript functions} - for performing routines and logic
+\li \l{QML Signal and Handler Event System}{Signals and handlers} - t notify other
objects about events
-\o \l{QML States}{States} and \l{QML Animation and Transitions}{Transitions}
-\o many others
+\li \l{QML States}{States} and \l{QML Animation and Transitions}{Transitions}
+\li many others
\endlist
For information about these features, visit the respective overviews or the
main Qt Quick \l{Qt Quick}{reference} page.
@@ -129,7 +129,7 @@ signal handler executes when the component finishes destruction.
\keyword qml-top-level
\section1 Top-Level Component
-Choosing the \i{top-level} or the \i{root} object of components is an important
+Choosing the \e{top-level} or the \e{root} object of components is an important
design aspect because the top-level object dictates which properties are
accessible outside the component. Some elements are not visual elements and
will not have visual properties exposed outside the component. Likewise, some
diff --git a/doc/src/qml/qmldate.qdoc b/doc/src/qml/qmldate.qdoc
index 7ac200db46..696d97ba1d 100644
--- a/doc/src/qml/qmldate.qdoc
+++ b/doc/src/qml/qmldate.qdoc
@@ -36,9 +36,9 @@
Functions that accept a locale format may be either an enumeration
value:
\table
- \row \i Locale.LongFormat \i The long version of the string; for example, returning "January" as a month name.
- \row \i Locale.ShortFormat \i The short version of the string; for example, returning "Jan" as a month name.
- \row \i Locale.NarrowFormat \i A special version for use when space is limited;
+ \row \li Locale.LongFormat \li The long version of the string; for example, returning "January" as a month name.
+ \row \li Locale.ShortFormat \li The short version of the string; for example, returning "Jan" as a month name.
+ \row \li Locale.NarrowFormat \li A special version for use when space is limited;
for example, returning "J" as a month name. Note that the narrow format might contain
the same text for different months and days or it can even be an empty string if the
locale doesn't support narrow names, so you should avoid using it for date formatting.
@@ -47,21 +47,21 @@
or a string specifying the format These expressions may be used for format dates:
\table
- \header \i Expression \i Output
- \row \i d \i the day as number without a leading zero (1 to 31)
- \row \i dd \i the day as number with a leading zero (01 to 31)
- \row \i ddd
- \i the abbreviated localized day name (e.g. 'Mon' to 'Sun').
- \row \i dddd
- \i the long localized day name (e.g. 'Monday' to 'Sunday').
- \row \i M \i the month as number without a leading zero (1 to 12)
- \row \i MM \i the month as number with a leading zero (01 to 12)
- \row \i MMM
- \i the abbreviated localized month name (e.g. 'Jan' to 'Dec').
- \row \i MMMM
- \i the long localized month name (e.g. 'January' to 'December').
- \row \i yy \i the year as two digit number (00 to 99)
- \row \i yyyy \i the year as four digit number. If the year is negative,
+ \header \li Expression \li Output
+ \row \li d \li the day as number without a leading zero (1 to 31)
+ \row \li dd \li the day as number with a leading zero (01 to 31)
+ \row \li ddd
+ \li the abbreviated localized day name (e.g. 'Mon' to 'Sun').
+ \row \li dddd
+ \li the long localized day name (e.g. 'Monday' to 'Sunday').
+ \row \li M \li the month as number without a leading zero (1 to 12)
+ \row \li MM \li the month as number with a leading zero (01 to 12)
+ \row \li MMM
+ \li the abbreviated localized month name (e.g. 'Jan' to 'Dec').
+ \row \li MMMM
+ \li the long localized month name (e.g. 'January' to 'December').
+ \row \li yy \li the year as two digit number (00 to 99)
+ \row \li yyyy \li the year as four digit number. If the year is negative,
a minus sign is prepended in addition.
\endtable
@@ -74,35 +74,35 @@
1969):
\table
- \header \o Format \o Result
- \row \o dd.MM.yyyy \o 20.07.1969
- \row \o ddd MMMM d yy \o Sun July 20 69
- \row \o 'The day is' dddd \o The day is Sunday
+ \header \li Format \li Result
+ \row \li dd.MM.yyyy \li 20.07.1969
+ \row \li ddd MMMM d yy \li Sun July 20 69
+ \row \li 'The day is' dddd \li The day is Sunday
\endtable
These expressions may be used for formatting time:
\table
- \header \i Expression \i Output
- \row \i h
- \i the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)
- \row \i hh
- \i the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)
- \row \i H
- \i the hour without a leading zero (0 to 23, even with AM/PM display)
- \row \i HH
- \i the hour with a leading zero (00 to 23, even with AM/PM display)
- \row \i m \i the minute without a leading zero (0 to 59)
- \row \i mm \i the minute with a leading zero (00 to 59)
- \row \i s \i the second without a leading zero (0 to 59)
- \row \i ss \i the second with a leading zero (00 to 59)
- \row \i z \i the milliseconds without leading zeroes (0 to 999)
- \row \i zzz \i the milliseconds with leading zeroes (000 to 999)
- \row \i AP or A
- \i use AM/PM display. \e AP will be replaced by either "AM" or "PM".
- \row \i ap or a
- \i use am/pm display. \e ap will be replaced by either "am" or "pm".
- \row \i t \i the timezone (for example "CEST")
+ \header \li Expression \li Output
+ \row \li h
+ \li the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)
+ \row \li hh
+ \li the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)
+ \row \li H
+ \li the hour without a leading zero (0 to 23, even with AM/PM display)
+ \row \li HH
+ \li the hour with a leading zero (00 to 23, even with AM/PM display)
+ \row \li m \li the minute without a leading zero (0 to 59)
+ \row \li mm \li the minute with a leading zero (00 to 59)
+ \row \li s \li the second without a leading zero (0 to 59)
+ \row \li ss \li the second with a leading zero (00 to 59)
+ \row \li z \li the milliseconds without leading zeroes (0 to 999)
+ \row \li zzz \li the milliseconds with leading zeroes (000 to 999)
+ \row \li AP or A
+ \li use AM/PM display. \e AP will be replaced by either "AM" or "PM".
+ \row \li ap or a
+ \li use am/pm display. \e ap will be replaced by either "am" or "pm".
+ \row \li t \li the timezone (for example "CEST")
\endtable
All other input characters will be ignored. Any sequence of characters that
@@ -113,10 +113,10 @@
Example format strings (assuming that the QTime is 14:13:09.042)
\table
- \header \i Format \i Result
- \row \i hh:mm:ss.zzz \i 14:13:09.042
- \row \i h:m:s ap \i 2:13:9 pm
- \row \i H:m:s a \i 14:13:9 pm
+ \header \li Format \li Result
+ \row \li hh:mm:ss.zzz \li 14:13:09.042
+ \row \li h:m:s ap \li 2:13:9 pm
+ \row \li H:m:s a \li 14:13:9 pm
\endtable
If the date is invalid, an empty string will be returned.
diff --git a/doc/src/qml/qmldocument.qdoc b/doc/src/qml/qmldocument.qdoc
index 426f135a45..30845999b4 100644
--- a/doc/src/qml/qmldocument.qdoc
+++ b/doc/src/qml/qmldocument.qdoc
@@ -43,16 +43,16 @@ QML documents are always encoded in UTF-8 format.
A QML document always begins with one or more import statements. To prevent elements
introduced in later versions from affecting existing QML programs, the element types
available within a document are controlled by the imported QML \l {Modules} with
-a corresponding \i version.
+a corresponding \e version.
-QML does \i not have a preprocessor that modifies the document prior to
+QML does \e not have a preprocessor that modifies the document prior to
presentation to the \l{The QML Engine}{QML engine}, unlike C or C++.
The \c import statements do not copy and prepend the code in the document, but
instead instruct the QML engine on how to resolve type references found
in the document. Any type reference present in a QML document - such as \c
Rectangle and \c ListView - including those made within an \l {Inline
JavaScript}{JavaScript block} or \l {Property Binding in QML}{property
-bindings}, are \i resolved based exclusively on the import statements. At least
+bindings}, are \e resolved based exclusively on the import statements. At least
one \c import statement must be present such as \c{import QtQuick 2.0}.
Each \c id value in a QML document must be unique within that document. They do
@@ -65,7 +65,7 @@ A QML document defines a single, top-level \l {QML Components}{QML component}. A
QML component is a template that is interpreted by the QML engine to
create an object with some predefined behaviour. As it is a template, a single
QML component can be "run" multiple times to produce several objects, each of
-which are said to be \i instances of the component.
+which are said to be \e instances of the component.
Once created, instances are not dependent on the component that created them, so
they can operate on independent data. Here is an example of a simple "Button"
@@ -75,12 +75,12 @@ text property:
\table
\row
-\o Button.qml
-\o application.qml
+\li Button.qml
+\li application.qml
\row
-\o \snippet doc/src/snippets/qml/qml-documents/qmldocuments.qml document
-\o
+\li \snippet doc/src/snippets/qml/qml-documents/qmldocuments.qml document
+\li
\qml
import QtQuick 2.0
@@ -99,7 +99,7 @@ Column {
\endtable
Any snippet of QML code can become a component, just by placing it in the file
-"<Name>.qml" where <Name> is the component name, and begins with an \bold
+"<Name>.qml" where <Name> is the component name, and begins with an \b
uppercase letter. Note that the case of all characters in the <Name> are
significant on some filesystems, notably UNIX filesystems. It is recommended
that the case of the filename matches the case of the component name in QML
@@ -113,7 +113,7 @@ load them in other components.
\section1 Inline Components
In addition to the top-level component that all QML documents define, and any
-reusable components placed in separate files, documents may also include \i
+reusable components placed in separate files, documents may also include \e
inline components. Inline components are declared using the \l Component
element, as can be seen in the first example above. Inline components share all
the characteristics of regular top-level components and use the same \c import
@@ -137,9 +137,9 @@ These final two examples perform identically to the original document.
\table
\row
-\o
+\li
\snippet doc/src/snippets/qml/qml-documents/inline-component.qml document
-\o
+\li
\snippet doc/src/snippets/qml/qml-documents/inline-text-component.qml document
\endtable
diff --git a/doc/src/qml/qmlengine.qdoc b/doc/src/qml/qmlengine.qdoc
index 0865755c7b..b0754fe3ab 100644
--- a/doc/src/qml/qmlengine.qdoc
+++ b/doc/src/qml/qmlengine.qdoc
@@ -44,10 +44,10 @@ specified in QML files, plugins, or applications.
that provide the essential capabilities for doing this. These are:
\list
- \o QQmlEngine: A QML engine provides the environment for executing QML code. Every
+ \li QQmlEngine: A QML engine provides the environment for executing QML code. Every
application requires at least one engine instance.
- \o QQmlComponent: A component encapsulates QML information.
- \o QQmlContext: A context allows an application to expose data to
+ \li QQmlComponent: A component encapsulates QML information.
+ \li QQmlContext: A context allows an application to expose data to
the QML components created by an engine.
\endlist
@@ -55,9 +55,9 @@ specified in QML files, plugins, or applications.
context, component encapsulation, and visual items.
\list
- \o QQuickItem
- \o QQuickPaintedItem
- \o QQuickView
+ \li QQuickItem
+ \li QQuickPaintedItem
+ \li QQuickView
\endlist
\section2 Declarative Engine
@@ -110,11 +110,11 @@ specified in QML files, plugins, or applications.
\table
\row
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/loading/main.cpp QQmlComponent-a
\dots 0
\snippet doc/src/snippets/qml/qtbinding/loading/main.cpp QQmlComponent-b
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/loading/main.cpp QQuickView
\endtable
@@ -195,11 +195,11 @@ specified in QML files, plugins, or applications.
\table
\row
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/context-advanced/applicationdata.h 0
\codeline
\snippet doc/src/snippets/qml/qtbinding/context-advanced/main.cpp 0
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/context-advanced/MyItem.qml 0
\endtable
@@ -246,8 +246,8 @@ specified in QML files, plugins, or applications.
\table
\row
- \o \snippet doc/src/snippets/qml/qtbinding/functions-qml/MyItem.qml 0
- \o \snippet doc/src/snippets/qml/qtbinding/functions-qml/main.cpp 0
+ \li \snippet doc/src/snippets/qml/qtbinding/functions-qml/MyItem.qml 0
+ \li \snippet doc/src/snippets/qml/qtbinding/functions-qml/main.cpp 0
\endtable
Notice the Q_RETURN_ARG() and Q_ARG() arguments for
@@ -261,9 +261,9 @@ specified in QML files, plugins, or applications.
\table
\row
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/functions-cpp/MyItem.qml 0
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/functions-cpp/myclass.h 0
\codeline
\snippet doc/src/snippets/qml/qtbinding/functions-cpp/main.cpp 0
@@ -288,9 +288,9 @@ specified in QML files, plugins, or applications.
\table
\row
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/signals-qml/MyItem.qml 0
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/signals-qml/myclass.h 0
\codeline
\snippet doc/src/snippets/qml/qtbinding/signals-qml/main.cpp 0
@@ -306,13 +306,13 @@ specified in QML files, plugins, or applications.
\table
\row
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/signals-cpp/imageviewer.h start
\dots 4
\snippet doc/src/snippets/qml/qtbinding/signals-cpp/imageviewer.h end
- \o
+ \li
\snippet doc/src/snippets/qml/qtbinding/signals-cpp/standalone.qml 0
\endtable
@@ -331,8 +331,8 @@ specified in QML files, plugins, or applications.
\table
\row
- \o \snippet doc/src/snippets/qml/qtbinding/signals-cpp/main.cpp connections
- \o \snippet doc/src/snippets/qml/qtbinding/signals-cpp/MyItem.qml 0
+ \li \snippet doc/src/snippets/qml/qtbinding/signals-cpp/main.cpp connections
+ \li \snippet doc/src/snippets/qml/qtbinding/signals-cpp/MyItem.qml 0
\endtable
C++ signals can use enum values as parameters provided that the enum is
@@ -381,8 +381,8 @@ specified in QML files, plugins, or applications.
\table
\row
- \o \snippet doc/src/snippets/qml/qtbinding/properties-cpp/applicationdata.h 0
- \o \snippet doc/src/snippets/qml/qtbinding/properties-cpp/MyItem.qml 0
+ \li \snippet doc/src/snippets/qml/qtbinding/properties-cpp/applicationdata.h 0
+ \li \snippet doc/src/snippets/qml/qtbinding/properties-cpp/MyItem.qml 0
\endtable
Notice the \c backgroundColorChanged signal is declared as the NOTIFY signal
@@ -438,14 +438,14 @@ specified in QML files, plugins, or applications.
return pointers to invalid objects. QML makes the following guarentees:
\list
- \o An object assigned to a QObject (or QObject-derived) pointer property
+ \li An object assigned to a QObject (or QObject-derived) pointer property
will be valid at the time of assignment.
Following assignment, it is the responsibility of the class to subsequently
guard this pointer, either through a class specific method or the generic
QPointer class.
- \o An object assigned to a QVariant will be valid at the time of assignment.
+ \li An object assigned to a QVariant will be valid at the time of assignment.
When assigning an object to a QVariant property, QML will always use a
QMetaType::QObjectStar typed QVariant. It is the responsibility of the class
@@ -453,7 +453,7 @@ specified in QML files, plugins, or applications.
properties is to check the type of the QVariant when it is set and if the
type is not handled by your class, reset it to an invalid variant.
- \o An object assigned to a QObject (or QObject-derived) list property will
+ \li An object assigned to a QObject (or QObject-derived) list property will
be valid at the time of assignment.
Following assignment, it is the responsibility of the class to subsequently
diff --git a/doc/src/qml/qmlevents.qdoc b/doc/src/qml/qmlevents.qdoc
index 1f2e7a9908..2567dddb2a 100644
--- a/doc/src/qml/qmlevents.qdoc
+++ b/doc/src/qml/qmlevents.qdoc
@@ -38,8 +38,8 @@ The button may change colors to indicate its state or perform some logic. As
well, application needs to know whether the user is clicking the button. The
application may need to relay this clicking event to other applications.
-QML has a signal and handler mechanism, where the \i signal is the event
-and the component responds to the event through the \i handler. The signal
+QML has a signal and handler mechanism, where the \e signal is the event
+and the component responds to the event through the \e handler. The signal
is emitted and the handler is invoked. Placing logic such as scripts or other
operations in the handler allows the component to respond to the event.
@@ -66,7 +66,7 @@ If the signal has no parameters, the "\c{()}" brackets are optional. If
parameters are used, the parameter types must be declared, as for the \c string
and \c variant arguments of the \c perform signal.
-Adding a signal to an item automatically adds a \i{signal handler} as well. The
+Adding a signal to an item automatically adds a \e{signal handler} as well. The
signal hander is named \c on<SignalName>, with the first letter of the signal in
uppercase. The previous signals have the following signal handlers:
\snippet doc/src/snippets/qml/events.qml signal handler declaration
diff --git a/doc/src/qml/qmli18n.qdoc b/doc/src/qml/qmli18n.qdoc
index 4e546c7ed4..d15beafb38 100644
--- a/doc/src/qml/qmli18n.qdoc
+++ b/doc/src/qml/qmli18n.qdoc
@@ -47,8 +47,8 @@ QScriptEngine::installTranslatorFunctions().
QML relies on the core internationalization capabilities provided by Qt. These
capabilities are described more fully in:
\list
-\o \l {Internationalization with Qt}
-\o \l {Qt Linguist Manual}
+\li \l {Internationalization with Qt}
+\li \l {Qt Linguist Manual}
\endlist
You can test a translation with the \l {QML Viewer} using the -translation option.
diff --git a/doc/src/qml/qmlintro.qdoc b/doc/src/qml/qmlintro.qdoc
index 3290a27bc3..390af69c69 100644
--- a/doc/src/qml/qmlintro.qdoc
+++ b/doc/src/qml/qmlintro.qdoc
@@ -129,13 +129,13 @@ additional elements are defined inside the light blue rectangle.
\e components, often interchangeably.
\list
-\o When we talk about an \e element, we usually mean the syntactic structure,
+\li When we talk about an \e element, we usually mean the syntactic structure,
including the name, the opening and closing braces, and its contents.
-\o An \e item is an element that has a visual appearance. All items are
+\li An \e item is an element that has a visual appearance. All items are
elements that inherit \l Item either directly or indirectly. For example,
a \l Rectangle is an item, but a \l State is an element because it does
not have an intrinsic appearance.
-\o A \e component is an element that is defined to be reused. In many cases,
+\li A \e component is an element that is defined to be reused. In many cases,
components are often items, too.
\endlist
@@ -333,8 +333,8 @@ the case.
Commenting in QML is similar to JavaScript.
\list
-\o Single line comments start with // and finish at the end of the line.
-\o Multi-line comments start with /* and finish with *\/
+\li Single line comments start with // and finish at the end of the line.
+\li Multi-line comments start with /* and finish with *\/
\endlist
Comments are ignored by the QML engine. They are useful for explaining what
@@ -379,15 +379,15 @@ referred to in the JavaScript code, as below:
When a property changes value, it can send a signal to notify others of this change.
-To receive these signals, simply create a \i{signal handler} named with an
+To receive these signals, simply create a \e{signal handler} named with an
\e on<Property>Changed syntax. For example, the \l TextInput element has a
\l{TextInput::}{text} property. When this property changes, the \c textChanged
signal is emitted. We can monitor this property for changes with the
\c onTextChanged handler.
\table
-\header \o Property \o Signal \o Signal Handler
-\row \o \l{TextInput::}{text} \o \c textChanged \o \c onTextChanged
+\header \li Property \li Signal \li Signal Handler
+\row \li \l{TextInput::}{text} \li \c textChanged \li \c onTextChanged
\endtable
The following code shows this in practice:
@@ -720,10 +720,10 @@ of their own; they simply arrange their child items in the space allocated to
them. Any background color, if desired, must be added to a parent Rectangle.
\list
-\o \l{#Row}{Row} arranges its children in a row.
-\o \l{#Column}{Column} arranges its children in a column.
-\o \l{#Grid}{Grid} arranges its children in a grid.
-\o \l{#Flow}{Flow} arranges its children like words on a page.
+\li \l{#Row}{Row} arranges its children in a row.
+\li \l{#Column}{Column} arranges its children in a column.
+\li \l{#Grid}{Grid} arranges its children in a grid.
+\li \l{#Flow}{Flow} arranges its children like words on a page.
\endlist
Each of these items provides many of the same properties as the others,
diff --git a/doc/src/qml/qmlnumber.qdoc b/doc/src/qml/qmlnumber.qdoc
index 099a619c0e..47dc0338c0 100644
--- a/doc/src/qml/qmlnumber.qdoc
+++ b/doc/src/qml/qmlnumber.qdoc
@@ -44,11 +44,11 @@
Valid formats are:
\list
- \o 'f' Decimal floating point, e.g. 248.65
- \o 'e' Scientific notation using e character, e.g. 2.4865e+2
- \o 'E' Scientific notation using E character, e.g. 2.4865E+2
- \o 'g' Use the shorter of e or f
- \o 'G' Use the shorter of E or f
+ \li 'f' Decimal floating point, e.g. 248.65
+ \li 'e' Scientific notation using e character, e.g. 2.4865e+2
+ \li 'E' Scientific notation using E character, e.g. 2.4865E+2
+ \li 'g' Use the shorter of e or f
+ \li 'G' Use the shorter of E or f
\endlist
If precision is not specified, the precision will be 2.
diff --git a/doc/src/qml/qmlplugins.qdoc b/doc/src/qml/qmlplugins.qdoc
index e41bba2906..b81c4c5ae1 100644
--- a/doc/src/qml/qmlplugins.qdoc
+++ b/doc/src/qml/qmlplugins.qdoc
@@ -43,13 +43,13 @@
To write a QML extension plugin:
\list 1
- \o Subclass QQmlExtensionPlugin
- \o Implement QQmlExtensionPlugin's
+ \li Subclass QQmlExtensionPlugin
+ \li Implement QQmlExtensionPlugin's
\l{QQmlExtensionPlugin::}{registerTypes()} method
- \o Register types with qmlRegisterType()
- \o Export the class using the Q_EXPORT_PLUGIN2() macro
- \o Write a project file for the plugin
- \o Create a \l{Writing a qmldir file}{qmldir file} to describe the plugin
+ \li Register types with qmlRegisterType()
+ \li Export the class using the Q_EXPORT_PLUGIN2() macro
+ \li Write a project file for the plugin
+ \li Create a \l{Writing a qmldir file}{qmldir file} to describe the plugin
\endlist
QML extension plugins are for either application-specific or library-like
@@ -122,11 +122,11 @@
\section1 Reference
\list
- \o \l {Tutorial: Writing QML extensions with C++} - contains a chapter
+ \li \l {Tutorial: Writing QML extensions with C++} - contains a chapter
on creating QML plugins.
- \o \l{Creating QML Types} - information about registering C++ types into
+ \li \l{Creating QML Types} - information about registering C++ types into
the runtime.
- \o \l{How to Create Qt Plugins} - information about Qt plugins
+ \li \l{How to Create Qt Plugins} - information about Qt plugins
\endlist
diff --git a/doc/src/qml/qmlruntime.qdoc b/doc/src/qml/qmlruntime.qdoc
index a803fabd7a..e5472aed99 100644
--- a/doc/src/qml/qmlruntime.qdoc
+++ b/doc/src/qml/qmlruntime.qdoc
@@ -50,8 +50,8 @@ the application. This is done by writing a Qt C++ application that loads the
QQmlEngine by either:
\list
-\o Loading the QML file through a QQuickView instance, or
-\o Creating a QQmlEngine instance and loading QML files with QQmlComponent
+\li Loading the QML file through a QQuickView instance, or
+\li Creating a QQmlEngine instance and loading QML files with QQmlComponent
\endlist
diff --git a/doc/src/qml/qmlsyntax.qdoc b/doc/src/qml/qmlsyntax.qdoc
index 1cd6ad7f46..6dfebb5174 100644
--- a/doc/src/qml/qmlsyntax.qdoc
+++ b/doc/src/qml/qmlsyntax.qdoc
@@ -103,7 +103,7 @@ Rotation {
\endcode
These expressions can include references to other objects and properties, in which case
-a \i binding is established: when the value of the expression changes, the property the
+a \e binding is established: when the value of the expression changes, the property the
expression has been assigned to is automatically updated to that value.
\code
@@ -122,15 +122,15 @@ Item {
In the example above, the \c text2 object will display the same text as \c text1. If \c text1 is changed,
\c text2 is automatically changed to the same value.
-Note that to refer to other objects, we use their \i id values. (See below for more
-information on the \i id property.)
+Note that to refer to other objects, we use their \e id values. (See below for more
+information on the \e id property.)
\section1 QML Comments
Commenting in QML is similar to JavaScript.
\list
-\o Single line comments start with // and finish at the end of the line.
-\o Multiline comments start with /* and finish with *\/
+\li Single line comments start with // and finish at the end of the line.
+\li Multiline comments start with /* and finish with *\/
\endlist
\snippet doc/src/snippets/qml/comments.qml 0
diff --git a/doc/src/qml/qmltypes.qdoc b/doc/src/qml/qmltypes.qdoc
index 9555e54f7e..ae4ad47c3d 100644
--- a/doc/src/qml/qmltypes.qdoc
+++ b/doc/src/qml/qmltypes.qdoc
@@ -70,14 +70,14 @@ int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const c
Alternatively, these functions provide a way for other types of C++ types
to be visible in the QML context.
\list
- \o \l qmlRegisterUncreatableType() is suited for attached
+ \li \l qmlRegisterUncreatableType() is suited for attached
properties and enum types.
- \o \l qmlRegisterTypeNotAvailable() is for
+ \li \l qmlRegisterTypeNotAvailable() is for
reserving a namespace and suited for generating useful errors.
- \o \l qmlRegisterInterface() - for registering base or abstract classes for
+ \li \l qmlRegisterInterface() - for registering base or abstract classes for
\l{qml-c++-coercion}{coercion and inheritance}. This is useful for general
Qt objects or \l{Qt Objects and Interfaces}{pointers} to objects.
- \o \l qmlRegisterExtendedType() - for \l{qml-c++-extension}{extended types}
+ \li \l qmlRegisterExtendedType() - for \l{qml-c++-extension}{extended types}
\endlist
\section2 Qt Objects and Interfaces
@@ -119,7 +119,7 @@ int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const c
\l{The Property System}{Property System} and in effect, QML
\l{Property Binding in QML}{property bindings} also use Qt properties.
- Essentially, a Qt C++ property has a \i write function, \i read function,
+ Essentially, a Qt C++ property has a \e write function, \e read function,
and has a signal function. QML properties are inheritely public, both
readable and writable, albeit type-safe. QML properties may also have
signals which are emitted when the property value or binding changes.
@@ -154,7 +154,7 @@ Q_PROPERTY(int size READ size WRITE setSize NOTIFY shoeChanged)
QML}{JavaScript expressions} can perform clean-up operations or call other
functions.
- \bold{Note:} The QML signal handler will always be named
+ \b{Note:} The QML signal handler will always be named
on<Property-name>Changed, regardless of the name used for the NOTIFY
signal in C++. We recommend using <property-name>Changed() for the
NOTIFY signal in C++.
@@ -224,9 +224,9 @@ Q_PROPERTY(int size READ size CONSTANT)
\section2 Attached Properties
Attached properties annotate or add properties to another type or component.
- For example, the \l Keys \i{attaching type} contains \i{attached properties}
+ For example, the \l Keys \e{attaching type} contains \e{attached properties}
that other elements may use to respond to key input. Conceptually, attached
- properties are a \i type exporting a set of additional properties that can
+ properties are a \e type exporting a set of additional properties that can
be set on any other object instance.
The attaching type is a QObject derived type. The properties on the
@@ -344,7 +344,7 @@ Q_PROPERTY(int size READ size CONSTANT)
\snippet examples/declarative/cppextensions/referenceexamples/properties/example.qml 0
- The \c guests property is a \i{list property} of \c Person objects. A list
+ The \c guests property is a \e{list property} of \c Person objects. A list
of \c Person objects are bound to the \c BirthdayParty's \c host property,
and assigns three \c Person objects to the guests property.
@@ -370,11 +370,11 @@ Q_PROPERTY(int size READ size CONSTANT)
Array types.
In particular, QML currently supports:
\list
- \o \c {QList<int>}
- \o \c {QList<qreal>}
- \o \c {QList<bool>}
- \o \c {QList<QString>} and \c{QStringList}
- \o \c {QList<QUrl>}
+ \li \c {QList<int>}
+ \li \c {QList<qreal>}
+ \li \c {QList<bool>}
+ \li \c {QList<QString>} and \c{QStringList}
+ \li \c {QList<QUrl>}
\endlist
These sequence types are implemented directly in terms of the underlying C++
@@ -398,7 +398,7 @@ Q_PROPERTY(int size READ size CONSTANT)
instance of any other sequence type will be passed between QML and C++ as an
opaque QVariantList.
- \bold {Important Note:} There are some minor differences between the
+ \b {Important Note:} There are some minor differences between the
semantics of such sequence Array types and default JavaScript Array types
which result from the use of a C++ storage type in the implementation. In
particular, deleting an element from an Array will result in a
@@ -412,11 +412,11 @@ Q_PROPERTY(int size READ size CONSTANT)
The default-constructed values for each sequence type are as follows:
\table
- \row \o QList<int> \o integer value 0
- \row \o QList<qreal> \o real value 0.0
- \row \o QList<bool> \o boolean value \c {false}
- \row \o QList<QString> and QStringList \o empty QString
- \row \o QList<QUrl> \o empty QUrl
+ \row \li QList<int> \li integer value 0
+ \row \li QList<qreal> \li real value 0.0
+ \row \li QList<bool> \li boolean value \c {false}
+ \row \li QList<QString> and QStringList \li empty QString
+ \row \li QList<QUrl> \li empty QUrl
\endtable
If you wish to remove elements from a sequence rather than simply replace
@@ -454,7 +454,7 @@ Q_PROPERTY(int size READ size CONSTANT)
scenario.
Consider a custom type, \c TestElement, that has two properties, \c a and
- \c b. Property \c a does \i not have a NOTIFY signal, and property \c b does
+ \c b. Property \c a does \e not have a NOTIFY signal, and property \c b does
have a NOTIFY signal.
\code
@@ -490,7 +490,7 @@ Q_PROPERTY(int size READ size CONSTANT)
A \l{signals and slots}{signal} in Qt C++ is readily available as a
\l{QML Signal and Handler Event System}{QML signal}. A signal will have
- a corresponding signal \i{handler}, created automatically. The handler
+ a corresponding signal \e{handler}, created automatically. The handler
name will have \c on prepended at the beginning of the name. The first
character of the signal is uppercased for the signal handler. The
signal parameter is also availabe to the QML signal.
@@ -513,9 +513,9 @@ Q_PROPERTY(int size READ size CONSTANT)
\l {Connections} element.
Additionally, if a property is added to a C++ class, all QML elements
- based on that C++ class will have a \i{value-changed} signal handler
+ based on that C++ class will have a \e{value-changed} signal handler
for that property. The name of the signal handler is
- \i{on<Property-name>Changed}, with the first letter of the property
+ \e{on<Property-name>Changed}, with the first letter of the property
name being upper case.
The \l {Extending QML - Signal Support Example}{Signal Support Example}
@@ -699,10 +699,10 @@ Q_PROPERTY(int size READ size CONSTANT)
other concerns, extension objects allow limited extension possibilities
without direct modifications.
- \i{Extension objects} add additional properties to an existing type.
+ \e{Extension objects} add additional properties to an existing type.
Extension objects can only add properties, not signals or methods. An
extended type definition allows the programmer to supply an additional type,
- known as the \i{extension type}, when registering the class. The
+ known as the \e{extension type}, when registering the class. The
properties are transparently merged with the original target class when used
from within QML.
diff --git a/doc/src/qml/qmlviewer.qdoc b/doc/src/qml/qmlviewer.qdoc
index 9006a053fc..04c6b42966 100644
--- a/doc/src/qml/qmlviewer.qdoc
+++ b/doc/src/qml/qmlviewer.qdoc
@@ -38,7 +38,7 @@ runtime to load QML documents and also includes additional features useful for
the development of QML-based applications.
The QML Viewer is a tool for testing and developing QML applications. It is
-\i not intended for use in a production environment and should not be used for the
+\e not intended for use in a production environment and should not be used for the
deployment of QML applications. In those cases, the QML runtime should be invoked
from a Qt application instead; see \l {Qt Declarative UI Runtime} for more
information.
@@ -172,9 +172,9 @@ information about the application's runtime environment through the following pr
\table
\row
-\o \c runtime.isActiveWindow
+\li \c runtime.isActiveWindow
-\o This property indicates whether the QML Viewer window is the current active
+\li This property indicates whether the QML Viewer window is the current active
window on the system. It is useful for "pausing" an application, particularly
animations, when the QML Viewer loses focus or moves to the background.
@@ -193,22 +193,22 @@ Rectangle {
}
\endqml
-\bold{Note:} Since Qt Quick 1.1 this information is accessible outside of the QML Viewer,
+\b{Note:} Since Qt Quick 1.1 this information is accessible outside of the QML Viewer,
through the \c active property of the \l {QML:Qt::application}{Qt.application} object.
\row
-\o \c runtime.orientation
+\li \c runtime.orientation
-\o This property indicates the current orientation of the QML Viewer.
+\li This property indicates the current orientation of the QML Viewer.
This indicates the orientation currently selected in the QML Viewer's
-\i {Settings -> Properties} menu. The \c orientation value can be one of the following:
+\e {Settings -> Properties} menu. The \c orientation value can be one of the following:
\list
-\o \c Orientation.Portrait
-\o \c Orientation.Landscape
-\o \c Orientation.PortraitInverted (Portrait orientation, upside-down)
-\o \c Orientation.LandscapeInverted (Landscape orientation, upside-down)
+\li \c Orientation.Portrait
+\li \c Orientation.Landscape
+\li \c Orientation.PortraitInverted (Portrait orientation, upside-down)
+\li \c Orientation.LandscapeInverted (Landscape orientation, upside-down)
\endlist
When the viewer's orientation changes, the appearance of the loaded QML document
diff --git a/doc/src/qml/qtbinding.qdoc b/doc/src/qml/qtbinding.qdoc
index 7410836e9c..b480d1292f 100644
--- a/doc/src/qml/qtbinding.qdoc
+++ b/doc/src/qml/qtbinding.qdoc
@@ -40,11 +40,11 @@ reusable QML components for distribution.
You may want to mix QML and C++ for a number of reasons. For example:
\list
-\o To use functionality defined in a C++ source (for example, when using a C++ Qt-based data model, or
+\li To use functionality defined in a C++ source (for example, when using a C++ Qt-based data model, or
calling functions in a third-party C++ library)
-\o To access functionality in the Qt Declarative module (for example, to dynamically generate
+\li To access functionality in the Qt Declarative module (for example, to dynamically generate
images using QQmlImageProvider)
-\o To write your own QML elements (whether for your applications, or for distribution to others)
+\li To write your own QML elements (whether for your applications, or for distribution to others)
\endlist
To use the Qt Declarative module, you must include and link to the module appropriately, as shown on
@@ -59,10 +59,10 @@ embedding QML into C++ applications. There are several core classes in the Qt De
that provide the essential capabilities for doing this. These are:
\list
-\o QQmlEngine: A QML engine provides the environment for executing QML code. Every
+\li QQmlEngine: A QML engine provides the environment for executing QML code. Every
application requires at least one engine instance.
-\o QQmlComponent: A component encapsulates a \l{QML Documents}{QML document}.
-\o QQmlContext: A context allows an application to expose data to the QML components
+\li QQmlComponent: A component encapsulates a \l{QML Documents}{QML document}.
+\li QQmlContext: A context allows an application to expose data to the QML components
created by an engine.
\endlist
@@ -95,10 +95,10 @@ UI code}.)
There are a number of ways to extend your QML application through C++. For example, you could:
\list
-\o Load a QML component and manipulate it (or its children) from C++
-\o Embed a C++ object and its properties directly into a QML component (for example, to make a
+\li Load a QML component and manipulate it (or its children) from C++
+\li Embed a C++ object and its properties directly into a QML component (for example, to make a
particular C++ object callable from QML, or to replace a dummy list model with a real data set)
-\o Define new QML elements (through QObject-based C++ classes) and create them directly from your
+\li Define new QML elements (through QObject-based C++ classes) and create them directly from your
QML code
\endlist
@@ -125,11 +125,11 @@ component, which is accessible via QQuickView::rootObject():
\table
\row
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/loading/main.cpp QQmlComponent-a
\dots 0
\snippet doc/src/snippets/qml/qtbinding/loading/main.cpp QQmlComponent-b
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/loading/main.cpp QQuickView
\endtable
@@ -201,11 +201,11 @@ invokes a method on the object instance:
\table
\row
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/context-advanced/applicationdata.h 0
\codeline
\snippet doc/src/snippets/qml/qtbinding/context-advanced/main.cpp 0
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/context-advanced/MyItem.qml 0
\endtable
@@ -286,8 +286,8 @@ QMetaObject::invokeMethod(). Here is a C++ application that uses this to call a
\table
\row
-\o \snippet doc/src/snippets/qml/qtbinding/functions-qml/MyItem.qml 0
-\o \snippet doc/src/snippets/qml/qtbinding/functions-qml/main.cpp 0
+\li \snippet doc/src/snippets/qml/qtbinding/functions-qml/MyItem.qml 0
+\li \snippet doc/src/snippets/qml/qtbinding/functions-qml/main.cpp 0
\endtable
Notice the Q_RETURN_ARG() and Q_ARG() arguments for QMetaObject::invokeMethod() must be specified as
@@ -299,9 +299,9 @@ methods on the \c myObject object, which has been set using QQmlContext::setCont
\table
\row
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/functions-cpp/MyItem.qml 0
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/functions-cpp/myclass.h 0
\codeline
\snippet doc/src/snippets/qml/qtbinding/functions-cpp/main.cpp 0
@@ -324,9 +324,9 @@ is emitted:
\table
\row
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/signals-qml/MyItem.qml 0
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/signals-qml/myclass.h 0
\codeline
\snippet doc/src/snippets/qml/qtbinding/signals-qml/main.cpp 0
@@ -340,13 +340,13 @@ C++ object are connected to through \c onImagedChanged and \c onLoadingError sig
\table
\row
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/signals-cpp/imageviewer.h start
\dots 4
\snippet doc/src/snippets/qml/qtbinding/signals-cpp/imageviewer.h end
-\o
+\li
\snippet doc/src/snippets/qml/qtbinding/signals-cpp/standalone.qml 0
\endtable
@@ -362,8 +362,8 @@ instead to create the signal handler:
\table
\row
-\o \snippet doc/src/snippets/qml/qtbinding/signals-cpp/main.cpp connections
-\o \snippet doc/src/snippets/qml/qtbinding/signals-cpp/MyItem.qml 0
+\li \snippet doc/src/snippets/qml/qtbinding/signals-cpp/main.cpp connections
+\li \snippet doc/src/snippets/qml/qtbinding/signals-cpp/MyItem.qml 0
\endtable
C++ signals can use enum values as parameters provided that the enum is declared in the
@@ -410,8 +410,8 @@ property. This property can be written to and read from QML:
\table
\row
-\o \snippet doc/src/snippets/qml/qtbinding/properties-cpp/applicationdata.h 0
-\o \snippet doc/src/snippets/qml/qtbinding/properties-cpp/MyItem.qml 0
+\li \snippet doc/src/snippets/qml/qtbinding/properties-cpp/applicationdata.h 0
+\li \snippet doc/src/snippets/qml/qtbinding/properties-cpp/MyItem.qml 0
\endtable
Notice the \c backgroundColorChanged signal is declared as the NOTIFY signal for the
@@ -432,20 +432,20 @@ functions - must be of a type that is recognizable by QML.
By default, QML recognizes the following data types:
\list
-\o bool
-\o unsigned int, int
-\o float, double, qreal
-\o QString
-\o QUrl
-\o QColor
-\o QDate, QTime, QDateTime
-\o QPoint, QPointF
-\o QSize, QSizeF
-\o QRect, QRectF
-\o QVariant
-\o QVariantList, QVariantMap
-\o QObject*
-\o Enumerations declared with Q_ENUMS()
+\li bool
+\li unsigned int, int
+\li float, double, qreal
+\li QString
+\li QUrl
+\li QColor
+\li QDate, QTime, QDateTime
+\li QPoint, QPointF
+\li QSize, QSizeF
+\li QRect, QRectF
+\li QVariant
+\li QVariantList, QVariantMap
+\li QObject*
+\li Enumerations declared with Q_ENUMS()
\endlist
To allow a custom C++ type to be created or used in QML, the C++ class must be registered as a QML
@@ -464,12 +464,12 @@ converted to JavaScript array and object values, repectively:
\table
\header
-\o Type
-\o String format
-\o Example
+\li Type
+\li String format
+\li Example
\row
-\o \snippet doc/src/snippets/qml/qtbinding/variantlistmap/MyItem.qml 0
-\o \snippet doc/src/snippets/qml/qtbinding/variantlistmap/main.cpp 0
+\li \snippet doc/src/snippets/qml/qtbinding/variantlistmap/MyItem.qml 0
+\li \snippet doc/src/snippets/qml/qtbinding/variantlistmap/main.cpp 0
\endtable
This produces output like:
@@ -535,45 +535,45 @@ pass simple values from QML to C++.
\table
\header
-\o Type
-\o String format
-\o Example
+\li Type
+\li String format
+\li Example
\row
-\o QColor
-\o Color name, "#RRGGBB", "#RRGGBBAA"
-\o "red", "#ff0000", "#ff000000"
+\li QColor
+\li Color name, "#RRGGBB", "#RRGGBBAA"
+\li "red", "#ff0000", "#ff000000"
\row
-\o QDate
-\o "YYYY-MM-DD"
-\o "2010-05-31"
+\li QDate
+\li "YYYY-MM-DD"
+\li "2010-05-31"
\row
-\o QPoint
-\o "x,y"
-\o "10,20"
+\li QPoint
+\li "x,y"
+\li "10,20"
\row
-\o QRect
-\o "x,y,WidthxHeight"
-\o "50,50,100x100"
+\li QRect
+\li "x,y,WidthxHeight"
+\li "50,50,100x100"
\row
-\o QSize
-\o "WidthxHeight"
-\o "100x200"
+\li QSize
+\li "WidthxHeight"
+\li "100x200"
\row
-\o QTime
-\o "hh:mm:ss"
-\o "14:22:55"
+\li QTime
+\li "hh:mm:ss"
+\li "14:22:55"
\row
-\o QUrl
-\o URL string
-\o "http://www.example.com"
+\li QUrl
+\li URL string
+\li "http://www.example.com"
\row
-\o QVector3D
-\o "x,y,z"
-\o "0,1,0"
+\li QVector3D
+\li "x,y,z"
+\li "0,1,0"
\row
-\o Enumeration value
-\o Enum value name
-\o "AlignRight"
+\li Enumeration value
+\li Enum value name
+\li "AlignRight"
\endtable
(More details on these string formats and types can be found in the
@@ -615,16 +615,16 @@ in order to update the resources in the package.
To use the resource system in a mixed QML/C++ application:
\list
-\o Create a \c .qrc \l {The Qt Resource System}{resource collection file} that lists resource
+\li Create a \c .qrc \l {The Qt Resource System}{resource collection file} that lists resource
files in XML format
-\o From C++, load the main QML file as a resource using the \c :/ prefix or as a URL with the
+\li From C++, load the main QML file as a resource using the \c :/ prefix or as a URL with the
\c qrc scheme
\endlist
Once this is done, all files specified by relative paths in QML will be loaded from
the resource system instead. Use of the resource system is completely transparent to
the QML layer; this means all QML code should refer to resource files using relative
-paths and should \i not use the \c qrc scheme. This scheme should only be used from
+paths and should \e not use the \c qrc scheme. This scheme should only be used from
C++ code for referring to resource files.
Here is a application packaged using the \l {The Qt Resource System}{Qt resource system}.
diff --git a/doc/src/qml/qtdeclarative.qdoc b/doc/src/qml/qtdeclarative.qdoc
index 9d14f7fc57..20d1c40d66 100644
--- a/doc/src/qml/qtdeclarative.qdoc
+++ b/doc/src/qml/qtdeclarative.qdoc
@@ -95,7 +95,7 @@
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);
\endcode
- The former is the standard form which registers the type \i T as a new type.
+ The former is the standard form which registers the type \e T as a new type.
The latter allows a particular revision of a class to be registered in
a specified version (see \l {QML Type Versioning}).
@@ -245,7 +245,7 @@
may be registered into any given namespace (combination of \a uri, \a versionMajor and \a versionMinor).
This function should be used to register a module API provider function which returns a QJSValue as a module API.
- \bold{NOTE:} QJSValue module API properties will \bold{not} trigger binding re-evaluation if changed.
+ \b{NOTE:} QJSValue module API properties will \b{not} trigger binding re-evaluation if changed.
Usage:
\code
diff --git a/doc/src/qml/qtjavascript.qdoc b/doc/src/qml/qtjavascript.qdoc
index 394435f77b..0775730dd3 100644
--- a/doc/src/qml/qtjavascript.qdoc
+++ b/doc/src/qml/qtjavascript.qdoc
@@ -64,7 +64,7 @@
Custom properties can be made available to scripts by registering
them with the script engine. This is most easily done by setting
- properties of the script engine's \i{Global Object}:
+ properties of the script engine's \e{Global Object}:
\snippet doc/src/snippets/qtjavascript/registeringvalues/main.cpp 0
diff --git a/doc/src/qml/qtprogrammers.qdoc b/doc/src/qml/qtprogrammers.qdoc
index 9338a2c29f..fd47d9bf58 100644
--- a/doc/src/qml/qtprogrammers.qdoc
+++ b/doc/src/qml/qtprogrammers.qdoc
@@ -31,7 +31,7 @@
\title QML for Qt Programmers
\brief learning QML for programmers with Qt knowledge
-While QML does not require Qt knowledge to use, if you \i are already familiar with Qt,
+While QML does not require Qt knowledge to use, if you \e are already familiar with Qt,
much of your knowledge is directly relevant to learning and using QML. Of course,
an application with a user interface defined in QML also uses Qt for all the non-UI
logic.
@@ -41,14 +41,14 @@ logic.
QML provides direct access to the following concepts from Qt:
\list
- \o QAction - the \l {QML Basic Types}{action} type
- \o QObject signals and slots - available as functions to call in JavaScript
- \o QObject properties - available as variables in JavaScript
- \o QWidget - QQuickView is a QML-displaying widget
- \o Qt models - used directly in data binding (QAbstractItemModel)
+ \li QAction - the \l {QML Basic Types}{action} type
+ \li QObject signals and slots - available as functions to call in JavaScript
+ \li QObject properties - available as variables in JavaScript
+ \li QWidget - QQuickView is a QML-displaying widget
+ \li Qt models - used directly in data binding (QAbstractItemModel)
\endlist
-Qt knowledge is \i required for \l{Extending QML with C++},
+Qt knowledge is \e required for \l{Extending QML with C++},
and also for \l{Integrating QML Code with existing Qt UI code}.
\section1 QML Items Compared with Widgets
@@ -60,10 +60,10 @@ look and feel of view delegates, QML Items can be used for this as well.
There are three structurally different types of widget:
\list
- \o Simple widgets that are not used as parents (QLabel, QCheckBox, QToolButton, etc.)
- \o Parent widgets that are normally used as parents to other widgets (QGroupBox,
+ \li Simple widgets that are not used as parents (QLabel, QCheckBox, QToolButton, etc.)
+ \li Parent widgets that are normally used as parents to other widgets (QGroupBox,
QStackedWidget, QTabWidget, etc.)
- \o Compound widgets that are internally composed of child widgets (QComboBox,
+ \li Compound widgets that are internally composed of child widgets (QComboBox,
QSpinBox, QFileDialog, QTabWidget, etc.)
\endlist
@@ -128,9 +128,9 @@ requirement that they be wholly contained ("clipped") to the parent (although th
This difference has rather far-reaching consequences, for example:
\list
-\o A shadow or highlight around a widget could be a child of that widget.
-\o Particle effects can flow outside the object where they originate.
-\o Transitioning animations can "hide" items by visibly moving them beyond
+\li A shadow or highlight around a widget could be a child of that widget.
+\li Particle effects can flow outside the object where they originate.
+\li Transitioning animations can "hide" items by visibly moving them beyond
the screen bounds.
\endlist
diff --git a/doc/src/qml/scope.qdoc b/doc/src/qml/scope.qdoc
index 649653f9e3..15cebc735d 100644
--- a/doc/src/qml/scope.qdoc
+++ b/doc/src/qml/scope.qdoc
@@ -128,7 +128,7 @@ require the use of the JavaScript \c this property.
Care must be used when accessing \l {Attached Properties} from bindings due
to their interaction with the scope object. Conceptually attached properties
-exist on \i all objects, even if they only have an effect on a subset of those.
+exist on \e all objects, even if they only have an effect on a subset of those.
Consequently unqualified attached property reads will always resolve to an
attached property on the scope object, which is not always what the programmer
intended.
diff --git a/doc/src/qml/security.qdoc b/doc/src/qml/security.qdoc
index 262e560d33..190d6930c5 100644
--- a/doc/src/qml/security.qdoc
+++ b/doc/src/qml/security.qdoc
@@ -61,21 +61,21 @@ perform appropriate checks on untrusted data it loads.
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
+ \li Using \c import to import QML or JavaScript you do not control. BAD
+ \li Using \l Loader to import QML you do not control. BAD
+ \li 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.
-There are many good and useful things you \i can do:
+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
+ \li Create \l Image elements with source URLs of any online images. GOOD
+ \li Use XmlListModel to present online content. GOOD
+ \li 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 \i{web browser},
+The only reason this page is necessary at all is that JavaScript, when run in a \e{web browser},
has quite many restrictions. With QML, you should neither rely on similar restrictions, nor
worry about working around them.
*/
diff --git a/doc/src/qtdeclarative.qdoc b/doc/src/qtdeclarative.qdoc
index 9669b6517a..d9b9234c90 100644
--- a/doc/src/qtdeclarative.qdoc
+++ b/doc/src/qtdeclarative.qdoc
@@ -55,14 +55,14 @@ winning App across mobile, embedded, and desktop platforms.
QML Essentials
\enddiv
\list
- \o \l{QML Components}{Components}
- \o \l{Properties and Property Binding in QML}{Properties and Property Binding}
- \o \l{JavaScript Expressions in QML}{JavaScript Code}
- \o \l{QML Signal and Handler Event System}{Signal and Handler Event System}
- \o \l{QML Modules}{Modules}
+ \li \l{QML Components}{Components}
+ \li \l{Properties and Property Binding in QML}{Properties and Property Binding}
+ \li \l{JavaScript Expressions in QML}{JavaScript Code}
+ \li \l{QML Signal and Handler Event System}{Signal and Handler Event System}
+ \li \l{QML Modules}{Modules}
\endlist
\list
- \o \l{What's New in Qt Quick 2}{What's New in Qt Quick}
+ \li \l{What's New in Qt Quick 2}{What's New in Qt Quick}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -70,10 +70,10 @@ winning App across mobile, embedded, and desktop platforms.
QML Engine
\enddiv
\list
- \o \l{The QML Engine}
- \o \l{QML Global Object}
- \o \l{Dynamic Object Management in QML}{Dynamic Object Management}
- \o \l{QML Performance}{Performance}
+ \li \l{The QML Engine}
+ \li \l{QML Global Object}
+ \li \l{Dynamic Object Management in QML}{Dynamic Object Management}
+ \li \l{QML Performance}{Performance}
\endlist
\enddiv
\div {class=" threecolumn_piece"}
@@ -81,12 +81,12 @@ winning App across mobile, embedded, and desktop platforms.
Reference
\enddiv
\list
- \o \l{QML Syntax}
- \o \l{QML Basic Types}{Data Types}
- \o \l{QML Coding Conventions}{Coding Conventions}
- \o \l{QML Security}{Security Model}
- \o \l{QML Scope}{Scope Model}
- \o \l{QML Documents}{Documents}
+ \li \l{QML Syntax}
+ \li \l{QML Basic Types}{Data Types}
+ \li \l{QML Coding Conventions}{Coding Conventions}
+ \li \l{QML Security}{Security Model}
+ \li \l{QML Scope}{Scope Model}
+ \li \l{QML Documents}{Documents}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -94,10 +94,10 @@ winning App across mobile, embedded, and desktop platforms.
QML Bindings with Qt C++
\enddiv
\list
- \o \l{Creating QML Types}
- \o \l{QML Plugins}
- \o \l{Exposing C++ Models}
- \o \l{Integrating QML Code with Existing Qt UI Code}{Qt Gui Porting Information}
+ \li \l{Creating QML Types}
+ \li \l{QML Plugins}
+ \li \l{Exposing C++ Models}
+ \li \l{Integrating QML Code with Existing Qt UI Code}{Qt Gui Porting Information}
\endlist
\enddiv
\div {class=" threecolumn_piece"}
@@ -105,9 +105,9 @@ winning App across mobile, embedded, and desktop platforms.
Tools
\enddiv
\list
- \o \l{QML Internationalization}{Internationalization}
- \o \l{QtQuickTest Reference Documentation}
- \o \l{Debugging QML}
+ \li \l{QML Internationalization}{Internationalization}
+ \li \l{QtQuickTest Reference Documentation}
+ \li \l{Debugging QML}
\endlist
\enddiv
\enddiv
@@ -122,10 +122,10 @@ winning App across mobile, embedded, and desktop platforms.
Graphics and Special Effects
\enddiv
\list
- \o \l{Qt Quick Basic Elements}{Basic Elements}
- \o \l{Painting with Canvas API}
- \o \l{Using the Qt Quick Particle System}{Particle Effects}
- \o \l{Shader Effects in QML}{Shader Effects}
+ \li \l{Qt Quick Basic Elements}{Basic Elements}
+ \li \l{Painting with Canvas API}
+ \li \l{Using the Qt Quick Particle System}{Particle Effects}
+ \li \l{Shader Effects in QML}{Shader Effects}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -133,9 +133,9 @@ winning App across mobile, embedded, and desktop platforms.
Anchoring and Layouts
\enddiv
\list
- \o \l{Component Layouts}
- \o \l{Layouts with Anchors}
- \o \l{QML Right-to-left User Interfaces}{Right-to-left User Interfaces}
+ \li \l{Component Layouts}
+ \li \l{Layouts with Anchors}
+ \li \l{QML Right-to-left User Interfaces}{Right-to-left User Interfaces}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -143,9 +143,9 @@ winning App across mobile, embedded, and desktop platforms.
Mouse and Keyboard Input
\enddiv
\list
- \o \l{QML Mouse Events}{Mouse Events}
- \o \l{QML Text Handling and Validators}{Text Handling and Validators}
- \o \l{Keyboard Focus in QML}{Keyboard Focus}
+ \li \l{QML Mouse Events}{Mouse Events}
+ \li \l{QML Text Handling and Validators}{Text Handling and Validators}
+ \li \l{Keyboard Focus in QML}{Keyboard Focus}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -153,8 +153,8 @@ winning App across mobile, embedded, and desktop platforms.
States and Transitions
\enddiv
\list
- \o \l{QML States}{States}
- \o \l{QML Animation and Transitions}{Animation and Transitions}
+ \li \l{QML States}{States}
+ \li \l{QML Animation and Transitions}{Animation and Transitions}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -162,7 +162,7 @@ winning App across mobile, embedded, and desktop platforms.
Data with Models and Views
\enddiv
\list
- \o \l{QML Models and Views}{Models and Views}
+ \li \l{QML Models and Views}{Models and Views}
\endlist
\enddiv
\div {class="threecolumn_piece"}
@@ -170,8 +170,8 @@ winning App across mobile, embedded, and desktop platforms.
Data Storage and Resources
\enddiv
\list
- \o \l{QML Local Storage}{SQL Local Storage}
- \o \l{Resource Loading and Network Transparency in QML}{Resources and Network Transparency}
+ \li \l{QML Local Storage}{SQL Local Storage}
+ \li \l{Resource Loading and Network Transparency in QML}{Resources and Network Transparency}
\endlist
\enddiv
\enddiv
diff --git a/doc/src/qtquick2/anchor-layout.qdoc b/doc/src/qtquick2/anchor-layout.qdoc
index 6e56768f8a..fb2d8b7d83 100644
--- a/doc/src/qtquick2/anchor-layout.qdoc
+++ b/doc/src/qtquick2/anchor-layout.qdoc
@@ -33,7 +33,7 @@
\target anchor-layout
In addition to the more traditional \l Grid, \l Row, and \l Column,
-QML also provides a way to layout items using the concept of \i anchors.
+QML also provides a way to layout items using the concept of \e anchors.
Each item can be thought of as having a set of 7 invisible "anchor lines":
\l {Item::anchors.left}{left}, \l {Item::anchors.horizontalCenter}{horizontalCenter},
\l {Item::anchors.right}{right}, \l {Item::anchors.top}{top},
@@ -43,7 +43,7 @@ and \l {Item::anchors.bottom}{bottom}.
\image edges_qml.png
The baseline (not pictured above) corresponds to the imaginary line on which
-text would sit. For items with no text it is the same as \i top.
+text would sit. For items with no text it is the same as \e top.
The QML anchoring system allows you to define relationships between the anchor lines of different items. For example, you can write:
@@ -52,7 +52,7 @@ Rectangle { id: rect1; ... }
Rectangle { id: rect2; anchors.left: rect1.right; ... }
\endcode
-In this case, the left edge of \i rect2 is bound to the right edge of \i rect1, producing the following:
+In this case, the left edge of \e rect2 is bound to the right edge of \e rect1, producing the following:
\image edge1.png
@@ -67,8 +67,8 @@ Rectangle { id: rect2; anchors.left: rect1.right; anchors.top: rect1.bottom; ...
\image edge3.png
By specifying multiple horizontal or vertical anchors you can control the size of an item. Below,
-\i rect2 is anchored to the right of \i rect1 and the left of \i rect3. If either of the blue
-rectangles are moved, \i rect2 will stretch and shrink as necessary:
+\e rect2 is anchored to the right of \e rect1 and the left of \e rect3. If either of the blue
+rectangles are moved, \e rect2 will stretch and shrink as necessary:
\code
Rectangle { id: rect1; x: 0; ... }
@@ -84,7 +84,7 @@ and horizontalCenter anchors to the verticalCenter and horizontalCenter of the t
\section1 Anchor Margins and Offsets
-The anchoring system also allows \i margins and \i offsets to be specified for an item's anchors.
+The anchoring system also allows \e margins and \e offsets to be specified for an item's anchors.
Margins specify the amount of empty space to leave to the outside of an item's anchor, while
offsets allow positioning to be manipulated using the center anchor lines. An item can
specify its anchor margins individually through \l {Item::anchors.leftMargin}{leftMargin},
@@ -104,11 +104,11 @@ Rectangle { id: rect1; ... }
Rectangle { id: rect2; anchors.left: rect1.right; anchors.leftMargin: 5; ... }
\endcode
-In this case, a margin of 5 pixels is reserved to the left of \i rect2, producing the following:
+In this case, a margin of 5 pixels is reserved to the left of \e rect2, producing the following:
\image edge2.png
-\note Anchor margins only apply to anchors; they are \i not a generic means of applying margins to an \l Item.
+\note Anchor margins only apply to anchors; they are \e not a generic means of applying margins to an \l Item.
If an anchor margin is specified for an edge but the item is not anchored to any item on that
edge, the margin is not applied.
diff --git a/doc/src/qtquick2/animation.qdoc b/doc/src/qtquick2/animation.qdoc
index cf656fb209..7e74f06abf 100644
--- a/doc/src/qtquick2/animation.qdoc
+++ b/doc/src/qtquick2/animation.qdoc
@@ -34,27 +34,27 @@
\keyword qml-animation-elements
\section1 Animation and Transitions Elements
\list
-\o \l {Transition} - Animates transitions during state changes
-\o \l {SequentialAnimation} - Runs animations sequentially
-\o \l {ParallelAnimation} - Runs animations in parallel
-\o \l {Behavior} - Specifies a default animation for property changes
-\o \l {PropertyAction} - Sets immediate property changes during animation
-\o \l {PauseAnimation} - Introduces a pause in an animation
-\o \l {SmoothedAnimation} - Allows a property to smoothly track a value
-\o \l {SpringAnimation} - Allows a property to track a value in a spring-like motion
-\o \l {ScriptAction} - Runs scripts during an animation
+\li \l {Transition} - Animates transitions during state changes
+\li \l {SequentialAnimation} - Runs animations sequentially
+\li \l {ParallelAnimation} - Runs animations in parallel
+\li \l {Behavior} - Specifies a default animation for property changes
+\li \l {PropertyAction} - Sets immediate property changes during animation
+\li \l {PauseAnimation} - Introduces a pause in an animation
+\li \l {SmoothedAnimation} - Allows a property to smoothly track a value
+\li \l {SpringAnimation} - Allows a property to track a value in a spring-like motion
+\li \l {ScriptAction} - Runs scripts during an animation
\endlist
\keyword qml-property-animation-elements
Elements that animate properties based on data types
\list
-\o \l {PropertyAnimation} - Animates property changes
-\o \l {NumberAnimation} - Animates properties of type qreal
-\o \l {Vector3dAnimation} - Animates properties of type QVector3d
-\o \l {ColorAnimation} - Animates color changes
-\o \l {RotationAnimation} - Animates rotations
-\o \l {ParentAnimation} - Animates parent changes
-\o \l {AnchorAnimation} - Animates anchor changes
+\li \l {PropertyAnimation} - Animates property changes
+\li \l {NumberAnimation} - Animates properties of type qreal
+\li \l {Vector3dAnimation} - Animates properties of type QVector3d
+\li \l {ColorAnimation} - Animates color changes
+\li \l {RotationAnimation} - Animates rotations
+\li \l {ParentAnimation} - Animates parent changes
+\li \l {AnchorAnimation} - Animates anchor changes
\endlist
In QML, animations are created by applying animation elements to property
@@ -78,7 +78,7 @@ directly. This may be done in signal handlers or attached properties.
\snippet doc/src/snippets/qml/animation.qml direct property change
-However, to create more control, \i {property animations} apply smooth movements
+However, to create more control, \e {property animations} apply smooth movements
by interpolating values between property value changes. Property animations
provide timing controls and allows different interpolations through
\l{qml-easing-animation}{easing curves}.
@@ -123,7 +123,7 @@ that the transition applies to any state change.
\section2 Default Animation as Behaviors
-Default property animations are set using \i {behavior animations}. Animations
+Default property animations are set using \e {behavior animations}. Animations
declared in \l {Behavior} elements apply to the property and animates any
property value changes. However, Behavior elements have an
\c enabled property to purposely enable or disable the behavior animations.
@@ -144,7 +144,7 @@ demonstration of behavioral animations.
\section1 Playing Animations in Parallel or in Sequence
-Animations can run \i {in parallel} or \i {in sequence}. Parallel animations
+Animations can run \e {in parallel} or \e {in sequence}. Parallel animations
will play a group of animations at the same time while sequential animations
play a group of animations in order: one after the other. Grouping animations in
\l{SequentialAnimation} and \l{ParallelAnimation} will play the animations in
@@ -202,22 +202,22 @@ of the different easing types.
In addition, QML provides several other elements useful for animation:
\list
-\o PauseAnimation: enables pauses during animations
-\o ScriptAction: allows JavaScript to be executed during an animation, and can
+\li PauseAnimation: enables pauses during animations
+\li ScriptAction: allows JavaScript to be executed during an animation, and can
be used together with StateChangeScript to reused existing scripts
-\o PropertyAction: changes a property \i immediately during an animation,
+\li PropertyAction: changes a property \e immediately during an animation,
without animating the property change
\endlist
These are specialized animation elements that animate different property types
\list
-\o SmoothedAnimation: a specialized NumberAnimation that provides smooth
+\li SmoothedAnimation: a specialized NumberAnimation that provides smooth
changes in animation when the target value changes
-\o SpringAnimation: provides a spring-like animation with specialized
+\li SpringAnimation: provides a spring-like animation with specialized
attributes such as \l {SpringAnimation::}{mass},
\l{SpringAnimation::}{damping} and \l{SpringAnimation::}{epsilon}
-\o ParentAnimation: used for animating a parent change (see ParentChange)
-\o AnchorAnimation: used for animating an anchor change (see AnchorChanges)
+\li ParentAnimation: used for animating a parent change (see ParentChange)
+\li AnchorAnimation: used for animating an anchor change (see AnchorChanges)
\endlist
\section1 Sharing Animation Instances
diff --git a/doc/src/qtquick2/basicelements.qdoc b/doc/src/qtquick2/basicelements.qdoc
index ae212f1964..99eb83bca2 100644
--- a/doc/src/qtquick2/basicelements.qdoc
+++ b/doc/src/qtquick2/basicelements.qdoc
@@ -31,7 +31,7 @@
\title Qt Quick Basic Elements
\brief introduction to the Qt Quick Elements
-Qt Quick includes \i elements for placing components. These can be combined
+Qt Quick includes \e elements for placing components. These can be combined
to form other components.
\code
@@ -40,15 +40,15 @@ import QtQuick 2.0
\section1 Basic Elements
This is a list of some of the elements readily available for users.
\list
-\o \l {Item}
-\o \l {Rectangle}
-\o \l {Image}
-\o \l {Text}
-\o \l {TextInput}
-\o \l {TextEdit}
-\o \l {FocusScope}
-\o \l {Component}
-\o \l {MouseArea}
+\li \l {Item}
+\li \l {Rectangle}
+\li \l {Image}
+\li \l {Text}
+\li \l {TextInput}
+\li \l {TextEdit}
+\li \l {FocusScope}
+\li \l {Component}
+\li \l {MouseArea}
\endlist
For a complete list of QML elements, please visit the \l {QML Elements} page.
diff --git a/doc/src/qtquick2/behaviors-and-states.qdoc b/doc/src/qtquick2/behaviors-and-states.qdoc
index 626b6e61e3..16ee0f9ba5 100644
--- a/doc/src/qtquick2/behaviors-and-states.qdoc
+++ b/doc/src/qtquick2/behaviors-and-states.qdoc
@@ -78,8 +78,8 @@ problem occurs because we have used a Behavior to animate the change in color, a
To state the problem more formally, using States and Behaviors together can cause unexpected behavior when:
\list
-\o a Behavior is used to animate a property change, specifically when moving from an explicitly defined state back to the implicit base state; and
-\o this Behavior can be interrupted to (re-)enter an explicitly defined state.
+\li a Behavior is used to animate a property change, specifically when moving from an explicitly defined state back to the implicit base state; and
+\li this Behavior can be interrupted to (re-)enter an explicitly defined state.
\endlist
The problem occurs because of the way the base state is defined for QML: as the "snapshot" state of the application just prior to entering an explicitly defined state. In this case, if we are in the process of animating from green back
diff --git a/doc/src/qtquick2/canvaspainting.qdoc b/doc/src/qtquick2/canvaspainting.qdoc
index 8590c74913..3b1f742b8f 100644
--- a/doc/src/qtquick2/canvaspainting.qdoc
+++ b/doc/src/qtquick2/canvaspainting.qdoc
@@ -34,8 +34,8 @@
\section1 Canvas Element
\list
- \o \l{Canvas}
- \o \l{Context2D}
+ \li \l{Canvas}
+ \li \l{Context2D}
\endlist
The Canvas and Context2D elements implement the \l{HTML Canvas API 2D Context}
diff --git a/doc/src/qtquick2/elements.qdoc b/doc/src/qtquick2/elements.qdoc
index 4dde7216e5..90d38d7ecb 100644
--- a/doc/src/qtquick2/elements.qdoc
+++ b/doc/src/qtquick2/elements.qdoc
@@ -45,154 +45,154 @@ To see the QML elements listed by functional area, see the
\section1 Basic QML Elements
\list
-\o \l {Item} - Basic item element inherited by QML elements
-\o \l {Component} - Encapsulates QML elements during importing
-\o \l {QtObject} {QtObject} - Basic element containing only the \c {objectName} property
+\li \l {Item} - Basic item element inherited by QML elements
+\li \l {Component} - Encapsulates QML elements during importing
+\li \l {QtObject} {QtObject} - Basic element containing only the \c {objectName} property
\endlist
\section1 Graphics
\list
-\o \l {Rectangle} - A rectangle element
-\o \l {Image} - For incorporating bitmaps into a scene
-\o \l {BorderImage} - Allows the use of images as borders
-\o \l {AnimatedImage} - For playing animations stored in a series of frames
-\o \l {Gradient} - For defining a color gradient
-\o \l {GradientStop} - Used to define a color within a \l {Gradient}
-\o \l {SystemPalette} - Provides access to the Qt palettes
-\o \l {Canvas} - Provides a 2D canvas element
+\li \l {Rectangle} - A rectangle element
+\li \l {Image} - For incorporating bitmaps into a scene
+\li \l {BorderImage} - Allows the use of images as borders
+\li \l {AnimatedImage} - For playing animations stored in a series of frames
+\li \l {Gradient} - For defining a color gradient
+\li \l {GradientStop} - Used to define a color within a \l {Gradient}
+\li \l {SystemPalette} - Provides access to the Qt palettes
+\li \l {Canvas} - Provides a 2D canvas element
\endlist
\section1 Text Handling
\list
-\o \l {Text} - For inserting formatted text into a scene
-\o \l {TextInput} - Captures user key input
-\o \l {TextEdit} - Displays multiple lines of editable formatted text
-\o \l {IntValidator} - Validates values as integers
-\o \l {DoubleValidator} - Validates real values
-\o \l {RegExpValidator} - Validator for string regular expressions
-\o \l {FontLoader} - Loads fonts by name or URL
+\li \l {Text} - For inserting formatted text into a scene
+\li \l {TextInput} - Captures user key input
+\li \l {TextEdit} - Displays multiple lines of editable formatted text
+\li \l {IntValidator} - Validates values as integers
+\li \l {DoubleValidator} - Validates real values
+\li \l {RegExpValidator} - Validator for string regular expressions
+\li \l {FontLoader} - Loads fonts by name or URL
\endlist
\section1 Mouse and Interaction Area
\list
-\o \l {MouseArea} - Sets up an area for mouse interaction
-\o \l {Keys} - Provides components with attached properties to handle key input.
-\o \l {FocusScope} - Element that mediate keyboard focus changes
-\o \l {Flickable} - Provides a surface that can be "flicked"
-\o \l {Flipable} - Provides a surface that produces "flipping" effects
-\o \l {PinchArea} - Enables simple pinch gesture handling
-\o \l {MultiPointTouchArea} - Enables handling of multiple touch points
+\li \l {MouseArea} - Sets up an area for mouse interaction
+\li \l {Keys} - Provides components with attached properties to handle key input.
+\li \l {FocusScope} - Element that mediate keyboard focus changes
+\li \l {Flickable} - Provides a surface that can be "flicked"
+\li \l {Flipable} - Provides a surface that produces "flipping" effects
+\li \l {PinchArea} - Enables simple pinch gesture handling
+\li \l {MultiPointTouchArea} - Enables handling of multiple touch points
\endlist
\section1 Positioners and Repeater
\list
-\o \l {Column} - Arranges its children vertically
-\o \l {Row} - Arranges its children horizontally
-\o \l {Grid} - Positions its children in a grid
-\o \l {Flow} - Positions its children with wrapping support
-\o \l {Repeater} - Uses a model to create multiple components
+\li \l {Column} - Arranges its children vertically
+\li \l {Row} - Arranges its children horizontally
+\li \l {Grid} - Positions its children in a grid
+\li \l {Flow} - Positions its children with wrapping support
+\li \l {Repeater} - Uses a model to create multiple components
\endlist
\section1 Transformations
\list
-\o \l {Scale} - Assigns item scaling behaviors
-\o \l {Rotation} - Assigns item rotation behaviors
-\o \l {Translate} - Assigns item translation behaviors
+\li \l {Scale} - Assigns item scaling behaviors
+\li \l {Rotation} - Assigns item rotation behaviors
+\li \l {Translate} - Assigns item translation behaviors
\endlist
\section1 States
\list
-\o \l {State} - Defines sets of configurations of objects and properties
-\o \l {PropertyChanges} - Describes property changes within a state
-\o \l {StateGroup} - Contains a set of states and state transitions
-\o \l {StateChangeScript} - Allows script binding in a state
-\o \l {ParentChange} - Re-parent an Item in a state change
-\o \l {AnchorChanges} - Change the anchors of an item in a state
+\li \l {State} - Defines sets of configurations of objects and properties
+\li \l {PropertyChanges} - Describes property changes within a state
+\li \l {StateGroup} - Contains a set of states and state transitions
+\li \l {StateChangeScript} - Allows script binding in a state
+\li \l {ParentChange} - Re-parent an Item in a state change
+\li \l {AnchorChanges} - Change the anchors of an item in a state
\endlist
\section1 Animation and Transitions
\list
-\o \l {Transition} - Animates transitions during state changes
-\o \l {SequentialAnimation} - Runs animations sequentially
-\o \l {ParallelAnimation} - Runs animations in parallel
-\o \l {Behavior} - Specifies a default animation for property changes
-\o \l {PropertyAction} - Sets immediate property changes during animation
-\o \l {PauseAnimation} - Introduces a pause in an animation
-\o \l {SmoothedAnimation} - Allows a property to smoothly track a value
-\o \l {SpringAnimation} - Allows a property to track a value in a spring-like motion
-\o \l {ScriptAction} - Runs scripts during an animation
+\li \l {Transition} - Animates transitions during state changes
+\li \l {SequentialAnimation} - Runs animations sequentially
+\li \l {ParallelAnimation} - Runs animations in parallel
+\li \l {Behavior} - Specifies a default animation for property changes
+\li \l {PropertyAction} - Sets immediate property changes during animation
+\li \l {PauseAnimation} - Introduces a pause in an animation
+\li \l {SmoothedAnimation} - Allows a property to smoothly track a value
+\li \l {SpringAnimation} - Allows a property to track a value in a spring-like motion
+\li \l {ScriptAction} - Runs scripts during an animation
\endlist
Elements that animate properties based on data types
\list
-\o \l {PropertyAnimation} - Animates property changes
-\o \l {NumberAnimation} - Animates properties of type qreal
-\o \l {Vector3dAnimation} - Animates properties of type QVector3d
-\o \l {ColorAnimation} - Animates color changes
-\o \l {RotationAnimation} - Animates rotations
-\o \l {ParentAnimation} - Animates parent changes
-\o \l {AnchorAnimation} - Animates anchor changes
-\o \l {PathAnimation} - Animates position along a path
+\li \l {PropertyAnimation} - Animates property changes
+\li \l {NumberAnimation} - Animates properties of type qreal
+\li \l {Vector3dAnimation} - Animates properties of type QVector3d
+\li \l {ColorAnimation} - Animates color changes
+\li \l {RotationAnimation} - Animates rotations
+\li \l {ParentAnimation} - Animates parent changes
+\li \l {AnchorAnimation} - Animates anchor changes
+\li \l {PathAnimation} - Animates position along a path
\endlist
Elements that provide lower-level animation control
\list
-\o \l {PathInterpolator} - Allows manual animation along a path
-\o \l {AnimationController} - Allows manual control of animation progress
+\li \l {PathInterpolator} - Allows manual animation along a path
+\li \l {AnimationController} - Allows manual control of animation progress
\endlist
\section1 Models and Data Handling
\list
-\o \l {QtQuick2::ListModel}{ListModel} - Defines a list of data
-\o \l {QtQuick2::ListElement}{ListElement} - Defines a data item in a \l {QtQuick2::ListModel}{ListModel}
-\o \l {VisualItemModel} - Contains items that already defines its own visual delegate
-\o \l {VisualDataModel} - Encapsulates a model and a delegate
-\o \l {XmlListModel} - Specifies a model using XPath expressions
-\o \l {XmlRole} - Specifies a role for an \l {XmlListModel}
-\o \l {Binding} - Binds any value to any property
-\o \l {Package} - Collection that enables sharing of items within different views
+\li \l {QtQuick2::ListModel}{ListModel} - Defines a list of data
+\li \l {QtQuick2::ListElement}{ListElement} - Defines a data item in a \l {QtQuick2::ListModel}{ListModel}
+\li \l {VisualItemModel} - Contains items that already defines its own visual delegate
+\li \l {VisualDataModel} - Encapsulates a model and a delegate
+\li \l {XmlListModel} - Specifies a model using XPath expressions
+\li \l {XmlRole} - Specifies a role for an \l {XmlListModel}
+\li \l {Binding} - Binds any value to any property
+\li \l {Package} - Collection that enables sharing of items within different views
\endlist
\section1 Views
\list
-\o \l {ListView} - Provides a list visualization of a model
-\o \l {GridView} - Provides a grid visualization of a model
-\o \l {PathView} - Visualizes a model's contents along a path. See \l {Path Definition}{Path Elements} for more information.
+\li \l {ListView} - Provides a list visualization of a model
+\li \l {GridView} - Provides a grid visualization of a model
+\li \l {PathView} - Visualizes a model's contents along a path. See \l {Path Definition}{Path Elements} for more information.
\endlist
\section1 Path Definition
\list
-\o \l {Path} - Defines a path used by \l {PathView}
-\o \l {PathLine} - Defines a line in \l {Path}
-\o \l {PathQuad} - Defines a quadratic Bezier curve in a \l {Path}
-\o \l {PathCubic} - Defines a cubic Bezier curve in a \l {Path}
-\o \l {PathArc} - Defines an arc in a \l {Path}
-\o \l {PathCurve} - Defines a point on a Catmull-Rom curve in a \l {Path}
-\o \l {PathSvg} - Defines a sub-path specified as a SVG path data string in a \l {Path}
-\o \l {PathAttribute} - Allows the setting of attributes along a \l {Path}
-\o \l {PathPercent} - Modifies the item distribution along a \l {Path}
+\li \l {Path} - Defines a path used by \l {PathView}
+\li \l {PathLine} - Defines a line in \l {Path}
+\li \l {PathQuad} - Defines a quadratic Bezier curve in a \l {Path}
+\li \l {PathCubic} - Defines a cubic Bezier curve in a \l {Path}
+\li \l {PathArc} - Defines an arc in a \l {Path}
+\li \l {PathCurve} - Defines a point on a Catmull-Rom curve in a \l {Path}
+\li \l {PathSvg} - Defines a sub-path specified as a SVG path data string in a \l {Path}
+\li \l {PathAttribute} - Allows the setting of attributes along a \l {Path}
+\li \l {PathPercent} - Modifies the item distribution along a \l {Path}
\endlist
\section1 Utility
\list
-\o \l {Connections} - Explicitly connects signals and signal handlers
-\o \l {Timer} - Provides timed triggers
-\o \l {QmlGlobalQtObject}{Qt} - The QML global Qt object provides useful enums and functions from Qt.
-\o \l {WorkerScript} - Enables the use of threads in QML
-\o \l {Loader} - Controls the loading of items or components
+\li \l {Connections} - Explicitly connects signals and signal handlers
+\li \l {Timer} - Provides timed triggers
+\li \l {QmlGlobalQtObject}{Qt} - The QML global Qt object provides useful enums and functions from Qt.
+\li \l {WorkerScript} - Enables the use of threads in QML
+\li \l {Loader} - Controls the loading of items or components
\endlist
\section1 Graphical Effects
\list
-\o \l {ShaderEffect} - Allows GLSL shaders to be used as graphical effects
-\o \l {ShaderEffectSource} - Usable as a texture in ShaderEffect
-\o \l {GridMesh} - Generates a gird mesh of vertices for use by ShaderEffect
-\o The \l{QtQuick.Particles 2} module provides a set of Particle System elements for QtQuick 2
+\li \l {ShaderEffect} - Allows GLSL shaders to be used as graphical effects
+\li \l {ShaderEffectSource} - Usable as a texture in ShaderEffect
+\li \l {GridMesh} - Generates a gird mesh of vertices for use by ShaderEffect
+\li The \l{QtQuick.Particles 2} module provides a set of Particle System elements for QtQuick 2
\endlist
\section1 Accessibility
\list
-\o \l {Accessible} - Attached property to make components accessible
+\li \l {Accessible} - Attached property to make components accessible
\endlist
*/
diff --git a/doc/src/qtquick2/focus.qdoc b/doc/src/qtquick2/focus.qdoc
index e2c4c79d3c..3528169995 100644
--- a/doc/src/qtquick2/focus.qdoc
+++ b/doc/src/qtquick2/focus.qdoc
@@ -34,7 +34,7 @@
When a key is pressed or released, a key event is generated and delivered to the
focused QML \l Item. To facilitate the construction of reusable components
and to address some of the cases unique to fluid user interfaces, the QML items add aged
-\i scope based extension to Qt's traditional keyboard focus model.
+\e scope based extension to Qt's traditional keyboard focus model.
\tableofcontents
@@ -42,13 +42,13 @@ and to address some of the cases unique to fluid user interfaces, the QML items
When the user presses or releases a key, the following occurs:
\list 1
-\o Qt receives the key action and generates a key event.
-\o If the Qt widget containing the \l QQuickView has focus, the key event
+\li Qt receives the key action and generates a key event.
+\li If the Qt widget containing the \l QQuickView has focus, the key event
is delivered to it. Otherwise, regular Qt key handling continues.
-\o The key event is delivered by the scene to the QML \l Item with
-\i {active focus}. If no Item has active focus, the key event is
+\li The key event is delivered by the scene to the QML \l Item with
+\e {active focus}. If no Item has active focus, the key event is
\l {QEvent::ignore()}{ignored} and regular Qt key handling continues.
-\o If the QML Item with active focus accepts the key event, propagation
+\li If the QML Item with active focus accepts the key event, propagation
stops. Otherwise the event is "bubbled up", by recursively passing it to each
Item's parent until either the event is accepted, or the root Item is reached.
@@ -59,7 +59,7 @@ item and thus subsequently be ignored.
\snippet doc/src/snippets/qml/focus/rectangle.qml simple key event
\snippet doc/src/snippets/qml/focus/rectangle.qml simple key event end
-\o If the root \l Item is reached, the key event is \l {QEvent::ignore()}{ignored} and regular Qt key handling continues.
+\li If the root \l Item is reached, the key event is \l {QEvent::ignore()}{ignored} and regular Qt key handling continues.
\endlist
@@ -119,7 +119,7 @@ the focus, but it cannot control the focus when it is imported or reused.
Likewise, the \c window component does not have the ability to know if its
imported components are requesting the focus.
-To solve this problem, the QML introduces a concept known as a \i {focus scope}.
+To solve this problem, the QML introduces a concept known as a \e {focus scope}.
For existing Qt users, a focus scope is like an automatic focus proxy.
A focus scope is created by declaring the \l FocusScope element.
@@ -131,13 +131,13 @@ visual result shown.
\image declarative-qmlfocus3.png
-Conceptually \i {focus scopes} are quite simple.
+Conceptually \e {focus scopes} are quite simple.
\list
-\o Within each focus scope one element may have \c {Item::focus} set to
+\li Within each focus scope one element may have \c {Item::focus} set to
\c true. If more than one \l Item has the \c focus property set, the
last element to set the \c focus will have the focus and the others are unset,
similar to when there are no focus scopes.
-\o When a focus scope receives active focus, the contained element with
+\li When a focus scope receives active focus, the contained element with
\c focus set (if any) also gets the active focus. If this element is
also a \l FocusScope, the proxying behavior continues. Both the
focus scope and the sub-focused item will have \c activeFocus property set.
diff --git a/doc/src/qtquick2/modelview.qdoc b/doc/src/qtquick2/modelview.qdoc
index 5d799027ad..0c66a7810b 100644
--- a/doc/src/qtquick2/modelview.qdoc
+++ b/doc/src/qtquick2/modelview.qdoc
@@ -30,7 +30,7 @@
\brief how to display and form data in QML
Simply put, applications need to form data and display the data. QML has the
-notion of \i models, \i views, and \i delegates to display data. They modularize
+notion of \e models, \e views, and \e delegates to display data. They modularize
the visualization of data in order to give the developer or designer control
over the different aspects of the data. A developer can swap a list view with a
grid view with little changes to the data. Similarly, encapsulating an instance
@@ -39,11 +39,11 @@ handle the data.
\image modelview-overview.png
\list
-\o \bold Model - contains the data and its structure. There are several QML
+\li \b Model - contains the data and its structure. There are several QML
elements for creating models.
-\o \bold View - a container that displays the data. The view might
+\li \b View - a container that displays the data. The view might
display the data in a list or a grid.
-\o \bold Delegate - dictates how the data should appear in the view.
+\li \b Delegate - dictates how the data should appear in the view.
The delegate takes each data in the model and encapsulates it. The data is
accessible through the delegate.
\endlist
@@ -61,9 +61,9 @@ To visualize data, bind the view's \c model property to a model and the
graphical elements:
\list
- \o \l{ListView} - arranges items in a horizontal or vertical list
- \o \l{GridView} - arranges items in a grid within the available space
- \o \l{PathView} - arranges items on a path
+ \li \l{ListView} - arranges items in a horizontal or vertical list
+ \li \l{GridView} - arranges items in a grid within the available space
+ \li \l{PathView} - arranges items on a path
\endlist
These elements have properties and behaviors exclusive to each element.
@@ -71,7 +71,7 @@ To visualize data, bind the view's \c model property to a model and the
\section2 Decorating Views
- Views allow visual customization through \i decoration properties such as
+ Views allow visual customization through \e decoration properties such as
the \c header, \c footer, and \c section properties. By binding an object,
usually another visual object, to these properties, the views are
decoratable. A footer may include a \l Rectangle element showcasing borders
@@ -104,7 +104,7 @@ To visualize data, bind the view's \c model property to a model and the
\section2 ListView Sections
- \l {ListView} contents may be grouped into \i sections, where related list
+ \l {ListView} contents may be grouped into \e sections, where related list
items are labeled according to their sections. Further, the sections may be
decorated with \l{qml-view-delegate}{delegates}.
@@ -125,7 +125,7 @@ To visualize data, bind the view's \c model property to a model and the
\keyword qml-view-delegate
\section1 View Delegates
- Views need a \i delegate to visually represent an item in a list. A view will
+ Views need a \e delegate to visually represent an item in a list. A view will
visualize each item list according to the template defined by the delegate.
Items in a model are accessible through the \c index property as well as the
item's properties.
@@ -146,9 +146,9 @@ To visualize data, bind the view's \c model property to a model and the
properties of each of the views. Similarly, it might be of interest to
access or show some properties of the model.
- In the following example, the delegate shows the property \i{language} of
+ In the following example, the delegate shows the property \e{language} of
the model, and the color of one of the fields depends on the property
- \i{fruit_color} of the view.
+ \e{fruit_color} of the view.
\snippet doc/src/snippets/qml/models/views-models-delegates.qml rectangle
@@ -156,21 +156,21 @@ To visualize data, bind the view's \c model property to a model and the
\section1 Models
Data is provided to the delegate via named data roles which the delegate may
- bind to. Here is a ListModel with two roles, \i type and \i age, and a
+ bind to. Here is a ListModel with two roles, \e type and \e age, and a
ListView with a delegate that binds to these roles to display their values:
\snippet doc/src/snippets/qml/qml-data-models/listmodel-listview.qml document
If there is a naming clash between the model's properties and the delegate's
- properties, the roles can be accessed with the qualified \i model name
- instead. For example, if a \l Text element had \i type or \i age properties,
+ properties, the roles can be accessed with the qualified \e model name
+ instead. For example, if a \l Text element had \e type or \e age properties,
the text in the above example would display those property values instead of
- the \i type and \i age values from the model item. In this case, the
+ the \e type and \e age values from the model item. In this case, the
properties could have been referenced as \c model.type and \c model.age
instead to ensure the delegate displays the property values from the model
item.
- A special \i index role containing the index of the item in the model is
+ A special \e index role containing the index of the item in the model is
also available to the delegate. Note this index is set to -1 if the item is
removed from the model. If you bind to the index role, be sure that the
logic accounts for the possibility of index being -1, i.e. that the item is
@@ -179,9 +179,9 @@ To visualize data, bind the view's \c model property to a model and the
attached property.)
Models that do not have named roles (such as the ListModel shown
- below) will have the data provided via the \i modelData role. The \i
+ below) will have the data provided via the \e modelData role. The \e
modelData role is also provided for models that have only one role. In this
- case the \i modelData role contains the same data as the named role.
+ case the \e modelData role contains the same data as the named role.
QML provides several types of data models among the built-in set of QML
elements. In addition, models can be created with Qt C++ and then made
@@ -199,7 +199,7 @@ To visualize data, bind the view's \c model property to a model and the
\snippet doc/src/snippets/qml/qml-data-models/listelements.qml model
- The above model has two roles, \i name and \i cost. These can be bound
+ The above model has two roles, \e name and \e cost. These can be bound
to by a ListView delegate, for example:
\snippet doc/src/snippets/qml/qml-data-models/listelements.qml view
@@ -214,7 +214,7 @@ To visualize data, bind the view's \c model property to a model and the
\dots
\snippet doc/src/snippets/qml/qml-data-models/dynamic-listmodel.qml mouse area
- When the MouseArea is clicked, \c fruitModel will have two roles, \i cost and \i name.
+ When the MouseArea is clicked, \c fruitModel will have two roles, \e cost and \e name.
Even if subsequent roles are added, only the first two will be handled by views
using the model. To reset the roles available in the model, call ListModel::clear().
@@ -229,7 +229,7 @@ To visualize data, bind the view's \c model property to a model and the
\endcode
- The following model has three roles, \i title, \i link and \i description:
+ The following model has three roles, \e title, \e link and \e description:
\qml
XmlListModel {
id: feedModel
@@ -289,9 +289,9 @@ To visualize data, bind the view's \c model property to a model and the
An object instance can be used to specify a model with a single object
element. The properties of the object are provided as roles.
- The example below creates a list with one item, showing the color of the \i
- myText text. Note the use of the fully qualified \i model.color property to
- avoid clashing with \i color property of the Text element in the delegate.
+ The example below creates a list with one item, showing the color of the \e
+ myText text. Note the use of the fully qualified \e model.color property to
+ avoid clashing with \e color property of the Text element in the delegate.
\qml
Rectangle {
diff --git a/doc/src/qtquick2/mouseevents.qdoc b/doc/src/qtquick2/mouseevents.qdoc
index e452611416..1638311d0c 100644
--- a/doc/src/qtquick2/mouseevents.qdoc
+++ b/doc/src/qtquick2/mouseevents.qdoc
@@ -36,8 +36,8 @@
\section1 Mouse Elements
\list
-\o \l{MouseArea} Element
-\o \l{MouseEvent} Object
+\li \l{MouseArea} Element
+\li \l{MouseEvent} Object
\endlist
\section1 Mouse Event Handling
@@ -65,15 +65,15 @@ mouse events. The \l MouseArea element documentation describes these
gestures in greater detail:
\list
-\o canceled
-\o clicked
-\o doubleClicked
-\o entered
-\o exited
-\o positionChanged
-\o pressAndHold
-\o pressed
-\o released
+\li canceled
+\li clicked
+\li doubleClicked
+\li entered
+\li exited
+\li positionChanged
+\li pressAndHold
+\li pressed
+\li released
\endlist
These signals have signal handlers that are invoked when the signals are emitted.
diff --git a/doc/src/qtquick2/positioners.qdoc b/doc/src/qtquick2/positioners.qdoc
index 55be7087fd..138bb8334f 100644
--- a/doc/src/qtquick2/positioners.qdoc
+++ b/doc/src/qtquick2/positioners.qdoc
@@ -44,10 +44,10 @@ A set of standard positioners are provided in the basic set of Qt Quick
graphical elements:
\list
-\o \l{#Column}{Column} arranges its children in a column
-\o \l{#Row}{Row} arranges its children in a row
-\o \l{#Grid}{Grid} arranges its children in a grid
-\o \l{#Flow}{Flow} arranges its children like words on a page
+\li \l{#Column}{Column} arranges its children in a column
+\li \l{#Row}{Row} arranges its children in a row
+\li \l{#Grid}{Grid} arranges its children in a grid
+\li \l{#Flow}{Flow} arranges its children like words on a page
\endlist
\section2 Column
diff --git a/doc/src/qtquick2/qmltexthandling.qdoc b/doc/src/qtquick2/qmltexthandling.qdoc
index 6e6b2a4c6b..077671ef5f 100644
--- a/doc/src/qtquick2/qmltexthandling.qdoc
+++ b/doc/src/qtquick2/qmltexthandling.qdoc
@@ -37,16 +37,16 @@
\section1 Text Elements
\list
-\o \l{Text}
-\o \l{TextInput}
-\o \l{TextEdit}
+\li \l{Text}
+\li \l{TextInput}
+\li \l{TextEdit}
\endlist
\section1 Validators
\list
-\o \l{IntValidator}
-\o \l{DoubleValidator}
-\o \l{RegExpValidator}
+\li \l{IntValidator}
+\li \l{DoubleValidator}
+\li \l{RegExpValidator}
\endlist
\section1 Displaying Text in QML
diff --git a/doc/src/qtquick2/qtquick-intro.qdoc b/doc/src/qtquick2/qtquick-intro.qdoc
index 9eebb0bddc..0fcf4ef603 100644
--- a/doc/src/qtquick2/qtquick-intro.qdoc
+++ b/doc/src/qtquick2/qtquick-intro.qdoc
@@ -100,23 +100,23 @@ extendibility and openness, while aiming to lower the barrier of entry for
newcomers to Qt Quick and Qt. The key features of Qt Creator allow UI designers
and developers to accomplish the following tasks:
\list
-\o Get started with Qt Quick application development quickly and easily with
+\li Get started with Qt Quick application development quickly and easily with
examples, tutorials, and project wizards.
-\o Design application user interface with the integrated editor, Qt Quick
+\li Design application user interface with the integrated editor, Qt Quick
Designer, or use graphics software to design the user interface and use scripts
to export the design to Qt Quick Designer.
-\o Develop applications with the advanced code editor that provides new powerful
+\li Develop applications with the advanced code editor that provides new powerful
features for completing code snippets, refactoring code, and viewing the element
hierarchy of QML files.
-\o Build and deploy Qt Quick applications that target multiple desktop and
+\li Build and deploy Qt Quick applications that target multiple desktop and
mobile platforms, such as Microsoft Windows, Mac OS X, Linux, and Maemo.
-\o Debug JavaScript functions and execute JavaScript expressions in the current
+\li Debug JavaScript functions and execute JavaScript expressions in the current
context, and inspect QML at runtime to explore the object structure, debug
animations, and inspect colors.
-\o Deploy applications to mobile devices and create application installation
+\li Deploy applications to mobile devices and create application installation
packages for Maemo devices that can be published in the Ovi Store
and other channels.
-\o Easily access information with the integrated context-sensitive Qt Help
+\li Easily access information with the integrated context-sensitive Qt Help
system.
\endlist
@@ -138,6 +138,6 @@ The \l {Qt Quick Code Samples} page has a gallery of QML applications.
\section1 License Information
\list
-\o \l{Qt Quick Licensing Information}
+\li \l{Qt Quick Licensing Information}
\endlist
*/
diff --git a/doc/src/qtquick2/states.qdoc b/doc/src/qtquick2/states.qdoc
index 622a1619b0..cdc7bcd5da 100644
--- a/doc/src/qtquick2/states.qdoc
+++ b/doc/src/qtquick2/states.qdoc
@@ -34,31 +34,31 @@
\target qmlstates
\section1 States Elements
\list
-\o \l State
-\o \l PropertyChanges
-\o \l StateGroup
-\o \l StateChangeScript
-\o \l ParentChange
-\o \l AnchorChanges
+\li \l State
+\li \l PropertyChanges
+\li \l StateGroup
+\li \l StateChangeScript
+\li \l ParentChange
+\li \l AnchorChanges
\endlist
-Many user interface designs are \i state driven; interfaces have configurations
+Many user interface designs are \e state driven; interfaces have configurations
that differ depending on the current state. For example, a traffic signal will
configure its flags or lights depending on its state. While in the signal's
\c stop state, a red light will turn on while the yellow and the green lights
will turn off. In the \c caution state, the yellow light is on while the other
lights are turned off.
-In QML, \i states are a set of property configurations defined in a \l State
+In QML, \e states are a set of property configurations defined in a \l State
element. Different configurations could, for example:
\list
-\o Show some UI elements and hide others
-\o Present different available actions to the user
-\o Start, stop, or pause animations
-\o Execute some script required in the new state
-\o Change a property value for a particular item
-\o Show a different view or screen
+\li Show some UI elements and hide others
+\li Present different available actions to the user
+\li Start, stop, or pause animations
+\li Execute some script required in the new state
+\li Change a property value for a particular item
+\li Show a different view or screen
\endlist
All \l {Item}-based objects have a \c state property, and can specify additional
@@ -94,15 +94,15 @@ assigning a different state whenever the signal receives a mouse click.
The State element is not limited to performing modifications on property values.
It can also:
\list
-\o Run some script using \l StateChangeScript
-\o Override an existing signal handler for an object using \l PropertyChanges
-\o Re-parent an \l Item using \l ParentChange
-\o Modify anchor values using \l AnchorChanges
+\li Run some script using \l StateChangeScript
+\li Override an existing signal handler for an object using \l PropertyChanges
+\li Re-parent an \l Item using \l ParentChange
+\li Modify anchor values using \l AnchorChanges
\endlist
\section1 The Default State
-Every \l Item based component has a \c state property and a \i{default state}.
+Every \l Item based component has a \c state property and a \e{default state}.
The default state is the empty string (\c{""}) and contains all of an item's
initial property values. The default state is useful for managing property
values before state changes. Setting the \c state property to an empty string
@@ -141,13 +141,13 @@ for the engine to fast forward and rewind a state (that is, internally set and u
before it is finally applied. The process is as follows:
\list 1
-\o The state is fast forwarded to determine the complete set of end values.
-\o The state is rewound.
-\o The state is fully applied, with transitions.
+\li The state is fast forwarded to determine the complete set of end values.
+\li The state is rewound.
+\li The state is fully applied, with transitions.
\endlist
In some cases this may cause unintended behavior. For example, a state that changes
-a view's \i model or a Loader's \i sourceComponent will set these properties
+a view's \e model or a Loader's \e sourceComponent will set these properties
multiple times (to apply, rewind, and then reapply), which can be relatively expensive.
State fast forwarding should be considered an implementation detail,
diff --git a/doc/src/qtquick2/writingcomponents.qdoc b/doc/src/qtquick2/writingcomponents.qdoc
index 31267cf20c..864f2d81ea 100644
--- a/doc/src/qtquick2/writingcomponents.qdoc
+++ b/doc/src/qtquick2/writingcomponents.qdoc
@@ -62,8 +62,8 @@ named \c Button.qml, the component is referred to as \c Button:
\table
\row
-\o \snippet doc/src/snippets/qml/qml-extending-types/components/application.qml 0
-\o \image qml-extending-types.png
+\li \snippet doc/src/snippets/qml/qml-extending-types/components/application.qml 0
+\li \image qml-extending-types.png
\endtable
The root object in \c Button.qml defines the attributes that are available to users of the
@@ -83,11 +83,11 @@ To write a useful component, it is generally necessary to provide it with custom
communicate specific data. This is achieved by adding the following attributes to your components:
\list
-\o \bold Properties that can be accessed externally to modify an object (for example, \l Item has
+\li \b Properties that can be accessed externally to modify an object (for example, \l Item has
\l {Item::}{width} and \l {Item::}{height} properties) and used in \l {Property Binding}
-\o \bold Methods of JavaScript code can be invoked internally or externally (for example,
+\li \b Methods of JavaScript code can be invoked internally or externally (for example,
\l Animation has a \l {Animation::}{start()} method)
-\o \bold Signals to notify other objects when an event has occurred (for example, MouseArea has a
+\li \b Signals to notify other objects when an event has occurred (for example, MouseArea has a
\c clicked signal)
\endlist
@@ -119,8 +119,8 @@ an \c ImageViewer object and read or modify the \c currentImage value:
\table
\row
-\o \snippet doc/src/snippets/qml/qml-extending-types/properties/ImageViewer.qml 0
-\o \snippet doc/src/snippets/qml/qml-extending-types/properties/application.qml 0
+\li \snippet doc/src/snippets/qml/qml-extending-types/properties/ImageViewer.qml 0
+\li \snippet doc/src/snippets/qml/qml-extending-types/properties/application.qml 0
\endtable
It is optional for a property to have a default value. The default value is a convenient shortcut, and is
@@ -146,16 +146,16 @@ A number of property types are supported by default. These are listed in the tab
with their default values and the corresponding C++ type:
\table
-\header \o QML Type Name \o Default value \o C++ Type Name
-\row \o \l int \o 0 \o int
-\row \o \l bool \o \c false \o bool
-\row \o \l double \o 0.0 \o double
-\row \o \l real \o 0.0 \o double
-\row \o \l string \o "" (empty string) \o QString
-\row \o \l url \o "" (empty url) \o QUrl
-\row \o \l color \o #000000 (black) \o QColor
-\row \o \l date \o \c undefined \o QDateTime
-\row \o \l variant \o \c undefined \o QVariant
+\header \li QML Type Name \li Default value \li C++ Type Name
+\row \li \l int \li 0 \li int
+\row \li \l bool \li \c false \li bool
+\row \li \l double \li 0.0 \li double
+\row \li \l real \li 0.0 \li double
+\row \li \l string \li "" (empty string) \li QString
+\row \li \l url \li "" (empty url) \li QUrl
+\row \li \l color \li #000000 (black) \li QColor
+\row \li \l date \li \c undefined \li QDateTime
+\row \li \l variant \li \c undefined \li QVariant
\endtable
QML object types can also be used as property types. This includes
@@ -290,8 +290,8 @@ been changed to an alias to the child \l Image object:
\table
\row
-\o \snippet doc/src/snippets/qml/qml-extending-types/properties/alias/ImageViewer.qml 0
-\o \snippet doc/src/snippets/qml/qml-extending-types/properties/alias/application.qml 0
+\li \snippet doc/src/snippets/qml/qml-extending-types/properties/alias/ImageViewer.qml 0
+\li \snippet doc/src/snippets/qml/qml-extending-types/properties/alias/application.qml 0
\endtable
Instead of being limited to setting the \l Image source, \c application.qml can now directly
@@ -411,9 +411,9 @@ The signal hander is named \c on<SignalName>, with the first letter of the signa
cased. The above example item would now have the following signal handlers:
\list
-\o onClicked
-\o onHovered
-\o onPerformAction
+\li onClicked
+\li onHovered
+\li onPerformAction
\endlist
To emit a signal, simply invoke it in the same way as a method. Below left, when the \l MouseArea is
@@ -422,8 +422,8 @@ signal is received by \c application.qml through an \c onButtonClicked signal ha
\table
\row
-\o \snippet doc/src/snippets/qml/qml-extending-types/signals/basic.qml 0
-\o \snippet doc/src/snippets/qml/qml-extending-types/signals/no-parameters.qml 0
+\li \snippet doc/src/snippets/qml/qml-extending-types/signals/basic.qml 0
+\li \snippet doc/src/snippets/qml/qml-extending-types/signals/no-parameters.qml 0
\endtable
If the signal has parameters, they are accessible by parameter name in the signal handler.
@@ -431,8 +431,8 @@ In the example below, \c buttonClicked is emitted with \c xPos and \c yPos param
\table
\row
-\o \snippet doc/src/snippets/qml/qml-extending-types/signals/Button.qml 0
-\o \snippet doc/src/snippets/qml/qml-extending-types/signals/parameters.qml 0
+\li \snippet doc/src/snippets/qml/qml-extending-types/signals/Button.qml 0
+\li \snippet doc/src/snippets/qml/qml-extending-types/signals/parameters.qml 0
\endtable
diff --git a/doc/src/whatsnew.qdoc b/doc/src/whatsnew.qdoc
index c791e72c25..1997a42a6b 100644
--- a/doc/src/whatsnew.qdoc
+++ b/doc/src/whatsnew.qdoc
@@ -40,10 +40,10 @@ QtQuick 2 is based on an OpenGL scenegraph. The following
classes replace their equivalents in QtQuick 1:
\list
-\o QQuickView
-\o QQuickCanvas
-\o QQuickItem
-\o QQuickPaintedItem
+\li QQuickView
+\li QQuickCanvas
+\li QQuickItem
+\li QQuickPaintedItem
\endlist
\section2 QML Engine/Language Improvements
@@ -100,7 +100,7 @@ You can still ignore these events in the handler to let them pass through.
This behavior is triggered with the new property propagateComposedEvents.
The Binding element can now be used as a value source, and will also restore any previously
-set binding when its \i when clause becomes false.
+set binding when its \e when clause becomes false.
Flickable: added dragging, draggingHorizontally and draggingVerically properties.
Added topMargin, bottomMargin, leftMargin, rightMargin, xOrigin, yOrigin properties.
@@ -114,8 +114,8 @@ of integers.
Positioner (Row, Column, Grid, Flow) improvements:
\list
-\o Transitions used for \c add and \c move now have improved features: they can access a ViewTransition attached property (see the ViewTransition documentation for examples) and can now animate arbitrary item properties (instead of being restricted to animating an item's position).
-\o Items in a positioner now have attached properties that can be used to determine a subitem's location: Positioner.index, Positioner.isFirstItem, Positioner.isLastItem.
+\li Transitions used for \c add and \c move now have improved features: they can access a ViewTransition attached property (see the ViewTransition documentation for examples) and can now animate arbitrary item properties (instead of being restricted to animating an item's position).
+\li Items in a positioner now have attached properties that can be used to determine a subitem's location: Positioner.index, Positioner.isFirstItem, Positioner.isLastItem.
\endlist
Loader improvements:
diff --git a/examples/quick/canvas/stockchart/README b/examples/demos/stockchart/README
index 2652866ed6..2652866ed6 100644
--- a/examples/quick/canvas/stockchart/README
+++ b/examples/demos/stockchart/README
diff --git a/examples/quick/canvas/stockchart/com/nokia/StockChartExample/qmldir b/examples/demos/stockchart/com/nokia/StockChartExample/qmldir
index 4c60e556d4..4c60e556d4 100644
--- a/examples/quick/canvas/stockchart/com/nokia/StockChartExample/qmldir
+++ b/examples/demos/stockchart/com/nokia/StockChartExample/qmldir
diff --git a/examples/quick/canvas/stockchart/model.cpp b/examples/demos/stockchart/model.cpp
index 42eb2d592f..42eb2d592f 100644
--- a/examples/quick/canvas/stockchart/model.cpp
+++ b/examples/demos/stockchart/model.cpp
diff --git a/examples/quick/canvas/stockchart/model.h b/examples/demos/stockchart/model.h
index 95e6f4891c..95e6f4891c 100644
--- a/examples/quick/canvas/stockchart/model.h
+++ b/examples/demos/stockchart/model.h
diff --git a/examples/quick/canvas/stockchart/plugin.cpp b/examples/demos/stockchart/plugin.cpp
index 3b354e2b31..3b354e2b31 100644
--- a/examples/quick/canvas/stockchart/plugin.cpp
+++ b/examples/demos/stockchart/plugin.cpp
diff --git a/examples/quick/canvas/stockchart/stock.qml b/examples/demos/stockchart/stock.qml
index 1c95fde2ce..1c95fde2ce 100644
--- a/examples/quick/canvas/stockchart/stock.qml
+++ b/examples/demos/stockchart/stock.qml
diff --git a/examples/quick/canvas/stockchart/stockchart.pro b/examples/demos/stockchart/stockchart.pro
index e368746db5..e368746db5 100644
--- a/examples/quick/canvas/stockchart/stockchart.pro
+++ b/examples/demos/stockchart/stockchart.pro
diff --git a/examples/demos/stockchart/stockchart.qmlproject b/examples/demos/stockchart/stockchart.qmlproject
new file mode 100644
index 0000000000..5f2b9094b3
--- /dev/null
+++ b/examples/demos/stockchart/stockchart.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.1
+
+Project {
+ mainFile: "stock.qml"
+
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+} \ No newline at end of file
diff --git a/examples/quick/canvas/twitterfriends/TwitterUser.qml b/examples/demos/twitterfriends/TwitterUser.qml
index 8b906216ef..8b906216ef 100644
--- a/examples/quick/canvas/twitterfriends/TwitterUser.qml
+++ b/examples/demos/twitterfriends/TwitterUser.qml
diff --git a/examples/quick/canvas/twitterfriends/cache.js b/examples/demos/twitterfriends/cache.js
index 6c8a1cd71a..6c8a1cd71a 100644
--- a/examples/quick/canvas/twitterfriends/cache.js
+++ b/examples/demos/twitterfriends/cache.js
diff --git a/examples/quick/canvas/twitterfriends/twitter.qml b/examples/demos/twitterfriends/friends.qml
index 9dc2bcc939..841b8bd2e1 100644
--- a/examples/quick/canvas/twitterfriends/twitter.qml
+++ b/examples/demos/twitterfriends/friends.qml
@@ -39,7 +39,6 @@
****************************************************************************/
import QtQuick 2.0
-import "../contents"
import "cache.js" as TwitterUserCache
Rectangle {
width:360
diff --git a/examples/demos/twitterfriends/twitterfriends.qmlproject b/examples/demos/twitterfriends/twitterfriends.qmlproject
new file mode 100644
index 0000000000..e841dee105
--- /dev/null
+++ b/examples/demos/twitterfriends/twitterfriends.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.1
+
+Project {
+ mainFile: "friends.qml"
+
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+} \ No newline at end of file
diff --git a/examples/localstorage/localstorage.pro b/examples/localstorage/localstorage.pro
index 967108504e..99f498d5df 100644
--- a/examples/localstorage/localstorage.pro
+++ b/examples/localstorage/localstorage.pro
@@ -1 +1,9 @@
-TEMPLATE = subdirs
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/qtquick/localstorage
+qml.files = localstorage.qml hello.qml
+qml.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/qtquick/localstorage
+INSTALLS += target qml \ No newline at end of file
diff --git a/examples/localstorage/localstorage.qml b/examples/localstorage/localstorage.qml
new file mode 100644
index 0000000000..f967518de8
--- /dev/null
+++ b/examples/localstorage/localstorage.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../shared" as Examples
+
+/*!
+ \title QtQuick Examples - Local Storage
+ \example qtquick/localstorage
+ \brief This is a collection of QML local storage examples
+ \image qml-localstorage-example.png
+
+ This is a collection of small QML examples relating to local storage functionality.
+
+ Hello World demos creating a simple SQL table and how to do inserting/selecting operations.
+
+*/
+
+Item {
+ height: 480
+ width: 320
+ Examples.LauncherList {
+ id: ll
+ anchors.fill: parent
+ Component.onCompleted: {
+ addExample("Hello World", "Simple SQL operations with local storage API", Qt.resolvedUrl("hello.qml"));
+ }
+ }
+} \ No newline at end of file
diff --git a/examples/localstorage/localstorage.qmlproject b/examples/localstorage/localstorage.qmlproject
new file mode 100644
index 0000000000..6835d23503
--- /dev/null
+++ b/examples/localstorage/localstorage.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ mainFile: "localstorage.qml"
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+} \ No newline at end of file
diff --git a/examples/localstorage/main.cpp b/examples/localstorage/main.cpp
new file mode 100644
index 0000000000..484fcdbefc
--- /dev/null
+++ b/examples/localstorage/main.cpp
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(localstorage) \ No newline at end of file
diff --git a/examples/qml/xmlhttprequest/xmlhttprequest-example.qml b/examples/qml/xmlhttprequest/get.qml
index 28ba078160..28ba078160 100644
--- a/examples/qml/xmlhttprequest/xmlhttprequest-example.qml
+++ b/examples/qml/xmlhttprequest/get.qml
diff --git a/examples/qml/xmlhttprequest/main.cpp b/examples/qml/xmlhttprequest/main.cpp
new file mode 100644
index 0000000000..8768dd1cfd
--- /dev/null
+++ b/examples/qml/xmlhttprequest/main.cpp
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(xmlhttprequest) \ No newline at end of file
diff --git a/examples/qml/xmlhttprequest/xmlhttprequest.pro b/examples/qml/xmlhttprequest/xmlhttprequest.pro
new file mode 100644
index 0000000000..468afdfc65
--- /dev/null
+++ b/examples/qml/xmlhttprequest/xmlhttprequest.pro
@@ -0,0 +1,9 @@
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/qtquick/xmlhttprequest
+qml.files = xmlhttprequest.qml get.qml
+qml.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/qtquick/xmlhttprequest
+INSTALLS += target qml \ No newline at end of file
diff --git a/examples/qml/xmlhttprequest/xmlhttprequest.qml b/examples/qml/xmlhttprequest/xmlhttprequest.qml
new file mode 100644
index 0000000000..efe7d428db
--- /dev/null
+++ b/examples/qml/xmlhttprequest/xmlhttprequest.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../../shared" as Examples
+
+/*!
+ \title QtQuick Examples - XMLHttpRequst
+ \example qtquick/xmlhttprequest
+ \brief This is a collection of XMLHttpRequest examples
+ \image qml-xmlhttprequest-example.png
+
+ This is a collection of small QML examples relating to XML HTTP request functionality.
+
+ Get data demos sending get XML request and showing the received header and XML body.
+
+*/
+
+Item {
+ height: 480
+ width: 320
+ Examples.LauncherList {
+ id: ll
+ anchors.fill: parent
+ Component.onCompleted: {
+ addExample("Get data", "Send get request and show received header and body", Qt.resolvedUrl("get.qml"));
+ }
+ }
+} \ No newline at end of file
diff --git a/examples/qml/xmlhttprequest/xmlhttprequest.qmlproject b/examples/qml/xmlhttprequest/xmlhttprequest.qmlproject
new file mode 100644
index 0000000000..088042a100
--- /dev/null
+++ b/examples/qml/xmlhttprequest/xmlhttprequest.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ mainFile: "xmlhttprequest.qml"
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+} \ No newline at end of file
diff --git a/examples/quick/canvas/bezierCurve/bezierCurve.qml b/examples/quick/canvas/bezierCurve/bezierCurve.qml
index f57839b0a5..4fb0fa82f0 100644
--- a/examples/quick/canvas/bezierCurve/bezierCurve.qml
+++ b/examples/quick/canvas/bezierCurve/bezierCurve.qml
@@ -42,18 +42,18 @@ import QtQuick 2.0
import "../contents"
Item {
id:container
- width:360
- height:600
+ width:320
+ height:480
Column {
spacing:5
anchors.fill:parent
- Text { font.pointSize:25; text:"Bezier Curve"; anchors.horizontalCenter:parent.horizontalCenter}
+ Text { font.pointSize:15; text:"Bezier Curve"; anchors.horizontalCenter:parent.horizontalCenter}
Canvas {
id:canvas
- width:360
- height:360
+ width:320
+ height:280
property string strokeStyle:"red"
property string fillStyle:"red"
property int lineWidth:lineWidthCtrl.value
@@ -109,15 +109,15 @@ Item {
Rectangle {
id:controls
- width:360
- height:160
+ width:320
+ height:150
Column {
spacing:3
- Slider {id:lineWidthCtrl; width:300; height:30; min:1; max:10; init:2; name:"Line width"}
- Slider {id:scaleXCtrl; width:300; height:30; min:0.1; max:10; init:1; name:"ScaleX"}
- Slider {id:scaleYCtrl; width:300; height:30; min:0.1; max:10; init:1; name:"ScaleY"}
- Slider {id:rotateCtrl; width:300; height:30; min:0; max:Math.PI*2; init:0; name:"Rotate"}
- Slider {id:alphaCtrl; width:300; height:30; min:0; max:1; init:1; name:"Alpha"}
+ Slider {id:lineWidthCtrl; width:300; height:20; min:1; max:10; init:2; name:"Line width"}
+ Slider {id:scaleXCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleX"}
+ Slider {id:scaleYCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleY"}
+ Slider {id:rotateCtrl; width:300; height:20; min:0; max:Math.PI*2; init:0; name:"Rotate"}
+ Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
}
}
}
diff --git a/examples/quick/canvas/canvas.pro b/examples/quick/canvas/canvas.pro
new file mode 100644
index 0000000000..5ae914a062
--- /dev/null
+++ b/examples/quick/canvas/canvas.pro
@@ -0,0 +1,9 @@
+TEMPLATE = app
+
+QT += quick declarative
+SOURCES += main.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/quick/canvas
+qml.files = canvas.qml bezierCurve clip quadraticCurveTo roundedrect smile squircle tiger
+qml.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/quick/canvas
+INSTALLS += target qml \ No newline at end of file
diff --git a/examples/quick/canvas/canvas.qml b/examples/quick/canvas/canvas.qml
new file mode 100644
index 0000000000..bdb58f4c78
--- /dev/null
+++ b/examples/quick/canvas/canvas.qml
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../../shared" as Examples
+
+/*!
+ \title QtQuick Examples - Canvas
+ \example quick/canvas
+ \brief This is a collection of QML Canvas examples.
+
+ This is a collection of small QML examples relating to Canvas item. Each example is
+ a small QML file emphasizing a particular element or feature.
+
+ Red heart demonstrates using a bezierCurve API to stroke and fill a red heart.
+
+ Talk bubble demonstrates using a quadraticCurveTo API to stroke and fill a customized talk bubble,
+ this example also demonstrates the fillText API.
+
+ Squircle demonstrates using a collection of simple moveTo/lineTo path APIs to draw a smooth squircle.
+
+ Rounded rectangle demonstrates using a collection if lineTo/arcTo path APIs to draw a rounded rectangle.
+
+ Smile face demonstrates using several complex path APIs to draw an fill a smile face.
+
+ Clip demonstrates using clip API to clip a given image.
+
+ Tiger demonstrates using SVG path API to draw a tiger with a collection of SVG path strings.
+
+*/
+
+Item {
+ height: 480
+ width: 320
+ Examples.LauncherList {
+ id: ll
+ anchors.fill: parent
+ Component.onCompleted: {
+ addExample("Red heart", "Draws a red heart with bezier curves", Qt.resolvedUrl("bezierCurve/bezierCurve.qml"));
+ addExample("Talk bubble", "Draws a talk bubble with quadratic curves", Qt.resolvedUrl("quadraticCurveTo/quadraticCurveTo.qml"));
+ addExample("Squircle", "Draws a smooth squircle with simple lines", Qt.resolvedUrl("squircle/squircle.qml"));
+ addExample("Rounded rectangle", "Draws a rounded rectangle with lines and arcs", Qt.resolvedUrl("roundedrect/roundedrect.qml"));
+ addExample("Smile face", "Draws a smile face with complex paths", Qt.resolvedUrl("smile/smile.qml"));
+ addExample("Clip", "Shows the canvas clip feature", Qt.resolvedUrl("clip/clip.qml"));
+ addExample("Tiger", "Draw a tiger with a collection of SVG paths", Qt.resolvedUrl("tiger/tiger.qml"));
+ }
+ }
+}
diff --git a/examples/quick/canvas/clip/clip.qml b/examples/quick/canvas/clip/clip.qml
index d861ff0a46..e8597f062f 100644
--- a/examples/quick/canvas/clip/clip.qml
+++ b/examples/quick/canvas/clip/clip.qml
@@ -42,17 +42,17 @@ import QtQuick 2.0
import "../contents"
Item {
id:container
- width:360
- height:600
+ width:320
+ height:480
Column {
spacing:5
anchors.fill:parent
- Text { font.pointSize:25; text:"Makes squircle icon with clip"; anchors.horizontalCenter:parent.horizontalCenter}
+ Text { font.pointSize:15; text:"Makes squircle icon with clip"; anchors.horizontalCenter:parent.horizontalCenter}
Canvas {
id:canvas
- width:360
- height:360
+ width:320
+ height:280
property string strokeStyle:"blue"
property string fillStyle:"steelblue"
property int lineWidth:2
@@ -135,15 +135,15 @@ Item {
Rectangle {
id:controls
- width:360
- height:160
+ width:320
+ height:150
Column {
spacing:3
- Slider {id:nCtrl; width:300; height:30; min:1; max:10; init:4; name:"N"}
- Slider {id:rCtrl; width:300; height:30; min:30; max:180; init:100; name:"Radius"}
- Slider {id:xCtrl; width:300; height:30; min:50; max:300; init:180; name:"X"}
- Slider {id:yCtrl; width:300; height:30; min:30; max:300; init:220; name:"Y"}
- Slider {id:alphaCtrl; width:300; height:30; min:0; max:1; init:1; name:"Alpha"}
+ Slider {id:nCtrl; width:300; height:20; min:1; max:10; init:4; name:"N"}
+ Slider {id:rCtrl; width:300; height:20; min:30; max:180; init:100; name:"Radius"}
+ Slider {id:xCtrl; width:300; height:20; min:50; max:300; init:180; name:"X"}
+ Slider {id:yCtrl; width:300; height:20; min:30; max:300; init:220; name:"Y"}
+ Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
}
}
}
diff --git a/examples/quick/canvas/contents/Button.qml b/examples/quick/canvas/contents/Button.qml
index 1413cdb9fa..ab9ce350db 100644
--- a/examples/quick/canvas/contents/Button.qml
+++ b/examples/quick/canvas/contents/Button.qml
@@ -84,4 +84,4 @@ Item {
PropertyChanges { target: pressed; opacity: 1 }
}
]
-} \ No newline at end of file
+}
diff --git a/examples/quick/canvas/main.cpp b/examples/quick/canvas/main.cpp
new file mode 100644
index 0000000000..64c2a5553f
--- /dev/null
+++ b/examples/quick/canvas/main.cpp
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(canvas) \ No newline at end of file
diff --git a/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml b/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
index bc3ca0071a..9be60c9acc 100644
--- a/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
+++ b/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
@@ -42,18 +42,18 @@ import QtQuick 2.0
import "../contents"
Item {
id:container
- width:360
- height:600
+ width:320
+ height:480
Column {
spacing:5
anchors.fill:parent
- Text { font.pointSize:25; text:"Quadratic Curve"; anchors.horizontalCenter:parent.horizontalCenter}
+ Text { font.pointSize:15; text:"Quadratic Curve"; anchors.horizontalCenter:parent.horizontalCenter}
Canvas {
id:canvas
- width:360
- height:360
+ width:320
+ height:280
property string strokeStyle:"steelblue"
property string fillStyle:"yellow"
property int lineWidth:lineWidthCtrl.value
@@ -113,15 +113,15 @@ Item {
Rectangle {
id:controls
- width:360
- height:160
+ width:320
+ height:150
Column {
spacing:3
- Slider {id:lineWidthCtrl; width:300; height:30; min:1; max:10; init:2; name:"Line width"}
- Slider {id:scaleXCtrl; width:300; height:30; min:0.1; max:10; init:1; name:"ScaleX"}
- Slider {id:scaleYCtrl; width:300; height:30; min:0.1; max:10; init:1; name:"ScaleY"}
- Slider {id:rotateCtrl; width:300; height:30; min:0; max:Math.PI*2; init:0; name:"Rotate"}
- Slider {id:alphaCtrl; width:300; height:30; min:0; max:1; init:1; name:"Alpha"}
+ Slider {id:lineWidthCtrl; width:300; height:20; min:1; max:10; init:2; name:"Line width"}
+ Slider {id:scaleXCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleX"}
+ Slider {id:scaleYCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleY"}
+ Slider {id:rotateCtrl; width:300; height:20; min:0; max:Math.PI*2; init:0; name:"Rotate"}
+ Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
}
}
}
diff --git a/examples/quick/canvas/roundedrect/roundedrect.qml b/examples/quick/canvas/roundedrect/roundedrect.qml
index fd86c63a3b..a773895563 100644
--- a/examples/quick/canvas/roundedrect/roundedrect.qml
+++ b/examples/quick/canvas/roundedrect/roundedrect.qml
@@ -42,17 +42,17 @@ import QtQuick 2.0
import "../contents"
Item {
id:container
- width:360
- height:600
+ width:320
+ height:480
Column {
spacing:5
anchors.fill:parent
- Text { font.pointSize:25; text:"Rounded rectangle"; anchors.horizontalCenter:parent.horizontalCenter}
+ Text { font.pointSize:15; text:"Rounded rectangle"; anchors.horizontalCenter:parent.horizontalCenter}
Canvas {
id:canvas
- width:360
- height:360
+ width:320
+ height:280
smooth:true
renderTarget:Canvas.Image
renderStrategy: Canvas.Immediate
@@ -110,15 +110,15 @@ Item {
Rectangle {
id:controls
- width:360
- height:160
+ width:320
+ height:150
Column {
spacing:3
- Slider {id:lineWidthCtrl; width:300; height:30; min:1; max:10; init:2; name:"Line width"}
- Slider {id:rxCtrl; width:300; height:30; min:5; max:30; init:10; name:"rectx"}
- Slider {id:ryCtrl; width:300; height:30; min:5; max:30; init:10; name:"recty"}
- Slider {id:rCtrl; width:300; height:30; min:10; max:100; init:40; name:"Radius"}
- Slider {id:alphaCtrl; width:300; height:30; min:0; max:1; init:1; name:"Alpha"}
+ Slider {id:lineWidthCtrl; width:300; height:20; min:1; max:10; init:2; name:"Line width"}
+ Slider {id:rxCtrl; width:300; height:20; min:5; max:30; init:10; name:"rectx"}
+ Slider {id:ryCtrl; width:300; height:20; min:5; max:30; init:10; name:"recty"}
+ Slider {id:rCtrl; width:300; height:20; min:10; max:100; init:40; name:"Radius"}
+ Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
}
}
}
diff --git a/examples/quick/canvas/smile/smile.qml b/examples/quick/canvas/smile/smile.qml
index 28a48a6c81..4ab040ce94 100644
--- a/examples/quick/canvas/smile/smile.qml
+++ b/examples/quick/canvas/smile/smile.qml
@@ -42,18 +42,18 @@ import QtQuick 2.0
import "../contents"
Item {
id:container
- width:360
- height:600
+ width:320
+ height:480
Column {
spacing:5
anchors.fill:parent
- Text { font.pointSize:25; text:"Smile with arcs"; anchors.horizontalCenter:parent.horizontalCenter}
+ Text { font.pointSize:15; text:"Smile with arcs"; anchors.horizontalCenter:parent.horizontalCenter}
Canvas {
id:canvas
- width:360
- height:360
+ width:320
+ height:280
smooth:true
renderTarget:Canvas.Image
renderStrategy: Canvas.Immediate
@@ -113,15 +113,15 @@ Item {
Rectangle {
id:controls
- width:360
- height:160
+ width:320
+ height:150
Column {
spacing:3
- Slider {id:lineWidthCtrl; width:300; height:30; min:1; max:10; init:2; name:"Line width"}
- Slider {id:scaleXCtrl; width:300; height:30; min:0.1; max:10; init:1; name:"ScaleX"}
- Slider {id:scaleYCtrl; width:300; height:30; min:0.1; max:10; init:1; name:"ScaleY"}
- Slider {id:rotateCtrl; width:300; height:30; min:0; max:Math.PI*2; init:0; name:"Rotate"}
- Slider {id:alphaCtrl; width:300; height:30; min:0; max:1; init:1; name:"Alpha"}
+ Slider {id:lineWidthCtrl; width:300; height:20; min:1; max:10; init:2; name:"Line width"}
+ Slider {id:scaleXCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleX"}
+ Slider {id:scaleYCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleY"}
+ Slider {id:rotateCtrl; width:300; height:20; min:0; max:Math.PI*2; init:0; name:"Rotate"}
+ Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
}
}
}
diff --git a/examples/quick/canvas/squircle/squircle.qml b/examples/quick/canvas/squircle/squircle.qml
index 2fc65b67b3..e3e764058d 100644
--- a/examples/quick/canvas/squircle/squircle.qml
+++ b/examples/quick/canvas/squircle/squircle.qml
@@ -42,13 +42,13 @@ import QtQuick 2.0
import "../contents"
Item {
id:container
- width:360
- height:600
+ width:320
+ height:480
Column {
spacing:5
anchors.fill:parent
- Text { font.pointSize:25; text:"Squircles"; anchors.horizontalCenter:parent.horizontalCenter}
+ Text { font.pointSize:15; text:"Squircles"; anchors.horizontalCenter:parent.horizontalCenter}
Image {
anchors.horizontalCenter:parent.horizontalCenter
source:"squircle.png"
@@ -57,8 +57,8 @@ Item {
}
Canvas {
id:canvas
- width:360
- height:360
+ width:320
+ height:250
smooth:true
renderTarget:Canvas.Image
renderStrategy: Canvas.Immediate
@@ -140,15 +140,15 @@ Item {
Rectangle {
id:controls
- width:360
- height:160
+ width:320
+ height:150
Column {
spacing:3
- Slider {id:nCtrl; width:300; height:30; min:1; max:10; init:4; name:"N"}
- Slider {id:rCtrl; width:300; height:30; min:30; max:180; init:100; name:"Radius"}
- Slider {id:xCtrl; width:300; height:30; min:50; max:300; init:180; name:"X"}
- Slider {id:yCtrl; width:300; height:30; min:30; max:300; init:220; name:"Y"}
- Slider {id:alphaCtrl; width:300; height:30; min:0; max:1; init:1; name:"Alpha"}
+ Slider {id:nCtrl; width:300; height:20; min:1; max:10; init:4; name:"N"}
+ Slider {id:rCtrl; width:300; height:20; min:30; max:180; init:100; name:"Radius"}
+ Slider {id:xCtrl; width:300; height:20; min:50; max:300; init:180; name:"X"}
+ Slider {id:yCtrl; width:300; height:20; min:30; max:300; init:220; name:"Y"}
+ Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
}
}
}
diff --git a/examples/quick/canvas/tiger/tiger.qml b/examples/quick/canvas/tiger/tiger.qml
index 2eb1bb2106..6b8e0035a2 100644
--- a/examples/quick/canvas/tiger/tiger.qml
+++ b/examples/quick/canvas/tiger/tiger.qml
@@ -43,18 +43,18 @@ import "../contents"
import "tiger.js" as Tiger
Item {
id:container
- width:360
- height:600
+ width:320
+ height:480
Column {
spacing:5
anchors.fill:parent
- Text { font.pointSize:25; text:"Tiger with SVG path"; anchors.horizontalCenter:parent.horizontalCenter}
+ Text { font.pointSize:15; text:"Tiger with SVG path"; anchors.horizontalCenter:parent.horizontalCenter}
Canvas {
id:canvas
- width:360
- height:360
+ width:320
+ height:280
smooth:true
renderTarget:Canvas.FramebufferObject
renderStrategy: Canvas.Cooperative
@@ -115,14 +115,14 @@ Item {
}
Rectangle {
id:controls
- width:360
- height:160
+ width:320
+ height:150
Column {
spacing:3
- Slider {id:scaleXCtrl; width:300; height:30; min:0.1; max:10; init:0.5; name:"ScaleX"}
- Slider {id:scaleYCtrl; width:300; height:30; min:0.1; max:10; init:0.5; name:"ScaleY"}
- Slider {id:rotateCtrl; width:300; height:30; min:0; max:Math.PI*2; init:0; name:"Rotate"}
- Slider {id:alphaCtrl; width:300; height:30; min:0; max:1; init:1; name:"Alpha"}
+ Slider {id:scaleXCtrl; width:300; height:20; min:0.1; max:10; init:0.5; name:"ScaleX"}
+ Slider {id:scaleYCtrl; width:300; height:20; min:0.1; max:10; init:0.5; name:"ScaleY"}
+ Slider {id:rotateCtrl; width:300; height:20; min:0; max:Math.PI*2; init:0; name:"Rotate"}
+ Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
}
}
}
diff --git a/examples/qtquick/mousearea/mousearea-wheel-example.qml b/examples/quick/mousearea/mousearea-wheel-example.qml
index 60cfb166f8..60cfb166f8 100644
--- a/examples/qtquick/mousearea/mousearea-wheel-example.qml
+++ b/examples/quick/mousearea/mousearea-wheel-example.qml
diff --git a/examples/quick/openglunderqml/squircle.cpp b/examples/quick/openglunderqml/squircle.cpp
index b56f0baaf6..d15295a0ba 100644
--- a/examples/quick/openglunderqml/squircle.cpp
+++ b/examples/quick/openglunderqml/squircle.cpp
@@ -68,7 +68,6 @@ void Squircle::itemChange(ItemChange change, const ItemChangeData &)
}
}
-
void Squircle::paint()
{
if (!m_program) {
@@ -106,6 +105,8 @@ void Squircle::paint()
m_program->setAttributeArray(0, GL_FLOAT, values, 2);
m_program->setUniformValue("t", (float) m_t);
+ glViewport(0, 0, canvas()->width(), canvas()->height());
+
glDisable(GL_DEPTH_TEST);
glClearColor(0, 0, 0, 1);
diff --git a/examples/quick/openglunderqml/squircle.h b/examples/quick/openglunderqml/squircle.h
index 283131a662..9e7a03b75b 100644
--- a/examples/quick/openglunderqml/squircle.h
+++ b/examples/quick/openglunderqml/squircle.h
@@ -55,7 +55,7 @@ public:
Squircle();
qreal t() const { return m_t; }
- void setT(qreal t) { m_t = t; emit tChanged(); }
+ void setT(qreal t) { m_t = t; emit tChanged(); update(); }
void itemChange(ItemChange change, const ItemChangeData &);
diff --git a/src/imports/folderlistmodel/qquickfolderlistmodel.cpp b/src/imports/folderlistmodel/qquickfolderlistmodel.cpp
index d68d7af6d4..294fe184d2 100644
--- a/src/imports/folderlistmodel/qquickfolderlistmodel.cpp
+++ b/src/imports/folderlistmodel/qquickfolderlistmodel.cpp
@@ -208,21 +208,21 @@ void QQuickFolderListModelPrivate::_q_sortFinished(const QList<FileProperty> &li
\e{Elements in the Qt.labs module are not guaranteed to remain compatible
in future versions.}
- \bold{import Qt.labs.folderlistmodel 1.0}
+ \b{import Qt.labs.folderlistmodel 1.0}
The \l folder property specifies the folder to access. Information about the
files and directories in the folder is supplied via the model's interface.
Components access names and paths via the following roles:
\list
- \o \c fileName
- \o \c filePath
- \o \c fileBaseName
- \o \c fileSuffix
- \o \c fileSize
- \o \c fileModified
- \o \c fileAccessed
- \o \c fileIsDir
+ \li \c fileName
+ \li \c filePath
+ \li \c fileBaseName
+ \li \c fileSuffix
+ \li \c fileSize
+ \li \c fileModified
+ \li \c fileAccessed
+ \li \c fileIsDir
\endlist
Additionally a file entry can be differentiated from a folder entry via the
@@ -493,11 +493,11 @@ void QQuickFolderListModel::componentComplete()
The \a sortField property contains field to use for sorting. sortField
may be one of:
\list
- \o Unsorted - no sorting is applied.
- \o Name - sort by filename
- \o LastModified - sort by time modified
- \o Size - sort by file size
- \o Type - sort by file type (extension)
+ \li Unsorted - no sorting is applied.
+ \li Name - sort by filename
+ \li LastModified - sort by time modified
+ \li Size - sort by file size
+ \li Type - sort by file type (extension)
\endlist
\sa sortReversed
@@ -672,14 +672,14 @@ void QQuickFolderListModel::setShowOnlyReadable(bool on)
are available.
\list
- \o \c fileName
- \o \c filePath
- \o \c fileBaseName
- \o \c fileSuffix
- \o \c fileSize
- \o \c fileModified
- \o \c fileAccessed
- \o \c fileIsDir
+ \li \c fileName
+ \li \c filePath
+ \li \c fileBaseName
+ \li \c fileSuffix
+ \li \c fileSize
+ \li \c fileModified
+ \li \c fileAccessed
+ \li \c fileIsDir
\endlist
*/
QVariant QQuickFolderListModel::get(int idx, const QString &property) const
diff --git a/src/imports/localstorage/plugin.cpp b/src/imports/localstorage/plugin.cpp
index 7c55225ed1..0187d06e6a 100644
--- a/src/imports/localstorage/plugin.cpp
+++ b/src/imports/localstorage/plugin.cpp
@@ -480,9 +480,9 @@ import QtQuick.LocalStorage 2.0 as LS
db = LS.openDatabaseSync(identifier, version, description, estimated_size, callback(db))
\endcode
-The above code returns the database identified by \i identifier. If the database does not already exist, it
-is created, and the function \i callback is called with the database as a parameter. \i description
-and \i estimated_size are written to the INI file (described below), but are otherwise currently
+The above code returns the database identified by \e identifier. If the database does not already exist, it
+is created, and the function \e callback is called with the database as a parameter. \e description
+and \e estimated_size are written to the INI file (described below), but are otherwise currently
unused.
May throw exception with code property SQLException.DATABASE_ERR, or SQLException.VERSION_ERR.
@@ -490,51 +490,51 @@ May throw exception with code property SQLException.DATABASE_ERR, or SQLExceptio
When a database is first created, an INI file is also created specifying its characteristics:
\table
-\header \o \bold {Key} \o \bold {Value}
-\row \o Name \o The name of the database passed to \c openDatabase()
-\row \o Version \o The version of the database passed to \c openDatabase()
-\row \o Description \o The description of the database passed to \c openDatabase()
-\row \o EstimatedSize \o The estimated size (in bytes) of the database passed to \c openDatabase()
-\row \o Driver \o Currently "QSQLITE"
+\header \li \b {Key} \li \b {Value}
+\row \li Name \li The name of the database passed to \c openDatabase()
+\row \li Version \li The version of the database passed to \c openDatabase()
+\row \li Description \li The description of the database passed to \c openDatabase()
+\row \li EstimatedSize \li The estimated size (in bytes) of the database passed to \c openDatabase()
+\row \li Driver \li Currently "QSQLITE"
\endtable
This data can be used by application tools.
\section3 db.changeVersion(from, to, callback(tx))
-This method allows you to perform a \i{Scheme Upgrade}.
+This method allows you to perform a \e{Scheme Upgrade}.
-If the current version of \i db is not \i from, then an exception is thrown.
+If the current version of \e db is not \e from, then an exception is thrown.
-Otherwise, a database transaction is created and passed to \i callback. In this function,
-you can call \i executeSql on \i tx to upgrade the database.
+Otherwise, a database transaction is created and passed to \e callback. In this function,
+you can call \e executeSql on \e tx to upgrade the database.
May throw exception with code property SQLException.DATABASE_ERR or SQLException.UNKNOWN_ERR.
\section3 db.transaction(callback(tx))
-This method creates a read/write transaction and passed to \i callback. In this function,
-you can call \i executeSql on \i tx to read and modify the database.
+This method creates a read/write transaction and passed to \e callback. In this function,
+you can call \e executeSql on \e tx to read and modify the database.
If the callback throws exceptions, the transaction is rolled back.
\section3 db.readTransaction(callback(tx))
-This method creates a read-only transaction and passed to \i callback. In this function,
-you can call \i executeSql on \i tx to read the database (with SELECT statements).
+This method creates a read-only transaction and passed to \e callback. In this function,
+you can call \e executeSql on \e tx to read the database (with SELECT statements).
\section3 results = tx.executeSql(statement, values)
-This method executes a SQL \i statement, binding the list of \i values to SQL positional parameters ("?").
+This method executes a SQL \e statement, binding the list of \e values to SQL positional parameters ("?").
It returns a results object, with the following properties:
\table
-\header \o \bold {Type} \o \bold {Property} \o \bold {Value} \o \bold {Applicability}
-\row \o int \o rows.length \o The number of rows in the result \o SELECT
-\row \o var \o rows.item(i) \o Function that returns row \i i of the result \o SELECT
-\row \o int \o rowsAffected \o The number of rows affected by a modification \o UPDATE, DELETE
-\row \o string \o insertId \o The id of the row inserted \o INSERT
+\header \li \b {Type} \li \b {Property} \li \b {Value} \li \b {Applicability}
+\row \li int \li rows.length \li The number of rows in the result \li SELECT
+\row \li var \li rows.item(i) \li Function that returns row \e i of the result \li SELECT
+\row \li int \li rowsAffected \li The number of rows affected by a modification \li UPDATE, DELETE
+\row \li string \li insertId \li The id of the row inserted \li INSERT
\endtable
May throw exception with code property SQLException.DATABASE_ERR, SQLException.SYNTAX_ERR, or SQLException.UNKNOWN_ERR.
diff --git a/src/imports/testlib/TestCase.qml b/src/imports/testlib/TestCase.qml
index 0433483cfd..1f9de5e998 100644
--- a/src/imports/testlib/TestCase.qml
+++ b/src/imports/testlib/TestCase.qml
@@ -407,6 +407,22 @@ Item {
qtest_fail("window not shown", 2)
}
+ function mouseDrag(item, x, y, dx, dy, button, modifiers, delay) {
+ if (item.x === undefined || item.y === undefined)
+ return
+ if (button === undefined)
+ button = Qt.LeftButton
+ if (modifiers === undefined)
+ modifiers = Qt.NoModifier
+ if (delay == undefined)
+ delay = -1
+
+ mousePress(item, x, y, button, modifiers, delay)
+ //trigger draging
+ mouseMove(item, x + util.dragThreshold + 1, y + util.dragThreshold + 1, delay, button)
+ mouseMove(item, x + dx, y + dy, delay, button)
+ }
+
function mouseClick(item, x, y, button, modifiers, delay) {
if (button === undefined)
button = Qt.LeftButton
diff --git a/src/imports/testlib/main.cpp b/src/imports/testlib/main.cpp
index 6473d216c7..18039e7a3f 100644
--- a/src/imports/testlib/main.cpp
+++ b/src/imports/testlib/main.cpp
@@ -48,6 +48,8 @@
#include "private/qtestoptions_p.h"
#include "QtQuick/qquickitem.h"
#include <QtQml/private/qqmlengine_p.h>
+#include <QtGui/QGuiApplication>
+#include <QtGui/qstylehints.h>
QML_DECLARE_TYPE(QuickTestResult)
QML_DECLARE_TYPE(QuickTestEvent)
@@ -61,6 +63,7 @@ class QuickTestUtil : public QObject
Q_OBJECT
Q_PROPERTY(bool printAvailableFunctions READ printAvailableFunctions NOTIFY printAvailableFunctionsChanged)
Q_PROPERTY(bool wrapper READ wrapper NOTIFY wrapperChanged)
+ Q_PROPERTY(int dragThreshold READ dragThreshold NOTIFY dragThresholdChanged)
public:
QuickTestUtil(QObject *parent = 0)
:QObject(parent)
@@ -76,9 +79,13 @@ public:
{
return true;
}
+ int dragThreshold() const { return qApp->styleHints()->startDragDistance(); }
+
Q_SIGNALS:
void printAvailableFunctionsChanged();
void wrapperChanged();
+ void dragThresholdChanged();
+
public Q_SLOTS:
QQmlV8Handle typeName(const QVariant& v) const
diff --git a/src/imports/testlib/testcase.qdoc b/src/imports/testlib/testcase.qdoc
index d8a20e4fc7..f928cdaa44 100644
--- a/src/imports/testlib/testcase.qdoc
+++ b/src/imports/testlib/testcase.qdoc
@@ -180,7 +180,7 @@
and mouseMove() methods can be used to simulate mouse events in a
similar fashion.
- \bold{Note:} keyboard and mouse events can only be delivered once the
+ \b{Note:} keyboard and mouse events can only be delivered once the
main window has been shown. Attempts to deliver events before then
will fail. Use the \l when and windowShown properties to track
when the main window has been shown.
@@ -446,7 +446,7 @@
focused item. If \a delay is larger than 0, the test will wait for
\a delay milliseconds.
- \bold{Note:} At some point you should release the key using keyRelease().
+ \b{Note:} At some point you should release the key using keyRelease().
\sa keyRelease(), keyClick()
*/
diff --git a/src/imports/xmllistmodel/qqmlxmllistmodel.cpp b/src/imports/xmllistmodel/qqmlxmllistmodel.cpp
index 1377859b5e..22072dc75a 100644
--- a/src/imports/xmllistmodel/qqmlxmllistmodel.cpp
+++ b/src/imports/xmllistmodel/qqmlxmllistmodel.cpp
@@ -909,10 +909,10 @@ QQmlV8Handle QQuickXmlListModel::get(int index) const
Specifies the model loading status, which can be one of the following:
\list
- \o XmlListModel.Null - No XML data has been set for this model.
- \o XmlListModel.Ready - The XML data has been loaded into the model.
- \o XmlListModel.Loading - The model is in the process of reading and loading XML data.
- \o XmlListModel.Error - An error occurred while the model was loading. See errorString() for details
+ \li XmlListModel.Null - No XML data has been set for this model.
+ \li XmlListModel.Ready - The XML data has been loaded into the model.
+ \li XmlListModel.Loading - The model is in the process of reading and loading XML data.
+ \li XmlListModel.Error - An error occurred while the model was loading. See errorString() for details
about the error.
\endlist
diff --git a/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.cpp b/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.cpp
index fb18231b94..7d120cacb0 100644
--- a/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.cpp
+++ b/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.cpp
@@ -132,7 +132,7 @@ void QmlOstPlugin::setPort(int port, bool block)
}
d->protocol = new QPacketProtocol(d->ost, this);
QObject::connect(d->protocol, SIGNAL(readyRead()), this, SLOT(readyRead()));
- qWarning("QML Debugger: Waiting for connection via OST."); // This message is part of the signalling - do not change the format!
+ qDebug("QML Debugger: Waiting for connection via OST."); // This message is part of the signalling - do not change the format!
}
void QmlOstPlugin::readyRead()
diff --git a/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp
index 2b12f297e4..4eccd0dd55 100644
--- a/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp
+++ b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp
@@ -147,7 +147,7 @@ void QTcpServerConnection::listen()
d->tcpServer = new QTcpServer(this);
QObject::connect(d->tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection()));
if (d->tcpServer->listen(QHostAddress::Any, d->port))
- qWarning("QML Debugger: Waiting for connection on port %d...", d->port);
+ qDebug("QML Debugger: Waiting for connection on port %d...", d->port);
else
qWarning("QML Debugger: Unable to listen to port %d.", d->port);
}
diff --git a/src/qml/animations/qabstractanimationjob.cpp b/src/qml/animations/qabstractanimationjob.cpp
index a540382847..fecd8fbc5d 100644
--- a/src/qml/animations/qabstractanimationjob.cpp
+++ b/src/qml/animations/qabstractanimationjob.cpp
@@ -161,6 +161,9 @@ void QQmlAnimationTimer::stopTimer()
void QQmlAnimationTimer::registerAnimation(QAbstractAnimationJob *animation, bool isTopLevel)
{
+ if (animation->userControlDisabled())
+ return;
+
QQmlAnimationTimer *inst = instance(true); //we create the instance if needed
inst->registerRunningAnimation(animation);
if (isTopLevel) {
@@ -206,6 +209,8 @@ void QQmlAnimationTimer::unregisterAnimation(QAbstractAnimationJob *animation)
void QQmlAnimationTimer::registerRunningAnimation(QAbstractAnimationJob *animation)
{
+ Q_ASSERT(!animation->userControlDisabled());
+
if (animation->m_isGroup)
return;
@@ -217,6 +222,9 @@ void QQmlAnimationTimer::registerRunningAnimation(QAbstractAnimationJob *animati
void QQmlAnimationTimer::unregisterRunningAnimation(QAbstractAnimationJob *animation)
{
+ if (animation->userControlDisabled())
+ return;
+
if (animation->m_isGroup)
return;
@@ -248,20 +256,21 @@ int QQmlAnimationTimer::closestPauseAnimationTimeToFinish()
/////////////////////////////////////////////////////////////////////////////////////////////////////////
QAbstractAnimationJob::QAbstractAnimationJob()
- : m_isPause(false)
- , m_isGroup(false)
- , m_loopCount(1)
+ : m_loopCount(1)
, m_group(0)
, m_direction(QAbstractAnimationJob::Forward)
, m_state(QAbstractAnimationJob::Stopped)
, m_totalCurrentTime(0)
, m_currentTime(0)
, m_currentLoop(0)
- , m_hasRegisteredTimer(false)
, m_uncontrolledFinishTime(-1)
- , m_wasDeleted(0)
, m_nextSibling(0)
, m_previousSibling(0)
+ , m_wasDeleted(0)
+ , m_hasRegisteredTimer(false)
+ , m_isPause(false)
+ , m_isGroup(false)
+ , m_disableUserControl(false)
{
}
@@ -482,6 +491,23 @@ void QAbstractAnimationJob::resume()
setState(Running);
}
+void QAbstractAnimationJob::setEnableUserControl()
+{
+ m_disableUserControl = false;
+}
+
+bool QAbstractAnimationJob::userControlDisabled() const
+{
+ return m_disableUserControl;
+}
+
+void QAbstractAnimationJob::setDisableUserControl()
+{
+ m_disableUserControl = true;
+ start();
+ pause();
+}
+
void QAbstractAnimationJob::updateState(QAbstractAnimationJob::State newState,
QAbstractAnimationJob::State oldState)
{
diff --git a/src/qml/animations/qabstractanimationjob_p.h b/src/qml/animations/qabstractanimationjob_p.h
index f00090cb30..e7d96ddfce 100644
--- a/src/qml/animations/qabstractanimationjob_p.h
+++ b/src/qml/animations/qabstractanimationjob_p.h
@@ -93,6 +93,9 @@ public:
inline bool isRunning() { return m_state == Running; }
inline bool isStopped() { return m_state == Stopped; }
inline bool isPaused() { return m_state == Paused; }
+ void setDisableUserControl();
+ void setEnableUserControl();
+ bool userControlDisabled() const;
void setCurrentTime(int msecs);
@@ -128,8 +131,6 @@ protected:
void directionChanged(QAbstractAnimationJob::Direction);
//definition
- bool m_isPause;
- bool m_isGroup;
int m_loopCount;
QAnimationGroupJob *m_group;
QAbstractAnimationJob::Direction m_direction;
@@ -139,10 +140,8 @@ protected:
int m_totalCurrentTime;
int m_currentTime;
int m_currentLoop;
- bool m_hasRegisteredTimer;
//records the finish time for an uncontrolled animation (used by animation groups)
int m_uncontrolledFinishTime;
- bool *m_wasDeleted;
struct ChangeListener {
ChangeListener(QAnimationJobChangeListener *l, QAbstractAnimationJob::ChangeTypes t) : listener(l), types(t) {}
@@ -155,6 +154,12 @@ protected:
QAbstractAnimationJob *m_nextSibling;
QAbstractAnimationJob *m_previousSibling;
+ bool *m_wasDeleted;
+ bool m_hasRegisteredTimer:1;
+ bool m_isPause:1;
+ bool m_isGroup:1;
+ bool m_disableUserControl:1;
+
friend class QQmlAnimationTimer;
friend class QAnimationGroupJob;
};
diff --git a/src/qml/debugger/qdebugmessageservice.cpp b/src/qml/debugger/qdebugmessageservice.cpp
index dcaa514cd7..a41f95c2c7 100644
--- a/src/qml/debugger/qdebugmessageservice.cpp
+++ b/src/qml/debugger/qdebugmessageservice.cpp
@@ -69,7 +69,7 @@ public:
QDebugMessageService::QDebugMessageService(QObject *parent) :
QQmlDebugService(*(new QDebugMessageServicePrivate()),
- QLatin1String("DebugMessages"), 2, parent)
+ QStringLiteral("DebugMessages"), 2, parent)
{
Q_D(QDebugMessageService);
diff --git a/src/qml/debugger/qqmldebugserver.cpp b/src/qml/debugger/qqmldebugserver.cpp
index e70632d925..ec3f9dafc2 100644
--- a/src/qml/debugger/qqmldebugserver.cpp
+++ b/src/qml/debugger/qqmldebugserver.cpp
@@ -155,7 +155,7 @@ void QQmlDebugServerPrivate::advertisePlugins()
pluginNames << service->name();
pluginVersions << service->version();
}
- out << QString(QLatin1String("QDeclarativeDebugClient")) << 1 << pluginNames << pluginVersions;
+ out << QString(QStringLiteral("QDeclarativeDebugClient")) << 1 << pluginNames << pluginVersions;
}
QMetaObject::invokeMethod(q, "_q_sendMessages", Qt::QueuedConnection, Q_ARG(QList<QByteArray>, QList<QByteArray>() << message));
@@ -217,8 +217,8 @@ void QQmlDebugServerThread::run()
connection->setPort(m_port, m_block);
} else {
QCoreApplicationPrivate *appD = static_cast<QCoreApplicationPrivate*>(QObjectPrivate::get(qApp));
- qWarning() << QString::fromAscii("QML Debugger: Ignoring \"-qmljsdebugger=%1\". "
- "Remote debugger plugin has not been found.").arg(appD->qmljsDebugArgumentsString());
+ qWarning() << QString(QLatin1String("QML Debugger: Ignoring \"-qmljsdebugger=%1\". "
+ "Remote debugger plugin has not been found.")).arg(appD->qmljsDebugArgumentsString());
}
exec();
@@ -262,9 +262,9 @@ QQmlDebugServer *QQmlDebugServer::instance()
// format: qmljsdebugger=port:3768[,block] OR qmljsdebugger=ost[,block]
if (!appD->qmljsDebugArgumentsString().isEmpty()) {
if (!QQmlEnginePrivate::qml_debugging_enabled) {
- qWarning() << QString::fromLatin1(
+ qWarning() << QString(QLatin1String(
"QML Debugger: Ignoring \"-qmljsdebugger=%1\". "
- "Debugging has not been enabled.").arg(
+ "Debugging has not been enabled.")).arg(
appD->qmljsDebugArgumentsString());
return 0;
}
@@ -273,9 +273,9 @@ QQmlDebugServer *QQmlDebugServer::instance()
if (appD->qmljsDebugArgumentsString().indexOf(QLatin1String("port:")) == 0) {
int separatorIndex = appD->qmljsDebugArgumentsString().indexOf(QLatin1Char(','));
port = appD->qmljsDebugArgumentsString().mid(5, separatorIndex - 5).toInt(&ok);
- pluginName = QLatin1String("qmldbg_tcp");
+ pluginName = QStringLiteral("qmldbg_tcp");
} else if (appD->qmljsDebugArgumentsString().contains(QLatin1String("ost"))) {
- pluginName = QLatin1String("qmldbg_ost");
+ pluginName = QStringLiteral("qmldbg_ost");
ok = true;
}
@@ -298,17 +298,17 @@ QQmlDebugServer *QQmlDebugServer::instance()
}
} else {
- qWarning() << QString::fromLatin1(
+ qWarning() << QString(QLatin1String(
"QML Debugger: Ignoring \"-qmljsdebugger=%1\". "
- "Format is -qmljsdebugger=port:<port>[,block]").arg(
+ "Format is -qmljsdebugger=port:<port>[,block]")).arg(
appD->qmljsDebugArgumentsString());
}
}
#else
if (!appD->qmljsDebugArgumentsString().isEmpty()) {
- qWarning() << QString::fromLatin1(
+ qWarning() << QString(QLatin1String(
"QML Debugger: Ignoring \"-qmljsdebugger=%1\". "
- "QtQml is not configured for debugging.").arg(
+ "QtQml is not configured for debugging.")).arg(
appD->qmljsDebugArgumentsString());
}
#endif
@@ -373,7 +373,7 @@ void QQmlDebugServer::receiveMessage(const QByteArray &message)
pluginVersions << service->version();
}
- out << QString(QLatin1String("QDeclarativeDebugClient")) << 0 << protocolVersion << pluginNames << pluginVersions;
+ out << QString(QStringLiteral("QDeclarativeDebugClient")) << 0 << protocolVersion << pluginNames << pluginVersions;
}
d->connection->send(QList<QByteArray>() << helloAnswer);
@@ -389,7 +389,7 @@ void QQmlDebugServer::receiveMessage(const QByteArray &message)
iter.value()->stateChanged(newState);
}
- qWarning("QML Debugger: Connection established.");
+ qDebug("QML Debugger: Connection established.");
d->messageArrivedCondition.wakeAll();
} else if (op == 1) {
diff --git a/src/qml/debugger/qqmldebugservice.cpp b/src/qml/debugger/qqmldebugservice.cpp
index a1cc4fe0a3..45948490cf 100644
--- a/src/qml/debugger/qqmldebugservice.cpp
+++ b/src/qml/debugger/qqmldebugservice.cpp
@@ -216,11 +216,11 @@ bool QQmlDebugService::hasDebuggingClient()
QString QQmlDebugService::objectToString(QObject *obj)
{
if(!obj)
- return QLatin1String("NULL");
+ return QStringLiteral("NULL");
QString objectName = obj->objectName();
if(objectName.isEmpty())
- objectName = QLatin1String("<unnamed>");
+ objectName = QStringLiteral("<unnamed>");
QString rv = QString::fromUtf8(obj->metaObject()->className()) +
QLatin1String(": ") + objectName;
diff --git a/src/qml/debugger/qqmldebugstatesdelegate_p.h b/src/qml/debugger/qqmldebugstatesdelegate_p.h
index 6e3cc978f2..6d4ac10dbf 100644
--- a/src/qml/debugger/qqmldebugstatesdelegate_p.h
+++ b/src/qml/debugger/qqmldebugstatesdelegate_p.h
@@ -54,6 +54,8 @@
//
#include <QtQml/qtqmlglobal.h>
+#include <QtCore/QList>
+#include <QtCore/QPointer>
QT_BEGIN_HEADER
@@ -74,7 +76,8 @@ protected:
public:
virtual ~QQmlDebugStatesDelegate() {}
- virtual void buildStatesList(QQmlContext *ctxt, bool cleanList) = 0;
+ virtual void buildStatesList(bool cleanList,
+ const QList<QPointer<QObject> > &instances) = 0;
virtual void updateBinding(QQmlContext *context,
const QQmlProperty &property,
const QVariant &expression, bool isLiteralValue,
diff --git a/src/qml/debugger/qqmlenginedebugservice.cpp b/src/qml/debugger/qqmlenginedebugservice.cpp
index 76a88029ea..67bec3577b 100644
--- a/src/qml/debugger/qqmlenginedebugservice.cpp
+++ b/src/qml/debugger/qqmlenginedebugservice.cpp
@@ -67,7 +67,7 @@ QQmlEngineDebugService *QQmlEngineDebugService::instance()
}
QQmlEngineDebugService::QQmlEngineDebugService(QObject *parent)
- : QQmlDebugService(QLatin1String("QDeclarativeEngine"), 1, parent),
+ : QQmlDebugService(QStringLiteral("QDeclarativeEngine"), 1, parent),
m_watch(new QQmlWatcher(this)),
m_statesDelegate(0)
{
@@ -206,12 +206,12 @@ QVariant QQmlEngineDebugService::valueContents(const QVariant &value) const
if (o) {
QString name = o->objectName();
if (name.isEmpty())
- name = QLatin1String("<unnamed object>");
+ name = QStringLiteral("<unnamed object>");
return name;
}
}
- return QLatin1String("<unknown value>");
+ return QString(QStringLiteral("<unknown value>"));
}
void QQmlEngineDebugService::buildObjectDump(QDataStream &message,
@@ -247,7 +247,7 @@ void QQmlEngineDebugService::buildObjectDump(QDataStream &message,
prop.value = expr->expression();
QObject *scope = expr->scopeObject();
if (scope) {
- QString methodName = QLatin1String(scope->metaObject()->method(signal->index()).name().constData());
+ QString methodName = QString::fromLatin1(scope->metaObject()->method(signal->index()).name());
if (!methodName.isEmpty()) {
prop.name = QLatin1String("on") + methodName[0].toUpper()
+ methodName.mid(1);
@@ -295,7 +295,9 @@ void QQmlEngineDebugService::prepareDeferredObjects(QObject *obj)
}
-void QQmlEngineDebugService::buildObjectList(QDataStream &message, QQmlContext *ctxt)
+void QQmlEngineDebugService::buildObjectList(QDataStream &message,
+ QQmlContext *ctxt,
+ const QList<QPointer<QObject> > &instances)
{
QQmlContextData *p = QQmlContextData::get(ctxt);
@@ -316,29 +318,30 @@ void QQmlEngineDebugService::buildObjectList(QDataStream &message, QQmlContext *
child = p->childContexts;
while (child) {
- buildObjectList(message, child->asQQmlContext());
+ buildObjectList(message, child->asQQmlContext(), instances);
child = child->nextChild;
}
- // Clean deleted objects
- QQmlContextPrivate *ctxtPriv = QQmlContextPrivate::get(ctxt);
- for (int ii = 0; ii < ctxtPriv->instances.count(); ++ii) {
- if (!ctxtPriv->instances.at(ii)) {
- ctxtPriv->instances.removeAt(ii);
- --ii;
- }
+ count = 0;
+ for (int ii = 0; ii < instances.count(); ++ii) {
+ QQmlData *data = QQmlData::get(instances.at(ii));
+ if (data->context == p)
+ count ++;
}
+ message << count;
- message << ctxtPriv->instances.count();
- for (int ii = 0; ii < ctxtPriv->instances.count(); ++ii) {
- message << objectData(ctxtPriv->instances.at(ii));
+ for (int ii = 0; ii < instances.count(); ++ii) {
+ QQmlData *data = QQmlData::get(instances.at(ii));
+ if (data->context == p)
+ message << objectData(instances.at(ii));
}
}
-void QQmlEngineDebugService::buildStatesList(QQmlContext *ctxt, bool cleanList)
+void QQmlEngineDebugService::buildStatesList(bool cleanList,
+ const QList<QPointer<QObject> > &instances)
{
if (m_statesDelegate)
- m_statesDelegate->buildStatesList(ctxt, cleanList);
+ m_statesDelegate->buildStatesList(cleanList, instances);
}
QQmlEngineDebugService::QQmlObjectData
@@ -425,8 +428,17 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
rs << QByteArray("LIST_OBJECTS_R") << queryId;
if (engine) {
- buildObjectList(rs, engine->rootContext());
- buildStatesList(engine->rootContext(), true);
+ QQmlContext *rootContext = engine->rootContext();
+ // Clean deleted objects
+ QQmlContextPrivate *ctxtPriv = QQmlContextPrivate::get(rootContext);
+ for (int ii = 0; ii < ctxtPriv->instances.count(); ++ii) {
+ if (!ctxtPriv->instances.at(ii)) {
+ ctxtPriv->instances.removeAt(ii);
+ --ii;
+ }
+ }
+ buildObjectList(rs, rootContext, ctxtPriv->instances);
+ buildStatesList(true, ctxtPriv->instances);
}
sendMessage(reply);
@@ -508,11 +520,11 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
bool undefined = false;
QVariant value = exprObj.evaluate(&undefined);
if (undefined)
- result = QLatin1String("<undefined>");
+ result = QString(QStringLiteral("<undefined>"));
else
result = valueContents(value);
} else {
- result = QLatin1String("<unknown context>");
+ result = QString(QStringLiteral("<unknown context>"));
}
QByteArray reply;
@@ -575,10 +587,8 @@ void QQmlEngineDebugService::setBinding(int objectId,
QQmlPropertyPrivate::setSignalExpression(property, qmlExpression);
qmlExpression->setSourceLocation(filename, line, column);
} else if (property.isProperty()) {
- QQmlBinding *binding = new QQmlBinding(expression.toString(), object, context);
+ QQmlBinding *binding = new QQmlBinding(expression.toString(), false, object, QQmlContextData::get(context), filename, line, column);;
binding->setTarget(property);
- binding->setSourceLocation(filename, line, column);
- binding->setNotifyOnValueChanged(true);
QQmlAbstractBinding *oldBinding = QQmlPropertyPrivate::setBinding(property, binding);
if (oldBinding)
oldBinding->destroy();
@@ -665,11 +675,11 @@ void QQmlEngineDebugService::setMethodBody(int objectId, const QString &method,
QString paramStr;
for (int ii = 0; ii < paramNames.count(); ++ii) {
- if (ii != 0) paramStr.append(QLatin1String(","));
+ if (ii != 0) paramStr.append(QLatin1Char(','));
paramStr.append(QString::fromUtf8(paramNames.at(ii)));
}
- QString jsfunction = QLatin1String("(function ") + method + QLatin1String("(") + paramStr +
+ QString jsfunction = QLatin1String("(function ") + method + QLatin1Char('(') + paramStr +
QLatin1String(") {");
jsfunction += body;
jsfunction += QLatin1String("\n})");
diff --git a/src/qml/debugger/qqmlenginedebugservice_p.h b/src/qml/debugger/qqmlenginedebugservice_p.h
index 1a92801fcc..f41063d7a3 100644
--- a/src/qml/debugger/qqmlenginedebugservice_p.h
+++ b/src/qml/debugger/qqmlenginedebugservice_p.h
@@ -57,6 +57,7 @@
#include <QtCore/qurl.h>
#include <QtCore/qvariant.h>
+#include <QtCore/QPointer>
QT_BEGIN_NAMESPACE
@@ -111,9 +112,10 @@ private Q_SLOTS:
private:
void prepareDeferredObjects(QObject *);
- void buildObjectList(QDataStream &, QQmlContext *);
+ void buildObjectList(QDataStream &, QQmlContext *,
+ const QList<QPointer<QObject> > &instances);
void buildObjectDump(QDataStream &, QObject *, bool, bool);
- void buildStatesList(QQmlContext *, bool);
+ void buildStatesList(bool cleanList, const QList<QPointer<QObject> > &instances);
QQmlObjectData objectData(QObject *);
QQmlObjectProperty propertyData(QObject *, int);
QVariant valueContents(const QVariant &defaultValue) const;
diff --git a/src/qml/debugger/qqmlinspectorservice.cpp b/src/qml/debugger/qqmlinspectorservice.cpp
index c494045bff..5426745bc6 100644
--- a/src/qml/debugger/qqmlinspectorservice.cpp
+++ b/src/qml/debugger/qqmlinspectorservice.cpp
@@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC(QQmlInspectorService, serviceInstance)
QQmlInspectorService::QQmlInspectorService()
- : QQmlDebugService(QLatin1String("QDeclarativeObserverMode"), 1)
+ : QQmlDebugService(QStringLiteral("QDeclarativeObserverMode"), 1)
, m_currentInspectorPlugin(0)
{
registerService();
diff --git a/src/qml/debugger/qqmlprofilerservice.cpp b/src/qml/debugger/qqmlprofilerservice.cpp
index 2731d2046b..c643073308 100644
--- a/src/qml/debugger/qqmlprofilerservice.cpp
+++ b/src/qml/debugger/qqmlprofilerservice.cpp
@@ -77,7 +77,7 @@ QByteArray QQmlProfilerData::toByteArray() const
}
QQmlProfilerService::QQmlProfilerService()
- : QQmlDebugService(QLatin1String("CanvasFrameRate"), 1),
+ : QQmlDebugService(QStringLiteral("CanvasFrameRate"), 1),
m_enabled(false), m_messageReceived(false)
{
m_timer.start();
diff --git a/src/qml/debugger/qv8debugservice.cpp b/src/qml/debugger/qv8debugservice.cpp
index ee60bff742..a6aeda31d5 100644
--- a/src/qml/debugger/qv8debugservice.cpp
+++ b/src/qml/debugger/qv8debugservice.cpp
@@ -120,7 +120,7 @@ public:
QV8DebugService::QV8DebugService(QObject *parent)
: QQmlDebugService(*(new QV8DebugServicePrivate()),
- QLatin1String("V8Debugger"), 2, parent)
+ QStringLiteral("V8Debugger"), 2, parent)
{
Q_D(QV8DebugService);
v8ServiceInstancePtr = this;
diff --git a/src/qml/debugger/qv8profilerservice.cpp b/src/qml/debugger/qv8profilerservice.cpp
index 6473a2f4fb..6208676522 100644
--- a/src/qml/debugger/qv8profilerservice.cpp
+++ b/src/qml/debugger/qv8profilerservice.cpp
@@ -101,7 +101,7 @@ public:
};
QV8ProfilerService::QV8ProfilerService(QObject *parent)
- : QQmlDebugService(*(new QV8ProfilerServicePrivate()), QLatin1String("V8Profiler"), 1, parent)
+ : QQmlDebugService(*(new QV8ProfilerServicePrivate()), QStringLiteral("V8Profiler"), 1, parent)
{
Q_D(QV8ProfilerService);
diff --git a/src/qml/qml/qml.pri b/src/qml/qml/qml.pri
index b3897637e8..5d26197b1c 100644
--- a/src/qml/qml/qml.pri
+++ b/src/qml/qml/qml.pri
@@ -46,7 +46,11 @@ SOURCES += \
$$PWD/qqmlimport.cpp \
$$PWD/qqmllist.cpp \
$$PWD/qqmllocale.cpp \
- $$PWD/qlistmodelinterface.cpp
+ $$PWD/qlistmodelinterface.cpp \
+ $$PWD/qqmlabstractexpression.cpp \
+ $$PWD/qqmljavascriptexpression.cpp \
+ $$PWD/qqmlabstractbinding.cpp \
+ $$PWD/qqmlvaluetypeproxybinding.cpp \
HEADERS += \
$$PWD/qqmlglobal_p.h \
@@ -59,7 +63,6 @@ HEADERS += \
$$PWD/qqml.h \
$$PWD/qquickapplication_p.h \
$$PWD/qqmlbinding_p.h \
- $$PWD/qqmlbinding_p_p.h \
$$PWD/qqmlproperty.h \
$$PWD/qqmlcomponent.h \
$$PWD/qqmlcomponent_p.h \
@@ -114,7 +117,11 @@ HEADERS += \
$$PWD/qqmlscriptstring_p.h \
$$PWD/qqmllocale_p.h \
$$PWD/qlistmodelinterface_p.h \
- $$PWD/qqmlcomponentattached_p.h
+ $$PWD/qqmlcomponentattached_p.h \
+ $$PWD/qqmlabstractexpression_p.h \
+ $$PWD/qqmljavascriptexpression_p.h \
+ $$PWD/qqmlabstractbinding_p.h \
+ $$PWD/qqmlvaluetypeproxybinding_p.h \
include(parser/parser.pri)
include(rewriter/rewriter.pri)
diff --git a/src/qml/qml/qqmlabstractbinding.cpp b/src/qml/qml/qqmlabstractbinding.cpp
new file mode 100644
index 0000000000..acc207e970
--- /dev/null
+++ b/src/qml/qml/qqmlabstractbinding.cpp
@@ -0,0 +1,200 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qqmlabstractbinding_p.h"
+
+#include <QtQml/qqmlinfo.h>
+#include <private/qqmlbinding_p.h>
+#include <private/qqmlvaluetypeproxybinding_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QQmlAbstractBinding::QQmlAbstractBinding()
+: m_prevBinding(0), m_nextBinding(0)
+{
+}
+
+QQmlAbstractBinding::~QQmlAbstractBinding()
+{
+ Q_ASSERT(m_prevBinding == 0);
+ Q_ASSERT(*m_mePtr == 0);
+}
+
+/*!
+Destroy the binding. Use this instead of calling delete.
+
+Bindings are free to implement their own memory management, so the delete operator is not
+necessarily safe. The default implementation clears the binding, removes it from the object
+and calls delete.
+*/
+void QQmlAbstractBinding::destroy()
+{
+ removeFromObject();
+ clear();
+
+ delete this;
+}
+
+/*!
+Add this binding to \a object.
+
+This transfers ownership of the binding to the object, marks the object's property as
+being bound.
+
+However, it does not enable the binding itself or call update() on it.
+*/
+void QQmlAbstractBinding::addToObject()
+{
+ Q_ASSERT(!m_prevBinding);
+
+ QObject *obj = object();
+ Q_ASSERT(obj);
+
+ int index = propertyIndex();
+
+ QQmlData *data = QQmlData::get(obj, true);
+
+ if (index & 0xFF000000) {
+ // Value type
+
+ int coreIndex = index & 0xFFFFFF;
+
+ // Find the value type proxy (if there is one)
+ QQmlValueTypeProxyBinding *proxy = 0;
+ if (data->hasBindingBit(coreIndex)) {
+ QQmlAbstractBinding *b = data->bindings;
+ while (b && b->propertyIndex() != coreIndex)
+ b = b->m_nextBinding;
+ Q_ASSERT(b && b->bindingType() == QQmlAbstractBinding::ValueTypeProxy);
+ proxy = static_cast<QQmlValueTypeProxyBinding *>(b);
+ }
+
+ if (!proxy) {
+ proxy = new QQmlValueTypeProxyBinding(obj, coreIndex);
+
+ Q_ASSERT(proxy->propertyIndex() == coreIndex);
+ Q_ASSERT(proxy->object() == obj);
+
+ proxy->addToObject();
+ }
+
+ m_nextBinding = proxy->m_bindings;
+ if (m_nextBinding) m_nextBinding->m_prevBinding = &m_nextBinding;
+ m_prevBinding = &proxy->m_bindings;
+ proxy->m_bindings = this;
+
+ } else {
+ m_nextBinding = data->bindings;
+ if (m_nextBinding) m_nextBinding->m_prevBinding = &m_nextBinding;
+ m_prevBinding = &data->bindings;
+ data->bindings = this;
+
+ data->setBindingBit(obj, index);
+ }
+}
+
+/*!
+Remove the binding from the object.
+*/
+void QQmlAbstractBinding::removeFromObject()
+{
+ if (m_prevBinding) {
+ int index = propertyIndex();
+
+ *m_prevBinding = m_nextBinding;
+ if (m_nextBinding) m_nextBinding->m_prevBinding = m_prevBinding;
+ m_prevBinding = 0;
+ m_nextBinding = 0;
+
+ if (index & 0xFF000000) {
+ // Value type - we don't remove the proxy from the object. It will sit their happily
+ // doing nothing until it is removed by a write, a binding change or it is reused
+ // to hold more sub-bindings.
+ } else if (QObject *obj = object()) {
+ QQmlData *data = QQmlData::get(obj, false);
+ if (data) data->clearBindingBit(index);
+ }
+ }
+}
+
+void QQmlAbstractBinding::printBindingLoopError(QQmlProperty &prop)
+{
+ qmlInfo(prop.object()) << QString(QLatin1String("Binding loop detected for property \"%1\"")).arg(prop.name());
+}
+
+
+static void bindingDummyDeleter(QQmlAbstractBinding *)
+{
+}
+
+QQmlAbstractBinding::Pointer QQmlAbstractBinding::weakPointer()
+{
+ if (m_mePtr.value().isNull())
+ m_mePtr.value() = QSharedPointer<QQmlAbstractBinding>(this, bindingDummyDeleter);
+
+ return m_mePtr.value().toWeakRef();
+}
+
+void QQmlAbstractBinding::clear()
+{
+ if (!m_mePtr.isNull()) {
+ **m_mePtr = 0;
+ m_mePtr = 0;
+ }
+}
+
+void QQmlAbstractBinding::retargetBinding(QObject *, int)
+{
+ qFatal("QQmlAbstractBinding::retargetBinding() called on illegal binding.");
+}
+
+QString QQmlAbstractBinding::expression() const
+{
+ return QLatin1String("<Unknown>");
+}
+
+void QQmlAbstractBinding::setEnabled(bool enabled, QQmlPropertyPrivate::WriteFlags flags)
+{
+ if (enabled) update(flags);
+}
+
+
+QT_END_NAMESPACE
diff --git a/src/qml/qml/qqmlabstractbinding_p.h b/src/qml/qml/qqmlabstractbinding_p.h
new file mode 100644
index 0000000000..8c4aa4affc
--- /dev/null
+++ b/src/qml/qml/qqmlabstractbinding_p.h
@@ -0,0 +1,132 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQMLABSTRACTBINDING_P_H
+#define QQMLABSTRACTBINDING_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qsharedpointer.h>
+#include <private/qtqmlglobal_p.h>
+#include <private/qqmlproperty_p.h>
+#include <private/qpointervaluepair_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class Q_QML_PRIVATE_EXPORT QQmlAbstractBinding
+{
+public:
+ typedef QWeakPointer<QQmlAbstractBinding> Pointer;
+
+ QQmlAbstractBinding();
+
+ virtual void destroy();
+
+ virtual QString expression() const;
+
+ enum Type { PropertyBinding, ValueTypeProxy };
+ virtual Type bindingType() const { return PropertyBinding; }
+
+ // Should return the encoded property index for the binding. Should return this value
+ // even if the binding is not enabled or added to an object.
+ // Encoding is: coreIndex | (valueTypeIndex << 24)
+ virtual int propertyIndex() const = 0;
+ // Should return the object for the binding. Should return this object even if the
+ // binding is not enabled or added to the object.
+ virtual QObject *object() const = 0;
+
+ void setEnabled(bool e) { setEnabled(e, QQmlPropertyPrivate::DontRemoveBinding); }
+ virtual void setEnabled(bool, QQmlPropertyPrivate::WriteFlags) = 0;
+
+ void update() { update(QQmlPropertyPrivate::DontRemoveBinding); }
+ virtual void update(QQmlPropertyPrivate::WriteFlags) = 0;
+
+ void addToObject();
+ void removeFromObject();
+
+ static inline Pointer getPointer(QQmlAbstractBinding *p);
+ static void printBindingLoopError(QQmlProperty &prop);
+
+protected:
+ virtual ~QQmlAbstractBinding();
+ void clear();
+
+ // Called by QQmlPropertyPrivate to "move" a binding to a different property.
+ // This is only used for alias properties, and only used by QQmlBinding not
+ // V8 or V4 bindings. The default implementation qFatal()'s to ensure that the
+ // method is never called for V4 or V8 bindings.
+ virtual void retargetBinding(QObject *, int);
+private:
+ Pointer weakPointer();
+
+ friend class QQmlData;
+ friend class QQmlComponentPrivate;
+ friend class QQmlValueTypeProxyBinding;
+ friend class QQmlPropertyPrivate;
+ friend class QQmlVME;
+ friend class QtSharedPointer::ExternalRefCount<QQmlAbstractBinding>;
+
+ typedef QSharedPointer<QQmlAbstractBinding> SharedPointer;
+ // To save memory, we also store the rarely used weakPointer() instance in here
+ QPointerValuePair<QQmlAbstractBinding*, SharedPointer> m_mePtr;
+
+ QQmlAbstractBinding **m_prevBinding;
+ QQmlAbstractBinding *m_nextBinding;
+};
+
+QQmlAbstractBinding::Pointer
+QQmlAbstractBinding::getPointer(QQmlAbstractBinding *p)
+{
+ return p ? p->weakPointer() : Pointer();
+}
+
+QT_END_NAMESPACE
+
+#endif // QQMLABSTRACTBINDING_P_H
diff --git a/src/qml/qml/qqmlabstractexpression.cpp b/src/qml/qml/qqmlabstractexpression.cpp
new file mode 100644
index 0000000000..8319f7a619
--- /dev/null
+++ b/src/qml/qml/qqmlabstractexpression.cpp
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qqmlabstractexpression_p.h"
+
+QT_BEGIN_NAMESPACE
+
+QQmlAbstractExpression::QQmlAbstractExpression()
+: m_prevExpression(0), m_nextExpression(0)
+{
+}
+
+QQmlAbstractExpression::~QQmlAbstractExpression()
+{
+ if (m_prevExpression) {
+ *m_prevExpression = m_nextExpression;
+ if (m_nextExpression)
+ m_nextExpression->m_prevExpression = m_prevExpression;
+ }
+
+ if (m_context.isT2())
+ m_context.asT2()->_s = 0;
+}
+
+QQmlContextData *QQmlAbstractExpression::context() const
+{
+ if (m_context.isT1()) return m_context.asT1();
+ else return m_context.asT2()->_c;
+}
+
+void QQmlAbstractExpression::setContext(QQmlContextData *context)
+{
+ if (m_prevExpression) {
+ *m_prevExpression = m_nextExpression;
+ if (m_nextExpression)
+ m_nextExpression->m_prevExpression = m_prevExpression;
+ m_prevExpression = 0;
+ m_nextExpression = 0;
+ }
+
+ if (m_context.isT1()) m_context = context;
+ else m_context.asT2()->_c = context;
+
+ if (context) {
+ m_nextExpression = context->expressions;
+ if (m_nextExpression)
+ m_nextExpression->m_prevExpression = &m_nextExpression;
+ m_prevExpression = &context->expressions;
+ context->expressions = this;
+ }
+}
+
+void QQmlAbstractExpression::refresh()
+{
+}
+
+bool QQmlAbstractExpression::isValid() const
+{
+ return context() != 0;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/qml/qml/qqmlabstractexpression_p.h b/src/qml/qml/qqmlabstractexpression_p.h
new file mode 100644
index 0000000000..fe2ee1762b
--- /dev/null
+++ b/src/qml/qml/qqmlabstractexpression_p.h
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQMLABSTRACTEXPRESSION_P_H
+#define QQMLABSTRACTEXPRESSION_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <private/qqmlcontext_p.h>
+#include <private/qfieldlist_p.h>
+#include <private/qflagpointer_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQmlAbstractExpression
+{
+public:
+ QQmlAbstractExpression();
+ virtual ~QQmlAbstractExpression();
+
+ bool isValid() const;
+
+ QQmlContextData *context() const;
+ void setContext(QQmlContextData *);
+
+ virtual void refresh();
+
+ class DeleteWatcher {
+ public:
+ inline DeleteWatcher(QQmlAbstractExpression *);
+ inline ~DeleteWatcher();
+ inline bool wasDeleted() const;
+ private:
+ friend class QQmlAbstractExpression;
+ QQmlContextData *_c;
+ QQmlAbstractExpression **_w;
+ QQmlAbstractExpression *_s;
+ };
+
+private:
+ friend class QQmlContext;
+ friend class QQmlContextData;
+ friend class QQmlContextPrivate;
+
+ QBiPointer<QQmlContextData, DeleteWatcher> m_context;
+ QQmlAbstractExpression **m_prevExpression;
+ QQmlAbstractExpression *m_nextExpression;
+};
+
+QQmlAbstractExpression::DeleteWatcher::DeleteWatcher(QQmlAbstractExpression *e)
+: _c(0), _w(0), _s(e)
+{
+ if (e->m_context.isT1()) {
+ _w = &_s;
+ _c = e->m_context.asT1();
+ e->m_context = this;
+ } else {
+ // Another watcher is already registered
+ _w = &e->m_context.asT2()->_s;
+ }
+}
+
+QQmlAbstractExpression::DeleteWatcher::~DeleteWatcher()
+{
+ Q_ASSERT(*_w == 0 || (*_w == _s && _s->m_context.isT2()));
+ if (*_w && _s->m_context.asT2() == this)
+ _s->m_context = _c;
+}
+
+bool QQmlAbstractExpression::DeleteWatcher::wasDeleted() const
+{
+ return *_w == 0;
+}
+
+QT_END_NAMESPACE
+
+#endif // QQMLABSTRACTEXPRESSION_P_H
diff --git a/src/qml/qml/qqmlbinding.cpp b/src/qml/qml/qqmlbinding.cpp
index bb6eb3b723..f43822ed0e 100644
--- a/src/qml/qml/qqmlbinding.cpp
+++ b/src/qml/qml/qqmlbinding.cpp
@@ -40,7 +40,6 @@
****************************************************************************/
#include "qqmlbinding_p.h"
-#include "qqmlbinding_p_p.h"
#include "qqml.h"
#include "qqmlcontext.h"
@@ -49,175 +48,19 @@
#include "qqmldata_p.h"
#include <private/qqmlprofilerservice_p.h>
#include <private/qqmltrace_p.h>
+#include <private/qqmlexpression_p.h>
+#include <private/qqmlrewrite_p.h>
#include <QVariant>
#include <QtCore/qdebug.h>
QT_BEGIN_NAMESPACE
-QQmlAbstractBinding::QQmlAbstractBinding()
-: m_prevBinding(0), m_nextBinding(0)
-{
-}
-
-QQmlAbstractBinding::~QQmlAbstractBinding()
-{
- Q_ASSERT(m_prevBinding == 0);
- Q_ASSERT(*m_mePtr == 0);
-}
-
-/*!
-Destroy the binding. Use this instead of calling delete.
-
-Bindings are free to implement their own memory management, so the delete operator is not
-necessarily safe. The default implementation clears the binding, removes it from the object
-and calls delete.
-*/
-void QQmlAbstractBinding::destroy()
-{
- removeFromObject();
- clear();
-
- delete this;
-}
-
-/*!
-Add this binding to \a object.
-
-This transfers ownership of the binding to the object, marks the object's property as
-being bound.
-
-However, it does not enable the binding itself or call update() on it.
-*/
-void QQmlAbstractBinding::addToObject()
-{
- Q_ASSERT(!m_prevBinding);
-
- QObject *obj = object();
- Q_ASSERT(obj);
-
- int index = propertyIndex();
-
- QQmlData *data = QQmlData::get(obj, true);
-
- if (index & 0xFF000000) {
- // Value type
-
- int coreIndex = index & 0xFFFFFF;
-
- // Find the value type proxy (if there is one)
- QQmlValueTypeProxyBinding *proxy = 0;
- if (data->hasBindingBit(coreIndex)) {
- QQmlAbstractBinding *b = data->bindings;
- while (b && b->propertyIndex() != coreIndex)
- b = b->m_nextBinding;
- Q_ASSERT(b && b->bindingType() == QQmlAbstractBinding::ValueTypeProxy);
- proxy = static_cast<QQmlValueTypeProxyBinding *>(b);
- }
-
- if (!proxy) {
- proxy = new QQmlValueTypeProxyBinding(obj, coreIndex);
-
- Q_ASSERT(proxy->propertyIndex() == coreIndex);
- Q_ASSERT(proxy->object() == obj);
-
- proxy->addToObject();
- }
-
- m_nextBinding = proxy->m_bindings;
- if (m_nextBinding) m_nextBinding->m_prevBinding = &m_nextBinding;
- m_prevBinding = &proxy->m_bindings;
- proxy->m_bindings = this;
-
- } else {
- m_nextBinding = data->bindings;
- if (m_nextBinding) m_nextBinding->m_prevBinding = &m_nextBinding;
- m_prevBinding = &data->bindings;
- data->bindings = this;
-
- data->setBindingBit(obj, index);
- }
-}
-
-/*!
-Remove the binding from the object.
-*/
-void QQmlAbstractBinding::removeFromObject()
-{
- if (m_prevBinding) {
- int index = propertyIndex();
-
- *m_prevBinding = m_nextBinding;
- if (m_nextBinding) m_nextBinding->m_prevBinding = m_prevBinding;
- m_prevBinding = 0;
- m_nextBinding = 0;
-
- if (index & 0xFF000000) {
- // Value type - we don't remove the proxy from the object. It will sit their happily
- // doing nothing until it is removed by a write, a binding change or it is reused
- // to hold more sub-bindings.
- } else if (QObject *obj = object()) {
- QQmlData *data = QQmlData::get(obj, false);
- if (data) data->clearBindingBit(index);
- }
- }
-}
-
-static void bindingDummyDeleter(QQmlAbstractBinding *)
-{
-}
-
-QQmlAbstractBinding::Pointer QQmlAbstractBinding::weakPointer()
-{
- if (m_mePtr.value().isNull())
- m_mePtr.value() = QSharedPointer<QQmlAbstractBinding>(this, bindingDummyDeleter);
-
- return m_mePtr.value().toWeakRef();
-}
-
-void QQmlAbstractBinding::clear()
-{
- if (!m_mePtr.isNull()) {
- **m_mePtr = 0;
- m_mePtr = 0;
- }
-}
-
-void QQmlAbstractBinding::retargetBinding(QObject *, int)
-{
- qFatal("QQmlAbstractBinding::retargetBinding() called on illegal binding.");
-}
-
-QString QQmlAbstractBinding::expression() const
-{
- return QLatin1String("<Unknown>");
-}
-
-void QQmlAbstractBinding::setEnabled(bool enabled, QQmlPropertyPrivate::WriteFlags flags)
-{
- if (enabled) update(flags);
-}
-
QQmlBinding::Identifier QQmlBinding::Invalid = -1;
-void QQmlBindingPrivate::refresh()
-{
- Q_Q(QQmlBinding);
- q->update();
-}
-
-QQmlBindingPrivate::QQmlBindingPrivate()
-: updating(false), enabled(false), target(), targetProperty(0)
-{
-}
-
-QQmlBindingPrivate::~QQmlBindingPrivate()
-{
-}
-
QQmlBinding *
QQmlBinding::createBinding(Identifier id, QObject *obj, QQmlContext *ctxt,
- const QString &url, int lineNumber, QObject *parent)
+ const QString &url, int lineNumber)
{
if (id < 0)
return 0;
@@ -231,7 +74,8 @@ QQmlBinding::createBinding(Identifier id, QObject *obj, QQmlContext *ctxt,
typeData = engine->typeLoader.get(ctxtdata->url);
cdata = typeData->compiledData();
}
- QQmlBinding *rv = cdata ? new QQmlBinding(cdata->primitives.at(id), true, obj, ctxtdata, url, lineNumber, 0, parent) : 0;
+ QQmlBinding *rv = cdata ? new QQmlBinding(cdata->primitives.at(id), true, obj, ctxtdata,
+ url, lineNumber, 0) : 0;
if (cdata)
cdata->release();
if (typeData)
@@ -239,30 +83,62 @@ QQmlBinding::createBinding(Identifier id, QObject *obj, QQmlContext *ctxt,
return rv;
}
-QQmlBinding::QQmlBinding(const QString &str, QObject *obj, QQmlContext *ctxt,
- QObject *parent)
-: QQmlExpression(QQmlContextData::get(ctxt), obj, str, *new QQmlBindingPrivate)
+static QQmlJavaScriptExpression::VTable QQmlBinding_jsvtable = {
+ QQmlBinding::expressionIdentifier,
+ QQmlBinding::expressionChanged
+};
+
+QQmlBinding::QQmlBinding(const QString &str, QObject *obj, QQmlContext *ctxt)
+: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), m_lineNumber(-1), m_columnNumber(-1)
{
- setParent(parent);
setNotifyOnValueChanged(true);
+ QQmlAbstractExpression::setContext(QQmlContextData::get(ctxt));
+ setScopeObject(obj);
+
+ QQmlRewrite::RewriteBinding rewriteBinding;
+ QString code = rewriteBinding(str);
+
+ m_expression = str.toUtf8();
+ v8function = evalFunction(context(), obj, code, QString(), 0);
}
-QQmlBinding::QQmlBinding(const QString &str, QObject *obj, QQmlContextData *ctxt,
- QObject *parent)
-: QQmlExpression(ctxt, obj, str, *new QQmlBindingPrivate)
+QQmlBinding::QQmlBinding(const QString &str, QObject *obj, QQmlContextData *ctxt)
+: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), m_lineNumber(-1), m_columnNumber(-1)
{
- setParent(parent);
setNotifyOnValueChanged(true);
+ QQmlAbstractExpression::setContext(ctxt);
+ setScopeObject(obj);
+
+ QQmlRewrite::RewriteBinding rewriteBinding;
+ QString code = rewriteBinding(str);
+
+ m_expression = str.toUtf8();
+ v8function = evalFunction(ctxt, obj, code, QString(), 0);
}
QQmlBinding::QQmlBinding(const QString &str, bool isRewritten, QObject *obj,
- QQmlContextData *ctxt,
- const QString &url, int lineNumber, int columnNumber,
- QObject *parent)
-: QQmlExpression(ctxt, obj, str, isRewritten, url, lineNumber, columnNumber, *new QQmlBindingPrivate)
+ QQmlContextData *ctxt,
+ const QString &url, int lineNumber, int columnNumber)
+: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), m_lineNumber(-1), m_columnNumber(-1)
{
- setParent(parent);
setNotifyOnValueChanged(true);
+ QQmlAbstractExpression::setContext(ctxt);
+ setScopeObject(obj);
+
+ QString code;
+ if (isRewritten) {
+ code = str;
+ } else {
+ QQmlRewrite::RewriteBinding rewriteBinding;
+ code = rewriteBinding(str);
+ }
+
+ m_url = url;
+ m_lineNumber = lineNumber;
+ m_columnNumber = columnNumber;
+ m_expression = str.toUtf8();
+
+ v8function = evalFunction(ctxt, obj, code, url, lineNumber);
}
/*!
@@ -273,124 +149,100 @@ QQmlBinding::QQmlBinding(const QString &str, bool isRewritten, QObject *obj,
v8::Handle<v8::Function> function;
new QQmlBinding(&function, scope, ctxt);
*/
-QQmlBinding::QQmlBinding(void *functionPtr, QObject *obj, QQmlContextData *ctxt,
- QObject *parent)
-: QQmlExpression(ctxt, obj, functionPtr, *new QQmlBindingPrivate)
+QQmlBinding::QQmlBinding(void *functionPtr, QObject *obj, QQmlContextData *ctxt,
+ const QString &url, int lineNumber, int columnNumber)
+: QQmlJavaScriptExpression(&QQmlBinding_jsvtable),
+ m_url(url), m_lineNumber(lineNumber), m_columnNumber(columnNumber)
{
- setParent(parent);
setNotifyOnValueChanged(true);
-}
-
-QQmlBinding::~QQmlBinding()
-{
-}
-
-void QQmlBinding::setTarget(const QQmlProperty &prop)
-{
- Q_D(QQmlBinding);
- d->property = prop;
- d->target = d->property.object();
- d->targetProperty = QQmlPropertyPrivate::get(d->property)->core.encodedIndex();
+ QQmlAbstractExpression::setContext(ctxt);
+ setScopeObject(obj);
- update();
+ v8function = qPersistentNew<v8::Function>(*(v8::Handle<v8::Function> *)functionPtr);
}
-void QQmlBinding::setTarget(QObject *object,
- const QQmlPropertyData &core,
- QQmlContextData *ctxt)
+QQmlBinding::~QQmlBinding()
{
- Q_D(QQmlBinding);
- d->property = QQmlPropertyPrivate::restore(object, core, ctxt);
- d->target = d->property.object();
- d->targetProperty = QQmlPropertyPrivate::get(d->property)->core.encodedIndex();
-
- update();
+ qPersistentDispose(v8function);
}
-QQmlProperty QQmlBinding::property() const
+void QQmlBinding::setEvaluateFlags(EvaluateFlags flags)
{
- Q_D(const QQmlBinding);
- return d->property;
+ setRequiresThisObject(flags & RequiresThisObject);
}
-void QQmlBinding::setEvaluateFlags(EvaluateFlags flags)
+QQmlBinding::EvaluateFlags QQmlBinding::evaluateFlags() const
{
- Q_D(QQmlBinding);
- d->setRequiresThisObject(flags & RequiresThisObject);
+ return requiresThisObject()?RequiresThisObject:None;
}
-QQmlBinding::EvaluateFlags QQmlBinding::evaluateFlags() const
+void QQmlBinding::setNotifyOnValueChanged(bool v)
{
- Q_D(const QQmlBinding);
- return d->requiresThisObject()?RequiresThisObject:None;
+ QQmlJavaScriptExpression::setNotifyOnValueChanged(v);
}
void QQmlBinding::update(QQmlPropertyPrivate::WriteFlags flags)
{
- Q_D(QQmlBinding);
-
- if (!d->enabled || !d->context() || !d->context()->isValid())
+ if (!enabledFlag() || !context() || !context()->isValid())
return;
QQmlTrace trace("General Binding Update");
- trace.addDetail("URL", d->url);
- trace.addDetail("Line", d->line);
- trace.addDetail("Column", d->columnNumber);
+ trace.addDetail("URL", m_url);
+ trace.addDetail("Line", m_lineNumber);
+ trace.addDetail("Column", m_columnNumber);
- if (!d->updating) {
- QQmlBindingProfiler prof(d->url, d->line, d->column);
+ if (!updatingFlag()) {
+ QQmlBindingProfiler prof(m_url, m_lineNumber, m_columnNumber);
if (prof.enabled)
prof.addDetail(expression());
- d->updating = true;
+ setUpdatingFlag(true);
- QQmlAbstractExpression::DeleteWatcher watcher(d);
+ QQmlAbstractExpression::DeleteWatcher watcher(this);
- if (d->property.propertyType() == qMetaTypeId<QQmlBinding *>()) {
+ if (m_core.propType == qMetaTypeId<QQmlBinding *>()) {
- int idx = d->property.index();
+ int idx = m_core.coreIndex;
Q_ASSERT(idx != -1);
QQmlBinding *t = this;
int status = -1;
void *a[] = { &t, 0, &status, &flags };
- QMetaObject::metacall(d->property.object(),
- QMetaObject::WriteProperty,
- idx, a);
+ QMetaObject::metacall(*m_coreObject, QMetaObject::WriteProperty, idx, a);
} else {
- QQmlEnginePrivate *ep = QQmlEnginePrivate::get(d->context()->engine);
+ QQmlEnginePrivate *ep = QQmlEnginePrivate::get(context()->engine);
ep->referenceScarceResources();
bool isUndefined = false;
v8::HandleScope handle_scope;
v8::Context::Scope scope(ep->v8engine()->context());
- v8::Local<v8::Value> result = d->v8value(0, &isUndefined);
+ v8::Local<v8::Value> result =
+ QQmlJavaScriptExpression::evaluate(context(), v8function, &isUndefined);
trace.event("writing binding result");
bool needsErrorData = false;
- if (!watcher.wasDeleted() && !d->hasError())
- needsErrorData = !QQmlPropertyPrivate::writeBinding(d->property, d->context(),
- d, result,
- isUndefined, flags);
+ if (!watcher.wasDeleted() && !hasError())
+ needsErrorData = !QQmlPropertyPrivate::writeBinding(*m_coreObject, m_core, context(),
+ this, result, isUndefined, flags);
if (!watcher.wasDeleted()) {
if (needsErrorData) {
- QUrl url = QUrl(d->url);
- int line = d->line;
+ QUrl url = QUrl(m_url);
+
if (url.isEmpty()) url = QUrl(QLatin1String("<Unknown File>"));
- d->delayedError()->error.setUrl(url);
- d->delayedError()->error.setLine(line);
- d->delayedError()->error.setColumn(-1);
+ delayedError()->error.setUrl(url);
+ delayedError()->error.setLine(m_lineNumber);
+ delayedError()->error.setColumn(m_columnNumber);
}
- if (d->hasError()) {
- if (!d->delayedError()->addError(ep)) ep->warning(this->error());
+ if (hasError()) {
+ if (!delayedError()->addError(ep)) ep->warning(this->error());
} else {
- d->clearError();
+ clearError();
}
}
@@ -399,154 +251,96 @@ void QQmlBinding::update(QQmlPropertyPrivate::WriteFlags flags)
}
if (!watcher.wasDeleted())
- d->updating = false;
+ setUpdatingFlag(false);
} else {
- QQmlBindingPrivate::printBindingLoopError(d->property);
+ QQmlProperty p = property();
+ QQmlAbstractBinding::printBindingLoopError(p);
}
}
-void QQmlBindingPrivate::printBindingLoopError(QQmlProperty &prop)
+QVariant QQmlBinding::evaluate()
{
- qmlInfo(prop.object()) << QQmlBinding::tr("Binding loop detected for property \"%1\"").arg(prop.name());
-}
+ QQmlEnginePrivate *ep = QQmlEnginePrivate::get(context()->engine);
+ ep->referenceScarceResources();
-void QQmlBindingPrivate::expressionChanged()
-{
- Q_Q(QQmlBinding);
- q->update();
-}
+ bool isUndefined = false;
-void QQmlBinding::setEnabled(bool e, QQmlPropertyPrivate::WriteFlags flags)
-{
- Q_D(QQmlBinding);
- d->enabled = e;
- setNotifyOnValueChanged(e);
-
- if (e)
- update(flags);
-}
+ v8::HandleScope handle_scope;
+ v8::Context::Scope scope(ep->v8engine()->context());
+ v8::Local<v8::Value> result =
+ QQmlJavaScriptExpression::evaluate(context(), v8function, &isUndefined);
-bool QQmlBinding::enabled() const
-{
- Q_D(const QQmlBinding);
+ ep->dereferenceScarceResources();
- return d->enabled;
+ return ep->v8engine()->toVariant(result, qMetaTypeId<QList<QObject*> >());
}
-QString QQmlBinding::expression() const
+QString QQmlBinding::expressionIdentifier(QQmlJavaScriptExpression *e)
{
- return QQmlExpression::expression();
-}
+ QQmlBinding *This = static_cast<QQmlBinding *>(e);
-int QQmlBinding::propertyIndex() const
-{
- Q_D(const QQmlBinding);
- return d->targetProperty;
+ return QLatin1String("\"") + QString::fromUtf8(This->m_expression) + QLatin1String("\"");
}
-QObject *QQmlBinding::object() const
-{
- Q_D(const QQmlBinding);
- return d->target;
-}
-
-void QQmlBinding::retargetBinding(QObject *t, int i)
+void QQmlBinding::expressionChanged(QQmlJavaScriptExpression *e)
{
- Q_D(QQmlBinding);
- d->target = t;
- d->targetProperty = i;
+ QQmlBinding *This = static_cast<QQmlBinding *>(e);
+ This->update();
}
-QQmlValueTypeProxyBinding::QQmlValueTypeProxyBinding(QObject *o, int index)
-: m_object(o), m_index(index), m_bindings(0)
+void QQmlBinding::refresh()
{
+ update();
}
-QQmlValueTypeProxyBinding::~QQmlValueTypeProxyBinding()
+void QQmlBinding::setEnabled(bool e, QQmlPropertyPrivate::WriteFlags flags)
{
- while (m_bindings) {
- QQmlAbstractBinding *binding = m_bindings;
- binding->setEnabled(false, 0);
- binding->destroy();
- }
-}
+ setEnabledFlag(e);
+ setNotifyOnValueChanged(e);
-void QQmlValueTypeProxyBinding::setEnabled(bool e, QQmlPropertyPrivate::WriteFlags flags)
-{
- if (e) {
- QQmlAbstractBinding *bindings = m_bindings;
- recursiveEnable(bindings, flags);
- } else {
- QQmlAbstractBinding *bindings = m_bindings;
- recursiveDisable(bindings);
- }
+ if (e)
+ update(flags);
}
-void QQmlValueTypeProxyBinding::recursiveEnable(QQmlAbstractBinding *b, QQmlPropertyPrivate::WriteFlags flags)
+QString QQmlBinding::expression() const
{
- if (!b)
- return;
-
- recursiveEnable(b->m_nextBinding, flags);
-
- if (b)
- b->setEnabled(true, flags);
+ return QString::fromUtf8(m_expression);
}
-void QQmlValueTypeProxyBinding::recursiveDisable(QQmlAbstractBinding *b)
+QObject *QQmlBinding::object() const
{
- if (!b)
- return;
-
- recursiveDisable(b->m_nextBinding);
-
- if (b)
- b->setEnabled(false, 0);
+ if (m_coreObject.hasValue()) return m_coreObject.constValue()->target;
+ else return *m_coreObject;
}
-void QQmlValueTypeProxyBinding::update(QQmlPropertyPrivate::WriteFlags)
+int QQmlBinding::propertyIndex() const
{
+ if (m_coreObject.hasValue()) return m_coreObject.constValue()->targetProperty;
+ else return m_core.encodedIndex();
}
-QQmlAbstractBinding *QQmlValueTypeProxyBinding::binding(int propertyIndex)
+void QQmlBinding::retargetBinding(QObject *t, int i)
{
- QQmlAbstractBinding *binding = m_bindings;
-
- while (binding && binding->propertyIndex() != propertyIndex)
- binding = binding->m_nextBinding;
-
- return binding;
+ m_coreObject.value().target = t;
+ m_coreObject.value().targetProperty = i;
}
-/*!
-Removes a collection of bindings, corresponding to the set bits in \a mask.
-*/
-void QQmlValueTypeProxyBinding::removeBindings(quint32 mask)
+void QQmlBinding::setTarget(const QQmlProperty &prop)
{
- QQmlAbstractBinding *binding = m_bindings;
- while (binding) {
- if (mask & (1 << (binding->propertyIndex() >> 24))) {
- QQmlAbstractBinding *remove = binding;
- binding = remove->m_nextBinding;
- *remove->m_prevBinding = remove->m_nextBinding;
- if (remove->m_nextBinding) remove->m_nextBinding->m_prevBinding = remove->m_prevBinding;
- remove->m_prevBinding = 0;
- remove->m_nextBinding = 0;
- remove->destroy();
- } else {
- binding = binding->m_nextBinding;
- }
- }
+ setTarget(prop.object(), QQmlPropertyPrivate::get(prop)->core,
+ QQmlPropertyPrivate::get(prop)->context);
}
-int QQmlValueTypeProxyBinding::propertyIndex() const
+void QQmlBinding::setTarget(QObject *object, const QQmlPropertyData &core, QQmlContextData *ctxt)
{
- return m_index;
+ m_coreObject = object;
+ m_core = core;
+ m_ctxt = ctxt;
}
-QObject *QQmlValueTypeProxyBinding::object() const
+QQmlProperty QQmlBinding::property() const
{
- return m_object;
+ return QQmlPropertyPrivate::restore(object(), m_core, *m_ctxt);
}
QT_END_NAMESPACE
diff --git a/src/qml/qml/qqmlbinding_p.h b/src/qml/qml/qqmlbinding_p.h
index 33823d7e7e..2cf7b80290 100644
--- a/src/qml/qml/qqmlbinding_p.h
+++ b/src/qml/qml/qqmlbinding_p.h
@@ -63,113 +63,27 @@
#include <QtCore/QMetaProperty>
#include <private/qpointervaluepair_p.h>
+#include <private/qqmlabstractbinding_p.h>
+#include <private/qqmlabstractexpression_p.h>
+#include <private/qqmljavascriptexpression_p.h>
QT_BEGIN_NAMESPACE
-class Q_QML_PRIVATE_EXPORT QQmlAbstractBinding
-{
-public:
- typedef QWeakPointer<QQmlAbstractBinding> Pointer;
-
- QQmlAbstractBinding();
-
- virtual void destroy();
-
- virtual QString expression() const;
-
- enum Type { PropertyBinding, ValueTypeProxy };
- virtual Type bindingType() const { return PropertyBinding; }
-
- // Should return the encoded property index for the binding. Should return this value
- // even if the binding is not enabled or added to an object.
- // Encoding is: coreIndex | (valueTypeIndex << 24)
- virtual int propertyIndex() const = 0;
- // Should return the object for the binding. Should return this object even if the
- // binding is not enabled or added to the object.
- virtual QObject *object() const = 0;
-
- void setEnabled(bool e) { setEnabled(e, QQmlPropertyPrivate::DontRemoveBinding); }
- virtual void setEnabled(bool, QQmlPropertyPrivate::WriteFlags) = 0;
-
- void update() { update(QQmlPropertyPrivate::DontRemoveBinding); }
- virtual void update(QQmlPropertyPrivate::WriteFlags) = 0;
-
- void addToObject();
- void removeFromObject();
-
- static inline Pointer getPointer(QQmlAbstractBinding *p);
-
-protected:
- virtual ~QQmlAbstractBinding();
- void clear();
-
- // Called by QQmlPropertyPrivate to "move" a binding to a different property.
- // This is only used for alias properties, and only used by QQmlBinding not
- // V8 or V4 bindings. The default implementation qFatal()'s to ensure that the
- // method is never called for V4 or V8 bindings.
- virtual void retargetBinding(QObject *, int);
-private:
- Pointer weakPointer();
-
- friend class QQmlData;
- friend class QQmlComponentPrivate;
- friend class QQmlValueTypeProxyBinding;
- friend class QQmlPropertyPrivate;
- friend class QQmlVME;
- friend class QtSharedPointer::ExternalRefCount<QQmlAbstractBinding>;
-
- typedef QSharedPointer<QQmlAbstractBinding> SharedPointer;
- // To save memory, we also store the rarely used weakPointer() instance in here
- QPointerValuePair<QQmlAbstractBinding*, SharedPointer> m_mePtr;
-
- QQmlAbstractBinding **m_prevBinding;
- QQmlAbstractBinding *m_nextBinding;
-};
-
-class QQmlValueTypeProxyBinding : public QQmlAbstractBinding
-{
-public:
- QQmlValueTypeProxyBinding(QObject *o, int coreIndex);
-
- virtual Type bindingType() const { return ValueTypeProxy; }
-
- virtual void setEnabled(bool, QQmlPropertyPrivate::WriteFlags);
- virtual void update(QQmlPropertyPrivate::WriteFlags);
- virtual int propertyIndex() const;
- virtual QObject *object() const;
-
- QQmlAbstractBinding *binding(int propertyIndex);
-
- void removeBindings(quint32 mask);
-
-protected:
- ~QQmlValueTypeProxyBinding();
-
-private:
- void recursiveEnable(QQmlAbstractBinding *, QQmlPropertyPrivate::WriteFlags);
- void recursiveDisable(QQmlAbstractBinding *);
-
- friend class QQmlAbstractBinding;
- QObject *m_object;
- int m_index;
- QQmlAbstractBinding *m_bindings;
-};
-
class QQmlContext;
-class QQmlBindingPrivate;
-class Q_QML_PRIVATE_EXPORT QQmlBinding : public QQmlExpression,
- public QQmlAbstractBinding
+class Q_QML_PRIVATE_EXPORT QQmlBinding : public QQmlJavaScriptExpression,
+ public QQmlAbstractExpression,
+ public QQmlAbstractBinding
{
-Q_OBJECT
public:
enum EvaluateFlag { None = 0x00, RequiresThisObject = 0x01 };
Q_DECLARE_FLAGS(EvaluateFlags, EvaluateFlag)
- QQmlBinding(const QString &, QObject *, QQmlContext *, QObject *parent=0);
- QQmlBinding(const QString &, QObject *, QQmlContextData *, QObject *parent=0);
+ QQmlBinding(const QString &, QObject *, QQmlContext *);
+ QQmlBinding(const QString &, QObject *, QQmlContextData *);
QQmlBinding(const QString &, bool isRewritten, QObject *, QQmlContextData *,
- const QString &url, int lineNumber, int columnNumber = 0, QObject *parent=0);
- QQmlBinding(void *, QObject *, QQmlContextData *, QObject *parent=0);
+ const QString &url, int lineNumber, int columnNumber);
+ QQmlBinding(void *, QObject *, QQmlContextData *,
+ const QString &url, int lineNumber, int columnNumber);
void setTarget(const QQmlProperty &);
void setTarget(QObject *, const QQmlPropertyData &, QQmlContextData *);
@@ -178,40 +92,82 @@ public:
void setEvaluateFlags(EvaluateFlags flags);
EvaluateFlags evaluateFlags() const;
- bool enabled() const;
+ void setNotifyOnValueChanged(bool);
+
+ // Inherited from QQmlAbstractExpression
+ virtual void refresh();
// Inherited from QQmlAbstractBinding
virtual void setEnabled(bool, QQmlPropertyPrivate::WriteFlags flags);
virtual void update(QQmlPropertyPrivate::WriteFlags flags);
virtual QString expression() const;
- virtual int propertyIndex() const;
virtual QObject *object() const;
+ virtual int propertyIndex() const;
virtual void retargetBinding(QObject *, int);
typedef int Identifier;
static Identifier Invalid;
- static QQmlBinding *createBinding(Identifier, QObject *, QQmlContext *,
- const QString &, int, QObject *parent=0);
+ static QQmlBinding *createBinding(Identifier, QObject *, QQmlContext *, const QString &, int);
-public Q_SLOTS:
+ QVariant evaluate();
void update() { update(QQmlPropertyPrivate::DontRemoveBinding); }
+ static QString expressionIdentifier(QQmlJavaScriptExpression *);
+ static void expressionChanged(QQmlJavaScriptExpression *);
+
protected:
~QQmlBinding();
private:
- Q_DECLARE_PRIVATE(QQmlBinding)
+ v8::Persistent<v8::Function> v8function;
+
+ inline bool updatingFlag() const;
+ inline void setUpdatingFlag(bool);
+ inline bool enabledFlag() const;
+ inline void setEnabledFlag(bool);
+
+ struct Retarget {
+ QObject *target;
+ int targetProperty;
+ };
+
+ QPointerValuePair<QObject, Retarget> m_coreObject;
+ QQmlPropertyData m_core;
+ // We store some flag bits in the following flag pointers.
+ // m_ctxt:flag1 - updatingFlag
+ // m_ctxt:flag2 - enabledFlag
+ QFlagPointer<QQmlContextData> m_ctxt;
+
+ // XXX It would be good if we could get rid of these in most circumstances
+ QString m_url;
+ int m_lineNumber;
+ int m_columnNumber;
+ QByteArray m_expression;
};
-Q_DECLARE_OPERATORS_FOR_FLAGS(QQmlBinding::EvaluateFlags)
+bool QQmlBinding::updatingFlag() const
+{
+ return m_ctxt.flag();
+}
-QQmlAbstractBinding::Pointer
-QQmlAbstractBinding::getPointer(QQmlAbstractBinding *p)
+void QQmlBinding::setUpdatingFlag(bool v)
{
- return p ? p->weakPointer() : Pointer();
+ m_ctxt.setFlagValue(v);
}
+bool QQmlBinding::enabledFlag() const
+{
+ return m_ctxt.flag2();
+}
+
+void QQmlBinding::setEnabledFlag(bool v)
+{
+ m_ctxt.setFlag2Value(v);
+}
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QQmlBinding::EvaluateFlags)
+
QT_END_NAMESPACE
Q_DECLARE_METATYPE(QQmlBinding*)
diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp
index 5dd8fc8ae9..6cd5cf6cec 100644
--- a/src/qml/qml/qqmlcomponent.cpp
+++ b/src/qml/qml/qqmlcomponent.cpp
@@ -50,13 +50,13 @@
#include "qqml.h"
#include "qqmlengine.h"
#include "qqmlbinding_p.h"
-#include "qqmlbinding_p_p.h"
#include "qqmlglobal_p.h"
#include "qqmlscript_p.h"
#include <private/qqmlprofilerservice_p.h>
#include <private/qqmlenginedebugservice_p.h>
#include "qqmlincubator.h"
#include "qqmlincubator_p.h"
+#include <private/qqmljavascriptexpression_p.h>
#include <private/qv8engine_p.h>
#include <private/qv8include_p.h>
@@ -280,6 +280,16 @@ static inline QString buildTypeNameForDebug(const QMetaObject *metaObject)
\value Error An error has occurred. Call errors() to retrieve a list of \{QQmlError}{errors}.
*/
+/*!
+ \enum QQmlComponent::CompilationMode
+
+ Specifies whether the QQmlComponent should load the component immediately, or asynchonously.
+
+ \value PreferSynchronous Prefer loading/compiling the component immediately, blocking the thread.
+ This is not always possible, e.g. remote URLs will always load asynchronously.
+ \value Asynchronous Load/compile the component in a background thread.
+*/
+
void QQmlComponentPrivate::typeDataReady(QQmlTypeData *)
{
Q_Q(QQmlComponent);
@@ -288,8 +298,10 @@ void QQmlComponentPrivate::typeDataReady(QQmlTypeData *)
fromTypeData(typeData);
typeData = 0;
+ progress = 1.0;
emit q->statusChanged(q->status());
+ emit q->progressChanged(progress);
}
void QQmlComponentPrivate::typeDataProgress(QQmlTypeData *, qreal p)
@@ -362,10 +374,10 @@ QQmlComponent::~QQmlComponent()
\qmlproperty enumeration Component::status
This property holds the status of component loading. It can be one of:
\list
- \o Component.Null - no data is available for the component
- \o Component.Ready - the component has been loaded, and can be used to create instances.
- \o Component.Loading - the component is currently being loaded
- \o Component.Error - an error occurred while loading the component.
+ \li Component.Null - no data is available for the component
+ \li Component.Ready - the component has been loaded, and can be used to create instances.
+ \li Component.Loading - the component is currently being loaded
+ \li Component.Error - an error occurred while loading the component.
Calling errorString() will provide a human-readable description of any errors.
\endlist
*/
@@ -476,7 +488,24 @@ QQmlComponent::QQmlComponent(QQmlEngine *engine, const QUrl &url, QObject *paren
{
Q_D(QQmlComponent);
d->engine = engine;
- loadUrl(url);
+ d->loadUrl(url);
+}
+
+/*!
+ Create a QQmlComponent from the given \a url and give it the
+ specified \a parent and \a engine. If \a mode is \l Asynchronous,
+ the component will be loaded and compiled asynchronously.
+
+ Ensure that the URL provided is full and correct, in particular, use
+ \l QUrl::fromLocalFile() when loading a file from the local filesystem.
+
+ \sa loadUrl()
+*/QQmlComponent::QQmlComponent(QQmlEngine *engine, const QUrl &url, CompilationMode mode, QObject *parent)
+: QObject(*(new QQmlComponentPrivate), parent)
+{
+ Q_D(QQmlComponent);
+ d->engine = engine;
+ d->loadUrl(url, mode);
}
/*!
@@ -491,7 +520,23 @@ QQmlComponent::QQmlComponent(QQmlEngine *engine, const QString &fileName,
{
Q_D(QQmlComponent);
d->engine = engine;
- loadUrl(d->engine->baseUrl().resolved(QUrl::fromLocalFile(fileName)));
+ d->loadUrl(d->engine->baseUrl().resolved(QUrl::fromLocalFile(fileName)));
+}
+
+/*!
+ Create a QQmlComponent from the given \a fileName and give it the specified
+ \a parent and \a engine. If \a mode is \l Asynchronous,
+ the component will be loaded and compiled asynchronously.
+
+ \sa loadUrl()
+*/
+QQmlComponent::QQmlComponent(QQmlEngine *engine, const QString &fileName,
+ CompilationMode mode, QObject *parent)
+: QObject(*(new QQmlComponentPrivate), parent)
+{
+ Q_D(QQmlComponent);
+ d->engine = engine;
+ d->loadUrl(d->engine->baseUrl().resolved(QUrl::fromLocalFile(fileName)), mode);
}
/*!
@@ -558,35 +603,63 @@ QQmlContext *QQmlComponent::creationContext() const
void QQmlComponent::loadUrl(const QUrl &url)
{
Q_D(QQmlComponent);
+ d->loadUrl(url);
+}
- d->clear();
+/*!
+ Load the QQmlComponent from the provided \a url.
+ If \a mode is \l Asynchronous, the component will be loaded and compiled asynchronously.
+
+ Ensure that the URL provided is full and correct, in particular, use
+ \l QUrl::fromLocalFile() when loading a file from the local filesystem.
+*/
+void QQmlComponent::loadUrl(const QUrl &url, QQmlComponent::CompilationMode mode)
+{
+ Q_D(QQmlComponent);
+ d->loadUrl(url, mode);
+}
+
+void QQmlComponentPrivate::loadUrl(const QUrl &newUrl, QQmlComponent::CompilationMode mode)
+{
+ Q_Q(QQmlComponent);
+ clear();
- if ((url.isRelative() && !url.isEmpty())
- || url.scheme() == QLatin1String("file")) // Workaround QTBUG-11929
- d->url = d->engine->baseUrl().resolved(url);
+ if ((newUrl.isRelative() && !newUrl.isEmpty())
+ || newUrl.scheme() == QLatin1String("file")) // Workaround QTBUG-11929
+ url = engine->baseUrl().resolved(newUrl);
else
- d->url = url;
+ url = newUrl;
- if (url.isEmpty()) {
+ if (newUrl.isEmpty()) {
QQmlError error;
- error.setDescription(tr("Invalid empty URL"));
- d->state.errors << error;
+ error.setDescription(q->tr("Invalid empty URL"));
+ state.errors << error;
return;
}
- QQmlTypeData *data = QQmlEnginePrivate::get(d->engine)->typeLoader.get(d->url);
+ if (progress != 0.0) {
+ progress = 0.0;
+ emit q->progressChanged(progress);
+ }
+
+ QQmlDataLoader::Mode loaderMode = (mode == QQmlComponent::Asynchronous)
+ ? QQmlDataLoader::Asynchronous
+ : QQmlDataLoader::PreferSynchronous;
+
+ QQmlTypeData *data = QQmlEnginePrivate::get(engine)->typeLoader.get(url, loaderMode);
if (data->isCompleteOrError()) {
- d->fromTypeData(data);
- d->progress = 1.0;
+ fromTypeData(data);
+ progress = 1.0;
} else {
- d->typeData = data;
- d->typeData->registerCallback(d);
- d->progress = data->progress();
+ typeData = data;
+ typeData->registerCallback(this);
+ progress = data->progress();
}
- emit statusChanged(status());
- emit progressChanged(d->progress);
+ emit q->statusChanged(q->status());
+ if (progress != 0.0)
+ emit q->progressChanged(progress);
}
/*!
@@ -686,9 +759,9 @@ QObject *QQmlComponent::create(QQmlContext *context)
When QQmlComponent constructs an instance, it occurs in three steps:
\list 1
- \i The object hierarchy is created, and constant values are assigned.
- \i Property bindings are evaluated for the the first time.
- \i If applicable, QQmlParserStatus::componentComplete() is called on objects.
+ \li The object hierarchy is created, and constant values are assigned.
+ \li Property bindings are evaluated for the the first time.
+ \li If applicable, QQmlParserStatus::componentComplete() is called on objects.
\endlist
QQmlComponent::beginCreate() differs from QQmlComponent::create() in that it
only performs step 1. QQmlComponent::completeCreate() must be called to
@@ -1079,13 +1152,13 @@ void QQmlComponent::createObject(QQmlV8Function *args)
properties:
\list
- \i status The status of the incubator. Valid values are Component.Ready, Component.Loading and
+ \li status The status of the incubator. Valid values are Component.Ready, Component.Loading and
Component.Error.
- \i object The created object instance. Will only be available once the incubator is in the
+ \li object The created object instance. Will only be available once the incubator is in the
Ready status.
- \i onStatusChanged Specifies a callback function to be invoked when the status changes. The
+ \li onStatusChanged Specifies a callback function to be invoked when the status changes. The
status is passed as a parameter to the callback.
- \i forceCompletion() Call to complete incubation synchronously.
+ \li forceCompletion() Call to complete incubation synchronously.
\endlist
The following example demonstrates how to use an incubator:
@@ -1337,9 +1410,8 @@ void QV8IncubatorResource::statusChanged(Status s)
f->Call(me, 1, args);
if (tc.HasCaught()) {
QQmlError error;
- QQmlExpressionPrivate::exceptionToError(tc.Message(), error);
- QQmlEnginePrivate::warning(QQmlEnginePrivate::get(engine->engine()),
- error);
+ QQmlJavaScriptExpression::exceptionToError(tc.Message(), error);
+ QQmlEnginePrivate::warning(QQmlEnginePrivate::get(engine->engine()), error);
}
}
}
diff --git a/src/qml/qml/qqmlcomponent.h b/src/qml/qml/qqmlcomponent.h
index 1265fb1c7d..9fc9388e41 100644
--- a/src/qml/qml/qqmlcomponent.h
+++ b/src/qml/qml/qqmlcomponent.h
@@ -73,10 +73,15 @@ class Q_QML_EXPORT QQmlComponent : public QObject
Q_PROPERTY(QUrl url READ url CONSTANT)
public:
+ Q_ENUMS(CompilationMode)
+ enum CompilationMode { PreferSynchronous, Asynchronous };
+
QQmlComponent(QObject *parent = 0);
QQmlComponent(QQmlEngine *, QObject *parent=0);
QQmlComponent(QQmlEngine *, const QString &fileName, QObject *parent = 0);
+ QQmlComponent(QQmlEngine *, const QString &fileName, CompilationMode mode, QObject *parent = 0);
QQmlComponent(QQmlEngine *, const QUrl &url, QObject *parent = 0);
+ QQmlComponent(QQmlEngine *, const QUrl &url, CompilationMode mode, QObject *parent = 0);
virtual ~QQmlComponent();
Q_ENUMS(Status)
@@ -108,6 +113,7 @@ public:
public Q_SLOTS:
void loadUrl(const QUrl &url);
+ void loadUrl(const QUrl &url, CompilationMode mode);
void setData(const QByteArray &, const QUrl &baseUrl);
Q_SIGNALS:
diff --git a/src/qml/qml/qqmlcomponent_p.h b/src/qml/qml/qqmlcomponent_p.h
index dda5bd0b71..9e220b5e95 100644
--- a/src/qml/qml/qqmlcomponent_p.h
+++ b/src/qml/qml/qqmlcomponent_p.h
@@ -86,6 +86,8 @@ class Q_QML_PRIVATE_EXPORT QQmlComponentPrivate : public QObjectPrivate, public
public:
QQmlComponentPrivate() : typeData(0), progress(0.), start(-1), cc(0), engine(0), creationContext(0), profiler(0) {}
+ void loadUrl(const QUrl &newUrl, QQmlComponent::CompilationMode mode = QQmlComponent::PreferSynchronous);
+
QObject *beginCreate(QQmlContextData *);
void completeCreate();
void initializeObjectWithInitialProperties(v8::Handle<v8::Object> qmlGlobal, v8::Handle<v8::Object> valuemap, QObject *toCreate);
diff --git a/src/qml/qml/qqmlcontext.cpp b/src/qml/qml/qqmlcontext.cpp
index 38acc0b0c3..cbb8430f40 100644
--- a/src/qml/qml/qqmlcontext.cpp
+++ b/src/qml/qml/qqmlcontext.cpp
@@ -329,7 +329,7 @@ void QQmlContext::setContextProperty(const QString &name, const QVariant &value)
/*!
Set the \a value of the \a name property on this context.
- QQmlContext does \bold not take ownership of \a value.
+ QQmlContext does \b not take ownership of \a value.
*/
void QQmlContext::setContextProperty(const QString &name, QObject *value)
{
diff --git a/src/qml/qml/qqmldata_p.h b/src/qml/qml/qqmldata_p.h
index e4ba44583d..09d1a23510 100644
--- a/src/qml/qml/qqmldata_p.h
+++ b/src/qml/qml/qqmldata_p.h
@@ -78,8 +78,8 @@ class Q_QML_EXPORT QQmlData : public QAbstractDeclarativeData
public:
QQmlData()
: ownMemory(true), ownContext(false), indestructible(true), explicitIndestructibleSet(false),
- hasTaintedV8Object(false), notifyList(0), context(0), outerContext(0), bindings(0),
- nextContextObject(0), prevContextObject(0), bindingBitsSize(0), bindingBits(0),
+ hasTaintedV8Object(false), isQueuedForDeletion(false), notifyList(0), context(0), outerContext(0),
+ bindings(0), nextContextObject(0), prevContextObject(0), bindingBitsSize(0), bindingBits(0),
lineNumber(0), columnNumber(0), deferredComponent(0), deferredIdx(0), v8objectid(0),
propertyCache(0), guards(0), extendedData(0) {
init();
@@ -110,7 +110,8 @@ public:
quint32 indestructible:1;
quint32 explicitIndestructibleSet:1;
quint32 hasTaintedV8Object:1;
- quint32 dummy:27;
+ quint32 isQueuedForDeletion:1;
+ quint32 dummy:26;
struct NotifyList {
quint64 connectionMask;
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp
index 90b8bcd8bb..16cd1ecde6 100644
--- a/src/qml/qml/qqmlengine.cpp
+++ b/src/qml/qml/qqmlengine.cpp
@@ -49,7 +49,6 @@
#include "qqmlcontext.h"
#include "qqmlexpression.h"
#include "qqmlcomponent.h"
-#include "qqmlbinding_p_p.h"
#include "qqmlvme_p.h"
#include <private/qqmlenginedebugservice_p.h>
#include "qqmlstringconverters_p.h"
@@ -175,7 +174,6 @@ void QQmlEnginePrivate::registerBaseTypes(const char *uri, int versionMajor, int
void QQmlEnginePrivate::defineModule()
{
registerBaseTypes("QtQuick", 2, 0);
- qmlRegisterType<QQmlBinding>();
qmlRegisterUncreatableType<QQuickApplication>("QtQuick",2,0,"Application", QQuickApplication::tr("Application is an abstract class"));
qmlRegisterUncreatableType<QQmlLocale>("QtQuick",2,0,"Locale",QQmlEngine::tr("Locale cannot be instantiated. Use Qt.locale()"));
}
@@ -222,11 +220,11 @@ data types. This is primarily useful when setting the properties of an item
when the property has one of the following types:
\list
-\o \c color - use \l{Qt::rgba()}{Qt.rgba()}, \l{Qt::hsla()}{Qt.hsla()}, \l{Qt::darker()}{Qt.darker()}, \l{Qt::lighter()}{Qt.lighter()} or \l{Qt::tint()}{Qt.tint()}
-\o \c rect - use \l{Qt::rect()}{Qt.rect()}
-\o \c point - use \l{Qt::point()}{Qt.point()}
-\o \c size - use \l{Qt::size()}{Qt.size()}
-\o \c vector3d - use \l{Qt::vector3d()}{Qt.vector3d()}
+\li \c color - use \l{Qt::rgba()}{Qt.rgba()}, \l{Qt::hsla()}{Qt.hsla()}, \l{Qt::darker()}{Qt.darker()}, \l{Qt::lighter()}{Qt.lighter()} or \l{Qt::tint()}{Qt.tint()}
+\li \c rect - use \l{Qt::rect()}{Qt.rect()}
+\li \c point - use \l{Qt::point()}{Qt.point()}
+\li \c size - use \l{Qt::size()}{Qt.size()}
+\li \c vector3d - use \l{Qt::vector3d()}{Qt.vector3d()}
\endlist
There are also string based constructors for these types. See \l{qdeclarativebasictypes.html}{QML Basic Types} for more information.
@@ -236,9 +234,9 @@ There are also string based constructors for these types. See \l{qdeclarativebas
The Qt object contains several functions for formatting QDateTime, QDate and QTime values.
\list
- \o \l{Qt::formatDateTime}{string Qt.formatDateTime(datetime date, variant format)}
- \o \l{Qt::formatDate}{string Qt.formatDate(datetime date, variant format)}
- \o \l{Qt::formatTime}{string Qt.formatTime(datetime date, variant format)}
+ \li \l{Qt::formatDateTime}{string Qt.formatDateTime(datetime date, variant format)}
+ \li \l{Qt::formatDate}{string Qt.formatDate(datetime date, variant format)}
+ \li \l{Qt::formatTime}{string Qt.formatTime(datetime date, variant format)}
\endlist
The format specification is described at \l{Qt::formatDateTime}{Qt.formatDateTime}.
@@ -250,8 +248,8 @@ items from files or strings. See \l{Dynamic Object Management in QML} for an ove
of their use.
\list
- \o \l{Qt::createComponent()}{object Qt.createComponent(url)}
- \o \l{Qt::createQmlObject()}{object Qt.createQmlObject(string qml, object parent, string filepath)}
+ \li \l{Qt::createComponent()}{object Qt.createComponent(url)}
+ \li \l{Qt::createQmlObject()}{object Qt.createQmlObject(string qml, object parent, string filepath)}
\endlist
*/
@@ -267,8 +265,8 @@ of their use.
\table
\row
- \o \c application.active
- \o
+ \li \c application.active
+ \li
This read-only property indicates whether the application is the top-most and focused
application, and the user is able to interact with the application. The property
is false when the application is in the background, the device keylock or screen
@@ -279,8 +277,8 @@ of their use.
active.
\row
- \o \c application.layoutDirection
- \o
+ \li \c application.layoutDirection
+ \li
This read-only property can be used to query the default layout direction of the
application. On system start-up, the default layout direction depends on the
application's language. The property has a value of \c Qt.RightToLeft in locales
@@ -291,15 +289,15 @@ of their use.
Possible values are:
\list
- \o Qt.LeftToRight - Text and graphics elements should be positioned
+ \li Qt.LeftToRight - Text and graphics elements should be positioned
from left to right.
- \o Qt.RightToLeft - Text and graphics elements should be positioned
+ \li Qt.RightToLeft - Text and graphics elements should be positioned
from right to left.
\endlist
\row
- \o \c application.inputPanel
- \o
+ \li \c application.inputPanel
+ \li
This read-only property allows access to application's QInputPanel object
and all its properties and slots. See the QInputPanel documentation for
further details. Deprecated in favor of Qt.InputMethod
@@ -331,11 +329,11 @@ Qt.include() returns an object that describes the status of the operation. The
a single property, \c {status}, that is set to one of the following values:
\table
-\header \o Symbol \o Value \o Description
-\row \o result.OK \o 0 \o The include completed successfully.
-\row \o result.LOADING \o 1 \o Data is being loaded from the network.
-\row \o result.NETWORK_ERROR \o 2 \o A network error occurred while fetching the url.
-\row \o result.EXCEPTION \o 3 \o A JavaScript exception occurred while executing the included code.
+\header \li Symbol \li Value \li Description
+\row \li result.OK \li 0 \li The include completed successfully.
+\row \li result.LOADING \li 1 \li Data is being loaded from the network.
+\row \li result.NETWORK_ERROR \li 2 \li A network error occurred while fetching the url.
+\row \li result.EXCEPTION \li 3 \li A JavaScript exception occurred while executing the included code.
An additional \c exception property will be set in this case.
\endtable
@@ -996,7 +994,7 @@ QQmlDebuggingEnabler::QQmlDebuggingEnabler()
{
#ifndef QQML_NO_DEBUG_PROTOCOL
if (!QQmlEnginePrivate::qml_debugging_enabled) {
- qWarning("QML debugging is enabled. Only use this in a safe environment.");
+ qDebug("QML debugging is enabled. Only use this in a safe environment.");
}
QQmlEnginePrivate::qml_debugging_enabled = true;
#endif
diff --git a/src/qml/qml/qqmlexpression.cpp b/src/qml/qml/qqmlexpression.cpp
index ecdbf21d4b..60a0fe1c89 100644
--- a/src/qml/qml/qqmlexpression.cpp
+++ b/src/qml/qml/qqmlexpression.cpp
@@ -52,32 +52,6 @@
QT_BEGIN_NAMESPACE
-bool QQmlDelayedError::addError(QQmlEnginePrivate *e)
-{
- if (!e) return false;
-
- if (e->inProgressCreations == 0) return false; // Not in construction
-
- if (prevError) return true; // Already in error chain
-
- prevError = &e->erroredBindings;
- nextError = e->erroredBindings;
- e->erroredBindings = this;
- if (nextError) nextError->prevError = &nextError;
-
- return true;
-}
-
-QQmlJavaScriptExpression::QQmlJavaScriptExpression(VTable *v)
-: m_vtable(v)
-{
-}
-
-QQmlJavaScriptExpression::~QQmlJavaScriptExpression()
-{
- clearGuards();
-}
-
static QQmlJavaScriptExpression::VTable QQmlExpressionPrivate_jsvtable = {
QQmlExpressionPrivate::expressionIdentifier,
QQmlExpressionPrivate::expressionChanged
@@ -98,8 +72,7 @@ QQmlExpressionPrivate::~QQmlExpressionPrivate()
dataRef = 0;
}
-void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr,
- QObject *me)
+void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr, QObject *me)
{
expression = expr;
@@ -109,22 +82,9 @@ void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr,
expressionFunctionRewritten = false;
}
-void QQmlExpressionPrivate::init(QQmlContextData *ctxt, v8::Handle<v8::Function> func,
- QObject *me)
-{
- QQmlAbstractExpression::setContext(ctxt);
- setScopeObject(me);
-
- v8function = qPersistentNew<v8::Function>(func);
- setUseSharedContext(false);
- expressionFunctionValid = true;
- expressionFunctionRewritten = false;
- extractExpressionFromFunction = true;
-}
-
void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr,
- bool isRewritten, QObject *me, const QString &srcUrl,
- int lineNumber, int columnNumber)
+ bool isRewritten, QObject *me, const QString &srcUrl,
+ int lineNumber, int columnNumber)
{
url = srcUrl;
line = lineNumber;
@@ -140,8 +100,8 @@ void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr,
}
void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QByteArray &expr,
- bool isRewritten, QObject *me, const QString &srcUrl,
- int lineNumber, int columnNumber)
+ bool isRewritten, QObject *me, const QString &srcUrl,
+ int lineNumber, int columnNumber)
{
url = srcUrl;
line = lineNumber;
@@ -166,97 +126,13 @@ void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QByteArray &expr,
setScopeObject(me);
}
-// Callee owns the persistent handle
-v8::Persistent<v8::Function>
-QQmlExpressionPrivate::evalFunction(QQmlContextData *ctxt, QObject *scope,
- const char *code, int codeLength,
- const QString &filename, int line,
- v8::Persistent<v8::Object> *qmlscope)
-{
- QQmlEngine *engine = ctxt->engine;
- QQmlEnginePrivate *ep = QQmlEnginePrivate::get(engine);
-
- v8::HandleScope handle_scope;
- v8::Context::Scope ctxtscope(ep->v8engine()->context());
-
- v8::TryCatch tc;
- v8::Local<v8::Object> scopeobject = ep->v8engine()->qmlScope(ctxt, scope);
- v8::Local<v8::Script> script = ep->v8engine()->qmlModeCompile(code, codeLength, filename, line);
- if (tc.HasCaught()) {
- QQmlError error;
- error.setDescription(QLatin1String("Exception occurred during function compilation"));
- error.setLine(line);
- error.setUrl(QUrl::fromLocalFile(filename));
- v8::Local<v8::Message> message = tc.Message();
- if (!message.IsEmpty())
- QQmlExpressionPrivate::exceptionToError(message, error);
- ep->warning(error);
- return v8::Persistent<v8::Function>();
- }
- v8::Local<v8::Value> result = script->Run(scopeobject);
- if (tc.HasCaught()) {
- QQmlError error;
- error.setDescription(QLatin1String("Exception occurred during function evaluation"));
- error.setLine(line);
- error.setUrl(QUrl::fromLocalFile(filename));
- v8::Local<v8::Message> message = tc.Message();
- if (!message.IsEmpty())
- QQmlExpressionPrivate::exceptionToError(message, error);
- ep->warning(error);
- return v8::Persistent<v8::Function>();
- }
- if (qmlscope) *qmlscope = qPersistentNew<v8::Object>(scopeobject);
- return qPersistentNew<v8::Function>(v8::Local<v8::Function>::Cast(result));
-}
-
-// Callee owns the persistent handle
-v8::Persistent<v8::Function>
-QQmlExpressionPrivate::evalFunction(QQmlContextData *ctxt, QObject *scope,
- const QString &code, const QString &filename, int line,
- v8::Persistent<v8::Object> *qmlscope)
-{
- QQmlEngine *engine = ctxt->engine;
- QQmlEnginePrivate *ep = QQmlEnginePrivate::get(engine);
-
- v8::HandleScope handle_scope;
- v8::Context::Scope ctxtscope(ep->v8engine()->context());
-
- v8::TryCatch tc;
- v8::Local<v8::Object> scopeobject = ep->v8engine()->qmlScope(ctxt, scope);
- v8::Local<v8::Script> script = ep->v8engine()->qmlModeCompile(code, filename, line);
- if (tc.HasCaught()) {
- QQmlError error;
- error.setDescription(QLatin1String("Exception occurred during function compilation"));
- error.setLine(line);
- error.setUrl(QUrl::fromLocalFile(filename));
- v8::Local<v8::Message> message = tc.Message();
- if (!message.IsEmpty())
- QQmlExpressionPrivate::exceptionToError(message, error);
- ep->warning(error);
- return v8::Persistent<v8::Function>();
- }
- v8::Local<v8::Value> result = script->Run(scopeobject);
- if (tc.HasCaught()) {
- QQmlError error;
- error.setDescription(QLatin1String("Exception occurred during function evaluation"));
- error.setLine(line);
- error.setUrl(QUrl::fromLocalFile(filename));
- v8::Local<v8::Message> message = tc.Message();
- if (!message.IsEmpty())
- QQmlExpressionPrivate::exceptionToError(message, error);
- ep->warning(error);
- return v8::Persistent<v8::Function>();
- }
- if (qmlscope) *qmlscope = qPersistentNew<v8::Object>(scopeobject);
- return qPersistentNew<v8::Function>(v8::Local<v8::Function>::Cast(result));
-}
-
QQmlExpression *
QQmlExpressionPrivate::create(QQmlContextData *ctxt, QObject *object,
- const QString &expr, bool isRewritten,
- const QString &url, int lineNumber, int columnNumber)
+ const QString &expr, bool isRewritten,
+ const QString &url, int lineNumber, int columnNumber)
{
- return new QQmlExpression(ctxt, object, expr, isRewritten, url, lineNumber, columnNumber, *new QQmlExpressionPrivate);
+ return new QQmlExpression(ctxt, object, expr, isRewritten, url, lineNumber, columnNumber,
+ *new QQmlExpressionPrivate);
}
/*!
@@ -408,24 +284,6 @@ QQmlExpression::QQmlExpression(QQmlContextData *ctxt, QObject *scope,
d->init(ctxt, expression, scope);
}
-/*!
- \internal
-
- To avoid exposing v8 in the public API, functionPtr must be a pointer to a v8::Handle<v8::Function>.
- For example:
- v8::Handle<v8::Function> function;
- new QQmlExpression(ctxt, scope, &function, ...);
- */
-QQmlExpression::QQmlExpression(QQmlContextData *ctxt, QObject *scope, void *functionPtr,
- QQmlExpressionPrivate &dd)
-: QObject(dd, 0)
-{
- v8::Handle<v8::Function> function = *(v8::Handle<v8::Function> *)functionPtr;
-
- Q_D(QQmlExpression);
- d->init(ctxt, function, scope);
-}
-
/*!
Destroy the QQmlExpression instance.
*/
@@ -489,217 +347,6 @@ void QQmlExpression::setExpression(const QString &expression)
qPersistentDispose(d->v8qmlscope);
}
-void QQmlExpressionPrivate::exceptionToError(v8::Handle<v8::Message> message,
- QQmlError &error)
-{
- Q_ASSERT(!message.IsEmpty());
-
- v8::Handle<v8::Value> name = message->GetScriptResourceName();
- v8::Handle<v8::String> description = message->Get();
- int lineNumber = message->GetLineNumber();
-
- v8::Local<v8::String> file = name->IsString()?name->ToString():v8::Local<v8::String>();
- if (file.IsEmpty() || file->Length() == 0)
- error.setUrl(QUrl(QLatin1String("<Unknown File>")));
- else
- error.setUrl(QUrl(QV8Engine::toStringStatic(file)));
-
- error.setLine(lineNumber);
- error.setColumn(-1);
-
- QString qDescription = QV8Engine::toStringStatic(description);
- if (qDescription.startsWith(QLatin1String("Uncaught ")))
- qDescription = qDescription.mid(9 /* strlen("Uncaught ") */);
-
- error.setDescription(qDescription);
-}
-
-void QQmlJavaScriptExpression::setNotifyOnValueChanged(bool v)
-{
- activeGuards.setFlagValue(v);
- if (!v) clearGuards();
-}
-
-void QQmlJavaScriptExpression::resetNotifyOnValueChanged()
-{
- clearGuards();
-}
-
-v8::Local<v8::Value>
-QQmlJavaScriptExpression::evaluate(QQmlContextData *context,
- v8::Handle<v8::Function> function, bool *isUndefined)
-{
- Q_ASSERT(context && context->engine);
-
- if (function.IsEmpty() || function->IsUndefined()) {
- if (isUndefined) *isUndefined = true;
- return v8::Local<v8::Value>();
- }
-
- QQmlEnginePrivate *ep = QQmlEnginePrivate::get(context->engine);
-
- Q_ASSERT(notifyOnValueChanged() || activeGuards.isEmpty());
- GuardCapture capture(context->engine, this);
-
- QQmlEnginePrivate::PropertyCapture *lastPropertyCapture = ep->propertyCapture;
- ep->propertyCapture = notifyOnValueChanged()?&capture:0;
-
-
- if (notifyOnValueChanged())
- capture.guards.copyAndClearPrepend(activeGuards);
-
- QQmlContextData *lastSharedContext = 0;
- QObject *lastSharedScope = 0;
-
- bool sharedContext = useSharedContext();
-
- // All code that follows must check with watcher before it accesses data members
- // incase we have been deleted.
- DeleteWatcher watcher(this);
-
- if (sharedContext) {
- lastSharedContext = ep->sharedContext;
- lastSharedScope = ep->sharedScope;
- ep->sharedContext = context;
- ep->sharedScope = scopeObject();
- }
-
- v8::Local<v8::Value> result;
- {
- v8::TryCatch try_catch;
- v8::Handle<v8::Object> This = ep->v8engine()->global();
- if (scopeObject() && requiresThisObject()) {
- v8::Handle<v8::Value> value = ep->v8engine()->newQObject(scopeObject());
- if (value->IsObject()) This = v8::Handle<v8::Object>::Cast(value);
- }
-
- result = function->Call(This, 0, 0);
-
- if (isUndefined)
- *isUndefined = try_catch.HasCaught() || result->IsUndefined();
-
- if (watcher.wasDeleted()) {
- } else if (try_catch.HasCaught()) {
- v8::Context::Scope scope(ep->v8engine()->context());
- v8::Local<v8::Message> message = try_catch.Message();
- if (!message.IsEmpty()) {
- QQmlExpressionPrivate::exceptionToError(message, delayedError()->error);
- } else {
- if (hasDelayedError()) delayedError()->error = QQmlError();
- }
- } else {
- if (hasDelayedError()) delayedError()->error = QQmlError();
- }
- }
-
- if (sharedContext) {
- ep->sharedContext = lastSharedContext;
- ep->sharedScope = lastSharedScope;
- }
-
- if (capture.errorString) {
- for (int ii = 0; ii < capture.errorString->count(); ++ii)
- qWarning("%s", qPrintable(capture.errorString->at(ii)));
- delete capture.errorString;
- capture.errorString = 0;
- }
-
- while (Guard *g = capture.guards.takeFirst())
- g->Delete();
-
- ep->propertyCapture = lastPropertyCapture;
-
- return result;
-}
-
-void QQmlJavaScriptExpression::GuardCapture::captureProperty(QQmlNotifier *n)
-{
- if (expression) {
-
- // Try and find a matching guard
- while (!guards.isEmpty() && !guards.first()->isConnected(n))
- guards.takeFirst()->Delete();
-
- Guard *g = 0;
- if (!guards.isEmpty()) {
- g = guards.takeFirst();
- g->cancelNotify();
- Q_ASSERT(g->isConnected(n));
- } else {
- g = Guard::New(expression, engine);
- g->connect(n);
- }
-
- expression->activeGuards.prepend(g);
- }
-}
-
-void QQmlJavaScriptExpression::GuardCapture::captureProperty(QObject *o, int c, int n)
-{
- if (expression) {
- if (n == -1) {
- if (!errorString) {
- errorString = new QStringList;
- QString preamble = QLatin1String("QQmlExpression: Expression ") +
- expression->m_vtable->expressionIdentifier(expression) +
- QLatin1String(" depends on non-NOTIFYable properties:");
- errorString->append(preamble);
- }
-
- const QMetaObject *metaObj = o->metaObject();
- QMetaProperty metaProp = metaObj->property(c);
-
- QString error = QLatin1String(" ") +
- QString::fromUtf8(metaObj->className()) +
- QLatin1String("::") +
- QString::fromUtf8(metaProp.name());
- errorString->append(error);
- } else {
-
- // Try and find a matching guard
- while (!guards.isEmpty() && !guards.first()->isConnected(o, n))
- guards.takeFirst()->Delete();
-
- Guard *g = 0;
- if (!guards.isEmpty()) {
- g = guards.takeFirst();
- g->cancelNotify();
- Q_ASSERT(g->isConnected(o, n));
- } else {
- g = Guard::New(expression, engine);
- g->connect(o, n);
- }
-
- expression->activeGuards.prepend(g);
- }
- }
-}
-
-void QQmlJavaScriptExpression::clearError()
-{
- if (m_vtable.hasValue()) {
- m_vtable.value().error = QQmlError();
- m_vtable.value().removeError();
- }
-}
-
-QQmlError QQmlJavaScriptExpression::error() const
-{
- if (m_vtable.hasValue()) return m_vtable.constValue()->error;
- else return QQmlError();
-}
-
-QQmlDelayedError *QQmlJavaScriptExpression::delayedError()
-{
- return &m_vtable.value();
-}
-
-void QQmlJavaScriptExpression::clearGuards()
-{
- while (Guard *g = activeGuards.takeFirst())
- g->Delete();
-}
-
// Must be called with a valid handle scope
v8::Local<v8::Value> QQmlExpressionPrivate::v8value(QObject *secondaryScope, bool *isUndefined)
{
@@ -923,60 +570,6 @@ QString QQmlExpressionPrivate::expressionIdentifier(QQmlJavaScriptExpression *e)
return QLatin1String("\"") + This->expression + QLatin1String("\"");
}
-QQmlAbstractExpression::QQmlAbstractExpression()
-: m_prevExpression(0), m_nextExpression(0)
-{
-}
-
-QQmlAbstractExpression::~QQmlAbstractExpression()
-{
- if (m_prevExpression) {
- *m_prevExpression = m_nextExpression;
- if (m_nextExpression)
- m_nextExpression->m_prevExpression = m_prevExpression;
- }
-
- if (m_context.isT2())
- m_context.asT2()->_s = 0;
-}
-
-QQmlContextData *QQmlAbstractExpression::context() const
-{
- if (m_context.isT1()) return m_context.asT1();
- else return m_context.asT2()->_c;
-}
-
-void QQmlAbstractExpression::setContext(QQmlContextData *context)
-{
- if (m_prevExpression) {
- *m_prevExpression = m_nextExpression;
- if (m_nextExpression)
- m_nextExpression->m_prevExpression = m_prevExpression;
- m_prevExpression = 0;
- m_nextExpression = 0;
- }
-
- if (m_context.isT1()) m_context = context;
- else m_context.asT2()->_c = context;
-
- if (context) {
- m_nextExpression = context->expressions;
- if (m_nextExpression)
- m_nextExpression->m_prevExpression = &m_nextExpression;
- m_prevExpression = &context->expressions;
- context->expressions = this;
- }
-}
-
-void QQmlAbstractExpression::refresh()
-{
-}
-
-bool QQmlAbstractExpression::isValid() const
-{
- return context() != 0;
-}
-
QT_END_NAMESPACE
#include <moc_qqmlexpression.cpp>
diff --git a/src/qml/qml/qqmlexpression.h b/src/qml/qml/qqmlexpression.h
index 4044546fbf..b60d9f1f86 100644
--- a/src/qml/qml/qqmlexpression.h
+++ b/src/qml/qml/qqmlexpression.h
@@ -96,8 +96,6 @@ Q_SIGNALS:
protected:
QQmlExpression(QQmlContextData *, QObject *, const QString &,
QQmlExpressionPrivate &dd);
- QQmlExpression(QQmlContextData *, QObject *, void *,
- QQmlExpressionPrivate &dd);
QQmlExpression(QQmlContextData *, QObject *, const QString &, bool,
const QString &, int, int, QQmlExpressionPrivate &dd);
QQmlExpression(QQmlContextData *, QObject *, const QByteArray &, bool,
diff --git a/src/qml/qml/qqmlexpression_p.h b/src/qml/qml/qqmlexpression_p.h
index deca29ab60..186e3aebf9 100644
--- a/src/qml/qml/qqmlexpression_p.h
+++ b/src/qml/qml/qqmlexpression_p.h
@@ -56,161 +56,22 @@
#include "qqmlexpression.h"
#include <private/qv8engine_p.h>
+#include <private/qqmlguard_p.h>
+#include <private/qqmlengine_p.h>
#include <private/qfieldlist_p.h>
#include <private/qflagpointer_p.h>
#include <private/qdeletewatcher_p.h>
-#include <private/qqmlguard_p.h>
#include <private/qpointervaluepair_p.h>
-#include <private/qqmlengine_p.h>
+#include <private/qqmlabstractexpression_p.h>
+#include <private/qqmljavascriptexpression_p.h>
QT_BEGIN_NAMESPACE
-class QQmlAbstractExpression
-{
-public:
- QQmlAbstractExpression();
- virtual ~QQmlAbstractExpression();
-
- bool isValid() const;
-
- QQmlContextData *context() const;
- void setContext(QQmlContextData *);
-
- virtual void refresh();
-
- class DeleteWatcher {
- public:
- inline DeleteWatcher(QQmlAbstractExpression *);
- inline ~DeleteWatcher();
- inline bool wasDeleted() const;
- private:
- friend class QQmlAbstractExpression;
- QQmlContextData *_c;
- QQmlAbstractExpression **_w;
- QQmlAbstractExpression *_s;
- };
-
-private:
- friend class QQmlContext;
- friend class QQmlContextData;
- friend class QQmlContextPrivate;
-
- QBiPointer<QQmlContextData, DeleteWatcher> m_context;
- QQmlAbstractExpression **m_prevExpression;
- QQmlAbstractExpression *m_nextExpression;
-};
-
-class QQmlDelayedError
-{
-public:
- inline QQmlDelayedError() : nextError(0), prevError(0) {}
- inline ~QQmlDelayedError() { removeError(); }
-
- QQmlError error;
-
- bool addError(QQmlEnginePrivate *);
-
- inline void removeError() {
- if (!prevError) return;
- if (nextError) nextError->prevError = prevError;
- *prevError = nextError;
- nextError = 0;
- prevError = 0;
- }
-
-private:
- QQmlDelayedError *nextError;
- QQmlDelayedError **prevError;
-};
-
-class QQmlJavaScriptExpression
-{
-public:
- // Although this looks crazy, we implement our own "vtable" here, rather than relying on
- // C++ virtuals, to save memory. By doing it ourselves, we can overload the storage
- // location that is use for the vtable to also store the rarely used delayed error.
- // If we use C++ virtuals, we can't do this and it consts us an extra sizeof(void *) in
- // memory for every expression.
- struct VTable {
- QString (*expressionIdentifier)(QQmlJavaScriptExpression *);
- void (*expressionChanged)(QQmlJavaScriptExpression *);
- };
-
- QQmlJavaScriptExpression(VTable *vtable);
-
- v8::Local<v8::Value> evaluate(QQmlContextData *, v8::Handle<v8::Function>,
- bool *isUndefined);
-
- inline bool requiresThisObject() const;
- inline void setRequiresThisObject(bool v);
- inline bool useSharedContext() const;
- inline void setUseSharedContext(bool v);
- inline bool notifyOnValueChanged() const;
-
- void setNotifyOnValueChanged(bool v);
- void resetNotifyOnValueChanged();
-
- inline QObject *scopeObject() const;
- inline void setScopeObject(QObject *v);
-
- class DeleteWatcher {
- public:
- inline DeleteWatcher(QQmlJavaScriptExpression *);
- inline ~DeleteWatcher();
- inline bool wasDeleted() const;
- private:
- friend class QQmlJavaScriptExpression;
- QObject *_c;
- QQmlJavaScriptExpression **_w;
- QQmlJavaScriptExpression *_s;
- };
-
- inline bool hasError() const;
- inline bool hasDelayedError() const;
- QQmlError error() const;
- void clearError();
- QQmlDelayedError *delayedError();
-
-protected:
- ~QQmlJavaScriptExpression();
-
-private:
- typedef QQmlJavaScriptExpressionGuard Guard;
- friend class QQmlJavaScriptExpressionGuard;
-
- struct GuardCapture : public QQmlEnginePrivate::PropertyCapture {
- GuardCapture(QQmlEngine *engine, QQmlJavaScriptExpression *e)
- : engine(engine), expression(e), errorString(0) { }
-
- ~GuardCapture() {
- Q_ASSERT(guards.isEmpty());
- Q_ASSERT(errorString == 0);
- }
-
- virtual void captureProperty(QQmlNotifier *);
- virtual void captureProperty(QObject *, int, int);
-
- QQmlEngine *engine;
- QQmlJavaScriptExpression *expression;
- QFieldList<Guard, &Guard::next> guards;
- QStringList *errorString;
- };
-
- QPointerValuePair<VTable, QQmlDelayedError> m_vtable;
-
- // We store some flag bits in the following flag pointers.
- // m_scopeObject:flag1 - requiresThisObject
- // activeGuards:flag1 - notifyOnValueChanged
- // activeGuards:flag2 - useSharedContext
- QBiPointer<QObject, DeleteWatcher> m_scopeObject;
- QForwardFieldList<Guard, &Guard::next> activeGuards;
-
- void clearGuards();
-};
-
class QQmlExpression;
class QString;
-class Q_QML_PRIVATE_EXPORT QQmlExpressionPrivate : public QObjectPrivate, public QQmlJavaScriptExpression, public QQmlAbstractExpression
+class Q_QML_PRIVATE_EXPORT QQmlExpressionPrivate : public QObjectPrivate,
+ public QQmlJavaScriptExpression,
+ public QQmlAbstractExpression
{
Q_DECLARE_PUBLIC(QQmlExpression)
public:
@@ -218,7 +79,6 @@ public:
~QQmlExpressionPrivate();
void init(QQmlContextData *, const QString &, QObject *);
- void init(QQmlContextData *, v8::Handle<v8::Function>, QObject *);
void init(QQmlContextData *, const QString &, bool, QObject *, const QString &, int, int);
void init(QQmlContextData *, const QByteArray &, bool, QObject *, const QString &, int, int);
@@ -231,18 +91,8 @@ public:
void _q_notify();
- static void exceptionToError(v8::Handle<v8::Message>, QQmlError &);
- static v8::Persistent<v8::Function> evalFunction(QQmlContextData *ctxt, QObject *scope,
- const QString &code, const QString &filename,
- int line,
- v8::Persistent<v8::Object> *qmlscope = 0);
- static v8::Persistent<v8::Function> evalFunction(QQmlContextData *ctxt, QObject *scope,
- const char *code, int codeLength,
- const QString &filename, int line,
- v8::Persistent<v8::Object> *qmlscope = 0);
-
static QQmlExpression *create(QQmlContextData *, QObject *, const QString &, bool,
- const QString &, int, int);
+ const QString &, int, int);
bool expressionFunctionValid:1;
bool expressionFunctionRewritten:1;
@@ -267,103 +117,6 @@ public:
QQmlRefCount *dataRef;
};
-QQmlAbstractExpression::DeleteWatcher::DeleteWatcher(QQmlAbstractExpression *e)
-: _c(0), _w(0), _s(e)
-{
- if (e->m_context.isT1()) {
- _w = &_s;
- _c = e->m_context.asT1();
- e->m_context = this;
- } else {
- // Another watcher is already registered
- _w = &e->m_context.asT2()->_s;
- }
-}
-
-QQmlAbstractExpression::DeleteWatcher::~DeleteWatcher()
-{
- Q_ASSERT(*_w == 0 || (*_w == _s && _s->m_context.isT2()));
- if (*_w && _s->m_context.asT2() == this)
- _s->m_context = _c;
-}
-
-bool QQmlAbstractExpression::DeleteWatcher::wasDeleted() const
-{
- return *_w == 0;
-}
-
-QQmlJavaScriptExpression::DeleteWatcher::DeleteWatcher(QQmlJavaScriptExpression *e)
-: _c(0), _w(0), _s(e)
-{
- if (e->m_scopeObject.isT1()) {
- _w = &_s;
- _c = e->m_scopeObject.asT1();
- e->m_scopeObject = this;
- } else {
- // Another watcher is already registered
- _w = &e->m_scopeObject.asT2()->_s;
- }
-}
-
-QQmlJavaScriptExpression::DeleteWatcher::~DeleteWatcher()
-{
- Q_ASSERT(*_w == 0 || (*_w == _s && _s->m_scopeObject.isT2()));
- if (*_w && _s->m_scopeObject.asT2() == this)
- _s->m_scopeObject = _c;
-}
-
-bool QQmlJavaScriptExpression::DeleteWatcher::wasDeleted() const
-{
- return *_w == 0;
-}
-
-bool QQmlJavaScriptExpression::requiresThisObject() const
-{
- return m_scopeObject.flag();
-}
-
-void QQmlJavaScriptExpression::setRequiresThisObject(bool v)
-{
- m_scopeObject.setFlagValue(v);
-}
-
-bool QQmlJavaScriptExpression::useSharedContext() const
-{
- return activeGuards.flag2();
-}
-
-void QQmlJavaScriptExpression::setUseSharedContext(bool v)
-{
- activeGuards.setFlag2Value(v);
-}
-
-bool QQmlJavaScriptExpression::notifyOnValueChanged() const
-{
- return activeGuards.flag();
-}
-
-QObject *QQmlJavaScriptExpression::scopeObject() const
-{
- if (m_scopeObject.isT1()) return m_scopeObject.asT1();
- else return m_scopeObject.asT2()->_c;
-}
-
-void QQmlJavaScriptExpression::setScopeObject(QObject *v)
-{
- if (m_scopeObject.isT1()) m_scopeObject = v;
- else m_scopeObject.asT2()->_c = v;
-}
-
-bool QQmlJavaScriptExpression::hasError() const
-{
- return m_vtable.hasValue() && m_vtable.constValue()->error.isValid();
-}
-
-bool QQmlJavaScriptExpression::hasDelayedError() const
-{
- return m_vtable.hasValue();
-}
-
QQmlExpressionPrivate *QQmlExpressionPrivate::get(QQmlExpression *expr)
{
return static_cast<QQmlExpressionPrivate *>(QObjectPrivate::get(expr));
@@ -374,32 +127,6 @@ QQmlExpression *QQmlExpressionPrivate::get(QQmlExpressionPrivate *expr)
return expr->q_func();
}
-QQmlJavaScriptExpressionGuard::QQmlJavaScriptExpressionGuard(QQmlJavaScriptExpression *e)
-: expression(e), next(0)
-{
- callback = &endpointCallback;
-}
-
-void QQmlJavaScriptExpressionGuard::endpointCallback(QQmlNotifierEndpoint *e)
-{
- QQmlJavaScriptExpression *expression =
- static_cast<QQmlJavaScriptExpressionGuard *>(e)->expression;
-
- expression->m_vtable->expressionChanged(expression);
-}
-
-QQmlJavaScriptExpressionGuard *
-QQmlJavaScriptExpressionGuard::New(QQmlJavaScriptExpression *e,
- QQmlEngine *engine)
-{
- Q_ASSERT(e);
- return QQmlEnginePrivate::get(engine)->jsExpressionGuardPool.New(e);
-}
-
-void QQmlJavaScriptExpressionGuard::Delete()
-{
- QRecyclePool<QQmlJavaScriptExpressionGuard>::Delete(this);
-}
QT_END_NAMESPACE
diff --git a/src/qml/qml/qqmlextensionplugin.cpp b/src/qml/qml/qqmlextensionplugin.cpp
index c3d8f0b34f..b69fa5da7a 100644
--- a/src/qml/qml/qqmlextensionplugin.cpp
+++ b/src/qml/qml/qqmlextensionplugin.cpp
@@ -57,10 +57,10 @@ QT_BEGIN_NAMESPACE
To write a QML extension plugin:
\list
- \o Subclass QQmlExtensionPlugin, implement registerTypes() method
+ \li Subclass QQmlExtensionPlugin, implement registerTypes() method
to register types using qmlRegisterType(), and export the class using the Q_EXPORT_PLUGIN2() macro
- \o Write an appropriate project file for the plugin
- \o Create a \l{Writing a qmldir file}{qmldir file} to describe the plugin
+ \li Write an appropriate project file for the plugin
+ \li Create a \l{Writing a qmldir file}{qmldir file} to describe the plugin
\endlist
QML extension plugins can be used to provide either application-specific or
diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp
index 6e74536fa3..0c1fb3bd93 100644
--- a/src/qml/qml/qqmlimport.cpp
+++ b/src/qml/qml/qqmlimport.cpp
@@ -268,9 +268,9 @@ QList<QQmlImports::ScriptReference> QQmlImports::resolvedScripts() const
The given (namespace qualified) \a type is resolved to either
\list
- \o a QQmlImportedNamespace stored at \a ns_return,
- \o a QQmlType stored at \a type_return, or
- \o a component located at \a url_return.
+ \li a QQmlImportedNamespace stored at \a ns_return,
+ \li a QQmlType stored at \a type_return, or
+ \li a component located at \a url_return.
\endlist
If any return pointer is 0, the corresponding search is not done.
@@ -956,12 +956,12 @@ QString QQmlImportDatabase::resolvePlugin(QQmlTypeLoader *typeLoader,
Returns the result of the merge of \a baseName with \a dir and the platform suffix.
\table
- \header \i Platform \i Valid suffixes
- \row \i Windows \i \c .dll
- \row \i Unix/Linux \i \c .so
- \row \i AIX \i \c .a
- \row \i HP-UX \i \c .sl, \c .so (HP-UXi)
- \row \i Mac OS X \i \c .dylib, \c .bundle, \c .so
+ \header \li Platform \li Valid suffixes
+ \row \li Windows \li \c .dll
+ \row \li Unix/Linux \li \c .so
+ \row \li AIX \li \c .a
+ \row \li HP-UX \li \c .sl, \c .so (HP-UXi)
+ \row \li Mac OS X \li \c .dylib, \c .bundle, \c .so
\endtable
Version number on unix are ignored.
diff --git a/src/qml/qml/qqmlincubator.cpp b/src/qml/qml/qqmlincubator.cpp
index 834d4bbb97..aa9777d89e 100644
--- a/src/qml/qml/qqmlincubator.cpp
+++ b/src/qml/qml/qqmlincubator.cpp
@@ -427,14 +427,14 @@ specified IncubationMode.
QQmlIncubator supports three incubation modes:
\list
-\i Synchronous The creation occurs synchronously. That is, once the
+\li Synchronous The creation occurs synchronously. That is, once the
QQmlComponent::create() call returns, the incubator will already be in either the
Error or Ready state. A synchronous incubator has no real advantage compared to using
the synchronous creation methods on QQmlComponent directly, but it may simplify an
application's implementation to use the same API for both synchronous and asynchronous
creations.
-\i Asynchronous (default) The creation occurs asynchronously, assuming a
+\li Asynchronous (default) The creation occurs asynchronously, assuming a
QQmlIncubatorController is set on the QQmlEngine.
The incubator will remain in the Loading state until either the creation is complete or an error
@@ -446,7 +446,7 @@ that are slightly off screen while the list is being scrolled. If, during async
the object is needed immediately the QQmlIncubator::forceCompletion() method can be called
to complete the creation process synchronously.
-\i AsynchronousIfNested The creation will occur asynchronously if part of a nested asynchronous
+\li AsynchronousIfNested The creation will occur asynchronously if part of a nested asynchronous
creation, or synchronously if not.
In most scenarios where a QML element or component wants the appearance of a synchronous
@@ -542,6 +542,10 @@ void QQmlIncubator::clear()
d->clear();
+ // if we're waiting on any incubators then they should be cleared too.
+ while (d->waitingFor.first())
+ static_cast<QQmlIncubatorPrivate*>(d->waitingFor.first())->q->clear();
+
d->vme.reset();
d->vmeGuard.clear();
diff --git a/src/qml/qml/qqmljavascriptexpression.cpp b/src/qml/qml/qqmljavascriptexpression.cpp
new file mode 100644
index 0000000000..aad6a04714
--- /dev/null
+++ b/src/qml/qml/qqmljavascriptexpression.cpp
@@ -0,0 +1,371 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qqmljavascriptexpression_p.h"
+
+#include <private/qqmlexpression_p.h>
+
+QT_BEGIN_NAMESPACE
+
+bool QQmlDelayedError::addError(QQmlEnginePrivate *e)
+{
+ if (!e) return false;
+
+ if (e->inProgressCreations == 0) return false; // Not in construction
+
+ if (prevError) return true; // Already in error chain
+
+ prevError = &e->erroredBindings;
+ nextError = e->erroredBindings;
+ e->erroredBindings = this;
+ if (nextError) nextError->prevError = &nextError;
+
+ return true;
+}
+
+QQmlJavaScriptExpression::QQmlJavaScriptExpression(VTable *v)
+: m_vtable(v)
+{
+}
+
+QQmlJavaScriptExpression::~QQmlJavaScriptExpression()
+{
+ clearGuards();
+ if (m_scopeObject.isT2()) // notify DeleteWatcher of our deletion.
+ m_scopeObject.asT2()->_s = 0;
+}
+
+void QQmlJavaScriptExpression::setNotifyOnValueChanged(bool v)
+{
+ activeGuards.setFlagValue(v);
+ if (!v) clearGuards();
+}
+
+void QQmlJavaScriptExpression::resetNotifyOnValueChanged()
+{
+ clearGuards();
+}
+
+v8::Local<v8::Value>
+QQmlJavaScriptExpression::evaluate(QQmlContextData *context,
+ v8::Handle<v8::Function> function, bool *isUndefined)
+{
+ Q_ASSERT(context && context->engine);
+
+ if (function.IsEmpty() || function->IsUndefined()) {
+ if (isUndefined) *isUndefined = true;
+ return v8::Local<v8::Value>();
+ }
+
+ QQmlEnginePrivate *ep = QQmlEnginePrivate::get(context->engine);
+
+ Q_ASSERT(notifyOnValueChanged() || activeGuards.isEmpty());
+ GuardCapture capture(context->engine, this);
+
+ QQmlEnginePrivate::PropertyCapture *lastPropertyCapture = ep->propertyCapture;
+ ep->propertyCapture = notifyOnValueChanged()?&capture:0;
+
+
+ if (notifyOnValueChanged())
+ capture.guards.copyAndClearPrepend(activeGuards);
+
+ QQmlContextData *lastSharedContext = 0;
+ QObject *lastSharedScope = 0;
+
+ bool sharedContext = useSharedContext();
+
+ // All code that follows must check with watcher before it accesses data members
+ // incase we have been deleted.
+ DeleteWatcher watcher(this);
+
+ if (sharedContext) {
+ lastSharedContext = ep->sharedContext;
+ lastSharedScope = ep->sharedScope;
+ ep->sharedContext = context;
+ ep->sharedScope = scopeObject();
+ }
+
+ v8::Local<v8::Value> result;
+ {
+ v8::TryCatch try_catch;
+ v8::Handle<v8::Object> This = ep->v8engine()->global();
+ if (scopeObject() && requiresThisObject()) {
+ v8::Handle<v8::Value> value = ep->v8engine()->newQObject(scopeObject());
+ if (value->IsObject()) This = v8::Handle<v8::Object>::Cast(value);
+ }
+
+ result = function->Call(This, 0, 0);
+
+ if (isUndefined)
+ *isUndefined = try_catch.HasCaught() || result->IsUndefined();
+
+ if (watcher.wasDeleted()) {
+ } else if (try_catch.HasCaught()) {
+ v8::Context::Scope scope(ep->v8engine()->context());
+ v8::Local<v8::Message> message = try_catch.Message();
+ if (!message.IsEmpty()) {
+ QQmlExpressionPrivate::exceptionToError(message, delayedError()->error);
+ } else {
+ if (hasDelayedError()) delayedError()->error = QQmlError();
+ }
+ } else {
+ if (hasDelayedError()) delayedError()->error = QQmlError();
+ }
+ }
+
+ if (sharedContext) {
+ ep->sharedContext = lastSharedContext;
+ ep->sharedScope = lastSharedScope;
+ }
+
+ if (capture.errorString) {
+ for (int ii = 0; ii < capture.errorString->count(); ++ii)
+ qWarning("%s", qPrintable(capture.errorString->at(ii)));
+ delete capture.errorString;
+ capture.errorString = 0;
+ }
+
+ while (Guard *g = capture.guards.takeFirst())
+ g->Delete();
+
+ ep->propertyCapture = lastPropertyCapture;
+
+ return result;
+}
+
+void QQmlJavaScriptExpression::GuardCapture::captureProperty(QQmlNotifier *n)
+{
+ if (expression) {
+
+ // Try and find a matching guard
+ while (!guards.isEmpty() && !guards.first()->isConnected(n))
+ guards.takeFirst()->Delete();
+
+ Guard *g = 0;
+ if (!guards.isEmpty()) {
+ g = guards.takeFirst();
+ g->cancelNotify();
+ Q_ASSERT(g->isConnected(n));
+ } else {
+ g = Guard::New(expression, engine);
+ g->connect(n);
+ }
+
+ expression->activeGuards.prepend(g);
+ }
+}
+
+void QQmlJavaScriptExpression::GuardCapture::captureProperty(QObject *o, int c, int n)
+{
+ if (expression) {
+ if (n == -1) {
+ if (!errorString) {
+ errorString = new QStringList;
+ QString preamble = QLatin1String("QQmlExpression: Expression ") +
+ expression->m_vtable->expressionIdentifier(expression) +
+ QLatin1String(" depends on non-NOTIFYable properties:");
+ errorString->append(preamble);
+ }
+
+ const QMetaObject *metaObj = o->metaObject();
+ QMetaProperty metaProp = metaObj->property(c);
+
+ QString error = QLatin1String(" ") +
+ QString::fromUtf8(metaObj->className()) +
+ QLatin1String("::") +
+ QString::fromUtf8(metaProp.name());
+ errorString->append(error);
+ } else {
+
+ // Try and find a matching guard
+ while (!guards.isEmpty() && !guards.first()->isConnected(o, n))
+ guards.takeFirst()->Delete();
+
+ Guard *g = 0;
+ if (!guards.isEmpty()) {
+ g = guards.takeFirst();
+ g->cancelNotify();
+ Q_ASSERT(g->isConnected(o, n));
+ } else {
+ g = Guard::New(expression, engine);
+ g->connect(o, n);
+ }
+
+ expression->activeGuards.prepend(g);
+ }
+ }
+}
+
+void QQmlJavaScriptExpression::clearError()
+{
+ if (m_vtable.hasValue()) {
+ m_vtable.value().error = QQmlError();
+ m_vtable.value().removeError();
+ }
+}
+
+QQmlError QQmlJavaScriptExpression::error() const
+{
+ if (m_vtable.hasValue()) return m_vtable.constValue()->error;
+ else return QQmlError();
+}
+
+QQmlDelayedError *QQmlJavaScriptExpression::delayedError()
+{
+ return &m_vtable.value();
+}
+
+void QQmlJavaScriptExpression::exceptionToError(v8::Handle<v8::Message> message, QQmlError &error)
+{
+ Q_ASSERT(!message.IsEmpty());
+
+ v8::Handle<v8::Value> name = message->GetScriptResourceName();
+ v8::Handle<v8::String> description = message->Get();
+ int lineNumber = message->GetLineNumber();
+
+ v8::Local<v8::String> file = name->IsString()?name->ToString():v8::Local<v8::String>();
+ if (file.IsEmpty() || file->Length() == 0)
+ error.setUrl(QUrl(QLatin1String("<Unknown File>")));
+ else
+ error.setUrl(QUrl(QV8Engine::toStringStatic(file)));
+
+ error.setLine(lineNumber);
+ error.setColumn(-1);
+
+ QString qDescription = QV8Engine::toStringStatic(description);
+ if (qDescription.startsWith(QLatin1String("Uncaught ")))
+ qDescription = qDescription.mid(9 /* strlen("Uncaught ") */);
+
+ error.setDescription(qDescription);
+}
+
+// Callee owns the persistent handle
+v8::Persistent<v8::Function>
+QQmlJavaScriptExpression::evalFunction(QQmlContextData *ctxt, QObject *scope,
+ const char *code, int codeLength,
+ const QString &filename, int line,
+ v8::Persistent<v8::Object> *qmlscope)
+{
+ QQmlEngine *engine = ctxt->engine;
+ QQmlEnginePrivate *ep = QQmlEnginePrivate::get(engine);
+
+ v8::HandleScope handle_scope;
+ v8::Context::Scope ctxtscope(ep->v8engine()->context());
+
+ v8::TryCatch tc;
+ v8::Local<v8::Object> scopeobject = ep->v8engine()->qmlScope(ctxt, scope);
+ v8::Local<v8::Script> script = ep->v8engine()->qmlModeCompile(code, codeLength, filename, line);
+ if (tc.HasCaught()) {
+ QQmlError error;
+ error.setDescription(QLatin1String("Exception occurred during function compilation"));
+ error.setLine(line);
+ error.setUrl(QUrl::fromLocalFile(filename));
+ v8::Local<v8::Message> message = tc.Message();
+ if (!message.IsEmpty())
+ QQmlExpressionPrivate::exceptionToError(message, error);
+ ep->warning(error);
+ return v8::Persistent<v8::Function>();
+ }
+ v8::Local<v8::Value> result = script->Run(scopeobject);
+ if (tc.HasCaught()) {
+ QQmlError error;
+ error.setDescription(QLatin1String("Exception occurred during function evaluation"));
+ error.setLine(line);
+ error.setUrl(QUrl::fromLocalFile(filename));
+ v8::Local<v8::Message> message = tc.Message();
+ if (!message.IsEmpty())
+ QQmlExpressionPrivate::exceptionToError(message, error);
+ ep->warning(error);
+ return v8::Persistent<v8::Function>();
+ }
+ if (qmlscope) *qmlscope = qPersistentNew<v8::Object>(scopeobject);
+ return qPersistentNew<v8::Function>(v8::Local<v8::Function>::Cast(result));
+}
+
+// Callee owns the persistent handle
+v8::Persistent<v8::Function>
+QQmlJavaScriptExpression::evalFunction(QQmlContextData *ctxt, QObject *scope,
+ const QString &code, const QString &filename, int line,
+ v8::Persistent<v8::Object> *qmlscope)
+{
+ QQmlEngine *engine = ctxt->engine;
+ QQmlEnginePrivate *ep = QQmlEnginePrivate::get(engine);
+
+ v8::HandleScope handle_scope;
+ v8::Context::Scope ctxtscope(ep->v8engine()->context());
+
+ v8::TryCatch tc;
+ v8::Local<v8::Object> scopeobject = ep->v8engine()->qmlScope(ctxt, scope);
+ v8::Local<v8::Script> script = ep->v8engine()->qmlModeCompile(code, filename, line);
+ if (tc.HasCaught()) {
+ QQmlError error;
+ error.setDescription(QLatin1String("Exception occurred during function compilation"));
+ error.setLine(line);
+ error.setUrl(QUrl::fromLocalFile(filename));
+ v8::Local<v8::Message> message = tc.Message();
+ if (!message.IsEmpty())
+ QQmlExpressionPrivate::exceptionToError(message, error);
+ ep->warning(error);
+ return v8::Persistent<v8::Function>();
+ }
+ v8::Local<v8::Value> result = script->Run(scopeobject);
+ if (tc.HasCaught()) {
+ QQmlError error;
+ error.setDescription(QLatin1String("Exception occurred during function evaluation"));
+ error.setLine(line);
+ error.setUrl(QUrl::fromLocalFile(filename));
+ v8::Local<v8::Message> message = tc.Message();
+ if (!message.IsEmpty())
+ QQmlExpressionPrivate::exceptionToError(message, error);
+ ep->warning(error);
+ return v8::Persistent<v8::Function>();
+ }
+ if (qmlscope) *qmlscope = qPersistentNew<v8::Object>(scopeobject);
+ return qPersistentNew<v8::Function>(v8::Local<v8::Function>::Cast(result));
+}
+
+void QQmlJavaScriptExpression::clearGuards()
+{
+ while (Guard *g = activeGuards.takeFirst())
+ g->Delete();
+}
+
+QT_END_NAMESPACE
diff --git a/src/qml/qml/qqmljavascriptexpression_p.h b/src/qml/qml/qqmljavascriptexpression_p.h
new file mode 100644
index 0000000000..5d790e4570
--- /dev/null
+++ b/src/qml/qml/qqmljavascriptexpression_p.h
@@ -0,0 +1,283 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQMLJAVASCRIPTEXPRESSION_P_H
+#define QQMLJAVASCRIPTEXPRESSION_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <private/qv8_p.h>
+#include <QtCore/qglobal.h>
+#include <QtQml/qqmlerror.h>
+#include <private/qqmlengine_p.h>
+#include <private/qpointervaluepair_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQmlDelayedError
+{
+public:
+ inline QQmlDelayedError() : nextError(0), prevError(0) {}
+ inline ~QQmlDelayedError() { removeError(); }
+
+ QQmlError error;
+
+ bool addError(QQmlEnginePrivate *);
+
+ inline void removeError() {
+ if (!prevError) return;
+ if (nextError) nextError->prevError = prevError;
+ *prevError = nextError;
+ nextError = 0;
+ prevError = 0;
+ }
+
+private:
+ QQmlDelayedError *nextError;
+ QQmlDelayedError **prevError;
+};
+
+class QQmlJavaScriptExpression
+{
+public:
+ // Although this looks crazy, we implement our own "vtable" here, rather than relying on
+ // C++ virtuals, to save memory. By doing it ourselves, we can overload the storage
+ // location that is use for the vtable to also store the rarely used delayed error.
+ // If we use C++ virtuals, we can't do this and it consts us an extra sizeof(void *) in
+ // memory for every expression.
+ struct VTable {
+ QString (*expressionIdentifier)(QQmlJavaScriptExpression *);
+ void (*expressionChanged)(QQmlJavaScriptExpression *);
+ };
+
+ QQmlJavaScriptExpression(VTable *vtable);
+
+ v8::Local<v8::Value> evaluate(QQmlContextData *, v8::Handle<v8::Function>,
+ bool *isUndefined);
+
+ inline bool requiresThisObject() const;
+ inline void setRequiresThisObject(bool v);
+ inline bool useSharedContext() const;
+ inline void setUseSharedContext(bool v);
+ inline bool notifyOnValueChanged() const;
+
+ void setNotifyOnValueChanged(bool v);
+ void resetNotifyOnValueChanged();
+
+ inline QObject *scopeObject() const;
+ inline void setScopeObject(QObject *v);
+
+ class DeleteWatcher {
+ public:
+ inline DeleteWatcher(QQmlJavaScriptExpression *);
+ inline ~DeleteWatcher();
+ inline bool wasDeleted() const;
+ private:
+ friend class QQmlJavaScriptExpression;
+ QObject *_c;
+ QQmlJavaScriptExpression **_w;
+ QQmlJavaScriptExpression *_s;
+ };
+
+ inline bool hasError() const;
+ inline bool hasDelayedError() const;
+ QQmlError error() const;
+ void clearError();
+ QQmlDelayedError *delayedError();
+
+ static void exceptionToError(v8::Handle<v8::Message>, QQmlError &);
+ static v8::Persistent<v8::Function> evalFunction(QQmlContextData *ctxt, QObject *scope,
+ const QString &code, const QString &filename,
+ int line,
+ v8::Persistent<v8::Object> *qmlscope = 0);
+ static v8::Persistent<v8::Function> evalFunction(QQmlContextData *ctxt, QObject *scope,
+ const char *code, int codeLength,
+ const QString &filename, int line,
+ v8::Persistent<v8::Object> *qmlscope = 0);
+protected:
+ ~QQmlJavaScriptExpression();
+
+private:
+ typedef QQmlJavaScriptExpressionGuard Guard;
+ friend class QQmlJavaScriptExpressionGuard;
+
+ struct GuardCapture : public QQmlEnginePrivate::PropertyCapture {
+ GuardCapture(QQmlEngine *engine, QQmlJavaScriptExpression *e)
+ : engine(engine), expression(e), errorString(0) { }
+
+ ~GuardCapture() {
+ Q_ASSERT(guards.isEmpty());
+ Q_ASSERT(errorString == 0);
+ }
+
+ virtual void captureProperty(QQmlNotifier *);
+ virtual void captureProperty(QObject *, int, int);
+
+ QQmlEngine *engine;
+ QQmlJavaScriptExpression *expression;
+ QFieldList<Guard, &Guard::next> guards;
+ QStringList *errorString;
+ };
+
+ QPointerValuePair<VTable, QQmlDelayedError> m_vtable;
+
+ // We store some flag bits in the following flag pointers.
+ // m_scopeObject:flag1 - requiresThisObject
+ // activeGuards:flag1 - notifyOnValueChanged
+ // activeGuards:flag2 - useSharedContext
+ QBiPointer<QObject, DeleteWatcher> m_scopeObject;
+ QForwardFieldList<Guard, &Guard::next> activeGuards;
+
+ void clearGuards();
+};
+
+QQmlJavaScriptExpression::DeleteWatcher::DeleteWatcher(QQmlJavaScriptExpression *e)
+: _c(0), _w(0), _s(e)
+{
+ if (e->m_scopeObject.isT1()) {
+ _w = &_s;
+ _c = e->m_scopeObject.asT1();
+ e->m_scopeObject = this;
+ } else {
+ // Another watcher is already registered
+ _w = &e->m_scopeObject.asT2()->_s;
+ }
+}
+
+QQmlJavaScriptExpression::DeleteWatcher::~DeleteWatcher()
+{
+ Q_ASSERT(*_w == 0 || (*_w == _s && _s->m_scopeObject.isT2()));
+ if (*_w && _s->m_scopeObject.asT2() == this)
+ _s->m_scopeObject = _c;
+}
+
+bool QQmlJavaScriptExpression::DeleteWatcher::wasDeleted() const
+{
+ return *_w == 0;
+}
+
+bool QQmlJavaScriptExpression::requiresThisObject() const
+{
+ return m_scopeObject.flag();
+}
+
+void QQmlJavaScriptExpression::setRequiresThisObject(bool v)
+{
+ m_scopeObject.setFlagValue(v);
+}
+
+bool QQmlJavaScriptExpression::useSharedContext() const
+{
+ return activeGuards.flag2();
+}
+
+void QQmlJavaScriptExpression::setUseSharedContext(bool v)
+{
+ activeGuards.setFlag2Value(v);
+}
+
+bool QQmlJavaScriptExpression::notifyOnValueChanged() const
+{
+ return activeGuards.flag();
+}
+
+QObject *QQmlJavaScriptExpression::scopeObject() const
+{
+ if (m_scopeObject.isT1()) return m_scopeObject.asT1();
+ else return m_scopeObject.asT2()->_c;
+}
+
+void QQmlJavaScriptExpression::setScopeObject(QObject *v)
+{
+ if (m_scopeObject.isT1()) m_scopeObject = v;
+ else m_scopeObject.asT2()->_c = v;
+}
+
+bool QQmlJavaScriptExpression::hasError() const
+{
+ return m_vtable.hasValue() && m_vtable.constValue()->error.isValid();
+}
+
+bool QQmlJavaScriptExpression::hasDelayedError() const
+{
+ return m_vtable.hasValue();
+}
+
+QQmlJavaScriptExpressionGuard::QQmlJavaScriptExpressionGuard(QQmlJavaScriptExpression *e)
+: expression(e), next(0)
+{
+ callback = &endpointCallback;
+}
+
+void QQmlJavaScriptExpressionGuard::endpointCallback(QQmlNotifierEndpoint *e)
+{
+ QQmlJavaScriptExpression *expression =
+ static_cast<QQmlJavaScriptExpressionGuard *>(e)->expression;
+
+ expression->m_vtable->expressionChanged(expression);
+}
+
+QQmlJavaScriptExpressionGuard *
+QQmlJavaScriptExpressionGuard::New(QQmlJavaScriptExpression *e,
+ QQmlEngine *engine)
+{
+ Q_ASSERT(e);
+ return QQmlEnginePrivate::get(engine)->jsExpressionGuardPool.New(e);
+}
+
+void QQmlJavaScriptExpressionGuard::Delete()
+{
+ QRecyclePool<QQmlJavaScriptExpressionGuard>::Delete(this);
+}
+
+
+QT_END_NAMESPACE
+
+#endif // QQMLJAVASCRIPTEXPRESSION_P_H
diff --git a/src/qml/qml/qqmllocale.cpp b/src/qml/qml/qqmllocale.cpp
index d684378832..4a4563ccd4 100644
--- a/src/qml/qml/qqmllocale.cpp
+++ b/src/qml/qml/qqmllocale.cpp
@@ -1023,13 +1023,13 @@ v8::Handle<v8::Value> QQmlLocale::localeCompare(const v8::Arguments &args)
Holds the first day of the week according to the current locale.
\list
- \o Locale.Sunday = 0
- \o Locale.Monday = 1
- \o Locale.Tuesday = 2
- \o Locale.Wednesday = 3
- \o Locale.Thursday = 4
- \o Locale.Friday = 5
- \o Locale.Saturday = 6
+ \li Locale.Sunday = 0
+ \li Locale.Monday = 1
+ \li Locale.Tuesday = 2
+ \li Locale.Wednesday = 3
+ \li Locale.Thursday = 4
+ \li Locale.Friday = 5
+ \li Locale.Saturday = 6
\endlist
\note that these values match the JS Date API which is different
@@ -1062,8 +1062,8 @@ v8::Handle<v8::Value> QQmlLocale::localeCompare(const v8::Arguments &args)
Holds the text direction of the language:
\list
- \o Qt.LeftToRight
- \o Qt.RightToLeft
+ \li Qt.LeftToRight
+ \li Qt.RightToLeft
\endlist
*/
@@ -1084,9 +1084,9 @@ v8::Handle<v8::Value> QQmlLocale::localeCompare(const v8::Arguments &args)
Returns the currency symbol for the specified \a format:
\list
- \o Locale.CurrencyIsoCode a ISO-4217 code of the currency.
- \o Locale.CurrencySymbol a currency symbol.
- \o Locale.CurrencyDisplayName a user readable name of the currency.
+ \li Locale.CurrencyIsoCode a ISO-4217 code of the currency.
+ \li Locale.CurrencySymbol a currency symbol.
+ \li Locale.CurrencyDisplayName a user readable name of the currency.
\endlist
\sa Number::toLocaleCurrencyString()
*/
@@ -1115,9 +1115,9 @@ v8::Handle<v8::Value> QQmlLocale::localeCompare(const v8::Arguments &args)
This property defines which units are used for measurement.
\list
- \o Locale.MetricSystem This value indicates metric units, such as meters,
+ \li Locale.MetricSystem This value indicates metric units, such as meters,
centimeters and millimeters.
- \o Locale.ImperialSystem This value indicates imperial units, such as inches and
+ \li Locale.ImperialSystem This value indicates imperial units, such as inches and
miles. There are several distinct imperial systems in the world; this
value stands for the official United States imperial units.
\endlist
diff --git a/src/qml/qml/qqmlnetworkaccessmanagerfactory.cpp b/src/qml/qml/qqmlnetworkaccessmanagerfactory.cpp
index cc33f387d9..e5d0d708e2 100644
--- a/src/qml/qml/qqmlnetworkaccessmanagerfactory.cpp
+++ b/src/qml/qml/qqmlnetworkaccessmanagerfactory.cpp
@@ -65,12 +65,12 @@ QT_BEGIN_NAMESPACE
be created in a different thread:
\list
- \o The QML engine internally handles all requests, and cleans up any
+ \li The QML engine internally handles all requests, and cleans up any
QNetworkReply objects it creates. Receiving the
QNetworkAccessManager::finished() signal in another thread may not
provide the receiver with a valid reply object if it has already
been deleted.
- \o Authentication details provided to QNetworkAccessManager::authenticationRequired()
+ \li Authentication details provided to QNetworkAccessManager::authenticationRequired()
must be provided immediately, so this signal cannot be connected as a
Qt::QueuedConnection (or as the default Qt::AutoConnection from another
thread).
diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp
index 34d9d0a5f5..d3778fa5c5 100644
--- a/src/qml/qml/qqmlproperty.cpp
+++ b/src/qml/qml/qqmlproperty.cpp
@@ -55,6 +55,7 @@
#include "qqmlcompiler_p.h"
#include "qqmlvmemetaobject_p.h"
#include "qqmlexpression_p.h"
+#include "qqmlvaluetypeproxybinding_p.h"
#include <QStringList>
#include <QtCore/qdebug.h>
@@ -1530,24 +1531,6 @@ bool QQmlPropertyPrivate::writeBinding(QObject *object,
return true;
}
-bool QQmlPropertyPrivate::writeBinding(const QQmlProperty &that,
- QQmlContextData *context,
- QQmlJavaScriptExpression *expression,
- v8::Handle<v8::Value> result, bool isUndefined,
- WriteFlags flags)
-{
- QQmlPropertyPrivate *pp = that.d;
-
- if (!pp)
- return true;
-
- QObject *object = that.object();
- if (!object)
- return true;
-
- return writeBinding(object, pp->core, context, expression, result, isUndefined, flags);
-}
-
const QMetaObject *QQmlPropertyPrivate::rawMetaObjectForType(QQmlEnginePrivate *engine, int userType)
{
if (engine) {
diff --git a/src/qml/qml/qqmlproperty_p.h b/src/qml/qml/qqmlproperty_p.h
index 0f97a63155..f4a9ced53b 100644
--- a/src/qml/qml/qqmlproperty_p.h
+++ b/src/qml/qml/qqmlproperty_p.h
@@ -54,6 +54,7 @@
//
#include "qqmlproperty.h"
+#include "qqmlengine.h"
#include <private/qobject_p.h>
#include <private/qtqmlglobal_p.h>
@@ -77,7 +78,7 @@ public:
Q_DECLARE_FLAGS(WriteFlags, WriteFlag)
QQmlContextData *context;
- QQmlEngine *engine;
+ QQmlGuard<QQmlEngine> engine;
QQmlGuard<QObject> object;
QQmlPropertyData core;
@@ -143,11 +144,6 @@ public:
static QQmlExpression *setSignalExpression(const QQmlProperty &that,
QQmlExpression *) ;
static bool write(const QQmlProperty &that, const QVariant &, WriteFlags);
- static bool writeBinding(const QQmlProperty &that,
- QQmlContextData *context,
- QQmlJavaScriptExpression *expression,
- v8::Handle<v8::Value> result, bool isUndefined,
- WriteFlags flags);
static bool writeBinding(QObject *, const QQmlPropertyData &,
QQmlContextData *context,
QQmlJavaScriptExpression *expression,
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index 5cbb2f6943..781915e23e 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -63,6 +63,19 @@
#include <dirent.h>
#endif
+#if defined (QT_LINUXBASE)
+// LSB doesn't declare NAME_MAX. Use SYMLINK_MAX instead, which seems to
+// always be identical to NAME_MAX
+#ifndef NAME_MAX
+# define NAME_MAX _POSIX_SYMLINK_MAX
+#endif
+
+// LSB has a broken version of offsetof that can't be used at compile time
+// https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3462
+#undef offsetof
+#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
+#endif
+
// #define DATABLOB_DEBUG
#ifdef DATABLOB_DEBUG
@@ -248,14 +261,14 @@ The QQmlDataLoader invokes callbacks on the QQmlDataBlob as data becomes availab
This enum describes the status of the data blob.
\list
-\o Null The blob has not yet been loaded by a QQmlDataLoader
-\o Loading The blob is loading network data. The QQmlDataBlob::setData() callback has not yet been
+\li Null The blob has not yet been loaded by a QQmlDataLoader
+\li Loading The blob is loading network data. The QQmlDataBlob::setData() callback has not yet been
invoked or has not yet returned.
-\o WaitingForDependencies The blob is waiting for dependencies to be done before continueing. This status
+\li WaitingForDependencies The blob is waiting for dependencies to be done before continueing. This status
only occurs after the QQmlDataBlob::setData() callback has been made, and when the blob has outstanding
dependencies.
-\o Complete The blob's data has been loaded and all dependencies are done.
-\o Error An error has been set on this blob.
+\li Complete The blob's data has been loaded and all dependencies are done.
+\li Error An error has been set on this blob.
\endlist
*/
@@ -265,9 +278,9 @@ dependencies.
This enum describes the type of the data blob.
\list
-\o QmlFile This is a QQmlTypeData
-\o JavaScriptFile This is a QQmlScriptData
-\o QmldirFile This is a QQmlQmldirData
+\li QmlFile This is a QQmlTypeData
+\li JavaScriptFile This is a QQmlScriptData
+\li QmldirFile This is a QQmlQmldirData
\endlist
*/
@@ -877,9 +890,9 @@ To complete processing, the QQmlDataBlob::done() callback is invoked. done() is
one of these three preconditions are met.
\list 1
-\o The QQmlDataBlob has no dependencies.
-\o The QQmlDataBlob has an error set.
-\o All the QQmlDataBlob's dependencies are themselves "done()".
+\li The QQmlDataBlob has no dependencies.
+\li The QQmlDataBlob has an error set.
+\li All the QQmlDataBlob's dependencies are themselves "done()".
\endlist
Thus QQmlDataBlob::done() will always eventually be called, even if the blob has an error set.
@@ -1171,7 +1184,7 @@ This enum defines the options that control the way type data is handled.
/*!
Returns a QQmlTypeData for the specified \a url. The QQmlTypeData may be cached.
*/
-QQmlTypeData *QQmlTypeLoader::get(const QUrl &url)
+QQmlTypeData *QQmlTypeLoader::get(const QUrl &url, Mode mode)
{
Q_ASSERT(!url.isRelative() &&
(QQmlEnginePrivate::urlToLocalFileOrQrc(url).isEmpty() ||
@@ -1184,7 +1197,7 @@ QQmlTypeData *QQmlTypeLoader::get(const QUrl &url)
if (!typeData) {
typeData = new QQmlTypeData(url, None, this);
m_typeCache.insert(url, typeData);
- QQmlDataLoader::load(typeData);
+ QQmlDataLoader::load(typeData, mode);
}
typeData->addref();
diff --git a/src/qml/qml/qqmltypeloader_p.h b/src/qml/qml/qqmltypeloader_p.h
index 0dd7adecac..c8c2756bd5 100644
--- a/src/qml/qml/qqmltypeloader_p.h
+++ b/src/qml/qml/qqmltypeloader_p.h
@@ -236,7 +236,7 @@ public:
};
Q_DECLARE_FLAGS(Options, Option)
- QQmlTypeData *get(const QUrl &url);
+ QQmlTypeData *get(const QUrl &url, Mode mode = PreferSynchronous);
QQmlTypeData *get(const QByteArray &, const QUrl &url, Options = None);
void clearCache();
diff --git a/src/qml/qml/qqmlvaluetypeproxybinding.cpp b/src/qml/qml/qqmlvaluetypeproxybinding.cpp
new file mode 100644
index 0000000000..2cc15a50f5
--- /dev/null
+++ b/src/qml/qml/qqmlvaluetypeproxybinding.cpp
@@ -0,0 +1,138 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qqmlvaluetypeproxybinding_p.h"
+
+QT_BEGIN_NAMESPACE
+
+QQmlValueTypeProxyBinding::QQmlValueTypeProxyBinding(QObject *o, int index)
+: m_object(o), m_index(index), m_bindings(0)
+{
+}
+
+QQmlValueTypeProxyBinding::~QQmlValueTypeProxyBinding()
+{
+ while (m_bindings) {
+ QQmlAbstractBinding *binding = m_bindings;
+ binding->setEnabled(false, 0);
+ binding->destroy();
+ }
+}
+
+void QQmlValueTypeProxyBinding::setEnabled(bool e, QQmlPropertyPrivate::WriteFlags flags)
+{
+ if (e) {
+ QQmlAbstractBinding *bindings = m_bindings;
+ recursiveEnable(bindings, flags);
+ } else {
+ QQmlAbstractBinding *bindings = m_bindings;
+ recursiveDisable(bindings);
+ }
+}
+
+void QQmlValueTypeProxyBinding::recursiveEnable(QQmlAbstractBinding *b, QQmlPropertyPrivate::WriteFlags flags)
+{
+ if (!b)
+ return;
+
+ recursiveEnable(b->m_nextBinding, flags);
+
+ if (b)
+ b->setEnabled(true, flags);
+}
+
+void QQmlValueTypeProxyBinding::recursiveDisable(QQmlAbstractBinding *b)
+{
+ if (!b)
+ return;
+
+ recursiveDisable(b->m_nextBinding);
+
+ if (b)
+ b->setEnabled(false, 0);
+}
+
+void QQmlValueTypeProxyBinding::update(QQmlPropertyPrivate::WriteFlags)
+{
+}
+
+QQmlAbstractBinding *QQmlValueTypeProxyBinding::binding(int propertyIndex)
+{
+ QQmlAbstractBinding *binding = m_bindings;
+
+ while (binding && binding->propertyIndex() != propertyIndex)
+ binding = binding->m_nextBinding;
+
+ return binding;
+}
+
+/*!
+Removes a collection of bindings, corresponding to the set bits in \a mask.
+*/
+void QQmlValueTypeProxyBinding::removeBindings(quint32 mask)
+{
+ QQmlAbstractBinding *binding = m_bindings;
+ while (binding) {
+ if (mask & (1 << (binding->propertyIndex() >> 24))) {
+ QQmlAbstractBinding *remove = binding;
+ binding = remove->m_nextBinding;
+ *remove->m_prevBinding = remove->m_nextBinding;
+ if (remove->m_nextBinding) remove->m_nextBinding->m_prevBinding = remove->m_prevBinding;
+ remove->m_prevBinding = 0;
+ remove->m_nextBinding = 0;
+ remove->destroy();
+ } else {
+ binding = binding->m_nextBinding;
+ }
+ }
+}
+
+int QQmlValueTypeProxyBinding::propertyIndex() const
+{
+ return m_index;
+}
+
+QObject *QQmlValueTypeProxyBinding::object() const
+{
+ return m_object;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qml/qml/qqmlbinding_p_p.h b/src/qml/qml/qqmlvaluetypeproxybinding_p.h
index b53c903916..0135d575df 100644
--- a/src/qml/qml/qqmlbinding_p_p.h
+++ b/src/qml/qml/qqmlvaluetypeproxybinding_p.h
@@ -39,8 +39,8 @@
**
****************************************************************************/
-#ifndef QQMLBINDING_P_P_H
-#define QQMLBINDING_P_P_H
+#ifndef QQMLVALUETYPEPROXYBINDING_P_H
+#define QQMLVALUETYPEPROXYBINDING_P_H
//
// W A R N I N G
@@ -53,37 +53,39 @@
// We mean it.
//
-#include "qqmlbinding_p.h"
-
-#include "qqmlproperty.h"
-#include "qqmlexpression_p.h"
+#include <private/qqmlabstractbinding_p.h>
QT_BEGIN_NAMESPACE
-class QQmlBindingPrivate : public QQmlExpressionPrivate
+class QQmlValueTypeProxyBinding : public QQmlAbstractBinding
{
- Q_DECLARE_PUBLIC(QQmlBinding)
public:
- QQmlBindingPrivate();
- ~QQmlBindingPrivate();
+ QQmlValueTypeProxyBinding(QObject *o, int coreIndex);
+
+ virtual Type bindingType() const { return ValueTypeProxy; }
+
+ virtual void setEnabled(bool, QQmlPropertyPrivate::WriteFlags);
+ virtual void update(QQmlPropertyPrivate::WriteFlags);
+ virtual int propertyIndex() const;
+ virtual QObject *object() const;
- virtual void expressionChanged();
+ QQmlAbstractBinding *binding(int propertyIndex);
- static void printBindingLoopError(QQmlProperty &prop);
+ void removeBindings(quint32 mask);
protected:
- virtual void refresh();
+ ~QQmlValueTypeProxyBinding();
private:
- bool updating:1;
- bool enabled:1;
- int columnNumber;
- QQmlProperty property;
+ void recursiveEnable(QQmlAbstractBinding *, QQmlPropertyPrivate::WriteFlags);
+ void recursiveDisable(QQmlAbstractBinding *);
- QObject *target;
- int targetProperty;
+ friend class QQmlAbstractBinding;
+ QObject *m_object;
+ int m_index;
+ QQmlAbstractBinding *m_bindings;
};
QT_END_NAMESPACE
-#endif // QQMLBINDING_P_P_H
+#endif // QQMLVALUETYPEPROXYBINDING_P_H
diff --git a/src/qml/qml/qqmlvme.cpp b/src/qml/qml/qqmlvme.cpp
index 9ef9ca96ef..86e9f0963a 100644
--- a/src/qml/qml/qqmlvme.cpp
+++ b/src/qml/qml/qqmlvme.cpp
@@ -57,7 +57,6 @@
#include "qqmlengine_p.h"
#include "qqmlcomponent_p.h"
#include "qqmlvmemetaobject_p.h"
-#include "qqmlbinding_p_p.h"
#include "qqmlcontext_p.h"
#include <private/qv4bindings_p.h>
#include <private/qv8bindings_p.h>
@@ -66,6 +65,7 @@
#include "qqmlscriptstring.h"
#include "qqmlscriptstring_p.h"
#include "qqmlpropertyvalueinterceptor_p.h"
+#include "qqmlvaluetypeproxybinding_p.h"
#include <QStack>
#include <QColor>
@@ -767,8 +767,8 @@ QObject *QQmlVME::run(QList<QQmlError> *errors,
QML_NEXT_INSTR(StoreBinding);
QQmlBinding *bind = new QQmlBinding(PRIMITIVES.at(instr.value), true,
- context, CTXT, COMP->name, instr.line,
- instr.column);
+ context, CTXT, COMP->name, instr.line,
+ instr.column);
bindValues.push(bind);
bind->m_mePtr = &bindValues.top();
bind->setTarget(target, instr.property, CTXT);
@@ -790,8 +790,8 @@ QObject *QQmlVME::run(QList<QQmlError> *errors,
QML_NEXT_INSTR(StoreBindingOnAlias);
QQmlBinding *bind = new QQmlBinding(PRIMITIVES.at(instr.value), true,
- context, CTXT, COMP->name, instr.line,
- instr.column);
+ context, CTXT, COMP->name, instr.line,
+ instr.column);
bindValues.push(bind);
bind->m_mePtr = &bindValues.top();
bind->setTarget(target, instr.property, CTXT);
diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp
index a7af2db837..c4e801f2db 100644
--- a/src/qml/qml/qqmlvmemetaobject.cpp
+++ b/src/qml/qml/qqmlvmemetaobject.cpp
@@ -56,6 +56,28 @@ Q_DECLARE_METATYPE(QJSValue);
QT_BEGIN_NAMESPACE
+QQmlVMEVariantQObjectPtr::QQmlVMEVariantQObjectPtr()
+ : QQmlGuard<QObject>(0), m_target(0), m_index(-1)
+{
+}
+
+QQmlVMEVariantQObjectPtr::~QQmlVMEVariantQObjectPtr()
+{
+}
+
+void QQmlVMEVariantQObjectPtr::objectDestroyed(QObject *)
+{
+ if (m_target && m_index >= 0)
+ m_target->activate(m_target->object, m_target->methodOffset + m_index, 0);
+}
+
+void QQmlVMEVariantQObjectPtr::setGuardedValue(QObject *obj, QQmlVMEMetaObject *target, int index)
+{
+ m_target = target;
+ m_index = index;
+ setObject(obj);
+}
+
class QQmlVMEVariant
{
public:
@@ -79,7 +101,7 @@ public:
inline const QDateTime &asQDateTime();
inline const QJSValue &asQJSValue();
- inline void setValue(QObject *);
+ inline void setValue(QObject *v, QQmlVMEMetaObject *target, int index);
inline void setValue(const QVariant &);
inline void setValue(int);
inline void setValue(bool);
@@ -93,7 +115,7 @@ public:
inline void setValue(const QJSValue &);
private:
int type;
- void *data[4]; // Large enough to hold all types
+ void *data[6]; // Large enough to hold all types
inline void cleanup();
};
@@ -127,7 +149,7 @@ void QQmlVMEVariant::cleanup()
type == QMetaType::Double) {
type = QVariant::Invalid;
} else if (type == QMetaType::QObjectStar) {
- ((QQmlGuard<QObject>*)dataPtr())->~QQmlGuard<QObject>();
+ ((QQmlVMEVariantQObjectPtr*)dataPtr())->~QQmlVMEVariantQObjectPtr();
type = QVariant::Invalid;
} else if (type == QMetaType::QString) {
((QString *)dataPtr())->~QString();
@@ -174,8 +196,8 @@ void *QQmlVMEVariant::dataPtr()
QObject *QQmlVMEVariant::asQObject()
{
- if (type != QMetaType::QObjectStar)
- setValue((QObject *)0);
+ if (type != QMetaType::QObjectStar)
+ setValue((QObject *)0, 0, -1);
return *(QQmlGuard<QObject> *)(dataPtr());
}
@@ -268,14 +290,14 @@ const QJSValue &QQmlVMEVariant::asQJSValue()
return *(QJSValue *)(dataPtr());
}
-void QQmlVMEVariant::setValue(QObject *v)
+void QQmlVMEVariant::setValue(QObject *v, QQmlVMEMetaObject *target, int index)
{
if (type != QMetaType::QObjectStar) {
cleanup();
type = QMetaType::QObjectStar;
- new (dataPtr()) QQmlGuard<QObject>();
+ new (dataPtr()) QQmlVMEVariantQObjectPtr;
}
- *(QQmlGuard<QObject>*)(dataPtr()) = v;
+ reinterpret_cast<QQmlVMEVariantQObjectPtr*>(dataPtr())->setGuardedValue(v, target, index);
}
void QQmlVMEVariant::setValue(const QVariant &v)
@@ -629,7 +651,7 @@ int QQmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a)
break;
case QMetaType::QObjectStar:
needActivate = *reinterpret_cast<QObject **>(a[0]) != data[id].asQObject();
- data[id].setValue(*reinterpret_cast<QObject **>(a[0]));
+ data[id].setValue(*reinterpret_cast<QObject **>(a[0]), this, id);
break;
case QMetaType::QVariant:
writeProperty(id, *reinterpret_cast<QVariant *>(a[0]));
@@ -810,15 +832,17 @@ v8::Handle<v8::Value> QQmlVMEMetaObject::readVarProperty(int id)
{
Q_ASSERT(id >= firstVarPropertyIndex);
- ensureVarPropertiesAllocated();
- return varProperties->Get(id - firstVarPropertyIndex);
+ if (ensureVarPropertiesAllocated())
+ return varProperties->Get(id - firstVarPropertyIndex);
+ return v8::Handle<v8::Value>();
}
QVariant QQmlVMEMetaObject::readPropertyAsVariant(int id)
{
if (id >= firstVarPropertyIndex) {
- ensureVarPropertiesAllocated();
- return QQmlEnginePrivate::get(ctxt->engine)->v8engine()->toVariant(varProperties->Get(id - firstVarPropertyIndex), -1);
+ if (ensureVarPropertiesAllocated())
+ return QQmlEnginePrivate::get(ctxt->engine)->v8engine()->toVariant(varProperties->Get(id - firstVarPropertyIndex), -1);
+ return QVariant();
} else {
if (data[id].dataType() == QMetaType::QObjectStar) {
return QVariant::fromValue(data[id].asQObject());
@@ -831,7 +855,8 @@ QVariant QQmlVMEMetaObject::readPropertyAsVariant(int id)
void QQmlVMEMetaObject::writeVarProperty(int id, v8::Handle<v8::Value> value)
{
Q_ASSERT(id >= firstVarPropertyIndex);
- ensureVarPropertiesAllocated();
+ if (!ensureVarPropertiesAllocated())
+ return;
// Importantly, if the current value is a scarce resource, we need to ensure that it
// gets automatically released by the engine if no other references to it exist.
@@ -860,7 +885,8 @@ void QQmlVMEMetaObject::writeVarProperty(int id, v8::Handle<v8::Value> value)
void QQmlVMEMetaObject::writeProperty(int id, const QVariant &value)
{
if (id >= firstVarPropertyIndex) {
- ensureVarPropertiesAllocated();
+ if (!ensureVarPropertiesAllocated())
+ return;
// Importantly, if the current value is a scarce resource, we need to ensure that it
// gets automatically released by the engine if no other references to it exist.
@@ -892,7 +918,7 @@ void QQmlVMEMetaObject::writeProperty(int id, const QVariant &value)
if (value.userType() == QMetaType::QObjectStar) {
QObject *o = qvariant_cast<QObject *>(value);
needActivate = (data[id].dataType() != QMetaType::QObjectStar || data[id].asQObject() != o);
- data[id].setValue(qvariant_cast<QObject *>(value));
+ data[id].setValue(qvariant_cast<QObject *>(value), this, id);
} else {
needActivate = (data[id].dataType() != qMetaTypeId<QVariant>() ||
data[id].asQVariant().userType() != value.userType() ||
@@ -1007,10 +1033,17 @@ void QQmlVMEMetaObject::setVMEProperty(int index, v8::Handle<v8::Value> v)
return writeVarProperty(index - propOffset, v);
}
-void QQmlVMEMetaObject::ensureVarPropertiesAllocated()
+bool QQmlVMEMetaObject::ensureVarPropertiesAllocated()
{
if (!varPropertiesInitialized)
allocateVarPropertiesArray();
+
+ // in some situations, the QObject's v8object (and associated v8 data,
+ // such as the varProperties array) will have been cleaned up, but the
+ // QObject ptr will not yet have been deleted (eg, waiting on deleteLater).
+ // In this situation, the varProperties handle will be (and should remain)
+ // empty.
+ return !varProperties.IsEmpty();
}
// see also: QV8GCCallback::garbageCollectorPrologueCallback()
diff --git a/src/qml/qml/qqmlvmemetaobject_p.h b/src/qml/qml/qqmlvmemetaobject_p.h
index deee989383..1b5ceb8203 100644
--- a/src/qml/qml/qqmlvmemetaobject_p.h
+++ b/src/qml/qml/qqmlvmemetaobject_p.h
@@ -136,6 +136,19 @@ struct QQmlVMEMetaData
}
};
+class QQmlVMEMetaObject;
+class QQmlVMEVariantQObjectPtr : public QQmlGuard<QObject>
+{
+public:
+ inline QQmlVMEVariantQObjectPtr();
+ inline ~QQmlVMEVariantQObjectPtr();
+ inline void objectDestroyed(QObject *);
+ inline void setGuardedValue(QObject *obj, QQmlVMEMetaObject *target, int index);
+
+ QQmlVMEMetaObject *m_target;
+ int m_index;
+};
+
class QV8QObjectWrapper;
class QQmlVMEVariant;
class QQmlRefCount;
@@ -163,6 +176,7 @@ protected:
private:
friend class QQmlVMEMetaObjectEndpoint;
+ friend class QQmlVMEVariantQObjectPtr;
QObject *object;
QQmlCompiledData *compiledData;
@@ -181,7 +195,7 @@ private:
static void VarPropertiesWeakReferenceCallback(v8::Persistent<v8::Value> object, void* parameter);
static void GcPrologueCallback(QV8GCCallback::Node *node);
inline void allocateVarPropertiesArray();
- inline void ensureVarPropertiesAllocated();
+ inline bool ensureVarPropertiesAllocated();
void connectAlias(int aliasId);
QBitArray aConnected;
diff --git a/src/qml/qml/qquickworkerscript.cpp b/src/qml/qml/qquickworkerscript.cpp
index 529f181e7a..e689f9da72 100644
--- a/src/qml/qml/qquickworkerscript.cpp
+++ b/src/qml/qml/qquickworkerscript.cpp
@@ -640,9 +640,9 @@ void QQuickWorkerScript::setSource(const QUrl &source)
types:
\list
- \o boolean, number, string
- \o JavaScript objects and arrays
- \o ListModel objects (any other type of QObject* is not allowed)
+ \li boolean, number, string
+ \li JavaScript objects and arrays
+ \li ListModel objects (any other type of QObject* is not allowed)
\endlist
All objects and arrays are copied to the \c message. With the exception
diff --git a/src/qml/qml/v4/qv4bindings.cpp b/src/qml/qml/v4/qv4bindings.cpp
index 93c7820ca2..5d367f2ae6 100644
--- a/src/qml/qml/v4/qv4bindings.cpp
+++ b/src/qml/qml/v4/qv4bindings.cpp
@@ -66,6 +66,7 @@ struct Register {
typedef QQmlRegisterType Type;
void setUndefined() { dataType = UndefinedType; }
+ void setNull() { dataType = NullType; }
void setNaN() { setqreal(qSNaN()); }
bool isUndefined() const { return dataType == UndefinedType; }
@@ -820,6 +821,29 @@ void QV4Bindings::run(int instrIndex, quint32 &executedBlocks,
registers[instr->load.reg].setQObject(context->contextObject);
QML_V4_END_INSTR(LoadRoot, load)
+ QML_V4_BEGIN_INSTR(LoadModuleObject, load)
+ {
+ Register &reg = registers[instr->load.reg];
+
+ const QString *name = reg.getstringptr();
+ QQmlTypeNameCache::Result r = context->imports->query(*name);
+ reg.cleanupString();
+
+ if (r.isValid() && r.importNamespace) {
+ QQmlMetaType::ModuleApiInstance *moduleApi = context->imports->moduleApi(r.importNamespace);
+ if (moduleApi) {
+ if (moduleApi->qobjectCallback) {
+ moduleApi->qobjectApi = moduleApi->qobjectCallback(context->engine, context->engine);
+ moduleApi->qobjectCallback = 0;
+ moduleApi->scriptCallback = 0;
+ }
+ if (moduleApi->qobjectApi)
+ reg.setQObject(moduleApi->qobjectApi);
+ }
+ }
+ }
+ QML_V4_END_INSTR(LoadModuleObject, load)
+
QML_V4_BEGIN_INSTR(LoadAttached, attached)
{
const Register &input = registers[instr->attached.reg];
@@ -1216,6 +1240,10 @@ void QV4Bindings::run(int instrIndex, quint32 &executedBlocks,
}
QML_V4_END_INSTR(MathPIReal, unaryop)
+ QML_V4_BEGIN_INSTR(LoadNull, null_value)
+ registers[instr->null_value.reg].setNull();
+ QML_V4_END_INSTR(LoadNull, null_value)
+
QML_V4_BEGIN_INSTR(LoadReal, real_value)
registers[instr->real_value.reg].setqreal(instr->real_value.value);
QML_V4_END_INSTR(LoadReal, real_value)
@@ -1498,6 +1526,46 @@ void QV4Bindings::run(int instrIndex, quint32 &executedBlocks,
}
QML_V4_END_INSTR(StrictNotEqualString, binaryop)
+ QML_V4_BEGIN_INSTR(EqualObject, binaryop)
+ {
+ const Register &left = registers[instr->binaryop.left];
+ const Register &right = registers[instr->binaryop.right];
+ QObject *leftobj = (left.gettype() == NullType) ? 0 : left.getQObject();
+ QObject *rightobj = (right.gettype() == NullType) ? 0 : right.getQObject();
+ registers[instr->binaryop.output].setbool(leftobj == rightobj);
+ }
+ QML_V4_END_INSTR(EqualObject, binaryop)
+
+ QML_V4_BEGIN_INSTR(NotEqualObject, binaryop)
+ {
+ const Register &left = registers[instr->binaryop.left];
+ const Register &right = registers[instr->binaryop.right];
+ QObject *leftobj = (left.gettype() == NullType) ? 0 : left.getQObject();
+ QObject *rightobj = (right.gettype() == NullType) ? 0 : right.getQObject();
+ registers[instr->binaryop.output].setbool(leftobj != rightobj);
+ }
+ QML_V4_END_INSTR(NotEqualObject, binaryop)
+
+ QML_V4_BEGIN_INSTR(StrictEqualObject, binaryop)
+ {
+ const Register &left = registers[instr->binaryop.left];
+ const Register &right = registers[instr->binaryop.right];
+ QObject *leftobj = (left.gettype() == NullType) ? 0 : left.getQObject();
+ QObject *rightobj = (right.gettype() == NullType) ? 0 : right.getQObject();
+ registers[instr->binaryop.output].setbool(leftobj == rightobj);
+ }
+ QML_V4_END_INSTR(StrictEqualObject, binaryop)
+
+ QML_V4_BEGIN_INSTR(StrictNotEqualObject, binaryop)
+ {
+ const Register &left = registers[instr->binaryop.left];
+ const Register &right = registers[instr->binaryop.right];
+ QObject *leftobj = (left.gettype() == NullType) ? 0 : left.getQObject();
+ QObject *rightobj = (right.gettype() == NullType) ? 0 : right.getQObject();
+ registers[instr->binaryop.output].setbool(leftobj != rightobj);
+ }
+ QML_V4_END_INSTR(StrictNotEqualObject, binaryop)
+
QML_V4_BEGIN_INSTR(MathMaxReal, binaryop)
{
const Register &left = registers[instr->binaryop.left];
diff --git a/src/qml/qml/v4/qv4compiler.cpp b/src/qml/qml/v4/qv4compiler.cpp
index 620d260053..09b0f3861b 100644
--- a/src/qml/qml/v4/qv4compiler.cpp
+++ b/src/qml/qml/v4/qv4compiler.cpp
@@ -234,6 +234,12 @@ void QV4CompilerPrivate::visitConst(IR::Const *e)
gen(i);
} break;
+ case IR::NullType: {
+ Instr::LoadNull i;
+ i.reg = currentReg;
+ gen(i);
+ } break;
+
default:
if (qmlVerboseCompiler())
qWarning() << Q_FUNC_INFO << "unexpected type";
@@ -318,6 +324,22 @@ void QV4CompilerPrivate::visitName(IR::Name *e)
gen(attached);
} break;
+ case IR::Name::ModuleObject: {
+ /*
+ Existing module object lookup methods include:
+ 1. string -> module object (search via importCache->query(name))
+ 2. QQmlMetaType::ModuleApi -> module object (via QQmlEnginePrivate::moduleApiInstance() cache)
+ We currently use 1, which is not ideal for performance
+ */
+ _subscribeName << *e->id;
+
+ registerLiteralString(currentReg, e->id);
+
+ Instr::LoadModuleObject module;
+ module.reg = currentReg;
+ gen(module);
+ } break;
+
case IR::Name::Property: {
_subscribeName << *e->id;
@@ -666,21 +688,29 @@ quint8 QV4CompilerPrivate::instructionOpcode(IR::Binop *e)
return V4Instr::LeReal;
case IR::OpEqual:
+ if (e->left->type == IR::ObjectType || e->right->type == IR::ObjectType)
+ return V4Instr::EqualObject;
if (e->left->type == IR::StringType)
return V4Instr::EqualString;
return V4Instr::EqualReal;
case IR::OpNotEqual:
+ if (e->left->type == IR::ObjectType || e->right->type == IR::ObjectType)
+ return V4Instr::NotEqualObject;
if (e->left->type == IR::StringType)
return V4Instr::NotEqualString;
return V4Instr::NotEqualReal;
case IR::OpStrictEqual:
+ if (e->left->type == IR::ObjectType || e->right->type == IR::ObjectType)
+ return V4Instr::StrictEqualObject;
if (e->left->type == IR::StringType)
return V4Instr::StrictEqualString;
return V4Instr::StrictEqualReal;
case IR::OpStrictNotEqual:
+ if (e->left->type == IR::ObjectType || e->right->type == IR::ObjectType)
+ return V4Instr::StrictNotEqualObject;
if (e->left->type == IR::StringType)
return V4Instr::StrictNotEqualString;
return V4Instr::StrictNotEqualReal;
@@ -758,7 +788,7 @@ void QV4CompilerPrivate::visitBinop(IR::Binop *e)
case IR::OpNotEqual:
case IR::OpStrictEqual:
case IR::OpStrictNotEqual:
- if (e->left->type != IR::StringType) {
+ if (e->left->type >= IR::FirstNumberType) {
convertToReal(e->left, left);
convertToReal(e->right, right);
}
diff --git a/src/qml/qml/v4/qv4instruction.cpp b/src/qml/qml/v4/qv4instruction.cpp
index a392c9392c..1ed8bd245e 100644
--- a/src/qml/qml/v4/qv4instruction.cpp
+++ b/src/qml/qml/v4/qv4instruction.cpp
@@ -114,6 +114,9 @@ void Bytecode::dump(const V4Instr *i, int address) const
case V4Instr::LoadRoot:
INSTR_DUMP << "\t" << "LoadRoot" << "\t\t" << "-> Output_Reg(" << i->load.reg << ")";
break;
+ case V4Instr::LoadModuleObject:
+ INSTR_DUMP << "\t" << "LoadModuleObject" << "\t\t" << ") -> Output_Reg(" << i->load.reg << ")";
+ break;
case V4Instr::LoadAttached:
INSTR_DUMP << "\t" << "LoadAttached" << "\t\t" << "Object_Reg(" << i->attached.reg << ") Attached_Index(" << i->attached.id << ") -> Output_Reg(" << i->attached.output << ")";
break;
@@ -210,6 +213,9 @@ void Bytecode::dump(const V4Instr *i, int address) const
case V4Instr::MathPIReal:
INSTR_DUMP << "\t" << "MathPIReal" << "\t\t" << "Input_Reg(" << i->unaryop.src << ") -> Output_Reg(" << i->unaryop.output << ")";
break;
+ case V4Instr::LoadNull:
+ INSTR_DUMP << "\t" << "LoadNull" << "\t\t" << "Constant(null) -> Output_Reg(" << i->null_value.reg << ")";
+ break;
case V4Instr::LoadReal:
INSTR_DUMP << "\t" << "LoadReal" << "\t\t" << "Constant(" << i->real_value.value << ") -> Output_Reg(" << i->real_value.reg << ")";
break;
@@ -312,6 +318,18 @@ void Bytecode::dump(const V4Instr *i, int address) const
case V4Instr::StrictNotEqualString:
INSTR_DUMP << "\t" << "StrictNotEqualString" << "\t" << "Input_Reg(" << i->binaryop.left << ") Input_Reg(" << i->binaryop.right << ") -> Output_Reg(" << i->binaryop.output << ")";
break;
+ case V4Instr::EqualObject:
+ INSTR_DUMP << "\t" << "EqualObject" << "\t\t" << "Input_Reg(" << i->binaryop.left << ") Input_Reg(" << i->binaryop.right << ") -> Output_Reg(" << i->binaryop.output << ")";
+ break;
+ case V4Instr::NotEqualObject:
+ INSTR_DUMP << "\t" << "NotEqualObject" << "\t\t" << "Input_Reg(" << i->binaryop.left << ") Input_Reg(" << i->binaryop.right << ") -> Output_Reg(" << i->binaryop.output << ")";
+ break;
+ case V4Instr::StrictEqualObject:
+ INSTR_DUMP << "\t" << "StrictEqualObject" << "\t" << "Input_Reg(" << i->binaryop.left << ") Input_Reg(" << i->binaryop.right << ") -> Output_Reg(" << i->binaryop.output << ")";
+ break;
+ case V4Instr::StrictNotEqualObject:
+ INSTR_DUMP << "\t" << "StrictNotEqualObject" << "\t" << "Input_Reg(" << i->binaryop.left << ") Input_Reg(" << i->binaryop.right << ") -> Output_Reg(" << i->binaryop.output << ")";
+ break;
case V4Instr::MathMaxReal:
INSTR_DUMP << "\t" << "MathMaxReal" << "\t" << "Input_Reg(" << i->binaryop.left << ") Input_Reg(" << i->binaryop.right << ") -> Output_Reg(" << i->binaryop.output << ")";
break;
diff --git a/src/qml/qml/v4/qv4instruction_p.h b/src/qml/qml/v4/qv4instruction_p.h
index 9727c23959..d6c790e46f 100644
--- a/src/qml/qml/v4/qv4instruction_p.h
+++ b/src/qml/qml/v4/qv4instruction_p.h
@@ -73,6 +73,7 @@ QT_BEGIN_NAMESPACE
F(LoadId, load) \
F(LoadScope, load) \
F(LoadRoot, load) \
+ F(LoadModuleObject, load) \
F(LoadAttached, attached) \
F(UnaryNot, unaryop) \
F(UnaryMinusReal, unaryop) \
@@ -105,6 +106,7 @@ QT_BEGIN_NAMESPACE
F(MathFloorReal, unaryop) \
F(MathCeilReal, unaryop) \
F(MathPIReal, unaryop) \
+ F(LoadNull, null_value) \
F(LoadReal, real_value) \
F(LoadInt, int_value) \
F(LoadBool, bool_value) \
@@ -139,6 +141,10 @@ QT_BEGIN_NAMESPACE
F(NotEqualString, binaryop) \
F(StrictEqualString, binaryop) \
F(StrictNotEqualString, binaryop) \
+ F(EqualObject, binaryop) \
+ F(NotEqualObject, binaryop) \
+ F(StrictEqualObject, binaryop) \
+ F(StrictNotEqualObject, binaryop) \
F(MathMaxReal, binaryop) \
F(MathMinReal, binaryop) \
F(NewString, construct) \
@@ -270,6 +276,11 @@ union V4Instr {
qint8 reg;
};
+ struct instr_null_value {
+ QML_V4_INSTR_HEADER
+ qint8 reg;
+ };
+
struct instr_real_value {
QML_V4_INSTR_HEADER
qint8 reg;
@@ -357,6 +368,7 @@ union V4Instr {
instr_fetch fetch;
instr_copy copy;
instr_construct construct;
+ instr_null_value null_value;
instr_real_value real_value;
instr_int_value int_value;
instr_bool_value bool_value;
diff --git a/src/qml/qml/v4/qv4ir.cpp b/src/qml/qml/v4/qv4ir.cpp
index 54679c3d8c..34245f5bf4 100644
--- a/src/qml/qml/v4/qv4ir.cpp
+++ b/src/qml/qml/v4/qv4ir.cpp
@@ -543,6 +543,17 @@ Name *BasicBlock::ATTACH_TYPE(const QString &id, const QQmlType *attachType, Nam
return name;
}
+Name *BasicBlock::MODULE_OBJECT(const QString &id, const QMetaObject *meta, Name::Storage storage,
+ quint32 line, quint32 column)
+{
+ Name *name = function->pool->New<Name>();
+ name->init(/*base = */ 0, IR::ObjectType,
+ function->newString(id),
+ Name::ModuleObject, line, column);
+ name->meta = meta;
+ name->storage = storage;
+ return name;
+}
Expr *BasicBlock::UNOP(AluOp op, Expr *expr)
{
@@ -675,6 +686,8 @@ static const char *symbolname(Name::Symbol s)
return "IdObject";
case Name::AttachType:
return "AttachType";
+ case Name::ModuleObject:
+ return "ModuleObject";
case Name::Object:
return "Object";
case Name::Property:
diff --git a/src/qml/qml/v4/qv4ir_p.h b/src/qml/qml/v4/qv4ir_p.h
index 79f50cd6c9..4e9f9faacd 100644
--- a/src/qml/qml/v4/qv4ir_p.h
+++ b/src/qml/qml/v4/qv4ir_p.h
@@ -252,6 +252,7 @@ struct Name: Expr {
Unbound,
IdObject, // This is a load of a id object. Storage will always be IdStorage
AttachType, // This is a load of an attached object
+ ModuleObject, // This is a load of a module object
Object, // XXX what is this for?
Property, // This is a load of a regular property
Slot // XXX what is this for?
@@ -538,6 +539,7 @@ struct BasicBlock {
Name *SYMBOL(Name *base, Type type, const QString &id, const QMetaObject *meta, QQmlPropertyData *property, Name::Storage storage, quint32 line, quint32 column);
Name *ID_OBJECT(const QString &id, const QQmlScript::Object *object, quint32 line, quint32 column);
Name *ATTACH_TYPE(const QString &id, const QQmlType *attachType, Name::Storage storage, quint32 line, quint32 column);
+ Name *MODULE_OBJECT(const QString &id, const QMetaObject *meta, Name::Storage storage, quint32 line, quint32 column);
Expr *UNOP(AluOp op, Expr *expr);
Expr *BINOP(AluOp op, Expr *left, Expr *right);
diff --git a/src/qml/qml/v4/qv4irbuilder.cpp b/src/qml/qml/v4/qv4irbuilder.cpp
index 06f4024423..481b23eb4a 100644
--- a/src/qml/qml/v4/qv4irbuilder.cpp
+++ b/src/qml/qml/v4/qv4irbuilder.cpp
@@ -428,6 +428,17 @@ bool QV4IRBuilder::visit(AST::IdentifierExpression *ast)
if (r.isValid()) {
if (r.type) {
_expr.code = _block->ATTACH_TYPE(name, r.type, IR::Name::ScopeStorage, line, column);
+ } else if (r.importNamespace) {
+ QQmlMetaType::ModuleApiInstance *moduleApi = m_expression->importCache->moduleApi(r.importNamespace);
+ if (moduleApi) {
+ if (moduleApi->qobjectCallback) {
+ moduleApi->qobjectApi = moduleApi->qobjectCallback(QQmlEnginePrivate::get(m_engine), QQmlEnginePrivate::get(m_engine));
+ moduleApi->qobjectCallback = 0;
+ moduleApi->scriptCallback = 0;
+ }
+ if (moduleApi->qobjectApi)
+ _expr.code = _block->MODULE_OBJECT(name, moduleApi->qobjectApi->metaObject(), IR::Name::MemberStorage, line, column);
+ }
}
// We don't support anything else
} else {
@@ -603,6 +614,46 @@ bool QV4IRBuilder::visit(AST::FieldMemberExpression *ast)
}
break;
+ case IR::Name::ModuleObject: {
+ if (name.at(0).isUpper()) {
+ QByteArray utf8Name = name.toUtf8();
+ const char *enumName = utf8Name.constData();
+
+ const QMetaObject *meta = baseName->meta;
+ bool found = false;
+ for (int ii = 0; !found && ii < meta->enumeratorCount(); ++ii) {
+ QMetaEnum e = meta->enumerator(ii);
+ for (int jj = 0; !found && jj < e.keyCount(); ++jj) {
+ if (0 == strcmp(e.key(jj), enumName)) {
+ found = true;
+ _expr.code = _block->CONST(IR::IntType, e.value(jj));
+ }
+ }
+ }
+ if (!found && qmlVerboseCompiler())
+ qWarning() << "*** unresolved enum:"
+ << (*baseName->id + QLatin1String(".") + ast->name.toString());
+ } else {
+ QQmlPropertyCache *cache = m_engine->cache(baseName->meta);
+ if (!cache) return false;
+ QQmlPropertyData *data = cache->property(name);
+
+ if (!data || data->isFunction())
+ return false; // Don't support methods (or non-existing properties ;)
+
+ if (!data->isFinal()) {
+ if (qmlVerboseCompiler())
+ qWarning() << "*** non-final attached property:"
+ << (*baseName->id + QLatin1String(".") + ast->name.toString());
+ return false; // We don't know enough about this property
+ }
+
+ IR::Type irType = irTypeFromVariantType(data->propType, m_engine, baseName->meta);
+ _expr.code = _block->SYMBOL(baseName, irType, name, baseName->meta, data, line, column);
+ }
+ }
+ break;
+
case IR::Name::IdObject: {
const QQmlScript::Object *idObject = baseName->idObject;
QQmlPropertyCache *cache =
@@ -830,13 +881,15 @@ void QV4IRBuilder::binop(AST::BinaryExpression *ast, ExprResult left, ExprResult
implicitCvt(left, t);
implicitCvt(right, t);
}
+ } else if ((left.type() != IR::ObjectType && left.type() != IR::NullType) ||
+ (right.type() != IR::ObjectType && right.type() != IR::NullType))
+ return;
- if (_expr.hint == ExprResult::cx) {
- _expr.format = ExprResult::cx;
- _block->CJUMP(_block->BINOP(IR::binaryOperator(ast->op), left, right), _expr.iftrue, _expr.iffalse);
- } else {
- _expr.code = _block->BINOP(IR::binaryOperator(ast->op), left, right);
- }
+ if (_expr.hint == ExprResult::cx) {
+ _expr.format = ExprResult::cx;
+ _block->CJUMP(_block->BINOP(IR::binaryOperator(ast->op), left, right), _expr.iftrue, _expr.iffalse);
+ } else {
+ _expr.code = _block->BINOP(IR::binaryOperator(ast->op), left, right);
}
}
@@ -860,12 +913,15 @@ bool QV4IRBuilder::visit(AST::BinaryExpression *ast)
IR::BasicBlock *iffalse = _function->newBasicBlock();
IR::BasicBlock *endif = _function->newBasicBlock();
- condition(ast->left, iftrue, iffalse);
+ ExprResult left = expression(ast->left);
+ IR::Temp *cond = _block->TEMP(IR::BoolType);
+ _block->MOVE(cond, left);
+ _block->CJUMP(cond, iftrue, iffalse);
IR::Temp *r = _block->TEMP(IR::InvalidType);
_block = iffalse;
- _block->MOVE(r, _block->CONST(IR::BoolType, 0)); // ### use the right null value
+ _block->MOVE(r, cond);
_block->JUMP(endif);
_block = iftrue;
@@ -873,9 +929,12 @@ bool QV4IRBuilder::visit(AST::BinaryExpression *ast)
_block->MOVE(r, right);
_block->JUMP(endif);
+ if (left.type() != right.type())
+ discard();
+
_block = endif;
- r->type = right.type(); // ### not exactly, it can be IR::BoolType.
+ r->type = right.type();
_expr.code = r;
}
} break;
@@ -942,9 +1001,6 @@ bool QV4IRBuilder::visit(AST::BinaryExpression *ast)
implicitCvt(left, IR::RealType);
implicitCvt(right, IR::RealType);
binop(ast, left, right);
- } else if (left.type() == IR::BoolType || right.type() == IR::BoolType) {
- implicitCvt(left, IR::BoolType);
- implicitCvt(right, IR::BoolType);
} else if (left.isValid() && right.isValid()) {
binop(ast, left, right);
}
@@ -956,16 +1012,21 @@ bool QV4IRBuilder::visit(AST::BinaryExpression *ast)
ExprResult right = expression(ast->right);
if (left.type() == right.type()) {
binop(ast, left, right);
- } else if (left.type() >= IR::BoolType && right.type() >= IR::BoolType) {
+ } else if (left.type() > IR::BoolType && right.type() > IR::BoolType) {
// left and right have numeric type (int or real)
binop(ast, left, right);
+ } else if ((left.type() == IR::ObjectType && right.type() == IR::NullType) ||
+ (right.type() == IR::ObjectType && left.type() == IR::NullType)) {
+ // comparing a qobject with null
+ binop(ast, left, right);
} else if (left.isValid() && right.isValid()) {
+ // left and right have different types
const bool isEq = ast->op == QSOperator::StrictEqual;
if (_expr.hint == ExprResult::cx) {
_expr.format = ExprResult::cx;
- _block->JUMP(isEq ? _expr.iftrue : _expr.iffalse);
+ _block->JUMP(isEq ? _expr.iffalse : _expr.iftrue);
} else {
- _expr.code = _block->CONST(IR::BoolType, isEq ? 1 : 0);
+ _expr.code = _block->CONST(IR::BoolType, isEq ? 0 : 1);
}
}
} break;
diff --git a/src/qml/qml/v4/qv4program_p.h b/src/qml/qml/v4/qv4program_p.h
index d23cc6192f..60e7403786 100644
--- a/src/qml/qml/v4/qv4program_p.h
+++ b/src/qml/qml/v4/qv4program_p.h
@@ -85,6 +85,7 @@ struct QV4Program {
enum QQmlRegisterType {
UndefinedType,
+ NullType,
QObjectStarType,
QRealType,
IntType,
diff --git a/src/qml/qml/v8/qjsengine.cpp b/src/qml/qml/v8/qjsengine.cpp
index 3121d1b361..92c968f9aa 100644
--- a/src/qml/qml/v8/qjsengine.cpp
+++ b/src/qml/qml/v8/qjsengine.cpp
@@ -92,7 +92,7 @@ Q_DECLARE_METATYPE(QList<int>)
\section1 Engine Configuration
- The globalObject() function returns the \bold {Global Object}
+ The globalObject() function returns the \b {Global Object}
associated with the script engine. Properties of the Global Object
are accessible from any script code (i.e. they are global
variables). Typically, before evaluating "user" scripts, you will
diff --git a/src/qml/qml/v8/qjsvalue.cpp b/src/qml/qml/v8/qjsvalue.cpp
index e0a925c3bb..4471e68a61 100644
--- a/src/qml/qml/v8/qjsvalue.cpp
+++ b/src/qml/qml/v8/qjsvalue.cpp
@@ -426,18 +426,18 @@ quint32 QJSValue::toUInt() const
The conversion is performed according to the following table:
\table
- \header \o Input Type \o Result
- \row \o Undefined \o An invalid QVariant.
- \row \o Null \o An invalid QVariant.
- \row \o Boolean \o A QVariant containing the value of the boolean.
- \row \o Number \o A QVariant containing the value of the number.
- \row \o String \o A QVariant containing the value of the string.
- \row \o QVariant Object \o The result is the QVariant value of the object (no conversion).
- \row \o QObject Object \o A QVariant containing a pointer to the QObject.
- \row \o Date Object \o A QVariant containing the date value (toDateTime()).
- \row \o RegExp Object \o A QVariant containing the regular expression value.
- \row \o Array Object \o The array is converted to a QVariantList. Each element is converted to a QVariant, recursively; cyclic references are not followed.
- \row \o Object \o The object is converted to a QVariantMap. Each property is converted to a QVariant, recursively; cyclic references are not followed.
+ \header \li Input Type \li Result
+ \row \li Undefined \li An invalid QVariant.
+ \row \li Null \li An invalid QVariant.
+ \row \li Boolean \li A QVariant containing the value of the boolean.
+ \row \li Number \li A QVariant containing the value of the number.
+ \row \li String \li A QVariant containing the value of the string.
+ \row \li QVariant Object \li The result is the QVariant value of the object (no conversion).
+ \row \li QObject Object \li A QVariant containing a pointer to the QObject.
+ \row \li Date Object \li A QVariant containing the date value (toDateTime()).
+ \row \li RegExp Object \li A QVariant containing the regular expression value.
+ \row \li Array Object \li The array is converted to a QVariantList. Each element is converted to a QVariant, recursively; cyclic references are not followed.
+ \row \li Object \li The object is converted to a QVariantMap. Each property is converted to a QVariant, recursively; cyclic references are not followed.
\endtable
\sa isVariant()
@@ -634,13 +634,13 @@ bool QJSValue::equals(const QJSValue& other) const
the result depends on the type, as shown in the following table:
\table
- \header \o Type \o Result
- \row \o Undefined \o true
- \row \o Null \o true
- \row \o Boolean \o true if both values are true, false otherwise
- \row \o Number \o false if either value is NaN (Not-a-Number); true if values are equal, false otherwise
- \row \o String \o true if both values are exactly the same sequence of characters, false otherwise
- \row \o Object \o true if both values refer to the same object, false otherwise
+ \header \li Type \li Result
+ \row \li Undefined \li true
+ \row \li Null \li true
+ \row \li Boolean \li true if both values are true, false otherwise
+ \row \li Number \li false if either value is NaN (Not-a-Number); true if values are equal, false otherwise
+ \row \li String \li true if both values are exactly the same sequence of characters, false otherwise
+ \row \li Object \li true if both values refer to the same object, false otherwise
\endtable
\sa equals()
@@ -737,11 +737,11 @@ void QJSValue::setProperty(quint32 arrayIndex, const QJSValue& value)
delete operator. In particular:
\list
- \o Non-configurable properties cannot be deleted.
- \o This function will return true even if this object doesn't
+ \li Non-configurable properties cannot be deleted.
+ \li This function will return true even if this object doesn't
have a property of the given \a name (i.e., non-existent
properties are "trivially deletable").
- \o If this object doesn't have an own property of the given
+ \li If this object doesn't have an own property of the given
\a name, but an object in the prototype() chain does, the
prototype object's property is not deleted, and this function
returns true.
diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
index 143ccee960..68c62ef240 100644
--- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
+++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
@@ -797,54 +797,54 @@ If \a format is not provided, \a dateTime is formatted using
\a format should be either:
\list
-\o One of the Qt::DateFormat enumeration values, such as
+\li One of the Qt::DateFormat enumeration values, such as
\c Qt.DefaultLocaleShortDate or \c Qt.ISODate
-\o A string that specifies the format of the returned string, as detailed below.
+\li A string that specifies the format of the returned string, as detailed below.
\endlist
If \a format specifies a format string, it should use the following expressions
to specify the date:
\table
- \header \i Expression \i Output
- \row \i d \i the day as number without a leading zero (1 to 31)
- \row \i dd \i the day as number with a leading zero (01 to 31)
- \row \i ddd
- \i the abbreviated localized day name (e.g. 'Mon' to 'Sun').
+ \header \li Expression \li Output
+ \row \li d \li the day as number without a leading zero (1 to 31)
+ \row \li dd \li the day as number with a leading zero (01 to 31)
+ \row \li ddd
+ \li the abbreviated localized day name (e.g. 'Mon' to 'Sun').
Uses QDate::shortDayName().
- \row \i dddd
- \i the long localized day name (e.g. 'Monday' to 'Qt::Sunday').
+ \row \li dddd
+ \li the long localized day name (e.g. 'Monday' to 'Qt::Sunday').
Uses QDate::longDayName().
- \row \i M \i the month as number without a leading zero (1-12)
- \row \i MM \i the month as number with a leading zero (01-12)
- \row \i MMM
- \i the abbreviated localized month name (e.g. 'Jan' to 'Dec').
+ \row \li M \li the month as number without a leading zero (1-12)
+ \row \li MM \li the month as number with a leading zero (01-12)
+ \row \li MMM
+ \li the abbreviated localized month name (e.g. 'Jan' to 'Dec').
Uses QDate::shortMonthName().
- \row \i MMMM
- \i the long localized month name (e.g. 'January' to 'December').
+ \row \li MMMM
+ \li the long localized month name (e.g. 'January' to 'December').
Uses QDate::longMonthName().
- \row \i yy \i the year as two digit number (00-99)
- \row \i yyyy \i the year as four digit number
+ \row \li yy \li the year as two digit number (00-99)
+ \row \li yyyy \li the year as four digit number
\endtable
In addition the following expressions can be used to specify the time:
\table
- \header \i Expression \i Output
- \row \i h
- \i the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)
- \row \i hh
- \i the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)
- \row \i m \i the minute without a leading zero (0 to 59)
- \row \i mm \i the minute with a leading zero (00 to 59)
- \row \i s \i the second without a leading zero (0 to 59)
- \row \i ss \i the second with a leading zero (00 to 59)
- \row \i z \i the milliseconds without leading zeroes (0 to 999)
- \row \i zzz \i the milliseconds with leading zeroes (000 to 999)
- \row \i AP
- \i use AM/PM display. \e AP will be replaced by either "AM" or "PM".
- \row \i ap
- \i use am/pm display. \e ap will be replaced by either "am" or "pm".
+ \header \li Expression \li Output
+ \row \li h
+ \li the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)
+ \row \li hh
+ \li the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)
+ \row \li m \li the minute without a leading zero (0 to 59)
+ \row \li mm \li the minute with a leading zero (00 to 59)
+ \row \li s \li the second without a leading zero (0 to 59)
+ \row \li ss \li the second with a leading zero (00 to 59)
+ \row \li z \li the milliseconds without leading zeroes (0 to 999)
+ \row \li zzz \li the milliseconds with leading zeroes (000 to 999)
+ \row \li AP
+ \li use AM/PM display. \e AP will be replaced by either "AM" or "PM".
+ \row \li ap
+ \li use am/pm display. \e ap will be replaced by either "am" or "pm".
\endtable
All other input characters will be ignored. Any sequence of characters that
@@ -864,11 +864,11 @@ This \a dateTime value could be passed to \c Qt.formatDateTime(),
with the \a format values below to produce the following results:
\table
- \header \i Format \i Result
- \row \i "dd.MM.yyyy" \i 21.05.2001
- \row \i "ddd MMMM d yy" \i Tue May 21 01
- \row \i "hh:mm:ss.zzz" \i 14:13:09.042
- \row \i "h:m:s ap" \i 2:13:9 pm
+ \header \li Format \li Result
+ \row \li "dd.MM.yyyy" \li 21.05.2001
+ \row \li "ddd MMMM d yy" \li Tue May 21 01
+ \row \li "hh:mm:ss.zzz" \li 14:13:09.042
+ \row \li "h:m:s ap" \li 2:13:9 pm
\endtable
\sa Locale
@@ -1120,7 +1120,7 @@ v8::Handle<v8::Value> createQmlObject(const v8::Arguments &args)
}
/*!
-\qmlmethod object Qt::createComponent(url)
+\qmlmethod object Qt::createComponent(url, mode)
Returns a \l Component object created using the QML file at the specified \a url,
or \c null if an empty string was given.
@@ -1129,6 +1129,12 @@ The returned component's \l Component::status property indicates whether the
component was successfully created. If the status is \c Component.Error,
see \l Component::errorString() for an error description.
+If the optional \a mode parameter is set to \c Component.Asynchronous, the
+component will be loaded in a background thread. The Component::status property
+will be \c Component.Loading while it is loading. The status will change to
+\c Component.Ready if the component loads successfully, or \c Component.Error
+if loading fails.
+
Call \l {Component::createObject()}{Component.createObject()} on the returned
component to create an object instance of the component.
@@ -1143,8 +1149,9 @@ use \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()}.
*/
v8::Handle<v8::Value> createComponent(const v8::Arguments &args)
{
- if (args.Length() != 1)
- V8THROW_ERROR("Qt.createComponent(): Invalid arguments");
+ const char *invalidArgs = "Qt.createComponent(): Invalid arguments";
+ if (args.Length() < 1 || args.Length() > 2)
+ V8THROW_ERROR(invalidArgs);
QV8Engine *v8engine = V8ENGINE();
QQmlEngine *engine = v8engine->engine();
@@ -1159,8 +1166,20 @@ v8::Handle<v8::Value> createComponent(const v8::Arguments &args)
if (arg.isEmpty())
return v8::Null();
+ QQmlComponent::CompilationMode compileMode = QQmlComponent::PreferSynchronous;
+ if (args.Length() == 2) {
+ if (args[1]->IsInt32()) {
+ int mode = args[1]->Int32Value();
+ if (mode != int(QQmlComponent::PreferSynchronous) && mode != int(QQmlComponent::Asynchronous))
+ V8THROW_ERROR(invalidArgs);
+ compileMode = QQmlComponent::CompilationMode(mode);
+ } else {
+ V8THROW_ERROR(invalidArgs);
+ }
+ }
+
QUrl url = context->resolvedUrl(QUrl(arg));
- QQmlComponent *c = new QQmlComponent(engine, url, engine);
+ QQmlComponent *c = new QQmlComponent(engine, url, compileMode, engine);
QQmlComponentPrivate::get(c)->creationContext = effectiveContext;
QQmlData::get(c, true)->setImplicitDestructible();
return v8engine->newQObject(c);
@@ -1287,9 +1306,9 @@ v8::Handle<v8::Value> qsTrIdNoOp(const v8::Arguments &args)
or "C", where:
\list
- \o language is a lowercase, two-letter, ISO 639 language code,
- \o territory is an uppercase, two-letter, ISO 3166 country code,
- \o and codeset and modifier are ignored.
+ \li language is a lowercase, two-letter, ISO 639 language code,
+ \li territory is an uppercase, two-letter, ISO 3166 country code,
+ \li and codeset and modifier are ignored.
\endlist
If the string violates the locale format, or language is not a
diff --git a/src/qml/qml/v8/qv8bindings.cpp b/src/qml/qml/v8/qv8bindings.cpp
index 76fbea137e..4b96679cf3 100644
--- a/src/qml/qml/v8/qv8bindings.cpp
+++ b/src/qml/qml/v8/qv8bindings.cpp
@@ -45,7 +45,6 @@
#include <private/qqmlbinding_p.h>
#include <private/qqmlcompiler_p.h>
#include <private/qqmlproperty_p.h>
-#include <private/qqmlbinding_p_p.h>
#include <private/qqmlexpression_p.h>
#include <private/qobject_p.h>
#include <private/qqmltrace_p.h>
@@ -157,9 +156,8 @@ void QV8Bindings::Binding::update(QQmlPropertyPrivate::WriteFlags flags)
ep->dereferenceScarceResources();
} else {
- QQmlProperty p = QQmlPropertyPrivate::restore(target, instruction->property,
- context);
- QQmlBindingPrivate::printBindingLoopError(p);
+ QQmlProperty p = QQmlPropertyPrivate::restore(target, instruction->property, context);
+ QQmlAbstractBinding::printBindingLoopError(p);
}
}
diff --git a/src/qml/qml/v8/qv8contextwrapper.cpp b/src/qml/qml/v8/qv8contextwrapper.cpp
index 246b716aa0..39392b8984 100644
--- a/src/qml/qml/v8/qv8contextwrapper.cpp
+++ b/src/qml/qml/v8/qv8contextwrapper.cpp
@@ -238,16 +238,11 @@ QQmlContextData *QV8ContextWrapper::context(v8::Handle<v8::Value> value)
return r?r->getContext():0;
}
-v8::Handle<v8::Value> QV8ContextWrapper::NullGetter(v8::Local<v8::String> property,
- const v8::AccessorInfo &info)
+v8::Handle<v8::Value> QV8ContextWrapper::NullGetter(v8::Local<v8::String>,
+ const v8::AccessorInfo &)
{
- QV8ContextResource *resource = v8_resource_check<QV8ContextResource>(info.This());
-
- QV8Engine *engine = resource->engine;
-
- QString error = QLatin1String("Can't find variable: ") + engine->toString(property);
- v8::ThrowException(v8::Exception::ReferenceError(engine->toString(error)));
- return v8::Undefined();
+ // V8 will throw a ReferenceError if appropriate ("typeof" should not throw)
+ return v8::Handle<v8::Value>();
}
v8::Handle<v8::Value> QV8ContextWrapper::Getter(v8::Local<v8::String> property,
@@ -365,9 +360,8 @@ v8::Handle<v8::Value> QV8ContextWrapper::Getter(v8::Local<v8::String> property,
expressionContext->unresolvedNames = true;
- QString error = QLatin1String("Can't find variable: ") + engine->toString(property);
- v8::ThrowException(v8::Exception::ReferenceError(engine->toString(error)));
- return v8::Undefined();
+ // V8 will throw a ReferenceError if appropriate ("typeof" should not throw)
+ return v8::Handle<v8::Value>();
}
v8::Handle<v8::Value> QV8ContextWrapper::NullSetter(v8::Local<v8::String> property,
diff --git a/src/qml/qml/v8/qv8qobjectwrapper.cpp b/src/qml/qml/v8/qv8qobjectwrapper.cpp
index 61cfa242c9..2350b9dc2c 100644
--- a/src/qml/qml/v8/qv8qobjectwrapper.cpp
+++ b/src/qml/qml/v8/qv8qobjectwrapper.cpp
@@ -599,11 +599,10 @@ static inline void StoreProperty(QV8Engine *engine, QObject *object, QQmlPropert
v8::StackTrace::kScriptName));
v8::Local<v8::StackFrame> frame = trace->GetFrame(0);
int lineNumber = frame->GetLineNumber();
- int columNumber = frame->GetColumn();
+ int columnNumber = frame->GetColumn();
QString url = engine->toString(frame->GetScriptName());
- newBinding = new QQmlBinding(&function, object, context);
- newBinding->setSourceLocation(url, lineNumber, columNumber);
+ newBinding = new QQmlBinding(&function, object, context, url, lineNumber, columnNumber);
newBinding->setTarget(object, *property, context);
newBinding->setEvaluateFlags(newBinding->evaluateFlags() |
QQmlBinding::RequiresThisObject);
@@ -619,11 +618,10 @@ static inline void StoreProperty(QV8Engine *engine, QObject *object, QQmlPropert
v8::StackTrace::kScriptName));
v8::Local<v8::StackFrame> frame = trace->GetFrame(0);
int lineNumber = frame->GetLineNumber();
- int columNumber = frame->GetColumn();
+ int columnNumber = frame->GetColumn();
QString url = engine->toString(frame->GetScriptName());
- newBinding = new QQmlBinding(&function, object, context);
- newBinding->setSourceLocation(url, lineNumber, columNumber);
+ newBinding = new QQmlBinding(&function, object, context, url, lineNumber, columnNumber);
newBinding->setTarget(object, *property, context);
newBinding->setEvaluateFlags(newBinding->evaluateFlags() |
QQmlBinding::RequiresThisObject);
@@ -925,8 +923,10 @@ static void WeakQObjectReferenceCallback(v8::Persistent<v8::Value> handle, void
QQmlData *ddata = QQmlData::get(object, false);
if (ddata) {
ddata->v8object.Clear();
- if (!object->parent() && !ddata->indestructible)
+ if (!object->parent() && !ddata->indestructible) {
+ ddata->isQueuedForDeletion = true;
object->deleteLater();
+ }
}
}
@@ -1084,13 +1084,16 @@ v8::Handle<v8::Value> QV8QObjectWrapper::newQObject(QObject *object)
return v8::Null();
if (QObjectPrivate::get(object)->wasDeleted)
- return v8::Undefined();
-
+ return v8::Null();
+
QQmlData *ddata = QQmlData::get(object, true);
if (!ddata)
return v8::Undefined();
+ if (ddata->isQueuedForDeletion)
+ return v8::Null();
+
if (ddata->v8objectid == m_id && !ddata->v8object.IsEmpty()) {
// We own the v8object
return v8::Local<v8::Object>::New(ddata->v8object);
diff --git a/src/qml/qml/v8/qv8valuetypewrapper.cpp b/src/qml/qml/v8/qv8valuetypewrapper.cpp
index d54f04a9b0..cf2c13fce9 100644
--- a/src/qml/qml/v8/qv8valuetypewrapper.cpp
+++ b/src/qml/qml/v8/qv8valuetypewrapper.cpp
@@ -352,8 +352,8 @@ v8::Handle<v8::Value> QV8ValueTypeWrapper::Setter(v8::Local<v8::String> property
int columnNumber = frame->GetColumn();
QString url = r->engine->toString(frame->GetScriptName());
- newBinding = new QQmlBinding(&function, reference->object, context);
- newBinding->setSourceLocation(url, lineNumber, columnNumber);
+ newBinding = new QQmlBinding(&function, reference->object, context,
+ url, lineNumber, columnNumber);
newBinding->setTarget(reference->object, cacheData, context);
newBinding->setEvaluateFlags(newBinding->evaluateFlags() |
QQmlBinding::RequiresThisObject);
diff --git a/src/qml/util/qqmlpropertymap.cpp b/src/qml/util/qqmlpropertymap.cpp
index 5010af17c8..1571d2dfc9 100644
--- a/src/qml/util/qqmlpropertymap.cpp
+++ b/src/qml/util/qqmlpropertymap.cpp
@@ -146,7 +146,7 @@ int QQmlPropertyMapMetaObject::createProperty(const char *name, const char *valu
key will be updated as well.
To detect value changes made in the UI layer you can connect to the valueChanged() signal.
- However, note that valueChanged() is \bold NOT emitted when changes are made by calling insert()
+ However, note that valueChanged() is \b NOT emitted when changes are made by calling insert()
or clear() - it is only emitted when a value is updated from QML.
\note It is not possible to remove keys from the map; once a key has been added, you can only
@@ -302,7 +302,7 @@ QVariant QQmlPropertyMap::operator[](const QString &key) const
This signal is emitted whenever one of the values in the map is changed. \a key
is the key corresponding to the \a value that was changed.
- \note valueChanged() is \bold NOT emitted when changes are made by calling insert()
+ \note valueChanged() is \b NOT emitted when changes are made by calling insert()
or clear() - it is only emitted when a value is updated from QML.
*/
diff --git a/src/qmltest/quicktest.cpp b/src/qmltest/quicktest.cpp
index 2e32a60b2d..1c69cee456 100644
--- a/src/qmltest/quicktest.cpp
+++ b/src/qmltest/quicktest.cpp
@@ -203,8 +203,11 @@ int quick_test_main(int argc, char **argv, const char *name, quick_test_viewport
}
// Determine where to look for the test data.
- if (testPath.isEmpty() && sourceDir)
- testPath = QString::fromLocal8Bit(sourceDir);
+ if (testPath.isEmpty() && sourceDir) {
+ const QString s = QString::fromLocal8Bit(sourceDir);
+ if (QFile::exists(s))
+ testPath = s;
+ }
if (testPath.isEmpty()) {
QDir current = QDir::current();
#ifdef Q_OS_WIN
diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp
index f89ac186eb..4f849c771b 100644
--- a/src/quick/items/context2d/qquickcanvasitem.cpp
+++ b/src/quick/items/context2d/qquickcanvasitem.cpp
@@ -169,13 +169,13 @@ QQuickCanvasItemPrivate::~QQuickCanvasItemPrivate()
Although the Canvas item is provides a HTML5 like API, HTML5 canvas
applications need to be modified to run in the Canvas item:
\list
- \o Replace all DOM API calls with QML property bindings or Canvas item methods.
- \o Replace all HTML event handlers with the \a MouseArea item.
- \o Change setInterval/setTimeout function calls with the \a Timer item or
+ \li Replace all DOM API calls with QML property bindings or Canvas item methods.
+ \li Replace all HTML event handlers with the \a MouseArea item.
+ \li Change setInterval/setTimeout function calls with the \a Timer item or
the use of requestAnimationFrame.
- \o Place painting code into the \a QtQuick2::Canvas::onPaint handler and trigger
+ \li Place painting code into the \a QtQuick2::Canvas::onPaint handler and trigger
painting by calling the \c markDirty or \c requestPaint methods.
- \o To draw images, load them by calling the Canvas's loadImage method and then request to paint
+ \li To draw images, load them by calling the Canvas's loadImage method and then request to paint
them in the onImageLoaded handler.
\endlist
@@ -369,8 +369,8 @@ void QQuickCanvasItem::setCanvasWindow(const QRectF& rect)
Holds the current canvas render target.
\list
- \o Canvas.Image - render to an in memory image buffer.
- \o Canvas.FramebufferObject - render to an OpenGL frame buffer
+ \li Canvas.Image - render to an in memory image buffer.
+ \li Canvas.FramebufferObject - render to an OpenGL frame buffer
\endlist
This hint is supplied along with renderStrategy to the graphics context to
@@ -404,9 +404,9 @@ void QQuickCanvasItem::setRenderTarget(QQuickCanvasItem::RenderTarget target)
Holds the current canvas rendering strategy.
\list
- \o Canvas.Immediate - context will perform graphics commands immediately in the main UI thread.
- \o Canvas.Threaded - context will defer graphics commands to a private rendering thread.
- \o Canvas.Cooperative - context will defer graphics commands to the applications global render thread.
+ \li Canvas.Immediate - context will perform graphics commands immediately in the main UI thread.
+ \li Canvas.Threaded - context will defer graphics commands to a private rendering thread.
+ \li Canvas.Cooperative - context will defer graphics commands to the applications global render thread.
\endlist
This hint is supplied along with renderTarget to the graphics context to
diff --git a/src/quick/items/context2d/qquickcontext2d.cpp b/src/quick/items/context2d/qquickcontext2d.cpp
index 05577e8c5c..f8e5e3c57f 100644
--- a/src/quick/items/context2d/qquickcontext2d.cpp
+++ b/src/quick/items/context2d/qquickcontext2d.cpp
@@ -86,7 +86,7 @@ QT_BEGIN_NAMESPACE
{http://www.w3.org/TR/2dcontext}{W3C Canvas 2D Context API standard} with
some enhanced features.
- The Context2D API provides the rendering \bold{context} which defines the
+ The Context2D API provides the rendering \b{context} which defines the
methods and attributes needed to draw on the \c Canvas item. The following
assigns the canvas rendering context to a \c{context} variable:
\code
@@ -495,22 +495,22 @@ static v8::Handle<v8::Value> ctx2d_reset(const v8::Arguments &args)
Each state consists of the current transformation matrix, clipping region,
and values of the following attributes:
\list
- \o\a QtQuick2::Context2D::strokeStyle
- \o\a QtQuick2::Context2D::fillStyle
- \o\a QtQuick2::Context2D::fillRule
- \o\a QtQuick2::Context2D::globalAlpha
- \o\a QtQuick2::Context2D::lineWidth
- \o\a QtQuick2::Context2D::lineCap
- \o\a QtQuick2::Context2D::lineJoin
- \o\a QtQuick2::Context2D::miterLimit
- \o\a QtQuick2::Context2D::shadowOffsetX
- \o\a QtQuick2::Context2D::shadowOffsetY
- \o\a QtQuick2::Context2D::shadowBlur
- \o\a QtQuick2::Context2D::shadowColor
- \o\a QtQuick2::Context2D::globalCompositeOperation
- \o\a QtQuick2::Context2D::font
- \o\a QtQuick2::Context2D::textAlign
- \o\a QtQuick2::Context2D::textBaseline
+ \li\a QtQuick2::Context2D::strokeStyle
+ \li\a QtQuick2::Context2D::fillStyle
+ \li\a QtQuick2::Context2D::fillRule
+ \li\a QtQuick2::Context2D::globalAlpha
+ \li\a QtQuick2::Context2D::lineWidth
+ \li\a QtQuick2::Context2D::lineCap
+ \li\a QtQuick2::Context2D::lineJoin
+ \li\a QtQuick2::Context2D::miterLimit
+ \li\a QtQuick2::Context2D::shadowOffsetX
+ \li\a QtQuick2::Context2D::shadowOffsetY
+ \li\a QtQuick2::Context2D::shadowBlur
+ \li\a QtQuick2::Context2D::shadowColor
+ \li\a QtQuick2::Context2D::globalCompositeOperation
+ \li\a QtQuick2::Context2D::font
+ \li\a QtQuick2::Context2D::textAlign
+ \li\a QtQuick2::Context2D::textBaseline
\endlist
The current path is NOT part of the drawing state. The path can be reset by
@@ -606,19 +606,19 @@ static v8::Handle<v8::Value> ctx2d_scale(const v8::Arguments &args)
\image qml-item-canvas-math.png
where:
\list
- \o \c{a} is the scale factor in the horizontal (x) direction
+ \li \c{a} is the scale factor in the horizontal (x) direction
\image qml-item-canvas-scalex.png
- \o \c{c} is the skew factor in the x direction
+ \li \c{c} is the skew factor in the x direction
\image qml-item-canvas-canvas-skewx.png
- \o \c{e} is the translation in the x direction
+ \li \c{e} is the translation in the x direction
\image qml-item-canvas-canvas-translate.png
- \o \c{b} is the skew factor in the y (vertical) direction
+ \li \c{b} is the skew factor in the y (vertical) direction
\image qml-item-canvas-canvas-skewy.png
- \o \c{d} is the scale factor in the y direction
+ \li \c{d} is the scale factor in the y direction
\image qml-item-canvas-canvas-scaley.png
- \o \c{f} is the translation in the y direction
+ \li \c{f} is the translation in the y direction
\image qml-item-canvas-canvas-translatey.png
- \o the last row remains constant
+ \li the last row remains constant
\endlist
The scale factors and skew factors are multiples; \c{e} and \c{f} are
coordinate space units, just like the units in the \a QtQuick2::Context2D::translate(x,y)
@@ -799,22 +799,22 @@ static void ctx2d_globalAlpha_set(v8::Local<v8::String>, v8::Local<v8::Value> va
\qmlproperty string QtQuick2::Context2D::globalCompositeOperation
Holds the the current the current composition operation, from the list below:
\list
- \o source-atop - A atop B. Display the source image wherever both images are opaque.
+ \li source-atop - A atop B. Display the source image wherever both images are opaque.
Display the destination image wherever the destination image is opaque but the source image is transparent.
Display transparency elsewhere.
- \o source-in - A in B. Display the source image wherever both the source image and destination image are opaque.
+ \li source-in - A in B. Display the source image wherever both the source image and destination image are opaque.
Display transparency elsewhere.
- \o source-out - A out B. Display the source image wherever the source image is opaque and the destination image is transparent.
+ \li source-out - A out B. Display the source image wherever the source image is opaque and the destination image is transparent.
Display transparency elsewhere.
- \o source-over - (default) A over B. Display the source image wherever the source image is opaque.
+ \li source-over - (default) A over B. Display the source image wherever the source image is opaque.
Display the destination image elsewhere.
- \o destination-atop - B atop A. Same as source-atop but using the destination image instead of the source image and vice versa.
- \o destination-in - B in A. Same as source-in but using the destination image instead of the source image and vice versa.
- \o destination-out - B out A. Same as source-out but using the destination image instead of the source image and vice versa.
- \o destination-over - B over A. Same as source-over but using the destination image instead of the source image and vice versa.
- \o lighter - A plus B. Display the sum of the source image and destination image, with color values approaching 255 (100%) as a limit.
- \o copy - A (B is ignored). Display the source image instead of the destination image.
- \o xor - A xor B. Exclusive OR of the source image and destination image.
+ \li destination-atop - B atop A. Same as source-atop but using the destination image instead of the source image and vice versa.
+ \li destination-in - B in A. Same as source-in but using the destination image instead of the source image and vice versa.
+ \li destination-out - B out A. Same as source-out but using the destination image instead of the source image and vice versa.
+ \li destination-over - B over A. Same as source-over but using the destination image instead of the source image and vice versa.
+ \li lighter - A plus B. Display the sum of the source image and destination image, with color values approaching 255 (100%) as a limit.
+ \li copy - A (B is ignored). Display the source image instead of the destination image.
+ \li xor - A xor B. Exclusive OR of the source image and destination image.
\endlist
Additionally, this property also accepts the compositon modes listed in \a {QPainter::CompositionMode}. According to the W3C standard, these
@@ -858,12 +858,12 @@ static void ctx2d_globalCompositeOperation_set(v8::Local<v8::String>, v8::Local<
The style can be either a string containing a CSS color, a CanvasGradient or CanvasPattern object. Invalid values are ignored.
This property accepts several color syntaxes:
\list
- \o 'rgb(red, green, blue)' - for example: 'rgb(255, 100, 55)' or 'rgb(100%, 70%, 30%)'
- \o 'rgba(red, green, blue, alpha)' - for example: 'rgb(255, 100, 55, 1.0)' or 'rgb(100%, 70%, 30%, 0.5)'
- \o 'hsl(hue, saturation, lightness)'
- \o 'hsla(hue, saturation, lightness, alpha)'
- \o '#RRGGBB' - for example: '#00FFCC'
- \o Qt.rgba(red, green, blue, alpha) - for example: Qt.rgba(0.3, 0.7, 1, 1.0)
+ \li 'rgb(red, green, blue)' - for example: 'rgb(255, 100, 55)' or 'rgb(100%, 70%, 30%)'
+ \li 'rgba(red, green, blue, alpha)' - for example: 'rgb(255, 100, 55, 1.0)' or 'rgb(100%, 70%, 30%, 0.5)'
+ \li 'hsl(hue, saturation, lightness)'
+ \li 'hsla(hue, saturation, lightness, alpha)'
+ \li '#RRGGBB' - for example: '#00FFCC'
+ \li Qt.rgba(red, green, blue, alpha) - for example: Qt.rgba(0.3, 0.7, 1, 1.0)
\endlist
If the \a fillStyle or \a strokeStyle is assigned many times in a loop, the last Qt.rgba() syntax should be chosen, as it has the
best performance, because it's already a valid QColor value, does not need to be parsed everytime.
@@ -931,8 +931,8 @@ static void ctx2d_fillStyle_set(v8::Local<v8::String>, v8::Local<v8::Value> valu
\qmlproperty enumeration QtQuick2::Context2D::fillRule
Holds the current fill rule used for filling shapes. The following fill rules supported:
\list
- \o Qt.OddEvenFill
- \o Qt.WindingFill
+ \li Qt.OddEvenFill
+ \li Qt.WindingFill
\endlist
Note: Unlike the \a QPainterPath, the Canvas API uses the winding fill as the default fill rule.
The fillRule property is part of the context rendering state.
@@ -1183,20 +1183,20 @@ static v8::Handle<v8::Value> ctx2d_createConicalGradient(const v8::Arguments &ar
Returns a CanvasPattern object that uses the given \c color and \c patternMode.
The valid pattern modes are:
\list
- \o Qt.SolidPattern
- \o Qt.Dense1Pattern
- \o Qt.Dense2Pattern
- \o Qt.Dense3Pattern
- \o Qt.Dense4Pattern
- \o Qt.Dense5Pattern
- \o Qt.Dense6Pattern
- \o Qt.Dense7Pattern
- \o Qt.HorPattern
- \o Qt.VerPattern
- \o Qt.CrossPattern
- \o Qt.BDiagPattern
- \o Qt.FDiagPattern
- \o Qt.DiagCrossPattern
+ \li Qt.SolidPattern
+ \li Qt.Dense1Pattern
+ \li Qt.Dense2Pattern
+ \li Qt.Dense3Pattern
+ \li Qt.Dense4Pattern
+ \li Qt.Dense5Pattern
+ \li Qt.Dense6Pattern
+ \li Qt.Dense7Pattern
+ \li Qt.HorPattern
+ \li Qt.VerPattern
+ \li Qt.CrossPattern
+ \li Qt.BDiagPattern
+ \li Qt.FDiagPattern
+ \li Qt.DiagCrossPattern
\endlist
\sa Qt::BrushStyle
*/
@@ -1209,10 +1209,10 @@ static v8::Handle<v8::Value> ctx2d_createConicalGradient(const v8::Arguments &ar
The allowed values for \a repetition are:
\list
- \o "repeat" - both directions
- \o "repeat-x - horizontal only
- \o "repeat-y" - vertical only
- \o "no-repeat" - neither
+ \li "repeat" - both directions
+ \li "repeat-x - horizontal only
+ \li "repeat-y" - vertical only
+ \li "no-repeat" - neither
\endlist
If the repetition argument is empty or null, the value "repeat" is used.
@@ -1287,9 +1287,9 @@ static v8::Handle<v8::Value> ctx2d_createPattern(const v8::Arguments &args)
Holds the the current line cap style.
The possible line cap styles are:
\list
- \o butt - the end of each line has a flat edge perpendicular to the direction of the line, this is the default line cap value.
- \o round - a semi-circle with the diameter equal to the width of the line must then be added on to the end of the line.
- \o square - a rectangle with the length of the line width and the width of half the line width, placed flat against the edge perpendicular to the direction of the line.
+ \li butt - the end of each line has a flat edge perpendicular to the direction of the line, this is the default line cap value.
+ \li round - a semi-circle with the diameter equal to the width of the line must then be added on to the end of the line.
+ \li square - a rectangle with the length of the line width and the width of half the line width, placed flat against the edge perpendicular to the direction of the line.
\endlist
Other values are ignored.
*/
@@ -1345,9 +1345,9 @@ static void ctx2d_lineCap_set(v8::Local<v8::String>, v8::Local<v8::Value> value,
The possible line join styles are:
\list
- \o bevel - this is all that is rendered at joins.
- \o round - a filled arc connecting the two aforementioned corners of the join, abutting (and not overlapping) the aforementioned triangle, with the diameter equal to the line width and the origin at the point of the join, must be rendered at joins.
- \o miter - a second filled triangle must (if it can given the miter length) be rendered at the join, this is the default line join style.
+ \li bevel - this is all that is rendered at joins.
+ \li round - a filled arc connecting the two aforementioned corners of the join, abutting (and not overlapping) the aforementioned triangle, with the diameter equal to the line width and the origin at the point of the join, must be rendered at joins.
+ \li miter - a second filled triangle must (if it can given the miter length) be rendered at the join, this is the default line join style.
\endlist
Other values are ignored.
*/
@@ -1711,9 +1711,9 @@ static v8::Handle<v8::Value> ctx2d_arc(const v8::Arguments &args)
Adds an arc with the given control points and radius to the current subpath, connected to the previous point by a straight line.
To draw an arc, you begin with the same steps your followed to create a line:
\list
- \o Call the context.beginPath() method to set a new path.
- \o Call the context.moveTo(\c x, \c y) method to set your starting position on the canvas at the point (\c x,\c y).
- \o To draw an arc or circle, call the context.arcTo(\c x1, \c y1, \c x2, \c y2,\c radius) method.
+ \li Call the context.beginPath() method to set a new path.
+ \li Call the context.moveTo(\c x, \c y) method to set your starting position on the canvas at the point (\c x,\c y).
+ \li To draw an arc or circle, call the context.arcTo(\c x1, \c y1, \c x2, \c y2,\c radius) method.
This adds an arc with starting point (\c x1,\c y1), ending point (\c x2, \c y2), and radius \c radius to the current subpath and connects
it to the previous subpath by a straight line.
\endlist
@@ -1820,10 +1820,10 @@ static v8::Handle<v8::Value> ctx2d_bezierCurveTo(const v8::Arguments &args)
To create a complex shape using the \a clip() method:
\list 1
- \o Call the \c{context.beginPath()} method to set the clipping path.
- \o Define the clipping path by calling any combination of the \c{lineTo},
+ \li Call the \c{context.beginPath()} method to set the clipping path.
+ \li Define the clipping path by calling any combination of the \c{lineTo},
\c{arcTo}, \c{arc}, \c{moveTo}, etc and \c{closePath} methods.
- \o Call the \c{context.clip()} method.
+ \li Call the \c{context.clip()} method.
\endlist
The new shape displays. The following shows how a clipping path can
@@ -2168,11 +2168,11 @@ static void ctx2d_font_set(v8::Local<v8::String>, v8::Local<v8::Value> value, co
Holds the current text alignment settings.
The possible values are:
\list
- \o start
- \o end
- \o left
- \o right
- \o center
+ \li start
+ \li end
+ \li left
+ \li right
+ \li center
\endlist
Other values are ignored. The default value is "start".
*/
@@ -2231,12 +2231,12 @@ static void ctx2d_textAlign_set(v8::Local<v8::String>, v8::Local<v8::Value> valu
Holds the current baseline alignment settings.
The possible values are:
\list
- \o top
- \o hanging
- \o middle
- \o alphabetic
- \o ideographic
- \o bottom
+ \li top
+ \li hanging
+ \li middle
+ \li alphabetic
+ \li ideographic
+ \li bottom
\endlist
Other values are ignored. The default value is "alphabetic".
*/
diff --git a/src/quick/items/qquickaccessibleattached.cpp b/src/quick/items/qquickaccessibleattached.cpp
index 1e07d96690..46f85417d2 100644
--- a/src/quick/items/qquickaccessibleattached.cpp
+++ b/src/quick/items/qquickaccessibleattached.cpp
@@ -113,22 +113,22 @@ QT_BEGIN_NAMESPACE
\table
\header
- \o \bold {Role}
- \o \bold {Expected property}
- \o
+ \li \b {Role}
+ \li \b {Expected property}
+ \li
\row
- \o Button
- \o function accessiblePressAction
- \o Called when the button receives a press action. The implementation should visually simulate a button click and perform the button action.
+ \li Button
+ \li function accessiblePressAction
+ \li Called when the button receives a press action. The implementation should visually simulate a button click and perform the button action.
\row
- \o CheckBox, Radiobutton
- \o checked
- \o The check state of the check box. Updated on Press, Check and Uncheck actions.
+ \li CheckBox, Radiobutton
+ \li checked
+ \li The check state of the check box. Updated on Press, Check and Uncheck actions.
\row
- \o Slider, SpinBox, Dial, ScrollBar
- \o value, minimumValue, maximumValue, stepSize
- \o value will be updated on increase and decrase actions, in accordance with the other properties
+ \li Slider, SpinBox, Dial, ScrollBar
+ \li value, minimumValue, maximumValue, stepSize
+ \li value will be updated on increase and decrase actions, in accordance with the other properties
\endtable
*/
@@ -144,7 +144,6 @@ QQuickAccessibleAttached::QQuickAccessibleAttached(QObject *parent)
// Enable accessibility for items with accessible content. This also
// enables accessibility for the ancestors of souch items.
item->d_func()->setAccessibleFlagAndListener();
- QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::ObjectCreated, item, 0));
}
QQuickAccessibleAttached::~QQuickAccessibleAttached()
diff --git a/src/quick/items/qquickaccessibleattached_p.h b/src/quick/items/qquickaccessibleattached_p.h
index 5eea44b6e4..129c3ef240 100644
--- a/src/quick/items/qquickaccessibleattached_p.h
+++ b/src/quick/items/qquickaccessibleattached_p.h
@@ -85,7 +85,6 @@ public:
if (name != m_name) {
m_name = name;
emit nameChanged();
- QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::NameChanged, parent(), 0));
}
}
@@ -95,7 +94,6 @@ public:
if (m_description != description) {
m_description = description;
emit descriptionChanged();
- QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::DescriptionChanged, parent(), 0));
}
}
diff --git a/src/quick/items/qquickanimatedimage.cpp b/src/quick/items/qquickanimatedimage.cpp
index eef20db361..6567892fb4 100644
--- a/src/quick/items/qquickanimatedimage.cpp
+++ b/src/quick/items/qquickanimatedimage.cpp
@@ -79,7 +79,7 @@ QT_BEGIN_NAMESPACE
about its state, such as the current frame and total number of frames.
The result is an animated image with a simple progress indicator underneath it.
- \bold Note: Unlike images, animated images are not cached or shared internally.
+ \b Note: Unlike images, animated images are not cached or shared internally.
\clearfloat
\snippet doc/src/snippets/qml/animatedimage.qml document
diff --git a/src/quick/items/qquickborderimage.cpp b/src/quick/items/qquickborderimage.cpp
index 5beb345afc..71514593a3 100644
--- a/src/quick/items/qquickborderimage.cpp
+++ b/src/quick/items/qquickborderimage.cpp
@@ -71,12 +71,12 @@ QT_BEGIN_NAMESPACE
create the displayed border image in the following way:
\list
- \i The corners (regions 1, 3, 7, and 9) are not scaled at all.
- \i Regions 2 and 8 are scaled according to
+ \li The corners (regions 1, 3, 7, and 9) are not scaled at all.
+ \li Regions 2 and 8 are scaled according to
\l{BorderImage::horizontalTileMode}{horizontalTileMode}.
- \i Regions 4 and 6 are scaled according to
+ \li Regions 4 and 6 are scaled according to
\l{BorderImage::verticalTileMode}{verticalTileMode}.
- \i The middle (region 5) is scaled according to both
+ \li The middle (region 5) is scaled according to both
\l{BorderImage::horizontalTileMode}{horizontalTileMode} and
\l{BorderImage::verticalTileMode}{verticalTileMode}.
\endlist
@@ -182,10 +182,10 @@ QQuickBorderImage::~QQuickBorderImage()
This property describes the status of image loading. It can be one of:
\list
- \o BorderImage.Null - no image has been set
- \o BorderImage.Ready - the image has been loaded
- \o BorderImage.Loading - the image is currently being loaded
- \o BorderImage.Error - an error occurred while loading the image
+ \li BorderImage.Null - no image has been set
+ \li BorderImage.Ready - the image has been loaded
+ \li BorderImage.Loading - the image is currently being loaded
+ \li BorderImage.Error - an error occurred while loading the image
\endlist
\sa progress
@@ -393,9 +393,9 @@ QQuickScaleGrid *QQuickBorderImage::border()
This property describes how to repeat or stretch the middle parts of the border image.
\list
- \o BorderImage.Stretch - Scales the image to fit to the available area.
- \o BorderImage.Repeat - Tile the image until there is no more space. May crop the last image.
- \o BorderImage.Round - Like Repeat, but scales the images down to ensure that the last image is not cropped.
+ \li BorderImage.Stretch - Scales the image to fit to the available area.
+ \li BorderImage.Repeat - Tile the image until there is no more space. May crop the last image.
+ \li BorderImage.Round - Like Repeat, but scales the images down to ensure that the last image is not cropped.
\endlist
The default tile mode for each property is BorderImage.Stretch.
diff --git a/src/quick/items/qquickcanvas.cpp b/src/quick/items/qquickcanvas.cpp
index f14eccd9a9..cd3bbbfa2a 100644
--- a/src/quick/items/qquickcanvas.cpp
+++ b/src/quick/items/qquickcanvas.cpp
@@ -607,7 +607,6 @@ void QQuickCanvasPrivate::clearFocusInScope(QQuickItem *scope, QQuickItem *item,
{
Q_Q(QQuickCanvas);
- Q_UNUSED(item);
Q_ASSERT(item);
Q_ASSERT(scope || item == rootItem);
@@ -618,7 +617,12 @@ void QQuickCanvasPrivate::clearFocusInScope(QQuickItem *scope, QQuickItem *item,
qWarning() << " activeFocusItem:" << (QObject *)activeFocusItem;
#endif
- QQuickItemPrivate *scopePrivate = scope ? QQuickItemPrivate::get(scope) : 0;
+ QQuickItemPrivate *scopePrivate = 0;
+ if (scope) {
+ scopePrivate = QQuickItemPrivate::get(scope);
+ if ( !scopePrivate->subFocusItem )
+ return;//No focus, nothing to do.
+ }
QQuickItem *oldActiveFocusItem = 0;
QQuickItem *newActiveFocusItem = 0;
diff --git a/src/quick/items/qquickdrag.cpp b/src/quick/items/qquickdrag.cpp
index f8c1281af5..3316169741 100644
--- a/src/quick/items/qquickdrag.cpp
+++ b/src/quick/items/qquickdrag.cpp
@@ -410,10 +410,10 @@ void QQuickDragAttached::start(QQmlV8Function *args)
The returned drop action may be one of:
\list
- \o Qt.CopyAction Copy the data to the target
- \o Qt.MoveAction Move the data from the source to the target
- \o Qt.LinkAction Create a link from the source to the target.
- \o Qt.IgnoreAction Ignore the action (do nothing with the data).
+ \li Qt.CopyAction Copy the data to the target
+ \li Qt.MoveAction Move the data from the source to the target
+ \li Qt.LinkAction Create a link from the source to the target.
+ \li Qt.IgnoreAction Ignore the action (do nothing with the data).
\endlist
*/
diff --git a/src/quick/items/qquickdroparea.cpp b/src/quick/items/qquickdroparea.cpp
index ed5fb23658..51ba4c56ec 100644
--- a/src/quick/items/qquickdroparea.cpp
+++ b/src/quick/items/qquickdroparea.cpp
@@ -378,10 +378,10 @@ QStringList QQuickDropEvent::keys() const
The drop action may be one of:
\list
- \o Qt.CopyAction Copy the data to the target
- \o Qt.MoveAction Move the data from the source to the target
- \o Qt.LinkAction Create a link from the source to the target.
- \o Qt.IgnoreAction Ignore the action (do nothing with the data).
+ \li Qt.CopyAction Copy the data to the target
+ \li Qt.MoveAction Move the data from the source to the target
+ \li Qt.LinkAction Create a link from the source to the target.
+ \li Qt.IgnoreAction Ignore the action (do nothing with the data).
\endlist
*/
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp
index 9222a7766d..bf58e4411d 100644
--- a/src/quick/items/qquickevents.cpp
+++ b/src/quick/items/qquickevents.cpp
@@ -117,12 +117,12 @@ Item {
It contains a bitwise combination of:
\list
- \o Qt.NoModifier - No modifier key is pressed.
- \o Qt.ShiftModifier - A Shift key on the keyboard is pressed.
- \o Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
- \o Qt.AltModifier - An Alt key on the keyboard is pressed.
- \o Qt.MetaModifier - A Meta key on the keyboard is pressed.
- \o Qt.KeypadModifier - A keypad button is pressed.
+ \li Qt.NoModifier - No modifier key is pressed.
+ \li Qt.ShiftModifier - A Shift key on the keyboard is pressed.
+ \li Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
+ \li Qt.AltModifier - An Alt key on the keyboard is pressed.
+ \li Qt.MetaModifier - A Meta key on the keyboard is pressed.
+ \li Qt.KeypadModifier - A keypad button is pressed.
\endlist
For example, to react to a Shift key + Enter key combination:
@@ -179,9 +179,9 @@ Item {
This property holds the button that caused the event. It can be one of:
\list
- \o Qt.LeftButton
- \o Qt.RightButton
- \o Qt.MiddleButton
+ \li Qt.LeftButton
+ \li Qt.RightButton
+ \li Qt.MiddleButton
\endlist
*/
@@ -202,9 +202,9 @@ Item {
It contains a bitwise combination of:
\list
- \o Qt.LeftButton
- \o Qt.RightButton
- \o Qt.MiddleButton
+ \li Qt.LeftButton
+ \li Qt.RightButton
+ \li Qt.MiddleButton
\endlist
*/
@@ -216,12 +216,12 @@ Item {
It contains a bitwise combination of:
\list
- \o Qt.NoModifier - No modifier key is pressed.
- \o Qt.ShiftModifier - A Shift key on the keyboard is pressed.
- \o Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
- \o Qt.AltModifier - An Alt key on the keyboard is pressed.
- \o Qt.MetaModifier - A Meta key on the keyboard is pressed.
- \o Qt.KeypadModifier - A keypad button is pressed.
+ \li Qt.NoModifier - No modifier key is pressed.
+ \li Qt.ShiftModifier - A Shift key on the keyboard is pressed.
+ \li Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
+ \li Qt.AltModifier - An Alt key on the keyboard is pressed.
+ \li Qt.MetaModifier - A Meta key on the keyboard is pressed.
+ \li Qt.KeypadModifier - A keypad button is pressed.
\endlist
For example, to react to a Shift key + Left mouse button click:
@@ -277,9 +277,9 @@ Item {
It contains a bitwise combination of:
\list
- \o Qt.LeftButton
- \o Qt.RightButton
- \o Qt.MiddleButton
+ \li Qt.LeftButton
+ \li Qt.RightButton
+ \li Qt.MiddleButton
\endlist
*/
@@ -317,12 +317,12 @@ Item {
It contains a bitwise combination of:
\list
- \o Qt.NoModifier - No modifier key is pressed.
- \o Qt.ShiftModifier - A Shift key on the keyboard is pressed.
- \o Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
- \o Qt.AltModifier - An Alt key on the keyboard is pressed.
- \o Qt.MetaModifier - A Meta key on the keyboard is pressed.
- \o Qt.KeypadModifier - A keypad button is pressed.
+ \li Qt.NoModifier - No modifier key is pressed.
+ \li Qt.ShiftModifier - A Shift key on the keyboard is pressed.
+ \li Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
+ \li Qt.AltModifier - An Alt key on the keyboard is pressed.
+ \li Qt.MetaModifier - A Meta key on the keyboard is pressed.
+ \li Qt.KeypadModifier - A keypad button is pressed.
\endlist
For example, to react to a Control key pressed during the wheel event:
diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp
index 82f674741f..b6d3ebd7f2 100644
--- a/src/quick/items/qquickflickable.cpp
+++ b/src/quick/items/qquickflickable.cpp
@@ -68,7 +68,7 @@ QT_BEGIN_NAMESPACE
// The number of samples to discard when calculating the flick velocity.
// Touch panels often produce inaccurate results as the finger is lifted.
#ifndef QML_FLICK_DISCARDSAMPLES
-#define QML_FLICK_DISCARDSAMPLES 1
+#define QML_FLICK_DISCARDSAMPLES 0
#endif
// The default maximum velocity of a flick.
@@ -103,7 +103,7 @@ QT_BEGIN_NAMESPACE
// FlickThreshold determines how far the "mouse" must have moved
// before we perform a flick.
-static const int FlickThreshold = 20;
+static const int FlickThreshold = 15;
// RetainGrabVelocity is the maxmimum instantaneous velocity that
// will ensure the Flickable retains the grab on consecutive flicks.
@@ -771,13 +771,13 @@ QQuickFlickableVisibleArea *QQuickFlickable::visibleArea()
This property determines which directions the view can be flicked.
\list
- \o Flickable.AutoFlickDirection (default) - allows flicking vertically if the
+ \li Flickable.AutoFlickDirection (default) - allows flicking vertically if the
\e contentHeight is not equal to the \e height of the Flickable.
Allows flicking horizontally if the \e contentWidth is not equal
to the \e width of the Flickable.
- \o Flickable.HorizontalFlick - allows flicking horizontally.
- \o Flickable.VerticalFlick - allows flicking vertically.
- \o Flickable.HorizontalAndVerticalFlick - allows flicking in both directions.
+ \li Flickable.HorizontalFlick - allows flicking horizontally.
+ \li Flickable.VerticalFlick - allows flicking vertically.
+ \li Flickable.HorizontalAndVerticalFlick - allows flicking in both directions.
\endlist
*/
QQuickFlickable::FlickableDirection QQuickFlickable::flickableDirection() const
@@ -1030,7 +1030,7 @@ void QQuickFlickablePrivate::handleMouseReleaseEvent(QMouseEvent *event)
vVelocity = (extended && extended->capabilities().testFlag(QTouchDevice::Velocity))
? extended->velocity().y() : vData.velocity;
}
- if (vData.atBeginning || vData.atEnd) {
+ if ((vData.atBeginning && vVelocity > 0.) || (vData.atEnd && vVelocity < 0.)) {
vVelocity /= 2;
} else if (vData.continuousFlickVelocity != 0.0
&& vData.viewSize/q->height() > QML_FLICK_MULTIFLICK_RATIO
@@ -1046,7 +1046,7 @@ void QQuickFlickablePrivate::handleMouseReleaseEvent(QMouseEvent *event)
hVelocity = (extended && extended->capabilities().testFlag(QTouchDevice::Velocity))
? extended->velocity().x() : hData.velocity;
}
- if (hData.atBeginning || hData.atEnd) {
+ if ((hData.atBeginning && hVelocity > 0.) || (hData.atEnd && hVelocity < 0.)) {
hVelocity /= 2;
} else if (hData.continuousFlickVelocity != 0.0
&& hData.viewSize/q->width() > QML_FLICK_MULTIFLICK_RATIO
@@ -1449,11 +1449,11 @@ QQmlListProperty<QQuickItem> QQuickFlickable::flickableChildren()
The \c boundsBehavior can be one of:
\list
- \o Flickable.StopAtBounds - the contents can not be dragged beyond the boundary
+ \li Flickable.StopAtBounds - the contents can not be dragged beyond the boundary
of the flickable, and flicks will not overshoot.
- \o Flickable.DragOverBounds - the contents can be dragged beyond the boundary
+ \li Flickable.DragOverBounds - the contents can be dragged beyond the boundary
of the Flickable, but flicks will not overshoot.
- \o Flickable.DragAndOvershootBounds (default) - the contents can be dragged
+ \li Flickable.DragAndOvershootBounds (default) - the contents can be dragged
beyond the boundary of the Flickable, and can overshoot the
boundary when flicked.
\endlist
diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp
index 78899b27e5..1fab4a8c99 100644
--- a/src/quick/items/qquickgridview.cpp
+++ b/src/quick/items/qquickgridview.cpp
@@ -66,13 +66,22 @@ QT_BEGIN_NAMESPACE
class FxGridItemSG : public FxViewItem
{
public:
- FxGridItemSG(QQuickItem *i, QQuickGridView *v, bool own) : FxViewItem(i, own), view(v) {
+ FxGridItemSG(QQuickItem *i, QQuickGridView *v, bool own, bool trackGeometry) : FxViewItem(i, own, trackGeometry), view(v) {
attached = static_cast<QQuickGridViewAttached*>(qmlAttachedPropertiesObject<QQuickGridView>(item));
if (attached)
static_cast<QQuickGridViewAttached*>(attached)->setView(view);
+ if (trackGeometry) {
+ QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
+ itemPrivate->addItemChangeListener(QQuickItemViewPrivate::get(view), QQuickItemPrivate::Geometry);
+ }
}
- ~FxGridItemSG() {}
+ ~FxGridItemSG() {
+ if (trackGeom) {
+ QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
+ itemPrivate->removeItemChangeListener(QQuickItemViewPrivate::get(view), QQuickItemPrivate::Geometry);
+ }
+ }
qreal position() const {
return rowPos();
@@ -423,7 +432,7 @@ FxViewItem *QQuickGridViewPrivate::newViewItem(int modelIndex, QQuickItem *item)
{
Q_Q(QQuickGridView);
Q_UNUSED(modelIndex);
- return new FxGridItemSG(item, q, false);
+ return new FxGridItemSG(item, q, false, false);
}
void QQuickGridViewPrivate::initializeViewItem(FxViewItem *item)
@@ -685,7 +694,7 @@ void QQuickGridViewPrivate::createHighlight()
if (currentItem) {
QQuickItem *item = createHighlightItem();
if (item) {
- FxGridItemSG *newHighlight = new FxGridItemSG(item, q, true);
+ FxGridItemSG *newHighlight = new FxGridItemSG(item, q, true, true);
if (autoHighlight)
resetHighlightPosition();
highlightXAnimator = new QSmoothedAnimation;
@@ -760,11 +769,11 @@ void QQuickGridViewPrivate::updateFooter()
Q_Q(QQuickGridView);
bool created = false;
if (!footer) {
- QQuickItem *item = createComponentItem(footerComponent, true);
+ QQuickItem *item = createComponentItem(footerComponent);
if (!item)
return;
item->setZ(1);
- footer = new FxGridItemSG(item, q, true);
+ footer = new FxGridItemSG(item, q, true, true);
created = true;
}
@@ -799,11 +808,11 @@ void QQuickGridViewPrivate::updateHeader()
Q_Q(QQuickGridView);
bool created = false;
if (!header) {
- QQuickItem *item = createComponentItem(headerComponent, true);
+ QQuickItem *item = createComponentItem(headerComponent);
if (!item)
return;
item->setZ(1);
- header = new FxGridItemSG(item, q, true);
+ header = new FxGridItemSG(item, q, true, true);
created = true;
}
@@ -1344,13 +1353,13 @@ void QQuickGridView::setHighlightFollowsCurrentItem(bool autoHighlight)
Valid values for \c highlightRangeMode are:
\list
- \o GridView.ApplyRange - the view attempts to maintain the highlight within the range.
+ \li GridView.ApplyRange - the view attempts to maintain the highlight within the range.
However, the highlight can move outside of the range at the ends of the view or due
to mouse interaction.
- \o GridView.StrictlyEnforceRange - the highlight never moves outside of the range.
+ \li GridView.StrictlyEnforceRange - the highlight never moves outside of the range.
The current item changes if a keyboard or mouse action would cause the highlight to move
outside of the range.
- \o GridView.NoHighlightRange - this is the default value.
+ \li GridView.NoHighlightRange - this is the default value.
\endlist
*/
@@ -1362,13 +1371,13 @@ void QQuickGridView::setHighlightFollowsCurrentItem(bool autoHighlight)
Possible values:
\list
- \o Qt.LeftToRight (default) - Items will be laid out starting in the top, left corner. The flow is
+ \li Qt.LeftToRight (default) - Items will be laid out starting in the top, left corner. The flow is
dependent on the \l GridView::flow property.
- \o Qt.RightToLeft - Items will be laid out starting in the top, right corner. The flow is dependent
+ \li Qt.RightToLeft - Items will be laid out starting in the top, right corner. The flow is dependent
on the \l GridView::flow property.
\endlist
- \bold Note: If GridView::flow is set to GridView.LeftToRight, this is not to be confused if
+ \b Note: If GridView::flow is set to GridView.LeftToRight, this is not to be confused if
GridView::layoutDirection is set to Qt.RightToLeft. The GridView.LeftToRight flow value simply
indicates that the flow is horizontal.
*/
@@ -1437,8 +1446,8 @@ void QQuickGridView::setHighlightMoveDuration(int duration)
Possible values:
\list
- \o GridView.LeftToRight (default) - Items are laid out from left to right, and the view scrolls vertically
- \o GridView.TopToBottom - Items are laid out from top to bottom, and the view scrolls horizontally
+ \li GridView.LeftToRight (default) - Items are laid out from left to right, and the view scrolls vertically
+ \li GridView.TopToBottom - Items are laid out from top to bottom, and the view scrolls horizontally
\endlist
*/
QQuickGridView::Flow QQuickGridView::flow() const
@@ -1517,10 +1526,10 @@ void QQuickGridView::setCellHeight(qreal cellHeight)
The possible values are:
\list
- \o GridView.NoSnap (default) - the view stops anywhere within the visible area.
- \o GridView.SnapToRow - the view settles with a row (or column for \c GridView.TopToBottom flow)
+ \li GridView.NoSnap (default) - the view stops anywhere within the visible area.
+ \li GridView.SnapToRow - the view settles with a row (or column for \c GridView.TopToBottom flow)
aligned with the start of the view.
- \o GridView.SnapOneRow - the view will settle no more than one row (or column for \c GridView.TopToBottom flow)
+ \li GridView.SnapOneRow - the view will settle no more than one row (or column for \c GridView.TopToBottom flow)
away from the first visible row at the time the mouse button is released.
This mode is particularly useful for moving one page at a time.
\endlist
@@ -1590,9 +1599,9 @@ void QQuickGridView::setSnapMode(SnapMode mode)
It is applied to all items that are created when:
\list
- \o The view is first created
- \o The view's \l model changes
- \o The view's \l model is \l {QAbstractItemModel::reset}{reset}, if the model is a QAbstractItemModel subclass
+ \li The view is first created
+ \li The view's \l model changes
+ \li The view's \l model is \l {QAbstractItemModel::reset}{reset}, if the model is a QAbstractItemModel subclass
\endlist
For example, here is a view that specifies such a transition:
@@ -1971,7 +1980,7 @@ void QQuickGridView::geometryChanged(const QRectF &newGeometry, const QRectF &ol
The current index will wrap if keyNavigationWraps is true and it
is currently at the end. This method has no effect if the \l count is zero.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
@@ -2001,7 +2010,7 @@ void QQuickGridView::moveCurrentIndexUp()
The current index will wrap if keyNavigationWraps is true and it
is currently at the end. This method has no effect if the \l count is zero.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
void QQuickGridView::moveCurrentIndexDown()
{
@@ -2029,7 +2038,7 @@ void QQuickGridView::moveCurrentIndexDown()
The current index will wrap if keyNavigationWraps is true and it
is currently at the end. This method has no effect if the \l count is zero.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
void QQuickGridView::moveCurrentIndexLeft()
{
@@ -2072,7 +2081,7 @@ void QQuickGridView::moveCurrentIndexLeft()
The current index will wrap if keyNavigationWraps is true and it
is currently at the end. This method has no effect if the \l count is zero.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
void QQuickGridView::moveCurrentIndexRight()
{
@@ -2307,12 +2316,12 @@ bool QQuickGridViewPrivate::needsRefillForAddedOrRemovedIndex(int modelIndex) co
\a mode:
\list
- \o GridView.Beginning - position item at the top (or left for \c GridView.TopToBottom flow) of the view.
- \o GridView.Center - position item in the center of the view.
- \o GridView.End - position item at bottom (or right for horizontal orientation) of the view.
- \o GridView.Visible - if any part of the item is visible then take no action, otherwise
+ \li GridView.Beginning - position item at the top (or left for \c GridView.TopToBottom flow) of the view.
+ \li GridView.Center - position item in the center of the view.
+ \li GridView.End - position item at bottom (or right for horizontal orientation) of the view.
+ \li GridView.Visible - if any part of the item is visible then take no action, otherwise
bring the item into view.
- \o GridView.Contain - ensure the entire item is visible. If the item is larger than
+ \li GridView.Contain - ensure the entire item is visible. If the item is larger than
the view the item is positioned at the top (or left for \c GridView.TopToBottom flow) of the view.
\endlist
@@ -2324,7 +2333,7 @@ bool QQuickGridViewPrivate::needsRefillForAddedOrRemovedIndex(int modelIndex) co
of the view does not cause all other items to be repositioned.
The correct way to bring an item into view is with \c positionViewAtIndex.
- \bold Note: methods should only be called after the Component has completed. To position
+ \b Note: methods should only be called after the Component has completed. To position
the view at startup, this method should be called by Component.onCompleted. For
example, to position the view at the end:
@@ -2344,7 +2353,7 @@ bool QQuickGridViewPrivate::needsRefillForAddedOrRemovedIndex(int modelIndex) co
of the list does not cause all other items to be repositioned, and because
the actual start of the view can vary based on the size of the delegates.
- \bold Note: methods should only be called after the Component has completed. To position
+ \b Note: methods should only be called after the Component has completed. To position
the view at startup, this method should be called by Component.onCompleted. For
example, to position the view at the end on startup:
@@ -2363,7 +2372,7 @@ bool QQuickGridViewPrivate::needsRefillForAddedOrRemovedIndex(int modelIndex) co
If the item is outside the visible area, -1 is returned, regardless of
whether an item will exist at that point when scrolled into view.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
/*!
@@ -2376,7 +2385,7 @@ bool QQuickGridViewPrivate::needsRefillForAddedOrRemovedIndex(int modelIndex) co
If the item is outside the visible area, null is returned, regardless of
whether an item will exist at that point when scrolled into view.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
QQuickGridViewAttached *QQuickGridView::qmlAttachedProperties(QObject *obj)
diff --git a/src/quick/items/qquickimage.cpp b/src/quick/items/qquickimage.cpp
index a939365e98..2346689178 100644
--- a/src/quick/items/qquickimage.cpp
+++ b/src/quick/items/qquickimage.cpp
@@ -142,7 +142,7 @@ QQuickImagePrivate::QQuickImagePrivate()
Images are cached and shared internally, so if several Image elements have the same \l source,
only one copy of the image will be loaded.
- \bold Note: Images are often the greatest user of memory in QML user interfaces. It is recommended
+ \b Note: Images are often the greatest user of memory in QML user interfaces. It is recommended
that images which do not form part of the user interface have their
size bounded via the \l sourceSize property. This is especially important for content
that is loaded from external sources or provided by the user.
@@ -185,20 +185,20 @@ void QQuickImagePrivate::setImage(const QImage &image)
than the item.
\list
- \o Image.Stretch - the image is scaled to fit
- \o Image.PreserveAspectFit - the image is scaled uniformly to fit without cropping
- \o Image.PreserveAspectCrop - the image is scaled uniformly to fill, cropping if necessary
- \o Image.Tile - the image is duplicated horizontally and vertically
- \o Image.TileVertically - the image is stretched horizontally and tiled vertically
- \o Image.TileHorizontally - the image is stretched vertically and tiled horizontally
- \o Image.Pad - the image is not transformed
+ \li Image.Stretch - the image is scaled to fit
+ \li Image.PreserveAspectFit - the image is scaled uniformly to fit without cropping
+ \li Image.PreserveAspectCrop - the image is scaled uniformly to fill, cropping if necessary
+ \li Image.Tile - the image is duplicated horizontally and vertically
+ \li Image.TileVertically - the image is stretched horizontally and tiled vertically
+ \li Image.TileHorizontally - the image is stretched vertically and tiled horizontally
+ \li Image.Pad - the image is not transformed
\endlist
\table
\row
- \o \image declarative-qtlogo-stretch.png
- \o Stretch (default)
+ \li \image declarative-qtlogo-stretch.png
+ \li Stretch (default)
\qml
Image {
width: 130; height: 100
@@ -208,8 +208,8 @@ void QQuickImagePrivate::setImage(const QImage &image)
\endqml
\row
- \o \image declarative-qtlogo-preserveaspectfit.png
- \o PreserveAspectFit
+ \li \image declarative-qtlogo-preserveaspectfit.png
+ \li PreserveAspectFit
\qml
Image {
width: 130; height: 100
@@ -220,8 +220,8 @@ void QQuickImagePrivate::setImage(const QImage &image)
\endqml
\row
- \o \image declarative-qtlogo-preserveaspectcrop.png
- \o PreserveAspectCrop
+ \li \image declarative-qtlogo-preserveaspectcrop.png
+ \li PreserveAspectCrop
\qml
Image {
width: 130; height: 100
@@ -233,8 +233,8 @@ void QQuickImagePrivate::setImage(const QImage &image)
\endqml
\row
- \o \image declarative-qtlogo-tile.png
- \o Tile
+ \li \image declarative-qtlogo-tile.png
+ \li Tile
\qml
Image {
width: 120; height: 120
@@ -244,8 +244,8 @@ void QQuickImagePrivate::setImage(const QImage &image)
\endqml
\row
- \o \image declarative-qtlogo-tilevertically.png
- \o TileVertically
+ \li \image declarative-qtlogo-tilevertically.png
+ \li TileVertically
\qml
Image {
width: 120; height: 120
@@ -256,8 +256,8 @@ void QQuickImagePrivate::setImage(const QImage &image)
\endqml
\row
- \o \image declarative-qtlogo-tilehorizontally.png
- \o TileHorizontally
+ \li \image declarative-qtlogo-tilehorizontally.png
+ \li TileHorizontally
\qml
Image {
width: 120; height: 120
@@ -319,22 +319,22 @@ qreal QQuickImage::paintedHeight() const
This property holds the status of image loading. It can be one of:
\list
- \o Image.Null - no image has been set
- \o Image.Ready - the image has been loaded
- \o Image.Loading - the image is currently being loaded
- \o Image.Error - an error occurred while loading the image
+ \li Image.Null - no image has been set
+ \li Image.Ready - the image has been loaded
+ \li Image.Loading - the image is currently being loaded
+ \li Image.Error - an error occurred while loading the image
\endlist
Use this status to provide an update or respond to the status change in some way.
For example, you could:
\list
- \o Trigger a state change:
+ \li Trigger a state change:
\qml
State { name: 'loaded'; when: image.status == Image.Ready }
\endqml
- \o Implement an \c onStatusChanged signal handler:
+ \li Implement an \c onStatusChanged signal handler:
\qml
Image {
id: image
@@ -342,7 +342,7 @@ qreal QQuickImage::paintedHeight() const
}
\endqml
- \o Bind to the status value:
+ \li Bind to the status value:
\qml
Text { text: image.status == Image.Ready ? 'Loaded' : 'Not loaded' }
\endqml
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
index 8e351f1527..423fb0f40c 100644
--- a/src/quick/items/qquickitem.cpp
+++ b/src/quick/items/qquickitem.cpp
@@ -116,9 +116,9 @@ void QQuickItemPrivate::registerAccessorProperties()
The following concrete Transform types are available:
\list
- \o \l Rotation
- \o \l Scale
- \o \l Translate
+ \li \l Rotation
+ \li \l Scale
+ \li \l Translate
\endlist
The Transform elements let you create and control advanced transformations that can be configured
@@ -696,10 +696,10 @@ void QQuickKeyNavigationAttached::setBacktab(QQuickItem *i)
or after the attached item's own key handling.
\list
- \o KeyNavigation.BeforeItem - process the key events before normal
+ \li KeyNavigation.BeforeItem - process the key events before normal
item key processing. If the event is used for key navigation, it will be accepted and will not
be passed on to the item.
- \o KeyNavigation.AfterItem (default) - process the key events after normal item key
+ \li KeyNavigation.AfterItem (default) - process the key events after normal item key
handling. If the item accepts the key event it will not be
handled by the KeyNavigation attached property handler.
\endlist
@@ -933,21 +933,21 @@ bool QQuickKeysAttachedPrivate::isConnected(const char *signalName)
If \l priority is Keys.BeforeItem (default) the order of key event processing is:
\list 1
- \o Items specified in \c forwardTo
- \o specific key handlers, e.g. onReturnPressed
- \o onKeyPress, onKeyRelease handlers
- \o Item specific key handling, e.g. TextInput key handling
- \o parent item
+ \li Items specified in \c forwardTo
+ \li specific key handlers, e.g. onReturnPressed
+ \li onKeyPress, onKeyRelease handlers
+ \li Item specific key handling, e.g. TextInput key handling
+ \li parent item
\endlist
If priority is Keys.AfterItem the order of key event processing is:
\list 1
- \o Item specific key handling, e.g. TextInput key handling
- \o Items specified in \c forwardTo
- \o specific key handlers, e.g. onReturnPressed
- \o onKeyPress, onKeyRelease handlers
- \o parent item
+ \li Item specific key handling, e.g. TextInput key handling
+ \li Items specified in \c forwardTo
+ \li specific key handlers, e.g. onReturnPressed
+ \li onKeyPress, onKeyRelease handlers
+ \li parent item
\endlist
If the event is accepted during any of the above steps, key
@@ -970,10 +970,10 @@ bool QQuickKeysAttachedPrivate::isConnected(const char *signalName)
or after the attached item's own key handling.
\list
- \o Keys.BeforeItem (default) - process the key events before normal
+ \li Keys.BeforeItem (default) - process the key events before normal
item key processing. If the event is accepted it will not
be passed on to the item.
- \o Keys.AfterItem - process the key events after normal item key
+ \li Keys.AfterItem - process the key events after normal item key
handling. If the item accepts the key event it will not be
handled by the Keys attached property handler.
\endlist
@@ -2644,8 +2644,8 @@ void QQuickItemPrivate::transform_clear(QQmlListProperty<QQuickTransform> *prop)
\table
\row
- \o \image declarative-item_stacking1.png
- \o Same \c z - later children above earlier children:
+ \li \image declarative-item_stacking1.png
+ \li Same \c z - later children above earlier children:
\qml
Item {
Rectangle {
@@ -2659,8 +2659,8 @@ void QQuickItemPrivate::transform_clear(QQmlListProperty<QQuickTransform> *prop)
}
\endqml
\row
- \o \image declarative-item_stacking2.png
- \o Higher \c z on top:
+ \li \image declarative-item_stacking2.png
+ \li Higher \c z on top:
\qml
Item {
Rectangle {
@@ -2675,8 +2675,8 @@ void QQuickItemPrivate::transform_clear(QQmlListProperty<QQuickTransform> *prop)
}
\endqml
\row
- \o \image declarative-item_stacking3.png
- \o Same \c z - children above parents:
+ \li \image declarative-item_stacking3.png
+ \li Same \c z - children above parents:
\qml
Item {
Rectangle {
@@ -2690,8 +2690,8 @@ void QQuickItemPrivate::transform_clear(QQmlListProperty<QQuickTransform> *prop)
}
\endqml
\row
- \o \image declarative-item_stacking4.png
- \o Lower \c z below:
+ \li \image declarative-item_stacking4.png
+ \li Lower \c z below:
\qml
Item {
Rectangle {
@@ -2769,8 +2769,8 @@ void QQuickItemPrivate::transform_clear(QQmlListProperty<QQuickTransform> *prop)
\table
\row
- \o \image declarative-anchors_example.png
- \o Text anchored to Image, horizontally centered and vertically below, with a margin.
+ \li \image declarative-anchors_example.png
+ \li Text anchored to Image, horizontally centered and vertically below, with a margin.
\qml
Item {
Image {
@@ -2787,8 +2787,8 @@ void QQuickItemPrivate::transform_clear(QQmlListProperty<QQuickTransform> *prop)
}
\endqml
\row
- \o \image declarative-anchors_example2.png
- \o
+ \li \image declarative-anchors_example2.png
+ \li
Left of Text anchored to right of Image, with a margin. The y
property of both defaults to 0.
@@ -3018,7 +3018,6 @@ void QQuickItem::inputMethodEvent(QInputMethodEvent *event)
void QQuickItem::focusInEvent(QFocusEvent *)
{
- QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::Focus, this, 0));
}
void QQuickItem::focusOutEvent(QFocusEvent *)
@@ -3734,8 +3733,8 @@ void QQuickItem::setZ(qreal v)
\table
\row
- \o \image declarative-rotation.png
- \o
+ \li \image declarative-rotation.png
+ \li
\qml
Rectangle {
color: "blue"
@@ -3768,8 +3767,8 @@ void QQuickItem::setZ(qreal v)
\table
\row
- \o \image declarative-scale.png
- \o
+ \li \image declarative-scale.png
+ \li
\qml
Rectangle {
color: "blue"
@@ -3805,8 +3804,8 @@ void QQuickItem::setZ(qreal v)
\table
\row
- \o \image declarative-item_opacity1.png
- \o
+ \li \image declarative-item_opacity1.png
+ \li
\qml
Item {
Rectangle {
@@ -3820,8 +3819,8 @@ void QQuickItem::setZ(qreal v)
}
\endqml
\row
- \o \image declarative-item_opacity2.png
- \o
+ \li \image declarative-item_opacity2.png
+ \li
\qml
Item {
Rectangle {
@@ -3990,9 +3989,6 @@ bool QQuickItemPrivate::setEffectiveVisibleRecur(bool newEffectiveVisible)
itemChange(QQuickItem::ItemVisibleHasChanged, effectiveVisible);
- if (isAccessible)
- QAccessible::updateAccessibility(QAccessibleEvent(effectiveVisible ? QAccessible::ObjectShow : QAccessible::ObjectHide, q, 0));
-
emit q->visibleChanged();
if (childVisibilityChanged)
emit q->visibleChildrenChanged();
@@ -4445,7 +4441,7 @@ qreal QQuickItem::implicitWidth() const
}
\endqml
- \bold Note: using implicitWidth of Text or TextEdit and setting the width explicitly
+ \b Note: using implicitWidth of Text or TextEdit and setting the width explicitly
incurs a performance penalty as the text must be laid out twice.
*/
@@ -5638,9 +5634,9 @@ void QQuickItemLayer::setMipmap(bool mipmap)
allow you to save some texture memory.
\list
- \o ShaderEffectSource.Alpha - GL_ALPHA
- \o ShaderEffectSource.RGB - GL_RGB
- \o ShaderEffectSource.RGBA - GL_RGBA
+ \li ShaderEffectSource.Alpha - GL_ALPHA
+ \li ShaderEffectSource.RGB - GL_RGB
+ \li ShaderEffectSource.RGBA - GL_RGBA
\endlist
\note Some OpenGL implementations do not support the GL_ALPHA format.
@@ -5735,10 +5731,10 @@ void QQuickItemLayer::setSize(const QSize &size)
specified.
\list
- \o ShaderEffectSource.ClampToEdge - GL_CLAMP_TO_EDGE both horizontally and vertically
- \o ShaderEffectSource.RepeatHorizontally - GL_REPEAT horizontally, GL_CLAMP_TO_EDGE vertically
- \o ShaderEffectSource.RepeatVertically - GL_CLAMP_TO_EDGE horizontally, GL_REPEAT vertically
- \o ShaderEffectSource.Repeat - GL_REPEAT both horizontally and vertically
+ \li ShaderEffectSource.ClampToEdge - GL_CLAMP_TO_EDGE both horizontally and vertically
+ \li ShaderEffectSource.RepeatHorizontally - GL_REPEAT horizontally, GL_CLAMP_TO_EDGE vertically
+ \li ShaderEffectSource.RepeatVertically - GL_CLAMP_TO_EDGE horizontally, GL_REPEAT vertically
+ \li ShaderEffectSource.Repeat - GL_REPEAT both horizontally and vertically
\endlist
\note Some OpenGL ES 2 implementations do not support the GL_REPEAT
@@ -5747,7 +5743,7 @@ void QQuickItemLayer::setSize(const QSize &size)
void QQuickItemLayer::setWrapMode(QQuickShaderEffectSource::WrapMode mode)
{
- if (mode != m_wrapMode)
+ if (mode == m_wrapMode)
return;
m_wrapMode = mode;
diff --git a/src/quick/items/qquickitemanimation.cpp b/src/quick/items/qquickitemanimation.cpp
index 32f1047e51..a1c398eeb6 100644
--- a/src/quick/items/qquickitemanimation.cpp
+++ b/src/quick/items/qquickitemanimation.cpp
@@ -701,12 +701,12 @@ void QQuickPathAnimation::setTargetObject(QQuickItem *target)
item to achieve the specified orientation as it travels along the path.
\list
- \o PathAnimation.Fixed (default) - the PathAnimation will not control
+ \li PathAnimation.Fixed (default) - the PathAnimation will not control
the rotation of the item.
- \o PathAnimation.RightFirst - The right side of the item will lead along the path.
- \o PathAnimation.LeftFirst - The left side of the item will lead along the path.
- \o PathAnimation.BottomFirst - The bottom of the item will lead along the path.
- \o PathAnimation.TopFirst - The top of the item will lead along the path.
+ \li PathAnimation.RightFirst - The right side of the item will lead along the path.
+ \li PathAnimation.LeftFirst - The left side of the item will lead along the path.
+ \li PathAnimation.BottomFirst - The bottom of the item will lead along the path.
+ \li PathAnimation.TopFirst - The top of the item will lead along the path.
\endlist
*/
QQuickPathAnimation::Orientation QQuickPathAnimation::orientation() const
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index 501b206ef6..50a3216bf0 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -45,11 +45,12 @@
QT_BEGIN_NAMESPACE
-FxViewItem::FxViewItem(QQuickItem *i, bool own)
+FxViewItem::FxViewItem(QQuickItem *i, bool own, bool trackGeometry)
: item(i)
, transitionableItem(0)
, ownItem(own)
, releaseAfterTransition(false)
+ , trackGeom(trackGeometry)
{
}
@@ -257,8 +258,8 @@ void QQuickItemView::setModel(const QVariant &model)
QQuickVisualModel *oldModel = d->model;
d->clear();
- d->setPosition(d->contentStartOffset());
d->model = 0;
+ d->setPosition(d->contentStartOffset());
d->modelVariant = model;
QObject *object = qvariant_cast<QObject*>(model);
@@ -2195,10 +2196,10 @@ bool QQuickItemViewPrivate::releaseItem(FxViewItem *item)
QQuickItem *QQuickItemViewPrivate::createHighlightItem()
{
- return createComponentItem(highlightComponent, true, true);
+ return createComponentItem(highlightComponent, true);
}
-QQuickItem *QQuickItemViewPrivate::createComponentItem(QQmlComponent *component, bool receiveItemGeometryChanges, bool createDefault)
+QQuickItem *QQuickItemViewPrivate::createComponentItem(QQmlComponent *component, bool createDefault)
{
Q_Q(QQuickItemView);
@@ -2222,10 +2223,6 @@ QQuickItem *QQuickItemViewPrivate::createComponentItem(QQmlComponent *component,
if (item) {
QQml_setParent_noEvent(item, q->contentItem());
item->setParentItem(q->contentItem());
- if (receiveItemGeometryChanges) {
- QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
- itemPrivate->addItemChangeListener(this, QQuickItemPrivate::Geometry);
- }
}
return item;
}
diff --git a/src/quick/items/qquickitemview_p_p.h b/src/quick/items/qquickitemview_p_p.h
index dfc0a8bc7e..7516761ee8 100644
--- a/src/quick/items/qquickitemview_p_p.h
+++ b/src/quick/items/qquickitemview_p_p.h
@@ -60,7 +60,7 @@ QT_MODULE(Quick)
class FxViewItem
{
public:
- FxViewItem(QQuickItem *, bool own);
+ FxViewItem(QQuickItem *, bool own, bool trackGeometry);
virtual ~FxViewItem();
qreal itemX() const;
@@ -92,6 +92,7 @@ public:
int index;
bool ownItem;
bool releaseAfterTransition;
+ bool trackGeom;
};
@@ -124,6 +125,8 @@ public:
QQuickItemViewPrivate();
~QQuickItemViewPrivate();
+ static inline QQuickItemViewPrivate *get(QQuickItemView *o) { return o->d_func(); }
+
struct ChangeResult {
QQmlNullableValue<qreal> visiblePos;
bool changedFirstItem;
@@ -191,7 +194,7 @@ public:
virtual bool releaseItem(FxViewItem *item);
QQuickItem *createHighlightItem();
- QQuickItem *createComponentItem(QQmlComponent *component, bool receiveItemGeometryChanges, bool createDefault = false);
+ QQuickItem *createComponentItem(QQmlComponent *component, bool createDefault = false);
void updateCurrent(int modelIndex);
void updateTrackedItem();
diff --git a/src/quick/items/qquickitemviewtransition.cpp b/src/quick/items/qquickitemviewtransition.cpp
index 823269bfc1..cdc1c19518 100644
--- a/src/quick/items/qquickitemviewtransition.cpp
+++ b/src/quick/items/qquickitemviewtransition.cpp
@@ -579,14 +579,14 @@ QQuickViewTransitionAttached::QQuickViewTransitionAttached(QObject *parent)
operations:
\list
- \o \c populate - the transition to run when a view is created, or when the model changes
- \o \c add - the transition to apply to items that are added to the view
- \o \c remove - the transition to apply to items that are removed from the view
- \o \c move - the transition to apply to items that are moved within the view (i.e. as a result
+ \li \c populate - the transition to run when a view is created, or when the model changes
+ \li \c add - the transition to apply to items that are added to the view
+ \li \c remove - the transition to apply to items that are removed from the view
+ \li \c move - the transition to apply to items that are moved within the view (i.e. as a result
of a move operation in the model)
- \o \c displaced - the generic transition to be applied to any items that are displaced by an
+ \li \c displaced - the generic transition to be applied to any items that are displaced by an
add, move or remove operation
- \o \c addDisplaced, \c removeDisplaced and \c moveDisplaced - the transitions to be applied when
+ \li \c addDisplaced, \c removeDisplaced and \c moveDisplaced - the transitions to be applied when
items are displaced by add, move, or remove operations, respectively (these override the
generic displaced transition if specified)
\endlist
@@ -595,9 +595,9 @@ QQuickViewTransitionAttached::QQuickViewTransitionAttached(QObject *parent)
items rather than data models, the following properties are used instead:
\list
- \o \c add - the transition to apply to items that are created for the positioner, added to
+ \li \c add - the transition to apply to items that are created for the positioner, added to
or reparented to the positioner, or items that have become \l {Item::}{visible}
- \o \c move - the transition to apply to items that have moved within the positioner, including
+ \li \c move - the transition to apply to items that have moved within the positioner, including
when they are displaced due to the addition or removal of other items, or when items are otherwise
rearranged within the positioner, or when items are repositioned due to the resizing of other
items in the positioner
@@ -612,17 +612,17 @@ QQuickViewTransitionAttached::QQuickViewTransitionAttached(QObject *parent)
which the transition is applied:
\list
- \o ViewTransition.item - the item that is under transition
- \o ViewTransition.index - the index of this item
- \o ViewTransition.destination - the (x,y) point to which this item is moving for the relevant view operation
+ \li ViewTransition.item - the item that is under transition
+ \li ViewTransition.index - the index of this item
+ \li ViewTransition.destination - the (x,y) point to which this item is moving for the relevant view operation
\endlist
In addition, ViewTransition provides properties specific to the items which are the target
of the operation that triggered the transition:
\list
- \o ViewTransition.targetIndexes - the indexes of the target items
- \o ViewTransition.targetItems - the target items themselves
+ \li ViewTransition.targetIndexes - the indexes of the target items
+ \li ViewTransition.targetItems - the target items themselves
\endlist
(Note that for the \l Row, \l Column, \l Grid and \l Flow positioner elements, the \c move transition only
@@ -679,29 +679,29 @@ QQuickViewTransitionAttached::QQuickViewTransitionAttached(QObject *parent)
\table
\header
- \o Property
- \o Value
- \o Explanation
+ \li Property
+ \li Value
+ \li Explanation
\row
- \o ViewTransition.item
- \o "Item 0" delegate instance
- \o The "Item 0" \l Rectangle object itself
+ \li ViewTransition.item
+ \li "Item 0" delegate instance
+ \li The "Item 0" \l Rectangle object itself
\row
- \o ViewTransition.index
- \o \c int value of 4
- \o The index of "Item 0" within the model following the add operation
+ \li ViewTransition.index
+ \li \c int value of 4
+ \li The index of "Item 0" within the model following the add operation
\row
- \o ViewTransition.destination
- \o \l point value of (0, 120)
- \o The position that "Item 0" is moving to
+ \li ViewTransition.destination
+ \li \l point value of (0, 120)
+ \li The position that "Item 0" is moving to
\row
- \o ViewTransition.targetIndexes
- \o \c int array, just contains the integer "0" (zero)
- \o The index of "Item 4", the new item added to the view
+ \li ViewTransition.targetIndexes
+ \li \c int array, just contains the integer "0" (zero)
+ \li The index of "Item 4", the new item added to the view
\row
- \o ViewTransition.targetItems
- \o object array, just contains the "Item 4" delegate instance
- \o The "Item 4" \l Rectangle object - the new item added to the view
+ \li ViewTransition.targetItems
+ \li object array, just contains the "Item 4" delegate instance
+ \li The "Item 4" \l Rectangle object - the new item added to the view
\endtable
The ViewTransition.targetIndexes and ViewTransition.targetItems lists provide the items and
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index 9db2060d89..6f33545185 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -236,13 +236,22 @@ void QQuickViewSection::setLabelPositioning(int l)
class FxListItemSG : public FxViewItem
{
public:
- FxListItemSG(QQuickItem *i, QQuickListView *v, bool own) : FxViewItem(i, own), view(v) {
+ FxListItemSG(QQuickItem *i, QQuickListView *v, bool own, bool trackGeometry) : FxViewItem(i, own, trackGeometry), view(v) {
attached = static_cast<QQuickListViewAttached*>(qmlAttachedPropertiesObject<QQuickListView>(item));
if (attached)
static_cast<QQuickListViewAttached*>(attached)->setView(view);
+ if (trackGeometry) {
+ QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
+ itemPrivate->addItemChangeListener(QQuickItemViewPrivate::get(view), QQuickItemPrivate::Geometry);
+ }
}
- ~FxListItemSG() {}
+ ~FxListItemSG() {
+ if (trackGeom) {
+ QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
+ itemPrivate->removeItemChangeListener(QQuickItemViewPrivate::get(view), QQuickItemPrivate::Geometry);
+ }
+ }
inline QQuickItem *section() const {
return attached ? static_cast<QQuickListViewAttached*>(attached)->m_sectionItem : 0;
@@ -524,7 +533,9 @@ void QQuickListViewPrivate::clear()
sectionCache[i] = 0;
}
visiblePos = 0;
+ releaseSectionItem(currentSectionItem);
currentSectionItem = 0;
+ releaseSectionItem(nextSectionItem);
nextSectionItem = 0;
lastVisibleSection = QString();
QQuickItemViewPrivate::clear();
@@ -534,7 +545,7 @@ FxViewItem *QQuickListViewPrivate::newViewItem(int modelIndex, QQuickItem *item)
{
Q_Q(QQuickListView);
- FxListItemSG *listItem = new FxListItemSG(item, q, false);
+ FxListItemSG *listItem = new FxListItemSG(item, q, false, false);
listItem->index = modelIndex;
// initialise attached properties
@@ -833,7 +844,7 @@ void QQuickListViewPrivate::createHighlight()
if (currentItem) {
QQuickItem *item = createHighlightItem();
if (item) {
- FxListItemSG *newHighlight = new FxListItemSG(item, q, true);
+ FxListItemSG *newHighlight = new FxListItemSG(item, q, true, true);
if (autoHighlight) {
newHighlight->setSize(static_cast<FxListItemSG*>(currentItem)->itemSize());
@@ -933,6 +944,8 @@ QQuickItem * QQuickListViewPrivate::getSectionItem(const QString &section)
void QQuickListViewPrivate::releaseSectionItem(QQuickItem *item)
{
+ if (!item)
+ return;
int i = 0;
do {
if (!sectionCache[i]) {
@@ -970,7 +983,7 @@ void QQuickListViewPrivate::updateInlineSection(FxListItemSG *listItem)
void QQuickListViewPrivate::updateStickySections()
{
- if (!sectionCriteria || visibleItems.isEmpty()
+ if (!sectionCriteria
|| (!sectionCriteria->labelPositioning() && !currentSectionItem && !nextSectionItem))
return;
@@ -1006,7 +1019,7 @@ void QQuickListViewPrivate::updateStickySections()
}
// Current section header
- if (sectionCriteria->labelPositioning() & QQuickViewSection::CurrentLabelAtStart) {
+ if (sectionCriteria->labelPositioning() & QQuickViewSection::CurrentLabelAtStart && isValid() && visibleItems.count()) {
if (!currentSectionItem) {
currentSectionItem = getSectionItem(currentSection);
} else if (currentStickySection != currentSection) {
@@ -1039,7 +1052,7 @@ void QQuickListViewPrivate::updateStickySections()
}
// Next section footer
- if (sectionCriteria->labelPositioning() & QQuickViewSection::NextLabelAtEnd) {
+ if (sectionCriteria->labelPositioning() & QQuickViewSection::NextLabelAtEnd && isValid() && visibleItems.count()) {
if (!nextSectionItem) {
nextSectionItem = getSectionItem(nextSection);
} else if (nextStickySection != nextSection) {
@@ -1077,7 +1090,7 @@ void QQuickListViewPrivate::updateSections()
QQuickItemViewPrivate::updateSections();
- if (sectionCriteria && !visibleItems.isEmpty()) {
+ if (sectionCriteria && !visibleItems.isEmpty() && isValid()) {
QString prevSection;
if (visibleIndex > 0)
prevSection = sectionAt(visibleIndex-1);
@@ -1234,11 +1247,11 @@ void QQuickListViewPrivate::updateFooter()
Q_Q(QQuickListView);
bool created = false;
if (!footer) {
- QQuickItem *item = createComponentItem(footerComponent, true);
+ QQuickItem *item = createComponentItem(footerComponent);
if (!item)
return;
item->setZ(1);
- footer = new FxListItemSG(item, q, true);
+ footer = new FxListItemSG(item, q, true, true);
created = true;
}
@@ -1265,11 +1278,11 @@ void QQuickListViewPrivate::updateHeader()
Q_Q(QQuickListView);
bool created = false;
if (!header) {
- QQuickItem *item = createComponentItem(headerComponent, true);
+ QQuickItem *item = createComponentItem(headerComponent);
if (!item)
return;
item->setZ(1);
- header = new FxListItemSG(item, q, true);
+ header = new FxListItemSG(item, q, true, true);
created = true;
}
@@ -1848,13 +1861,13 @@ QQuickListView::~QQuickListView()
Valid values for \c highlightRangeMode are:
\list
- \o ListView.ApplyRange - the view attempts to maintain the highlight within the range.
+ \li ListView.ApplyRange - the view attempts to maintain the highlight within the range.
However, the highlight can move outside of the range at the ends of the list or due
to mouse interaction.
- \o ListView.StrictlyEnforceRange - the highlight never moves outside of the range.
+ \li ListView.StrictlyEnforceRange - the highlight never moves outside of the range.
The current item changes if a keyboard or mouse action would cause the highlight to move
outside of the range.
- \o ListView.NoHighlightRange - this is the default value.
+ \li ListView.NoHighlightRange - this is the default value.
\endlist
*/
void QQuickListView::setHighlightFollowsCurrentItem(bool autoHighlight)
@@ -1902,17 +1915,17 @@ void QQuickListView::setSpacing(qreal spacing)
Possible values:
\list
- \o ListView.Horizontal - Items are laid out horizontally
- \o ListView.Vertical (default) - Items are laid out vertically
+ \li ListView.Horizontal - Items are laid out horizontally
+ \li ListView.Vertical (default) - Items are laid out vertically
\endlist
\table
\row
- \o Horizontal orientation:
+ \li Horizontal orientation:
\image ListViewHorizontal.png
\row
- \o Vertical orientation:
+ \li Vertical orientation:
\image listview-highlight.png
\endtable
*/
@@ -1948,8 +1961,8 @@ void QQuickListView::setOrientation(QQuickListView::Orientation orientation)
Possible values:
\list
- \o Qt.LeftToRight (default) - Items will be laid out from left to right.
- \o Qt.RightToLeft - Items will be laid out from right to let.
+ \li Qt.LeftToRight (default) - Items will be laid out from left to right.
+ \li Qt.RightToLeft - Items will be laid out from right to let.
\endlist
\sa ListView::effectiveLayoutDirection
@@ -2020,9 +2033,9 @@ void QQuickListView::setOrientation(QQuickListView::Orientation orientation)
\c section.property. This value can be one of:
\list
- \o ViewSection.FullString (default) - sections are created based on the
+ \li ViewSection.FullString (default) - sections are created based on the
\c section.property value.
- \o ViewSection.FirstCharacter - sections are created based on the first
+ \li ViewSection.FirstCharacter - sections are created based on the first
character of the \c section.property value (for example, 'A', 'B', 'C'
sections, etc. for an address book)
\endlist
@@ -2034,11 +2047,11 @@ void QQuickListView::setOrientation(QQuickListView::Orientation orientation)
the labels are shown inline. This value can be a combination of:
\list
- \o ViewSection.InlineLabels - section labels are shown inline between
+ \li ViewSection.InlineLabels - section labels are shown inline between
the item delegates separating sections (default).
- \o ViewSection.CurrentLabelAtStart - the current section label sticks to the
+ \li ViewSection.CurrentLabelAtStart - the current section label sticks to the
start of the view as it is moved.
- \o ViewSection.NextLabelAtEnd - the next section label (beyond all visible
+ \li ViewSection.NextLabelAtEnd - the next section label (beyond all visible
sections) sticks to the end of the view as it is moved. \note Enabling
\c ViewSection.NextLabelAtEnd requires the view to scan ahead for the next
section, which has performance implications, especially for slower models.
@@ -2174,10 +2187,10 @@ void QQuickListView::setHighlightResizeDuration(int duration)
The possible values are:
\list
- \o ListView.NoSnap (default) - the view stops anywhere within the visible area.
- \o ListView.SnapToItem - the view settles with an item aligned with the start of
+ \li ListView.NoSnap (default) - the view stops anywhere within the visible area.
+ \li ListView.SnapToItem - the view settles with an item aligned with the start of
the view.
- \o ListView.SnapOneItem - the view settles no more than one item away from the first
+ \li ListView.SnapOneItem - the view settles no more than one item away from the first
visible item at the time the mouse button is released. This mode is particularly
useful for moving one page at a time.
\endlist
@@ -2254,9 +2267,9 @@ void QQuickListView::setSnapMode(SnapMode mode)
It is applied to all items that are created when:
\list
- \o The view is first created
- \o The view's \l model changes
- \o The view's \l model is \l {QAbstractItemModel::reset}{reset}, if the model is a QAbstractItemModel subclass
+ \li The view is first created
+ \li The view's \l model changes
+ \li The view's \l model is \l {QAbstractItemModel::reset}{reset}, if the model is a QAbstractItemModel subclass
\endlist
For example, here is a view that specifies such a transition:
@@ -2670,7 +2683,7 @@ void QQuickListView::geometryChanged(const QRectF &newGeometry, const QRectF &ol
if keyNavigationWraps is true and it is currently at the end.
This method has no effect if the \l count is zero.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
void QQuickListView::incrementCurrentIndex()
{
@@ -2690,7 +2703,7 @@ void QQuickListView::incrementCurrentIndex()
if keyNavigationWraps is true and it is currently at the beginning.
This method has no effect if the \l count is zero.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
void QQuickListView::decrementCurrentIndex()
{
@@ -2879,12 +2892,12 @@ void QQuickListViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex
\a mode:
\list
- \o ListView.Beginning - position item at the top (or left for horizontal orientation) of the view.
- \o ListView.Center - position item in the center of the view.
- \o ListView.End - position item at bottom (or right for horizontal orientation) of the view.
- \o ListView.Visible - if any part of the item is visible then take no action, otherwise
+ \li ListView.Beginning - position item at the top (or left for horizontal orientation) of the view.
+ \li ListView.Center - position item in the center of the view.
+ \li ListView.End - position item at bottom (or right for horizontal orientation) of the view.
+ \li ListView.Visible - if any part of the item is visible then take no action, otherwise
bring the item into view.
- \o ListView.Contain - ensure the entire item is visible. If the item is larger than
+ \li ListView.Contain - ensure the entire item is visible. If the item is larger than
the view the item is positioned at the top (or left for horizontal orientation) of the view.
\endlist
@@ -2897,7 +2910,7 @@ void QQuickListViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex
the actual start of the view can vary based on the size of the delegates.
The correct way to bring an item into view is with \c positionViewAtIndex.
- \bold Note: methods should only be called after the Component has completed. To position
+ \b Note: methods should only be called after the Component has completed. To position
the view at startup, this method should be called by Component.onCompleted. For
example, to position the view at the end:
@@ -2917,7 +2930,7 @@ void QQuickListViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex
of the list does not cause all other items to be repositioned, and because
the actual start of the view can vary based on the size of the delegates.
- \bold Note: methods should only be called after the Component has completed. To position
+ \b Note: methods should only be called after the Component has completed. To position
the view at startup, this method should be called by Component.onCompleted. For
example, to position the view at the end on startup:
@@ -2936,7 +2949,7 @@ void QQuickListViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex
If the item is outside the visible area, -1 is returned, regardless of
whether an item will exist at that point when scrolled into view.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
/*!
@@ -2949,7 +2962,7 @@ void QQuickListViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex
If the item is outside the visible area, null is returned, regardless of
whether an item will exist at that point when scrolled into view.
- \bold Note: methods should only be called after the Component has completed.
+ \b Note: methods should only be called after the Component has completed.
*/
QQuickListViewAttached *QQuickListView::qmlAttachedProperties(QObject *obj)
diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp
index bbc51a4d26..59cb37c15d 100644
--- a/src/quick/items/qquickloader.cpp
+++ b/src/quick/items/qquickloader.cpp
@@ -148,10 +148,10 @@ void QQuickLoaderPrivate::initResize()
accordingly to become visible.
\list
- \o If an explicit size is not specified for the Loader, the Loader
+ \li If an explicit size is not specified for the Loader, the Loader
is automatically resized to the size of the loaded item once the
component is loaded.
- \o If the size of the Loader is specified explicitly by setting
+ \li If the size of the Loader is specified explicitly by setting
the width, height or by anchoring, the loaded item will be resized
to the size of the Loader.
\endlist
@@ -162,14 +162,14 @@ void QQuickLoaderPrivate::initResize()
\table
\row
- \o sizeloader.qml
- \o sizeitem.qml
+ \li sizeloader.qml
+ \li sizeitem.qml
\row
- \o \snippet doc/src/snippets/qml/loader/sizeloader.qml 0
- \o \snippet doc/src/snippets/qml/loader/sizeitem.qml 0
+ \li \snippet doc/src/snippets/qml/loader/sizeloader.qml 0
+ \li \snippet doc/src/snippets/qml/loader/sizeitem.qml 0
\row
- \o The red rectangle will be sized to the size of the root item.
- \o The red rectangle will be 50x50, centered in the root item.
+ \li The red rectangle will be sized to the size of the root item.
+ \li The red rectangle will be 50x50, centered in the root item.
\endtable
@@ -182,11 +182,11 @@ void QQuickLoaderPrivate::initResize()
\table
\row
- \o application.qml
- \o MyItem.qml
+ \li application.qml
+ \li MyItem.qml
\row
- \o \snippet doc/src/snippets/qml/loader/connections.qml 0
- \o \snippet doc/src/snippets/qml/loader/MyItem.qml 0
+ \li \snippet doc/src/snippets/qml/loader/connections.qml 0
+ \li \snippet doc/src/snippets/qml/loader/MyItem.qml 0
\endtable
Alternatively, since \c MyItem.qml is loaded within the scope of the
@@ -209,11 +209,11 @@ void QQuickLoaderPrivate::initResize()
\table
\row
- \o application.qml
- \o KeyReader.qml
+ \li application.qml
+ \li KeyReader.qml
\row
- \o \snippet doc/src/snippets/qml/loader/focus.qml 0
- \o \snippet doc/src/snippets/qml/loader/KeyReader.qml 0
+ \li \snippet doc/src/snippets/qml/loader/focus.qml 0
+ \li \snippet doc/src/snippets/qml/loader/KeyReader.qml 0
\endtable
Once \c KeyReader.qml is loaded, it accepts key events and sets
@@ -344,7 +344,8 @@ void QQuickLoader::loadFromSource()
}
if (isComponentComplete()) {
- d->component = new QQmlComponent(qmlEngine(this), d->source, this);
+ QQmlComponent::CompilationMode mode = d->asynchronous ? QQmlComponent::Asynchronous : QQmlComponent::PreferSynchronous;
+ d->component = new QQmlComponent(qmlEngine(this), d->source, mode, this);
d->load();
}
}
@@ -428,7 +429,7 @@ void QQuickLoader::loadFromSourceComponent()
the \a source component will be created with the initial \a properties set.
Setting the initial property values of an instance of a component in this manner
- will \bold{not} trigger any associated \l{Behavior}s.
+ will \b{not} trigger any associated \l{Behavior}s.
Note that the cached \a properties will be cleared if the \l source or \l sourceComponent
is changed after calling this function but prior to setting the loader \l active.
@@ -436,7 +437,7 @@ void QQuickLoader::loadFromSourceComponent()
Example:
\table
\row
- \o
+ \li
\qml
// ExampleComponent.qml
import QtQuick 2.0
@@ -456,7 +457,7 @@ void QQuickLoader::loadFromSourceComponent()
}
}
\endqml
- \o
+ \li
\qml
// example.qml
import QtQuick 2.0
@@ -633,22 +634,22 @@ void QQuickLoaderPrivate::_q_sourceLoaded()
This property holds the status of QML loading. It can be one of:
\list
- \o Loader.Null - the loader is inactive or no QML source has been set
- \o Loader.Ready - the QML source has been loaded
- \o Loader.Loading - the QML source is currently being loaded
- \o Loader.Error - an error occurred while loading the QML source
+ \li Loader.Null - the loader is inactive or no QML source has been set
+ \li Loader.Ready - the QML source has been loaded
+ \li Loader.Loading - the QML source is currently being loaded
+ \li Loader.Error - an error occurred while loading the QML source
\endlist
Use this status to provide an update or respond to the status change in some way.
For example, you could:
\list
- \o Trigger a state change:
+ \li Trigger a state change:
\qml
State { name: 'loaded'; when: loader.status == Loader.Ready }
\endqml
- \o Implement an \c onStatusChanged signal handler:
+ \li Implement an \c onStatusChanged signal handler:
\qml
Loader {
id: loader
@@ -656,7 +657,7 @@ void QQuickLoaderPrivate::_q_sourceLoaded()
}
\endqml
- \o Bind to the status value:
+ \li Bind to the status value:
\qml
Text { text: loader.status == Loader.Ready ? 'Loaded' : 'Not loaded' }
\endqml
@@ -711,7 +712,8 @@ void QQuickLoader::componentComplete()
QQuickItem::componentComplete();
if (active()) {
if (d->loadingFromSource) {
- d->component = new QQmlComponent(qmlEngine(this), d->source, this);
+ QQmlComponent::CompilationMode mode = d->asynchronous ? QQmlComponent::Asynchronous : QQmlComponent::PreferSynchronous;
+ d->component = new QQmlComponent(qmlEngine(this), d->source, mode, this);
}
d->load();
}
@@ -752,6 +754,9 @@ qreal QQuickLoader::progress() const
This property holds whether the component will be instantiated asynchronously.
+When used in conjunction with the \l source property, loading and compilation
+will also be performed in a background thread.
+
Loading asynchronously creates the objects declared by the component
across multiple frames, and reduces the
likelihood of glitches in animation. When loading asynchronously the status
diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp
index efb804bd18..b8555124eb 100644
--- a/src/quick/items/qquickmousearea.cpp
+++ b/src/quick/items/qquickmousearea.cpp
@@ -556,8 +556,8 @@ QQuickMouseArea::~QQuickMouseArea()
If hoverEnabled is true then these properties will be valid when:
\list
- \i no button is pressed, but the mouse is within the MouseArea (containsMouse is true).
- \i a button is pressed and held, even if it has since moved out of the area.
+ \li no button is pressed, but the mouse is within the MouseArea (containsMouse is true).
+ \li a button is pressed and held, even if it has since moved out of the area.
\endlist
The coordinates are relative to the MouseArea.
@@ -671,9 +671,9 @@ void QQuickMouseArea::setPropagateComposedEvents(bool prevent)
It contains a bitwise combination of:
\list
- \o Qt.LeftButton
- \o Qt.RightButton
- \o Qt.MiddleButton
+ \li Qt.LeftButton
+ \li Qt.RightButton
+ \li Qt.MiddleButton
\endlist
The code below displays "right" when the right mouse buttons is pressed:
@@ -1100,9 +1100,9 @@ void QQuickMouseArea::setHovered(bool h)
The available buttons are:
\list
- \o Qt.LeftButton
- \o Qt.RightButton
- \o Qt.MiddleButton
+ \li Qt.LeftButton
+ \li Qt.RightButton
+ \li Qt.MiddleButton
\endlist
To accept more than one button the flags can be combined with the
@@ -1174,10 +1174,10 @@ bool QQuickMouseArea::setPressed(bool p)
\c drag provides a convenient way to make an item draggable.
\list
- \i \c drag.target specifies the id of the item to drag.
- \i \c drag.active specifies if the target item is currently being dragged.
- \i \c drag.axis specifies whether dragging can be done horizontally (\c Drag.XAxis), vertically (\c Drag.YAxis), or both (\c Drag.XandYAxis)
- \i \c drag.minimum and \c drag.maximum limit how far the target can be dragged along the corresponding axes.
+ \li \c drag.target specifies the id of the item to drag.
+ \li \c drag.active specifies if the target item is currently being dragged.
+ \li \c drag.axis specifies whether dragging can be done horizontally (\c Drag.XAxis), vertically (\c Drag.YAxis), or both (\c Drag.XandYAxis)
+ \li \c drag.minimum and \c drag.maximum limit how far the target can be dragged along the corresponding axes.
\endlist
The following example displays a \l Rectangle that can be dragged along the X-axis. The opacity
diff --git a/src/quick/items/qquickmultipointtoucharea.cpp b/src/quick/items/qquickmultipointtoucharea.cpp
index 7dd6ec0589..110cc6ad7a 100644
--- a/src/quick/items/qquickmultipointtoucharea.cpp
+++ b/src/quick/items/qquickmultipointtoucharea.cpp
@@ -108,9 +108,9 @@ void QQuickTouchPoint::setY(qreal y)
These properties hold additional information about the current state of the touch point.
\list
- \i \c pressure is a value in the range of 0.0 to 1.0.
- \i \c velocity is a vector with magnitude reported in pixels per second.
- \i \c area is a rectangle covering the area of the touch point, centered on the current position of the touch point.
+ \li \c pressure is a value in the range of 0.0 to 1.0.
+ \li \c velocity is a vector with magnitude reported in pixels per second.
+ \li \c area is a rectangle covering the area of the touch point, centered on the current position of the touch point.
\endlist
Not all touch devices support velocity. If velocity is not supported, it will be reported
@@ -235,11 +235,11 @@ void QQuickTouchPoint::setSceneY(qreal sceneY)
MultiPointTouchArea can be used in two ways:
\list
- \o setting \c touchPoints to provide touch point objects with properties that can be bound to
- \o using the onTouchUpdated or onTouchPointsPressed, onTouchPointsUpdated and onTouchPointsReleased handlers
+ \li setting \c touchPoints to provide touch point objects with properties that can be bound to
+ \li using the onTouchUpdated or onTouchPointsPressed, onTouchPointsUpdated and onTouchPointsReleased handlers
\endlist
- While a MultiPointTouchArea \i can take exclusive ownership of certain touch points, it is also possible to have
+ While a MultiPointTouchArea \e can take exclusive ownership of certain touch points, it is also possible to have
multiple MultiPointTouchAreas active at the same time, each operating on a different set of touch points.
\sa TouchPoint
diff --git a/src/quick/items/qquickpathview.cpp b/src/quick/items/qquickpathview.cpp
index 0526187531..1fa0a90b28 100644
--- a/src/quick/items/qquickpathview.cpp
+++ b/src/quick/items/qquickpathview.cpp
@@ -466,7 +466,7 @@ void QQuickPathViewPrivate::regenerate()
\snippet doc/src/snippets/qml/pathview/pathview.qml 1
- \bold Note that views do not enable \e clip automatically. If the view
+ \b Note that views do not enable \e clip automatically. If the view
is not clipped by another item or the screen, it will be necessary
to set \e {clip: true} in order to have the out of view items clipped
nicely.
@@ -695,7 +695,7 @@ QQuickItem *QQuickPathView::currentItem() const
Increments the current index.
- \bold Note: methods should only be called after the Component has completed.