From e262ec1ebbb51402fdd8583e51f131ee5f04e3a6 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 3 Apr 2024 16:38:23 +0200 Subject: [PATCH] QmlDesigner: Integrate item library entries from project storage Task-number: QDS-12102 Change-Id: Id6fbfcfb44d3b8c290f5e5d74addf33ef4d9a5e5 Reviewed-by: Thomas Hartmann Reviewed-by: Qt CI Patch Build Bot --- .../itemLibrary/images/ambient-sound-16.png | Bin 0 -> 315 bytes .../itemLibrary/images/ambient-sound-24.png | Bin 0 -> 514 bytes .../images/ambient-sound-24@2x.png | Bin 0 -> 1846 bytes .../images/animated-image-icon.png | Bin 0 -> 298 bytes .../images/animated-image-icon16.png | Bin 0 -> 211 bytes .../images/animated-image-icon@2x.png | Bin 0 -> 342 bytes .../images/animatedsprite-loading.png | Bin 0 -> 118 bytes .../itemLibrary/images/audio-engine-16.png | Bin 0 -> 363 bytes .../itemLibrary/images/audio-engine-24.png | Bin 0 -> 472 bytes .../itemLibrary/images/audio-engine-24@2x.png | Bin 0 -> 803 bytes .../itemLibrary/images/audio-listener-16.png | Bin 0 -> 311 bytes .../itemLibrary/images/audio-listener-24.png | Bin 0 -> 924 bytes .../images/audio-listener-24@2x.png | Bin 0 -> 1691 bytes .../itemLibrary/images/audio-output-16px.png | Bin 0 -> 359 bytes .../itemLibrary/images/audio-output-24px.png | Bin 0 -> 595 bytes .../images/audio-output-24px@2x.png | Bin 0 -> 1129 bytes .../itemLibrary/images/audio-room-16.png | Bin 0 -> 276 bytes .../itemLibrary/images/audio-room-24.png | Bin 0 -> 419 bytes .../itemLibrary/images/audio-room-24@2x.png | Bin 0 -> 878 bytes .../itemLibrary/images/border-image-icon.png | Bin 0 -> 299 bytes .../images/border-image-icon16.png | Bin 0 -> 228 bytes .../images/border-image-icon@2x.png | Bin 0 -> 386 bytes .../itemLibrary/images/busyindicator-icon.png | Bin 0 -> 320 bytes .../images/busyindicator-icon16.png | Bin 0 -> 229 bytes .../images/busyindicator-icon@2x.png | Bin 0 -> 643 bytes .../itemLibrary/images/button-icon.png | Bin 0 -> 162 bytes .../itemLibrary/images/button-icon16.png | Bin 0 -> 145 bytes .../itemLibrary/images/button-icon@2x.png | Bin 0 -> 259 bytes .../itemLibrary/images/checkbox-icon.png | Bin 0 -> 258 bytes .../itemLibrary/images/checkbox-icon16.png | Bin 0 -> 230 bytes .../itemLibrary/images/checkbox-icon@2x.png | Bin 0 -> 336 bytes .../images/column-positioner-icon-16px.png | Bin 0 -> 113 bytes .../images/column-positioner-icon.png | Bin 0 -> 118 bytes .../images/column-positioner-icon@2x.png | Bin 0 -> 121 bytes .../itemLibrary/images/combobox-icon.png | Bin 0 -> 156 bytes .../itemLibrary/images/combobox-icon16.png | Bin 0 -> 155 bytes .../itemLibrary/images/combobox-icon@2x.png | Bin 0 -> 185 bytes .../itemLibrary/images/component-icon.png | Bin 0 -> 626 bytes .../itemLibrary/images/component-icon16.png | Bin 0 -> 438 bytes .../itemLibrary/images/component-icon@2x.png | Bin 0 -> 1107 bytes .../itemLibrary/images/control-icon.png | Bin 0 -> 293 bytes .../itemLibrary/images/control-icon16.png | Bin 0 -> 229 bytes .../itemLibrary/images/control-icon@2x.png | Bin 0 -> 509 bytes .../itemLibrary/images/default-icon.png | Bin 0 -> 813 bytes .../itemLibrary/images/default3d.png | Bin 0 -> 375 bytes .../itemLibrary/images/default3d16.png | Bin 0 -> 253 bytes .../itemLibrary/images/default3d@2x.png | Bin 0 -> 499 bytes .../itemLibrary/images/delaybutton-icon.png | Bin 0 -> 189 bytes .../itemLibrary/images/delaybutton-icon16.png | Bin 0 -> 160 bytes .../images/delaybutton-icon@2x.png | Bin 0 -> 286 bytes .../itemLibrary/images/dial-icon.png | Bin 0 -> 267 bytes .../itemLibrary/images/dial-icon16.png | Bin 0 -> 243 bytes .../itemLibrary/images/dial-icon@2x.png | Bin 0 -> 505 bytes .../itemLibrary/images/drop-area-16px.png | Bin 0 -> 205 bytes .../itemLibrary/images/drop-area-24px.png | Bin 0 -> 490 bytes .../itemLibrary/images/drop-area-24px@2x.png | Bin 0 -> 638 bytes .../images/extended-view3d-16px.png | Bin 0 -> 311 bytes .../images/extended-view3d-24px.png | Bin 0 -> 384 bytes .../images/extended-view3d-24px@2x.png | Bin 0 -> 674 bytes .../itemLibrary/images/flickable-icon.png | Bin 0 -> 246 bytes .../itemLibrary/images/flickable-icon16.png | Bin 0 -> 209 bytes .../itemLibrary/images/flickable-icon@2x.png | Bin 0 -> 322 bytes .../itemLibrary/images/flipable-icon.png | Bin 0 -> 678 bytes .../itemLibrary/images/flipable-icon16.png | Bin 0 -> 466 bytes .../images/flow-positioner-icon-16px.png | Bin 0 -> 98 bytes .../images/flow-positioner-icon.png | Bin 0 -> 101 bytes .../images/flow-positioner-icon@2x.png | Bin 0 -> 129 bytes .../itemLibrary/images/focusscope-icon.png | Bin 0 -> 143 bytes .../itemLibrary/images/focusscope-icon16.png | Bin 0 -> 161 bytes .../itemLibrary/images/focusscope-icon@2x.png | Bin 0 -> 182 bytes .../itemLibrary/images/frame-icon.png | Bin 0 -> 121 bytes .../itemLibrary/images/frame-icon16.png | Bin 0 -> 117 bytes .../itemLibrary/images/frame-icon@2x.png | Bin 0 -> 125 bytes .../images/grid-positioner-icon-16px.png | Bin 0 -> 93 bytes .../images/grid-positioner-icon.png | Bin 0 -> 97 bytes .../images/grid-positioner-icon@2x.png | Bin 0 -> 125 bytes .../itemLibrary/images/gridview-icon.png | Bin 0 -> 127 bytes .../itemLibrary/images/gridview-icon16.png | Bin 0 -> 102 bytes .../itemLibrary/images/gridview-icon@2x.png | Bin 0 -> 137 bytes .../itemLibrary/images/groupbox-icon.png | Bin 0 -> 133 bytes .../itemLibrary/images/groupbox-icon16.png | Bin 0 -> 125 bytes .../itemLibrary/images/groupbox-icon@2x.png | Bin 0 -> 136 bytes .../itemLibrary/images/image-icon.png | Bin 0 -> 434 bytes .../itemLibrary/images/image-icon16.png | Bin 0 -> 296 bytes .../itemLibrary/images/image-icon@2x.png | Bin 0 -> 596 bytes .../itemLibrary/images/item-icon.png | Bin 0 -> 148 bytes .../itemLibrary/images/item-icon16.png | Bin 0 -> 135 bytes .../itemLibrary/images/item-icon@2x.png | Bin 0 -> 167 bytes .../itemLibrary/images/itemdelegate-icon.png | Bin 0 -> 127 bytes .../images/itemdelegate-icon16.png | Bin 0 -> 124 bytes .../images/itemdelegate-icon@2x.png | Bin 0 -> 133 bytes .../itemLibrary/images/keyframe-16px.png | Bin 0 -> 190 bytes .../itemLibrary/images/label-icon.png | Bin 0 -> 206 bytes .../itemLibrary/images/label-icon16.png | Bin 0 -> 182 bytes .../itemLibrary/images/label-icon@2x.png | Bin 0 -> 284 bytes .../itemLibrary/images/listview-icon.png | Bin 0 -> 148 bytes .../itemLibrary/images/listview-icon16.png | Bin 0 -> 136 bytes .../itemLibrary/images/listview-icon@2x.png | Bin 0 -> 158 bytes .../itemLibrary/images/loader-icon.png | Bin 0 -> 321 bytes .../itemLibrary/images/loader-icon16.png | Bin 0 -> 222 bytes .../itemLibrary/images/loader-icon@2x.png | Bin 0 -> 483 bytes .../itemLibrary/images/media-player-16px.png | Bin 0 -> 148 bytes .../itemLibrary/images/media-player-24px.png | Bin 0 -> 179 bytes .../images/media-player-24px@2x.png | Bin 0 -> 260 bytes .../itemLibrary/images/mouse-area-icon.png | Bin 0 -> 358 bytes .../itemLibrary/images/mouse-area-icon16.png | Bin 0 -> 263 bytes .../itemLibrary/images/mouse-area-icon@2x.png | Bin 0 -> 755 bytes .../itemLibrary/images/page-icon.png | Bin 0 -> 190 bytes .../itemLibrary/images/page-icon16.png | Bin 0 -> 148 bytes .../itemLibrary/images/page-icon@2x.png | Bin 0 -> 195 bytes .../itemLibrary/images/pageindicator-icon.png | Bin 0 -> 179 bytes .../images/pageindicator-icon16.png | Bin 0 -> 158 bytes .../images/pageindicator-icon@2x.png | Bin 0 -> 207 bytes .../itemLibrary/images/pane-icon.png | Bin 0 -> 93 bytes .../itemLibrary/images/pane-icon16.png | Bin 0 -> 92 bytes .../itemLibrary/images/pane-icon@2x.png | Bin 0 -> 96 bytes .../itemLibrary/images/pathview-icon.png | Bin 0 -> 457 bytes .../itemLibrary/images/pathview-icon16.png | Bin 0 -> 320 bytes .../itemLibrary/images/pathview-icon@2x.png | Bin 0 -> 864 bytes .../itemLibrary/images/progressbar-icon.png | Bin 0 -> 101 bytes .../itemLibrary/images/progressbar-icon16.png | Bin 0 -> 92 bytes .../images/progressbar-icon@2x.png | Bin 0 -> 127 bytes .../itemLibrary/images/radiobutton-icon.png | Bin 0 -> 279 bytes .../itemLibrary/images/radiobutton-icon16.png | Bin 0 -> 218 bytes .../images/radiobutton-icon@2x.png | Bin 0 -> 482 bytes .../itemLibrary/images/rangeslider-icon.png | Bin 0 -> 269 bytes .../itemLibrary/images/rangeslider-icon16.png | Bin 0 -> 231 bytes .../images/rangeslider-icon@2x.png | Bin 0 -> 282 bytes .../itemLibrary/images/rect-icon.png | Bin 0 -> 169 bytes .../itemLibrary/images/rect-icon16.png | Bin 0 -> 135 bytes .../itemLibrary/images/rect-icon@2x.png | Bin 0 -> 237 bytes .../itemLibrary/images/repeater-icon.png | Bin 0 -> 191 bytes .../itemLibrary/images/repeater-icon16.png | Bin 0 -> 187 bytes .../itemLibrary/images/repeater-icon@2x.png | Bin 0 -> 196 bytes .../itemLibrary/images/roundbutton-icon.png | Bin 0 -> 229 bytes .../itemLibrary/images/roundbutton-icon16.png | Bin 0 -> 186 bytes .../images/roundbutton-icon@2x.png | Bin 0 -> 381 bytes .../images/row-positioner-icon-16px.png | Bin 0 -> 115 bytes .../images/row-positioner-icon.png | Bin 0 -> 120 bytes .../images/row-positioner-icon@2x.png | Bin 0 -> 126 bytes .../itemLibrary/images/scrollview-icon.png | Bin 0 -> 110 bytes .../itemLibrary/images/scrollview-icon16.png | Bin 0 -> 116 bytes .../itemLibrary/images/scrollview-icon@2x.png | Bin 0 -> 145 bytes .../itemLibrary/images/slider-icon.png | Bin 0 -> 190 bytes .../itemLibrary/images/slider-icon16.png | Bin 0 -> 156 bytes .../itemLibrary/images/slider-icon@2x.png | Bin 0 -> 227 bytes .../itemLibrary/images/spatial-audio-16.png | Bin 0 -> 319 bytes .../itemLibrary/images/spatial-audio-24.png | Bin 0 -> 664 bytes .../images/spatial-audio-24@2x.png | Bin 0 -> 1536 bytes .../itemLibrary/images/spinbox-icon.png | Bin 0 -> 144 bytes .../itemLibrary/images/spinbox-icon16.png | Bin 0 -> 151 bytes .../itemLibrary/images/spinbox-icon@2x.png | Bin 0 -> 178 bytes .../itemLibrary/images/stackview-icon.png | Bin 0 -> 162 bytes .../itemLibrary/images/stackview-icon16.png | Bin 0 -> 151 bytes .../itemLibrary/images/stackview-icon@2x.png | Bin 0 -> 167 bytes .../itemLibrary/images/swipeview-icon.png | Bin 0 -> 163 bytes .../itemLibrary/images/swipeview-icon16.png | Bin 0 -> 152 bytes .../itemLibrary/images/swipeview-icon@2x.png | Bin 0 -> 184 bytes .../itemLibrary/images/switch-icon.png | Bin 0 -> 205 bytes .../itemLibrary/images/switch-icon16.png | Bin 0 -> 160 bytes .../itemLibrary/images/switch-icon@2x.png | Bin 0 -> 314 bytes .../itemLibrary/images/text-edit-icon.png | Bin 0 -> 150 bytes .../itemLibrary/images/text-edit-icon16.png | Bin 0 -> 169 bytes .../itemLibrary/images/text-edit-icon@2x.png | Bin 0 -> 193 bytes .../itemLibrary/images/text-icon.png | Bin 0 -> 126 bytes .../itemLibrary/images/text-icon16.png | Bin 0 -> 141 bytes .../itemLibrary/images/text-icon@2x.png | Bin 0 -> 156 bytes .../itemLibrary/images/text-input-icon.png | Bin 0 -> 158 bytes .../itemLibrary/images/text-input-icon16.png | Bin 0 -> 140 bytes .../itemLibrary/images/text-input-icon@2x.png | Bin 0 -> 170 bytes .../itemLibrary/images/textarea-icon.png | Bin 0 -> 149 bytes .../itemLibrary/images/textarea-icon16.png | Bin 0 -> 133 bytes .../itemLibrary/images/textarea-icon@2x.png | Bin 0 -> 163 bytes .../itemLibrary/images/textfield-icon.png | Bin 0 -> 154 bytes .../itemLibrary/images/textfield-icon16.png | Bin 0 -> 147 bytes .../itemLibrary/images/textfield-icon@2x.png | Bin 0 -> 172 bytes .../itemLibrary/images/timeline-16px.png | Bin 0 -> 389 bytes .../images/timeline-animation-16px.png | Bin 0 -> 296 bytes .../itemLibrary/images/timer-16px.png | Bin 0 -> 339 bytes .../itemLibrary/images/timer-24px.png | Bin 0 -> 712 bytes .../itemLibrary/images/timer-24px@2x.png | Bin 0 -> 1305 bytes .../itemLibrary/images/toolbar-icon.png | Bin 0 -> 131 bytes .../itemLibrary/images/toolbar-icon16.png | Bin 0 -> 114 bytes .../itemLibrary/images/toolbar-icon@2x.png | Bin 0 -> 140 bytes .../itemLibrary/images/toolbutton-icon.png | Bin 0 -> 141 bytes .../itemLibrary/images/toolbutton-icon16.png | Bin 0 -> 128 bytes .../itemLibrary/images/toolbutton-icon@2x.png | Bin 0 -> 158 bytes .../itemLibrary/images/toolseparator-icon.png | Bin 0 -> 111 bytes .../images/toolseparator-icon16.png | Bin 0 -> 123 bytes .../images/toolseparator-icon@2x.png | Bin 0 -> 131 bytes .../itemLibrary/images/tumbler-icon.png | Bin 0 -> 132 bytes .../itemLibrary/images/tumbler-icon16.png | Bin 0 -> 127 bytes .../itemLibrary/images/tumbler-icon@2x.png | Bin 0 -> 153 bytes .../itemLibrary/images/video-16px.png | Bin 0 -> 216 bytes .../itemLibrary/images/video-24px.png | Bin 0 -> 286 bytes .../itemLibrary/images/video-24px@2x.png | Bin 0 -> 399 bytes .../itemLibrary/images/video-output-16px.png | Bin 0 -> 289 bytes .../itemLibrary/images/video-output-24px.png | Bin 0 -> 387 bytes .../images/video-output-24px@2x.png | Bin 0 -> 610 bytes .../itemLibrary/images/webview-icon.png | Bin 0 -> 804 bytes .../itemLibrary/images/webview-icon16.png | Bin 0 -> 519 bytes .../itemLibrary/multimedia.metainfo | 84 ++ .../qmldesigner/itemLibrary/qml.metainfo | 53 ++ .../itemLibrary/qtquickcontrols2.metainfo | 575 ++++++++++++ .../quick.metainfo | 406 ++------- .../qmldesigner/itemLibrary/quick3d.metainfo | 125 +++ src/libs/languageutils/componentversion.cpp | 63 +- src/libs/languageutils/componentversion.h | 59 +- src/libs/sqlite/sqlitevalue.h | 38 +- src/libs/utils/smallstring.h | 8 + .../itemlibrary/itemlibrarymodel.cpp | 5 +- .../components/itemlibrary/itemlibrarymodel.h | 2 +- .../itemlibrary/itemlibrarywidget.cpp | 4 +- .../designercore/include/projectstorageids.h | 2 + .../projectstorage/projectstorage.h | 123 ++- .../projectstorage/projectstorageinterface.h | 2 + .../projectstorage/projectstoragetypes.h | 7 +- .../projectstorage/projectstorageupdater.cpp | 138 ++- .../projectstorage/projectstorageupdater.h | 24 +- .../projectstorage/typeannotationreader.cpp | 14 +- .../projectstorage/typeannotationreader.h | 4 +- .../qmldesigner/qmldesignerprojectmanager.cpp | 11 +- .../qmldesigner/qtquickplugin/quick.metainfo | 2 - .../tests/matchers/projectstorage-matcher.h | 21 + tests/unit/tests/matchers/unittest-matchers.h | 68 ++ tests/unit/tests/mocks/projectstoragemock.h | 5 + .../tests/printers/gtest-creator-printing.cpp | 5 +- .../designer/qtquickcontrols2.metainfo | 575 ++++++++++++ .../AssetUtils/designer/assetutils.metainfo | 21 + .../Effects/designer/effectlib.metainfo | 401 ++++++++ .../Helpers/designer/helpers.metainfo | 261 ++++++ .../designer/particleeffects.metainfo | 246 +++++ .../Particles3D/designer/particles3d.metainfo | 562 ++++++++++++ .../Physics/designer/physics.metainfo | 261 ++++++ .../qml/QtQuick3D/designer/quick3d.metainfo | 861 ++++++++++++++++++ .../projectstorage/projectstorage-test.cpp | 182 +++- .../projectstorageupdater-test.cpp | 271 ++++-- .../typeannotationreader-test.cpp | 100 +- .../unittests/utils/smallstring-test.cpp | 13 + 239 files changed, 5024 insertions(+), 578 deletions(-) create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/animatedsprite-loading.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-output-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-room-16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/button-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/button-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/button-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/component-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/component-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/component-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/control-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/control-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/control-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/default-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/default3d.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/default3d16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/default3d@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/dial-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/dial-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/dial-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/drop-area-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/frame-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/frame-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/frame-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/image-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/image-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/image-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/item-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/item-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/item-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/keyframe-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/label-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/label-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/label-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/listview-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/listview-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/listview-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/loader-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/loader-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/loader-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/media-player-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/page-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/page-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/page-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pane-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pane-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pane-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/rect-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/rect-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/rect-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/slider-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/slider-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/slider-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/switch-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/switch-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/switch-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/text-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/text-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/text-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/timeline-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/timeline-animation-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/timer-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/timer-24px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/timer-24px@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/video-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/video-24px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/video-24px@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/video-output-16px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/webview-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/webview-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/multimedia.metainfo create mode 100644 share/qtcreator/qmldesigner/itemLibrary/qml.metainfo create mode 100644 share/qtcreator/qmldesigner/itemLibrary/qtquickcontrols2.metainfo rename share/qtcreator/qmldesigner/{propertyEditorQmlSources => itemLibrary}/quick.metainfo (51%) create mode 100644 share/qtcreator/qmldesigner/itemLibrary/quick3d.metainfo create mode 100644 tests/unit/tests/unittests/projectstorage/data/qml/QtQuick/Controls/designer/qtquickcontrols2.metainfo create mode 100644 tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/AssetUtils/designer/assetutils.metainfo create mode 100644 tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Effects/designer/effectlib.metainfo create mode 100644 tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Helpers/designer/helpers.metainfo create mode 100644 tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/ParticleEffects/designer/particleeffects.metainfo create mode 100644 tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Particles3D/designer/particles3d.metainfo create mode 100644 tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Physics/designer/physics.metainfo create mode 100644 tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/designer/quick3d.metainfo diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-16.png b/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-16.png new file mode 100644 index 0000000000000000000000000000000000000000..6b16d8139780f038a1194b25dea1b0cf69f05b19 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+GI_cg?&NG1n3`pB_4BBJ-``@HA%el`A!sW{PjU@#ER{ixTzM zEdpk7xBso_d+&e#^5@D$a`S(4$MlzLuGlqU$Ch`qOH8~DMzzcdz1?+cUhd2P2lk#z zeWU$r;pq<3@8|wZJ+YV7?~8_X|Aeh6hv%d@3st&@9coyVS+DeDuH@D9Tfr?`R;lSX z>V--k{&p|CY=x^tac-ohN>P}yj#U2zwf7enOxonm9i(_M*W9UFd3&Glua(aZ*w4*p zKE3buMosOdch_|Bite}T%PD=nT~jrj@9d25iMeYua}TX#H`lwPnUQti|Nk}Xnbw=@ XJd7`hW!b{Oz`)??>gTe~DWM4fN92yO literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24.png b/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24.png new file mode 100644 index 0000000000000000000000000000000000000000..0549a847587b0870d144cc66a8d7c731de5c26d8 GIT binary patch literal 514 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4i*Lm2CurW#S9FLCp}#pLo80;y&Rpv#~{J> zApf6i(5x-GmeF-ldUqo9rpX9RUh27WY0A=A9^W9N_DL?e<&$qtis_KMn6*|XOHFBI zV&BA;ssHBBJo~Wg*Ik2lx1E!}@23zW3>*;!oBOfUtfQ{L~S|Gi;bTD&VO05-AieW@q-yl z)n+Eli(1b6qA;Re@$9lX@h!K76KC5M*B71(TzJ@fwy9*0zM!DkE90o8Qyz72bkChQ zY2u}{I+qqB|J1_p*3B|(0{3=E7+%q*;I?3`TOJiL7T0)j%qqGIBbQqnTAa`FmF$|`Ca znp!%#din;2M#d(lX66=_R@OGQ_70BDF0O9w9-dy_KE8edfx#i6;SrHh(Xnyy35iL` zDXD4c8JSr*xq0~og~cVM<&{;{HMMmOjZMuhZS5Uh-95d16DCfYJZ0*%8MEiioi~5M zqNOWWtzNTs-TDn1H*Masb^DH8yZ7wfxBtMw!$*#vIC<*y*>mSFT)cGo%GGPvZ``_b z_ul;nkDfez_WZ@mSFhi^efR#u$4{TXeEs(Q$IoBC|NQ+oXK8vc0|RrDr;B5VgyhtN z+|j|T3~UeH=g2%$(Bl-7Sn3fnEkS9*l2*qB%OqxHELBKtaWtE}Xv3$VXAP>U5eGX& zyHZp{;*{2H;>c+>+;;Hh_u^ZY9nze?=6r8mAjC3NVFin$Dud{&TM_5W#8cMq+NMAV#21R$V=T%OT#ARecor=D|B<8vr9wyO-Y`F)y>T7 zUlm3>B{t9ABI|9)GvV)Vmor^6KP+R=P{}@I5dNc#`{mCX&wr_#w3)X{WU_qVitMV? z`F+SadtF+vc;wRNoTb+#nb&;XAYwdCKIg@}4PQ+p!<;^zC{HmwA|x(d`oVBBQ^cL~ z!T~C#AGggHUZ^oEP3*%H27YFb#|07zk5mQi4u(EC@$n4%!rrr%Ws|>!2JAU_pK;AI zjs`I~hHIAv`R5C8&rMa_p}J*SZU9TKk%++EIE7~Cs*czi?oFHD)H2mAy3Fl5=eR7- zl#faU^Vl1b;shUVo?U-j`M_tHmNyIi=Cv*BxwJXrXrgUXegSjMk-BFJ4$GR4emE)p zRDNP%?-Z^EtvZ&JkK!kSerW$GdGBqrka5wu38mk~doS*ibFdC>?2lx+X*TbW&e>(z zbE>2rwoTpkXZfuYw={nE1o2-n6y9X=t;JFBW0ZQOrDVq{)w7((RllV<9yDZ#FH}ys zb^pipgU^k&$z+vHzPr0=!O8#akE=hozgTx6xh*}4U*@5p#%j(v)r-w%F%^3KSD3DJdlY#Y!LqDqUSDc z;pmf-A98%y;O@mb?aRk1E2cGTzg>tH-hTGnzI20d*8C&P8{aNbwU;uA{q@k^v)|D0 zi%BNe@&7EQg(l)0dh&`lZwKAK@KE7qa>v2P*Dd!kmvjA`Wiy-O&i2>U)~T14@?SO; zxL>%@R_^n~H}Z?O*PT{k*yx|0Vk5=mFuQ!}y~S2K4;uaFF4=r@gQX%*Lt188sC=a^ zZ@J*k|4lA8mz;Hrynb5goubn2J68-}C>*aoFY9&82|ZslEx1&_;^&h3A70n|85kHC NJYD@<);T3K0RUmi*W~~J literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..71371f97a356e416da78948871d071ad40e7210c GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NunF)9ab;j&SV1meDoqV% zU|4=NsA+xfq|jR)5S4FBY5pZN1Di+RQ>(Y~44;pc;R7$R#|JP1wd(@NCU-LA(_dVx-P|N;& zoA)Gpo2KHn&`F7cIR|tql`0vmH+Zo5{=6IU{He14g(*L@n!Py>2*-FaT-$dtZvkiM wN@oEUgOz-a0t!2C2}q^#cxj$jTroF(qouTUzPn!l0|Nttr>mdKI;Vst0Ld$Pr2qf` literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..86b80e95ab5a88c7264023cc125b6619f5404496 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdmu-d_r6q7#LRI1+|}TQy3T+ zxJrWjf*BYEB;-8;x=x(`$r}HMfq^01)5S4_BRV9;R{Wi8HNrl zI|3w)5A-~JwmRrw&(Sm5th*GHPD?CO$Wk*ZaFF2SS(9+gi;=BOZ(S(Q>S=}s1}=q` ij=V8T4=@z7FbJ+Q>f|kJEVDNPHb6Mw<&;$TCGe?C0 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad2a9011b2fc9c189901ce2f04a8ae4bebaa618 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-CtiTIuKij4- zFfeeH1o;IsFbc@)xdn8e{}s|=e1d_2;g+Y1V~BQy4PZVF-=$Cd^z=h@Vta+2HuK|3VCnzXXmR$GKlSxjcYxB>%7)M_PSZ_ z22vHGZedo3J$?%Iu>a$)x!-(OR$^K#n|=K2y-Vg@JDkZJ?K$z(VSR(?A{sU_jWbQA z_*k*CCun_5nE1w(r8}jULF{8RuWH1R`xl+Newu2wr S(agZWz~JfX=d#Wzp$P!0c!+fX literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/animatedsprite-loading.png b/share/qtcreator/qmldesigner/itemLibrary/images/animatedsprite-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..ff2bbbd140fc31c4de2eb530414d8153eb0715b4 GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0y~yU}RumU~ph$W?*1AKiT>(0|NtFfKP~P>46Xb|No!p z`u8#e1B14wi(`n#@#G)=3= literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-16.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-16.png new file mode 100644 index 0000000000000000000000000000000000000000..da40bc69a2b481195c875e93421f3c6328353b96 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUyS$&tk+CP$B-`u&%ESrt!n!oAJi3=9km Mp00i_>zopr0MbmYZ2$lO literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ebdf745b73741313790f4ade37be56e22daed9 GIT binary patch literal 472 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8Nm>J*`;>y6l@c;k+6@w4l z{Z=!Vfq}uOB*-tAfq{{UlZ!`0R#{!!z{17V%`YG!DLc2WxwXAx^3(+jS8v$3efOTD zr%qqEeCO%&Hy=L!lXvmcWnf^~6!>P+uRvzKVezRW)HRs3|K;R3Vhv$tP1yb*j5H*xkZ1|Q~E3kahWsBD!RSJrD9XY9imKf3^FO}3T2kb8L%$UE)IRia6HFhmu>vntc`mt kV)TCP{4ZYf-OhjZOO3flzAp4*U|?YIboFyt=akR{0B<+v6951J literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..476df8640fc0cb923855e63c42966a4f5b128eb4 GIT binary patch literal 803 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_z6JP%xH2#>{Qv)d#RvnE z$y}xk3=DxKL4Lsu42(>y>>OO&0)j$fQmUHTdius@cJ>aAt{&cg{sB=j3CU^cxq10T zCFM1B^$l&k{S&7yUA}4C&iw}t9yxXT!o^EBZr#3f_x_WQpTB(j_51I?$RLUL3=E9j zo-U3d9>?EaJ3gt&L4YkG?5K{`vku119hS<^<~;iwpO)=7LoLSU&C$D-zJFumuP#}p zuiqz>|55-5%9+Jtdfc9haUz4cR7TGC&Y0(2Rl5SU8DQ*0&{)i ze~X*wmWnf&~4LvZkxFAfg&1+2Xx0*sokoG&zqJ_&FT zUlz_Gwc(S3=!LeAl1#7Iw3tgh6?a^kmv)&)jNAO4N%zq+D{Zem_@MXn_%2zw>ICnAZ@6pQOoKDUNpZk~M=FGO~JyT}->rUMd>x3=0(tHlY+?mbf-JrQq zbG=-|%b1-rzDP8zt(jn*CewBx&fe=|t;7|k=RD?;-Hp`?kD0qMS8dRB){+kgbH%5agX{NOxNkaU{&~vF%Mx6#x178@gJbrKdgi}9_y1c~iq|mv Y*8bMrQ>V6{fq{X+)78&qol`;+077Jy9RL6T literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-16.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-16.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc583b859afda6c4437913df6bc1d9f8e5980df GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+{PT2i4ABVAy|7W+g^}U- z$M?nM7r&Z`e>_qY#G}^iIOERz1=^`%MiyS0sgsJlrkBLNlc?cup7Q@d&Nhwuwzrae zU+-=H`|A5k^FJM(os7kDx3=aU&wkEOH_QIQ7A6KU+hSYRH9OKDtov@ai_L6~XVbKW zzt=T1vahqsQ0AN^_GZW1X$u?u6RbJ)bbh~_a@ma6ru0OZkc{N7EQYXNo3cZzRU}x= zZMG-uuZ(^c%+0{}(j4#JxUtDp{cfQmw_VR&mglk?=T-{Ue7tLC@P2OK zuakz#-qRRt3I#7ET+`Y+H#K|j6c*Oq&khvIpZUvtKz07!kJlc?{k>hooWA_pxwOJ< S>lqjr7(8A5T-G@yGywpt^M{TA literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24.png new file mode 100644 index 0000000000000000000000000000000000000000..ee181f57cc8f6b3e43e6d4c6bd4f22da63269f59 GIT binary patch literal 924 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8N>ml4A0A#H=KVO_bq|{ zn{`yRVv9h-+UE-Y#O!7DSOlCpjvV@H@GRuOMcKE;84DGzc_dv57w3_Rc-e62=Ig}) ze8;{f2+jGfHtT$}%(@GUC%?&9$JOj;!=B0TwLHv;QB)~!+G_8;GY_~ltcn$#*K@?| zx|<)H$es2X@u548D*Zla@b35r#`#)v4({gPkatkLW`#i8y<+JH>VHK~dmFK91dEF@ z>{C6Z9CbjizO8YoTGL%CiAh0KnzzDz%=vV$cxu+iuBrN{~zSawk*;g@?#p5n*82=4*AsP(ABY+|3IIYg8E|%Tr%0H04Q%d9A{# vb39he%k0^d5QXGtmSs1;)w^>j{$rS-Wm2+qznmij0|SGntDnm{r-UW|Mo{50 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2588277e5315b2ebede19de87ffb9dee62be346b GIT binary patch literal 1691 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxObLIZq4Tp1V`{{R2KVib&q z0QEwkFs^A80|Udck|4ie1_nkZW)@a94o)s^9$r3v0YM=VQE>@LDQOv5Ie7&|WffI5 zbq!4|9bG*GLn9M23o9F2J9`I5XE%2bPaj`D|B#5NnAo`Zgrww@wDhd(oZP&EqT-U$ zvhs?`>YBRxhUS*Gj;@}*2@@wxnL2Iy%vrPN%$>hr;gV%5R<2sTX8p!Zo40P;zGLUE z-Fx;PJaqWT(c>pho;rQz?78z7E?&BPy_W}!KE_CKZYkKZ(Wcu<*1f{ zK5NnvwM?nlDO;v+O}ojey-7o9GSAdgCXZ*`?bQ>C4U=x2S{y5(ax`K3_xo4*)5W)K zF8=Z7TdmE#^Tqq-pZ`8bfBMpHpSypq9C)(l%ljuU``C)6o)vBQdU#S=(_{I%@9j(S zqhh}uxH!?d8mF#Qu5`Y;G?-!TtxTr9yLexO z$Yw{+&%GU$)i5dG6njosKWB}IKC9dL>wR964psAh?77wW=?c4=fhfa{AITN}9<0(1 zd-Kn+U5268ic^4drbCWIf#*jxhM2p@ro?tLHsmi>TkyES{nhy|zn}dvW!Qh7vF9|; zJ%)}~CwV@o%Cr7(6-!tr{a}h;ihI>J4hIWHfsUC6*573)*V<~z9B0jAA-tc_rAh5V zDL=#Bu4~H=_P%Zim15DmzJhZ}@VUpovTsjXd~b2>fvUYptOZ}Z_fC!cFfWX`?(HU) zHB&?~3njSUADYha{&iLMhNwv;XCi)VW&Uu?e)FCa4<>x9H)G!6WN*p1Uv49tu3OxC zW}7wDjNgCWH1fV6;N7gZpel`FL9Bk%{k8L#ecrtF!0yXe8_KPsQaRW8Jy(C#c=lvk zL-MC&&a9q4miz~J%Na~wYfm@baf#t}v3sob-}_Q)80)<+-Hh2+6T_dx?)Pl}0m~(F zIS1dKe51)Mb8W(9xeaUApPhO3_t#R%X$zKhHtn*uES0_X;HQV> z_sT36=Dt)$-|mmkwHi(x*UP$a_)~*!aFmR+mH72D`~EzSu9KR#&0p{3{QmFZ0TDCr a{8zfG5o4(?@5aEuz~JfX=d#Wzp$Py=r;CID literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae703de64697f2f070e14fbf6429bf8aefae9e7 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7^*mi1Lo9lyUf!?mS}1Y+ z!yBM{Kjab=A@$vVwb*V7w~#rUpD2x!%Y{-8&8g_bax(Hk&?JEa;m&!j8g33 zozKhO6?XX7PCx(s^B(`_mHYfxMd;kJw>Xg?E4E+&`ul2Ny25y)dt!^InC8ths@{M6mg?k3GImE`Ahu&^@=I zO*n-mSlxo&XsbK(=$E>~jpp*H z>o>B>M~MCL`m?g#H1)u`_oqu*f=w1^Gj5P(eG(Y5^W0Sl4-K95#x;yxMwb7@mfcNd QU|?YIboFyt=akR{00@nq3jhEB literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px.png new file mode 100644 index 0000000000000000000000000000000000000000..f2133ca716739f83e9fe9284fdec8086317dc87b GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8q&!_5Lp(a?UiI$qEtFyZ zaQ>^;ArV7Qvne*-L6=e#v%EGe}+@nXHSl= zZi^RQ?(u2<0@>2E(Fwud4F^g|IELmS-PS@UiFUe&iR(QM*|$@9pt>@ z>-6KU&N4&2~;Y7m3lf=R*y#hj!1zCAY+h_D)(LGJTRjoTJp^nm5N)*XRkg zE?gM3z4(GllS=PL?pG0=m7y)6%(Eh9)ldCs&uE|e`7fvS#;si|ZY!C84BeLMe=_gN z+Z_?E5v45CKYv@B^W5f0+|65SG=;-t4;tTW-KO!LKZ!H0OgN19MuYp0so&?TDb`Gz z+k1-fvg)4AKRUi{T6uHoF^i^N)mbmUHAFb5RNJT-G@aeio~`<4f8E;d8o#o?VtY^5 zTHHLkrSs&S_xCv_3A~b+uy=E?XzwkvWmKfmad+mshNeP zjjg?dle3Gfn}?^jk6%b=WOQs?LQ+b4c1~V?K~YIrc~y0NLt{((go%?TPn$7w&isXo zmaSZ~cKwEpo3?D-v2*v{{YQ=+KX>uk&D(eHJ$mx=+4C1~-+lW0`#5HKQM2yfnj>J!ov6)Gj`tDobO+5v^h*wNbW?|^5xbyd$w)i z+a#y4V*CD!E~;(QLjpcDSUs6i{r*R18ADb0)x>HC%kL}+3hGLqbg#0^36>A!-j~lT zSFzUo>;ZP=9egn>P2!o3`y9w@+$Os8c%ec*!{!6JZ=IPknJZX*Rz6TKxXN&>K|gBU zwgZ*S9?X_o|I0sUV)S8ttTiKa|0aG7*8~Sv^RF&fo;_4CSp1~Wdds@m2UG;+evdkB zd%!k%S*k!rM`fSeZtG1C~oK^hnr1~e*Wq2 z^<4{+Ek$OuOuVmDB>t|QDZO)-@s|0_3mw=!zdsOM)57@nUcNowQiFt!=66e^7n(kp z`o;67OkQ_KigL`VRYi5Iu1jhpe$BV@cDeD_nVt3jBvtPAJ4fFBQejlp4xIbSx;oK4 z%dx2|Dfi~x2%R<3r}7TB?)|vd`SI+@Y}@SX8M7+93$Gk+4q#wlVDNPHb6Mw<&;$Ud C+eYI6 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-16.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-16.png new file mode 100644 index 0000000000000000000000000000000000000000..98f245d624033cf11b67200ca3fb82a78bf31ea8 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7ZhN{ohFJ8zy=?2{94K(~ zqx`In%p;~8P16i_uzWXAxUrMr;32Pz_gGyxHM)EfpKHCjl=+zJO{hVE?mc0XO2^=v z6}x`!X#X#>!%H(QG)*r(O>^mt*+0L|_;+uC>Ae$YMCUwKQ(`O4=XAf(-(i$EVPma|*C0gIraQ5u zK#;#+0i#{#?HPwy0~%3-nPgl$2L~G<~h^ z?Tk;R`@u(pEI zyxej#loof`cTVP-$itE@N2K%~=-E9^Kf9%QMo-6AvxbBHW(;4} a?tfWQp%HoJ%5???1_n=8KbLh*2~7ZG2e`uk literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bef7f80e3ecabe7e94d2e3681db4bc828eb7540a GIT binary patch literal 878 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F%|9iLh`S0KNir@YG zdv5pEnKLDeu4I|MGr#eUY2CBqU#s>io?!p?zTusz7GvsSp#U=^YVlRRobSx+4a$?g zo&P*$E*may zWXTmyh(2JoX}Oh5O+Q2SVO4vU`$7qUAAFB}+EUE2jm=skQ)x@Q>TIWahWo7X^Hl05 zir6ygzGwf(oX_Ci(9f8ouXOqoL%Ygf(OZ>lcGI0M={(^3t|9F`Ye}J(43nICbRipK zj(&<6v%L4iOtB4(^S^KgYhKAP zi!sF;M_+JN&JvwuqPns_$MmQ1)G2HHUa9^r*r=K+KS4QDa;gcB4QowM!Eu(4G6ljf zCYNZcw#l5Vbhz|>lG((yN{8Nun+JFab;j&SU~|e{{Gc; z1_lO^k|4ie21Zr^c^wCjfRx(0>5ERBfAZnm-~JD~KyGOFba4#P2;MueY$&Js{b0#UBd(Ny zz*7?B7tFvYAny?{`Na7TAAeb0ukv7EU`X(EaSY*zPEKfOG-h{La!#_%SUsKT;4EVf zL2Xtxws5wEM|o!D+?LQ{kx(@r*g&NHqrHM_MI(<) z%fyL_)%_PH8d~yqPc1emdB7mEP+OX3WmC|>;}@Q*oY#`|x+kP*uR34%^ra%^4=>}_ zGMsBkE|&VHpSSIQM}L7~bJpKjTeXTwDtAL~$EvRVcG-X4>BGgBPd*5m6mlWu!-tP` z`kEK2c2qTodz$WT&wk(?l%gSfhrvFGQOvV|TY+_h$2V7Av6E7QI*-Cb9lCzhvUp6) ze11tWQIKCS=!j!t`mHAdJhx=Bn(f*%45r8hF-h?!wp??zb$YMZXE3FBhR}sGif0yF vT^9Z4(Vt4*zO$Jxw9H={hi|>}he>(*=j&4}9T^!I7#KWV{an^LB{Ts5*CnJX literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..666d1ed93f76570004e94223558089ced1e89d8c GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8Nun+JFab;j&SU~|e{{Gc; z1_lO^k|4ie21Yi1Az=|!O#|P|s;Qgy?tAy=?{s64BnAeCIi4<#AsXjfC*5XhR^V}N zKH+*%v*6$V=O5Y-nVB9RBqSzZ`=NV`opZ+c_|`X6D^gV SxiBy=FnGH9xvXzC!Sh;2@y#N ziR-=_?w$GR)zJ9zE+ZS;ymBrco?;;hi5q@K3Jtp%J5ux#cWh@o@}RCep~7KF)P#`p poCygDtXb{S9NU@lG|xyfJiRHy-ZYs-mVtqR!PC{xWt~$(69Cw*S6Bc5 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2278ff899d341822106b980a6c37bf341fbece GIT binary patch literal 643 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_CI|S0xH2#>tQchAU965X z$gL$oe!&ckOl<62+ya798kz>?RyMYFZk}F2!EvcY#g)}HefE(xM9k|8j6CF$r>VO$wXPv$5p3dE$$0OyUfe z%fFQW+oi_x-oz?weNTPp%aGfNPOrX7&ky{Tvu%gzi_tNcf$bC4^qrH=ed=~Iyc?FC6|K8#?G{O? zi7yVi9-DqQ@}&AI*=4g1EWFQ>a=WKQ`Lk=(((~EJUIt9~G;3qs{JihwbCWe#&j)bz zEo?}AT66l8<+Q6a7Jc8ZS>+r&W&2(Kp4eZn75-XE{{8od(P>|7cAdvnP--7#KWV{an^LB{Ts5LX9yg literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/button-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/button-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..5c921deb136718941fab6fd02406e74d40af23a6 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdqsCd_r6q7#LQdf{?klLKqkr zSWANZf*Bag%3n@qK5(0XfkD&L#W92+b1azTy7EXa8KqMdBD37}7mm978;gzrC`NuR%e8`9hP1 zmd1tu|0CFi-JN;!zCU}-w3oR@^5pRtsry?dEv|od_@rF=j^lTa#qDNpI8w)Xz~^Yw zO0UMQsZugo3sx~kJ?KxLYVWtMEyix=y8Nunh1Cab;j&SV0zW+J3B- zfq_A&B*-tAftgKI#>v+&EN$uPOA=!OCV14Ejpi(`n!`Lh>2g&GuiTrM8F z*}-$~|As6kMee(YKke62Xn38zP}?K=M~g`^5AUOSTb)}J{USD(@uW8{Z(dpwzuihE zB4_&Aj?|5NW%QD&_vVSdwQBcxoqHhM$9(eS&3ElMf9BPFU~7G>lQUqyM?PFkI@bh$W43U_+wBK9ofC2~e;BDLE-PL?midyPX3=9kmp00i_>zopr0A-_KhyVZp literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..51c5601de02228eb480bf24d3c72cbc1c2756ef7 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_%mREuTp1V`R*(*k?Ao!8 zfq_A=B*-tAflE|c#wjeiaNqt*mv7$r_P6{Z?AX?H5>4_1UkA2 zv7h*>KU?t5q}{6vwi&+uzlz6WTlLdqUXu^T9>-U5ExE@R%v$lS?a;O_8UkmY2Yyjt zIHP{Mf6@6v8@4Mf*#1xK!0zvdzG}+6yuEnAU#4qz-1qb!+=>)f6yI;cvhdfROK~UU z?6kY)zWI23;e@@?ylP4B+t-V@$}cnR+SLE}E$hqfT8D$biW)a9u)Vp%^~1ciFWfuk uz5C+5VqQFxvwC%5c1+OjcmL&V815Wt4A!dsben;Jfx*+&&t;ucLK6V8t<7UsY9gaR2_( z&+Zp8FfcHd1o;IsI6S+N#=yWJ=IP=X!XcadBQze_%ku=NahxtU!(Mg Qfq{X+)78&qol`;+0N&an@&Et; literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd116d13cd2efa5c1c62a6f4d982b052304ff9b GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|I0Jk_T>t<7UsY9gaR2_( z&+Zp8FfcHd1o;IsI6S+N#=yWJ?djqe!V#UE(7?1dbafbm=G6-qI38*2%4A?>m?@=~#GEr{=|Tqq(+rEnd`ss$d$KZ^ YXXH$&oauIffq{X+)78&qol`;+0AK!OJnPB5@ODSGfM=|sR8$3l%wwhTXm6c4|sG>BthU|{fc^>bP0l+XkK2Bv$$z`)??>gTe~DWM4fks&Z3 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5f82390596b1ef5a2e41ef5c366376d1e772ca3e GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-2nG0rxH2#>tbl>lt5#h+ zd$wj%)^7#|2Ii6=zhDLddD}g=s~8v&kqLjfdyV5>E*( zF0SOM2QrU0cu8n#YEFLYC@gN`P`5#va}nc&rw$1@CmPt?R1Fw!3bkb{)MJ@!;IMgi gVMtTfK|Tg6>sb@l?^b4FU|?YIboFyt=akR{0PGt&wg3PC literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/component-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/component-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9c7df42bc7019f9de572461dbe9011eae259c898 GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8EInNuLp(a)PIb%>4isqH z|CZZp!-m|kf7b)Yd_fU5M*&C2 zDN0QbOb@5qibV7AE{%)0JdDng7 z?SkUm+_mQm=LGjXo)Z@pWi`=5#jd}vZ=a;3WaaJKw|C!SnBuxbTWi;pc{O7E# zQF}kFe)ROy&c`=%zB%5gE^rU6R+0$Q5i|Z+ap%Ui+??C@R^?tXn>Ky=_OP&UpPeyg z>t0J8;NI4C+QG@?UDpYp1NS-SFyCvx*kiaXZvE!S`zF4@w;BHTy#M+5@PRcQ6{~Ks z?@8PJyq!rZbnAyo*@n9u?_OI?2)&y4V6lA7{!fSAJ>dEvD#151e`;<9Yhsq&d0Agy z-&#o-nVP)FFjJNd6MfX~ry9-7{#{iNwDOAo1E;M~Z)0L&Y+hTOJDRkyqNt|kkF(X> mI>U+cDz4tW8_V>ATj$_`Z~ilw${83K7(8A5T-G@yGywn)Nh#R? literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/component-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/component-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..99941541c6fbb6416e052edc2b4a272e351cce85 GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Ydu{YLo9mtPBQdnb`)sc zzdOcNo%d$+Q+Ja887)|rL!+6Q5qxNiiW73XLhRY_tSA)IO znSY3F@cW-XG02Z$`IqC?vbqKbzWXW&-_l^-J~3s|$tTHQdKrW|kG$@8+Zm$ed;Rs- u(Bp;MqSl5L7AAh&wIO7}=i<-d^RKG5{k$Lez?Ff4fx*+&&t;ucLK6TeJiWUB literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/component-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/component-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f66349a63b2f3688c2c3c99a226497b3b81dc268 GIT binary patch literal 1107 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_PXzdcxH2#>tN?>wzkaP) zvEs*%AD=&eeg^|9R;+mc{ykWJ#q;OSSFC`N4<9~!^5h9b975i|e;>ktkf%tXOg2;DHq@R$RPzam9)iyTD-2o;?s{D^{#Hbm$O-4VKvjVQ<~K6~b7wXc0v5 zwr$%WB9kUfTCrlqrcImL+S*pESkcqlGiAyY2pdAKUcI`hscFTE71O3oTd`ur1y1F`u;`oI4 z;*w&B6hy?FTWC821H+_}AirP+MrLL=oUa5K7#LT0x;Tb-biTbB8h+S7g6+YBcYKH2Zx=`yKxsx0}%KqGik;{#)s1LX_agiU3bmoT(h z9k5`_xb`XYS!0;S1N%O~-|@$_x9wP|q$}aC8{CsS?ZrFK-j;EVWnh9@BN;tA+zg^|C)$8@j@*}w{e%@^GG(L0ln%XM6JMre5 zbh4K?{L7xg&~S0S+}pLaVTbPoC^)^$=1n_ep{>KmerWOvcaBSi2@@N5naTt@B&1?qoivs2T|UI*E{$xS(+x-W~P@nc(vf5{QPhC=T=nH8QT&(q}NSZA@EIh=0Ez`(%Z M>FVdQ&MBb@04PL6&;S4c literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/control-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/control-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fd9e4e8ff3fd207c48a0a30c3e3029511627f006 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NFbnVrab;j&SV1~CvTMgW z1_lPfk|4ie27V1q^T4$9rk2fzPrm>7?FZ*-*3%3O485K%jv*QoTZ7*6wHRL!1`Ivsb%l2;9@Rd(Ny zz*7?B7tFwC=9f8Z!P1lWfBlUPy0@Kyfg#b;#W93KHaQ_7VD46<4n~e6=jTKfFPqTV zxbgX!q}9giED|@)&oL^DD_+*%`25VvImy-MWRf~8w?02J^Ky2d(V56O#m~+duAa=Z x+UFcY<7X`vW?X3U2OmW literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/control-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/control-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..22604d24925ee67a08bd61b1392c907074440f8f GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTR~KSPlzi61H%ehf`h6vB^VeO z(7WUgn`8 z@Ox9bVC~NT4f3z1&W(6|SlVXQx;MSqqCbC>JlJlyL~p)6Q)YDG?k8sTlji4?Td#Z& z+@Stz#fjK^p?@S^$I96G${zg`RcW&0kIBxihcoYb+1O>zi_|{%DD>-x@Lx-l&Stx= zS<+m7KKr!lRNwF2n!(prM_s>tYIgG9)kh{ZYUDS`34YoBH|dG{PtDXPS_==IsDBf> z;>L%?3yyu!{>*7~`CyyX!}b0OHt#cdJ_Z?Hl6lgaw2XI8zyqcq(;v7V&TQ>%_GZ?z z+p*^(FH3&l4$cR;Yv0H5(qgx7W+~t$BR@X!)O? atYM~y-PtayykKBpVDNPHb6Mw<&;$TVm;i$S literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/default-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/default-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..564226e949b294850a82250f3b79e26adefa2d45 GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoBuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFrD{waSW-rwI$THN61m6PC!gWBb$+hrDZ|uF{kqy z0^G&nnTy531+{Ydq@}dAC+$A=&8ew1P}y)sjJIBR#EcmUJ*|cpFK09dp3>j~wEhY<~F6zW3GlXICa`PW3YS<1F2O++eO>s-wWAt65)L%WS8gUir){ za+=~)uZf&}H{G6Ryxb9?<76~*ONiFgAQLIktgTTOdnS~c&3-A9JvVuCgwByZH|36_ zNfSI&7TkVo$KC3*U7Sf`V`}8)Vit#)N)tJbJT81uV&(s*u0Ac1<;Km8+b)~3%&|LtP`9>0(I z<#&!F%4M5&Y%CJoWS#%e>jr!ND|^K^We2}rcC7gFPkPR0x%RJ9Ri_#+=9nU5Q}LJ4 zugiU5nZB#ei67PpT?{YQ+I5&i3Pwz{-E?pAE&;LFb}M-W4Zb^N zjz3?_IK0g6T79qLfjtR=VH)1CuO=D@29)bJT#RR%n(Wj*ImLC+R`2u&kNd@R?C)N) zOr1ONK*l7;YqDI2Rgy(!o=)fFkUM>KZMXujdx35llimHjOD*o4y%Tb5{gRtn zlWxB?`>&>4wEnvC(bI3sR!5jh@m@Ca^Y6d>@(J?;H=To9uH~L(t2m3 zcZo~mZ7w9)wZ_^USIc|wZ$kfeqiy2Bp}r4f(K;G zl-thLP5C!2<{p=kQ~!A>;$70#m9JRNJv>qO?}3=y3%gC>FI0B^t)B5jcim%KIn~H3 gxz{=b|2M=t=L8ygIc8NbFfcH9y85}Sb4q9e0OmfV`~Uy| literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/default3d16.png b/share/qtcreator/qmldesigner/itemLibrary/images/default3d16.png new file mode 100644 index 0000000000000000000000000000000000000000..de8906a724d67a95b221c5d11f2d20cd5bd42a0c GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7j(EB_hFJ8zJ-=7$SfRwR zkLQ)yTqBRPh)hmikg}!oU2=l4)RadmG6$yyO^LKMo9tS|RkoBTqOSSh`O};QzTaPe z-e6$d9}zR#i4smn%8e^ShXv=ng7ONQ@eHvUZzPpTORg* zJER;}I46ZE`|jLMz5>~Hi=)EtR=<)Cw>Yeo=N|hx{44XL<(6}kx4hD0U|?YIboFyt I=akR{01ByT?EnA( literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/default3d@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/default3d@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca04a01eaa5a247ee96d385f0ad7b188af6cd71 GIT binary patch literal 499 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANNfyF6VSLn2z=UbW8<2^47f z7~jLyC1C4P#CTLhDT-5!OUYvu2iL6^n*}dAd1#txUiC9r%GjBp?4uo#p)8c6`zCkF zkN%bwDvlPy$s6^HWNtp5w!rMS>F;~z4BkIB-0bb^>w7j{O^MI-NZ+O(&*ZwlEbbJ0 z7UZ>G%fjceQe248iFUig2Hz4TZ*PzgoGjt5xi&-~a=LG7W6U2uzr_=SZq0K&R-kPE zpI`8!iPF51&hJ~-rYk2c(b>LSE~35i%`1x%?!1RGd@e_r>`I>HMkpw;iTajqR{kPz zyg)Wz2E*R z!=cM2IY_S;;oWBa-ah&Kei4g)*E3K5R`a;KEY4b(H~$gioPe0OJxSlbKjK;UAkZt* zbh&?e=Wap6w)tHrcQ!QUG2P8u(0RL}FY?a;>pO>&d)BKin-aC7CphAO_|X}953R$d zUI-VWPwlK9u>$mhXP02$wUYRSW-!e5dHQmq1VbJnsz0Sis3=9kmp00i_>zopr E0N$S0dH?_b literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5a55bd9f77a7ce1712cdcde0b71f75c6d4f8fde8 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@iUB?$t_%zeD^{#HxNqMI zFgSYX(5Yj`z|0jF&YZb;_Uy||&;KwmFmRLv`2{nCPndZ8!slO0>aTY&FfcfKx;TbN zgeNB~&r#=yY9;OXk;vd$@?2>@oHMtlGO literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..cd21394e4659d1a942abe0cc1797bd18fa716ac6 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdr%jd_r6q7#LQpSh08a?iDLm z96oSh#flZ@PMun@V#UR?XD?*`u47SSQ>@sh3O)($FXU|?YI MboFyt=akR{0L!;HKmY&$ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7beee2fab0e2f51609d027e16cc92bbe9ec17487 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_>;rs4Tp1V`R;*aDclT~M zxdH|b?%%&+#fpRb_d^&*4^lx8>&Z7cc*+J-hdgfq|jg)5S5w{~=J2_FU-z_}-{R60G%4*~lg$H`_f^HukE_fT^jp67(O0EUZVB5$MT&mzIbb%= z{T}xn+3&m^4|si>IBYI-arQB(RS5Y!sOS2y`H(z&IJ2I7Onyzn2f^0q2ii>+Yp~v6 Ze9;~ldATi|g@J*A!PC{xWt~$(69CiWfvo@l literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b63e35235dd797157aaca4cd31f9a11de42daa GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@Dgizrt_%zeD+qz<)ead9 z3=G^QL4Lsu(i&+sO`8tC|M7QKve7>V28M1=7sn8Z@YoBALQMf8tq<#GOccGLQxf)I z!WpsIjZWsXBbY9p5b|l__>q5Z!Flz0CHrR@mp_YZcyhz%IS<36$*&%-UArodA*`;5 zfvfi2weYu!nP2&;=NbonWs}~j)c-<**OWc$Fq6B~{+S=ty>+rmk9bHLPH-<-A}H!9 p{mimiX~BQ{yuxpv6hDUQFVUIlYIwqPDgy%pgQu&X%Q~loCIC+(Yvlj{ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8c7c09b05c2887c856770cc47b145793989155 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdq5|d_r6q7#LO%4Gx?sJj1}i zz*iFF7tFvXVdhoSG;8U}OZVUXN?p3cpMilP-P6S}gd^JZ+(urP1O|tP?k-cjmg<%y zP0-F`-@BnhFvlUCtJ6)<@7>vgqw~Apy}rl1sxq6A>nh`-i|3zAo&3`J>b$7a5&TxU zLbj15wJ*=ETXmn^`+%=_K@hu43Zw1C6;)6DzwH0Wyv`)-%;J=VHVh0544$rjF6*2U Fng9_k9UckV>XzJ9m{MnhiKyH)hRUb!=sn?f?ICYhOIzb&AUSp4=e1%%Q^~^Xaclwr4BLL%rlZUNOo! z&t-!%ti!Zj@tWkUOnrLB6$?W=H z$5)^E{(qKz-{;lx$E`n|IDdZHewLl}$A6s4dmMlFZFu>%Ggqi8d0l(Yd#$A-YhJ-!)dgyc8s%R(GBXEOX{?+T#^ABi%B(TSg2BPnFJtyv zZNKHt*$fOaUkxr^PBEU5u}$&}i*gzBX76VU&SsXHF{^KN>+s6hr?B$EJw>*cjIAq{ zs!JvKE>RR%AbPy#T=AI?j>|5eSRC}!R_muhScFmOozqkH>xle5wMpOg_pPn^WxuaK hl%GF2f1iDM;HsVNpMwv6Wnf@n@O1TaS?83{1OSPN@_PUP literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..278690f07f20fc8bd139360ae8ec63b7ccd46c37 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdq5|d_r6q7#LQpTuCHyvufvO zU|`@c3GxeOVCLlIlhn}C);n_P!Rv3k&a8aTz`)?(>Eal|5uKdiH|L8Nm=oX=;>y6lumTONTnQ3@ zlUNxmSFV7d6)QjtkOmlrs7Dir2*S0%)PiV;Af|$qD>pO$v1edlFe(Z13ua(oWaE^O zkX2Ar(a_Q{FtM<5NJuPcXl-lnnJ{g^g2hYLZ`gg{$l3E3Z{2(F;?4UHzy7wmd|J-H zz;N2r#W6(VeCeduLQM(+Zr6>Bb%RYd>%3hQS=n3rzucQ$SpVbSga+e+gfhl87VP4N zS#8oT9ePhTvL=K^^f`7;Wi?FWThStMb^~Lxfan~arbzB=4aBg&KEzrQT@H&iAg2C)Bd3w!b!;G1*wQLAE$jx* dqHjN$&SohnwH8koVPIfj@O1TaS?83{1OUtXR2n1sYhn z5+n!_hmb2)pol;OAtXc!Vgj;8h&WsgL;-|^D1#_~h(Op7#c)}O6kHIj<_F{484L^z zmL)-c!3<2ytn54j0^$KR z=S!TMW7bG6rQ7h784ywYf! zmf7e3@@Ymtg3ewz+3bD(bV}>yM30121`p4`@GWa}v%MyAzmYs}g*DqNv~;4w;y6#s z&AbL%rrAD^zZq~~-3*Ofiv;gm`?;rSK24L%_L#`MiSfV%R%5TF-swII9;DuDT>I+G z%}9r{-}yfXA3VQeq0zA=0!yZ>5&h$AJ3%e+8fSHE|0V;4saUMeJf!|TEcoy zZ*N0@D$|F;J+D_zQYh&<6n&ZD{PRy&XIz=eu*dq=%`@dUUsq-phUbQ6mDDd{`Ct{q z)FJiY>9i$`MLRDaU-E<9V3%OSjJ-*Z?}`6j&i(QAhZ3v&-)Zbi{-tHrXfW4)`&EDO zI=_r;i|IS>@cZ|Fzi<3dze`r&)T`j&Yxk#DEm+|`tx99n@pV-jUib68I?VZ^&wl=g Yk_ks*xu#n%FfcH9y85}Sb4q9e03=aEZU6uP literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..d9027813d0516ac77fa72e7c6f5e78116ccd8132 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7{&~7MhFJ9WUNrP_b`)uS zsQ-!UVn$GgI!D$*1;ZWe(al$L4zup)cyqw4d8)NXs%-N?ClifpP6E=d$qzXmPW1V7 zxKYxg_+4UNs*T)i_ntytYtP>q4@AsePevSM|TY)YJib*9==-9N>>WgH8+4Ug%ayBM{_ zk^5_Bb?vRkG0YjuPF|RkdWvnq^mBV7m&F`NdHOcy0LSVdCt7?Lw|$R)n_|oM`@qIp Q1_lNOPgg&ebxsLQ0ElgbE&u=k literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a0bf65a4652596c8b2c268c59e413d520b5e87 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJo-923#Lp(aSPPO-IaS&;@ z=Mf8=k+HNjL`-VBZIkZP}Dzu~>3T)`7}T+rfB(i$BR;pEhft6S$r7^rv%r2YKt z9d}~F!{2hok_De^(lbK7GVEYVJ0Qc+Ftei~kN<`zYtS{z4cATn$2YEe$1HAoLB`_N zQpM{B`mz@=?8wPJ5Vc@c{(+YP6Hc;Em=)!GF;V^p|A!O>{%5ngPE^+}IxAEYwoB`E zpv%5otCigIvKMUaNHJSrc2M_d_A;eUrYzS))Vq}Gb220aPsTh*)na^LGH;*Z=G6(= zSw;uJt+7kljTyb$RV_3C|VV$O3on67T@C}TIgks!Wk`%(OIxA!f zm*@sEsIYxe7p=I!w&7+oLxkC#__Bk!tj$TkojpUYvWKPZSrjpE_eK_O1r{4)zQ!BR n9HS5V=Dsn#lYQn%^#|@!=SV*-VTEP}1_lOCS3j3^P6-6fu7>FJwvpYS`UmG7VX^KW@tnRW!5vy_t)R@D`B2=>p=3d`ET9|yk$34cq#T_j?x>e0^1b(%1Y@8CDRR4 z*#0O8glFoSD7@7A(DCwTmAYP(r6`ZbE>4@pKT_s1nNRBv^UG!MRBEl|*dnDmYrXve z^Mna=Pq;lORkry2b+$+eLrvj+`!jEJET&-m3y z_hcrxyzAWc>F$|-ZEsYjG%BkloPDDaaJxA4>H*2eniJY(TiLW%SF-udU|{7t^QJ^H zA$6*xMVi#N3upeBvTnPS8p!Q%DebV#)YP z*0RRf@I_kJ@=920O1_#q2(6r-p}ZkGO?mstZY!>hJSFK@nzh>+*UjYJ%pCsS?FBnW z{sR7zbC&lDuQ#187vyjBU(#LraK4l|S2V*Up<|WHS#BItUOD^ZbqA(5vu`FOK53bA z(eA?ZEsnpYeVX=O#H(Q*^M^^hx4WMW&zWobAXiDm=1TmLslF{O?FRV^S#GQr*zbNo zzj(#8Nunh1Cab;j&SV0zW+J3B- zfq_A&B*-tAfsvC-Kvyp~G%LGu=B%sN-v5w3yLc@F14ERji(`n!`MVdRxf%?3TrRF& zwlDhf&HqV%Cj?#0b9k;VbAqMGi(x@ue9NAY8%3?k0SBG51lZp>$g3*OXFQ{4@Ven< yYt5snCtH{7tzUD?yHe`*)1bK9&;LD;SKlEl&A0aY`ECXV1_n=8KbLh*2~7a_y=#{M literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..d7ab9de8a7d76186708ac6459d6c1742d00851b9 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdq5|d_r6q7#LO%4Gx?sJj1}i zz*iFF7tFvfAZTosQ?O?J-TOa(@#ZVLFfcHv^;qEvLDLcwxQuJA2Xk`%-p=YhgGaX^TR6kQ|AwET+Du>U($d_nIWz1fOY~8 z!z9*8#_THGD$kjw=uDXN+A~tY(p-46L(#jonJjB6*jmnd`q}M_-}UK&WByB>=b`eC zZDez;LQc=xoOW6(=l7$aYb;0RRAnDoqj*-1 e_aDn2Oo6u1%@LE;A22X5FnGH9xvXlqjrBuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFnM^oIEGZ*nlsgRb!DK)vH!)K}F%81}XF_|!5Rr)DT=GAp+3;pYiBar>#=w_V?CWv`#zdH%tT^!eBF?X%x* zH9z_OyZ59o{)_ddpJu=QwQ6a2+k6+Lk4ZL%rhIfdn)H!v*4ec60e;IbD?4@A`jzgE z?LPWx{^2MU##Pr}Z*5#)uE#U&v}(cLxO^Kq zc|P{lSH1jFBkMR@VqRpL&Az|$!>*{cY|V^2-j-QQ@T_twIbX)^>ewgVnqwBNA>ySr zSt`g{u0Q2f=|=g_Odi?Yn~pCD2w7WJ$8eB4V#T@pj#vIUBrNdijSAfL+Wf*)?z<1m zcF#WhtZx5u$zNRwYZ{mLdDjFv&D?aXqu*_D-1_ppaf^etyzcN^e)($F){7Z$%B;Vb zH-=nG*?sq2(M|&<*2KSc_EWu%J}x{X-Fxh8+U5wI0^1)o`#e;bthYw-#=a}C;BYzr zvqtZs9asBd4c^8F*;aF(eXex56jYFCG_ygV`>{69BECf_U#tF}7R(jnToAUp^$k-a zLo(0K4xJ4VX0usYV^ZHfe8E;^HP=Gmkoq~1m=deGK`UE4YL03i{gYyJGR0^|ibK2X z!C!v7>J!Rjh00%azCP2+y&-7jlOoGAm)AP!lx9uXpuCUsd4%NlpoIYkBr=Wk9(Dw^ zDZ5GQ{CZlZc*i!mfnkTn^wS~vGrc>1yi;D)C!n~(cLQ6}hJ6|KcVk!O?b%ypBggXR k)Aoh4D$88#SS1)PzFuK)yZEsb0|Nttr>mdKI;Vst0H{7N9{>OV literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..cf252f08b8c45ca10c08ac810c8ccfdf895b8efa GIT binary patch literal 466 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFLBuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFqU|_IEGZ*>IpLJYYGsFdB7bw<;Kht)6B9vrm|nC zV6pB`^7YSu%W2W1b}KsL080{MROAZpj&*hEmAgGI_?B@U`aiR>{@xz-E3ZpEC*Awk zc>C=!%k)JW-+uqy?~%|@zBjIt>Gn3syu$`HC;xdd#C@Ce)T8h56tAU88#PWBEexnw zH%a`#SHI<(ZCnv3vNVS&)ho#`n~gb8gth5Biw9@C z%ujteCJVN(=wtX_QW&MLd_zn4tj8@E1e zwXd2m#|Gg9uUX3y=U#evK5g^cvhIk|*yT}IvqaakIx-y0+n&57G_%{Fx$5)JJ$LhF zFXP;p8hJx@&$r1!Kb6h0Or&_D6yKaEv6Ag|`@uf@PtEn#`EN8T*mf3hmNT+3{N-f7 V+@$hVj)8%J!PC{xWt~$(69B=u$xi?P literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..67be7b474d619e36129382656abe16a435afbb61 GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdMrH;E236Z!B?bltwg8_H*Q%dGajmMVI=Fwoz=iXV z85kI(JY5_^IHHq({Qqyy%ppHPz2{+;%Uh literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fc3deff8499f82eab74fb5da8bcb5412cd84964e GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-CT0c(2CW=H5e5bZ&H$ef*Z=?jS5;M=I&mU% zjkO&E0|R48kY6x^!?PP{3=9lvo-U3d8WWQf6!;9*HZ`-EoV#-2!i5cj2M@}#B?y?^ hv9vhcV8OspW_^42qn@jK85kHCJYD@<);T3K0RW~RD2f08 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0dff9a075d122cbde167c458fd42c74434a5af1f GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|cmjMvTp1V`R=|KUn_xc! z0|RqOkY6wZqrksgPk%EoFz9=_IEHXUCnp?We)IPJ|9{`x4?1OE+cedNM@(UAffwtM p#|@coQN{0`dyNce8sK7#K`FT^vI=qLUL2@ZOko`ApE|GeQzKczRoVdt4iMHdquh uF>B8_DAFL%XguQ}j~la2PyurxGef5n$L`LC%2^By3=E#GelF{r5}E+X{xVts literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ffdea6ebb7756ea2a22ce54f136833645afee6 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUvTuot!Lw6 z5LTTfDIp;dG2up&%B$M`BnKClBkVyX>mxQcH8wVK#YvbZTwz!xalqoiPC5R-G1-(UW2JN#nSr}Fy XTNQR*YnM0!0|SGntDnm{r-UW|Z0R2v literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..47b34f9d14b0c680f2f37ae81e1253f6b5bba34e GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdMrH;E236Z!B?bltwg8_H*Q%dGajmMVI=Fwoz=iXV z85kJEJY5_^IAoLmoIh}Y;}E-2obZv96|4*&bG1C@YVF8kU|?YIboFyt=akR{0J4Z2 Ac>n+a literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4374b60e7a6aeb3cafd0812fbe96745b4ebb7174 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-CT0c(2CW=H5e5bZ&H$ef*Z=?jS5;M=I&mU% zjkO&E0|R48kY6x^!?PP{3=9lPo-U3d8o|j43Va4@o0{27&Rw~1;evsI;T_Axi4E#J c9n1`_HOKxQT=%hxfq{X+)78&qol`;+0PZIyaR2}S literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7457fbd7e19db77934eb430a5080a1efa920fd95 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|cmjMvTp1V`R=|KUn_xc! z0|RqOkY6wZqrksgPk%EoFvxqlIEHY{O#boz;6M5Q^=wKSYZ@xvt`^H!`y|SBT^Ym1 Y7kTuot!Gma z5EMLk;=q9e4r?rgnOhSc@Jdu1u#nmdKI;Vst E0NrF8s{jB1 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..af233a0df3c94d9bded8a3b7249637b1ec8f0749 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-CT0c(2CW=H5e5bZo&cW^R|W=#6)<4TCfLuw zz`$G*mdKI;Vst0LK_DMgRZ+ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5542ecf8bf7ae6b433f2b8cdeaa4529ccb251c5f GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|cmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<462?kjv*Y;$v^)8|If(A#umb*{ez#4$KSb8Va`J)kB*sq dB1fVac=XjIPt^BmF)%PNc)I$ztaD0e0suJ;BX0lz literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf4324819f919c5b24a1063cebfa5643827ddc2 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Ts&PILo9leV>Tuot!HCW zP*Q3VoGv4*c(z&IKuDPF2Ltz%u!Mw!A0BQ0z8f&xxw*L1D1?6R64ln|Zw+K_Yh@Hs bPi0VT6nOjM$oJC>3=9mOu6{1-oD!Ms1=sKkJL|y^{Q=wB>ex g(Tfv`dYc&570r@R{m3Q5z`(%Z>FVdQ&MBb@0Gq2O>i_@% literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/image-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/image-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..318ce0874a5fca9222ab3b7f3d7edaf85f4858ee GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8N=nC)&ab;j&STQ(2;PKPW z3=9mqB|(0{42(?7EIhmdLb9foL5X<&-4mwIn!9Mp^3?~9oH%#>!oAlYK7INA z^WXpbpEL6aNj|EZGj-1F zo(#`9N#2@D)0Q#_uHIg;XS*}^8AdZP3#L6*^$IyNKYiF2U_Wm{jpHQC2WcsJvOa`o97#KWV{an^L HB{Ts5xJAw- literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/image-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/image-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..3aa46b61062c8ee766f3c9b15f6c92fc20e125ec GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU= zz`!6~666=mz{tiWAR@2f;vJDt)7mj}>%L2u?>~F-?)~>)9?n~385kHcJY5_^B*Jsg zNAfi&@VH)FrD4(3#k}Y5`(SAWt&er{ws?AmdKI;Vst04Mu>`v3p{ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/image-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/image-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cc849189756efbb115f8b61890e97c4e644501be GIT binary patch literal 596 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_76tf(xH2#>tQg#2L&1JY z1_lPxk|4ie21X`UHZDE^5ivP=bqy^;TNm%hgtW4n+Paq3wrMjLEMK>N>%PM$E?v2L z`~Jfh@4kNj_51HX2fd%q85kIKJY5_^JdWR;`quA|gMce{2=@!FqfUQyyrwSN8esqK z_x@S-(+bmbW}j(mk$8W9_T)F`W~MMzs9A6oh-GeOU*s^mx#8Z^;=ezugfkmIT>SU) ztrO>+%Oarc$o@28ZXZG(%+h*~Oz?3hD~i8IQd*k3Ep0v@~!N--7*d z-&;*i#lBK&x{OnFInGZ{L`o7l?xM2 tF)r$?;7a7uF6&-!<-fi{XaE<(LRRg5hGkbc7#J8BJYD@<);T3K0RT7XEMNct literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/item-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/item-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..46d3ec1dbc1188ce08dc766c4f522b424bbe41eb GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdCT0c(hNQXTpBNYzcmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<4Cv*0tcALk!1FfcH9y85}Sb4q9e0Q5&FH2?qr literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/item-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/item-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f05aa57c2f5bdfdfdd75c182a9f4e7ef821885a8 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUv;oseviY zV1mlSH7u-J8A5&>+3u=rn^{bSm{ksHDl#@coLaad`~(97%Og*NuXp!-VPIfj@O1Ta JS?83{1ORuTE!qG8 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..822cf3e7b8bd78fbe03c6d022b08cce8c47327ff GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|cmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<4Dy~Xjv*Yf$q)YXv&c*QaB5u8&^VougXebP0l+XkKVHqL_ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ed007a0e3c034fe2176569e378f9e72195fef5 GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdCT0c(hNQXTpBNYzcmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<3^JZBjv*Yf$y@9Xe3*VQsI77C#V0(>{K_-D8zmURJVht6 UOP|}oz`(%Z>FVdQ&MBb@04CBR1ONa4 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb81308ff8d271d4f55f3f8a44174eee3d83969c GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-CT0c(2CW=H5e5bZo&cW^R|W=#6)<4TCfLuw zz`$G*NYeN(2tK6bv1fq@~&)5S4_BU<&uM&1So9%cu79f!&Dx@pD@W;ayE@y>rSQPGj^T;>STmP_#0jm$U3%5&~ a{69Sr#gm)Y++|>3VDNPHb6Mw<&;$SnPDAGa literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/label-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/label-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..788bef078ce768da67697e1d7ebdc1545307ab58 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@x&b~Rt_%zeD~JXM&J>d(Ny zz*7?B7tFvXAR(_4-PL#S`JbucQ?wWu7>qn!978ywlM@u!Hk`9$X5#6&o37Ba#yGuC yLsN5ZqD62Fv!G>iLbDoEIP-N@b9QqE2E~4@eD{ot8yFZE7(8A5T-G@yGywn?hdtT= literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/label-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/label-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7001413d3b01d2cac59688ea17fc628f8c614ff5 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwtzSRJ|V6Q3=Ats0jqW;S~4&& z@RtPn1v4=63CQc{xkY#P9en=l&!c|bR0aly9#0p?5R22v2@($*O8?iJFbJkceV1R& zl6=1YjnKva8@)639@kSW{AVA=xubcX#9>AcriTm8b6js$5#V#0%$z3&f@r7uYzUTcQgw{6c`zveLNSb87AD%z`(%Z>FVdQ&MBb@0Fp0qf&c&j literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5a2f3c203b49bfa894dba155feb7ab821bc2f239 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|cmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<3?`l~jv*Y;$v^)8|1ZzR#umcGHKXwk{|k|_1N>8L4jecj tE+xgaq@q!YMPmiqn*(whonDL#@$!1tyx3#~85kHCJYD@<);T3K0RZ0GDVG2M literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..2657bf218149af0639199a6ebb2496f1aff22309 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdCT0c(hNQXTpBNYzcmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<3>uy;jv*Y;$v^)8XJ%%e!NC0Q|Nn(7LJZ#ayt)YqI}Ri; gs0u^{d|_nxzDInzW{CMw1_lNOPgg&ebxsLQ0NyVqO#lD@ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b1d3fb67d27be02b04ab3a9ad3bac6c0cbff43fb GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUv8NNDlA`ab;j&SV3cu?|uIb z0|SFXNswPK0~0eFpMa=>nx28ZTUcg8W9!5j3pQ*%c>TtMN3Y+1`yCchIER6OA=lHz zF+?NyZl60}gMtX_e9@zE8>ZL)57wF}adcC`%bbRp9~f_Vc6i2uP_xB$xyfq_eUGu`n9zVrq h^sPUnD}P9sJKaz;)Gw)$w zF7fWWtSwp7w4br1?BF-H8OI+htP5Yjw#`9x<{cYHjQ4;TI4Z9h;C+SW;To(m7@RlBJur?LU6z z+KmTKUwrub?fb94@(DQw3=9mLJzX3_JdP(PEZ{OQVP|X%^z7uHG)<+$zh=<_lSL;S zm?jvTho`H!GB>Z{W9O4BG&sOvXBH=;C8@x8$g^dsz|_MY%^MgJ8x}QI7#NvO;9@B3 XnDE-}{YM)H1_lOCS3j3^P6aH! i5#wvg$JVx#;mH$6>t_%ze|NsAAK?wBv zx9?zJVBjeU@(X5QU=g#=$(wWO{fB?`oHI%p7#Q?DT^vIsrX~xxF!8t)ol{`kWa(Ws z!GinBGlfElGv5^oC6WqGD7{Z$>D9*-kfByW(&x$nz7#J8BJYD@<);T3K0RWaI BK{fyY literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..86ae5914acab5d2860d9bf6f9115c757a9923d8a GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_oC178Tp1V`{{R2Kf&$RP zeW;p&fkCt+$S;_IfsIRANy{UoqIvnIJ+~h`{PN@1Z#8$9p9~BPF`h1tAs)xyUUlbd zFyLXmxUk%5@BdKC!#We1HhlN*daK{=B(|Sr`x=IwO`j(zZ0%;bkS`R_+s=I9jF7{2 zF9*vvd=9pIx!+7qxm>iStk6ixtj6kIq3J%xNAu4y*(^TM@c$A|=w}871_n=8KbLh* G2~7Y@?Q(Sh literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fe316caf8d823cabf8265da52d95d802d97bbf85 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJobv<1iLp(aSUfu6?#6jTr z$M>ruI+yA{;Jy(N{hwys7lxM9;rRvka-qsn6C zjT@%lNiEk8RyCgdGlye#Y301f?$c7=ACTUl{jz*fqSuelVp+egHRe7zcxIY2gZ--p zrAZSb9gHrqcsR{sy6C|n(AvUu(1S;y1C_HG4lJA>;U)2nN5&xP$tw%<8R{EY|9Jjlv+GW|{P{q?oxztP?F0ALu+L_Q z^^|?EaZ%YEt`gO`ee0`5zxo>A?qGb^u=!Gf%3g-`qI>6NHmtV#GI#b3eTEq~ISZaH zWj`=$iG0WZ6Rvld;+Otb{J?VM--o7q3(m$w*4go P0|SGntDnm{r-UW|J!G0~ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..bc8725fb5ff92bb7ff015b8cbfb71bb968118e7c GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7&Uv~xhFJ8@y|kC>kb%H~ zkM)0MxXK(oc)XzOqeDqy@fXfJH4NqlFWyz!vE%+T?H?Li9;KW3mI-*@J|dTLBKF;M z?iLkKkLj!Kg_QQG->AS|0hL~z3D24)+C0!-!olHoszKohd&NWn1>5c6S3N@+ z7VympDGd>2$Y46Ib$~77_SItU-ljJ80`^^H_RL{QpW5Ds>&C?D%@@wY9duDGs zz$(#wLb9V_b#U|(#$&R_B|Zm-T-DvM<+k_*!HGA%vzV7{`^doKqH<2|2gAe<0T1K) T7jI=?U|{fc^>bP0l+XkKp6hI+ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04a25e13db34f237ca4f1500cc91cd59ac80499f GIT binary patch literal 755 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_MFM<6Tp1V`{{R2KeH0*t zz}u(SofsGxqDzAOf*BYXnV4DFxcG&HrDf$66qQuf)OGa@Ow2899G#q9+&%n)LZaj1 z(=sx13QH=g>zZ3SI=gzNPM`{db+*Kgmw|M2n4x9>lG z{`&LxpWzFJdkhSW#-1*YAs*gSFFg-CefO_=#}>(jdQbLS$xShvRQeY^YzS5nr*D%N+#LII2)OjKAZ?-i+UtDCkrusLWt+ZxeWM zL!imw1EZg>qQgBAruYtqb3BR}dtx{?=(Elf5n1#=dDbqe4Y}0@vt>{6&JGOdZ2I08 zw*RYqgQ%v)rUP47yY?~4ymo2+obn)I%Fmz$_olLZ3VZx1X!{KhhJXIcGH-+9aVw)uv6!+wRg4nMc7W?*1o@O1TaS?83{1OTTslD+@{ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/page-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/page-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ac87e899124276f452c1709ffeaa4488857a26 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@1_3@Ht_%zedw1{Nzh}>Z zefuEj(Ek004<0;r`0&YN$IhHMaqiTq6)RS(UbX7NnKKv9o|V_U!^XhCz*7?B7tFvT zZxvND@4%gRKmKNZJeSA7z+mX<;usc~x^Oywnlb|e1B0ilpUXO@geCxFy-T?O literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/page-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/page-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6810b6053c29e358e0e7fe7717b695f07c29c8 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdnK1d_r6q7#LQpSh08a?!yNT z96osP=%GU^R;;*q_N?RL)|U(n3~VJqe!&ckOy@3K6|LX5gn@xU)zif>gd;jR!Nc3z zJ2ZiTNkQ3`tXQ#P@9y1) z4;(mh=+MzahgPguaq;X~_jemp7#JAXN`m}?85o()UAn67c}IKX-u>zF%km!>7#J8lUHx3vIVCg!02c~N A)Bpeg literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..edb6b377bbde35765c6982742927d65c2c83c6a9 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@asfUet_%zeD`4R8fdfYl z9XfjG(25l+Ri9KQ*%p4~YM2sJ#EYM(Mm?)?@>kE598v_FagQu&X J%Q~loCID3rGE4vf literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7be0ee813ba27559bd1823f23c4640509aedb4d9 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-NC)_YxH2#>tXQ#P@9y0z zR;)OD;J}eXhmIaPv|`1Ii)YWizU2Lvfq{X&B*-tAfsskz+@-5o>Fj+B3=A=zE{-7< zr;`&B5;WSIjab=I8YZmpIHY=US%dQ;WzOj=U1BMmBDxwvC!zvWCTv~crI6`3^##Wf z)r(3E&WjEUPG^bX-o+Bb-R8pG#=_I%#S_|@q)~pui)UH_JA>lET-jMobw?N&7#KWV L{an^LB{Ts5hRjF> literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..62ebe487ffe431d595456f891f6a75e93f8d821b GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|MrH;EhFd$=?`B|NU<>dGab2-u#l^E{`?K1A vFfcF(dAc};a6~63I52(sUmw7#%*gP2hiWhHWaA131_lOCS3j3^P6KB&) literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..55bb116a699d71b38eaf1c909f9ad6edac4625a2 GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-MrH;EhTJpRM;I6w*aCb)Tvx1Eaq;Zg{;c*N w3=9mSo-U3d65+`S3Q`9D*_)V^Co4%YFg)GA>aO?pRFDD&Pgg&ebxsLQ0B|ZBi~s-t literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc82b8196a6789ce7282ab54d63da193e02a7fc GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoCwRIzhIn*dy}Cbpile}> zkLP98=K5Z7YM!LTwq+wn1V@vT*Tu36S`q?|6B{1PPnhbaBgCQ@cDZA1M*>$gXGDg8 zXo!H|S^j`GJxBK*dirVKy}diVA2RFjK78)Y_qmZ}%Nb|>oIe2ptVe@6G)y6G?e zvwtaK%br`hc5&?a1?#tS7!|X9|6rr!SHAB1RL8V=M`W%U#y;D;_}tW)hj%pH{?W)S z_;K5r?b)41n>(GO%&VA|7sRbLw>h%4<42I_e%1*yoh`aG=Nz!$OI~sIt+rgEqSCb8 ze-ou{)%StiqLC2S6!)NtKPWi>c4p|E_2z}1=TZb4a)c{o?&Lj Qz`(%Z>FVdQ&MBb@0GaX5TL1t6 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a61f61b21f55200878d68cbd48c79836b6feef GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7**#qxLo9mNUe@(K;wWd0mVHeI*yBT7mfZF5^w z@BZJ_!LD{@?#%nP=`$E-R!*H6{ck}d(+!75Ow)I`GoP>M?C77@z%=uiS(rh0l;mO7 zil)UKKVEUI2ui!g^+n*h;Ku9ud;Bg0rI~3dPw{n*Sd-9`Ae$~AXm0X(Yc|jIir0y0 z;*Zxpo6FE@7g=g$tp4%VEdFmVu1w!$r4hTzR0YQ71- amwxxyJx+9$X&(av1B0ilpUXO@geCy{Zi$Wn literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d654a8e7e62d6c015bc1d57c63660cd26792f324 GIT binary patch literal 864 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FYgr+AsLNtZ~Ax0xQZPA zc>Z11ln3jCnuL0l{&fnuw94$!a1jvo|HoJ<=j=DjnUC#Haln-o;pfz;zIY%S~+Qd>bZ>DUu%CXUi&X7El;M%X6sLX2bY?@x4F5`AO1aa$K=b3EQ3p# zC(gXBkW60sl4ahZ&w?L+3nZ^TV#7FLX7op`bNR;e57h1H_@TAkyCCQ5#MMjym%S+|@x!^{-{$D&F&MN4Ed9SfR6E@);ZE>kqhM+PDk#u059V zd62Va?Sniv|Dm5joX_Y?x+V9>0TS3F^<3;gqX zdx?pyoM3<0*UK{+#Ag2Fd6#c|_Q9u)ANx-IxENd>StNJh;I>~S-m|J^P7 zZ1$?Y{1}ImDeil3v%No6Bv`Oz@xFDh4&0h;Vf=rkb=m}%BXedRhsVdYCd|COVfk4TNx|#klDB{Gq&%y#xtliY=($yor9~&qOun)F z1l!gMB_+F+uNE6JrhZue;F{Uz**9X3`zu#3@R55LEOU8#1$+5b-xi)whnZh*Hntnw zyS9b>yW0_;*!hPo;^dE?-LY3EeXFT|a=Oc#x7YtWu%tX&k)#|KGR?Q^$Z@fl%ztsS zkH*=^2-@pEyH^_QGyOr9Yud9*+ZxPQeT)3mt@Qh+lZ(tc*<5ikkqI+j7ntV-=j`~{ z`s@1xiF?6IGVXVE*#G`;adKScqq7wPjhC~3%nn)-XMcG44-WR%&-T8$pd0*u&LdAl zv;Dg@YgT$puWOb+{Ykh_=jqP?{atHsJ3nKqXITIEZpV)-jlio5t_xN9Yzopr06dc( AZ2$lO literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..6fede21d8c25587b5fbd68f10760931a80a84e28 GIT binary patch literal 92 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7ls#P>Lo9le6C_vKYO zXm)h?Q|;wARY_@s0KY+g&<5=XcAN|h41X>ce!r*1eQeIuk2@#XEag3V?k@Abq6Bkx c1_lO(xX3CNHuh5!FGhoSp00i_>zopr0FOc^4gdfE literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d38170e22f79cab05291702503bae084452c6857 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@x&b~Rt_%zeD~JXM&J>68|+gA5)u+vy!NJ9e1CU0cmi+X`+Iv68NBS73cob)gz$A4i7*HBxNQ_U rYN^5J`jKhX^MF0QQVJalm>8-uHZ=Ey`7UK(U|{fc^>bP0l+XkK0Bdar literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..07b46a8ab084593f3a78e8694b53ce694d8dbbaf GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdo_nd_r6q7#LO%0@JGw_cjb$l+4X?5M!ZoNU^$ zF}9(x)LeqaAmaVKy*k<7-<{>Tx4T@!p!EH{Lk88~mDt$U-nEttd+(Q!kZ^l1_rV75 ngQADG9_DR{X523FjE7-O3=9mOu6{1-oD!MEamT zaeQvraj`=NJi+2~r||7M`2YV*nHgmgg1b~F-rFpDlrLdo$Xx?{rPDSgp-u7~uLDJn zS^aamzg4}kAgf&dMdId@(K)_9`sVw85)6L#sXKIEg04=zzWoOEpKgI2>~V`uh07oO zb;4%O5$?--clA~*+Ijc=GwmDe%I|fVM=^BB{-5*PsC&_xH|P7-CoycjYrE`w))M#X zFlK|gY0e+klouGZD^G~nx2+*mWrdGTqZo_YDz3Tb%(t%dDSal(w)I`?{qJ1{31P1< ziB9P^#3nUCKx2iSoPuBs|~GS6|~-v(H|9yXE?m*U#8N@DA_^ab;j&Sg~To#j|Hu zU;`^xu7n7~84xZqxpL*o)vH%uJbU&)@~toi1_sfRAirP+0Ree6O#?HlRqHqJ+{l30^vl;^fLyV`3V~9rZ-9Asg1_KU;g;#ey4AMUJKRzqEN6zP0!@0~uDhv*` z7F>;UshFnWHJ|>SlYOhwfvXG*3=E#GelF{r5}E*jbayKN literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..3be4624ddd42a7cf81f6fc446cf4cb3c2701142a GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU666=mz{$nUFCecwWyak33m32Y{^Mr}^Cwe~ zU7jwEArj$Rd(4Fz6c`R9If`&gJ@_AAT99Iv{7&dcYvSqimWQ|8x9mNzs_NjvSqnmw r1Fj0__J+m&VCi1^)zkiOqqy5n7Wapjvga}|Ffe$!`njxgN@xNA1?gaw literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..aee69b3302f3d2e198bf43205bed9593c06cca74 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-Xa)F$xH2#>tiTIau3Wix z?b?fH&u&~}G>d_OfvY6QFPMQ(!)(^l11InQdfVK$l7WF?s;7%%h=qT0f&^IYB{)WB1ZV$1X)?=HLh^ktJFN9m@_n zDl|(rO+NFW?ZFa*C5ntuMFBdlg?wGkfqNPrSw3Q5xU(w2l0SUkM+OE422WQ%mvv4F FO#pUhH@N@+ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..72893106ae9ca6d29b2171d7c243b3c54b87063a GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdCT0c(hNQXTpBNYzcmjMvTp1V`R=|KUn_xc! z0|RqOkY6xE)J<1i=>i4@26ayt#}JO_tiTIuKij4- zFfeeH1o;IsNNYN_uR8VS%danwD(n~-7z#aI978NlCnrd(aZpVb<;o~->gZl~h@nxT z@R^oR=TkNZ&eNe02U6JBj%noxoo1DY2v1~XpTnzgdwM5cv TUY})PU|{fc^>bP0l+XkKm3Tid literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..775a57a38c3c305f559ffbfbb7435a48d6635f00 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdq5|d_r6q7#LO%4Gx?sJj1}i zz*iFF7tCM~&@f}ggJ-WkeE$05-?cw!+6)W~`kpS1Aso@kPhO`b{5ySM(wP%KWsfBM zZcQlYZk9Bc*m>h%&-92Z2bMnQIvLDd%*LSlPD8LL&DxBCfq}u()z4*}Q$iB}$wN^- literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bb541b671122f8150b2a0c22788a4a85cd5a103f GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-$OZU>xH2#>tiTPdr+>W8 zz`(#+666=mFk!>p2hTr!`}6TZ-&+O-1|Lrs#}JFt$q5NFI#~@23?59@2x?-usvyCv z_3!`#qYszCu?tf&3L6=|3rR3*P1N9EJk(}z%;2--OCgJ9mUM-_wyP(&wdc69WiI7s aShcC==fYV(J~A*cFnGH9xvX=8*@T4}20&xD+fi3{kSU zESaXn7{b?OB*Glfqn+l&ja@KN-15fq}u()z4*} HQ$iB}V)9g( literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f3666639ec5310c11dff47949f7863df668792 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdr%jd_r6q7#LRI0FJGqEDQ_` z93?@1!3=z6vzDH`|4Y!X)_QJ&%S*B`76-(-75wLhO3?~jv*e$=S~afJ8Zz? zJoRP8k?8OHvo3d<1;6>N#>n3(ba9s7PD{0CBI(Pmb}hI%ul~a>+lk+|eQL}4&0Lwx z^*+dF^KyA6d7-wob!TdvT{&vS9&A)YRov;vdlwwX$49a9XPmDmpQewg^c z`|x?LdYKrhf{zEE_L>XaSyaIBz>t|;Qf_L2#N)z#evz7#ht7iXyMH7c4{x`hCVcW& bG4sEflmEWjeCam>0|SGntDnm{r-UW|{k^e- literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5be822459c59606c817724d97adc2073935f71 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdCT0c(hNQXTpBNYzI0Jk_T>t<7UsY9gaR2_( z&+Zp8FfcHd1o;IsI6S+N#=yWJ;pyTS!V#UE(9j&}aKOOS)TqaVX$>zQL%}c6*RPKJ Se#gMTz~JfX=d#Wzp$Py3h$FxN literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e654c9183d6e77f3a67d2b2fb4b29c5983a7de GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|I0Jk_T>t<7UsY9gaR2_( z&+Zp8FfcHd1o;IsI6S+N#=yWJ>*?Yc!V#UEpun>wjPW2B+tmvz6Bi0zS-QYYn2jOR YLjLTz&zxr&7#J8lUHx3vIVCg!0KG#c8UO$Q literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..48c99f8c0e05d1e4b21244068048f1ad5b707a37 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-CT0c(2CW=H5e5bZ&H$ef*Z=?jS5;LV+`s?y zv-^b%3=E7VL4Lsu4$p3+F)%PFd%8G=XapxGNSsL!l`&aRIIXQMt*yJ~CEFvxnkIEHXUC;#AQVwczup#IY5U~W6pve4CGYa0p~PX4T(5TkoJi-CcG N!PC{xWt~$(697~oB8>n5 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ca7a368537023c3d2aab9034a7b7d582e63687 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdu#id_r6+D=TYiYL+ftx?;tO zi)YXBlukX$z`&s3>Eal|A)8#l$jr{hrs2$R%wU0;Gh>tHR##Wo)YP;z zH_x9xf6<~vD^{$yc=qg5>u-t-3=AfoE{-7$FpQ*E2s x(ybg?JcW^&&taO26qm=)SEcO5Z literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0a9729bea5b8c361644c46bf9755b9e25aa10b GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@>H$6>t_%zeD^{$yc=qfH zB(QSjN;q%j%9R(-p1qko>mmaK16N6qUoeA!fV{!Zy?ej?68qrufPsO*#?!?yL?S#n zVS#c&=bTpz&nwnMU1dtsV065?D)clhyVZp literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..a08622df89c7e26c95037576756b0438b963784f GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdr%jd_r6q7#LPyfR!s(UOaoY zu>9gY1_lPUk|4ie1}*{ldEeLP<(y<-V9@e(aSY*zPEJtZHQ3e0(IBalnaSs%rK_tO qxpvWF<|7_S%!UtwJi0pB84lm%ytU!k?PLZ91_n=8KbLh*2~7Y4@igNA literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..93842e4cddee2520e82323ed034328f7e29b39f0 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-Xa)F$xH2#>tiTIau3Wix z?b?fH&u&~}G>d_OfvY6QFPMQ(!)(^l11InQdfVK$l7WFC&eO#)#G*GjL4vheWJbxk zf@5lWySO-*43A2#b`UzvYM>Gk-ss5C)*|YXWZ2ds?vlhA^FU8zPSjQ{&skgw#?mJy4)ZXUGbJ#KNayWf1_Q95qRjY0V zUyXZwP_5wpfxPz&bqew4Cx!*j*4#0F&#Z9fso!I%3f4NMx6%e*#k-hv!~JLXo_~Mm`R_gNtLHtRb9?sOxmzc^ zI$LUJeEm_VP4Dpnd$EUX>mJ$cJFYJH@$w$7lxJmg4ov?cB|PI;sgCARx#Qe7TEmqd zZ8lqOf1GXJA^i&e`>sd!%XVAzdalviJtw@ed?U~NNBhpqIgHAi{u4lUF> zG3Wb&HJjQ^D?(~@ybF2vKX&(VJ90L04(sI$vL;h!>L+&ZD&E)8vCy{eI;+uV<~R8f z>KpQJeEed(`OxzUrt_{xLfC7(x%u>y%TMP1D>L19H1f^L4dT)tdKu?7lz#reFM6%& z&D&(@zSY$~Rx>V`$@s5c_8wo(@%$TMiOPNt*?Ur+9hUV}X6Cwco5$;&N8;Q=$GDPb zXicsXTy5nL&L*xX6?if9e|TB0?7ajut(%<-4gY*)_vw#@CL`{dA-(O<7g zo=^DLaCP7PKI>-*f!$YEfACMfdiL%XQ(Kib`{*^Vr~aC`Y0(UA@0!_0#j^MEZsw;x zo2>iZD^cUjOS^N4&T0Q*&T#X7*v$IJW|deDPr6aD47>89CBGhSS2C6lIDc&?*W*|B z?sj%|{MgO-Q$WA$K>o`1vleWs<%>3yCG6?%|EOm6FoFBS1%`rXezSe@2d#IouMZV0 z*%jD`caUA6?oo{hzW$L;98VN0;`Vu3y>yl84Xz$WJ}D{DuFw b{o#*k+A7TBwfPqV0|SGntDnm{r-UW|Mx;QE literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a518cada63b0903703fcba02155c674e2a6b3abd GIT binary patch literal 1536 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F+_gmEe+8gQX`;A4{ zu3dZQ)C!Gup-@={A2vB=H-_fMI*0i!FCrhP6o^b+Q2ut^ zblGD8178=u`)_#PFwWcX&h3G6!sZT>=T|N>mw$Q2w7KVeVnRzt4EM!})y!r0{%?7= zS!t8q`aY4pj~ipJ$!aS7cE0ASdc%r2X3Kr=kgZ{%-WM;kh0f*B+5E2b!TJkZm&z@y zdT{v0FZ%}H9qK#eEtHg&2VJ}8`cPJa-G{a9h>KX4hqK1?b9bDA8`vIP6q%^KWBQLd zU*8|tdu0346Xs0bE>B+D*jT+~4=I)Tz+=EF;rTmSmHT?b{07|vYzebFo_t%CT9_jD zOuCKfJ9BO0?z3*J?`GMyTiP`ozI*cB{Y&N9YZ$IEZEj3- zXkN8%V)x#|pDk13c|=Y0crEfaH*P()^DW0&2DOKC&Tco`781I;Sb(Ww#hp#Z5?7XP ze`Mizs4(xg!``j)8I2o1?Xt3ju?I3|T@%`U^R|>F`6bsspTK+eo(=o? zOzXaEQ3ExmW4DgT3GU3>Uz--Pc-8l33Z;wYY)ad$cJ8FbyNw$+3bOiF9?%z=D10FE zH6M54;#ILHzVm(A@I;OKUfJZrPak61-FJKte~^&$QJ+&)cA>PMI>*t&2byJ1RNU_E zEIePD!SZGMxs5Fo{O`QyOjK6-|6q=fh90whnZjlLgGUb+zm*SMF>kI9$Im(2bCBI02ytjlzZG)LQ`{%zUDlZy6+I>G}nC24W2*K4D027m;{7>pYqXc-ACRK zF~JrmL2Zt($Qx4?KRF+``F+O(qkG3p53#xzJdXVSb#~CE<*y}+EB9=@KG}wKUbeT( z!NjjV9ACG6%i(L5i#+Kyul!Vc?p~qCbEE9~^|mrj(DPqXUB%f>Eh(S|xK z{~oHX|HOFB%vEI0p#v=!6ter-rJO^v8{ePco4UH;>?$ort-Z|BQzX8Byt&b9PV~B` z$0i)y{WGQGBA*y@FZ(lQ#U%%1ub&V7n)*OCCURqhM%{^9D(3S0WqUM^NG?uV()OTh zBZGbVg!$dtqVG;P+Vxq*g#MngN>9h=eeU;=tL#aS=Vd3eyxDdx!#nSQ>fHygrn{b& zUu7lvJyp%0Wmem~14f~9h2>3d|6{SqEL&YDFU(lxejsj6@yo8&SDU@>9#G}a)KGo- zp5tgq-sWq|xBEZ7xA^mcdnZ<d%&|nqQdt5p`w~6ubWoi^*QkO z^}&QWtKa)7Dt_G2#m(2xy#MjK4|5NEOLA9d5#9c4|Ls5Ar@EFLSn#LiG6MqxgQu&X J%Q~loCIGcv+4BGZ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..37277c5e43cc5d1da5c539329739159c9016234b GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|cmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<3L5L+wznlvQ>KXhV@_9GB7YOc)I$ztaD0e0ssj9DnI}L literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f88711dd25f81cc0083234d51cba9f1bbc521e10 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdu#id_r6q7#LO{fn!=iQ49N7@};wdIT;ujj6Gc(LpY+76BL+sI50MEp0s(=q|S+4&6AsinVY*NaWqe6 r?pU~}=|}>Dp-6-P&yF%B1_rU8Tx-ixwf{0OFfe$!`njxgN@xNA(}65T literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b62a3bad512120bcd00c1e7e6aa1c94540de2374 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUv}&lgEaJ3k}{6O7v_GakaC26*{c3K!$-~*3N+1 U($@Fo3=9kmp00i_>zopr08^|qYybcN literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ced34925bbd38f191393cf9f9b4e53a18f010a GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@`~f~8t_%zeE0Dl3Eukm| z1_qXrAirP+MgjTK*}|L*3=DRjE{-7*;mHXJ2?dPItZW7aOoBQr7EWFQeS#g!A2G4= zDe$@IG7Ha?5m!0zU=0hqmcVPphSoe85pjjxybSt$BCRgX=NB?CFfe$!`njxgN@xNA Dp*1Js literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..0f19d0efa3e7202c191d6b4102899c27258e0074 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdCT0c(hNQXTpBNYzcmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<4CbCLjv*Yf$q9e{&u?t}$Yecb!vFvOxtnt`UWl;M1& literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..031cb27c367c05b5853f5229142b77ebbdefcc62 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@`~f~8t_%zeE0Dl3Eukm| z1_qXrAirP+MgjTK*}|L*3=H<3E{-7*;mHMz%<60g4FNkW1Evb}ZJs35^qA$DvW3G` zjy_>#?!T7jytFv@W)&+)^fteN7@};wdIT;ujOgvp2LpY+73mBQy*%TNA&v|tTuto4FF{N5C9$mnrE+!;# rPV2?3xl;wgEVMN>8*|$&nHe0U`OU4(uIex_Ffe$!`njxgN@xNA@!uw@ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ccb978c46996706aa482cba92f28a43da013256 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUv|9C}GZ$aJ@%Wd(gyjhg3=F=WE{-7*;mHXL^a57i;$=HMS3+XO?sDgY ze9UaUcY~D|?onfVpUc#9Q{bFf+pA61jDsMG5EaKejFn7|eExXpdI=0f?*}mr0$7}i%>Ri9NJJhGCP5xiWxV*(` VVynn4c?Jds22WQ%mvv4FO#p!qjFbQX literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..068ebeef0f1f0d63062f063a48ccecc8415cced6 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|cmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<3}&7#jv*W~lM@mWHvIoTpV86qgYkmE|NsBnH!P^T=Fc7& v|7Pw)4Yq1_wn-WbQu#QzR&UkNV`g|8t>`KE#(FaY0|SGntDnm{r-UW|&IB#* literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..b96ed468cbe2ab1f9c20d615d5c32fee9ac274d9 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdu#id_r6q7#LO{fn!=iQ49N7@};wdIT;ujTs>VJLpWw8r!X*yv9n1OBqTH$M#eN8na|9_A*j~I@6d53 zVdwYGhxeHcnpqDyXru)t2nabO9`OBF-p{y3{tN@7+YDod`?f;9*XFEgV_;xl@O1Ta JS?83{1OU)XGA#fA literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7cb6d5da21d3171d560ace8980d253db22b487 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUvX(4$~(u^@=S Y!e3{L5+nB>1_lNOPgg&ebxsLQ0Msxa5C8xG literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..ee7cc512cb01c6470423beca7e94fe0f0bd40646 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdu#id_r6q7#LO{fn!=iQ49N7@};wdIT;ujG(BA$LpY+73mTc&SPpZZ2unD4jDbmk*(LBqLQqkmVGxT^ gghQB>q6EWYcEP?AEuqgD7#J8lUHx3vIVCg!0JS709RL6T literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1df8f765de423fb281f311f311d019c86651ca8f GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUvF>p-{uB(489Ld4SQ0iMPkA x$LoT3lP4#Kf{>fTG^LoPqpYkJygOJJzDGgTe~DWM4f*=;Jt literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..3ceef6d03711e720d60cc938ddaf9af9b0f4e5eb GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdCT0c(hNQXTpBNYzI0Jk_Tp1V`R)E2EnLb$t z1_q{*AirP+fozq#F$@e02A(dCAso@kNeoQOLLCmUr2UQC%jRWZ=9AFSQE24h5XtfA nebP0l+XkK0eK}T literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..666644d2d300b9afbfd8588e64bc13cff6eccf01 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUvzE{-7*Q5V2ILozP_00Im6ct q3R5&U?3i%MP$=P0s#KXc0|S?w-EWsyC7BEi3=E#GelF{r5}E+3Jt_tO literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..4afc1fbab56a1466a0bab865a88d16c252da0a0d GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdu#id_r6q7#LO{fn!=iQ49N7@};wdIT;uj6g^!WLpZJ{7c?@l>F}hhDg-FTy0B*THF4{;ZEoNy^JZMT XSe_|6TK6Rb0|SGntDnm{r-UW|dgdcK literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c32ecc71a9a1d084ad0989bd4def630eaecefe9e GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUv!cjQ zS0;E_D85k%I&{>vk@4=PMAe6DR1O?)Si9j63$qp@LkTnMTj3bBFANL}44$rjF6*2U Fng9>qFs; vlC$&iA}5jKksOi7SgqNQvTDezVq!QgD0c6;PuETc1_lOCS3j3^P6N7@};wdIT;uj^gUf1LpY+76BL+sI50ME?(W_^Y0@OF=E<8U2?sQ_9z5yF nI`^Rti*RA1!Gl|!3=9Hqxh6O09l686z`)??>gTe~DWM4fV)`vK literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e05fd41b9a4b4e4d751171d16b79cf2582a0d016 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-7G?$phNU`BwlFX-@CW#WxH2#>tUv@muZmUOjp&o9LdQT(jeq#;OpmM zwpm~TgLIQGla9-zmhNt*?$Zk<7la8VESkmc$s7Ad=!!Sb;)Vpw}{{LH|> Oz~JfX=d#Wzp$P!dJu$ri literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/timeline-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/timeline-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ecf00031f09ee20882ac301eb663031c71c0e4 GIT binary patch literal 389 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7eLP(pLo9lGFK_gl5-7m> zAm2P9VbN`eCLy7W4a*J$1O<5X9u<+|;+Br`sA$an#>msDds5d#U;%^XngxyF24Zce z92lj1R8}AT=dD*>-?MzynKPE(&-mmyH%T4sd?=SXwPh&i1gEOU`%q8>dg$Z$4(V>D1XU zua~~@3l?wRaQD=w?^2gk^SbWro^q*Vv(;6bxUg4?BQJ-aadqKVzHuUpe?!>3LfN-E zrqY7TBlk8Yp9x*LdD(7>^N+gc@Cbf%&wsf6@6rRIV)lNTwniQ5ku|YgPxSc~#@>9_ zZ_pebdERqpbNi2`jXJe0&NfH0dD6E&wPu=nLdfn)g#JfK?x!3|kCg98?Wy*R>*{#d u(0t~k@tUNKo9fqo7r&QmthDQccx^zkwfvLoZy6XE7(8A5T-G@yGywoYpQ&j8 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/timeline-animation-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/timeline-animation-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..31b8fed6668c63248c1edb37846174ed1895d85e GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUe*XHm?$^HA3=9kvo-U3d65+9a-eN5V z9M0KWdoI6p&wf`Q>|NM6nOC22k^rxdOmw%+#b(oFh4ts{7PCEfa=kX2|CLVhx`dhk z94=gL(AdM^$J%c8BenIM_a=SLqnl0ts`}sl+4nYnxvrX?^m6X@uz0KQ&R<{c`CnLc iztv4F(qq~qwvNXfL2QfvykKBpVDNPHb6Mw<&;$VJje)iR literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/timer-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/timer-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..c675d5a70721541633f825d38b0c44dbbfc19d59 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+N_o0ChG+z*Uf8egS}1Y+ z<9XiH9n7aS*(9I1%d#)s5qV?Dm5DxP-9OtV%?axAWfSqttNUVRSB8D@w2DNQ(f^l0jwIt~YQ={GJ4cgou=IUJ13ef}~Z*V!o3 z5XF_UWBscA8!MHC=UE;Xj(?Dzd`309 uVouN_8E-EJ&qee2*dz}vG(6K&$KaR!(LQ=k61_n=8KbLh*2~7a$?~Gpn literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/timer-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/timer-24px.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9419aaa0c481f9ed10931643f5684bec463f06 GIT binary patch literal 712 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8`aNA7Lp(aSUiDrP8Y*-A z;A?L=wGVsw-DG}C-hkc}7_yvCQ7lkd+xZ%uG#j9n&-dp7$nAm?XJ|jRv zbZRPdbCcV*MIA;Hmgp!?io2D!;o8>X?|0Mh%Y11+99g|~Z{7W`|JU!W%f4X3E5XBd zYvN4tL~Xxy``1F zVYO1ybD#I-zQ)E1#>Y2uX%`qC+bF;LqnVLXon4kgT3;fw+<}@u4gIhGckXbwIlcKt zkFH?h3f>u}Nmq+MYRMg4zJrZhIY~3Guj8o&Z}NcOTVOyW5`R>5u zh|b#un(z8Ljz@9tV)cKdoLXP^{`7-7ox@T#;fc4kK2-EwsxQ z7As|?Z<_Pp`7UO7p4k3rufD{>;yXNZ%r_bsv;VlRm35qHD zPrhcz-M)Lz3-dEC8P}XW!>fGE?9u0keafm`9m~wb6aD!Y@b6<^e!a|?HQ=#!OyBp9 z-u(gLGRMwY{daKrbC>l--)hnIm9I1y^&bhWJ1#wWZtj80ryQ#U_%p9=R{y5O{zY%j zf*ahs_P*d;bF}n_%gL-o?th|VR;T>c+va}6%dPsN+R@kXhkkY)yqo;%SpD)FUs(JO zzTTRD_Jj9j2EoFBkMs3Ec0HOTDcD^grg!9~#o}p6n~Pfib)*VztdCg#{?N>J_bEla znqhwuMXfl!Mb=9_V7((JXwRGd=eqXim^)ohBYKiQith{f_WWnZk2TrvL=OBH{m-Cv X;kNHBohUU11_lOCS3j3^P6{Qv)d#V8mw zA+XwD#wG>^hSriGzhDLiMkZz!RyIy9ZhiqFQE>@LDQP)*1w|!g6;*W&9X)*mLnBi& zb4x30XID3O4=>-4h{&jz*tn#WwDgR;{KBHripqwjj?SLG36rMJm^pjif`yBgu3Ecp z!=`Q9ckJDF;NYRdM~n;L@5qQwKmQU#Yf zI9};`ld%8)c77ApSfQE^7XFszpDlNm`@QS2k?Zek`mKDahPwqHI6jH#z2wln)hTpNEriuu6yVrt3X&kqBubAG>Kz4xTSZ$Z4#yuWJl zE976CVOlC}koV%qX`jEF8w~lRmzEhY+5fr3(AxONKH&&k)9(vptgRzuirjS2eyDo6(r2`Eb(w39}N9F&!3|=oWLJL!>d0yCpGj*JGx49^C@l z928i?Q>@-=CcffY!Zh=KwNTrV4aywe&IXkw@`pAAt0mu3tiKg-ldq+}prL1nt8dDf`%Nw3%%NYEE9-3a>-WZ4?dRL<78bv211INx zku$c(O9DQrCwzADd%l}}O^eFn(xcP%UCQ!UDEc5S&bW?AMOt;{cDCt!4b4jrMlV}( zOy$E8hu!sD0^A;x{N{1bwbu0HI>IndOh)5u^nr5@Ti;#_;eW#reU?vo^{dMdd%Cv7 zXn&s?pWP|rx4}QO&-h%;58d@^?#s=}Oa2~mJSOZ{%<+}U?A5OBId+u?9E>FfcH9y85}Sb4q9e0P)GAEdT%j literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb5b2e1af1bd7122ccb300ddb41aaad305a53cd GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoygXeTLp(Z@6C_v{Hv}En zk#w}{|CTKcozvPbA7v6V*~i4peAr#%x2@@~ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fd9e6ceebccdd430910b93bb78c2d7a0c427fe42 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-CT0c(2CW=H5e5bZo&cW^R|W=#6)<4TCfLuw zz`$G*k&;S4c literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3298f6951907969aa9cd16392f8f6e6b7cfac28f GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@`~f~8t_%zeD`4Q_*|R$$ zyf-i~Fff+{`2{lw$lLC@UB$q_pylb}7$Om#oUlO4z>VpLgtbl>lt5#h+ zd$wj%)^7#|2Ii6=zhDLddD}g=s~8vTbe=n5^tVE5;CkV%nWH$Q_N;YdOu)bU|{fc^>bP0l+XkK D(*`dd literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5e99f06f2eff39c0532c1b2075134f2232271d72 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|MrH;EhFd$=?`B|NU<>dGab;j&Sg~Tonfohr z7#J8BOM?7@862M7NMm4N5chO(4B?1QPH%r;RAXRZVDNPHb6Mw<&;$UA$s!N{ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..98eb8232a268efdc2df72a346f17c181f0bb157e GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|CT0c(hPjegvl$o|cmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<3@V;3jv*Y;$q5QlfBq-`KmO02EmgAFRbb{X$>jgXjpTOA cTx4MQ!(&{Z_pVNqfq{X+)78&qol`;+0DPw=y#N3J literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5f95cf327e4213256393bdb3d2afef20afb85f GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdCT0c(hNQXTpBNYzcmjMvTp1V`R=|KUn_xc! z0|RqOkY6x^fV}OV+f@t<4Dy~Xjv*Y;$q5IT{>}gYN8W3W_P_oke=Gleu2InwV_@ih XAS<=LY1Ju_!Ry;B#2M@VnYe*Zd8!4Au!37%Ui*J*#gECouXnzZJ4b&)dV~cHqs-@4GzR z($2hYy&wPZbpvm~8s>ElQ#m6(?Kot0R#o|HqvHFsA&l&vw?j6>dhKfYU%$-SHC!`$ UW9FV-1_lNOPgg&ebxsLQ0J)`A*Z=?k literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-24px.png new file mode 100644 index 0000000000000000000000000000000000000000..df1b84e5c99654bc885875e39a7db24db89f20b0 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoo_e}ChIn+oy}HoL#ZjdF zaUTMeiw<@guf*YG-ZN3QK>DBb;=+M4q4;Wsz?Y=0jr~GKq q^^T76IjL#v+yQ6zop~up{WcE3=E#GelF{r5}E*sDSRFP literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-24px@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-24px@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9f31faf390bcf63565bd4405cf088cd9c26c70 GIT binary patch literal 399 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_8UuVnTp1V`{{R2KV&H&& zMK&h`1A|sckY6wZ0}BVAps1LHl(ek2jh$y|c0pn3#7UE<&D_4@>Vt=mpFDs4_TBpr zfBycP8pD5yfq`MNr;B5V$MLsQJ^7m)B%HOm@*cEVE9kAb@&7-wt%sAr#D(gfGs=HY z+LxmDc7ZyR_7-Obx7kmQ%Fo%BTqArZ!re@Jar4nrM^%z-zh?@TPYeIlA?qt+_p{Px zl4a210!9XVExijq^7sCEI!dgQe|phn#hzWA4%!h9;}1oOKCugtRxgi=<1L)7RQS^= i{C?Q))KZrU=A+`5reqtLeqdl=VDNPHb6Mw<&;$SyR=YU> literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-output-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-output-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..f00afc52e97f09e6d4991e73c286c72b4d83cb95 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7UU<4VhFJ7oy=>^k;waGi zFn^k0t8J@7hr+xAK0Q97yZRFrt=!nDAhBkm`HQ#@T+7m)P;wlDn_ z-l1soNW?t0Vbe>4r#Ai0Ic1%*%`}3~vG2$dyf4lEm-$1?>)$sH=bS#!qMDrj;o{+Q tEKAnv8FVP#IVP}eL)YI&|Ld3evujyz=kgPp%fP_E;OXk;vd$@?2>=Z4d#V5c literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px.png new file mode 100644 index 0000000000000000000000000000000000000000..fd3c89c08177c783140aa57f295011e9b1be878f GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoy*ynULp(a)Ufq}#;waMo z@qVm0^Fb#jE+v()rq;X1+%COl)<{=SWYN)aHCW=Kwed42%jG+f9@MhfM?3-!KzHG&+Q>n{}SANNMoLo}8zg~R)hdoO_uvk~j zRr)tae~RV(gEd_@-aay(7yG1uL+0UC0h{jfh~qgkix(Vn{J_}}8K z(s!kP={GJnbs8kqCSeGZd$EWg!e^qfimBO`b2gJ9OwbG9`{E^m7f_$taI{Mnw~c-{y9 zeIy$Aj@5GXZ@l!R{Qv)d`HB_8 z5?SYn&Sqd>@GJ@P3ua(oWMbjq&svlDTeg)SH<)lp`iDHj z1HC%!N1b(EayD8v!d0`}LteXoy3F@J=0*0y-M7xZTq%${rPXI^x4oT(ID5~M13z;3 zOV)|D#E4mFRWD@BiMrKbygQ^jI-&E11NV;CzvLP$O{aeO&cLwkP#-fx{bZJgjQK1H zUVau2Ow8h=`52631l|Pc?tH~n%;ueU^v)zh!zK3=uPk;ud^=!9lqjrBuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFdg%BaSW-rwPdQNf0m;_Yihv(0g;J;LLy9^oQbYI z57j>u-`vqC$}ObOBHL)-GQrW6sd0hPzVo+l#ISv?soc8b&h6OJS65cPa(n#!x2e?G zgZ8(QHqOxA7Nd7``MmiVCcjQs9J=!HQqsm7;sL9#-s-)mz3gfhYrK-Z=xo2`)x|H$ zrRt*;D7wpAUFeY=7bPYweRC zPdxwpwd!ut#(>9vZs+CYwPY<{zWn<2>-zfoEji4Mx)qZqs9!nu*l^+rMahFAv%kY`og`srmCazYrg_a(dJJ@iu8J0q$v?uE&c zU3c}48rNmnCtlGDo1wO2HUG*uIi(aS9=0B#dmVRQmTglX-JVEdEaODE-QJN~$EXH1jM z_SjS(*T3LFfrK1T`yB=znTD5##heZ8Zq>E^PcDtC8*CSm&G-M>QiXvsf42V>Okj8%5x+%FXongD P0|SGntDnm{r-UW|19fr< literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/webview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/webview-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7be01bb71ab272906754f6fe38ee15548e5d2e GIT binary patch literal 519 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFLBuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFs}4;aSW-r)icR^{lNf{*8J7?T9j1sJR}5+m0rq! z^#99YXyoXmWcZQG=}7d&-&=QYU-oT*ZTkGJ*Y9P|UHs&8<^1#CKfCU^pMQFjNoZ*F z+G*3Tnpit?H0`+me*N{+MT_p{Wy|P@aqs)W$=1C5a^~inbIzytIWL^B?)AltkgOQD zpN-#s|NZ=PPQKafwO6xDcE+ur>zBU&zOk9a%8k+5T}OylabnFPA6aWfS{Ej z23(iz^bU%5AKlQgaz>(s3?Cb_RM_fJt`_b}`RNgkciw+r*s}6wj#Hz{XZsg3Pd~L| zUGnJTkGEygy>4qVCwZtia8%jI6)PHSDsw;NsIhbX&78I)K`W2g$Sh8=n(K5#aJsIM ziDc)23rQPy+::max(); +// QTC_TEMP -ComponentVersion::ComponentVersion() - : _major(NoVersion), _minor(NoVersion) +ComponentVersion::ComponentVersion(QStringView versionString) + : _major(NoVersion) + , _minor(NoVersion) { -} - -ComponentVersion::ComponentVersion(int major, int minor) - : _major(major), _minor(minor) -{ -} - -ComponentVersion::ComponentVersion(const QString &versionString) - : _major(NoVersion), _minor(NoVersion) -{ - int dotIdx = versionString.indexOf(QLatin1Char('.')); + auto dotIdx = versionString.indexOf(QLatin1Char('.')); if (dotIdx == -1) return; bool ok = false; - int maybeMajor = versionString.left(dotIdx).toInt(&ok); + auto maybeMajor = versionString.left(dotIdx).toInt(&ok); if (!ok) return; int maybeMinor = versionString.mid(dotIdx + 1).toInt(&ok); @@ -40,15 +30,6 @@ ComponentVersion::ComponentVersion(const QString &versionString) _minor = maybeMinor; } -ComponentVersion::~ComponentVersion() -{ -} - -bool ComponentVersion::isValid() const -{ - return _major >= 0 && _minor >= 0; -} - QString ComponentVersion::toString() const { QByteArray temp; @@ -65,36 +46,4 @@ void ComponentVersion::addToHash(QCryptographicHash &hash) const hash.addData(reinterpret_cast(&_minor), sizeof(_minor)); } -bool operator<(const ComponentVersion &lhs, const ComponentVersion &rhs) -{ - return lhs.majorVersion() < rhs.majorVersion() - || (lhs.majorVersion() == rhs.majorVersion() && lhs.minorVersion() < rhs.minorVersion()); -} - -bool operator<=(const ComponentVersion &lhs, const ComponentVersion &rhs) -{ - return lhs.majorVersion() < rhs.majorVersion() - || (lhs.majorVersion() == rhs.majorVersion() && lhs.minorVersion() <= rhs.minorVersion()); -} - -bool operator>(const ComponentVersion &lhs, const ComponentVersion &rhs) -{ - return rhs < lhs; -} - -bool operator>=(const ComponentVersion &lhs, const ComponentVersion &rhs) -{ - return rhs <= lhs; -} - -bool operator==(const ComponentVersion &lhs, const ComponentVersion &rhs) -{ - return lhs.majorVersion() == rhs.majorVersion() && lhs.minorVersion() == rhs.minorVersion(); -} - -bool operator!=(const ComponentVersion &lhs, const ComponentVersion &rhs) -{ - return !(lhs == rhs); -} - } // namespace LanguageUtils diff --git a/src/libs/languageutils/componentversion.h b/src/libs/languageutils/componentversion.h index 4b39e8402a1..0ba332103ac 100644 --- a/src/libs/languageutils/componentversion.h +++ b/src/libs/languageutils/componentversion.h @@ -9,6 +9,8 @@ QT_BEGIN_NAMESPACE class QCryptographicHash; QT_END_NAMESPACE +#include + namespace LanguageUtils { class LANGUAGEUTILS_EXPORT ComponentVersion @@ -17,25 +19,56 @@ class LANGUAGEUTILS_EXPORT ComponentVersion int _minor; public: - static const int NoVersion; - static const int MaxVersion; + static const int NoVersion = -1; + static const int MaxVersion = -1; - ComponentVersion(); - ComponentVersion(int major, int minor); - explicit ComponentVersion(const QString &versionString); - ~ComponentVersion(); + ComponentVersion() + : _major(NoVersion) + , _minor(NoVersion) + {} + + ComponentVersion(int major, int minor) + : _major(major) + , _minor(minor) + {} + + explicit ComponentVersion(QStringView versionString); + ~ComponentVersion() = default; int majorVersion() const { return _major; } int minorVersion() const { return _minor; } - friend bool LANGUAGEUTILS_EXPORT operator<(const ComponentVersion &lhs, const ComponentVersion &rhs); - friend bool LANGUAGEUTILS_EXPORT operator<=(const ComponentVersion &lhs, const ComponentVersion &rhs); - friend bool LANGUAGEUTILS_EXPORT operator>(const ComponentVersion &lhs, const ComponentVersion &rhs); - friend bool LANGUAGEUTILS_EXPORT operator>=(const ComponentVersion &lhs, const ComponentVersion &rhs); - friend bool LANGUAGEUTILS_EXPORT operator==(const ComponentVersion &lhs, const ComponentVersion &rhs); - friend bool LANGUAGEUTILS_EXPORT operator!=(const ComponentVersion &lhs, const ComponentVersion &rhs); + friend bool operator<(const ComponentVersion &lhs, const ComponentVersion &rhs) + { + return std::tie(lhs._major, lhs._minor) < std::tie(rhs._major, rhs._minor); + } - bool isValid() const; + friend bool operator<=(const ComponentVersion &lhs, const ComponentVersion &rhs) + { + return std::tie(lhs._major, lhs._minor) <= std::tie(rhs._major, rhs._minor); + } + + friend bool operator>(const ComponentVersion &lhs, const ComponentVersion &rhs) + { + return rhs < lhs; + } + + friend bool operator>=(const ComponentVersion &lhs, const ComponentVersion &rhs) + { + return rhs <= lhs; + } + + friend bool operator==(const ComponentVersion &lhs, const ComponentVersion &rhs) + { + return lhs.majorVersion() == rhs.majorVersion() && lhs.minorVersion() == rhs.minorVersion(); + } + + friend bool operator!=(const ComponentVersion &lhs, const ComponentVersion &rhs) + { + return !(lhs == rhs); + } + + bool isValid() const { return _major >= 0 && _minor >= 0; } QString toString() const; void addToHash(QCryptographicHash &hash) const; }; diff --git a/src/libs/sqlite/sqlitevalue.h b/src/libs/sqlite/sqlitevalue.h index ec4120139ab..725682494bd 100644 --- a/src/libs/sqlite/sqlitevalue.h +++ b/src/libs/sqlite/sqlitevalue.h @@ -34,7 +34,7 @@ public: explicit ValueBase(NullValue) {} explicit ValueBase(VariantType &&value) - : value(value) + : value(std::move(value)) {} explicit ValueBase(const char *value) @@ -44,6 +44,7 @@ public: explicit ValueBase(long long value) : value(value) {} + explicit ValueBase(int value) : value(static_cast(value)) {} @@ -61,11 +62,6 @@ public: {} - explicit ValueBase(StringType &&value) - : value(std::move(value)) - - {} - explicit ValueBase(BlobView value) : value(value) @@ -230,14 +226,42 @@ public: class ValueView : public ValueBase { public: + ValueView() = default; + + explicit ValueView(NullValue) {} + explicit ValueView(ValueBase &&base) : ValueBase(std::move(base)) {} + explicit ValueView(Utils::SmallStringView value) + : ValueBase(value) + {} + + explicit ValueView(BlobView value) + : ValueBase(value) + {} + + explicit ValueView(long long value) + : ValueBase(value) + {} + + explicit ValueView(int value) + : ValueBase(static_cast(value)) + {} + + explicit ValueView(uint value) + : ValueBase(static_cast(value)) + {} + + explicit ValueView(double value) + : ValueBase(value) + {} + template static ValueView create(Type &&value_) { - return ValueView{ValueBase{value_}}; + return ValueView(std::forward(value_)); } }; diff --git a/src/libs/utils/smallstring.h b/src/libs/utils/smallstring.h index a8869b4ccf8..52dd10602ce 100644 --- a/src/libs/utils/smallstring.h +++ b/src/libs/utils/smallstring.h @@ -356,6 +356,14 @@ public: return false; } + bool startsWith(QStringView subStringToSearch) const noexcept + { + if (size() >= Utils::usize(subStringToSearch)) + return subStringToSearch == QLatin1StringView{data(), subStringToSearch.size()}; + + return false; + } + bool startsWith(char characterToSearch) const noexcept { return data()[0] == characterToSearch; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 50bb01a5bbb..3bff2105209 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -296,15 +296,16 @@ void ItemLibraryModel::setSearchText(const QString &searchText) Import ItemLibraryModel::entryToImport(const ItemLibraryEntry &entry) { +#ifndef QDS_USE_PROJECTSTORAGE if (entry.majorVersion() == -1 && entry.minorVersion() == -1) return Import::createFileImport(entry.requiredImport()); - +#endif return Import::createLibraryImport(entry.requiredImport(), QString::number(entry.majorVersion()) + QLatin1Char('.') + QString::number(entry.minorVersion())); } -void ItemLibraryModel::update([[maybe_unused]] ItemLibraryInfo *itemLibraryInfo, Model *model) +void ItemLibraryModel::update(Model *model) { if (!model) return; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h index 212ddf8e040..b04ea492d2a 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h @@ -37,7 +37,7 @@ public: QString searchText() const; ItemLibraryImport *importByUrl(const QString &importName) const; - void update(ItemLibraryInfo *itemLibraryInfo, Model *model); + void update(Model *model); void updateUsedImports(const Imports &usedImports); QMimeData *getMimeData(const ItemLibraryEntry &itemLibraryEntry); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 587489bc8ca..ffefc431782 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -333,9 +333,7 @@ void ItemLibraryWidget::updateModel() m_compressionTimer.stop(); } -#ifndef QDS_USE_PROJECTSTORAGE - m_itemLibraryModel->update(m_itemLibraryInfo.data(), m_model.data()); -#endif + m_itemLibraryModel->update(m_model.data()); if (m_itemLibraryModel->rowCount() == 0 && !m_updateRetry) { m_updateRetry = true; // Only retry once to avoid endless loops diff --git a/src/plugins/qmldesigner/designercore/include/projectstorageids.h b/src/plugins/qmldesigner/designercore/include/projectstorageids.h index 90c174e04e0..0b157e55e77 100644 --- a/src/plugins/qmldesigner/designercore/include/projectstorageids.h +++ b/src/plugins/qmldesigner/designercore/include/projectstorageids.h @@ -51,6 +51,8 @@ using SourceContextIds = std::vector; using SourceId = Sqlite::BasicId; using SourceIds = std::vector; +template +using SmallSourceIds = QVarLengthArray; using ModuleId = Sqlite::BasicId; using ModuleIds = std::vector; diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h index ad606bcb90c..70d5e92b256 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h @@ -484,6 +484,34 @@ public: return typeHints; } + SmallSourceIds<4> typeAnnotationSourceIds(SourceId directoryId) const override + { + using NanotraceHR::keyValue; + NanotraceHR::Tracer tracer{"get type annotaion source ids"_t, + projectStorageCategory(), + keyValue("source id", directoryId)}; + + auto sourceIds = selectTypeAnnotationSourceIdsStatement + .template valuesWithTransaction>(directoryId); + + tracer.end(keyValue("source ids", sourceIds)); + + return sourceIds; + } + + SmallSourceIds<64> typeAnnotationDirectorySourceIds() const override + { + using NanotraceHR::keyValue; + NanotraceHR::Tracer tracer{"get type annotaion source ids"_t, projectStorageCategory()}; + + auto sourceIds = selectTypeAnnotationDirectorySourceIdsStatement + .template valuesWithTransaction>(); + + tracer.end(keyValue("source ids", sourceIds)); + + return sourceIds; + } + Storage::Info::ItemLibraryEntries itemLibraryEntries(TypeId typeId) const override { using NanotraceHR::keyValue; @@ -518,6 +546,40 @@ public: return entries; } + Storage::Info::ItemLibraryEntries itemLibraryEntries(ImportId importId) const + { + using NanotraceHR::keyValue; + NanotraceHR::Tracer tracer{"get item library entries by import id"_t, + projectStorageCategory(), + keyValue("import id", importId)}; + + using Storage::Info::ItemLibraryProperties; + Storage::Info::ItemLibraryEntries entries; + + auto callback = [&](TypeId typeId_, + Utils::SmallStringView name, + Utils::SmallStringView iconPath, + Utils::SmallStringView category, + Utils::SmallStringView import, + Utils::SmallStringView toolTip, + Utils::SmallStringView properties, + Utils::SmallStringView extraFilePaths, + Utils::SmallStringView templatePath) { + auto &last = entries.emplace_back( + typeId_, name, iconPath, category, import, toolTip, templatePath); + if (properties.size()) + selectItemLibraryPropertiesStatement.readTo(last.properties, properties); + if (extraFilePaths.size()) + selectItemLibraryExtraFilePathsStatement.readTo(last.extraFilePaths, extraFilePaths); + }; + + selectItemLibraryEntriesByTypeIdStatement.readCallbackWithTransaction(callback, importId); + + tracer.end(keyValue("item library entries", entries)); + + return entries; + } + Storage::Info::ItemLibraryEntries itemLibraryEntries(SourceId sourceId) const override { using NanotraceHR::keyValue; @@ -1479,6 +1541,28 @@ private: annotation.typeId = fetchTypeIdByModuleIdAndExportedName(annotation.moduleId, annotation.typeName); } + + for (auto &annotation : typeAnnotations) { + if (!annotation.typeId) + qWarning() << moduleName(annotation.moduleId).toQString() + << annotation.typeName.toQString(); + } + + typeAnnotations.erase(std::remove_if(typeAnnotations.begin(), + typeAnnotations.end(), + [](const auto &annotation) { + return !annotation.typeId; + }), + typeAnnotations.end()); + } + + template + static Sqlite::ValueView createEmptyAsNull(const Value &value) + { + if (value.size()) + return Sqlite::ValueView::create(value); + + return Sqlite::ValueView{}; } void synchronizeTypeAnnotations(Storage::Synchronization::TypeAnnotations &typeAnnotations, @@ -1512,9 +1596,10 @@ private: insertTypeAnnotationStatement.write(annotation.typeId, annotation.sourceId, + annotation.directorySourceId, annotation.iconPath, - annotation.itemLibraryJson, - annotation.hintsJson); + createEmptyAsNull(annotation.itemLibraryJson), + createEmptyAsNull(annotation.hintsJson)); }; auto update = [&](const TypeAnnotationView &annotationFromDatabase, @@ -1533,8 +1618,8 @@ private: updateTypeAnnotationStatement.write(annotation.typeId, annotation.iconPath, - annotation.itemLibraryJson, - annotation.hintsJson); + createEmptyAsNull(annotation.itemLibraryJson), + createEmptyAsNull(annotation.hintsJson)); return Sqlite::UpdateChange::Update; } @@ -4285,11 +4370,15 @@ private: Sqlite::StrictColumnType::Integer, {Sqlite::PrimaryKey{}}); auto &sourceIdColumn = table.addColumn("sourceId", Sqlite::StrictColumnType::Integer); + auto &directorySourceIdColumn = table.addColumn("directorySourceId", + Sqlite::StrictColumnType::Integer); + table.addColumn("iconPath", Sqlite::StrictColumnType::Text); table.addColumn("itemLibrary", Sqlite::StrictColumnType::Text); table.addColumn("hints", Sqlite::StrictColumnType::Text); table.addUniqueIndex({sourceIdColumn, typeIdColumn}); + table.addIndex({directorySourceIdColumn}); table.initialize(database); } @@ -4926,9 +5015,10 @@ public: "SELECT typeId, iconPath, itemLibrary, hints FROM typeAnnotations WHERE " "sourceId IN carray(?1) ORDER BY typeId", database}; - WriteStatement<5> insertTypeAnnotationStatement{ - "INSERT INTO typeAnnotations(typeId, sourceId, iconPath, itemLibrary, hints) VALUES(?1, " - "?2, ?3, ?4, ?5)", + WriteStatement<6> insertTypeAnnotationStatement{ + "INSERT INTO " + " typeAnnotations(typeId, sourceId, directorySourceId, iconPath, itemLibrary, hints) " + "VALUES(?1, ?2, ?3, ?4, ?5, ?6)", database}; WriteStatement<4> updateTypeAnnotationStatement{ "UPDATE typeAnnotations SET iconPath=?2, itemLibrary=?3, hints=?4 WHERE typeId=?1", database}; @@ -4939,28 +5029,35 @@ public: mutable ReadStatement<2, 1> selectTypeHintsStatement{ "SELECT hints.key, hints.value " "FROM typeAnnotations, json_each(typeAnnotations.hints) AS hints " - "WHERE typeId=?1", + "WHERE typeId=?1 AND hints IS NOT NULL", database}; + mutable ReadStatement<1, 1> selectTypeAnnotationSourceIdsStatement{ + "SELECT sourceId FROM typeAnnotations WHERE directorySourceId=?1 ORDER BY sourceId", database}; + mutable ReadStatement<1, 0> selectTypeAnnotationDirectorySourceIdsStatement{ + "SELECT DISTINCT directorySourceId FROM typeAnnotations ORDER BY directorySourceId", database}; mutable ReadStatement<9> selectItemLibraryEntriesStatement{ "SELECT typeId, i.value->>'$.name', i.value->>'$.iconPath', i.value->>'$.category', " " i.value->>'$.import', i.value->>'$.toolTip', i.value->>'$.properties', " " i.value->>'$.extraFilePaths', i.value->>'$.templatePath' " - "FROM typeAnnotations, json_each(typeAnnotations.itemLibrary) AS i", + "FROM typeAnnotations AS ta , json_each(ta.itemLibrary) AS i " + "WHERE ta.itemLibrary IS NOT NULL", database}; mutable ReadStatement<9, 1> selectItemLibraryEntriesByTypeIdStatement{ "SELECT typeId, i.value->>'$.name', i.value->>'$.iconPath', i.value->>'$.category', " " i.value->>'$.import', i.value->>'$.toolTip', i.value->>'$.properties', " " i.value->>'$.extraFilePaths', i.value->>'$.templatePath' " - "FROM typeAnnotations, json_each(typeAnnotations.itemLibrary) AS i " - "WHERE typeId=?1", + "FROM typeAnnotations AS ta, json_each(ta.itemLibrary) AS i " + "WHERE typeId=?1 AND ta.itemLibrary IS NOT NULL", database}; mutable ReadStatement<9, 1> selectItemLibraryEntriesBySourceIdStatement{ - "SELECT typeId, i.value->>'$.name', i.value->>'$.iconPath', i.value->>'$.category', " + "SELECT typeId, i.value->>'$.name', i.value->>'$.iconPath', " + "i.value->>'$.category', " " i.value->>'$.import', i.value->>'$.toolTip', i.value->>'$.properties', " " i.value->>'$.extraFilePaths', i.value->>'$.templatePath' " "FROM typeAnnotations, json_each(typeAnnotations.itemLibrary) AS i " "WHERE typeId IN (SELECT DISTINCT typeId " - " FROM documentImports AS di JOIN exportedTypeNames USING(moduleId) " + " FROM documentImports AS di JOIN exportedTypeNames " + " USING(moduleId) " " WHERE di.sourceId=?)", database}; mutable ReadStatement<3, 1> selectItemLibraryPropertiesStatement{ diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageinterface.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageinterface.h index a67b6296083..20d988f7aab 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageinterface.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageinterface.h @@ -57,6 +57,8 @@ public: = 0; virtual PropertyDeclarationId defaultPropertyDeclarationId(TypeId typeId) const = 0; virtual std::optional type(TypeId typeId) const = 0; + virtual SmallSourceIds<4> typeAnnotationSourceIds(SourceId directoryId) const = 0; + virtual SmallSourceIds<64> typeAnnotationDirectorySourceIds() const = 0; virtual Utils::PathString typeIconPath(TypeId typeId) const = 0; virtual Storage::Info::TypeHints typeHints(TypeId typeId) const = 0; virtual Storage::Info::ItemLibraryEntries itemLibraryEntries(TypeId typeId) const = 0; diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h index 5f80505da3d..8d810d94bd2 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h @@ -1202,10 +1202,13 @@ using ProjectDatas = std::vector; class TypeAnnotation { public: - TypeAnnotation(SourceId sourceId) + TypeAnnotation(SourceId sourceId, SourceId directorySourceId) : sourceId{sourceId} + , directorySourceId{directorySourceId} {} + TypeAnnotation(SourceId sourceId, + SourceId directorySourceId, Utils::SmallStringView typeName, ModuleId moduleId, Utils::SmallStringView iconPath, @@ -1219,6 +1222,7 @@ public: , sourceId{sourceId} , moduleId{moduleId} , traits{traits} + , directorySourceId{directorySourceId} {} template @@ -1247,6 +1251,7 @@ public: SourceId sourceId; ModuleId moduleId; TypeTraits traits; + SourceId directorySourceId; }; using TypeAnnotations = std::vector; diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp index 6948117db69..761d6371efe 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.cpp @@ -11,6 +11,7 @@ #include "qmltypesparserinterface.h" #include "sourcepath.h" #include "sourcepathcache.h" +#include "typeannotationreader.h" #include @@ -246,7 +247,8 @@ std::vector createIdPaths(ProjectStorageUpdater::WatchedSourceIdsIds wa void ProjectStorageUpdater::update(QStringList directories, QStringList qmlTypesPaths, - const QString &propertyEditorResourcesPath) + const QString &propertyEditorResourcesPath, + const QStringList &typeAnnotationPaths) { NanotraceHR::Tracer tracer{"update"_t, category(), @@ -260,6 +262,7 @@ void ProjectStorageUpdater::update(QStringList directories, updateDirectories(directories, package, notUpdatedSourceIds, watchedSourceIds); updateQmlTypes(qmlTypesPaths, package, notUpdatedSourceIds, watchedSourceIds); updatePropertyEditorPaths(propertyEditorResourcesPath, package, notUpdatedSourceIds); + updateTypeAnnotations(typeAnnotationPaths, package, notUpdatedSourceIds); package.updatedSourceIds = filterNotUpdatedSourceIds(std::move(package.updatedSourceIds), std::move(notUpdatedSourceIds.sourceIds)); @@ -511,12 +514,134 @@ void ProjectStorageUpdater::updatePropertyEditorPaths( } } -void ProjectStorageUpdater::updateTypeAnnotations( - const QString & /*propertyEditorResourcesPath*/, - Storage::Synchronization::SynchronizationPackage & /*package*/, - NotUpdatedSourceIds & /*notUpdatedSourceIds*/) +namespace { + +template +SmallSourceIds<16> mergedSourceIds(const SourceIds1 &sourceIds1, const SourceIds2 &sourceIds2) { - // const auto typeAnnotations = dir.entryInfoList({"*.metainfo"}, QDir::Files); + SmallSourceIds<16> mergedSourceIds; + + std::set_union(sourceIds1.begin(), + sourceIds1.end(), + sourceIds2.begin(), + sourceIds2.end(), + std::back_inserter(mergedSourceIds)); + + return mergedSourceIds; +} +} // namespace + +void ProjectStorageUpdater::updateTypeAnnotations(const QStringList &directoryPaths, + Storage::Synchronization::SynchronizationPackage &package, + NotUpdatedSourceIds ¬UpdatedSourceIds) +{ + NanotraceHR::Tracer tracer("update type annotations"_t, category()); + + std::map> updatedSourceIdsDictonary; + + for (SourceId directoryId : m_projectStorage.typeAnnotationDirectorySourceIds()) + updatedSourceIdsDictonary[directoryId] = {}; + + for (const auto &directoryPath : directoryPaths) + updateTypeAnnotations(directoryPath, package, notUpdatedSourceIds, updatedSourceIdsDictonary); + + updateTypeAnnotationDirectories(package, notUpdatedSourceIds, updatedSourceIdsDictonary); +} + +void ProjectStorageUpdater::updateTypeAnnotations( + const QString &rootDirectoryPath, + Storage::Synchronization::SynchronizationPackage &package, + NotUpdatedSourceIds ¬UpdatedSourceIds, + std::map> &updatedSourceIdsDictonary) +{ + NanotraceHR::Tracer tracer("update type annotation directory"_t, + category(), + keyValue("path", rootDirectoryPath)); + + if (rootDirectoryPath.isEmpty()) + return; + + QDirIterator directoryIterator{rootDirectoryPath, + {"*.metainfo"}, + QDir::NoDotAndDotDot | QDir::Files, + QDirIterator::Subdirectories}; + + while (directoryIterator.hasNext()) { + auto fileInfo = directoryIterator.nextFileInfo(); + auto filePath = fileInfo.filePath(); + SourceId sourceId = m_pathCache.sourceId(SourcePath{filePath}); + + auto directoryPath = fileInfo.canonicalPath(); + + SourceId directorySourceId = m_pathCache.sourceId(SourcePath{directoryPath + "/."}); + + auto state = fileState(sourceId, package, notUpdatedSourceIds); + if (state == FileState::Changed) + updateTypeAnnotation(directoryPath, fileInfo.filePath(), sourceId, directorySourceId, package); + + if (state != FileState::NotChanged) + updatedSourceIdsDictonary[directorySourceId].push_back(sourceId); + } +} + +void ProjectStorageUpdater::updateTypeAnnotationDirectories( + Storage::Synchronization::SynchronizationPackage &package, + NotUpdatedSourceIds ¬UpdatedSourceIds, + std::map> &updatedSourceIdsDictonary) +{ + for (auto &[directorySourceId, updatedSourceIds] : updatedSourceIdsDictonary) { + auto directoryState = fileState(directorySourceId, package, notUpdatedSourceIds); + + if (directoryState != FileState::NotChanged) { + auto existingTypeAnnotationSourceIds = m_projectStorage.typeAnnotationSourceIds( + directorySourceId); + + std::sort(updatedSourceIds.begin(), updatedSourceIds.end()); + + auto changedSourceIds = mergedSourceIds(existingTypeAnnotationSourceIds, updatedSourceIds); + package.updatedTypeAnnotationSourceIds.insert(package.updatedTypeAnnotationSourceIds.end(), + changedSourceIds.begin(), + changedSourceIds.end()); + } else { + package.updatedTypeAnnotationSourceIds.insert(package.updatedTypeAnnotationSourceIds.end(), + updatedSourceIds.begin(), + updatedSourceIds.end()); + } + } +} + +namespace { +QString contentFromFile(const QString &path) +{ + QFile file{path}; + if (file.open(QIODevice::ReadOnly)) + return QString::fromUtf8(file.readAll()); + + return {}; +} +} // namespace + +void ProjectStorageUpdater::updateTypeAnnotation(const QString &directoryPath, + const QString &filePath, + SourceId sourceId, + SourceId directorySourceId, + Storage::Synchronization::SynchronizationPackage &package) +{ + NanotraceHR::Tracer tracer{"update type annotation path"_t, + category(), + keyValue("path", filePath), + keyValue("directory path", directoryPath)}; + + Storage::TypeAnnotationReader reader{m_projectStorage}; + + auto annotations = reader.parseTypeAnnotation(contentFromFile(filePath), + directoryPath, + sourceId, + directorySourceId); + auto &typeAnnotations = package.typeAnnotations; + package.typeAnnotations.insert(typeAnnotations.end(), + std::make_move_iterator(annotations.begin()), + std::make_move_iterator(annotations.end())); } void ProjectStorageUpdater::updatePropertyEditorPath( @@ -752,6 +877,7 @@ void ProjectStorageUpdater::parseProjectDatas(const Storage::Synchronization::Pr watchedSourceIds.qmlSourceIds.push_back(projectData.sourceId); parseQmlComponent(projectData.sourceId, package, notUpdatedSourceIds); + break; } } } diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.h index c7794035659..e21531deea0 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorageupdater.h @@ -11,12 +11,15 @@ #include "projectstoragetypes.h" #include "sourcepath.h" +#include + #include #include #include +#include #include namespace Sqlite { @@ -40,7 +43,7 @@ public: using PathCache = SourcePathCache, NonLockingMutex>; ProjectStorageUpdater(FileSystemInterface &fileSystem, - ProjectStorageInterface &projectStorage, + ProjectStorageType &projectStorage, FileStatusCache &fileStatusCache, PathCache &pathCache, QmlDocumentParserInterface &qmlDocumentParser, @@ -59,7 +62,8 @@ public: void update(QStringList directories, QStringList qmlTypesPaths, - const QString &propertyEditorResourcesPath); + const QString &propertyEditorResourcesPath, + const QStringList &typeAnnotationPaths); void pathsWithIdsChanged(const std::vector &idPaths) override; void pathsChanged(const SourceIds &filePathIds) override; @@ -157,9 +161,21 @@ private: void updatePropertyEditorPaths(const QString &propertyEditorResourcesPath, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds); - void updateTypeAnnotations(const QString &propertyEditorResourcesPath, + void updateTypeAnnotations(const QString &directoryPath, + Storage::Synchronization::SynchronizationPackage &package, + NotUpdatedSourceIds ¬UpdatedSourceIds, + std::map> &updatedSourceIdsDictonary); + void updateTypeAnnotationDirectories(Storage::Synchronization::SynchronizationPackage &package, + NotUpdatedSourceIds ¬UpdatedSourceIds, + std::map> &updatedSourceIdsDictonary); + void updateTypeAnnotations(const QStringList &directoryPath, Storage::Synchronization::SynchronizationPackage &package, NotUpdatedSourceIds ¬UpdatedSourceIds); + void updateTypeAnnotation(const QString &directoryPath, + const QString &filePath, + SourceId sourceId, + SourceId directorySourceId, + Storage::Synchronization::SynchronizationPackage &package); void updatePropertyEditorPath(const QString &path, Storage::Synchronization::SynchronizationPackage &package, SourceId directorySourceId); @@ -209,7 +225,7 @@ private: private: std::vector m_changedIdPaths; FileSystemInterface &m_fileSystem; - ProjectStorageInterface &m_projectStorage; + ProjectStorageType &m_projectStorage; FileStatusCache &m_fileStatusCache; PathCache &m_pathCache; QmlDocumentParserInterface &m_qmlDocumentParser; diff --git a/src/plugins/qmldesigner/designercore/projectstorage/typeannotationreader.cpp b/src/plugins/qmldesigner/designercore/projectstorage/typeannotationreader.cpp index b829e9db36d..67a63542bcb 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/typeannotationreader.cpp +++ b/src/plugins/qmldesigner/designercore/projectstorage/typeannotationreader.cpp @@ -27,11 +27,11 @@ constexpr auto propertyElementName = "Property"_L1; constexpr auto extraFileElementName = "ExtraFile"_L1; } // namespace -Synchronization::TypeAnnotations TypeAnnotationReader::parseTypeAnnotation(const QString &content, - const QString &directoryPath, - SourceId sourceId) +Synchronization::TypeAnnotations TypeAnnotationReader::parseTypeAnnotation( + const QString &content, const QString &directoryPath, SourceId sourceId, SourceId directorySourceId) { m_sourceId = sourceId; + m_directorySourceId = directorySourceId; m_directoryPath = directoryPath; m_parserState = ParsingDocument; if (!SimpleAbstractStreamReader::readFromSource(content)) { @@ -178,7 +178,7 @@ TypeAnnotationReader::ParserSate TypeAnnotationReader::readDocument(const QStrin TypeAnnotationReader::ParserSate TypeAnnotationReader::readMetaInfoRootElement(const QString &name) { if (name == typeElementName) { - m_typeAnnotations.emplace_back(m_sourceId); + m_typeAnnotations.emplace_back(m_sourceId, m_directorySourceId); m_itemLibraryEntries = json::array(); return ParsingType; } else { @@ -277,7 +277,7 @@ void TypeAnnotationReader::readItemLibraryEntryProperty(QStringView name, const } else if (name == "category"_L1) { m_itemLibraryEntries.back()["category"] = value; } else if (name == "libraryIcon"_L1) { - m_itemLibraryEntries.back()["iconPath"] = value; + m_itemLibraryEntries.back()["iconPath"] = absoluteFilePathForDocument(variant.toString()); } else if (name == "version"_L1) { // setVersion(value.toString()); } else if (name == "requiredImport"_L1) { @@ -427,8 +427,8 @@ void TypeAnnotationReader::setVersion(const QString &versionNumber) int minor = 0; if (!versionNumber.isEmpty()) { - int val; - bool ok; + int val = -1; + bool ok = false; if (versionNumber.contains('.'_L1)) { val = versionNumber.split('.'_L1).constFirst().toInt(&ok); major = ok ? val : major; diff --git a/src/plugins/qmldesigner/designercore/projectstorage/typeannotationreader.h b/src/plugins/qmldesigner/designercore/projectstorage/typeannotationreader.h index 9332d5bed94..a320493ee27 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/typeannotationreader.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/typeannotationreader.h @@ -49,7 +49,8 @@ public: Synchronization::TypeAnnotations parseTypeAnnotation(const QString &content, const QString &directoryPath, - SourceId sourceId); + SourceId sourceId, + SourceId directorySourceId); QStringList errors(); @@ -124,6 +125,7 @@ private: json m_itemLibraryEntries; Property m_currentProperty; SourceId m_sourceId; + SourceId m_directorySourceId; }; } // namespace QmlDesigner::Storage diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp index c415863e8a5..2aadc45f24a 100644 --- a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp +++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp @@ -490,6 +490,11 @@ QString propertyEditorResourcesPath() return Core::ICore::resourcePath("qmldesigner/propertyEditorQmlSources").toString(); } +QString qtCreatorItemLibraryPath() +{ + return Core::ICore::resourcePath("qmldesigner/itemLibrary").toString(); +} + } // namespace void QmlDesignerProjectManager::projectAdded(::ProjectExplorer::Project *project) @@ -626,11 +631,13 @@ void QmlDesignerProjectManager::update() if constexpr (isUsingQmlDesignerLite()) { m_projectData->projectStorageData->updater.update(directoriesForLiteDesigner(), qmlTypesForLiteDesigner(), - propertyEditorResourcesPath()); + propertyEditorResourcesPath(), + {qtCreatorItemLibraryPath()}); } else { m_projectData->projectStorageData->updater.update(directories(m_projectData->activeTarget), qmlTypes(m_projectData->activeTarget), - propertyEditorResourcesPath()); + propertyEditorResourcesPath(), + {qtCreatorItemLibraryPath()}); } } diff --git a/src/plugins/qmldesigner/qtquickplugin/quick.metainfo b/src/plugins/qmldesigner/qtquickplugin/quick.metainfo index 3f3cdb7910c..46cb42b60d2 100644 --- a/src/plugins/qmldesigner/qtquickplugin/quick.metainfo +++ b/src/plugins/qmldesigner/qtquickplugin/quick.metainfo @@ -374,7 +374,6 @@ MetaInfo { name: "Keyframe" category: "none" version: "1.0" - requiredImport: "none" } } @@ -386,7 +385,6 @@ MetaInfo { name: "KeyframeGroup" category: "none" version: "1.0" - requiredImport: "none" } } diff --git a/tests/unit/tests/matchers/projectstorage-matcher.h b/tests/unit/tests/matchers/projectstorage-matcher.h index 5ce6512c14e..02861d7eea3 100644 --- a/tests/unit/tests/matchers/projectstorage-matcher.h +++ b/tests/unit/tests/matchers/projectstorage-matcher.h @@ -53,3 +53,24 @@ MATCHER_P3(IsItemLibraryProperty, return property.name == name && property.type == type && property.value == value; } + +template +auto IsTypeAnnotation(QmlDesigner::SourceId sourceId, + QmlDesigner::SourceId directorySourceId, + Utils::SmallStringView typeName, + QmlDesigner::ModuleId moduleId, + IconPathMatcher iconPath, + TypeTraitsMatcher traits, + HintsJsonMatcher hintsJsonMatcher, + ItemLibraryJsonMatcher itemLibraryJsonMatcher) +{ + using QmlDesigner::Storage::Synchronization::TypeAnnotation; + return AllOf(Field("sourceId", &TypeAnnotation::sourceId, sourceId), + Field("sourceId", &TypeAnnotation::directorySourceId, directorySourceId), + Field("typeName", &TypeAnnotation::typeName, typeName), + Field("moduleId", &TypeAnnotation::moduleId, moduleId), + Field("iconPath", &TypeAnnotation::iconPath, iconPath), + Field("traits", &TypeAnnotation::traits, traits), + Field("hintsJson", &TypeAnnotation::hintsJson, hintsJsonMatcher), + Field("itemLibraryJson", &TypeAnnotation::itemLibraryJson, itemLibraryJsonMatcher)); +} diff --git a/tests/unit/tests/matchers/unittest-matchers.h b/tests/unit/tests/matchers/unittest-matchers.h index 7c52d973b88..faa99a48a2f 100644 --- a/tests/unit/tests/matchers/unittest-matchers.h +++ b/tests/unit/tests/matchers/unittest-matchers.h @@ -95,6 +95,64 @@ private: const QString m_suffix; }; +template +class StartsWithMatcher +{ +public: + explicit StartsWithMatcher(const StringType &prefix) + : m_prefix(prefix) + {} + + template + bool MatchAndExplain(CharType *s, testing::MatchResultListener *listener) const + { + return s != NULL && MatchAndExplain(StringType(s), listener); + } + + template + bool MatchAndExplain(const MatcheeStringType &s, testing::MatchResultListener * /* listener */) const + { + return s.startsWith(m_prefix); + } + + void DescribeTo(::std::ostream *os) const { *os << "ends with " << m_prefix; } + + void DescribeNegationTo(::std::ostream *os) const { *os << "doesn't end with " << m_prefix; } + + StartsWithMatcher(const StartsWithMatcher &) = default; + StartsWithMatcher &operator=(const StartsWithMatcher &) = delete; + +private: + const StringType m_prefix; +}; + +class QStringStartsWithMatcher +{ +public: + explicit QStringStartsWithMatcher(const QString &prefix) + : m_prefix(prefix) + {} + + template + bool MatchAndExplain(const MatcheeStringType &s, testing::MatchResultListener * /* listener */) const + { + return s.startsWith(m_prefix); + } + + void DescribeTo(::std::ostream *os) const + { + *os << "ends with " << testing::PrintToString(m_prefix); + } + + void DescribeNegationTo(::std::ostream *os) const + { + *os << "doesn't end with " << testing::PrintToString(m_prefix); + } + +private: + const QString m_prefix; +}; + class IsEmptyMatcher { public: @@ -157,6 +215,16 @@ inline auto EndsWith(const QStringView &suffix) return ::testing::PolymorphicMatcher(Internal::QStringEndsWithMatcher(suffix.toString())); } +inline auto StartsWith(const Utils::SmallStringView &prefix) +{ + return ::testing::PolymorphicMatcher(Internal::StartsWithMatcher(prefix)); +} + +inline auto StartsWith(const QStringView &prefix) +{ + return ::testing::PolymorphicMatcher(Internal::QStringStartsWithMatcher(prefix.toString())); +} + inline auto IsEmpty() { return ::testing::PolymorphicMatcher(Internal::IsEmptyMatcher()); diff --git a/tests/unit/tests/mocks/projectstoragemock.h b/tests/unit/tests/mocks/projectstoragemock.h index b534814c1d3..8aa5979ddbe 100644 --- a/tests/unit/tests/mocks/projectstoragemock.h +++ b/tests/unit/tests/mocks/projectstoragemock.h @@ -195,6 +195,11 @@ public: type, (QmlDesigner::TypeId typeId), (const, override)); + MOCK_METHOD(QmlDesigner::SmallSourceIds<4>, + typeAnnotationSourceIds, + (QmlDesigner::SourceId directoryId), + (const, override)); + MOCK_METHOD(QmlDesigner::SmallSourceIds<64>, typeAnnotationDirectorySourceIds, (), (const, override)); MOCK_METHOD(Utils::PathString, typeIconPath, (QmlDesigner::TypeId typeId), (const, override)); MOCK_METHOD(QmlDesigner::Storage::Info::TypeHints, typeHints, diff --git a/tests/unit/tests/printers/gtest-creator-printing.cpp b/tests/unit/tests/printers/gtest-creator-printing.cpp index 40f9c8db6da..6bc78e99367 100644 --- a/tests/unit/tests/printers/gtest-creator-printing.cpp +++ b/tests/unit/tests/printers/gtest-creator-printing.cpp @@ -795,7 +795,10 @@ std::ostream &operator<<(std::ostream &out, const SynchronizationPackage &packag << ", projectDatas: " << package.projectDatas << ", propertyEditorQmlPaths: " << package.propertyEditorQmlPaths << ", updatedPropertyEditorQmlPathSourceIds: " - << package.updatedPropertyEditorQmlPathSourceIds << ")"; + << package.updatedPropertyEditorQmlPathSourceIds + << ", typeAnnotations: " << package.typeAnnotations + << ", updatedTypeAnnotationSourceIds: " << package.updatedTypeAnnotationSourceIds + << ")"; } std::ostream &operator<<(std::ostream &out, const ProjectData &data) diff --git a/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick/Controls/designer/qtquickcontrols2.metainfo b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick/Controls/designer/qtquickcontrols2.metainfo new file mode 100644 index 00000000000..0cd3959cf8a --- /dev/null +++ b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick/Controls/designer/qtquickcontrols2.metainfo @@ -0,0 +1,575 @@ +MetaInfo { + Type { + name: "QtQuick.Controls.BusyIndicator" + icon: "images/busyindicator-icon16.png" + + ItemLibraryEntry { + name: "Busy Indicator" + category: "Qt Quick - Controls 2" + libraryIcon: "images/busyindicator-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Indicates activity while, for example, content is being loaded.") + } + } + + Type { + name: "QtQuick.Controls.Button" + icon: "images/button-icon16.png" + + ItemLibraryEntry { + name: "Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/button-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A button with text.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Button\")" } + } + } + + Type { + name: "QtQuick.Controls.CheckBox" + icon: "images/checkbox-icon16.png" + + ItemLibraryEntry { + name: "Check Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/checkbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A checkbox with a text label.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Check Box\")" } + } + } + + Type { + name: "QtQuick.Controls.CheckDelegate" + icon: "images/checkbox-icon16.png" + + ItemLibraryEntry { + name: "Check Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/checkbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Presents items from a model as checkboxes.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Check Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.ComboBox" + icon: "images/combobox-icon16.png" + + ItemLibraryEntry { + name: "Combo Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/combobox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("An editable drop-down list.") + } + } + + Type { + name: "QtQuick.Controls.Control" + icon: "images/control-icon16.png" + + ItemLibraryEntry { + name: "Control" + category: "Qt Quick - Controls 2" + libraryIcon: "images/control-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("An abstract base type for UI controls.") + } + } + + Type { + name: "QtQuick.Controls.DelayButton" + icon: "images/button-icon16.png" + + ItemLibraryEntry { + name: "Delay Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/delaybutton-icon.png" + version: "2.2" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A button with a delay preventing accidental presses.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Delay Button\")" } + } + } + + Type { + name: "QtQuick.Controls.Dial" + icon: "images/dial-icon16.png" + + ItemLibraryEntry { + name: "Dial" + category: "Qt Quick - Controls 2" + libraryIcon: "images/dial-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + toolTip: qsTr("A circular dial that is rotated to set a value.") + } + } + + Type { + name: "QtQuick.Controls.Frame" + icon: "images/frame-icon16.png" + + ItemLibraryEntry { + name: "Frame" + category: "Qt Quick - Controls 2" + libraryIcon: "images/frame-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("An untitled container for a group of controls.") + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.GroupBox" + icon: "images/groupbox-icon16.png" + + ItemLibraryEntry { + name: "Group Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/groupbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A titled container for a group of controls.") + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + Property { name: "title"; type: "binding"; value: "qsTr(\"Group Box\")" } + } + } + + Type { + name: "QtQuick.Controls.ItemDelegate" + icon: "images/itemdelegate-icon16.png" + + ItemLibraryEntry { + name: "Item Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/itemdelegate-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Presents a standard view item. It can be used as a delegate in various views and controls, such as ListView and ComboBox.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Item Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.Label" + icon: "images/label-icon16.png" + + ItemLibraryEntry { + name: "Label" + category: "Qt Quick - Controls 2" + libraryIcon: "images/label-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A text label.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Label\")" } + } + } + + Type { + name: "QtQuick.Controls.Page" + icon: "images/page-icon16.png" + + ItemLibraryEntry { + name: "Page" + category: "Qt Quick - Controls 2" + libraryIcon: "images/page-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A page with header and footer.") + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.PageIndicator" + icon: "images/pageindicator-icon16.png" + + ItemLibraryEntry { + name: "Page Indicator" + category: "Qt Quick - Controls 2" + libraryIcon: "images/pageindicator-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Indicates the currently active page.") + + Property { name: "count"; type: "int"; value: 3 } + } + } + + Type { + name: "QtQuick.Controls.Pane" + icon: "images/pane-icon16.png" + + ItemLibraryEntry { + name: "Pane" + category: "Qt Quick - Controls 2" + libraryIcon: "images/pane-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Provides a background matching the application style and theme.") + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.ProgressBar" + icon: "images/progressbar-icon16.png" + + ItemLibraryEntry { + name: "Progress Bar" + category: "Qt Quick - Controls 2" + libraryIcon: "images/progressbar-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A bar indicating the progress of an operation.") + + Property { name: "value"; type: "real"; value: 0.5 } + } + } + + Type { + name: "QtQuick.Controls.RadioButton" + icon: "images/radiobutton-icon16.png" + + ItemLibraryEntry { + name: "Radio Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/radiobutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("An option button that you can toggle on or off.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Button\")" } + } + } + + Type { + name: "QtQuick.Controls.RadioDelegate" + icon: "images/radiobutton-icon16.png" + + ItemLibraryEntry { + name: "Radio Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/radiobutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Presents items from a model as radio buttons.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.RangeSlider" + icon: "images/rangeslider-icon16.png" + + ItemLibraryEntry { + name: "Range Slider" + category: "Qt Quick - Controls 2" + libraryIcon: "images/rangeslider-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A bar with adjustable start and end points.") + + Property { name: "first.value"; type: "real"; value: 0.25 } + Property { name: "second.value"; type: "real"; value: 0.75 } + } + } + + Type { + name: "QtQuick.Controls.RoundButton" + icon: "images/roundbutton-icon16.png" + + ItemLibraryEntry { + name: "Round Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/roundbutton-icon.png" + version: "2.1" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A round button with text.") + + Property { name: "text"; type: "string"; value: "+" } + } + } + + Type { + name: "QtQuick.Controls.Slider" + icon: "images/slider-icon16.png" + + ItemLibraryEntry { + name: "Slider" + category: "Qt Quick - Controls 2" + libraryIcon: "images/slider-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("An adjustable slider.") + + Property { name: "value"; type: "real"; value: 0.5 } + } + } + + Type { + name: "QtQuick.Controls.SpinBox" + icon: "images/spinbox-icon16.png" + + ItemLibraryEntry { + name: "Spin Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/spinbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A box with an adjustable number.") + } + } + + Type { + name: "QtQuick.Controls.ScrollView" + icon: "images/scrollview-icon16.png" + + ItemLibraryEntry { + name: "Scroll View" + category: "Qt Quick - Controls 2" + libraryIcon: "images/scrollview-icon.png" + version: "2.2" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A scrollable area.") + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.StackView" + icon: "images/stackview-icon16.png" + + ItemLibraryEntry { + name: "Stack View" + category: "Qt Quick - Controls 2" + libraryIcon: "images/stackview-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Provides a stack-based navigation for a set of pages.") + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.SwipeDelegate" + icon: "images/itemdelegate-icon16.png" + + ItemLibraryEntry { + name: "Swipe Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/itemdelegate-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Presents items from a model as items that you can swipe to expose more options.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Swipe Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.SwipeView" + icon: "images/swipeview-icon16.png" + + ItemLibraryEntry { + name: "Swipe View" + category: "Qt Quick - Controls 2" + libraryIcon: "images/swipeview-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Provides a view where you can navigate pages by swiping.") + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.Switch" + icon: "images/switch-icon16.png" + + ItemLibraryEntry { + name: "Switch" + category: "Qt Quick - Controls 2" + libraryIcon: "images/switch-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A button that you can toggle on and off.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Switch\")" } + } + } + + Type { + name: "QtQuick.Controls.SwitchDelegate" + icon: "images/switch-icon16.png" + + ItemLibraryEntry { + name: "Switch Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/switch-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("Presents items from a model as toggle switches.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Switch Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.TabBar" + icon: "images/toolbar-icon16.png" + + ItemLibraryEntry { + name: "Tab Bar" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbar-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A tab-based navigation model.") + + Property { name: "width"; type: "int"; value: 240 } + } + } + + Type { + name: "QtQuick.Controls.TabButton" + icon: "images/toolbutton-icon16.png" + + ItemLibraryEntry { + name: "Tab Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A button suitable for a tab bar.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Tab Button\")" } + } + } + + Type { + name: "QtQuick.Controls.TextArea" + icon: "images/textarea-icon16.png" + + ItemLibraryEntry { + name: "Text Area" + category: "Qt Quick - Controls 2" + libraryIcon: "images/textarea-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A multi-line text box.") + + Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Area\")" } + } + } + + Type { + name: "QtQuick.Controls.TextField" + icon: "images/textfield-icon16.png" + + ItemLibraryEntry { + name: "Text Field" + category: "Qt Quick - Controls 2" + libraryIcon: "images/textfield-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A single-line text box.") + + Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Field\")" } + } + } + + Type { + name: "QtQuick.Controls.ToolBar" + icon: "images/toolbar-icon16.png" + + ItemLibraryEntry { + name: "Tool Bar" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbar-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A row that can hold actions and buttons.") + + Property { name: "width"; type: "int"; value: 360 } + } + } + + Type { + name: "QtQuick.Controls.ToolButton" + icon: "images/toolbutton-icon16.png" + + ItemLibraryEntry { + name: "Tool Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A button suitable for a tool bar.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Tool Button\")" } + } + } + + Type { + name: "QtQuick.Controls.ToolSeparator" + icon: "images/toolseparator-icon16.png" + + ItemLibraryEntry { + name: "Tool Separator" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolseparator-icon.png" + version: "2.1" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A line to separate sections in a tool bar.") + } + } + + Type { + name: "QtQuick.Controls.Tumbler" + icon: "images/tumbler-icon16.png" + + ItemLibraryEntry { + name: "Tumbler" + category: "Qt Quick - Controls 2" + libraryIcon: "images/tumbler-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + toolTip: qsTr("A spinnable wheel of selectable items.") + + Property { name: "model"; type: "int"; value: "10" } + } + } +} diff --git a/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/AssetUtils/designer/assetutils.metainfo b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/AssetUtils/designer/assetutils.metainfo new file mode 100644 index 00000000000..47abeea7a36 --- /dev/null +++ b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/AssetUtils/designer/assetutils.metainfo @@ -0,0 +1,21 @@ +MetaInfo { + Type { + name: "QtQuick3D.AssetUtils.RuntimeLoader" + icon: "images/runtimeloader16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Runtime Loader" + category: "AssetUtils" + libraryIcon: "images/runtimeloader.png" + version: "6.2" + requiredImport: "QtQuick3D.AssetUtils" + } + } +} diff --git a/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Effects/designer/effectlib.metainfo b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Effects/designer/effectlib.metainfo new file mode 100644 index 00000000000..7ad3357894c --- /dev/null +++ b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Effects/designer/effectlib.metainfo @@ -0,0 +1,401 @@ +MetaInfo { + Type { + name: "QtQuick3D.Effects.AdditiveColorGradient" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Additive Color Gradient" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Blur" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Blur" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.BrushStrokes" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Brush Strokes" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.ChromaticAberration" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Chromatic Aberration" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.ColorMaster" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Color Master" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.DepthOfFieldHQBlur" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Depth of Field HQ Blur" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Desaturate" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Desaturate" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.DistortionRipple" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Distortion Ripple" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.DistortionSphere" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Distortion Sphere" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.DistortionSpiral" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Distortion Spiral" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.EdgeDetect" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Edge Detect" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Emboss" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Emboss" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Flip" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Flip" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Fxaa" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Fxaa" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.GaussianBlur" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Gaussian Blur" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.HDRBloomTonemap" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "HDR Bloom Tonemap" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.MotionBlur" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Motion Blur" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Scatter" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Scatter" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.SCurveTonemap" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "SCurve Tonemap" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.TiltShift" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Tilt Shift" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Vignette" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Vignette" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.0" + requiredImport: "QtQuick3D.Effects" + } + } +} diff --git a/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Helpers/designer/helpers.metainfo b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Helpers/designer/helpers.metainfo new file mode 100644 index 00000000000..83492e2c811 --- /dev/null +++ b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Helpers/designer/helpers.metainfo @@ -0,0 +1,261 @@ +MetaInfo { + Type { + name: "QtQuick3D.Helpers.LookAtNode" + icon: "images/lookatnode16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Look-at Node" + category: "Helpers" + libraryIcon: "images/lookatnode.png" + version: "6.4" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.AxisHelper" + icon: "images/axishelper16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Axis Helper" + category: "Helpers" + libraryIcon: "images/axishelper.png" + version: "6.0" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.DebugView" + icon: "images/debugview16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: true + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Debug View" + category: "Helpers" + libraryIcon: "images/debugview.png" + version: "6.0" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.GridGeometry" + icon: "images/gridgeometry16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Grid Geometry" + category: "Helpers" + libraryIcon: "images/gridgeometry.png" + version: "6.0" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.HeightFieldGeometry" + icon: "images/heightfieldgeometry16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Height Field Geometry" + category: "Helpers" + libraryIcon: "images/heightfieldgeometry.png" + version: "6.4" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.InstanceModel" + icon: "images/instancemodel16.png" + + Hints { + visibleInNavigator: false + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Instance Model" + category: "Helpers" + libraryIcon: "images/instancemodel.png" + version: "6.4" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.InstanceRepeater" + icon: "images/instancerepeater16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Instance Repeater" + category: "Helpers" + libraryIcon: "images/instancerepeater.png" + version: "6.4" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.WasdController" + icon: "images/wasdcontroller16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: true + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Wasd Controller" + category: "Helpers" + libraryIcon: "images/wasdcontroller.png" + version: "6.0" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.InfiniteGrid" + icon: "images/infinitegrid16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Infinite Grid" + category: "Helpers" + libraryIcon: "images/infinitegrid.png" + version: "6.5" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.OrbitCameraController" + icon: "images/orbitcameracontroller16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: true + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Orbit Camera Controller" + category: "Helpers" + libraryIcon: "images/orbitcameracontroller.png" + version: "6.4" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.ProceduralSkyTextureData" + icon: "images/proceduralskytexturedata16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Procedural Sky Texture Data" + category: "Helpers" + libraryIcon: "images/proceduralskytexturedata.png" + version: "6.4" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.ExtendedSceneEnvironment" + icon: "images/extendedsceneenvironment16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Extended Scene Environment" + category: "Helpers" + libraryIcon: "images/extendedsceneenvironment.png" + version: "6.5" + requiredImport: "QtQuick3D.Helpers" + } + } + + Type { + name: "QtQuick3D.Helpers.LodManager" + icon: "images/lodmanager16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Lod Manager" + category: "Helpers" + libraryIcon: "images/lodmanager.png" + version: "6.5" + requiredImport: "QtQuick3D.Helpers" + } + } +} diff --git a/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/ParticleEffects/designer/particleeffects.metainfo b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/ParticleEffects/designer/particleeffects.metainfo new file mode 100644 index 00000000000..d9bc305b4ae --- /dev/null +++ b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/ParticleEffects/designer/particleeffects.metainfo @@ -0,0 +1,246 @@ +MetaInfo { + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Clouds" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_clouds.qml" } + ExtraFile { source: "images/smoke_sprite2.png" } + } + } + + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Dust" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_dust.qml" } + ExtraFile { source: "images/sphere.png" } + } + } + + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Exhaust" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_exhaust.qml" } + ExtraFile { source: "images/smoke2.png" } + } + } + + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Fire" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_fire.qml" } + ExtraFile { source: "images/smoke_sprite.png" } + ExtraFile { source: "images/sphere.png" } + ExtraFile { source: "images/color_table.png" } + ExtraFile { source: "images/color_table2.png" } + } + } + + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Heavy Rain" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_heavyrain.qml" } + ExtraFile { source: "images/rain.png" } + ExtraFile { source: "images/sphere.png" } + ExtraFile { source: "images/ripple.png" } + ExtraFile { source: "images/splash7.png" } + } + } + + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Heavy Rain - Tire Spray" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_heavyrain_tirespray.qml" } + ExtraFile { source: "images/smoke2.png" } + } + } + + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Light Rain" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_lightrain.qml" } + ExtraFile { source: "images/rain.png" } + ExtraFile { source: "images/splash7.png" } + } + } + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Light Rain - Tire Spray" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_lightrain_tirespray.qml" } + ExtraFile { source: "images/smoke2.png" } + } + } + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Rain Mist" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_rainmist.qml" } + ExtraFile { source: "images/smoke2.png" } + } + } + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Snow" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_snow.qml" } + ExtraFile { source: "images/snowflake.png" } + } + } + Type { + name: "QtQuick3D.Particle3D.ParticleSystem3D" + icon: "images/dummy16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Steam" + category: "Qt Quick 3D Particle Effects" + libraryIcon: "images/dummy.png" + version: "6.2" + requiredImport: "QtQuick3D.ParticleEffects" + QmlSource { source: "./source/particleeffect_steam.qml" } + ExtraFile { source: "images/smoke2.png" } + } + } +} diff --git a/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Particles3D/designer/particles3d.metainfo b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Particles3D/designer/particles3d.metainfo new file mode 100644 index 00000000000..d2a2999c50a --- /dev/null +++ b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Particles3D/designer/particles3d.metainfo @@ -0,0 +1,562 @@ +MetaInfo { + Type { + name: "QtQuick3D.Particles3D.Attractor3D" + icon: "images/attractor-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Attractor" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/attractor-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.DynamicBurst3D" + icon: "images/emit-burst-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Dynamic Burst" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/emit-burst-24px.png" + version: "6.3" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.EmitBurst3D" + icon: "images/emit-burst-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Emit Burst" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/emit-burst-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleEmitter3D" + icon: "images/emitter-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Emitter" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/emitter-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.Gravity3D" + icon: "images/gravity-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Gravity" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/gravity-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.ModelBlendParticle3D" + icon: "images/model-blend-particle-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Model Blend Particle" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/model-blend-particle-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.ModelParticle3D" + icon: "images/model-particle-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Model Particle" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/model-particle-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleCustomShape3D" + icon: "images/particle-custom-shape-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Custom Shape" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/particle-custom-shape-24px.png" + version: "6.3" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleModelShape3D" + icon: "images/model-shape-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Model Shape" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/model-shape-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.PointRotator3D" + icon: "images/point-rotator-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Point Rotator" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/point-rotator-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleShape3D" + icon: "images/particle-shape-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Particle Shape" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/particle-shape-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.SpriteParticle3D" + icon: "images/sprite-particle-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Sprite Particle" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/sprite-particle-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.SpriteSequence3D" + icon: "images/sprite-sequence-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Sprite Sequence" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/sprite-sequence-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleSystem3D" + icon: "images/particle-system-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Particle System" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/particle-system-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + QmlSource { source: "./source/particlesystem_template.qml" } + } + } + Type { + name: "QtQuick3D.Particles3D.TargetDirection3D" + icon: "images/target-direction-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Target Direction" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/target-direction-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.TrailEmitter3D" + icon: "images/trail-emitter-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Trail Emitter" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/trail-emitter-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.VectorDirection3D" + icon: "images/vector-direction-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Vector Direction" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/vector-direction-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.Wander3D" + icon: "images/wander-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Wander" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/wander-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleSystem3D" + icon: "images/particle-system-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Animated Sprite" + category: "Qt Quick 3D Particle System Templates" + libraryIcon: "images/particle-system-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + QmlSource { source: "./source/particlesystem_animatedsprite_template.qml" } + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleSystem3D" + icon: "images/particle-system-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Attractor System" + category: "Qt Quick 3D Particle System Templates" + libraryIcon: "images/particle-system-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + QmlSource { source: "./source/particlesystem_attractor_template.qml" } + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleSystem3D" + icon: "images/particle-system-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Burst" + category: "Qt Quick 3D Particle System Templates" + libraryIcon: "images/particle-system-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + QmlSource { source: "./source/particlesystem_burst_template.qml" } + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleSystem3D" + icon: "images/particle-system-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Model Blend" + category: "Qt Quick 3D Particle System Templates" + libraryIcon: "images/particle-system-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + QmlSource { source: "./source/particlesystem_modelblend_template.qml" } + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleSystem3D" + icon: "images/particle-system-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Model Shape" + category: "Qt Quick 3D Particle System Templates" + libraryIcon: "images/particle-system-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + QmlSource { source: "./source/particlesystem_modelshape_template.qml" } + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleSystem3D" + icon: "images/particle-system-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Particle Trail" + category: "Qt Quick 3D Particle System Templates" + libraryIcon: "images/particle-system-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + QmlSource { source: "./source/particlesystem_particletrail_template.qml" } + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleSystem3D" + icon: "images/particle-system-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Sprite" + category: "Qt Quick 3D Particle System Templates" + libraryIcon: "images/particle-system-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + QmlSource { source: "./source/particlesystem_sprite_template.qml" } + } + } + Type { + name: "QtQuick3D.Particles3D.ParticleSystem3D" + icon: "images/particle-system-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Wander" + category: "Qt Quick 3D Particle System Templates" + libraryIcon: "images/particle-system-24px.png" + version: "6.2" + requiredImport: "QtQuick3D.Particles3D" + QmlSource { source: "./source/particlesystem_wander_template.qml" } + } + } + Type { + name: "QtQuick3D.Particles3D.LineParticle3D" + icon: "images/line-particle-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Line Particle" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/line-particle-24px.png" + version: "6.4" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.Repeller3D" + icon: "images/repeller-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Repeller" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/repeller-24px.png" + version: "6.4" + requiredImport: "QtQuick3D.Particles3D" + } + } + Type { + name: "QtQuick3D.Particles3D.ScaleAffector3D" + icon: "images/scale-affector-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Scale Affector" + category: "Qt Quick 3D Particles 3D" + libraryIcon: "images/scale-affector-24px.png" + version: "6.4" + requiredImport: "QtQuick3D.Particles3D" + } + } +} diff --git a/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Physics/designer/physics.metainfo b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Physics/designer/physics.metainfo new file mode 100644 index 00000000000..874e209dc52 --- /dev/null +++ b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/Physics/designer/physics.metainfo @@ -0,0 +1,261 @@ +MetaInfo { + Type { + name: "QtQuick3D.Physics.PhysicsWorld" + icon: "images/physicsworld16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Physics World" + category: "Components" + libraryIcon: "images/physicsworld.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.TriggerBody" + icon: "images/triggerbody16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Trigger Body" + category: "Collision Bodies" + libraryIcon: "images/triggerbody.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.StaticRigidBody" + icon: "images/staticrigidbody16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Static Rigid Body" + category: "Collision Bodies" + libraryIcon: "images/staticrigidbody.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.DynamicRigidBody" + icon: "images/dynamicrigidbody16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Dynamic Rigid Body" + category: "Collision Bodies" + libraryIcon: "images/dynamicrigidbody.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.PhysicsMaterial" + icon: "images/physicsmaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Physics Material" + category: "Components" + libraryIcon: "images/physicsmaterial.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.BoxShape" + icon: "images/boxshape16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Box Shape" + category: "Collision Shapes" + libraryIcon: "images/boxshape.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.CapsuleShape" + icon: "images/capsuleshape16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Capsule Shape" + category: "Collision Shapes" + libraryIcon: "images/capsuleshape.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.ConvexMeshShape" + icon: "images/convexmeshshape16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Convex Mesh Shape" + category: "Collision Shapes" + libraryIcon: "images/convexmeshshape.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.HeightFieldShape" + icon: "images/heightfieldshape16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Height Field Shape" + category: "Collision Shapes" + libraryIcon: "images/heightfieldshape.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.PlaneShape" + icon: "images/planeshape16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Plane Shape" + category: "Collision Shapes" + libraryIcon: "images/planeshape.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.SphereShape" + icon: "images/sphereshape16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Sphere Shape" + category: "Collision Shapes" + libraryIcon: "images/sphereshape.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.TriangleMeshShape" + icon: "images/trianglemeshshape16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Triangle Mesh Shape" + category: "Collision Shapes" + libraryIcon: "images/trianglemeshshape.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } + + Type { + name: "QtQuick3D.Physics.CharacterController" + icon: "images/charactercontroller16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Character Controller" + category: "Collision Bodies" + libraryIcon: "images/charactercontroller.png" + version: "6.5" + requiredImport: "QtQuick3D.Physics" + } + } +} diff --git a/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/designer/quick3d.metainfo b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/designer/quick3d.metainfo new file mode 100644 index 00000000000..852f9081295 --- /dev/null +++ b/tests/unit/tests/unittests/projectstorage/data/qml/QtQuick3D/designer/quick3d.metainfo @@ -0,0 +1,861 @@ +MetaInfo { + Type { + name: "QtQuick3D.PerspectiveCamera" + icon: "images/camera16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Perspective Camera" + category: "Cameras" + libraryIcon: "images/camera.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "z"; type: "int"; value: 500; } + toolTip: qsTr("A camera that uses perspective projection.") + } + } + Type { + name: "QtQuick3D.OrthographicCamera" + icon: "images/camera16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Orthographic Camera" + category: "Cameras" + libraryIcon: "images/camera.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "z"; type: "int"; value: 500; } + toolTip: qsTr("A parallel projection Camera, in which an object's perceived scale is unaffected by its distance from the Camera.") + } + } + Type { + name: "QtQuick3D.FrustumCamera" + icon: "images/camera16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Frustum Camera" + category: "Cameras" + libraryIcon: "images/camera.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "z"; type: "int"; value: 500; } + toolTip: qsTr("A perspective camera with a custom frustum.") + } + } + Type { + name: "QtQuick3D.CustomCamera" + icon: "images/camera16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Custom Camera" + category: "Cameras" + libraryIcon: "images/camera.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "z"; type: "int"; value: 500; } + toolTip: qsTr("A camera with a custom projection matrix.") + } + } + Type { + name: "QtQuick3D.CustomMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: false + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Custom Material" + category: "Materials" + libraryIcon: "images/custommaterial.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "fragmentShader"; type: "QUrl"; value: "custom_material_default_shader.frag"; } + ExtraFile { source: "source/custom_material_default_shader.frag" } + toolTip: qsTr("A material with customizable vertex and fragment shaders.") + } + } + Type { + name: "QtQuick3D.DefaultMaterial" + icon: "images/material16.png" + + Hints { + visibleInNavigator: false + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Default Material" + category: "Materials" + libraryIcon: "images/material.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "diffuseColor"; type: "color"; value: "#4aee45"; } + toolTip: qsTr("A material with a specular/glossiness properties.") + } + } + Type { + name: "QtQuick3D.PrincipledMaterial" + icon: "images/material16.png" + + Hints { + visibleInNavigator: false + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Principled Material" + category: "Materials" + libraryIcon: "images/material.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "baseColor"; type: "color"; value: "#4aee45"; } + toolTip: qsTr("A material with a PBR metal/roughness properties.") + } + } + Type { + name: "QtQuick3D.SpecularGlossyMaterial" + icon: "images/material16.png" + + Hints { + visibleInNavigator: false + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Specular Glossy" + category: "Materials" + libraryIcon: "images/material.png" + version: "6.4" + requiredImport: "QtQuick3D" + Property { name: "albedoColor"; type: "color"; value: "#4aee45"; } + Property { name: "specularColor"; type: "color"; value: "#000000"; } + toolTip: qsTr("A material with a PBR specular/glossiness properties.") + } + } + Type { + name: "QtQuick3D.Texture" + icon: "images/texture16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeContainer: false + } + + ItemLibraryEntry { + name: "Texture" + category: "Textures" + libraryIcon: "images/texture.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Defines a texture for 3D objects.") + } + } + Type { + name: "QtQuick3D.CubeMapTexture" + icon: "images/cubemaptexture16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeContainer: false + } + + ItemLibraryEntry { + name: "Cube Map Texture" + category: "Textures" + libraryIcon: "images/cubemaptexture.png" + version: "6.4" + requiredImport: "QtQuick3D" + toolTip: qsTr("Defines a cube map texture for 3D objects.") + } + } + Type { + name: "QtQuick3D.DirectionalLight" + icon: "images/lightdirectional16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Directional Light" + category: "Lights" + libraryIcon: "images/lightdirectional.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("A light similar to sunlight. It emits light in one direction from an infinitely far away source.") + } + } + Type { + name: "QtQuick3D.PointLight" + icon: "images/lightpoint16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Point Light" + category: "Lights" + libraryIcon: "images/lightpoint.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("A light similar to a light bulb. It emits light equally in all directions from a central source.") + } + } + Type { + name: "QtQuick3D.SpotLight" + icon: "images/lightspot16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Spotlight" + category: "Lights" + libraryIcon: "images/lightspot.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("A spotlight emits light in one direction in a cone shape.") + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Model" + category: "Components" + libraryIcon: "images/group.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Allows you to load 3D mesh data.") + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Cube" + category: "Primitives" + libraryIcon: "images/cube.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "source"; type: "QUrl"; value: "#Cube"; } + toolTip: qsTr("A cube model.") + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Sphere" + category: "Primitives" + libraryIcon: "images/sphere.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "source"; type: "QUrl"; value: "#Sphere"; } + toolTip: qsTr("A sphere model.") + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Cylinder" + category: "Primitives" + libraryIcon: "images/cylinder.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "source"; type: "QUrl"; value: "#Cylinder"; } + toolTip: qsTr("A cylinder model.") + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Plane" + category: "Primitives" + libraryIcon: "images/plane.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "source"; type: "QUrl"; value: "#Rectangle"; } + toolTip: qsTr("A plane model.") + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Cone" + category: "Primitives" + libraryIcon: "images/cone.png" + version: "6.0" + requiredImport: "QtQuick3D" + Property { name: "source"; type: "QUrl"; value: "#Cone"; } + toolTip: qsTr("A cone model.") + } + } + Type { + name: "QtQuick3D.Node" + icon: "images/group16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Group" + category: "Components" + libraryIcon: "images/group.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("A container to keep several QtQuick3D components or scenes together.") + } + } + Type { + name: "QtQuick3D.SceneEnvironment" + icon: "images/scene16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Scene Environment" + category: "Components" + libraryIcon: "images/scene.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Configures the render settings for a scene.") + } + } + Type { + name: "QtQuick3D.View3D" + icon: "images/view3D16.png" + + ItemLibraryEntry { + name: "View3D" + category: "Items" + libraryIcon: "images/view3D.png" + version: "6.0" + requiredImport: "QtQuick3D" + QmlSource { source: "./source/view3D_template.qml" } + toolTip: qsTr("A 2D surface where a 3D scene can be rendered.") + } + } + Type { + name: "QtQuick3D.Shader" + icon: "images/shaderutil16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Shader" + category: "Custom Shader Utils" + libraryIcon: "images/shaderutil.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("A container for keeping the vertex or fragment shader codes to be used by post-processing effect.") + } + } + Type { + name: "QtQuick3D.TextureInput" + icon: "images/shaderutil16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Texture Input" + category: "Custom Shader Utils" + libraryIcon: "images/shaderutil.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Specifies a texture that gets exposed to the shader.") + } + } + Type { + name: "QtQuick3D.Pass" + icon: "images/shaderutil16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Pass" + category: "Custom Shader Utils" + libraryIcon: "images/shaderutil.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Holds a set of actions combining a list of executable render commands, an output buffer, and a list of shaders to use for rendering effects.") + } + } + Type { + name: "QtQuick3D.BufferInput" + icon: "images/shadercommand16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Buffer Input" + category: "Custom Shader Utils" + libraryIcon: "images/shadercommand.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("A command that gets added to the list of commands in the Pass of an Effect when executed.") + } + } + Type { + name: "QtQuick3D.Buffer" + icon: "images/shaderutil16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Buffer" + category: "Custom Shader Utils" + libraryIcon: "images/shaderutil.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Creates or references a color buffer to be used for a pass of an Effect.") + } + } + Type { + name: "QtQuick3D.SetUniformValue" + icon: "images/shadercommand16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Set Uniform Value" + category: "Custom Shader Utils" + libraryIcon: "images/shadercommand.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("A value that would be set when a single pass actions takes place.") + } + } + Type { + name: "QtQuick3D.Effect" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Effect" + category: "Components" + libraryIcon: "images/effect.png" + version: "6.0" + requiredImport: "QtQuick3D" + QmlSource { source: "./source/effect_template.qml" } + ExtraFile { source: "./source/effect_default_shader.frag" } + toolTip: qsTr("A method to allow the user to implement their post-processing effects on entire View3D.") + } + } + Type { + name: "QtQuick3D.Repeater3D" + icon: "images/repeater3d16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "3D Repeater" + category: "Components" + libraryIcon: "images/repeater3d.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Dynamically creates several copies of the same 3D object.") + } + } + Type { + name: "QtQuick3D.Loader3D" + icon: "images/loader3d16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Loader3D" + category: "Components" + libraryIcon: "images/loader3d.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Allows you to load 3D components dynamically.") + } + } + Type { + name: "QtQuick3D.Skeleton" + icon: "images/skeleton16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Skeleton" + category: "Components" + libraryIcon: "images/skeleton.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Defines a skeletal animation hierarchy.") + } + } + Type { + name: "QtQuick3D.MorphTarget" + icon: "images/morphtarget16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Morph Target" + category: "Components" + libraryIcon: "images/morphtarget.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("Defines the properties of a morph target.") + } + } + Type { + name: "QtQuick3D.InstanceListEntry" + icon: "images/instancelistentry16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Instance List Entry" + category: "Components" + libraryIcon: "images/instancelistentry.png" + version: "6.2" + requiredImport: "QtQuick3D" + toolTip: qsTr("One instance in an Instance List. The instance includes a set of property specifications.") + } + } + Type { + name: "QtQuick3D.InstanceList" + icon: "images/instancelist16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Instance List" + category: "Components" + libraryIcon: "images/instancelist.png" + version: "6.2" + requiredImport: "QtQuick3D" + toolTip: qsTr("Enables 3D model instancing, a lightweight 3D object replication method.") + } + } + Type { + name: "QtQuick3D.FileInstancing" + icon: "images/fileinstancing16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "File Instancing" + category: "Components" + libraryIcon: "images/fileinstancing.png" + version: "6.2" + requiredImport: "QtQuick3D" + toolTip: qsTr("A method that allows reading instance tables from XML or Qt-specific binary files.") + } + } + Type { + name: "QtQuick3D.Joint" + icon: "images/joint16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Joint" + category: "Components" + libraryIcon: "images/joint.png" + version: "6.0" + requiredImport: "QtQuick3D" + toolTip: qsTr("A transformable node that connects different parts in a skeletal animation.") + } + } + Type { + name: "QtQuick3D.ReflectionProbe" + icon: "images/reflectionProbe16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Reflection Probe" + category: "Components" + libraryIcon: "images/reflectionProbe.png" + version: "6.3" + requiredImport: "QtQuick3D" + toolTip: qsTr("Reflects the current scene to the objects.") + } + } + Type { + name: "QtQuick3D.Fog" + icon: "images/fog16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Fog" + category: "Components" + libraryIcon: "images/fog.png" + version: "6.5" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.DebugSettings" + icon: "images/debugsettings16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Debug Settings" + category: "Components" + libraryIcon: "images/debugsettings.png" + version: "6.5" + requiredImport: "QtQuick3D" + } + } + + Type { + name: "QtQuick3D.Lightmapper" + icon: "images/lightmapper16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + // Split the name to avoid ellipsis in UI + name: "Light Mapper" + category: "Components" + libraryIcon: "images/lightmapper.png" + version: "6.5" + requiredImport: "QtQuick3D" + } + } + + Type { + name: "QtQuick3D.Skin" + icon: "images/skin16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Skin" + category: "Components" + libraryIcon: "images/skin.png" + version: "6.5" + requiredImport: "QtQuick3D" + } + } + + Type { + name: "QtQuick3D.ResourceLoader" + icon: "images/resourceLoader16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Resource Loader" + category: "Components" + libraryIcon: "images/resourceLoader.png" + version: "6.2" + requiredImport: "QtQuick3D" + toolTip: qsTr("Pre-load resources for 3D scene. It makes sure that large resources are available before rendering a frame.") + } + } +} diff --git a/tests/unit/tests/unittests/projectstorage/projectstorage-test.cpp b/tests/unit/tests/unittests/projectstorage/projectstorage-test.cpp index 125e8df3aeb..d16e007cc03 100644 --- a/tests/unit/tests/unittests/projectstorage/projectstorage-test.cpp +++ b/tests/unit/tests/unittests/projectstorage/projectstorage-test.cpp @@ -996,10 +996,10 @@ protected: package.updatedSourceIds = {sourceId1, sourceId2, sourceId3}; - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "QtObject", sourceId1, sourceIdPath); - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item", sourceId2, sourceIdPath); - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item3D", sourceId3, sourceIdPath); - package.updatedPropertyEditorQmlPathSourceIds.emplace_back(sourceIdPath); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "QtObject", sourceId1, sourceIdPath6); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item", sourceId2, sourceIdPath6); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item3D", sourceId3, sourceIdPath6); + package.updatedPropertyEditorQmlPathSourceIds.emplace_back(sourceIdPath6); return package; } @@ -1013,6 +1013,7 @@ protected: traits.visibleInLibrary = FlagIs::True; annotations.emplace_back(sourceId4, + sourceIdPath6, "Object", qmlModuleId, "/path/to/icon.png", @@ -1034,6 +1035,32 @@ protected: "properties":[["color", "color", "#blue"]]}])xy"); annotations.emplace_back(sourceId5, + sourceIdPath6, + "Item", + qtQuickModuleId, + "/path/to/quick.png", + traits, + R"xy({"canBeContainer": "true", "forceClip": "false"})xy", + R"xy([{"name":"Item", + "iconPath":"/path/icon3", + "category":"Advanced Items", + "import":"QtQuick", + "toolTip":"Item is an Object", + "properties":[["x", "double", 1], ["y", "double", 2]]}])xy"); + + return annotations; + } + + auto createExtendedTypeAnnotations() const + { + auto annotations = createTypeAnnotions(); + annotations.pop_back(); + TypeTraits traits{TypeTraitsKind::Reference}; + traits.canBeContainer = FlagIs::True; + traits.visibleInLibrary = FlagIs::True; + + annotations.emplace_back(sourceId5, + sourceIdPath1, "Item", qtQuickModuleId, "/path/to/quick.png", @@ -1109,7 +1136,6 @@ protected: protected: inline static std::unique_ptr static_database; Sqlite::Database &database = *static_database; - //Sqlite::Database database{"/tmp/aaaaa.db", Sqlite::JournalMode::Wal}; inline static std::unique_ptr> static_projectStorage; QmlDesigner::ProjectStorage &storage = *static_projectStorage; QmlDesigner::SourcePathCache> sourcePathCache{ @@ -1120,14 +1146,16 @@ protected: QmlDesigner::SourcePathView path4{"/path4/to"}; QmlDesigner::SourcePathView path5{"/path5/to"}; QmlDesigner::SourcePathView path6{"/path6/to"}; - QmlDesigner::SourcePathView pathPath{"/path6/."}; + QmlDesigner::SourcePathView pathPath1{"/path1/."}; + QmlDesigner::SourcePathView pathPath6{"/path6/."}; SourceId sourceId1{sourcePathCache.sourceId(path1)}; SourceId sourceId2{sourcePathCache.sourceId(path2)}; SourceId sourceId3{sourcePathCache.sourceId(path3)}; SourceId sourceId4{sourcePathCache.sourceId(path4)}; SourceId sourceId5{sourcePathCache.sourceId(path5)}; SourceId sourceId6{sourcePathCache.sourceId(path6)}; - SourceId sourceIdPath{sourcePathCache.sourceId(path6)}; + SourceId sourceIdPath1{sourcePathCache.sourceId(pathPath1)}; + SourceId sourceIdPath6{sourcePathCache.sourceId(pathPath6)}; SourceId qmlProjectSourceId{sourcePathCache.sourceId("/path1/qmldir")}; SourceId qtQuickProjectSourceId{sourcePathCache.sourceId("/path2/qmldir")}; ModuleId qmlModuleId{storage.moduleId("Qml")}; @@ -7276,7 +7304,7 @@ TEST_F(ProjectStorage, synchronize_property_editor_adds_path) auto package{createPropertyEditorPathsSynchronizationPackage()}; package.propertyEditorQmlPaths.pop_back(); storage.synchronize(package); - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item3D", sourceId3, sourceIdPath); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item3D", sourceId3, sourceIdPath6); storage.synchronize(package); @@ -7288,7 +7316,7 @@ TEST_F(ProjectStorage, synchronize_property_editor_adds_path) TEST_F(ProjectStorage, synchronize_property_editor_with_non_existing_type_name) { auto package{createPropertyEditorPathsSynchronizationPackage()}; - package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item4D", sourceId4, sourceIdPath); + package.propertyEditorQmlPaths.emplace_back(qtQuickModuleId, "Item4D", sourceId4, sourceIdPath6); storage.synchronize(package); @@ -7308,6 +7336,21 @@ TEST_F(ProjectStorage, call_remove_type_ids_in_observer_after_synchronization) storage.synchronize(package); } +TEST_F(ProjectStorage, do_not_synchronize_type_annotations_without_type) +{ + SynchronizationPackage package; + package.typeAnnotations = createTypeAnnotions(); + package.updatedTypeAnnotationSourceIds = createUpdatedTypeAnnotionSourceIds( + package.typeAnnotations); + TypeTraits traits{TypeTraitsKind::Reference}; + traits.canBeContainer = FlagIs::True; + traits.visibleInLibrary = FlagIs::True; + + storage.synchronize(package); + + ASSERT_THAT(storage.allItemLibraryEntries(), IsEmpty()); +} + TEST_F(ProjectStorage, synchronize_type_annotation_type_traits) { auto package{createSimpleSynchronizationPackage()}; @@ -7460,6 +7503,18 @@ TEST_F(ProjectStorage, synchronize_removes_type_hints) } TEST_F(ProjectStorage, return_empty_type_hints_if_no_type_hints_exists) +{ + auto package{createSimpleSynchronizationPackage()}; + package.typeAnnotations = createTypeAnnotions(); + package.typeAnnotations[0].hintsJson.clear(); + storage.synchronize(package); + + auto typeHints = storage.typeHints(fetchTypeId(sourceId2, "QObject")); + + ASSERT_THAT(typeHints, IsEmpty()); +} + +TEST_F(ProjectStorage, return_empty_type_hints_if_no_type_annotaion_exists) { auto package{createSimpleSynchronizationPackage()}; storage.synchronize(package); @@ -7534,7 +7589,7 @@ TEST_F(ProjectStorage, synchronize_removes_item_library_entries) ASSERT_THAT(storage.allItemLibraryEntries(), IsEmpty()); } -TEST_F(ProjectStorage, synchronize_udpates_item_library_entries) +TEST_F(ProjectStorage, synchronize_updates_item_library_entries) { auto package{createSimpleSynchronizationPackage()}; package.typeAnnotations = createTypeAnnotions(); @@ -7560,6 +7615,59 @@ TEST_F(ProjectStorage, synchronize_udpates_item_library_entries) IsEmpty()))); } +TEST_F(ProjectStorage, synchronize_updates_item_library_entries_with_empty_entries) +{ + auto package{createSimpleSynchronizationPackage()}; + package.typeAnnotations = createTypeAnnotions(); + package.updatedTypeAnnotationSourceIds = createUpdatedTypeAnnotionSourceIds( + package.typeAnnotations); + storage.synchronize(package); + package.typeAnnotations[0].itemLibraryJson.clear(); + + storage.synchronize(package); + + ASSERT_THAT(storage.itemLibraryEntries(fetchTypeId(sourceId2, "QObject")), IsEmpty()); +} + +TEST_F(ProjectStorage, synchronize_type_annotation_directory_source_id) +{ + auto package{createSimpleSynchronizationPackage()}; + package.typeAnnotations = createTypeAnnotions(); + package.updatedTypeAnnotationSourceIds = createUpdatedTypeAnnotionSourceIds( + package.typeAnnotations); + + storage.synchronize(package); + + ASSERT_THAT(storage.typeAnnotationSourceIds(sourceIdPath6), + UnorderedElementsAre(sourceId4, sourceId5)); +} + +TEST_F(ProjectStorage, get_type_annotation_source_ids) +{ + auto package{createSimpleSynchronizationPackage()}; + package.typeAnnotations = createTypeAnnotions(); + package.updatedTypeAnnotationSourceIds = createUpdatedTypeAnnotionSourceIds( + package.typeAnnotations); + storage.synchronize(package); + + auto sourceIds = storage.typeAnnotationSourceIds(sourceIdPath6); + + ASSERT_THAT(sourceIds, UnorderedElementsAre(sourceId4, sourceId5)); +} + +TEST_F(ProjectStorage, get_type_annotation_directory_source_ids) +{ + auto package{createSimpleSynchronizationPackage()}; + package.typeAnnotations = createExtendedTypeAnnotations(); + package.updatedTypeAnnotationSourceIds = createUpdatedTypeAnnotionSourceIds( + package.typeAnnotations); + storage.synchronize(package); + + auto sourceIds = storage.typeAnnotationDirectorySourceIds(); + + ASSERT_THAT(sourceIds, ElementsAre(sourceIdPath1, sourceIdPath6)); +} + TEST_F(ProjectStorage, get_all_item_library_entries) { auto package{createSimpleSynchronizationPackage()}; @@ -7605,6 +7713,31 @@ TEST_F(ProjectStorage, get_all_item_library_entries) IsEmpty()))); } +TEST_F(ProjectStorage, get_all_item_library_entries_handles_no_entries) +{ + auto package{createSimpleSynchronizationPackage()}; + package.typeAnnotations = createTypeAnnotions(); + package.typeAnnotations[0].itemLibraryJson.clear(); + package.updatedTypeAnnotationSourceIds = createUpdatedTypeAnnotionSourceIds( + package.typeAnnotations); + storage.synchronize(package); + + auto entries = storage.allItemLibraryEntries(); + + ASSERT_THAT(entries, + UnorderedElementsAre( + IsItemLibraryEntry(fetchTypeId(sourceId1, "QQuickItem"), + "Item", + "/path/icon3", + "Advanced Items", + "QtQuick", + "Item is an Object", + "", + UnorderedElementsAre(IsItemLibraryProperty("x", "double", 1), + IsItemLibraryProperty("y", "double", 2)), + IsEmpty()))); +} + TEST_F(ProjectStorage, get_item_library_entries_by_type_id) { auto package{createSimpleSynchronizationPackage()}; @@ -7654,6 +7787,21 @@ TEST_F(ProjectStorage, get_no_item_library_entries_if_type_id_is_invalid) ASSERT_THAT(entries, IsEmpty()); } +TEST_F(ProjectStorage, get_no_item_library_entries_by_type_id_for_no_entries) +{ + auto package{createSimpleSynchronizationPackage()}; + package.typeAnnotations = createTypeAnnotions(); + package.typeAnnotations[0].itemLibraryJson.clear(); + package.updatedTypeAnnotationSourceIds = createUpdatedTypeAnnotionSourceIds( + package.typeAnnotations); + storage.synchronize(package); + auto typeId = fetchTypeId(sourceId2, "QObject"); + + auto entries = storage.itemLibraryEntries(typeId); + + ASSERT_THAT(entries, IsEmpty()); +} + TEST_F(ProjectStorage, get_item_library_entries_by_source_id) { auto package{createSimpleSynchronizationPackage()}; @@ -7689,6 +7837,20 @@ TEST_F(ProjectStorage, get_item_library_entries_by_source_id) IsEmpty()))); } +TEST_F(ProjectStorage, get_no_item_library_entries_by_source_id_for_no_entries) +{ + auto package{createSimpleSynchronizationPackage()}; + package.typeAnnotations = createTypeAnnotions(); + package.typeAnnotations[0].itemLibraryJson.clear(); + package.updatedTypeAnnotationSourceIds = createUpdatedTypeAnnotionSourceIds( + package.typeAnnotations); + storage.synchronize(package); + + auto entries = storage.itemLibraryEntries(sourceId2); + + ASSERT_THAT(entries, IsEmpty()); +} + TEST_F(ProjectStorage, return_type_ids_for_module_id) { auto package{createBuiltinSynchronizationPackage()}; diff --git a/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp b/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp index a28c5e4935d..a0ca9012629 100644 --- a/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp +++ b/tests/unit/tests/unittests/projectstorage/projectstorageupdater-test.cpp @@ -9,6 +9,8 @@ #include "../mocks/qmldocumentparsermock.h" #include "../mocks/qmltypesparsermock.h" +#include + #include #include #include @@ -120,7 +122,8 @@ MATCHER(PackageIsEmpty, std::string(negation ? "isn't empty" : "is empty")) && package.moduleDependencies.empty() && package.updatedModuleDependencySourceIds.empty() && package.moduleExportedImports.empty() && package.updatedModuleIds.empty() && package.propertyEditorQmlPaths.empty() - && package.updatedPropertyEditorQmlPathSourceIds.empty(); + && package.updatedPropertyEditorQmlPathSourceIds.empty() + && package.typeAnnotations.empty() && package.updatedTypeAnnotationSourceIds.empty(); } template @@ -168,7 +171,8 @@ public: secondSourceId, thirdSourceId, qmltypes1SourceId, - qmltypes2SourceId}); + qmltypes2SourceId, + itemLibraryPathSourceId}); setFilesAdded({qmldir1SourceId, qmldir2SourceId, qmldir3SourceId}); @@ -298,6 +302,8 @@ public: EXPECT_CALL(fileSystemMock, contentAsQString(Eq(path))).WillRepeatedly(Return(content)); } + auto moduleId(Utils::SmallStringView name) const { return storage.moduleId(name); } + protected: NiceMock fileSystemMock; NiceMock projectStorageMock; @@ -328,6 +334,13 @@ protected: SourceId qmlDocumentSourceId1 = sourcePathCache.sourceId("/path/First.qml"); SourceId qmlDocumentSourceId2 = sourcePathCache.sourceId("/path/First2.qml"); SourceId qmlDocumentSourceId3 = sourcePathCache.sourceId("/path/Second.qml"); + const QString itemLibraryPath = QDir::cleanPath( + UNITTEST_DIR "/../../../../share/qtcreator/qmldesigner/itemLibrary/"); + const QString qmlImportsPath = QDir::cleanPath(UNITTEST_DIR "/projectstorage/data/qml"); + SourceId itemLibraryPathSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{itemLibraryPath + "/."}); + SourceId qmlImportsPathSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{qmlImportsPath + "/."}); ModuleId qmlModuleId{storage.moduleId("Qml")}; ModuleId qmlCppNativeModuleId{storage.moduleId("Qml-cppnative")}; ModuleId exampleModuleId{storage.moduleId("Example")}; @@ -410,7 +423,7 @@ TEST_F(ProjectStorageUpdater, get_content_for_qml_dir_paths_if_file_status_is_di EXPECT_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/one/qmldir")))); EXPECT_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/two/qmldir")))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, request_file_status_from_file_system) @@ -419,7 +432,7 @@ TEST_F(ProjectStorageUpdater, request_file_status_from_file_system) EXPECT_CALL(fileSystemMock, fileStatus(Eq(directoryPathSourceId))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, get_content_for_qml_types) @@ -431,7 +444,7 @@ TEST_F(ProjectStorageUpdater, get_content_for_qml_types) EXPECT_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/example.qmltypes")))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, get_content_for_qml_types_if_project_storage_file_status_is_invalid) @@ -444,7 +457,7 @@ TEST_F(ProjectStorageUpdater, get_content_for_qml_types_if_project_storage_file_ EXPECT_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/example.qmltypes")))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, parse_qml_types) @@ -463,7 +476,7 @@ TEST_F(ProjectStorageUpdater, parse_qml_types) EXPECT_CALL(qmlTypesParserMock, parse(qmltypes2, _, _, Field(&ProjectData::moduleId, exampleCppNativeModuleId))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_is_empty_for_no_change) @@ -472,7 +485,7 @@ TEST_F(ProjectStorageUpdater, synchronize_is_empty_for_no_change) EXPECT_CALL(projectStorageMock, synchronize(PackageIsEmpty())); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qml_types) @@ -507,7 +520,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_types) Field(&SynchronizationPackage::updatedProjectSourceIds, UnorderedElementsAre(directoryPathSourceId))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qml_types_throws_if_qmltpes_does_not_exists) @@ -515,7 +528,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_types_throws_if_qmltpes_does_not_e Storage::Import import{qmlModuleId, Storage::Version{2, 3}, qmltypesPathSourceId}; setFilesDontExists({qmltypesPathSourceId}); - ASSERT_THROW(updater.update(directories, {}, {}), QmlDesigner::CannotParseQmlTypesFile); + ASSERT_THROW(updater.update(directories, {}, {}, {}), QmlDesigner::CannotParseQmlTypesFile); } TEST_F(ProjectStorageUpdater, synchronize_qml_types_are_empty_if_file_does_not_changed) @@ -528,7 +541,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_types_are_empty_if_file_does_not_c EXPECT_CALL(projectStorageMock, synchronize(PackageIsEmpty())); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, get_content_for_qml_documents) @@ -549,7 +562,7 @@ TEST_F(ProjectStorageUpdater, get_content_for_qml_documents) EXPECT_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/OldSecond.qml")))); EXPECT_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/Second.qml")))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, parse_qml_documents) @@ -570,7 +583,7 @@ TEST_F(ProjectStorageUpdater, parse_qml_documents) EXPECT_CALL(qmlDocumentParserMock, parse(qmlDocument2, _, _, _)); EXPECT_CALL(qmlDocumentParserMock, parse(qmlDocument3, _, _, _)); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, parse_qml_documents_with_non_existing_qml_document_throws) @@ -579,7 +592,7 @@ TEST_F(ProjectStorageUpdater, parse_qml_documents_with_non_existing_qml_document NonexitingType 1.0 NonexitingType.qml)"}; setContent(u"/path/qmldir", qmldir); - ASSERT_THROW(updater.update(directories, {}, {}), QmlDesigner::CannotParseQmlDocumentFile); + ASSERT_THROW(updater.update(directories, {}, {}, {}), QmlDesigner::CannotParseQmlDocumentFile); } TEST_F(ProjectStorageUpdater, synchronize_qml_documents) @@ -652,7 +665,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents) ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_add_only_qml_document_in_directory) @@ -708,7 +721,7 @@ TEST_F(ProjectStorageUpdater, synchronize_add_only_qml_document_in_directory) ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_removes_qml_document) @@ -771,7 +784,7 @@ TEST_F(ProjectStorageUpdater, synchronize_removes_qml_document) ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_removes_qml_document_in_qmldir_only) @@ -826,7 +839,7 @@ TEST_F(ProjectStorageUpdater, synchronize_removes_qml_document_in_qmldir_only) ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_add_qml_document_to_qmldir) @@ -884,7 +897,7 @@ TEST_F(ProjectStorageUpdater, synchronize_add_qml_document_to_qmldir) ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_remove_qml_document_from_qmldir) @@ -939,7 +952,7 @@ TEST_F(ProjectStorageUpdater, synchronize_remove_qml_document_from_qmldir) ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qml_documents_dont_update_if_up_to_date) @@ -1009,7 +1022,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_dont_update_if_up_to_dat ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_not_changed) @@ -1060,7 +1073,7 @@ TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_not_changed) qmlDocumentSourceId2)), Field(&SynchronizationPackage::projectDatas, IsEmpty())))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_not_changed_and_some_updated_files) @@ -1095,7 +1108,7 @@ TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_not_changed_and_some UnorderedElementsAre(qmltypesPathSourceId, qmlDocumentSourceId1)), Field(&SynchronizationPackage::projectDatas, IsEmpty())))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_not_changed_and_some_removed_files) @@ -1110,7 +1123,7 @@ TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_not_changed_and_some_rem setFilesDontChanged({qmlDirPathSourceId, qmltypes2PathSourceId, qmlDocumentSourceId2}); setFilesRemoved({qmltypesPathSourceId, qmlDocumentSourceId1}); - ASSERT_THROW(updater.update(directories, {}, {}), QmlDesigner::CannotParseQmlTypesFile); + ASSERT_THROW(updater.update(directories, {}, {}, {}), QmlDesigner::CannotParseQmlTypesFile); } TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_changed_and_some_removed_files) @@ -1162,7 +1175,7 @@ TEST_F(ProjectStorageUpdater, synchroniz_if_qmldir_file_has_changed_and_some_rem exampleCppNativeModuleId, FileType::QmlTypes)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_qml_types_files_is_empty) @@ -1177,7 +1190,7 @@ TEST_F(ProjectStorageUpdater, update_qml_types_files_is_empty) Field(&SynchronizationPackage::projectDatas, IsEmpty()), Field(&SynchronizationPackage::updatedProjectSourceIds, IsEmpty())))); - updater.update({}, {}, {}); + updater.update({}, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_qml_types_files) @@ -1205,7 +1218,7 @@ TEST_F(ProjectStorageUpdater, update_qml_types_files) Field(&SynchronizationPackage::updatedProjectSourceIds, UnorderedElementsAre(qmltypesPathSourceId, qmltypes2PathSourceId))))); - updater.update({}, {"/path/example.qmltypes", "/path/example2.qmltypes"}, {}); + updater.update({}, {"/path/example.qmltypes", "/path/example2.qmltypes"}, {}, {}); } TEST_F(ProjectStorageUpdater, dont_update_qml_types_files_if_unchanged) @@ -1230,7 +1243,7 @@ TEST_F(ProjectStorageUpdater, dont_update_qml_types_files_if_unchanged) Field(&SynchronizationPackage::updatedProjectSourceIds, UnorderedElementsAre(qmltypesPathSourceId))))); - updater.update({}, {"/path/example.qmltypes", "/path/example2.qmltypes"}, {}); + updater.update({}, {"/path/example.qmltypes", "/path/example2.qmltypes"}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qml_documents_with_different_version_but_same_type_name_and_file_name) @@ -1273,7 +1286,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_with_different_version_b ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qml_documents_with_different_type_name_but_same_version_and_file_name) @@ -1314,7 +1327,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_with_different_type_name ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, dont_synchronize_selectors) @@ -1332,7 +1345,7 @@ TEST_F(ProjectStorageUpdater, dont_synchronize_selectors) Contains(Field(&Storage::Synchronization::Type::exportedTypes, Contains(IsExportedType(exampleModuleId, "FirstType", 1, 0)))))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qmldir_dependencies) @@ -1357,7 +1370,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_dependencies) Field(&SynchronizationPackage::updatedModuleDependencySourceIds, UnorderedElementsAre(qmltypesPathSourceId, qmltypes2PathSourceId))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qmldir_dependencies_with_double_entries) @@ -1383,7 +1396,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_dependencies_with_double_entrie Field(&SynchronizationPackage::updatedModuleDependencySourceIds, UnorderedElementsAre(qmltypesPathSourceId, qmltypes2PathSourceId))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qmldir_dependencies_with_colliding_imports) @@ -1409,7 +1422,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_dependencies_with_colliding_imp Field(&SynchronizationPackage::updatedModuleDependencySourceIds, UnorderedElementsAre(qmltypesPathSourceId, qmltypes2PathSourceId))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qmldir_with_no_dependencies) @@ -1426,7 +1439,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_with_no_dependencies) Field(&SynchronizationPackage::updatedModuleDependencySourceIds, UnorderedElementsAre(qmltypesPathSourceId, qmltypes2PathSourceId))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qmldir_imports) @@ -1468,7 +1481,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_imports) Field(&SynchronizationPackage::updatedModuleIds, ElementsAre(exampleModuleId))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qmldir_with_no_imports) @@ -1482,7 +1495,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_with_no_imports) Field(&SynchronizationPackage::updatedModuleIds, ElementsAre(exampleModuleId))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qmldir_imports_with_double_entries) @@ -1525,7 +1538,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_imports_with_double_entries) Field(&SynchronizationPackage::updatedModuleIds, ElementsAre(exampleModuleId))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qmldir_optional_imports) @@ -1567,7 +1580,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qmldir_optional_imports) Field(&SynchronizationPackage::updatedModuleIds, ElementsAre(exampleModuleId))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_directories) @@ -1577,7 +1590,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_directories) QmlDesigner::SourceType::Directory, {path1SourceId, path2SourceId, path3SourceId}}))); - updater.update(directories3, {}, {}); + updater.update(directories3, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_directory_does_not_exists) @@ -1589,7 +1602,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_directory_does_not_exists) QmlDesigner::SourceType::Directory, {path1SourceId, path3SourceId}}))); - updater.update(directories3, {}, {}); + updater.update(directories3, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_directory_does_not_changed) @@ -1601,7 +1614,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_directory_does_not_changed) QmlDesigner::SourceType::Directory, {path1SourceId, path2SourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_directory_removed) @@ -1612,7 +1625,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_directory_removed) updateIdPaths(Contains( IdPaths{projectPartId, QmlDesigner::SourceType::Directory, {path2SourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_qmldirs) @@ -1622,7 +1635,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qmldirs) QmlDesigner::SourceType::QmlDir, {qmldir1SourceId, qmldir2SourceId, qmldir3SourceId}}))); - updater.update(directories3, {}, {}); + updater.update(directories3, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_qmldir_does_not_exists) @@ -1634,7 +1647,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qmldir_does_not_exists) QmlDesigner::SourceType::QmlDir, {qmldir1SourceId, qmldir3SourceId}}))); - updater.update(directories3, {}, {}); + updater.update(directories3, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_qmldir_does_not_changed) @@ -1646,7 +1659,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qmldir_does_not_changed) QmlDesigner::SourceType::QmlDir, {qmldir1SourceId, qmldir2SourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_qmldir_removed) @@ -1657,7 +1670,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qmldir_removed) updateIdPaths(Contains( IdPaths{projectPartId, QmlDesigner::SourceType::QmlDir, {qmldir2SourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_qml_files) @@ -1674,7 +1687,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qml_files) QmlDesigner::SourceType::Qml, {firstSourceId, secondSourceId, thirdSourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_only_qml_files_dont_changed) @@ -1692,7 +1705,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_only_qml_files_dont_changed) QmlDesigner::SourceType::Qml, {firstSourceId, secondSourceId, thirdSourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_only_qml_files_changed) @@ -1710,7 +1723,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_only_qml_files_changed) QmlDesigner::SourceType::Qml, {firstSourceId, secondSourceId, thirdSourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_qml_files_and_directories_dont_changed) @@ -1733,7 +1746,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qml_files_and_directories_dont QmlDesigner::SourceType::Qml, {firstSourceId, secondSourceId, thirdSourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_qmltypes_files_in_qmldir) @@ -1752,7 +1765,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qmltypes_files_in_qmldir) QmlDesigner::SourceType::QmlTypes, {qmltypes1SourceId, qmltypes2SourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_only_qmltypes_files_in_qmldir_dont_changed) @@ -1770,7 +1783,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_only_qmltypes_files_in_qmldir_ QmlDesigner::SourceType::QmlTypes, {qmltypes1SourceId, qmltypes2SourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_only_qmltypes_files_changed) @@ -1787,7 +1800,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_only_qmltypes_files_changed) QmlDesigner::SourceType::QmlTypes, {qmltypes1SourceId, qmltypes2SourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_qmltypes_files_and_directories_dont_changed) @@ -1808,7 +1821,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_qmltypes_files_and_directories QmlDesigner::SourceType::QmlTypes, {qmltypes1SourceId, qmltypes2SourceId}}))); - updater.update(directories2, {}, {}); + updater.update(directories2, {}, {}, {}); } TEST_F(ProjectStorageUpdater, update_path_watcher_builtin_qmltypes_files) @@ -1823,7 +1836,7 @@ TEST_F(ProjectStorageUpdater, update_path_watcher_builtin_qmltypes_files) QmlDesigner::SourceType::QmlTypes, {qmltypes1SourceId, qmltypes2SourceId}}))); - updater.update({}, {builtinQmltyplesPath1, builtinQmltyplesPath2}, {}); + updater.update({}, {builtinQmltyplesPath1, builtinQmltyplesPath2}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir) @@ -1890,7 +1903,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir) ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_throws_if_qml_document_does_not_exists) @@ -1898,7 +1911,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_throws_if setFilesDontExists({qmlDirPathSourceId, qmlDocumentSourceId1}); setFilesAdded({directoryPathSourceId}); - ASSERT_THROW(updater.update(directories, {}, {}), QmlDesigner::CannotParseQmlDocumentFile); + ASSERT_THROW(updater.update(directories, {}, {}, {}), QmlDesigner::CannotParseQmlDocumentFile); } TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_throws_if_directory_does_not_exists) @@ -1928,7 +1941,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_throws_if UnorderedElementsAre(directoryPathSourceId)), Field(&SynchronizationPackage::projectDatas, IsEmpty())))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_add_qml_document) @@ -1977,7 +1990,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_add_qml_d ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_removes_qml_document) @@ -2016,7 +2029,7 @@ TEST_F(ProjectStorageUpdater, synchronize_qml_documents_without_qmldir_removes_q ModuleId{}, FileType::QmlDocument)))))); - updater.update(directories, {}, {}); + updater.update(directories, {}, {}, {}); } TEST_F(ProjectStorageUpdater, watcher_updates_directories) @@ -3475,7 +3488,7 @@ TEST_F(ProjectStorageUpdater, update_property_editor_panes) Field(&SynchronizationPackage::updatedPropertyEditorQmlPathSourceIds, ElementsAre(directoryId))))); - updater.update({}, {}, propertyEditorQmlPath); + updater.update({}, {}, propertyEditorQmlPath, {}); } TEST_F(ProjectStorageUpdater, update_property_editor_specifics) @@ -3500,12 +3513,12 @@ TEST_F(ProjectStorageUpdater, update_property_editor_specifics) Field(&SynchronizationPackage::updatedPropertyEditorQmlPathSourceIds, ElementsAre(directoryId))))); - updater.update({}, {}, propertyEditorQmlPath); + updater.update({}, {}, propertyEditorQmlPath, {}); } TEST_F(ProjectStorageUpdater, update_property_editor_panes_is_empty_if_directory_has_not_changed) { - updater.update({}, {}, propertyEditorQmlPath); + updater.update({}, {}, propertyEditorQmlPath, {}); ON_CALL(fileSystemMock, fileStatus(_)).WillByDefault([](SourceId sourceId) { return FileStatus{sourceId, 1, 21}; }); @@ -3515,7 +3528,135 @@ TEST_F(ProjectStorageUpdater, update_property_editor_panes_is_empty_if_directory EXPECT_CALL(projectStorageMock, synchronize(PackageIsEmpty())); - updater.update({}, {}, propertyEditorQmlPath); + updater.update({}, {}, propertyEditorQmlPath, {}); +} + +TEST_F(ProjectStorageUpdater, update_type_annotations) +{ + auto itemSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"}); + auto buttonSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"}); + setFilesChanged({itemLibraryPathSourceId, itemSourceId, buttonSourceId}); + auto qtQuickModuleId = moduleId("QtQuick"); + auto qtQuickControlsModuleId = moduleId("QtQuick.Controls.Basic"); + QmlDesigner::Storage::TypeTraits itemTraits; + itemTraits.canBeContainer = QmlDesigner::FlagIs::True; + + EXPECT_CALL(projectStorageMock, + synchronize(AllOf(Field(&SynchronizationPackage::typeAnnotations, + IsSupersetOf({IsTypeAnnotation(itemSourceId, + itemLibraryPathSourceId, + "Item", + qtQuickModuleId, + StartsWith(itemLibraryPath), + _, + _, + _), + IsTypeAnnotation(buttonSourceId, + itemLibraryPathSourceId, + "Button", + qtQuickControlsModuleId, + StartsWith(itemLibraryPath), + _, + _, + _)})), + Field(&SynchronizationPackage::updatedTypeAnnotationSourceIds, + IsSupersetOf({itemSourceId, buttonSourceId}))))); + + updater.update({}, {}, {}, {itemLibraryPath}); +} + +TEST_F(ProjectStorageUpdater, update_changed_type_annotation) +{ + auto itemSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"}); + auto buttonSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"}); + setFilesDontChanged({itemLibraryPathSourceId}); + setFilesChanged({itemSourceId, buttonSourceId}); + auto qtQuickModuleId = moduleId("QtQuick"); + auto qtQuickControlsModuleId = moduleId("QtQuick.Controls.Basic"); + QmlDesigner::Storage::TypeTraits itemTraits; + itemTraits.canBeContainer = QmlDesigner::FlagIs::True; + + EXPECT_CALL(projectStorageMock, + synchronize(AllOf(Field(&SynchronizationPackage::typeAnnotations, + IsSupersetOf({IsTypeAnnotation(itemSourceId, + itemLibraryPathSourceId, + "Item", + qtQuickModuleId, + StartsWith(itemLibraryPath), + _, + _, + _), + IsTypeAnnotation(buttonSourceId, + itemLibraryPathSourceId, + "Button", + qtQuickControlsModuleId, + StartsWith(itemLibraryPath), + _, + _, + _)})), + Field(&SynchronizationPackage::updatedTypeAnnotationSourceIds, + IsSupersetOf({itemSourceId, buttonSourceId}))))); + + updater.update({}, {}, {}, {itemLibraryPath}); +} + +TEST_F(ProjectStorageUpdater, update_type_annotations_removed_meta_info_file) +{ + ON_CALL(fileSystemMock, fileStatus(_)).WillByDefault([](SourceId sourceId) { + return FileStatus{sourceId, 1, 21}; + }); + ON_CALL(projectStorageMock, fetchFileStatus(_)).WillByDefault([](SourceId sourceId) { + return FileStatus{sourceId, 1, 21}; + }); + auto itemSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"}); + auto buttonSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"}); + ON_CALL(projectStorageMock, typeAnnotationDirectorySourceIds()) + .WillByDefault(Return(QmlDesigner::SmallSourceIds<64>{itemLibraryPathSourceId})); + ON_CALL(projectStorageMock, typeAnnotationSourceIds(itemLibraryPathSourceId)) + .WillByDefault(Return(QmlDesigner::SmallSourceIds<4>{itemSourceId, buttonSourceId})); + setFilesChanged({itemLibraryPathSourceId}); + setFilesDontChanged({itemSourceId, buttonSourceId}); + + EXPECT_CALL(projectStorageMock, + synchronize(AllOf(Field(&SynchronizationPackage::typeAnnotations, IsEmpty()), + Field(&SynchronizationPackage::updatedTypeAnnotationSourceIds, + IsSupersetOf({itemSourceId, buttonSourceId}))))); + + updater.update({}, {}, {}, {itemLibraryPath}); +} + +TEST_F(ProjectStorageUpdater, update_type_annotations_removed_directory) +{ + ON_CALL(fileSystemMock, fileStatus(_)).WillByDefault([](SourceId sourceId) { + return FileStatus{sourceId, 1, 21}; + }); + ON_CALL(projectStorageMock, fetchFileStatus(_)).WillByDefault([](SourceId sourceId) { + return FileStatus{sourceId, 1, 21}; + }); + auto itemSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"}); + auto buttonSourceId = sourcePathCache.sourceId( + QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"}); + ON_CALL(projectStorageMock, typeAnnotationDirectorySourceIds()) + .WillByDefault(Return(QmlDesigner::SmallSourceIds<64>{ + itemLibraryPathSourceId, + })); + ON_CALL(projectStorageMock, typeAnnotationSourceIds(itemLibraryPathSourceId)) + .WillByDefault(Return(QmlDesigner::SmallSourceIds<4>{itemSourceId, buttonSourceId})); + setFilesDontExists({itemLibraryPathSourceId, buttonSourceId, itemSourceId}); + + EXPECT_CALL(projectStorageMock, + synchronize(AllOf(Field(&SynchronizationPackage::typeAnnotations, IsEmpty()), + Field(&SynchronizationPackage::updatedTypeAnnotationSourceIds, + IsSupersetOf({buttonSourceId, itemSourceId}))))); + + updater.update({}, {}, {}, {itemLibraryPath}); } } // namespace diff --git a/tests/unit/tests/unittests/projectstorage/typeannotationreader-test.cpp b/tests/unit/tests/unittests/projectstorage/typeannotationreader-test.cpp index ed5c1a0778b..b90a4adf1be 100644 --- a/tests/unit/tests/unittests/projectstorage/typeannotationreader-test.cpp +++ b/tests/unit/tests/unittests/projectstorage/typeannotationreader-test.cpp @@ -3,6 +3,7 @@ #include "../utils/googletest.h" +#include #include #include @@ -11,24 +12,6 @@ namespace { -template -auto IsTypeAnnotation(QmlDesigner::SourceId sourceId, - Utils::SmallStringView typeName, - QmlDesigner::ModuleId moduleId, - Utils::SmallStringView iconPath, - QmlDesigner::Storage::TypeTraits traits, - HintsJsonMatcher hintsJsonMatcher, - ItemLibraryJsonMatcher itemLibraryJsonMatcher) -{ - using QmlDesigner::Storage::Synchronization::TypeAnnotation; - return AllOf(Field("sourceId", &TypeAnnotation::sourceId, sourceId), - Field("typeName", &TypeAnnotation::typeName, typeName), - Field("moduleId", &TypeAnnotation::moduleId, moduleId), - Field("iconPath", &TypeAnnotation::iconPath, iconPath), - Field("traits", &TypeAnnotation::traits, traits), - Field("hintsJson", &TypeAnnotation::hintsJson, hintsJsonMatcher), - Field("itemLibraryJson", &TypeAnnotation::itemLibraryJson, itemLibraryJsonMatcher)); -} class TypeAnnotationReader : public testing::Test { @@ -56,6 +39,7 @@ protected: QmlDesigner::ProjectStorage &storage = *static_projectStorage; QmlDesigner::Storage::TypeAnnotationReader reader{storage}; QmlDesigner::SourceId sourceId = QmlDesigner::SourceId::create(33); + QmlDesigner::SourceId directorySourceId = QmlDesigner::SourceId::create(77); }; TEST_F(TypeAnnotationReader, parse_type) @@ -73,10 +57,11 @@ TEST_F(TypeAnnotationReader, parse_type) })xy"}; QmlDesigner::Storage::TypeTraits traits; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, UnorderedElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -84,6 +69,7 @@ TEST_F(TypeAnnotationReader, parse_type) IsEmpty(), IsEmpty()), IsTypeAnnotation(sourceId, + directorySourceId, "Item", moduleId("QtQuick"), "/path/images/item-icon16.png", @@ -109,10 +95,11 @@ TEST_F(TypeAnnotationReader, parse_true_canBeContainer) QmlDesigner::Storage::TypeTraits traits; traits.canBeContainer = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -138,10 +125,11 @@ TEST_F(TypeAnnotationReader, parse_true_forceClip) QmlDesigner::Storage::TypeTraits traits; traits.forceClip = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -167,10 +155,11 @@ TEST_F(TypeAnnotationReader, parse_true_doesLayoutChildren) QmlDesigner::Storage::TypeTraits traits; traits.doesLayoutChildren = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -196,10 +185,11 @@ TEST_F(TypeAnnotationReader, parse_true_canBeDroppedInFormEditor) QmlDesigner::Storage::TypeTraits traits; traits.canBeDroppedInFormEditor = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -225,10 +215,11 @@ TEST_F(TypeAnnotationReader, parse_true_canBeDroppedInNavigator) QmlDesigner::Storage::TypeTraits traits; traits.canBeDroppedInNavigator = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -254,10 +245,11 @@ TEST_F(TypeAnnotationReader, parse_true_canBeDroppedInView3D) QmlDesigner::Storage::TypeTraits traits; traits.canBeDroppedInView3D = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -283,10 +275,11 @@ TEST_F(TypeAnnotationReader, parse_true_isMovable) QmlDesigner::Storage::TypeTraits traits; traits.isMovable = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -312,10 +305,11 @@ TEST_F(TypeAnnotationReader, parse_true_isResizable) QmlDesigner::Storage::TypeTraits traits; traits.isResizable = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -341,10 +335,11 @@ TEST_F(TypeAnnotationReader, parse_true_hasFormEditorItem) QmlDesigner::Storage::TypeTraits traits; traits.hasFormEditorItem = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -370,10 +365,11 @@ TEST_F(TypeAnnotationReader, parse_true_isStackedContainer) QmlDesigner::Storage::TypeTraits traits; traits.isStackedContainer = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -399,10 +395,11 @@ TEST_F(TypeAnnotationReader, parse_true_takesOverRenderingOfChildren) QmlDesigner::Storage::TypeTraits traits; traits.takesOverRenderingOfChildren = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -428,10 +425,11 @@ TEST_F(TypeAnnotationReader, parse_true_visibleInNavigator) QmlDesigner::Storage::TypeTraits traits; traits.visibleInNavigator = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -457,10 +455,11 @@ TEST_F(TypeAnnotationReader, parse_true_visibleInLibrary) QmlDesigner::Storage::TypeTraits traits; traits.visibleInLibrary = FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -485,10 +484,11 @@ TEST_F(TypeAnnotationReader, parse_false) })xy"}; QmlDesigner::Storage::TypeTraits traits; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -526,10 +526,11 @@ TEST_F(TypeAnnotationReader, parse_complex_expression) QmlDesigner::Storage::TypeTraits itemTraits; itemTraits.canBeContainer = QmlDesigner::FlagIs::True; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, UnorderedElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -538,6 +539,7 @@ TEST_F(TypeAnnotationReader, parse_complex_expression) "visibleNonDefaultProperties":"layer.effect"})xy"), IsEmpty()), IsTypeAnnotation(sourceId, + directorySourceId, "Item", moduleId("QtQuick"), "/path/images/item-icon16.png", @@ -573,10 +575,11 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry) })xy"}; QmlDesigner::Storage::TypeTraits traits; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -584,12 +587,12 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry) IsEmpty(), StrippedStringEq(R"xy([ {"category":"Qt Quick - Controls 2", - "iconPath":"images/frame-icon.png", + "iconPath":"/path/images/frame-icon.png", "import":"QtQuick.Controls", "name":"Frame", "toolTip":"qsTr(\"An untitled container for a group of controls.\")"}, {"category":"Qt Quick - Controls 2", - "iconPath":"images/frame-icon.png", + "iconPath":"/path/images/frame-icon.png", "import":"QtQuick.Controls", "name":"Large Frame", "toolTip":"qsTr(\"An large container for a group of controls.\")"}] @@ -629,10 +632,11 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_with_properties) })xy"}; QmlDesigner::Storage::TypeTraits traits; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), "/path/images/frame-icon16.png", @@ -640,13 +644,13 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_with_properties) IsEmpty(), StrippedStringEq(R"xy([ {"category":"Qt Quick - Controls 2", - "iconPath":"images/frame-icon.png", + "iconPath":"/path/images/frame-icon.png", "import":"QtQuick.Controls", "name":"Frame", "properties":[["width","int",200.0],["height","int",100.0]], "toolTip":"qsTr(\"An untitled container for a group of controls.\")"}, {"category":"Qt Quick - Controls 2", - "iconPath":"images/frame-icon.png", + "iconPath":"/path/images/frame-icon.png", "import":"QtQuick.Controls", "name":"Large Frame", "properties":[["width","int",2000.0],["height","int",1000.0]], @@ -679,13 +683,14 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_template_path) })xy"}; QmlDesigner::Storage::TypeTraits traits; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), - {}, + Utils::SmallStringView{}, traits, IsEmpty(), StrippedStringEq(R"xy([ @@ -693,9 +698,10 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_template_path) "templatePath":"/path/templates/frame.qml"}] )xy")), IsTypeAnnotation(sourceId, + directorySourceId, "Item", moduleId("QtQuick"), - {}, + Utils::SmallStringView{}, traits, IsEmpty(), StrippedStringEq(R"xy([ @@ -730,13 +736,14 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_extra_file_paths) })xy"}; QmlDesigner::Storage::TypeTraits traits; - auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId); + auto annotations = reader.parseTypeAnnotation(content, "/path", sourceId, directorySourceId); ASSERT_THAT(annotations, ElementsAre(IsTypeAnnotation(sourceId, + directorySourceId, "Frame", moduleId("QtQuick.Controls"), - {}, + Utils::SmallStringView{}, traits, IsEmpty(), StrippedStringEq(R"xy([ @@ -744,9 +751,10 @@ TEST_F(TypeAnnotationReader, parse_item_library_entry_extra_file_paths) "name":"Frame"}] )xy")), IsTypeAnnotation(sourceId, + directorySourceId, "Item", moduleId("QtQuick"), - {}, + Utils::SmallStringView{}, traits, IsEmpty(), StrippedStringEq(R"xy([ diff --git a/tests/unit/tests/unittests/utils/smallstring-test.cpp b/tests/unit/tests/unittests/utils/smallstring-test.cpp index 3594c838c96..71090f8760a 100644 --- a/tests/unit/tests/unittests/utils/smallstring-test.cpp +++ b/tests/unit/tests/unittests/utils/smallstring-test.cpp @@ -1326,6 +1326,19 @@ TEST(SmallString, starts_with_string_view) ASSERT_FALSE(text.startsWith('@')); } +TEST(SmallString, starts_with_qstringview) +{ + using namespace Qt::StringLiterals; + SmallString text("$column"); + + ASSERT_FALSE(text.startsWith(u"$columnxxx"_s)); + ASSERT_TRUE(text.startsWith(u"$column"_s)); + ASSERT_TRUE(text.startsWith(u"$col"_s)); + ASSERT_FALSE(text.startsWith(u"col"_s)); + ASSERT_TRUE(text.startsWith(u"$"_s)); + ASSERT_FALSE(text.startsWith(u"@"_s)); +} + TEST(SmallString, ends_with) { SmallString text("/my/path");