From b81f674f31f2fb3c0067ca38be0c4126555b7d16 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 3 Apr 2025 16:15:25 +0300 Subject: [PATCH] QmlDesigner: Add metainfo and specifics of various modules - Saferenderer - Charts - Graphs - VirtualKeyboard - Quick3DPhysics Various specifics were copied from modules into QDS with minimal updates to fix most glaring errors/layout issues. It is not guaranteed they are all up to date and fully functional. Charts and Graphs cannot be enabled for project storage yet, as their .qmltypes files contain duplicate entries. When they are fixed in Qt version QDS targets, these modules can be enabled for project storage. Fixes: QDS-15020 Change-Id: Id3e3c76c3940f2ee05359b9274c82791b8d95c38 Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- .../itemLibrary/images/areaseries-icon.png | Bin 0 -> 341 bytes .../images/areaseries-polar-icon.png | Bin 0 -> 447 bytes .../itemLibrary/images/bars3d-icon.png | Bin 0 -> 261 bytes .../itemLibrary/images/bars3d-icon16.png | Bin 0 -> 203 bytes .../itemLibrary/images/barseries-icon.png | Bin 0 -> 136 bytes .../itemLibrary/images/boxplotseries-icon.png | Bin 0 -> 162 bytes .../itemLibrary/images/boxshape.png | Bin 0 -> 473 bytes .../itemLibrary/images/boxshape16.png | Bin 0 -> 354 bytes .../itemLibrary/images/boxshape@2x.png | Bin 0 -> 657 bytes .../itemLibrary/images/capsuleshape.png | Bin 0 -> 404 bytes .../itemLibrary/images/capsuleshape16.png | Bin 0 -> 280 bytes .../itemLibrary/images/capsuleshape@2x.png | Bin 0 -> 877 bytes .../images/charactercontroller.png | Bin 0 -> 428 bytes .../images/charactercontroller16.png | Bin 0 -> 280 bytes .../images/charactercontroller@2x.png | Bin 0 -> 831 bytes .../itemLibrary/images/chartview-icon16.png | Bin 0 -> 244 bytes .../itemLibrary/images/convexmeshshape.png | Bin 0 -> 745 bytes .../itemLibrary/images/convexmeshshape16.png | Bin 0 -> 332 bytes .../itemLibrary/images/convexmeshshape@2x.png | Bin 0 -> 1904 bytes .../itemLibrary/images/dynamicrigidbody.png | Bin 0 -> 414 bytes .../itemLibrary/images/dynamicrigidbody16.png | Bin 0 -> 311 bytes .../images/dynamicrigidbody@2x.png | Bin 0 -> 778 bytes .../itemLibrary/images/heightfieldshape.png | Bin 0 -> 456 bytes .../itemLibrary/images/heightfieldshape16.png | Bin 0 -> 240 bytes .../images/heightfieldshape@2x.png | Bin 0 -> 1129 bytes .../images/horizontalbarseries-icon.png | Bin 0 -> 136 bytes .../horizontalpercentbarseries-icon.png | Bin 0 -> 151 bytes .../horizontalstackedbarseries-icon.png | Bin 0 -> 152 bytes .../itemLibrary/images/lineseries-icon.png | Bin 0 -> 258 bytes .../images/lineseries-polar-icon.png | Bin 0 -> 440 bytes .../images/percentbarseries-icon.png | Bin 0 -> 151 bytes .../itemLibrary/images/physicsmaterial.png | Bin 0 -> 559 bytes .../itemLibrary/images/physicsmaterial16.png | Bin 0 -> 357 bytes .../itemLibrary/images/physicsmaterial@2x.png | Bin 0 -> 1095 bytes .../itemLibrary/images/physicsworld.png | Bin 0 -> 441 bytes .../itemLibrary/images/physicsworld16.png | Bin 0 -> 316 bytes .../itemLibrary/images/physicsworld@2x.png | Bin 0 -> 846 bytes .../itemLibrary/images/pieseries-icon.png | Bin 0 -> 346 bytes .../itemLibrary/images/planeshape.png | Bin 0 -> 473 bytes .../itemLibrary/images/planeshape16.png | Bin 0 -> 299 bytes .../itemLibrary/images/planeshape@2x.png | Bin 0 -> 1084 bytes .../itemLibrary/images/scatter3d-icon.png | Bin 0 -> 244 bytes .../itemLibrary/images/scatter3d-icon16.png | Bin 0 -> 190 bytes .../itemLibrary/images/scatterseries-icon.png | Bin 0 -> 182 bytes .../images/scatterseries-polar-icon.png | Bin 0 -> 345 bytes .../itemLibrary/images/sphereshape.png | Bin 0 -> 567 bytes .../itemLibrary/images/sphereshape16.png | Bin 0 -> 336 bytes .../itemLibrary/images/sphereshape@2x.png | Bin 0 -> 1179 bytes .../itemLibrary/images/splineseries-icon.png | Bin 0 -> 303 bytes .../images/splineseries-polar-icon.png | Bin 0 -> 415 bytes .../images/stackedbarseries-icon.png | Bin 0 -> 154 bytes .../itemLibrary/images/staticrigidbody.png | Bin 0 -> 375 bytes .../itemLibrary/images/staticrigidbody16.png | Bin 0 -> 298 bytes .../itemLibrary/images/staticrigidbody@2x.png | Bin 0 -> 690 bytes .../itemLibrary/images/surface3d-icon.png | Bin 0 -> 314 bytes .../itemLibrary/images/surface3d-icon16.png | Bin 0 -> 215 bytes .../itemLibrary/images/trianglemeshshape.png | Bin 0 -> 621 bytes .../images/trianglemeshshape16.png | Bin 0 -> 396 bytes .../images/trianglemeshshape@2x.png | Bin 0 -> 1364 bytes .../itemLibrary/images/triggerbody.png | Bin 0 -> 594 bytes .../itemLibrary/images/triggerbody16.png | Bin 0 -> 463 bytes .../itemLibrary/images/triggerbody@2x.png | Bin 0 -> 1051 bytes .../qmldesigner/itemLibrary/qtcharts.metainfo | 166 +++++ .../qmldesigner/itemLibrary/qtgraphs.metainfo | 111 +++ .../itemLibrary/qtsaferenderer.metainfo | 47 ++ .../itemLibrary/qtvirtualkeyboard.metainfo | 35 + .../itemLibrary/quick3d_physics.metainfo | 261 +++++++ .../itemLibrary/source/AreaSeries.qml | 20 + .../itemLibrary/source/BarSeries.qml | 17 + .../qmldesigner/itemLibrary/source/Bars3D.qml | 28 + .../itemLibrary/source/BoxPlotSeries.qml | 17 + .../itemLibrary/source/Graphs2DAreaSeries.qml | 52 ++ .../itemLibrary/source/Graphs2DBarSeries.qml | 31 + .../itemLibrary/source/Graphs2DLineSeries.qml | 47 ++ .../itemLibrary/source/Graphs2DPieSeries.qml | 17 + .../source/Graphs2DScatterSeries.qml | 47 ++ .../source/Graphs2DSplineSeries.qml | 47 ++ .../source/HorizontalBarSeries.qml | 17 + .../source/HorizontalPercentBarSeries.qml | 17 + .../source/HorizontalStackedBarSeries.qml | 17 + .../itemLibrary/source/LineSeries.qml | 18 + .../itemLibrary/source/PercentBarSeries.qml | 17 + .../itemLibrary/source/PieSeries.qml | 17 + .../itemLibrary/source/PolarAreaSeries.qml | 48 ++ .../itemLibrary/source/PolarLineSeries.qml | 27 + .../itemLibrary/source/PolarScatterSeries.qml | 26 + .../itemLibrary/source/PolarSplineSeries.qml | 27 + .../itemLibrary/source/Scatter3D.qml | 28 + .../itemLibrary/source/ScatterSeries.qml | 18 + .../itemLibrary/source/SplineSeries.qml | 18 + .../itemLibrary/source/StackedBarSeries.qml | 17 + .../itemLibrary/source/Surface3D.qml | 28 + .../Qt/SafeRenderer/SafeImagePane.qml | 156 +++++ .../Qt/SafeRenderer/SafePicturePane.qml | 163 +++++ .../Qt/SafeRenderer/SafeTextPane.qml | 269 +++++++ .../QtCharts/ChartViewSpecifics.qml | 123 ++++ .../QtGraphs/Bars3DSpecifics.qml | 276 ++++++++ .../QtGraphs/GraphsCameraSection.qml | 189 +++++ .../QtGraphs/GraphsSection.qml | 124 ++++ .../QtGraphs/GraphsViewSpecifics.qml | 103 +++ .../QtGraphs/Scatter3DSpecifics.qml | 65 ++ .../QtGraphs/Surface3DSpecifics.qml | 192 +++++ .../QtQuick3D/Physics/BoxShapeSection.qml | 85 +++ .../QtQuick3D/Physics/BoxShapeSpecifics.qml | 22 + .../QtQuick3D/Physics/CapsuleShapeSection.qml | 50 ++ .../Physics/CapsuleShapeSpecifics.qml | 22 + .../Physics/CharacterControllerSection.qml | 188 +++++ .../Physics/CharacterControllerSpecifics.qml | 26 + .../Physics/CollisionShapeSection.qml | 34 + .../Physics/ConvexMeshShapeSection.qml | 28 + .../Physics/ConvexMeshShapeSpecifics.qml | 22 + .../Physics/DynamicRigidBodySection.qml | 658 ++++++++++++++++++ .../Physics/DynamicRigidBodySpecifics.qml | 26 + .../Physics/HeightFieldShapeSection.qml | 98 +++ .../Physics/HeightFieldShapeSpecifics.qml | 23 + .../QtQuick3D/Physics/NodeSection.qml | 350 ++++++++++ .../QtQuick3D/Physics/PhysicsBodySection.qml | 34 + .../Physics/PhysicsMaterialSection.qml | 69 ++ .../Physics/PhysicsMaterialSpecifics.qml | 13 + .../QtQuick3D/Physics/PhysicsNodeSection.qml | 103 +++ .../QtQuick3D/Physics/PhysicsWorldSection.qml | 266 +++++++ .../Physics/PhysicsWorldSpecifics.qml | 14 + .../QtQuick3D/Physics/PlaneShapeSpecifics.qml | 18 + .../QtQuick3D/Physics/SphereShapeSection.qml | 32 + .../Physics/SphereShapeSpecifics.qml | 22 + .../Physics/StaticRigidBodySpecifics.qml | 22 + .../Physics/TriangleMeshShapeSection.qml | 29 + .../Physics/TriangleMeshShapeSpecifics.qml | 22 + .../Physics/TriggerBodySpecifics.qml | 18 + .../project/qmldesignerprojectmanager.cpp | 5 + 130 files changed, 5242 insertions(+) create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/areaseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/areaseries-polar-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/barseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/boxplotseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/boxshape.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/boxshape16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/boxshape@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/chartview-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/horizontalbarseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/horizontalpercentbarseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/horizontalstackedbarseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/lineseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/lineseries-polar-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/percentbarseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/physicsworld.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/physicsworld16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/physicsworld@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/pieseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/planeshape.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/planeshape16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/planeshape@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-polar-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/sphereshape.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/sphereshape16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/sphereshape@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/splineseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/splineseries-polar-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/stackedbarseries-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/triggerbody.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/triggerbody16.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/images/triggerbody@2x.png create mode 100644 share/qtcreator/qmldesigner/itemLibrary/qtcharts.metainfo create mode 100644 share/qtcreator/qmldesigner/itemLibrary/qtgraphs.metainfo create mode 100644 share/qtcreator/qmldesigner/itemLibrary/qtsaferenderer.metainfo create mode 100644 share/qtcreator/qmldesigner/itemLibrary/qtvirtualkeyboard.metainfo create mode 100644 share/qtcreator/qmldesigner/itemLibrary/quick3d_physics.metainfo create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/AreaSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/BarSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/Bars3D.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/BoxPlotSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DAreaSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DBarSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DLineSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DPieSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DScatterSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DSplineSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/HorizontalBarSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/HorizontalPercentBarSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/HorizontalStackedBarSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/LineSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/PercentBarSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/PieSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/PolarAreaSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/PolarLineSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/PolarScatterSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/PolarSplineSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/Scatter3D.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/ScatterSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/SplineSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/StackedBarSeries.qml create mode 100644 share/qtcreator/qmldesigner/itemLibrary/source/Surface3D.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeImagePane.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafePicturePane.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeTextPane.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtCharts/ChartViewSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Bars3DSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsCameraSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsViewSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Scatter3DSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Surface3DSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CollisionShapeSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/NodeSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsBodySection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsNodeSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PlaneShapeSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/StaticRigidBodySpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriggerBodySpecifics.qml diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..590aaaa284747bc3a5b9c132752d20f7f4e486ca GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhv#aGM+AuAsWH86HogcN)T{6 zU;i*IiX&vA_k>LsA5{N1weIe&cc)yG7jSQxAtrEmX-UkK2`hTodDu7TrM%g1R3*mcDvvxb#?!?9tshQ!^5O zU%E0!|Ij(D#Jy@fj7PYXw=*sKS~Zucr7);5OT zDwEvR1|PDQO|%hFJ600g;8gr_PwwRd>l=&aT)gz6kul@#wpG7uWUnx2RQZRAGz9l7 wxT5|zfp2@zJ+B8HmUSEU-Tz>`NaW{FHuII0lXA@WIf25<)78&qol`;+0D4=T<^TWy literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-polar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-polar-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..af72238d692a5b7a18494e30af9cec88a61c5bdf GIT binary patch literal 447 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhv#aZJsWUAsWHC7jNfXb`W5D zP=9Un?y@XtYk@0^ycGIYwKzP|tw@~LA}t^kFx5Guc$4h$*I%o4c+6V;C*1h+-LwAw zCVodZ*Vu5*k65?(_t6Q~PUkntpNP`?Syqr&KY{s3W`XZ#{TQE1%d8t1ro3FmzUb|r z=ZCwCgSi!Km`*HOdSG|q?B}!3-@hj!YOsl+W^++3fAuu=!apyrCyA8{hy`qnbA6tA zMYHFYncdoA^+haZOTzcO$+quWU+dy2uj9hGrulC`-CZVzTdx=&d^^DBp*R2RdlrTi zc8fL*LsjYERmb1|&dylNy^3eL+Y|v|LE)qCm&HdZ+3Z(Ln&c55^tyS6T}zSes|Azx zi}ZgjSC!DY;LFf+R#IU1OL=RDDF-4GmIp1kBqjVbXn$FC2Tw{e*XDC2%gnpw!>l>D zmzc&aioJ$Z)XX zocM!vy1?b6whE!hNBRQ#kFJC>RSQKjJ-KQ>zn??l=12B*%Z@Lvq6j!c3}#1>7M9Q;YGNFj--M#y^OX$FRD;S&8j<=65+ O{_}M8b6Mw<&;$S;sc7;5 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..ce5d75ad4f31738d8179ac9279ac4c7cd478424f GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4h9AW2CEqh_A)RqO!9Pb43U_cJTb|ERp&ob zzz^w&fA&dkVn5D*dT-zH?9%1ERliLqeC&TJAMxn%tks`%coG`_3oNbwcX+FT!HK9p z`+sm`u|*u+m^|;z{)wS~*o^-DYhT&GX;AR;-@Y2*MNj!Xp8bzv^AB4wZNCCzTRexe zBU4q6y`bLJ-=F_zpEl=J;53~w^QUe=U*}t0m(zM7@0l5PANBaHAY%=39fPNi}<&D zQ8k=?g*ZIG3c8mWbd%n*46-w}P0ZN} nNz)ZYI$j5GGEIAbM30$)b-U^B@YjDPgRJm$^>bP0l+XkK39&B$ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxplotseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxplotseries-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..25e9fe692ec8ef73759c125fe2f6a1e2250f43ec GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhvz^nVv3=AsXkCCnlvHV5{5w z=lc<@jlEC*E2rfM?T`4EeD%Nwd9{s_dQZ3~|KNXq@6Y1iC6DFH7XK66(%kU$`vl!~ ztFo^1je!wNg1aOCbFg*lbIRT6jAdi!eQ0;yewT7F O$Z}6tKbLh*2~7Za6+e^! literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape.png new file mode 100644 index 0000000000000000000000000000000000000000..23775571c50ad52efe2d7a87c66e171e20e17c6c GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJo7kIijhIn+oy<(ps5-4!| zqkmuUiG^j?q9T`W*dVC8Wdny4Q&{tj6}3{1(#gt#YglxzI6Xa(R7Yc3fUz zcc6Mt_Rf2cLeu2_1+y6R%l~Lt+3~~5>&HyX&d58b&P*0Gyg%ij)VqhK@6w z1&rxRkE*tx(^d*I-hAfC7RQgTx5!!>1mFDM!MuW<$8p}{7#E#uH$`Gigas#0{oDP+ zX(^lZ!v78R3<29-#=SXrCVA@Txi8Y6c{TqR>q$@3SIWxuI$(O|K&p+L)%(X<^UN5k zEbtUg%x5d?&k_*yw&=2+S-Ilnp;cXs zm0bGV9_z(6%oE7bI)Chyj8XCYgYTn`McPPByn0adjk~>4S~jEe1lAh;FzMW*hdV58 fTw1@kj%oA9jgt>Ps6N5Kz`)??>gTe~DWM4f$Pv-# literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape16.png new file mode 100644 index 0000000000000000000000000000000000000000..18707ce24342168b3130a00721e186fe45de61b1 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7H9cJ%Lo9laUbfAi5-7m> zAl>>a5EjJT1>Pp(TCL zEv9=fcYa)%^93b#z4EjfmY+-Y|93iu>OPjXOD<}B&vsAE@`cp&=nI^6iRvfcS6&R= z+JAPHl$zxEH{Ngm^(ps6xpsfxx*clzM%bgMhI0~UT$$%NOEt@Nt9Jhg3XQKm_`N{h zes*2Q$2~stH%v-dpPgeYp=z1=>vys4AMJJX63m*fuDX@=N%qd07shuEY^@aaDUj~} zc%bCc_E~pq>o;7F|H!Z^OE&)llXk_W`%a&$TNKL*raXBmq+)qgFD^MZaKEQrQqM)5 zp9`iZ%F2IWelI3C({5F|=eqClk1|7Tk2}wabtp*tRsV-|k3#(9=3)&a1_lNOPgg&e IbxsLQ0ARtFQ~&?~ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..596be65ae0f4f629aee5524e82a37c29bae852fb GIT binary patch literal 657 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_E(Q36xH2#>tQcOvTk8D| z1_lP#k|4ie21YhcE*?GsK_LlAX=N2P4Q(S+%ka#+lG5_p=Kcwjrp=tUa_y$AyY?P9 zc=*hP%U5sRzI*?{<0ns_zj*!r!{;wwzyJ94=WlM|mqZ2zMomu_#}JR>Z?CuqA2twZ zOKkMbZxe7be{jLcw;{xX>BsN?^_=1-r-j`*z-jTs_U+S|7tg)%==gubC$)N}?us=L z37o>!(aRGAJAT_P6TGnOkaN#Dw$Jwje7!3q;x{TCd1orh`5{tp(X-%*3n5J zUCj0>>(1fbynKZR-Y6WAX$v-Bt>=06QF5hRfxM*cqbp4JYmOamXu4^(%lhgbt3|6W z)^Xo$VAxpD{Y-0f^9Q}D8jWf>0bIOO4l!~qYYLbZki@bucp7IiL%N+=GF{zVUe6gf>Kwt zo}D^j^!{zN*2#IFtnb^Z$KTuie0Pb%q{K;y(~X;LJLC?<#vJ?|6?ahkj^5HgFLEb5 zF;J739whhn(X~S1)k~+W?>6Dv!c)L6z5D3GYi1j6F8Wxm66tAl)A@e)viC(B9=>tS zQLSu9jyN>&RP8}CyF~8k9~Q1Y=oxb?a?inNo1=Vwk7d?9lC}FbGoiscv}UK@hLG3i zKS<0kWL*AB;((uKYS+s}Z7R=av)uZ(sQ%c#gZmEFCtN7GxbJbrB;U_EQS0t(s}%Fi z&QEX7mw4DxDQ3I=j^t*YDC20S#dd7#12?=nuQMwlXPWEx?EG>SN%fuA4#fL^TH?7_ z_f1~nq$e4gPaozVVqWvO?Pd%2#nPAmqqLm&99fb3vfOEY`f2~vrw-S?(v~L@N`^p6k*SxgiJ*ysZ%-50qM@Pr%W$epmZ#VwD=n(tNou;S7 zwdLF;(w<4~NL;Qk>C zGJ?x58yK_im?!#QY}q=`8Q)A>R%QkG lRH+s2>+O)gFR_nd(RthAMcdzcGcYhPc)I$ztaD0e0sxJ=b>{#8 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..048883c8571af4a8a1651ef8194a5c78ffc0fc6c GIT binary patch literal 877 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FM#!!Y!P2$y695eo^9^cTknZXStPbn&Ta3@gUzBM z`fSpxzn*tptE#jsW3`hqYxK3lXJ(n^OnUc5?e-x%gPPw5_q^Y8e$VH#8_rwLc`gyD zcU*I6VUFhd%Yua^md9R7H%__4G4Gi24(9MPuZx)GKhE7FC3v>3=e9VL=2F8wZPkX& z{)WBIOHYScN|z^zuzyT(IrGJ;>^w`5*W?Pu)gN`{^>-L^e~E34z0n+8p{B(5#i-7o zCCID%v2so0TfvWCBX8a9V&1{~-Q|e-R>Kfs56!g)1!J0KD?f6X{w@0>uU}HJ%b9CO z3LSd`561N*yKg_}>>_iVFQ)x@R`ZHe4qlnUbq8h(Zroe;;n8beo34)?7T4C+=CY}! zeEO~Z_V&j8KW42k+_$0V!rF{S1vj16AFRsJIR7>G{RNG;*SFp0{i8FV_w1w3Yo{t1 zG};@qN{hYx9$tBGtH=EJAC}j+mGnk2E&k+r+bXyI(DbFUnr|aq<}^*YbX4MSTIK7U zt%fo2H9c2Zg1i%S_Z?4-XzyKm_x`o#DPAiT_4|2ulrY90f65aRE9{}$xNJ|2TH)@U z`3r)jCmLUVaUtsdf!7ros+=4(Sgrr~x>vXSiAC?SibH4kS;Wrk_PvrAnKi$+DLi^Htc&VmFP`rl($KEw|~1spocGaIM(?BgT*^_|uuZ*OT|$ z6FRla?W&oSp#7s%n`uE+3y!fbnId<@Y)?qA^n&fh3F3W8@m`sAo~52s-j>gg(YP5a z?PA&(bh*kY?z#N3DS4LBw}YNocW4_%M$0d@PrY{h>R|Av&}Ln$c+(ljtOY-M?LQWK?zG(OCo|ifQ=dyE c+5KbX5%?}YGv#mdKI;Vst05gfABLDyZ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller.png b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller.png new file mode 100644 index 0000000000000000000000000000000000000000..ce18058d3aaa7cbe00bae80f87688302c3c5fc7c GIT binary patch literal 428 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoi#=T&Lp(a)Uf$?EEl`B* z!+r6r2@e!fSQdIT2RC0(di3hi6@fX|elg!#a&nnKXHn54CyrM-i!NM?Xcl16-RjbO zLFI`+W7~!6AL2e7{!(lIHkwI($DQi)59d6eS3Li)TeR39^NJ<_*&xd*N%$d=?h-+N3Al;OYpn; zJ6mw$?GGE?aaeWKB{Hx_99!J+rRRD4T&PfhVt@Bp>xVj|r0 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..faa94098d7a307e09a2209305c49c7e8057fa721 GIT binary patch literal 831 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F|tx^06#@8Qd$J|=}qxz13VEwkG z+gGjatE%v;fBsM^CqFnxgz?VJ4K=P?q#V-vByE0i$6Q;Mwwlr9h|NB^pxkA?X9IN> z*7BYXKcc}@!MdJbmR0o4R$3%@d8+9Wp=B@ncEu+%TpSXFOwi4-0<0%ynz+ zvHOCByFzvsGR*vGG4HLR?_*P$o(^H=TR8{vat_JJ^>mbbf01ULFw^|uXU4xWhof&u z3*Nu_H9S$eEWy|RZg7OS;PJ3m&L7p*&80qi+0_+aQ@2;zsIgVZb!sh>m;;uz9-8^KT5xvp`WVna^&0@n-{y&FHh-nMb^Pdix7il*}IUJ+G6$f8V9LQSIi7;8nN3FOvIwcGdnu zr6j5AtBo%0w2S={wd$^SrqTAetuenooo6L-PO&XSkGK{t$(;t=f3kwz6utu2&fixRd=jyk~vmt`;2+j@`w4k7TaQGsT2!WgnV88 pmccILlg0ZNFJ8R(;r~N?%fwTvIfb`P7#J8BJYD@<);T3K0RRqAk8l70 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/chartview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/chartview-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..b135c25908c048315ec37ae9266ad5a1d939e175 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4h9AW2CEqh_A)Rq?DlkV43UrwJ$TlODUgBn zLGfJUodtDW0;6&b5% literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape.png new file mode 100644 index 0000000000000000000000000000000000000000..0837829fb5ac90a09e4e10bf29702b0962aa863e GIT binary patch literal 745 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8Hh8)?hIn+Iz3ROpJXM7C z!~L(33A0?A_c*$IX*%QX;;%i|B11v+h?Mx%BP(45Dml-{39(page<;sVa~7@0kCM2`R;s z{G)@q3+3Gk1?rRR@2y*<>MR*@RVwGmB$f8+=i!eJhV|9%2o3)|H)3|mnp*Rw?Hib` ztNyH-aPZ8ux06Fl>t~C39+O_}Tp=T`QmK6MUz`y4MydD*(sPX8&c4cQ(bVjDE%a(o z&YD&F8@Joe-~PsZ)vKsGJ)xnd!uwzU`phEs_3<~xWm4RpWy$5Cx`(+dmj4WUWbiG4 z+ikh`746F&_IdkV+}RjZZ?>-Wyry2s6TQ*aQ}t&0fm<`==K7TgB&>RG;VfNtuy1b9 zL3>7tWi0Bc1x}q+l5=}yOLwX9M}@{NxV-qb;r3O_Vz-B0UCR8|qVM2?8Ru55lH4J* z{lO-&FAR2v+JE?zXP>{^`+l!(qxj^Sax1pQR&#H*e*YkJO}%oRVPx<1(#6&@pG+*X zljje;$~3o(H}ymK>5xg`RZjy$i#LdvC-HC_Musl-tn)DH^yN*Mea}}etT~ zOy1JD8H#2qKT9>5eAVHHYcx~Oqz4?Qocj^!@t)q{O|wEYt-_WNt5MKIs*d(gQu&X%Q~lo FCIHOwSQ`KU literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape16.png new file mode 100644 index 0000000000000000000000000000000000000000..9a411ed9fa71aa9aa676e9683228aef80a0ccb29 GIT binary patch literal 332 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+3VXUZhG+!$p0f3xTF7wh zVRXhS7p)QvgM}7>i4znYotqmKUG#q1xL>SUSj4H)*T@p&lz4*CckPt6V|wEDF01Ds zegELYa~HFp((j(`o3wfP?T%&q-@g2>|C%w|EHfxK{&ar#@(Ho)-$a$FemvA6JNsY7 zwVmyD-_Po_Tl^Nb^Gw*+8YTM&K=W^K3H0S+Ro@;gl z9mwL#l3q!$MW;sna0o0 zd_Qg#sh+K}_@8)p$}@{M{cj7xT=s0-RY1jpGx0`9u9}Jyq4J2j=cw^w@Fr~yX?7Slx}^e zwO0AjzB6-rRu>2^d$iP)(MYG^ObmZ`a&!#?e}ZH8!TxP}b7nr)KJe^kN$hjcJu&ky zhF;IP)A(K^&{Fn#KZ}PxL*H@p4Wf0;!OD+5{>pQ%*>d*5*}`|#HE=wXG^%_-K84rXP1*6Hc^Cnh`np}t^YYU;-e_poH~;aOj*3mErE1^4 zPI<<5gM~dor|f`*%p!|YzGaVRow3nSnpPfk&yZ0K5BLq7)pVwvXXTDTpzvHz(vQ58z-l49fmm~c@_>O?!^zw_9>i^mn7uLDR+_y_BY2VpB zm3J$nSlY9jGj~2Ukcd0LV$-dy^k_%N57)o7dlip;Fa5FCux^Ub#mtJBl{w8zE~~|@ zeDWemX4RDKt}`v8KOW(BK4ZD=-0UuIqtAz;*sLXYZ7Tg6HL2WmLe*pu_P(%lU5dGH zSr)9Xlo#|*a7&vP+^BQrjC^vK%bpPN`<|9PWrr6>^qutLj5~V4s!qi0(2+B90($=n z$Q{c4Vd@tW^rLdmwS%0o$_C3ygIsLd78@6<`5jfBSt(f8QfZ;ABo@w`{&)u00{&#< zV*k}u<=i?!ULQGkSSwB2#wZ*7RwAUUo%zCbz6Go&7F!q@m#=Y{7nJo=d8Q?|ei(a= zp|Nna=Jt!sYhK-b{2{_6=E6a?(DPNg_3kVWdiCDB9#Nh#ZRX!oUmvI)T^$|LJpbsl zAHx4c1=Y8oJAY=~>>cYqy2)O@I4w`pBx?ujDx1YIFP?3cwD8)=m$PclF6XruyZ?!v zvNU>f!!LEq%_DntF5GwYfBevI-n$vsb2m9n=ip&qFrC$^a{0#sbB4VZ8B3WGTm&=v z-o%N$c)eh`VL^aoZscR%{sXh;I_2Mz%TT(I&9ydq0r2k_(*D=C$t>{1|mRXtii#=()x!?LQkB-@jWJ)1Dt1^e9Y5N^t!) zh8q5D>%PyF*E(~jcjivRbqB61C)qtqf2PMZwJ0fVUblBt!H{t%*SPo`l;61I>JKs5-s|fQ#Le7kyRSc5>CvpT1eZI}rLs%5Ea*1+JmZW^ zwnD3$Ok=a?qnBRRN&RUn^2`)!sZ`d2FYYAFPdas_Ve2e*g zu+|YDpRNvLs~%~-1HY!q%x?LvC42j4SF)9t%bmu*ui}2{?ptP2G@-<6;ZCoW)|}Pp z&(y0JC(L|o{Q1DGt+L&VryQ#(Uur#jRls|0<6<|}9lIDaGiKCloxPy&(k-X=@L4aD zUj>~`akjzt^A{{RWWKs_3fnTpI`iW@IxKQH?oKY4<@Dj)kv$z1dvkr9Z^w7lCp=%c z>sv72s$;9q zZjL$mQtkNr&W_a5%k!2^dEHuJro{I$?Y77M3q7GL4hK)sK6KQ=Y32RDUDxB+ocAle zwR*?)qc?6VKUyg^ckO)%sfO7ad%vl-FE$N-EggCHz-1Am>_pb$1w|Zt*GxHcyFl$+ zo>_+PeA!z)a~C|RVlH45`}%8YTCd%wPzCo8h0{|{ZC)<4(606W%n07xp15mC8I$ea zF0VMhDa>y3wcVET`)H{CphTF}K-i_Q!k6v!wn5LZl)w+=N6SM03^@sk>wewjs gx%5-L(tpOl$QKU3yK>GkFfcH9y85}Sb4q9e0Ob~*asU7T literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody.png b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody.png new file mode 100644 index 0000000000000000000000000000000000000000..4cde7a3a27c0075f70fa36069dd1afa78a71220d GIT binary patch literal 414 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoQ$1ZALp(a)PB!#D93bM> z9~HeZ?`6VfF22@9yd9I9x?MLexE;%SG5(>_KQ31Fc5{#RYez30T{Jm%&YF_dPVwT4 zFF15HuQbv1G;Iz(S8>1gdriSk0byZd!EX^-Q_~o@cdQRvou|?mlqDJ=Rkz}5R`%Jn z;`P^GFBR@=Irp?^`p=qwnJd;RDXo9Z!dAep^R0W`>ma@9g)+~V8%{nMpd;4)-=68U z(kD5U86twbIgI&#la^op$jhFw{kF1cg5-`MFJE>p2A3zSHyG`HWnO-{W&K4H-$^H* zoM1R!Xx8{yp)voY*UH=lOg>wqbYFe7ipt(}Q>WF5@%FY%6RCZS+j5gfhua%Y$roGSpr+xl_*NOxOBY8&#fvTs5{|}4LZ!9MFxc=TF+xBwQ>iHGhdkobNT&$X~>}6u)wBqZfuPyrWWskpX zzq+-#(ZpiB~tUj>m{qMOtr#TJ_EERDLteLfYopRSA^#>6yaqbO_ zMGQ6!?~c6BV-TEp^~GhSO)TdcwsRiPEZ92nf%hcu2Q^Han8bwV?O#wXYZI&;(dpa9 Qz`(%Z>FVdQ&MBb@08SQwj{pDw literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2a8579e4b04983051c031e6a010f2e4b89574549 GIT binary patch literal 778 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_lLCA~Tp1V`R;*az>+8D$ z6<~_M<*`Z;BM4CgAt9zAv#~k@q70dwF=Ga@%IfNBWLac3n&JNb{t#JTUtd2zKYxG! zfPjGT@bIXpsJOVeS?mrsn46&d$#M z{{9IQCQP0@dCHV2Q>RXyHf`F>nKNh2nl*d&?74I2E?l^9(V|65mMmGibm_8X%a$)+ zzGB6SGXg)&7#J7=OM?7@85o(Em|595I63(QghZreWaSl}uyXriv*tSOm8reC!B0~r*gv|OW|>xfXtl|tkjKrRq*9&=oC-7bJR7hs zqPl%klv|K`l3(O**E>muoa^jd=5GAPk*hYn<%*(9O!1v_?E89CCrvQri>~OODzN3Z z0b8)giP_C>^-cu-zIHnG&d+zPSDk}S3gw(7lGb&>k7b_|9xh)l z{6pGf)pzAagAIYMLDD?ayggsF9jsyGJjrY@Fa-%-+$ZQFFwDtU2dAK)XbX)WNUP*XMf<9KUKvc z|55VwM#=LR55~CMStb0UyMu3Dl9|%Ehb*%!f+N z90~PFR=ze(=lk>tzi+gkuISmx<*%)@OuRH;X8iH$H^&kbZ+EY?XlagUmu{_*i}zA$ zo_TYPsK(N)MX?hmZV z_q4u;2ZNr^I9RA7BEGz9vUY`t;B>LlfWl7#$rioJ740j7rq$i`o88rMU-k3t3Q0ld zjPz$NYn!_!FTSxddR^j~N5MO*8P1n@Z(+>-lYM{cuK%F0vi`@=Ii+SkiGY|Ur%C5}As-`LaGZ9GHd zpu+r*cU9lanZY_O#n(pq$A=6( zA>Y{bMgF(e#h&clbHpUQOg78)h5L&WGMPtB%-ic`*0QZ@HS@nG%A6+U2&jzfAvkcBt;) z)L%NqZ_SpyE^-g2&z|&ddeAP_rB_tn_h)_bF6hfW{pO$A{n`q?-w!5FxpZ=`;Dt-E zsa`MRd@@(v>iPbpw!rM!<4;~Ul6P1unThx9oYCNGVWxC#>aWNha*qoc=4Cv(p|50i zi}j1j0@k_Kg8wbvb#&aHofKUtzO3wWonqb*nV(mrB?V8Pva1qgHn38%`lYf!<&whN zer}~l=a;c8e|YWE7sET9#T$1x8E^b?{SnKX$dBcZrgZ!;S!%+NpUAr|LxyRuSimIN zhVl=RYA!C}E9E;*8|s^jKvE$Z| z#3f1P!ffZ*$=!YdkYN;F>U$k3dd z6&thr{~DbUi~7kmuhD^I{x!`SWa4h z^m2r{{^WZJ>tD$&DrdU2Vd=^&W3iL++dMx7?c!*zTJVFHKPk*5M`O<0PpO-n_Z{Rr zVo@nMH~!JH#H7b6Z?-mEdYDjYvb|lm!gXKOp0>XqCf3MWS}I)&v*@4L|N5z*;i^a0 zBJUs1?3i&Wow4-`$In-P3tViXu6<#uWD$S(spH3Dp<)5Mqx(Jy{n_zIUOiq-zN2He z_P&J`;^k)X2di}#OyHYt{=!sn;yg7Iawb6ZpRVhJZ}#`KS4Q-kQ>8JoiueUpn?WzdLvR&Z(a+Z~a)4`{$pb p(!LwAJFkOtEI8|4tp3CMM`ohl!uzY%F)%PNc)I$ztaD0e0swLvA^-pY literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/horizontalbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalbarseries-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3ec403451a885d5af983c123e6daa08ee02d21 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhvz^{+=$5AsXkCCng=>i}<&D zQ8k=?g*ZIG3c8mWbd%n(k2O|#G9NCT^?tQX9RIWXo#No7chLH7%tu?Ys n%l;hJ`^>-psmiZp^)g9@f0IprZ}`1I2V{k(tDnm{r-UW|e4;Xr literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/horizontalpercentbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalpercentbarseries-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..16783f7daf490eb1e018525e7527b6f949bcc70e GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhvz^ah@)YAsXkCCng=>i}<&D zQ8k=?g*ZIG3c8mWbd%n(khfii5E2UV3W7v=UKe3T{ev8(f43o~=1$H-B zUu$e=Zg{Gp=de}gRb`Rx|Mu8t@~fV{*7$tf?~M_|w{@0TDJ*(QAR9eh{an^LB{Ts5 D=;Ap# literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/horizontalstackedbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalstackedbarseries-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b6fae651112b8f17c51415de4fdad7e0bf61197f GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhvz^@t!V@AsXkCCng=>i}<&D zQ8k=?g*ZIG3c8mWbd%n(khfii5E2UUet{qhQH!+#rjx*GtT6WoyTn+vl zdzYj2w<7wI?7N2mx#G;~ zqIc6pmK|w7AN5CSd;LO>nm_snK0Kc&!_B<=SZ+$E{CCOwpY5KBGO$kh<=t{*{_dot z{(hs3MoS+7*?c?3sj-RElLG#Hp317}vF~15jsEXfv$ZDZf8*0!Q+FpYy|(7-{-6F^ zHvFn}_xUyV5xZMnN$2iAlN{O@(iDnLJmPS%bd&jb(4&aw-4Q)z1~!r8ubsbRXM;TF M>FVdQ&MBb@0A)OJod5s; literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-polar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-polar-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..611b09f9fe7ba851b3c4e91b6e1f2cfa2cd61830 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhv#a^`0({AsWG@fwBIF90X!m zAB$^cg{)!SKXHYNunQx%RPqw`caeLorIyOO*L(~V`uRUE^MLrA_Oq&+&37AfAA9E_ zvEi?&pyi1z1uTlk{m&c-^C@`x@}EO>*YP7_IeeT~xntb5j`LP!dE^{oTl{UEn6l== z-4~bhMyM~64v~H=Y4ai|w%xSN>+_<*w{7?B7kb}~nS4uXjnO^fijv}hs$kiN?R8zN=}RW6%>-~#qsf=j^4atUB%x?oI&RtPM$7v_j;MFwY)!QRin?rB$d)D zV!gjEv~PW$sIrxV`(nZ8)|orI!1^^|zy8!Dr=XPRyDFMBw_Nh3PNFu;PpIOW4Z zllM;XS2l(259;GRcTmT*Xn(M~-^3cZ`SYef@<>ZO=C&uv#xCUdA&sMo=Nu+=Jd1zx t^|r+~6_q!g?Oq4A*nZq{+2AXG9iwLG^d;6oO{YOo;_2$=vd$@?2>?SQyj%bP literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/percentbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/percentbarseries-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6221f6ef10eca9c4df6569aae7f8584d371bb1 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhvz^ah@)YAsXkCCng=>i}<&D zQ8k=?g*ZIG3c8mWbd%n*48>N4mB}7?{ycS^DIZb$4M7#GRGlA8QOtNJ4 zIA@rxIARquZLx&^Hv4~nkBfI$^ai=AazyMC-p#|1dd)H`+MrhsWTU66pUXO@geCxF C?lm(2 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial.png new file mode 100644 index 0000000000000000000000000000000000000000..9675b1dfde73a8e934833801c6c321a88161d3df GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NILrI(6!_Y15`ppFU&8jF~fM&YCrA_Uzen=FFKpckcZ8^Or4KwtV^W6)RS- zS2*usU|>)w3GxeOU}R?H;NcSzmsU{IFtl_Jh|eyn?Vh=I%b~+p?mmD0=F5-Yf4?o8 z!OFnEu-?9*!NlUbJ?H8#2U#NwnCs6A|9ZrB zY|b4s@%4JUGJ0qQg9Wxju;x~4^*rsO}_4n_>W9|;(7g`KeGgfLU7dd@acyZ{G*Ai{N&}(-p z6{q}J&|Q}L^UC4l8(T7^#rGVLc)Z@bBo1Jd2=l+?xA&72q*7#KWV{an^L HB{Ts5uF(wu literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial16.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial16.png new file mode 100644 index 0000000000000000000000000000000000000000..951221e57a45f09482b0c6f9ac7787121c01f41d GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUC&Z3mMmGcXwixlE0!!-GI#FWIdkUBo;`csym_-`&04f*(M&LCZ*TAD=;-R| z>hA9D>FMd~>+A3DpDeOk|rp=f!W9H16vu4ejJ$v??IdkUDojY&d zy!rFzFI>2A$&w`@{goi6%ajE91v4tGHH(fMK5GLE}ZaYRw*+R&5inZSi&yP+cFfUGK*lWkwhM_SK0gH#eSdjyO1* d@xw~#31u81mNTBNWnf@n@O1TaS?83{1OS~nr6m9W literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e50ca8edaaa3f1698093850aa08c65a9d3977980 GIT binary patch literal 1095 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM__XqfdxH2#>tQb(ReED*$ z_G5}KTefV)iWLhMEI?L2fByUxD^~dW`uh3#`TP3^1_lNN1qBBOhlGTLhK7cPg@uQQ zM?^$KMn*U3S$0sBtBqb#!Cnu+*q@<;#rKhK7WMpJ!W@cq&WoKvS z%)Y6ciK|78Vs16&Dwml$4Z~mX?*3m6w-SR8&+}R#sJ2)z#J2*Vi{R zG&D6eH8(f6w6wIgwzjpkwYRr-baZreb#-@l_w@Ai_V)Jm_4W7nPna-a;>3xQCQX_= zdGeGgQ>IRxI&Ipt>C>mrm@#AK%$c)h&6+)X_MAC$=FXivZ{EE5^XD&EuwdcBg^Ly~ zTD*Aik|j%)E?v58*)mA@1j|oJWME)$DhcunW?*DuVP)gw;^yHO5tEQnP*T&-H!`ub z@$e1^PE5_tt8eP;nL2y^!lfIw?$~?$^tns7?%sd=^u^0JZ$E$i_Wk#tzkhjz);?!o zVEpRo;uzxL{r1xJ@LLHo#|qcn-CF&A@7sI3eOE4OD!CEnAgRQwd&^0|$R#aE$mx^X zlb_AMtJZ|)^Id;yX=8pr=1K9_>ezMve!YGle{b4DcH6Sb2GQN}Oi^x3vVyP7dZ(@~ zxn4Yvbse+++Q9GC_nAICTzmg`G)K|oeJdIn%wP6Sy3F_J#A#RIAF)RDFB_svj)+~* z%viK(*7f7EM>rk0&Ohh;Ybz&g-7t@b`&HB}eLm|BV~=0L9~}f|cJ4f~rD2o$A%Fc_ zr{`&$om|WJD9O8hS;i{OgA;fpO(S@J`Cc|zT5TO^P{CVi{=ED3ivEJfiL7r6^GvQd zRQD{a%$C;Pb}vWOBuF^Lcu_=ej;!EL?Wdr@*g&0bGTN`Sj4&Yyj6$u`RNRY*F;oSea>s0q9d?- zm3Zc^(7#KXExxfOo|9h9q`5tP8^eDJTM*87XxGVz?{UL9djz-s(&=S&A#d$mOq*Q;{O zyLn@}jL~Yr_iqx8E_*0d+djdx)lPLqSLE`SCsK6H%{C|f&i!)ZD({*brTeGvIKXuM k!oRrNFBE?LmjA}S`4218^*Fyf3=9kmp00i_>zopr03&cBpa1{> literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld.png new file mode 100644 index 0000000000000000000000000000000000000000..5d0c15e43545ddff103200ee6a5db41377f0e64b GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJo8$4YcLp(a)PPX=D4isqJ zzbAx)<=`=aponOWFt%=ygHDMD4<&_sV2_B*NX}fJkf<#vxJLR zW{W0mn!wtfqwr+oZcekN<-4Dso0-4kPGkLFP02PvL!RWsX+9}!&)N^LZeSB>TphGB zh4pEY;_UTIsS3!T&<(Np|Ro(>xAsMrt1#Z51 zhefH=<&p99(|6N1-(1wOhn-QZFsEP;M(3K2?K(fq}u()z4*}Q$iB}%%Zoo literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld16.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld16.png new file mode 100644 index 0000000000000000000000000000000000000000..6ac979abf7bc1245aeb195f873347aafba6219b2 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7nLS+`Lo9l)PTJ^oI6ztAK- zT@%Ax*{?qA=N>+ev-t4-YP86aLK}v>#@GjXo|D$Ei>v4S!zSVT*RJ4RXjC-Qjai>> zcYE1}?qygaYw_G?*0Ofjz!@4{_YN7zbe`D3eSuxB@p9RWRLN^muXY`adfgx__%maV zf|6z?!MsgaYOTi&bQ^PNHZz~oi$O!a0+hTdh2YZO?pN^4Friz7pWVOrQ{#>{)hJt#{%LO^v3G)+HM@1YBU0{`fx+`h+N!*K2D1YZVgnd3hb4{e?nD3Zt4v6FL0&Z!F#jN5Xf58P|`w7@Ffr>?Qr z!E8ZUw`OoMt3{tNFAw{adZVY=zvL^DBc6A^WXfZ>Uuz=YkQdxGZPhjAy$AG!89)E5 zS+#z>ezcC*b^W;P+}yu+Z{D=LdEr6;(>-Q&*A%_J`K$|8y*=Q5D%sv_X;A0Ghl!tl z+5`s℞1zx^?Ttix&qrt#UhGE4WkO_-Y~F(DI;vd(IXzG4=HIUAl9}$7=368)+SLoFVN2mQ_N(F zTamRwGd7zqhOO!l%V(SZg$ota($foLr#mfVXn4KL$ImZFL!=;fdsxTW1Ky!$S-!?> zZ20-FhU*2l)R|2>n{Mh%OP%PoG$SjEX~ioWU0vO}#4?7xpFf|xf7yS*s@WRi8+AP# z8j?18Sj}Dc>Zh@>am76M+S&zs80ImkyDUj_{&?4`;{;0qhs5X0dKYfo*in%X7#=RJ zR@v~_VfuWH3vnJUZViVIgv{XKDR2$dzb4dT6}0M=;sM5KZ;HbvT0WT3p>sRH>8+dV z6VZZmE@6rh>^4DH&rKC`R#dt><@~*{c(zDqhP}Pj*vW) zM=}}bnDrm0iA-91pg44GPI2;G?v+{0Po=lpe*DCBHv2(G$Dhv9B_b0uPrdy*d*YU+ yVu1>Vw!CK{rtX#Uo3GXUWS<94qnyuvaO?QpRJMQ7#=^kBz~JfX=d#Wzp$P!F1b6BH literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pieseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/pieseries-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..51a61551e74a6a0229a3a1dfab312486dc3a5ca4 GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhv#aik>cxAsXj>zRM zz)_E?uu(YdG)aA}D%dh#Oj)jF6t#)u|U3Jx28xXZtuu1O91dAoU-7Fuc zN!#stfBLtbQN*$rwWq&q5b#U6r7e2UWmzlhlKKN7j|$cp=6Ih|IQj45hIMMY1NT3! zW>PpAwe)V0_gA^8MbdBce9xr!obqjyWL#Bg_o=v}U6*lLpK3?5a`ZWcHQEkR6IoYO zy*QV!hqpm8lHuxUnJt_RA7dh!eg0-2Jb&=j$5U<(^mFoDxF&TcXjj(nz9u@g`EL0` zwRit!Lw@six^K|udS?83{1OPEG BoA&?! literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/planeshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8f3b4136dc1328aad06341d356046fa3e830c6 GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJo7kIijhIn+oy=0xk7a(!$ z56Y;pONC-lkFkgNHq(p(*-eOm;XyOjkOMmei@Pf*AV zy52fLuc_5@iqyGGrCaNZ+uujdpYz@J{Qt_#6$>@jdwH$ocK^sHnsdax#$8zKk?u0_ z_sn$(nsrIuExJyv8>Uc|e51H;vhjDrkuE=T;{=-u1caihh2healnhvwM> zn?G%yo^j0V&SCvGhpYD-^2#~-_mQkazRR3B28=F8IKCwbwiSp?ztFV$g~krHLbmDL z>$Ef6qrEcy@3JI&X_`LfTz7g6|I~xFMdHr`CRf^sZ^slJI@2wBjDKOgr%=|FP4@wyy0mrwh1a zB|J1ueLG&*$K1WqZ+GU1qs>wEng6A}h_9FJH`MuVCcakC&`9r~y{A>7aIw-O3$tY1 zDy1ZLp)}F;qS67~9d9c_3a-Qt{%RjSz-ngn_aYVcH1MN3msH%v5=;H^?lYwoq4q2skNZnuZ5PLNS#B(K*b5ihUA4S{U>ckkFY z=FfduGH+fn-~W}J9f5lmFv?drOTW9=YHjjRYiY@6=>P|AuZ$x>aaga#05^HDi`~99j~JtGtTX!I=kn%} zg?9O4f#QgxI(?r`wNAP8so&96&9L`cjPZ^GT<46}NHz;@3`m`z`)Xq|Z_nd1*UQ;9 zOjk_xN!ZUdLD5y@V~^jRMauUV>doH&EcAbk9pl97wi}whT-(6Fz`)??>gTe~DWM4f DM74UR literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/planeshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f5fb26159279819500e31ef1ceaaef785b5297c4 GIT binary patch literal 1084 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?Fq%?K>-DLd&HN1rDc8hf*UW1Y$h}0@G%$6b-Am=pf+2yfXLjqBSk= z*7Q8f5RlS1JY|a|>uI&ON$>r)EmwZ|b4A|0=kKcj@A(~lKCXK0)_5t?tSc)57rXUJ znf}^;Wn$2*4)%?*?-R0*vOj7$bnn=DQR$Y)8`o~QuVuDlgMD>^b3shx>pLAcE=*(e z(A?X?nR<~|^})2ZX$jkt9?NY={KWRBY5nev%!Lfs7HTW~d$G3BPC!t2qr~4QIz3$- z>pEUcDu3horu%wzg1_jtRbTfcoxUiqU7etPp_9Ez`VSwoYxpD8n2z1i{K`qzddF9D z+_~5r8`k6Nt$B9!4Ktsk(KF@+?OK{tpTu?VXsG5=>FVqSi~mgwl4>$94B<2htuPRK z$Z_WIrY>I1HNx8;%qKu1{-BdgQZaOL5sh?Xw*nzrR0e z-7ncNX7Hp~j_V zvo%{;rH|61$e8Yj5fg)?LN=!EkZTt;+mPh_bWQ1_pHnXV6OC56e&WO-wvac0mYZWE z<^{dlZ_QRVvvFFGm;M8rKONuS+&S+qE^PncZ(dGM%#QnyoAcg8^c*Pvu|Zl|JO7qc z&%fo88?9TdR_d57`BS*o-&?@h`@mK^&4c`h4e#DKzUd`%VTt*-iF+br%ig8gzLGa) zP@Su7$oE+($?quJiO-Kk&h&NM*4kztchGZ&q+oeijzZYU@V?hdNr^|1UorFP=?MLL*w*X-pYZn+<`*)5Y&-P)aapBXjFxzjxA=*f(cw4z zMR$ATZH%90nk`n8{m)0P#C{vdfKaAdabcw-@1xHig#FwxS5(kGJjX6?+Uu8ZI&MU5 zWc@THuC-X{(e*CfDbFu?{j`2$erv~jmm{(j9O}uLUMusDK6_+1r%hFJsh#L--S`K` zk^{X~-a8__Q6&Ar#=JLHKVQ{}$>rI;DP>bwx@EeJvem|$=Z-IR-k19AKC84|y?f52 z^h57934SU+eOl0Pqb~E&BOH4o#A0>%7f$ q)O0`gb$RChK)Dc_9jn&wXXvQOQn5c@*vi1bz~JfX=d#Wzp$Pyv5(U`+ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cef130816069c9661f525a0a22af5309372d4369 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhvz^yFFbTLp08pPO#=;G8Ax- zmlBjd=(k1C)@j3Mrg;bSmVWo#{Zz*3gTOrpog>F?IYp=@Pi!qcJ0s~+<;==6J8m*$ z@12w9TToE-HhMuB*MXAjm3r_ba@) w-WMCSpIFLP^ZCi`pzX)!pL_q!qwm`WyUsr$ZVOHb^MJhL>FVdQ&MBb@08gx8IRF3v literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..2c456788ca069c03bf9a756b6816eba90774bd4a GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4h9AW2CEqh_A)Rqw0gQYhDb=V9yIiF4isQG z(3qnW9Laj{bk1*wOH~WE{8u~l{*c@uiYY~x300t9)4W3 rUH{urm;U?K+}yHf%PCseeA%FQs3CLldu6{1-oD!M<%vVPe literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8be289d6deac39b2702fd714dba3b728e0690b11 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhvz^wVp1HAsXjRd3U6$MR*eiprV~{suGme%HNWnCN-HU1!GoFYIfW z&pi)4sPsI6ZFF+t_FVdQ&MBb@07^PWqW}N^ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-polar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-polar-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..44cd8d72a66062794b2f7a57e3c5c02471a115d4 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhv#a3Z5>GAsQ1)CwgWxISRCD zOJ7_gb@ChE$@_&&@#zb8P}gw%ED)fd^@t)ww7T@>Gan#Ufo$M%;5hm!ZAYBe$S^(Tn84P)ru%hT(9Uj zp<$+N$PyuiCv~57StkhD+}OgE-M%Z|R(H?a><^_0S(CL&1%9dSII@ZVf~s0sys2an z_YRed zh4RXRhN6P@g%ZVr8^r{(D_Z|`{E!r!Y|;KQ#&5wQp7*z3MJ>JYX=c)pirZ)e%krmtdqj|<1#>`Gu{SAJBt zc=MD`9Og<%irDOr0WWAKWvz$c*YaaylE_j)! zdNYW(Sn{->;r6La5{F$hpI#8-nk5&PbiCN~=CbAUo3o|1hpew^&syQU9i2VBef<+APMSPt?!5U67A{)6Wa*~OTet1pwR_Lreftj_ zIeP5)sk7%VT)cMu#?4!|@7#U-<*!twPs_{; zvKwBfzvs8UKll94Lzd~!>-e3@pYQjZKHK|=_SBlD;_|J1X>*v^G#LNXCLBCz(l0OW z_{g?)=A#1#LU)}%?5)se&Y9kc`W-jJN{8@S<7;!pE`e)hs-}rnUVfs*0)5-ip6W1J_Nq( z2*^@jwpb?IO1v$!`Jclk=bx(=c^tf#|FnIrr^N5&|Eo8}Hu@j%cVv*$Ugy4P#eX@! z8$k=j=LLUY+OtZZg-_OTLeAGDHcg2&%kw5b+V%5b4R3Klf79;|3!n8QzKz*=F!=EN zg}y80>=std)8lPqo)q}|!<|cMUxei6i>a(EsOsUqcy{T|#7j@w4`gz5Dp~KGw{C*s zRBel``*&~NynFs3(U}!mFTZ+z^SU5#Nj#n5rbj~Es`iuh;d||ie9m8~QJBPPvD+h) zLt@iDLGGhV^;dm=EuW>UyiX=UR`I!fu8+jm*PJFxUz|Ervi@nB*R*>tTc@sY^t!r8 z{aR4g#hJ_#pC4`Ri7Ls;b&B6|>Dt1ZM|)4G+F4oZPe1S9SD?6QqlID5*wo(}#kh|O?%x^ki0_%0_UWUXDXE-uUW;kJekUmHm>Ol6Zw%{j4Uj#*^pnS`={MCWCmx@oGj4=y=4&FAr)tu>Ft_nJj} z{rS$QA!QBF`f{FXPRP*lp)E#&R3JFhFKbLh* G2~7Y~sDJnX literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-polar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-polar-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..293266df14080bf3c0f24f4a0987b86ce6d34da3 GIT binary patch literal 415 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhv#aX`U{QAsWG@fsy`)90cSn z5B17C+^|qa&M?qYh2;uElF}0HGf|s%hh2_3HM@V(iT~xg3+%4EPu#rw{uy)Q`wc-K zTbSJ6&(m-&?5Z~SSA0}SWE+dPNEofmkkRb!O+EtL-Yw!d9E zBe_ofse(4=Izl|%4mqf8$YFW3WZ=Xum=Y92|vrn86 zJ!-O~V?*kdqJ?~=xn0exa*m13XmU=H>^K&^{9nYnmHaneotoa-K0&3gZ%4}4yv>Jq zr(4)f+{LG+_;Jg#p4yJtZtu@s(#lzAaO}DcV_~hb#s8XRuMTW_&AV>8g}Ag_`wc%X z_o+oM=REjuXlj>ZNw`d*-?NU*mnTNsa0za|d+*KFxiwWc7v$|0i}<&D zQ8k=?g*ZIG3c8mWbd%n*4f-(Vt_05ItWEJq{s6m#jUgvFx zHM{t_S)9Za8?)>t@y)P0<@8;?Owy@wMVFVrh8p!UNrrtVEwlE!YcYc?^>p=fS?83{ F1OU8TH3|R# literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody.png b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody.png new file mode 100644 index 0000000000000000000000000000000000000000..f64beb8ec5ce2bb2d60ed071f9bc44ecd992f26f GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJo?L1u^Lp(a)Ub6Q->>$zb zae12Il}L@HheAIw-f=0I&No+v&!s>x=IBZN2TxwSn^9g=SWqBr#UjHcE2Z^UIo7D7 zgu^7sGA6GeW1Z@YY3V16zW@7l$T2eV=KgTOiLwuNJoxL8eYcQ_L8-`ouHX4%j}3d> zn3ql|ewARL;3?Fka3X8#t%cWqnZAG1_IKX(*I(1mf9`lZ<7Un?mMK9xV%$}G?>(!r zs~4IW`<$(;TlWF$jbgv}d(s69w*EVDn_+D!*OrFwOb!e-T^;keBUBjs8qPDFuv1Wa z^pr`gv(apVsKc!TbA>l}uv;+p7_udwiMssuCb!_uGA6M~20i!1f{7ABt{1%)+FVdQ&MBb@0CLx)Gynhq literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody16.png b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody16.png new file mode 100644 index 0000000000000000000000000000000000000000..a89997cbc26d472957258fca6827e8d37161b20c GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7K6<)1hFJ8zJ-5;8aDW8s zgUd;rs)j5^OBE{_6lW+li0TT6 z%SoyyCu|h4d2LxE^T59Se9O$~L8p9Uud6T1{P&gJYh`9=Xz^i#caJUVWEdDGsGMvT zNRn++lsW#AXV$Vt0j6oGD-}4xT)x;a%&260z#8jo zqMoRo{~R5Ay?k5l|8Kt+Y4B)1J@a|b?upBfPq1D0E->~qTl^;m1_lOCS3j3^P6+9?9 z?;j8l5EvL392^`H5)vI99TO9il$4a5oSc%9l9Q8@o12@Lmse0wP*_-4QBhGxc*Y)QU|@Ld>Eak7 zA^G;;)gWd^0oDtA2k*)@?PmSHp#-re*0de}|8wr~7yru>TFs{_)VV*mBzR)3 z;=&|8`D?erTfDB_D%#f9@=CS-V2p<1hq^;Gzjj8rI{kfhUGnosX(oO5GtcYHT%BHr z{j}*oeOmmL1>JW%seup;Hz?HGGc$s=cKS_3A| zeE)s7=d1(GhRZrG^ct$&%Trb~Wj-3k%sF-LEH|$|{`Tdz7h5?Nu|8*DU|{fc^>bP0 Hl+XkKE$>$S literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cdba06317f76c4898e86eadb060bde09b486fc GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhv#ajGiuzAsXj%CtmbBu=0A6f|^{576;t)p^^;@4$Vl_U4;;cXk>Vr`}ljHfOEf zmL~Vr>*J&~dbV)|+-5MJDjm$c*mP#B`upBPJEAs7#pKNjfBf-c`|9(HgG^r>Jo?D~ zL{Gzyo0;KHKUEj<3G8#(+i2TxHhNVDXcN=**D zbF($NfB)&k%0Fuwyg$zjpQ_q$WJTzr--*0VAXf1I2X zd4Bb(MLWKJ_YPsOzsR*fNBDn9=iH5Jy5~<-o4en!vi$X&x(m}10{$~;U7BaP|NX;? UqldVRq(Fh<>FVdQ&MBb@0H`605C8xG literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f8a3ee78789799b8865422a82aa92a76107799 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4h9AW2CEqh_A)Rq%=2_{43UszJ$TydaDWKI zfs<#K3Qc}=sJHWh)4}&2ga1mEEA24Yw$&w|Mx?sW_$&*<@eY|JWJ%cKhqkepgKP2fU2mZ+3Zx>X{4)gKi-=nfr2P60W|F ze|?;B`qGqdRTE4l^5)-~eD&e?RmxtAcKiI(vr6eb68SghnA{?^7u60XtPCIcPvki1 Tn%5r}1-aPM)z4*}Q$iB}D0Eo~ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb4a7bc69f36767990c49e55575cb9ba435766e GIT binary patch literal 621 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8Ogvp2Lp(aKUa`&bO_X5& zAn)j10DJ#X^o|5fw88(htfDxDbg>X6Ny{to{C%?||5B}i;G zY~cE(^yu+^g@}&Xf*0on&1zoz!i7EUkr>-Wc|qlRp9!AxlA>LDuG!vh$)3@j&(*H{ zBHW@zLNI=o;2Dj#?3+GStA3cjqj{@E=ktu?a&x>jYtN=kSAO)?g+7CyQ2TAMbqVomi~y&_?#zmEoR4dbjVjsT0d{fC7v_$brxB6)%!(r z*66#5My@~oKsfAh$EW=nI`c0`Rk-v#`TRjbTAexHYr<;(iRrw1-o>(7*R?N*do`l#c_zi<{`j_~wD(t?IxmP-V$ cu4DAud3XEDE0vcS7#J8lUHx3vIVCg!08FA1l>h($ literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape16.png new file mode 100644 index 0000000000000000000000000000000000000000..d60b67f0f2e8352203bb71afc79b9cc69ab6d636 GIT binary patch literal 396 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7gFRgwLo9mNUR;}fHBpB3 z!}+qcyA(P!R%CKD8R;~o@>~`R^A8me={~sNLH&Y*CTRlAT=&ytjb~1a`J%dWWihkw zZG(;#5AE#toO!K1@6(j`mgg%U)-PD~E$r&V`iJkb-pk!twTibVNs`<1-k+5RxXdQS ztXm~G=iuU1QAewF5)DuO@@t&fDDinm%ikUC(=EEBZyXcxOP0Mpx#r@VvWi=E?@ol@ z`j|3Fd`G|GoTD52Of)t$+?KUGc|EOm(WSgZGv!&L5?7!7c6ZgThU+)X9qgt* z(LL5~*}$*+x!C8C*0ll-|AGZ~b3;S(XB-gPHu=sG*P0`oa}Fi@gkP2Qd0=rr{mq7s zo2#M@JLe?HwNKu2NM_5*YMwJU7OvX0&Af2m&3S%C+dr2@uvD}+@0j)^c#`NG8Ml8k zn*;yOP5*NHUe?Uzx3=sTlTf;GS^rJsr1SfC|Ie;r_S;n8F@46pUIqpR22WQ%mvv4F FO#r6`y_f(1 literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..64b0bc2c8401f53b2b4608826b76301739ed0f9e GIT binary patch literal 1364 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?Ff#-=c-1$C&x@87A23_hv`={A=4O9= z`AnvJ3~{V-OvjjG|J`}ve2(Eh!`&GRWR;5YHk?#b^gZB|AiN>O<=*#gVhLQKhTIK? zc27kvIDc&^>pIcunEK8`_yXS_-ZjD#(}Rv}VYs}4YZw2EFYkB{u&z@7vbclCWa>`k zzy{$r$L{^G5ZpOsYe)LpuLt%XNb@8Tu>Z_wQezkWqinJ1gWsc0`2=mxtnh#vSY#-xKe5pD+r|Wq!9vs)(Q2 z|JRIt9s%YbvI89>6-{Jzv&VOw2xdLGo_!v}wVfT=4Of*mnWX-`IdQ?x16S|;wca2W zF;873v>|^J=MLc=ig6mUY*{!yzBL}DQx*C@|y4oen8owrZQ2Z_(-vk~?HSyDAEbDE9APu=dHF<~3e2 zV!IZsVxF=6l-zW%&z@qsUso-{MW97*Nm;NIKY8j`c{V9?XJ1@hfLkIq=i zA@Q{S^aS=Beaj0ILN7I(k&%8-c(1=!TEFks@nlUSj#)2apBpk)oH==)Nrox!sNWj) z9~{+&?3@4et*T=^!*Wb5@`Dpo&BF5=nJ#N8Jr6$S({rSR@u1TiCc7g!p5g}V8K3tZ z4tekI>cV$@?N6=`YR|gsR^8v6!SPVqhUv_qpga2&l-e6i4@ia9a#o0Quk}12AsG2^ ziIu^3$rd|qo9DHAH!5VkKbXqR!L7>0u|nB?qE)h*l6qtBzXhw54S&nB=rYdx{&4Tb zecG?TYY96Y-mvC#bBB(W<3E!!`DYA^U7v(B?sZFEX~i*%aSp?}^7)~04f=cdDg<_z zy}YlX`9wTPUQeE(+a)D=rfuzAKb^<5x=QMg_8BR%Ts>qWeOhJb6W5gOtLA-4jIFpa zrLjYX+0OTsc9Lq6iqsmNPj*ifrsWp>t&N-_x`BT;`$ogl%KguOausZkzp-rL6bAK6 zyk|nM3c8+fU%{|8Vq2!vsd)|xMl#wyt|!|oCwwZrtRW@J@QpEUicMT%b>=7A43`6p z5BR+%^an7et$elO&P3M0sD}H^{VT(61Rl@|t&I&8U-7D==cVZV;yUIS;lOQtEIRD> z7GK+OmOYFiJ+xFiRDQFqR#lHP zdvjNW@oRx&@XEi2Pj+RTP(5>9X7`=FY_1NrcR2i(fAh}k?5HVI{g!VPvUTgsnHe0; dKkOgNzxnJm{Y`!83I+xS22WQ%mvv4FO#tMEY5@QM literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody.png b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody.png new file mode 100644 index 0000000000000000000000000000000000000000..e1abdeac434262fc716b30ba70dd285935690340 GIT binary patch literal 594 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NWD4*Jab;j&m^g7_Ck(W- zw6wOiHh@7*O-(fz)YR0JmzS58mKGNm7lA=>adCcreqLT)Zf37MIhSy@>* zIXU_H`2__9MMXu$#lh$T;XU&>5d-m)(bLPyQJ9qy4`3n{-Sh#TEqD6}qFJ8QK z>C$D(mMvete8q|tM?`u4F)%RbmIV0)GqAAn3(4!4TZV>ZWR`bLnmuR3mOcAUo;q{> z{FMifUw`=c@ynO5-@bkS@$=8$zg$20cQY_BT=H~r4ABT)d)D3gkb^+mL)YGp1r1F> zF1tLYw+L}-aJo75dOrLAU(|?ucjUQWa%p_$A1Xij-*rc(^qk_|nKi#Oe;Tuu-)`jI zqiTJIDe@mWpStE| zaK`VQ%NM8zT0JYO4jbikE>5;e^PF&XWr*OloN&60!Jz)R!#Z#Gqn3a6%3hHQTO4TqY%v1^ O1B0ilpUXO@geCyjk_`U< literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody16.png b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody16.png new file mode 100644 index 0000000000000000000000000000000000000000..29a47afdc3bafa82e4f200496ef27885efcefbd7 GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUt*vcsZ4C_#H8nL=RaGS=B}GL=Wo2c#xw$1JCFNjHQc_Y12DxBR zQBjeTlarg9o1L9qRaI49Uf$5qP*6~ik&#hSQc_=E-`UxjmX?;BoSc%9($mwEk&%&| zon2g9TvAd}Sy@?KU0qXCQ(IeGS6A22(9qo6+}_^a)6>(}*Eea>q-oQp&73)N&YU@O z=gwWUXwl-ui32CgIo)qf7#y(n9);eJ?w=V+&1B0ilpUXO@geCx9 C_s`1! literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7b942d959b3bef134a361e9dbb1d049fb83196ad GIT binary patch literal 1051 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM__XPNaxH2#>RAB=ZU{DDL zRaI4B9*8I}FR!SmC@(KB1A|g9C@Coc)1@U~P+VMG1O|m*ke{EQ2L`#hx!Kv-nP8BS zk&y}pDJdz*$;k-`3Gpxx8yg!J7Z(Et(b3USQBl#+(UFmnQBhHmk&)ry;bCE6At525 zp`rf%{(*sk!NI{HAtAoLzJ7jw{{H>}0Re%5fk8n*5H(?8Vd3H75fKp(6QZM|V`5?; zR>a50CnO{!CMG5&B_$^(r=+B$rKP2(r)OkjWM*b&Wo2b&XXobT=H=z(=jRs`6ciQ~ z78Mm07Z*ePTUJ(9US3{VSy@$8Rb5?OQ&Ur0TU%FG*U-?=*x1)2+uPUI*WceiapJ_ulP6D^GG*%2sne!Sn?8N|j2Sa#&6+iP_Ut)x z=FFWtciy~t^XJcBuwcQ$g$oxgTC{la;w4L#EM2;E*|KHJmoHzjV#Th@5sVBB49+D% ze!&b(EF4@s0%GFQ^2#cjx_ZXuR`y;2!I6=%83mOM?Ol@=tz5hL(DBn3Zr^|S^!1x} z?>~P0{N>yC?>~P0{Qc+e-+%x9{recr+s(khc-qs&F~r0B?Un1n!hs^kKQe3Ga17Mx zFxkyywrb0UEq9L!Ts*=s$$`aDU`hawsshs`rpWK#`F~G%ad)n9yZQYe`{vI5dFIZ{ z&EJJ&zuQ~=-}I})%ksqA9Bv*j$=K}{2K)ElYYzC|^W2JkMqRZ=g_ss7z*5sd}cuu=+hC`wg?{stwKetYs2nD0P{KWDd|bz8rBJ=cwe?vgGpQ?6U=`m}z=$I7D@gUWq4wF~r1S4hv3fAxCWLkrdo zE7z}5eCU0DxzlsDYhMb}AND1hwrshr8TjaKc#_(KRm=CjYJK&yb;^#{HxA?!+zZ`d zy^76Ne{XMl7W3x$5AxRd$Lhb2FIZIL!cvye!E6<4s>>MhUfp8BoN#U-heP5|8`hZ| zQ*Dqfp2)oG<;@8Ub+58z0w(TMW<1iX%eUgq*+!NP5AHs1c*m~GneZxhQghGo#Aqf7 z$qkYVg8h%XCh*rhX*hSSRkdNse{S}Ym9E*7FPZc*@2Ys)@hSHFo5G-a21BRpr?zwE SU1wlmVDNPHb6Mw<&;$VEBil>> literal 0 HcmV?d00001 diff --git a/share/qtcreator/qmldesigner/itemLibrary/qtcharts.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qtcharts.metainfo new file mode 100644 index 00000000000..42eea67b4e5 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/qtcharts.metainfo @@ -0,0 +1,166 @@ +MetaInfo { + Type { + name: "QtCharts.ChartView" + icon: "images/chartview-icon16.png" + + ItemLibraryEntry { + name: "Area" + category: "Qt Charts - ChartView" + libraryIcon: "images/areaseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/AreaSeries.qml" } + } + + ItemLibraryEntry { + name: "Bar" + category: "Qt Charts - ChartView" + libraryIcon: "images/barseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/BarSeries.qml" } + } + + ItemLibraryEntry { + name: "BoxPlot" + category: "Qt Charts - ChartView" + libraryIcon: "images/boxplotseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/BoxPlotSeries.qml" } + } + + ItemLibraryEntry { + name: "H.Bar" + category: "Qt Charts - ChartView" + libraryIcon: "images/horizontalbarseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/HorizontalBarSeries.qml" } + } + + ItemLibraryEntry { + name: "H.PercentBar" + category: "Qt Charts - ChartView" + libraryIcon: "images/horizontalpercentbarseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/HorizontalPercentBarSeries.qml" } + } + + ItemLibraryEntry { + name: "H.StackedBar" + category: "Qt Charts - ChartView" + libraryIcon: "images/horizontalstackedbarseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/HorizontalStackedBarSeries.qml" } + } + + ItemLibraryEntry { + name: "Line" + category: "Qt Charts - ChartView" + libraryIcon: "images/lineseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/LineSeries.qml" } + } + + ItemLibraryEntry { + name: "Percent" + category: "Qt Charts - ChartView" + libraryIcon: "images/percentbarseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/PercentBarSeries.qml" } + } + + ItemLibraryEntry { + name: "Pie" + category: "Qt Charts - ChartView" + libraryIcon: "images/pieseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/PieSeries.qml" } + } + + ItemLibraryEntry { + name: "Scatter" + category: "Qt Charts - ChartView" + libraryIcon: "images/scatterseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/ScatterSeries.qml" } + } + + ItemLibraryEntry { + name: "Spline" + category: "Qt Charts - ChartView" + libraryIcon: "images/splineseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/SplineSeries.qml" } + } + + ItemLibraryEntry { + name: "StackedBar" + category: "Qt Charts - ChartView" + libraryIcon: "images/stackedbarseries-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/StackedBarSeries.qml" } + } + + ItemLibraryEntry { + name: "Area" + category: "Qt Charts - PolarChartView" + libraryIcon: "images/areaseries-polar-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/PolarAreaSeries.qml" } + } + + ItemLibraryEntry { + name: "Line" + category: "Qt Charts - PolarChartView" + libraryIcon: "images/lineseries-polar-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/PolarLineSeries.qml" } + } + + ItemLibraryEntry { + name: "Scatter" + category: "Qt Charts - PolarChartView" + libraryIcon: "images/scatterseries-polar-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/PolarScatterSeries.qml" } + } + + ItemLibraryEntry { + name: "Spline" + category: "Qt Charts - PolarChartView" + libraryIcon: "images/splineseries-polar-icon.png" + version: "2.0" + requiredImport: "QtCharts" + + QmlSource { source: "source/PolarSplineSeries.qml" } + } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/qtgraphs.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qtgraphs.metainfo new file mode 100644 index 00000000000..6eb8754d9ee --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/qtgraphs.metainfo @@ -0,0 +1,111 @@ +MetaInfo { + Type { + name: "QtGraphs.Bars3D" + icon: "images/bars3d-icon16.png" + + ItemLibraryEntry { + name: "Bars3D" + category: "3D Graphs" + libraryIcon: "images/bars3d-icon.png" + version: "1.0" + requiredImport: "QtGraphs" + + QmlSource { source: "source/Bars3D.qml" } + } + } + + Type { + name: "QtGraphs.Scatter3D" + icon: "images/scatter3d-icon16.png" + + ItemLibraryEntry { + name: "Scatter3D" + category: "3D Graphs" + libraryIcon: "images/scatter3d-icon.png" + version: "1.0" + requiredImport: "QtGraphs" + + QmlSource { source: "source/Scatter3D.qml" } + } + } + + Type { + name: "QtGraphs.Surface3D" + icon: "images/surface3d-icon16.png" + + ItemLibraryEntry { + name: "Surface3D" + category: "3D Graphs" + libraryIcon: "images/surface3d-icon.png" + version: "1.0" + requiredImport: "QtGraphs" + + QmlSource { source: "source/Surface3D.qml" } + } + } + + Type { + name: "QtGraphs.GraphsView" + icon: "images/chartview-icon16.png" + + ItemLibraryEntry { + name: "Area" + category: "2D Graphs" + libraryIcon: "images/areaseries-icon.png" + version: "1.0" + requiredImport: "QtGraphs" + + QmlSource { source: "source/Graphs2DAreaSeries.qml" } + } + + ItemLibraryEntry { + name: "Bar" + category: "2D Graphs" + libraryIcon: "images/barseries-icon.png" + version: "1.0" + requiredImport: "QtGraphs" + + QmlSource { source: "source/Graphs2DBarSeries.qml" } + } + + ItemLibraryEntry { + name: "Line" + category: "2D Graphs" + libraryIcon: "images/lineseries-icon.png" + version: "1.0" + requiredImport: "QtGraphs" + + QmlSource { source: "source/Graphs2DLineSeries.qml" } + } + + ItemLibraryEntry { + name: "Pie" + category: "2D Graphs" + libraryIcon: "images/pieseries-icon.png" + version: "1.0" + requiredImport: "QtGraphs" + + QmlSource { source: "source/Graphs2DPieSeries.qml" } + } + + ItemLibraryEntry { + name: "Scatter" + category: "2D Graphs" + libraryIcon: "images/scatterseries-icon.png" + version: "1.0" + requiredImport: "QtGraphs" + + QmlSource { source: "source/Graphs2DScatterSeries.qml" } + } + + ItemLibraryEntry { + name: "Spline" + category: "2D Graphs" + libraryIcon: "images/splineseries-icon.png" + version: "1.0" + requiredImport: "QtGraphs" + + QmlSource { source: "source/Graphs2DSplineSeries.qml" } + } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/qtsaferenderer.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qtsaferenderer.metainfo new file mode 100644 index 00000000000..6fae3638a54 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/qtsaferenderer.metainfo @@ -0,0 +1,47 @@ +MetaInfo { + Type { + name: "Qt.SafeRenderer.SafePicture" + icon: "images/picture-icon16.png" + + ItemLibraryEntry { + name: "SafePicture" + category: "Qt Safe Renderer" + libraryIcon: "images/picture-icon.png" + version: "2.0" + requiredImport: "Qt.SafeRenderer" + + Property { name: "width"; type: "int"; value: 64; } + Property { name: "height"; type: "int"; value: 64; } + } + } + Type { + name: "Qt.SafeRenderer.SafeText" + icon: "images/text-16px.png" + + ItemLibraryEntry { + name: "SafeText" + category: "Qt Safe Renderer" + libraryIcon: "images/text-24px.png" + version: "2.0" + requiredImport: "Qt.SafeRenderer" + + Property { name: "width"; type: "int"; value: 128; } + Property { name: "height"; type: "int"; value: 64; } + } + } + Type { + name: "Qt.SafeRenderer.SafeImage" + icon: "images/image-icon16.png" + + ItemLibraryEntry { + name: "SafeImage" + category: "Qt Safe Renderer" + libraryIcon: "images/image-icon.png" + version: "2.0" + requiredImport: "Qt.SafeRenderer" + + Property { name: "width"; type: "int"; value: 64; } + Property { name: "height"; type: "int"; value: 64; } + } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/qtvirtualkeyboard.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qtvirtualkeyboard.metainfo new file mode 100644 index 00000000000..0aea30b869e --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/qtvirtualkeyboard.metainfo @@ -0,0 +1,35 @@ +MetaInfo { +Type { + name: "QtQuick.VirtualKeyboard.InputPanel" + icon: "images/text-input-icon16.png" + + ItemLibraryEntry { + name: "Input Panel" + category: "Virtual Keyboard" + libraryIcon: "images/text-input-icon.png" + version: "6.0" + requiredImport: "QtQuick.VirtualKeyboard" + + Property { name: "width"; type: "int"; value: 200; } + Property { name: "height"; type: "int"; value: 200; } + toolTip: qsTr("Provides the virtual keyboard UI.") + } +} + +Type { + name: "QtQuick.VirtualKeyboard.HandwritingInputPanel" + icon: "images/text-input-icon16.png" + + ItemLibraryEntry { + name: "Handwriting Input Panel" + category: "Virtual Keyboard" + libraryIcon: "images/text-input-icon.png" + version: "6.0" + requiredImport: "QtQuick.VirtualKeyboard" + + Property { name: "width"; type: "int"; value: 200; } + Property { name: "height"; type: "int"; value: 200; } + toolTip: qsTr("Provides a handwriting panel add-on for the virtual keyboard UI.") + } +} +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/quick3d_physics.metainfo b/share/qtcreator/qmldesigner/itemLibrary/quick3d_physics.metainfo new file mode 100644 index 00000000000..874e209dc52 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/quick3d_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/share/qtcreator/qmldesigner/itemLibrary/source/AreaSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/AreaSeries.qml new file mode 100644 index 00000000000..6aa9fae78ac --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/AreaSeries.qml @@ -0,0 +1,20 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + AreaSeries { + name: "AreaSeries" + upperSeries: LineSeries { + XYPoint { x: 0; y: 1.5 } + XYPoint { x: 1; y: 3 } + XYPoint { x: 3; y: 4.3 } + XYPoint { x: 6; y: 1.1 } + } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/BarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/BarSeries.qml new file mode 100644 index 00000000000..07e5838ef9d --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/BarSeries.qml @@ -0,0 +1,17 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + BarSeries { + name: "BarSeries" + BarSet { label: "Set1"; values: [2, 2, 3] } + BarSet { label: "Set2"; values: [5, 1, 2] } + BarSet { label: "Set3"; values: [3, 5, 8] } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Bars3D.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Bars3D.qml new file mode 100644 index 00000000000..e823c16ae7f --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/Bars3D.qml @@ -0,0 +1,28 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick3D +import QtGraphs + +Bars3D { + id: bars3d + width: 300 + height: 300 + Bar3DSeries { + id: bars3dSeries + ItemModelBarDataProxy { + id: barsDataProxy + itemModel: ListModel { + ListElement{ row: "row 1"; column: "column 1"; value: "1"; } + ListElement{ row: "row 1"; column: "column 2"; value: "2"; } + ListElement{ row: "row 1"; column: "column 3"; value: "3"; } + } + + rowRole: "row" + columnRole: "column" + valueRole: "value" + } + } +} + diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/BoxPlotSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/BoxPlotSeries.qml new file mode 100644 index 00000000000..44d7041b358 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/BoxPlotSeries.qml @@ -0,0 +1,17 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + BoxPlotSeries { + name: "BoxPlotSeries" + BoxSet { label: "Set1"; values: [3, 4, 5.1, 6.2, 8.5] } + BoxSet { label: "Set2"; values: [5, 6, 7.5, 8.6, 11.8] } + BoxSet { label: "Set3"; values: [3.2, 5, 5.7, 8, 9.2] } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DAreaSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DAreaSeries.qml new file mode 100644 index 00000000000..22c5835104b --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DAreaSeries.qml @@ -0,0 +1,52 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtGraphs + +GraphsView { + width: 300 + height: 300 + + axisX: valueAxisX + axisY: valueAxisY + + ValueAxis { + id: valueAxisX + min: 0 + max: 10 + } + ValueAxis { + id: valueAxisY + min: 0 + max: 10 + } + + AreaSeries { + name: "AreaSeries" + upperSeries: lineSeries + + LineSeries { + id: lineSeries + XYPoint { + x: 0 + y: 1.5 + } + + XYPoint { + x: 1 + y: 3 + } + + XYPoint { + x: 6 + y: 6.3 + } + + XYPoint { + x: 10 + y: 3.1 + } + } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DBarSeries.qml new file mode 100644 index 00000000000..ece1718ab83 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DBarSeries.qml @@ -0,0 +1,31 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtGraphs + +GraphsView { + width: 300 + height: 300 + + axisX: barCategoryAxis + axisY: valueAxis + + BarCategoryAxis { + id: barCategoryAxis + categories: ["2023", "2024", "2025"] + } + + ValueAxis { + id: valueAxis + min: 0 + max: 10 + } + + BarSeries { + id: barSeries + BarSet { id: set1; label: "Set1"; values: [2, 2, 3] } + BarSet { id: set2; label: "Set2"; values: [5, 1, 2] } + BarSet { id: set3; label: "Set3"; values: [3, 5, 8] } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DLineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DLineSeries.qml new file mode 100644 index 00000000000..1f7d9595e47 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DLineSeries.qml @@ -0,0 +1,47 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtGraphs + +GraphsView { + width: 300 + height: 300 + + axisX: valueAxisX + axisY: valueAxisY + + ValueAxis { + id: valueAxisX + min: 0 + max: 10 + } + ValueAxis { + id: valueAxisY + min: 0 + max: 10 + } + + LineSeries { + id: lineSeries + XYPoint { + x: 0 + y: 2 + } + + XYPoint { + x: 3 + y: 1.2 + } + + XYPoint { + x: 7 + y: 3.3 + } + + XYPoint { + x: 10 + y: 2.1 + } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DPieSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DPieSeries.qml new file mode 100644 index 00000000000..a8b8bcd806b --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DPieSeries.qml @@ -0,0 +1,17 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtGraphs + +GraphsView { + width: 300 + height: 300 + + PieSeries { + id: pieSeries + PieSlice { label: "Slice1"; value: 13.5 } + PieSlice { label: "Slice2"; value: 10.9 } + PieSlice { label: "Slice3"; value: 8.6 } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DScatterSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DScatterSeries.qml new file mode 100644 index 00000000000..4d86d504117 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DScatterSeries.qml @@ -0,0 +1,47 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtGraphs + +GraphsView { + width: 300 + height: 300 + + axisX: valueAxisX + axisY: valueAxisY + + ValueAxis { + id: valueAxisX + min: 0 + max: 10 + } + ValueAxis { + id: valueAxisY + min: 0 + max: 10 + } + + ScatterSeries { + id: lineSeries + XYPoint { + x: 0 + y: 2 + } + + XYPoint { + x: 3 + y: 1.2 + } + + XYPoint { + x: 7 + y: 3.3 + } + + XYPoint { + x: 10 + y: 2.1 + } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DSplineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DSplineSeries.qml new file mode 100644 index 00000000000..baab8f14e72 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DSplineSeries.qml @@ -0,0 +1,47 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtGraphs + +GraphsView { + width: 300 + height: 300 + + axisX: valueAxisX + axisY: valueAxisY + + ValueAxis { + id: valueAxisX + min: 0 + max: 10 + } + ValueAxis { + id: valueAxisY + min: 0 + max: 10 + } + + SplineSeries { + id: lineSeries + XYPoint { + x: 0 + y: 2 + } + + XYPoint { + x: 3 + y: 1.2 + } + + XYPoint { + x: 7 + y: 3.3 + } + + XYPoint { + x: 10 + y: 2.1 + } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalBarSeries.qml new file mode 100644 index 00000000000..559cf2b7898 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalBarSeries.qml @@ -0,0 +1,17 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + HorizontalBarSeries { + name: "HorizontalBarSeries" + BarSet { label: "Set1"; values: [2, 2, 3] } + BarSet { label: "Set2"; values: [5, 1, 2] } + BarSet { label: "Set3"; values: [3, 5, 8] } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalPercentBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalPercentBarSeries.qml new file mode 100644 index 00000000000..68f7a0f532b --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalPercentBarSeries.qml @@ -0,0 +1,17 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + HorizontalPercentBarSeries { + name: "HorizontalPercentBarSeries" + BarSet { label: "Set1"; values: [2, 2, 3] } + BarSet { label: "Set2"; values: [5, 1, 2] } + BarSet { label: "Set3"; values: [3, 5, 8] } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalStackedBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalStackedBarSeries.qml new file mode 100644 index 00000000000..c80cd3cba8d --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalStackedBarSeries.qml @@ -0,0 +1,17 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + HorizontalStackedBarSeries { + name: "HorizontalStackedBarSeries" + BarSet { label: "Set1"; values: [2, 2, 3] } + BarSet { label: "Set2"; values: [5, 1, 2] } + BarSet { label: "Set3"; values: [3, 5, 8] } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/LineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/LineSeries.qml new file mode 100644 index 00000000000..c0ce034505b --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/LineSeries.qml @@ -0,0 +1,18 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + LineSeries { + name: "LineSeries" + XYPoint { x: 0; y: 2 } + XYPoint { x: 1; y: 1.2 } + XYPoint { x: 2; y: 3.3 } + XYPoint { x: 5; y: 2.1 } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PercentBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PercentBarSeries.qml new file mode 100644 index 00000000000..71e039f2d95 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/PercentBarSeries.qml @@ -0,0 +1,17 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + PercentBarSeries { + name: "PercentBarSeries" + BarSet { label: "Set1"; values: [2, 2, 3] } + BarSet { label: "Set2"; values: [5, 1, 2] } + BarSet { label: "Set3"; values: [3, 5, 8] } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PieSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PieSeries.qml new file mode 100644 index 00000000000..eb803e68c64 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/PieSeries.qml @@ -0,0 +1,17 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + PieSeries { + name: "PieSeries" + PieSlice { label: "Slice1"; value: 13.5 } + PieSlice { label: "Slice2"; value: 10.9 } + PieSlice { label: "Slice3"; value: 8.6 } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PolarAreaSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PolarAreaSeries.qml new file mode 100644 index 00000000000..581b7b20aa6 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/PolarAreaSeries.qml @@ -0,0 +1,48 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +PolarChartView { + width: 300 + height: 300 + legend.visible: false + + ValueAxis { + id: axis1 + tickCount: 9 + } + ValueAxis { + id: axis2 + } + LineSeries { + id: lowerLine + axisAngular: axis1 + axisRadial: axis2 + + XYPoint { x: 1; y: 5 } + XYPoint { x: 2; y: 10 } + XYPoint { x: 3; y: 12 } + XYPoint { x: 4; y: 17 } + XYPoint { x: 5; y: 20 } + } + LineSeries { + id: upperLine + axisAngular: axis1 + axisRadial: axis2 + + XYPoint { x: 1; y: 5 } + XYPoint { x: 2; y: 14 } + XYPoint { x: 3; y: 20 } + XYPoint { x: 4; y: 32 } + XYPoint { x: 5; y: 35 } + } + AreaSeries { + name: "AreaSeries" + axisAngular: axis1 + axisRadial: axis2 + lowerSeries: lowerLine + upperSeries: upperLine + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PolarLineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PolarLineSeries.qml new file mode 100644 index 00000000000..a1d43c4554e --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/PolarLineSeries.qml @@ -0,0 +1,27 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +PolarChartView { + width: 300 + height: 300 + + LineSeries { + name: "LineSeries" + axisRadial: CategoryAxis { + min: 0 + max: 20 + } + axisAngular: ValueAxis { + tickCount: 9 + } + XYPoint { x: 0; y: 4.3 } + XYPoint { x: 2; y: 4.7 } + XYPoint { x: 4; y: 5.2 } + XYPoint { x: 6; y: 6.1 } + XYPoint { x: 8; y: 12.9 } + XYPoint { x: 9; y: 19.2 } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PolarScatterSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PolarScatterSeries.qml new file mode 100644 index 00000000000..26dd577b5ea --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/PolarScatterSeries.qml @@ -0,0 +1,26 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +PolarChartView { + width: 300 + height: 300 + + ScatterSeries { + name: "ScatterSeries" + axisRadial: CategoryAxis { + min: 0 + max: 20 + } + axisAngular: ValueAxis { + tickCount: 9 + } + XYPoint { x: 0; y: 4.3 } + XYPoint { x: 2; y: 4.7 } + XYPoint { x: 4; y: 5.2 } + XYPoint { x: 8; y: 12.9 } + XYPoint { x: 9; y: 19.2 } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PolarSplineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PolarSplineSeries.qml new file mode 100644 index 00000000000..5f05ca9c622 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/PolarSplineSeries.qml @@ -0,0 +1,27 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +PolarChartView { + width: 300 + height: 300 + + SplineSeries { + name: "SplineSeries" + axisRadial: CategoryAxis { + min: 0 + max: 20 + } + axisAngular: ValueAxis { + tickCount: 9 + } + XYPoint { x: 0; y: 4.3 } + XYPoint { x: 2; y: 4.7 } + XYPoint { x: 4; y: 5.2 } + XYPoint { x: 6; y: 6.1 } + XYPoint { x: 8; y: 12.9 } + XYPoint { x: 9; y: 19.2 } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Scatter3D.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Scatter3D.qml new file mode 100644 index 00000000000..24c199ab406 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/Scatter3D.qml @@ -0,0 +1,28 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick3D +import QtGraphs + +Scatter3D { + id: scatter3d + width: 300 + height: 300 + Scatter3DSeries { + id: scatter3dSeries + ItemModelScatterDataProxy { + id: scatterDataProxy + itemModel: ListModel { + ListElement{ x: "1"; y: "2"; z: "3"; } + ListElement{ x: "2"; y: "3"; z: "4"; } + ListElement{ x: "3"; y: "4"; z: "1"; } + } + + xPosRole: "x" + yPosRole: "y" + zPosRole: "z" + } + } +} + diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/ScatterSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/ScatterSeries.qml new file mode 100644 index 00000000000..3b73402e41b --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/ScatterSeries.qml @@ -0,0 +1,18 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + ScatterSeries { + name: "ScatterSeries" + XYPoint { x: 1; y: 1 } + XYPoint { x: 2; y: 4 } + XYPoint { x: 4; y: 2 } + XYPoint { x: 5; y: 5 } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/SplineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/SplineSeries.qml new file mode 100644 index 00000000000..b400a99e535 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/SplineSeries.qml @@ -0,0 +1,18 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + SplineSeries { + name: "SplineSeries" + XYPoint { x: 0; y: 1 } + XYPoint { x: 3; y: 4.3 } + XYPoint { x: 5; y: 3.1 } + XYPoint { x: 8; y: 5.8 } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/StackedBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/StackedBarSeries.qml new file mode 100644 index 00000000000..45431cd8580 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/StackedBarSeries.qml @@ -0,0 +1,17 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtCharts + +ChartView { + width: 300 + height: 300 + + StackedBarSeries { + name: "StackedBarSeries" + BarSet { label: "Set1"; values: [2, 2, 3] } + BarSet { label: "Set2"; values: [5, 1, 2] } + BarSet { label: "Set3"; values: [3, 5, 8] } + } +} diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Surface3D.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Surface3D.qml new file mode 100644 index 00000000000..d5c0a56fff6 --- /dev/null +++ b/share/qtcreator/qmldesigner/itemLibrary/source/Surface3D.qml @@ -0,0 +1,28 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick3D +import QtGraphs + +Surface3D { + id: surface3d + width: 300 + height: 300 + Surface3DSeries { + id: surface3dSeries + ItemModelSurfaceDataProxy { + id: surfaceDataProxy + itemModel: ListModel { + ListElement{ row: "1"; column: "1"; y: "1"; } + ListElement{ row: "1"; column: "2"; y: "2"; } + ListElement{ row: "2"; column: "1"; y: "3"; } + ListElement{ row: "2"; column: "2"; y: "4"; } + } + + rowRole: "row" + columnRole: "column" + yPosRole: "y" + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeImagePane.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeImagePane.qml new file mode 100644 index 00000000000..5f06bd79d89 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeImagePane.qml @@ -0,0 +1,156 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import QtQuickDesignerTheme +import HelperWidgets +import StudioTheme as StudioTheme + +Rectangle { + id: itemPane + width: 320 + height: 400 + color: Theme.qmlDesignerBackgroundColorDarkAlternate() + + Component.onCompleted: Controller.mainScrollView = mainScrollView + + MouseArea { + anchors.fill: parent + onClicked: forceActiveFocus() + } + + ScrollView { + id: mainScrollView + clip: true + anchors.fill: parent + + Column { + id: mainColumn + y: -1 + width: itemPane.width + + onWidthChanged: StudioTheme.Values.responsiveResize(itemPane.width) + Component.onCompleted: StudioTheme.Values.responsiveResize(itemPane.width) + + ComponentSection {} + + Section { + caption: qsTr("Safe Image") + anchors.left: parent.left + anchors.right: parent.right + + SectionLayout { + PropertyLabel { text: qsTr("Position") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.x + maximumValue: 0xffff + minimumValue: -0xffff + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.y + maximumValue: 0xffff + minimumValue: -0xffff + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Size") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.width + maximumValue: 0xffff + minimumValue: 1 + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + //: The width of the object + text: qsTr("W", "width") + } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + id: heightSpinBox + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.height + maximumValue: 0xffff + minimumValue: 1 + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + //: The height of the object + text: qsTr("H", "height") + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Source") } + + SecondColumnLayout { + UrlChooser { + backendValue: backendValues.source + } + + ExpandingSpacer {} + } + PropertyLabel { text: qsTr("fillColor") } + + ColorEditor { + backendValue: backendValues.fillColor + supportGradient: false + } + + PropertyLabel { text: qsTr("Opacity") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + sliderIndicatorVisible: true + backendValue: backendValues.opacity + decimals: 2 + minimumValue: 0 + maximumValue: 1 + hasSlider: true + stepSize: 0.1 + } + + ExpandingSpacer {} + } + } + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafePicturePane.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafePicturePane.qml new file mode 100644 index 00000000000..89aaccba29c --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafePicturePane.qml @@ -0,0 +1,163 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import QtQuickDesignerTheme +import HelperWidgets +import StudioTheme as StudioTheme + +Rectangle { + id: itemPane + width: 320 + height: 400 + color: Theme.qmlDesignerBackgroundColorDarkAlternate() + + Component.onCompleted: Controller.mainScrollView = mainScrollView + + MouseArea { + anchors.fill: parent + onClicked: forceActiveFocus() + } + + ScrollView { + id: mainScrollView + clip: true + anchors.fill: parent + + Column { + id: mainColumn + y: -1 + width: itemPane.width + + onWidthChanged: StudioTheme.Values.responsiveResize(itemPane.width) + Component.onCompleted: StudioTheme.Values.responsiveResize(itemPane.width) + + ComponentSection {} + + Section { + caption: qsTr("Safe Picture") + anchors.left: parent.left + anchors.right: parent.right + + SectionLayout { + PropertyLabel { text: qsTr("Position") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.x + maximumValue: 0xffff + minimumValue: -0xffff + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.y + maximumValue: 0xffff + minimumValue: -0xffff + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Size") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.width + maximumValue: 0xffff + minimumValue: 1 + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + //: The width of the object + text: qsTr("W", "width") + } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + id: heightSpinBox + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.height + maximumValue: 0xffff + minimumValue: 1 + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + //: The height of the object + text: qsTr("H", "height") + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Source") } + + SecondColumnLayout { + UrlChooser { + backendValue: backendValues.source + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Color") } + + ColorEditor { + backendValue: backendValues.color + supportGradient: false + } + + PropertyLabel { text: qsTr("fillColor") } + + ColorEditor { + backendValue: backendValues.fillColor + supportGradient: false + } + PropertyLabel { text: qsTr("Opacity") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + sliderIndicatorVisible: true + backendValue: backendValues.opacity + decimals: 2 + minimumValue: 0 + maximumValue: 1 + hasSlider: true + stepSize: 0.1 + } + + ExpandingSpacer {} + } + } + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeTextPane.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeTextPane.qml new file mode 100644 index 00000000000..be097ee2738 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeTextPane.qml @@ -0,0 +1,269 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import QtQuickDesignerTheme +import HelperWidgets +import StudioTheme as StudioTheme + +Rectangle { + id: itemPane + width: 320 + height: 400 + color: Theme.qmlDesignerBackgroundColorDarkAlternate() + + Component.onCompleted: Controller.mainScrollView = mainScrollView + + MouseArea { + anchors.fill: parent + onClicked: forceActiveFocus() + } + + ScrollView { + id: mainScrollView + clip: true + anchors.fill: parent + + Column { + id: mainColumn + y: -1 + width: itemPane.width + + onWidthChanged: StudioTheme.Values.responsiveResize(itemPane.width) + Component.onCompleted: StudioTheme.Values.responsiveResize(itemPane.width) + + ComponentSection {} + + Section { + caption: qsTr("Safe Text") + anchors.left: parent.left + anchors.right: parent.right + + SectionLayout { + PropertyLabel { text: qsTr("Position") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.x + maximumValue: 0xffff + minimumValue: -0xffff + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.y + maximumValue: 0xffff + minimumValue: -0xffff + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Size") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.width + maximumValue: 0xffff + minimumValue: 1 + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + //: The width of the object + text: qsTr("W", "width") + } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + id: heightSpinBox + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.height + maximumValue: 0xffff + minimumValue: 1 + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + //: The height of the object + text: qsTr("H", "height") + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Text") } + + SecondColumnLayout { + LineEdit { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + backendValue: backendValues.text + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Color") } + + ColorEditor { + backendValue: backendValues.color + supportGradient: false + } + PropertyLabel { text: qsTr("fillColor") } + + ColorEditor { + backendValue: backendValues.fillColor + supportGradient: false + } + PropertyLabel { text: qsTr("Opacity") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + sliderIndicatorVisible: true + backendValue: backendValues.opacity + decimals: 2 + minimumValue: 0 + maximumValue: 1 + hasSlider: true + stepSize: 0.1 + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Font") } + + SecondColumnLayout { + FontComboBox { + id: fontComboBox + property string familyName: backendValue.value + backendValue: backendValues.font_family + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Size") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.font_pixelSize + minimumValue: 0 + maximumValue: 400 + decimals: 0 + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "px" } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Emphasis") } + + SecondColumnLayout { + BoolButtonRowButton { + id: boldButton + buttonIcon: StudioTheme.Constants.fontStyleBold + backendValue: backendValues.font_bold + } + + Spacer { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + - (boldButton.implicitWidth + italicButton.implicitWidth) + } + + BoolButtonRowButton { + id: italicButton + buttonIcon: StudioTheme.Constants.fontStyleItalic + backendValue: backendValues.font_italic + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Alignment H") } + + SecondColumnLayout { + AlignmentHorizontalButtons { + scope: "SafeText" + } + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Alignment V") } + + SecondColumnLayout { + AlignmentVerticalButtons { + scope: "SafeText" + } + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Wrap mode") } + + SecondColumnLayout { + ComboBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + backendValue: backendValues.wrapMode + scope: "SafeText" + model: ["NoWrap", "WordWrap", "WrapAnywhere", "Wrap"] + enabled: backendValue.isAvailable + } + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Dynamic") } + + SecondColumnLayout { + CheckBox { + text: backendValue.valueToString + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.runtimeEditable + } + + ExpandingSpacer {} + } + } + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtCharts/ChartViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtCharts/ChartViewSpecifics.qml new file mode 100644 index 00000000000..1397249460a --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtCharts/ChartViewSpecifics.qml @@ -0,0 +1,123 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Title") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Title") + } + + SecondColumnLayout { + LineEdit { + backendValue: backendValues.title + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Color") + } + + ColorEditor { + backendValue: backendValues.titleColor + supportGradient: false + } + } + } + + Section { + width: parent.width + caption: qsTr("Background") + + SectionLayout { + PropertyLabel { + text: qsTr("Color") + } + + ColorEditor { + backendValue: backendValues.backgroundColor + supportGradient: false + } + + PropertyLabel { + text: qsTr("Roundness") + tooltip: qsTr("Diameter of the rounding circle at the corners") + } + + SecondColumnLayout { + SpinBox { + backendValue: backendValues.backgroundRoundness + minimumValue: 0.1 + maximumValue: 100.0 + stepSize: 0.1 + decimals: 1 + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + + PropertyLabel { + text: qsTr("Drop Shadow") + tooltip: qsTr("Enable border drop shadow") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.dropShadowEnabled.valueToString + backendValue: backendValues.dropShadowEnabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + } + } + + Section { + width: parent.width + caption: qsTr("Plot Area") + + SectionLayout { + PropertyLabel { + text: qsTr("Color") + } + + ColorEditor { + backendValue: backendValues.plotAreaColor + supportGradient: false + } + } + } + + Section { + width: parent.width + caption: qsTr("Localization") + + SectionLayout { + PropertyLabel { + text: qsTr("Localize Numbers") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.localizeNumbers.valueToString + backendValue: backendValues.localizeNumbers + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Bars3DSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Bars3DSpecifics.qml new file mode 100644 index 00000000000..9c822a726f9 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Bars3DSpecifics.qml @@ -0,0 +1,276 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import HelperWidgets +import QtQuick.Layouts +import StudioTheme as StudioTheme +import QtQuick.Controls as Controls + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Bars") + + SectionLayout { + PropertyLabel { + text: qsTr("Uniform Scaling") + tooltip: qsTr("Proportionally scale multiple series") + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.multiSeriesUniform + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Thickness") + tooltip: qsTr("Thickness ratio between X and Z dimension") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.barThickness + minimumValue: 0.01 + maximumValue: 100.0 + stepSize: 0.01 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + + PropertyLabel { + text: qsTr("Spacing") + tooltip: qsTr("Bar spacing in the X and Z dimensions") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.barSpacing_width + minimumValue: 0.0 + maximumValue: 10.0 + stepSize: 0.01 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + - StudioTheme.Values.actionIndicatorWidth + } + ControlLabel { + text: qsTr("Col") + width: StudioTheme.Values.actionIndicatorWidth * 2 + } + } + + PropertyLabel {} + SecondColumnLayout { + SpinBox { + backendValue: backendValues.barSpacing_height + minimumValue: 0.0 + maximumValue: 10.0 + stepSize: 0.01 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + - StudioTheme.Values.actionIndicatorWidth + } + ControlLabel { + text: qsTr("Row") + width: StudioTheme.Values.actionIndicatorWidth * 2 + } + + } + PropertyLabel { + text: qsTr("Relative Spacing") + tooltip: qsTr("Set bar spacing relative to thickness") + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.barSpacingRelative + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Series Margin") + tooltip: qsTr("Margin between series columns in X and Z dimensions") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.barSeriesMargin_width + minimumValue: 0.0 + maximumValue: 1.0 + stepSize: 0.01 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + - StudioTheme.Values.actionIndicatorWidth + } + ControlLabel { + text: qsTr("Col") + width: StudioTheme.Values.actionIndicatorWidth * 2 + } + } + PropertyLabel {} + SecondColumnLayout { + SpinBox { + backendValue: backendValues.barSeriesMargin_height + minimumValue: 0.0 + maximumValue: 1.0 + stepSize: 0.01 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + - StudioTheme.Values.actionIndicatorWidth + } + ControlLabel { + text: qsTr("Row") + width: StudioTheme.Values.actionIndicatorWidth * 2 + } + + } + PropertyLabel { + text: qsTr("Floor Level") + tooltip: qsTr("Floor level in Y-axis data coordinates") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.floorLevel + minimumValue: 0.0 + maximumValue: 999999 + stepSize: 0.1 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + - StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Selection Mode") + tooltip: qsTr("Bar selection mode") + } + SecondColumnLayout { + id: selectionLayout + property bool isInModel: backendValue.isInModel; + property bool isInSubState: backendValue.isInSubState; + property bool selectionChangedFlag: selectionChanged + property variant backendValue: backendValues.selectionMode + property variant valueFromBackend: backendValue.value + property string enumScope: "Graphs3D.SelectionFlag" + property string enumSeparator: " | " + property int checkedCount: 0 + property bool item: false + property bool row: false + property bool column: false + property bool slice: false + property bool multi: false + + function checkValue(checkedVariable, variableText, expressionBase) { + var expressionStr = expressionBase + if (checkedVariable) { + if (expressionStr !== "") { + expressionStr += enumSeparator + } + expressionStr += enumScope + expressionStr += "." + expressionStr += variableText + checkedCount++ + } + return expressionStr + } + + function composeSelectionMode() { + var expressionStr = "" + checkedCount = 0 + expressionStr = checkValue(item, "Item", expressionStr) + expressionStr = checkValue(row, "Row", expressionStr) + expressionStr = checkValue(column, "Column", expressionStr) + expressionStr = checkValue(slice, "Slice", expressionStr) + expressionStr = checkValue(multi, "MultiSeries", expressionStr) + + if (checkedCount === 0) + backendValue.expression = enumScope + ".None" + else + backendValue.expression = expressionStr + } + + function evaluate() { + if (backendValue.value === undefined) + return + + item = (backendValue.expression.indexOf("Item") !== -1) + row = (backendValue.expression.indexOf("Row") !== -1) + column = (backendValue.expression.indexOf("Column") !== -1) + slice = (backendValue.expression.indexOf("Slice") !== -1) + multi = (backendValue.expression.indexOf("MultiSeries") !== -1) + + itemBox.checked = item + rowBox.checked = row + columnBox.checked = column + sliceBox.checked = slice + multiSeriesBox.checked = multi + } + + onSelectionChangedFlagChanged: evaluate() + + onIsInModelChanged: evaluate() + + onIsInSubStateChanged: evaluate() + + onBackendValueChanged: evaluate() + + onValueFromBackendChanged: evaluate() + + ColumnLayout { + anchors.fill: parent + + Controls.CheckBox { + id: itemBox + text: "Item" + Layout.fillWidth: true + onClicked: { + selectionLayout.item = checked + selectionLayout.composeSelectionMode() + } + } + Controls.CheckBox { + id: rowBox + text: "Row" + Layout.fillWidth: true + onClicked: { + selectionLayout.row = checked + selectionLayout.composeSelectionMode() + } + } + Controls.CheckBox { + id: columnBox + text: "Column" + Layout.fillWidth: true + onClicked: { + selectionLayout.column = checked + selectionLayout.composeSelectionMode() + } + } + Controls.CheckBox { + id: sliceBox + text: "Slice" + Layout.fillWidth: true + onClicked: { + selectionLayout.slice = checked + selectionLayout.composeSelectionMode() + } + } + Controls.CheckBox { + id: multiSeriesBox + text: "MultiSeries" + Layout.fillWidth: true + onClicked: { + selectionLayout.multi = checked + selectionLayout.composeSelectionMode() + } + } + } + } + } + } + + GraphsSection {} + + GraphsCameraSection {} +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsCameraSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsCameraSection.qml new file mode 100644 index 00000000000..dd7d64ee911 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsCameraSection.qml @@ -0,0 +1,189 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import HelperWidgets +import QtQuick.Layouts +import StudioTheme as StudioTheme + +Section { + width: parent.width + caption: qsTr("Camera") + + SectionLayout { + PropertyLabel { + text: qsTr("Preset") + tooltip: qsTr("Camera preset") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.cameraPreset + model: ["NoPreset", "FrontLow", "Front", "FrontHigh", "LeftLow", + "Left", "LeftHigh", "RightLow", "Right", "RightHigh", "BehindLow", + "Behind", "BehindHigh", "IsometricLeft", "IsometricLeftHigh", + "IsometricRight", "IsometricRightHigh", "DirectlyAbove", + "DirectlyAboveCW45", "DirectlyAboveCCW45", "FrontBelow", + "LeftBelow", "RightBelow", "BehindBelow", "DirectlyBelow"] + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + scope: "Graphs3D" + } + } + PropertyLabel { + text: qsTr("Target") + tooltip: qsTr("Camera target position") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.cameraTargetPosition_x + minimumValue: -1.0 + maximumValue: 1.0 + stepSize: 0.01 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + } + ControlLabel { + text: "X" + width: StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel {} + SecondColumnLayout { + SpinBox { + backendValue: backendValues.cameraTargetPosition_y + minimumValue: -1.0 + maximumValue: 1.0 + stepSize: 0.01 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + } + ControlLabel { + text:"Y" + width: StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel {} + SecondColumnLayout { + SpinBox { + backendValue: backendValues.cameraTargetPosition_z + minimumValue: -1.0 + maximumValue: 1.0 + stepSize: 0.01 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + } + ControlLabel { + text: "Z" + width: StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Zoom") + tooltip: qsTr("Camera zoom level") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.cameraZoomLevel + minimumValue: 0 + maximumValue: 500 + stepSize: 1 + decimals: 0 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Min Zoom") + tooltip: qsTr("Camera minimum zoom") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.minCameraZoomLevel + minimumValue: 0 + maximumValue: 500 + stepSize: 1 + decimals: 0 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Max Zoom") + tooltip: qsTr("Camera maximum zoom") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.maxCameraZoomLevel + minimumValue: 0 + maximumValue: 500 + stepSize: 1 + decimals: 0 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("X Rotation") + tooltip: qsTr("Camera X rotation") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.cameraXRotation + minimumValue: -180 + maximumValue: 180 + stepSize: 1 + decimals: 0 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Wrap X") + tooltip: qsTr("Wrap camera X rotation") + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.wrapCameraXRotation + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Y Rotation") + tooltip: qsTr("Camera Y rotation") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.cameraYRotation + minimumValue: 0 + maximumValue: 90 + stepSize: 1 + decimals: 0 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Wrap Y") + tooltip: qsTr("Wrap camera Y rotation") + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.wrapCameraYRotation + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Orthographic") + tooltip: qsTr("Use orthographic camera") + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.orthoProjection + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsSection.qml new file mode 100644 index 00000000000..ee97514b6b1 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsSection.qml @@ -0,0 +1,124 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import HelperWidgets +import QtQuick.Layouts +import StudioTheme as StudioTheme + +Section { + width: parent.width + caption: qsTr("Graph") + + SectionLayout { + PropertyLabel { + text: qsTr("Render Mode") + tooltip: qsTr("Rendering mode") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.renderingMode + model: ["Indirect", "DirectToBackground"] + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + scope: "Graphs3D" + } + } + PropertyLabel { + text: qsTr("Shadow Quality") + tooltip: qsTr("Quality and style of the shadows") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.shadowQuality + model: ["None", "Low", "Medium", + "High", "SoftLow", "SoftMedium", + "SoftHigh"] + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + scope: "Graphs3D" + } + } + PropertyLabel { + text: qsTr("Optimization") + tooltip: qsTr("Optimization hint") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.optimizationHint + model: ["Default", "Legacy"] + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + scope: "Graphs3D" + } + } + PropertyLabel { + text: qsTr("MSAA") + tooltip: qsTr("Multisample anti-aliasing sample count") + } + SpinBox { + backendValue: backendValues.msaaSamples + minimumValue: 0 + maximumValue: 8 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + PropertyLabel { + text: qsTr("Aspect Ratio") + tooltip: qsTr("Horizontal to vertical aspect ratio") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.aspectRatio + minimumValue: 0.1 + maximumValue: 10.0 + stepSize: 0.1 + decimals: 1 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Horizontal AR") + tooltip: qsTr("Horizontal aspect ratio") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.horizontalAspectRatio + minimumValue: 0.1 + maximumValue: 10.0 + stepSize: 0.1 + decimals: 1 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Margin") + tooltip: qsTr("Graph background margin") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.margin + minimumValue: -1.0 + maximumValue: 100.0 + stepSize: 0.1 + decimals: 1 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Measure FPS") + tooltip: qsTr("Measure rendering speed as Frames Per Second") + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.measureFps + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + } +} + diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsViewSpecifics.qml new file mode 100644 index 00000000000..cb23b168ec4 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsViewSpecifics.qml @@ -0,0 +1,103 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import HelperWidgets +import QtQuick.Layouts +import StudioTheme as StudioTheme + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Background") + + SectionLayout { + PropertyLabel { + text: qsTr("Color") + } + + ColorEditor { + backendValue: backendValues.backgroundColor + supportGradient: false + } + } + } + + Section { + width: parent.width + caption: qsTr("Margins") + + SectionLayout { + rows: 4 + PropertyLabel { + text: qsTr("Top") + tooltip: qsTr("The amount of empty space on the top of the graph.") + } + + SecondColumnLayout { + SpinBox { + backendValue: backendValues.marginTop + minimumValue: 0.0 + maximumValue: 9999.0 + stepSize: 1.0 + decimals: 1 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + + PropertyLabel { + text: qsTr("Bottom") + tooltip: qsTr("The amount of empty space on the bottom of the graph.") + } + + SecondColumnLayout { + SpinBox { + backendValue: backendValues.marginBottom + minimumValue: 0.0 + maximumValue: 9999.0 + stepSize: 1.0 + decimals: 1 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + + PropertyLabel { + text: qsTr("Left") + tooltip: qsTr("The amount of empty space on the left of the graph.") + } + + SecondColumnLayout { + SpinBox { + backendValue: backendValues.marginLeft + minimumValue: 0.0 + maximumValue: 9999.0 + stepSize: 1.0 + decimals: 1 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + + PropertyLabel { + text: qsTr("Right") + tooltip: qsTr("The amount of empty space on the right of the graph.") + } + + SecondColumnLayout { + SpinBox { + backendValue: backendValues.marginRight + minimumValue: 0.0 + maximumValue: 9999.0 + stepSize: 1.0 + decimals: 1 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Scatter3DSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Scatter3DSpecifics.qml new file mode 100644 index 00000000000..03e3ca6debc --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Scatter3DSpecifics.qml @@ -0,0 +1,65 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import HelperWidgets +import QtQuick.Layouts +import StudioTheme as StudioTheme + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Scatter") + + SectionLayout { + PropertyLabel { + text: qsTr("Polar Coordinates") + tooltip: qsTr("Use polar coordinates") + } + SecondColumnLayout { + CheckBox { + id: polarCheckbox + backendValue: backendValues.polar + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Label Offset") + tooltip: qsTr("Normalized horizontal radial label offset") + visible: polarCheckbox.checked + } + SecondColumnLayout { + visible: polarCheckbox.checked + SpinBox { + backendValue: backendValues.radialLabelOffset + minimumValue: 0.0 + maximumValue: 1.0 + stepSize: 0.01 + decimals: 2 + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + } + PropertyLabel { + text: qsTr("Selection Mode") + tooltip: qsTr("Scatter item selection mode") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.selectionMode + model: ["None", "Item"] + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + scope: "Graphs3D" + } + } + } + } + + GraphsSection {} + + GraphsCameraSection {} +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Surface3DSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Surface3DSpecifics.qml new file mode 100644 index 00000000000..66a1d65f87c --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Surface3DSpecifics.qml @@ -0,0 +1,192 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import HelperWidgets +import QtQuick.Layouts +import QtQuick.Controls as Controls + +Column { + anchors.left: parent.left + anchors.right: parent.right + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Surface") + + SectionLayout { + PropertyLabel { + text: qsTr("Flip Grid") + tooltip: qsTr("Flip horizontal grid") + Layout.fillWidth: true + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.flipHorizontalGrid + Layout.fillWidth: true + } + } + PropertyLabel { + text: qsTr("Polar Coordinates") + tooltip: qsTr("Use polar coordinates") + Layout.fillWidth: true + } + SecondColumnLayout { + CheckBox { + id: polarCheckbox + backendValue: backendValues.polar + Layout.fillWidth: true + } + } + PropertyLabel { + text: qsTr("Label Offset") + tooltip: qsTr("Normalized horizontal radial label offset") + Layout.fillWidth: true + visible: polarCheckbox.checked + } + SecondColumnLayout { + visible: polarCheckbox.checked + SpinBox { + backendValue: backendValues.radialLabelOffset + minimumValue: 0.0 + maximumValue: 1.0 + stepSize: 0.01 + decimals: 2 + Layout.fillWidth: true + } + } + PropertyLabel { + text: qsTr("Selection Mode") + tooltip: qsTr("Surface point selection mode") + Layout.fillWidth: true + } + SecondColumnLayout { + id: selectionLayout + property bool isInModel: backendValue.isInModel; + property bool isInSubState: backendValue.isInSubState; + property bool selectionChangedFlag: selectionChanged + property variant backendValue: backendValues.selectionMode + property variant valueFromBackend: backendValue.value + property string enumScope: "Graphs3D.SelectionFlag" + property string enumSeparator: " | " + property int checkedCount: 0 + property bool item: false + property bool row: false + property bool column: false + property bool slice: false + property bool multi: false + + function checkValue(checkedVariable, variableText, expressionBase) { + var expressionStr = expressionBase + if (checkedVariable) { + if (expressionStr !== "") { + expressionStr += enumSeparator + } + expressionStr += enumScope + expressionStr += "." + expressionStr += variableText + checkedCount++ + } + return expressionStr + } + + function composeSelectionMode() { + var expressionStr = "" + checkedCount = 0 + expressionStr = checkValue(item, "Item", expressionStr) + expressionStr = checkValue(row, "Row", expressionStr) + expressionStr = checkValue(column, "Column", expressionStr) + expressionStr = checkValue(slice, "Slice", expressionStr) + expressionStr = checkValue(multi, "MultiSeries", expressionStr) + + if (checkedCount === 0) + backendValue.expression = enumScope + ".None" + else + backendValue.expression = expressionStr + } + + function evaluate() { + if (backendValue.value === undefined) + return + + item = (backendValue.expression.indexOf("Item") !== -1) + row = (backendValue.expression.indexOf("Row") !== -1) + column = (backendValue.expression.indexOf("Column") !== -1) + slice = (backendValue.expression.indexOf("Slice") !== -1) + multi = (backendValue.expression.indexOf("MultiSeries") !== -1) + + itemBox.checked = item + rowBox.checked = row + columnBox.checked = column + sliceBox.checked = slice + multiSeriesBox.checked = multi + } + + onSelectionChangedFlagChanged: evaluate() + + onIsInModelChanged: evaluate() + + onIsInSubStateChanged: evaluate() + + onBackendValueChanged: evaluate() + + onValueFromBackendChanged: evaluate() + + ColumnLayout { + anchors.fill: parent + + Controls.CheckBox { + id: itemBox + text: "Item" + Layout.fillWidth: true + onClicked: { + selectionLayout.item = checked + selectionLayout.composeSelectionMode() + } + } + Controls.CheckBox { + id: rowBox + text: "Row" + Layout.fillWidth: true + onClicked: { + selectionLayout.row = checked + selectionLayout.composeSelectionMode() + } + } + Controls.CheckBox { + id: columnBox + text: "Column" + Layout.fillWidth: true + onClicked: { + selectionLayout.column = checked + selectionLayout.composeSelectionMode() + } + } + Controls.CheckBox { + id: sliceBox + text: "Slice" + Layout.fillWidth: true + onClicked: { + selectionLayout.slice = checked + selectionLayout.composeSelectionMode() + } + } + Controls.CheckBox { + id: multiSeriesBox + text: "MultiSeries" + Layout.fillWidth: true + onClicked: { + selectionLayout.multi = checked + selectionLayout.composeSelectionMode() + } + } + } + } + } + } + + GraphsSection {} + + GraphsCameraSection {} +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSection.qml new file mode 100644 index 00000000000..6dfe93f83ee --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSection.qml @@ -0,0 +1,85 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Section { + caption: qsTr("Box Shape") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Extents") + tooltip: qsTr("The extents of the box shape in the X, Y and Z directions.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: 0 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.extents_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: 0 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.extents_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: 0 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.extents_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSpecifics.qml new file mode 100644 index 00000000000..c6ac4e6964f --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSpecifics.qml @@ -0,0 +1,22 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + BoxShapeSection { + width: parent.width + } + + CollisionShapeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSection.qml new file mode 100644 index 00000000000..2283f934489 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSection.qml @@ -0,0 +1,50 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Section { + caption: qsTr("Capsule Shape") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Diameter") + tooltip: qsTr("Sets the diameter of the capsule.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.diameter + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Height") + tooltip: qsTr("Sets the height of the capsule.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.height + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSpecifics.qml new file mode 100644 index 00000000000..eedfbb37e33 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSpecifics.qml @@ -0,0 +1,22 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + CapsuleShapeSection { + width: parent.width + } + + CollisionShapeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSection.qml new file mode 100644 index 00000000000..b7c1d82baa7 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSection.qml @@ -0,0 +1,188 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Section { + caption: qsTr("Character Controller") + width: parent.width + + SectionLayout { + PropertyLabel { + text: "Gravity" + tooltip: "The gravitational acceleration that applies to the character." + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.gravity_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.gravity_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.gravity_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: "Movement" + tooltip: "The controlled motion of the character." + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.movement_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.movement_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.movement_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: "Mid Air Control" + tooltip: "Enables movement property to have an effect when the character is in free fall." + } + + SecondColumnLayout { + CheckBox { + text: backendValues.midAirControl.valueToString + backendValue: backendValues.midAirControl + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: "Enable ShapeHit Callback" + tooltip: "Enables the shapeHit callback for this character controller." + } + + SecondColumnLayout { + CheckBox { + text: backendValues.midAirControl.valueToString + backendValue: backendValues.enableShapeHitCallback + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSpecifics.qml new file mode 100644 index 00000000000..bc65d7ca752 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSpecifics.qml @@ -0,0 +1,26 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + CharacterControllerSection { + width: parent.width + } + + PhysicsBodySection { + width: parent.width + } + + PhysicsNodeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CollisionShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CollisionShapeSection.qml new file mode 100644 index 00000000000..8ab32582cea --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CollisionShapeSection.qml @@ -0,0 +1,34 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Collision Shape") + + SectionLayout { + PropertyLabel { + text: qsTr("Debug Draw") + tooltip: qsTr("Draws the collision shape in the scene view.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.enableDebugDraw.valueToString + backendValue: backendValues.enableDebugDraw + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSection.qml new file mode 100644 index 00000000000..cc7fb9cc04a --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSection.qml @@ -0,0 +1,28 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Section { + caption: qsTr("Convex Mesh Shape") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Source") + tooltip: qsTr("Defines the location of the mesh file used to define the shape.") + } + + SecondColumnLayout { + UrlChooser { + id: sourceUrlChooser + backendValue: backendValues.source + filter: "*.mesh" + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSpecifics.qml new file mode 100644 index 00000000000..c4f4e325f7d --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSpecifics.qml @@ -0,0 +1,22 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + ConvexMeshShapeSection { + width: parent.width + } + + CollisionShapeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySection.qml new file mode 100644 index 00000000000..8574a37a5de --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySection.qml @@ -0,0 +1,658 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Dynamic Rigid Body") + + SectionLayout { + id: baseSectionLayout + + property bool isDefaultDensityMode: massModeComboBox.currentIndex === 0 + property bool isCustomDensityMode: massModeComboBox.currentIndex === 1 + property bool isMassMode: massModeComboBox.currentIndex === 2 + property bool isMassAndInertiaTensorMode: massModeComboBox.currentIndex === 3 + property bool isMassAndInertiaMatrixMode: massModeComboBox.currentIndex === 4 + + PropertyLabel { + text: "Mass Mode" + tooltip: "Describes how mass and inertia are calculated for this body." + } + + SecondColumnLayout { + ComboBox { + id: massModeComboBox + scope: "DynamicRigidBody" + model: ["DefaultDensity", "CustomDensity", "Mass", "MassAndInertiaTensor", "MassAndInertiaMatrix"] + backendValue: backendValues.massMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: baseSectionLayout.isMassAndInertiaMatrixMode || baseSectionLayout.isMassAndInertiaTensorMode + } + + SecondColumnLayout { + visible: baseSectionLayout.isMassAndInertiaMatrixMode || baseSectionLayout.isMassAndInertiaTensorMode + + Item { + // spacer for the always hiden action indicator + width: StudioTheme.Values.actionIndicatorWidth + } + + Label { + text: qsTr("Tensor and Matrix modes require QML code.") + Layout.fillWidth: true + Layout.preferredWidth: StudioTheme.Values.singleControlColumnWidth + Layout.minimumWidth: StudioTheme.Values.singleControlColumnWidth + Layout.maximumWidth: StudioTheme.Values.singleControlColumnWidth + } + } + + PropertyLabel { + visible: !baseSectionLayout.isDefaultDensityMode && !baseSectionLayout.isCustomDensityMode + text: "Mass" + tooltip: "The mass of the body." + } + + SecondColumnLayout { + visible: !baseSectionLayout.isDefaultDensityMode && !baseSectionLayout.isCustomDensityMode + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + decimals: 2 + stepSize: 0.01 + backendValue: backendValues.mass + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: baseSectionLayout.isCustomDensityMode + text: "Density" + tooltip: "The density of the body." + } + + SecondColumnLayout { + visible: baseSectionLayout.isCustomDensityMode + SpinBox { + minimumValue: -1 + maximumValue: 9999999 + decimals: 2 + stepSize: 0.01 + backendValue: backendValues.density + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: "Enable Gravity" + tooltip: "Sets if the body affected by gravity." + } + + SecondColumnLayout { + CheckBox { + text: backendValues.gravityEnabled.valueToString + backendValue: backendValues.gravityEnabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: "Linear Axis Lock" + tooltip: "Lock the linear axis of the body." + } + + SecondColumnLayout { + ActionIndicator { + id: linearAxisLockController + icon.color: extFuncLogic.color + icon.text: extFuncLogic.glyph + onClicked: extFuncLogic.show() + forceVisible: extFuncLogic.menuVisible + visible: true + + property var enableLockX: { "value": false, "isInModel": false} + property var enableLockY: { "value": false, "isInModel": false} + property var enableLockZ: { "value": false, "isInModel": false} + + property variant backendValue: backendValues.linearAxisLock + property variant valueFromBackend: backendValue === undefined ? 0 : backendValue.value + property bool blockLocks: false + + onBackendValueChanged: evaluateLocks() + onValueFromBackendChanged: evaluateLocks() + + Connections { + target: modelNodeBackend + function onSelectionChanged() { + evaluateLevels() + } + } + + Component.onCompleted: evaluateLocks() + + function evaluateLocks() { + blockLocks = true + enableLockX = { "value": valueFromBackend & 1, "isInModel": false} + enableLockY = { "value": valueFromBackend & 2, "isInModel": false} + enableLockZ = { "value": valueFromBackend & 4, "isInModel": false} + blockLocks = false + } + + function composeExpressionString() { + if (blockLocks) + return + + let expressionStr = ""; + + if (enableLockX.value || enableLockY.value || enableLockY.value) { + if (enableLockX.value) + expressionStr += " | DynamicRigidBody.LockX"; + if (enableLockY.value) + expressionStr += " | DynamicRigidBody.LockY"; + if (enableLockZ.value) + expressionStr += " | DynamicRigidBody.LockZ"; + + expressionStr = expressionStr.substring(3); + + backendValue.expression = expressionStr + } else { + expressionStr = "DynamicRigidBody.None"; + backendValue.expression = expressionStr + } + } + ExtendedFunctionLogic { + id: extFuncLogic + backendValue: backendValues.linearAxisLock + onReseted: { + linearAxisLockController.enableLockX = { "value": false, "isInModel": false} + linearAxisLockController.enableLockY = { "value": false, "isInModel": false} + linearAxisLockController.enableLockZ = { "value": false, "isInModel": false} + linearAxisLockController.evaluateLocks() + } + } + } + } + PropertyLabel { + // spacer + } + + SecondColumnLayout { + + Item { + // spacer for the always hiden action indicator + width: StudioTheme.Values.actionIndicatorWidth + } + + CheckBox { + text: qsTr("Lock X") + backendValue: linearAxisLockController.enableLockX + actionIndicatorVisible: false + onCheckedChanged: linearAxisLockController.composeExpressionString() + implicitWidth: StudioTheme.Values.twoControlColumnWidth + } + + ExpandingSpacer {} + } + PropertyLabel { + // spacer + } + + SecondColumnLayout { + + Item { + // spacer for the always hiden action indicator + width: StudioTheme.Values.actionIndicatorWidth + } + + CheckBox { + text: qsTr("Lock Y") + backendValue: linearAxisLockController.enableLockY + actionIndicatorVisible: false + onCheckedChanged: linearAxisLockController.composeExpressionString() + implicitWidth: StudioTheme.Values.twoControlColumnWidth + } + + ExpandingSpacer {} + } + PropertyLabel { + // spacer + } + + SecondColumnLayout { + + Item { + // spacer for the always hiden action indicator + width: StudioTheme.Values.actionIndicatorWidth + } + + CheckBox { + text: qsTr("Lock Z") + backendValue: linearAxisLockController.enableLockZ + actionIndicatorVisible: false + onCheckedChanged: linearAxisLockController.composeExpressionString() + implicitWidth: StudioTheme.Values.twoControlColumnWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: "Angular Axis Lock" + tooltip: "Lock the angular axis of the body." + } + + SecondColumnLayout { + ActionIndicator { + id: angularAxisLockController + icon.color: extFuncLogicAngular.color + icon.text: extFuncLogicAngular.glyph + onClicked: extFuncLogicAngular.show() + forceVisible: extFuncLogic.menuVisible + visible: true + + property var enableLockX: { "value": false, "isInModel": false} + property var enableLockY: { "value": false, "isInModel": false} + property var enableLockZ: { "value": false, "isInModel": false} + + property variant backendValue: backendValues.angularAxisLock + property variant valueFromBackend: backendValue === undefined ? 0 : backendValue.value + property bool blockLocks: false + + onBackendValueChanged: evaluateLocks() + onValueFromBackendChanged: evaluateLocks() + + Connections { + target: modelNodeBackend + function onSelectionChanged() { + evaluateLevels() + } + } + + Component.onCompleted: evaluateLocks() + + function evaluateLocks() { + blockLocks = true + enableLockX = { "value": valueFromBackend & 1, "isInModel": false} + enableLockY = { "value": valueFromBackend & 2, "isInModel": false} + enableLockZ = { "value": valueFromBackend & 4, "isInModel": false} + blockLocks = false + } + + function composeExpressionString() { + if (blockLocks) + return + + let expressionStr = ""; + + if (enableLockX.value || enableLockY.value || enableLockY.value) { + if (enableLockX.value) + expressionStr += " | DynamicRigidBody.LockX"; + if (enableLockY.value) + expressionStr += " | DynamicRigidBody.LockY"; + if (enableLockZ.value) + expressionStr += " | DynamicRigidBody.LockZ"; + + expressionStr = expressionStr.substring(3); + + backendValue.expression = expressionStr + } else { + expressionStr = "DynamicRigidBody.None"; + backendValue.expression = expressionStr + } + } + ExtendedFunctionLogic { + id: extFuncLogicAngular + backendValue: backendValues.angularAxisLock + onReseted: { + angularAxisLockController.enableLockX = { "value": false, "isInModel": false} + angularAxisLockController.enableLockY = { "value": false, "isInModel": false} + angularAxisLockController.enableLockZ = { "value": false, "isInModel": false} + angularAxisLockController.evaluateLocks() + } + } + } + } + PropertyLabel { + // spacer + } + + SecondColumnLayout { + + Item { + // spacer for the always hiden action indicator + width: StudioTheme.Values.actionIndicatorWidth + } + + CheckBox { + text: qsTr("Lock X") + backendValue: angularAxisLockController.enableLockX + actionIndicatorVisible: false + onCheckedChanged: angularAxisLockController.composeExpressionString() + implicitWidth: StudioTheme.Values.twoControlColumnWidth + } + + ExpandingSpacer {} + } + PropertyLabel { + // spacer + } + + SecondColumnLayout { + + Item { + // spacer for the always hiden action indicator + width: StudioTheme.Values.actionIndicatorWidth + } + + CheckBox { + text: qsTr("Lock Y") + backendValue: angularAxisLockController.enableLockY + actionIndicatorVisible: false + onCheckedChanged: angularAxisLockController.composeExpressionString() + implicitWidth: StudioTheme.Values.twoControlColumnWidth + } + + ExpandingSpacer {} + } + PropertyLabel { + // spacer + } + + SecondColumnLayout { + + Item { + // spacer for the always hiden action indicator + width: StudioTheme.Values.actionIndicatorWidth + } + + CheckBox { + text: qsTr("Lock Z") + backendValue: angularAxisLockController.enableLockZ + actionIndicatorVisible: false + onCheckedChanged: angularAxisLockController.composeExpressionString() + implicitWidth: StudioTheme.Values.twoControlColumnWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: "Is Kinematic" + tooltip: "Kinematic objects are not influenced by external forces and can be seen as an object of infinite mass." + } + + SecondColumnLayout { + CheckBox { + id: isKinematicCheckBox + text: backendValues.isKinematic.valueToString + backendValue: backendValues.isKinematic + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: isKinematicCheckBox.checked + text: "Kinematic Position" + tooltip: "The position of the kinematic object." + } + + SecondColumnLayout { + visible: isKinematicCheckBox.checked + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.kinematicPosition_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: isKinematicCheckBox.checked + } + + SecondColumnLayout { + visible: isKinematicCheckBox.checked + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.kinematicPosition_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: isKinematicCheckBox.checked + } + + SecondColumnLayout { + visible: isKinematicCheckBox.checked + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.kinematicPosition_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: isKinematicCheckBox.checked + text: "Kinematic Rotation" + tooltip: "The rotation of the kinematic object." + } + + SecondColumnLayout { + visible: isKinematicCheckBox.checked + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.kinematicEulerRotation_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: isKinematicCheckBox.checked + } + + SecondColumnLayout { + visible: isKinematicCheckBox.checked + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.kinematicEulerRotation_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: isKinematicCheckBox.checked + } + + SecondColumnLayout { + visible: isKinematicCheckBox.checked + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.kinematicEulerRotation_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: isKinematicCheckBox.checked + text: "Kinematic Pivot" + tooltip: "The pivot point of the kinematic object." + } + + SecondColumnLayout { + visible: isKinematicCheckBox.checked + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.kinematicPivot_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: isKinematicCheckBox.checked + } + + SecondColumnLayout { + visible: isKinematicCheckBox.checked + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.kinematicPivot_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + visible: isKinematicCheckBox.checked + } + + SecondColumnLayout { + visible: isKinematicCheckBox.checked + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.kinematicPivot_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } +} + + // Other Properties Not covered by the UI + // QVector3D inertiaTensor + // QVector3D centerOfMassPosition + // QQuaternion centerOfMassRotation + // List inertiaMatrix (9 floats for a Mat3x3) + diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySpecifics.qml new file mode 100644 index 00000000000..7322d3339be --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySpecifics.qml @@ -0,0 +1,26 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + DynamicRigidBodySection { + width: parent.width + } + + PhysicsBodySection { + width: parent.width + } + + PhysicsNodeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSection.qml new file mode 100644 index 00000000000..80c6f428e97 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSection.qml @@ -0,0 +1,98 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Section { + caption: qsTr("Height Field Shape") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Source") + tooltip: qsTr("Sets the location of an image file containing the heightmap data.") + } + + SecondColumnLayout { + UrlChooser { + backendValue: backendValues.source + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Extents") + tooltip: qsTr("The extents of the height field shape in the X, Y and Z directions.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: 0 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.extents_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: 0 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.extents_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: 0 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.extents_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSpecifics.qml new file mode 100644 index 00000000000..22aa0348b71 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSpecifics.qml @@ -0,0 +1,23 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Column { + width: parent.width + + HeightFieldShapeSection { + width: parent.width + } + + CollisionShapeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/NodeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/NodeSection.qml new file mode 100644 index 00000000000..45dfe72a77d --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/NodeSection.qml @@ -0,0 +1,350 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Node") + + SectionLayout { + PropertyLabel { + text: qsTr("Opacity") + tooltip: qsTr("Sets the local opacity value of the node.") + } + + SecondColumnLayout { + // ### should be a slider + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.opacity + sliderIndicatorVisible: true + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Visibility") + tooltip: qsTr("Sets the local visibility of the node.") + } + + SecondColumnLayout { + // ### should be a slider + CheckBox { + text: qsTr("Is Visible") + backendValue: backendValues.visible + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + id: transformSection + width: parent.width + caption: qsTr("Transform") + + ColumnLayout { + spacing: StudioTheme.Values.transform3DSectionSpacing + + SectionLayout { + PropertyLabel { + text: qsTr("Translation") + tooltip: qsTr("Sets the translation of the node.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + + SectionLayout { + PropertyLabel { + text: qsTr("Rotation") + tooltip: qsTr("Sets the rotation of the node in degrees.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.eulerRotation_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.eulerRotation_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.eulerRotation_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + + SectionLayout { + PropertyLabel { + text: qsTr("Scale") + tooltip: qsTr("Sets the scale of the node.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.scale_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.scale_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.scale_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + + SectionLayout { + PropertyLabel { + text: qsTr("Pivot") + tooltip: qsTr("Sets the pivot of the node.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.pivot_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.pivot_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.pivot_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsBodySection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsBodySection.qml new file mode 100644 index 00000000000..8f5d67f4a42 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsBodySection.qml @@ -0,0 +1,34 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Physics Body") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Physics Material") + tooltip: qsTr("The physics material of the body.") + } + + SecondColumnLayout { + ItemFilterComboBox { + typeFilter: "QtQuick3D.Physics.PhysicsMaterial" + backendValue: backendValues.physicsMaterial + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSection.qml new file mode 100644 index 00000000000..3e0c08655ea --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSection.qml @@ -0,0 +1,69 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Section { + caption: qsTr("Physics Material") + width: parent.width + + SectionLayout { + PropertyLabel { + text: "Static Friction" + tooltip: "The friction coefficient of the material when it is not moving." + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + decimals: 2 + stepSize: 0.01 + backendValue: backendValues.staticFriction + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + ExpandingSpacer {} + } + + PropertyLabel { + text: "Dynamic Friction" + tooltip: "The friction coefficient of the material when it is moving." + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + decimals: 2 + stepSize: 0.01 + backendValue: backendValues.dynamicFriction + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + ExpandingSpacer {} + } + + PropertyLabel { + text: "Restitution" + tooltip: "The coefficient of restitution of the material." + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.01 + sliderIndicatorVisible: true + backendValue: backendValues.restitution + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSpecifics.qml new file mode 100644 index 00000000000..95ebaf70127 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSpecifics.qml @@ -0,0 +1,13 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + PhysicsMaterialSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsNodeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsNodeSection.qml new file mode 100644 index 00000000000..26fdf0e4d87 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsNodeSection.qml @@ -0,0 +1,103 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Physics Node") + + SectionLayout { + PropertyLabel { + text: qsTr("Collision Shapes") + Layout.alignment: Qt.AlignTop + Layout.topMargin: 5 + } + + SecondColumnLayout { + EditableListView { + backendValue: backendValues.collisionShapes + model: backendValues.collisionShapes.expressionAsList + Layout.fillWidth: true + typeFilter: "QtQuick3D.Physics.CollisionShape" + + onAdd: function(value) { backendValues.collisionShapes.idListAdd(value) } + onRemove: function(idx) { backendValues.collisionShapes.idListRemove(idx) } + onReplace: function (idx, value) { backendValues.collisionShapes.idListReplace(idx, value) } + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Receive Contact Reports") + tooltip: qsTr("Determines whether this body will receive contact reports when colliding with other bodies.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.receiveContactReports.valueToString + backendValue: backendValues.receiveContactReports + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Send Contact Reports") + tooltip: qsTr("Determines whether this body will send contact reports when colliding with other bodies.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.sendContactReports.valueToString + backendValue: backendValues.sendContactReports + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Receive Trigger Reports") + tooltip: qsTr("Determines whether this body will receive reports when entering or leaving a trigger body.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.receiveTriggerReports.valueToString + backendValue: backendValues.receiveTriggerReports + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Send Trigger Reports") + tooltip: qsTr("Determines whether this body will send contact reports when colliding with other bodies.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.sendTriggerReports.valueToString + backendValue: backendValues.sendTriggerReports + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSection.qml new file mode 100644 index 00000000000..3299e984bec --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSection.qml @@ -0,0 +1,266 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Section { + caption: qsTr("Physics World") + width: parent.width + + SectionLayout { + // Q_PROPERTY(QQuick3DNode *scene + PropertyLabel { + text: qsTr("Scene") + tooltip: qsTr("The scene node to which the physics world is attached.") + } + + SecondColumnLayout { + ItemFilterComboBox { + typeFilter: "QtQuick3D.Node" + backendValue: backendValues.scene + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(QQuick3DNode *viewport + PropertyLabel { + text: qsTr("Viewport") + tooltip: qsTr("The node to which the debug geometry of the physics world is added.") + } + + SecondColumnLayout { + ItemFilterComboBox { + typeFilter: "QtQuick3D.Node" + backendValue: backendValues.viewport + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(bool running) + PropertyLabel { + text: qsTr("Running") + tooltip: qsTr("Whether the physics world is running.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.running.valueToString + backendValue: backendValues.running + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(bool forceDebugDraw + PropertyLabel { + text: qsTr("Force Debug Draw") + tooltip: qsTr("Whether to force debug drawing of the physics world.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.forceDebugDraw.valueToString + backendValue: backendValues.forceDebugDraw + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(bool enableCCD + PropertyLabel { + text: qsTr("CCD") + tooltip: qsTr("Whether to enable continuous collision detection.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.enableCCD.valueToString + backendValue: backendValues.enableCCD + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(QVector3D gravity) + PropertyLabel { + text: qsTr("Gravity") + tooltip: qsTr("The gravity vector.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.gravity_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.gravity_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel { + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 2 + backendValue: backendValues.gravity_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(float typicalLength) + PropertyLabel { + text: qsTr("Typical Length") + tooltip: qsTr("The typical length of objects in the scene.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0.00001 + maximumValue: 9999999 + decimals: 5 + backendValue: backendValues.typicalLength + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(float typicalSpeed + PropertyLabel { + text: qsTr("Typical Speed") + tooltip: qsTr("The typical speed of objects in the scene.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0.00001 + maximumValue: 9999999 + decimals: 5 + backendValue: backendValues.typicalSpeed + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(float defaultDensity) + PropertyLabel { + text: qsTr("Default Density") + tooltip: qsTr("The default density of objects in the scene.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0.00001 + maximumValue: 9999999 + decimals: 5 + backendValue: backendValues.defaultDensity + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(float minimumTimestep) + PropertyLabel { + text: qsTr("Min Timestep") + tooltip: qsTr("Defines the minimum simulation timestep in milliseconds.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0.001 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.minimumTimestep + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // Q_PROPERTY(float maximumTimestep) + PropertyLabel { + text: qsTr("Max Timestep") + tooltip: qsTr("Defines the maximum simulation timestep in milliseconds.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0.001 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.maximumTimestep + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSpecifics.qml new file mode 100644 index 00000000000..2c29985fd94 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSpecifics.qml @@ -0,0 +1,14 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + PhysicsWorldSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PlaneShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PlaneShapeSpecifics.qml new file mode 100644 index 00000000000..0410b5fbf98 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PlaneShapeSpecifics.qml @@ -0,0 +1,18 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + CollisionShapeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSection.qml new file mode 100644 index 00000000000..44db7cb322b --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSection.qml @@ -0,0 +1,32 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Section { + caption: qsTr("Sphere Shape") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Diameter") + tooltip: qsTr("Sets the diameter of the capsule.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + decimals: 3 + backendValue: backendValues.diameter + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSpecifics.qml new file mode 100644 index 00000000000..abee2e31069 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSpecifics.qml @@ -0,0 +1,22 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + SphereShapeSection { + width: parent.width + } + + CollisionShapeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/StaticRigidBodySpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/StaticRigidBodySpecifics.qml new file mode 100644 index 00000000000..1dc7c4806b0 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/StaticRigidBodySpecifics.qml @@ -0,0 +1,22 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + PhysicsBodySection { + width: parent.width + } + + PhysicsNodeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSection.qml new file mode 100644 index 00000000000..53959a3aa25 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSection.qml @@ -0,0 +1,29 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets +import StudioTheme as StudioTheme + +Section { + caption: qsTr("Triangle Mesh Shape") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Source") + tooltip: qsTr("Defines the location of the mesh file used to define the shape.") + } + + SecondColumnLayout { + UrlChooser { + id: sourceUrlChooser + backendValue: backendValues.source + filter: "*.mesh" + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSpecifics.qml new file mode 100644 index 00000000000..a428872f294 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSpecifics.qml @@ -0,0 +1,22 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + TriangleMeshShapeSection { + width: parent.width + } + + CollisionShapeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriggerBodySpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriggerBodySpecifics.qml new file mode 100644 index 00000000000..f341e48b691 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriggerBodySpecifics.qml @@ -0,0 +1,18 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Layouts +import HelperWidgets + +Column { + width: parent.width + + PhysicsNodeSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/src/plugins/qmldesigner/project/qmldesignerprojectmanager.cpp b/src/plugins/qmldesigner/project/qmldesignerprojectmanager.cpp index 25e92fe2ab0..3ae8a554585 100644 --- a/src/plugins/qmldesigner/project/qmldesignerprojectmanager.cpp +++ b/src/plugins/qmldesigner/project/qmldesignerprojectmanager.cpp @@ -407,6 +407,11 @@ namespace { if constexpr (useProjectStorage()) { auto qmlRootPath = qmlPath(target); qmldirPaths.push_back(qmlRootPath + "/QML"); + qmldirPaths.push_back(qmlRootPath + "/Qt"); + // TODO: Charts plugins.qmltypes needs to be fixed before QtCharts can be added (QTBUG-115358) + //qmldirPaths.push_back(qmlRootPath + "/QtCharts"); + // TODO: Graphs plugins.qmltypes needs to be fixed before QtGraphs can be added (QTBUG-135402) + //qmldirPaths.push_back(qmlRootPath + "/QtGraphs"); qmldirPaths.push_back(qmlRootPath + "/QtQml"); qmldirPaths.push_back(qmlRootPath + "/QtQuick"); qmldirPaths.push_back(qmlRootPath + "/QtQuick3D");