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 00000000000..590aaaa2847 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-icon.png differ 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 00000000000..af72238d692 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-polar-icon.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon.png new file mode 100644 index 00000000000..342c587117e Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon.png differ 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 00000000000..ce5d75ad4f3 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon16.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/barseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/barseries-icon.png new file mode 100644 index 00000000000..1bf023f385c Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/barseries-icon.png differ 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 00000000000..25e9fe692ec Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/boxplotseries-icon.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape.png new file mode 100644 index 00000000000..23775571c50 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape16.png new file mode 100644 index 00000000000..18707ce2434 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape16.png differ 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 00000000000..596be65ae0f Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape@2x.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape.png new file mode 100644 index 00000000000..f3d29fd57ff Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape16.png new file mode 100644 index 00000000000..74e2ea9efd5 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape16.png differ 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 00000000000..048883c8571 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape@2x.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller.png b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller.png new file mode 100644 index 00000000000..ce18058d3aa Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller16.png b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller16.png new file mode 100644 index 00000000000..5998fd41a03 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller16.png differ 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 00000000000..faa94098d7a Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller@2x.png differ 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 00000000000..b135c25908c Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/chartview-icon16.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape.png new file mode 100644 index 00000000000..0837829fb5a Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape16.png new file mode 100644 index 00000000000..9a411ed9fa7 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape16.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape@2x.png new file mode 100644 index 00000000000..384d6969c4a Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape@2x.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody.png b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody.png new file mode 100644 index 00000000000..4cde7a3a27c Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody16.png b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody16.png new file mode 100644 index 00000000000..ac26b26b4f4 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody16.png differ 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 00000000000..2a8579e4b04 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody@2x.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape.png new file mode 100644 index 00000000000..5d8873750f0 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape16.png new file mode 100644 index 00000000000..3cc0eeacb1f Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape16.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape@2x.png new file mode 100644 index 00000000000..8c169613bdb Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape@2x.png differ 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 00000000000..7d3ec403451 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalbarseries-icon.png differ 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 00000000000..16783f7daf4 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalpercentbarseries-icon.png differ 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 00000000000..b6fae651112 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalstackedbarseries-icon.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-icon.png new file mode 100644 index 00000000000..de42f50d7fd Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-icon.png differ 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 00000000000..611b09f9fe7 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-polar-icon.png differ 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 00000000000..ef6221f6ef1 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/percentbarseries-icon.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial.png new file mode 100644 index 00000000000..9675b1dfde7 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial16.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial16.png new file mode 100644 index 00000000000..951221e57a4 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial16.png differ 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 00000000000..e50ca8edaaa Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial@2x.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld.png new file mode 100644 index 00000000000..5d0c15e4354 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld16.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld16.png new file mode 100644 index 00000000000..6ac979abf7b Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld16.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld@2x.png new file mode 100644 index 00000000000..77652a5358d Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld@2x.png differ 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 00000000000..51a61551e74 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/pieseries-icon.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/planeshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape.png new file mode 100644 index 00000000000..4d8f3b4136d Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/planeshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape16.png new file mode 100644 index 00000000000..9388bfc37d5 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape16.png differ 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 00000000000..f5fb2615927 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape@2x.png differ 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 00000000000..cef13081606 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon.png differ 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 00000000000..2c456788ca0 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon16.png differ 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 00000000000..8be289d6dea Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-icon.png differ 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 00000000000..44cd8d72a66 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-polar-icon.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape.png new file mode 100644 index 00000000000..d6f847ccbe2 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape16.png new file mode 100644 index 00000000000..94c9430ca71 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape16.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape@2x.png new file mode 100644 index 00000000000..0a1c289827b Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape@2x.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-icon.png new file mode 100644 index 00000000000..e1df42068a1 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-icon.png differ 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 00000000000..293266df140 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-polar-icon.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/stackedbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/stackedbarseries-icon.png new file mode 100644 index 00000000000..03516997e9e Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/stackedbarseries-icon.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody.png b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody.png new file mode 100644 index 00000000000..f64beb8ec5c Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody16.png b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody16.png new file mode 100644 index 00000000000..a89997cbc26 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody16.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody@2x.png new file mode 100644 index 00000000000..fac847f153b Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody@2x.png differ 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 00000000000..a2cdba06317 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon.png differ 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 00000000000..f8f8a3ee787 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon16.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape.png new file mode 100644 index 00000000000..2fb4a7bc69f Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape16.png new file mode 100644 index 00000000000..d60b67f0f2e Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape16.png differ 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 00000000000..64b0bc2c840 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape@2x.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody.png b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody.png new file mode 100644 index 00000000000..e1abdeac434 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody.png differ diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody16.png b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody16.png new file mode 100644 index 00000000000..29a47afdc3b Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody16.png differ 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 00000000000..7b942d959b3 Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody@2x.png differ 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");