Улучшен дизайн кнопок SpinBox: добавлены современные стили, улучшена визуальная обратная связь, добавлены SVG иконки, оптимизированы размеры и отступы, улучшена читаемость значени
This commit is contained in:
1 parent
2b9165771b
commit
29dce906c5
6110 files changed
+775979
No files matched your search
@@ -0,0 +1,363 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Section {
|
||||
caption: qsTr("Model")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Source")
|
||||
tooltip: qsTr("Sets the location of the mesh file containing the geometry of this model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
UrlChooser {
|
||||
id: sourceUrlChooser
|
||||
backendValue: backendValues.source
|
||||
filter: "*.mesh"
|
||||
defaultItems: ["#Rectangle" ,"#Sphere" ,"#Cube" ,"#Cone" ,"#Cylinder"]
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Geometry")
|
||||
tooltip: qsTr("Sets a custom geometry for the model")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
id: geometryComboBox
|
||||
typeFilter: "QtQuick3D.Geometry"
|
||||
backendValue: backendValues.geometry
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
|
||||
Connections {
|
||||
target: geometryComboBox.backendValue
|
||||
function onExpressionChanged() {
|
||||
if (geometryComboBox.backendValue.expression !== "" &&
|
||||
sourceUrlChooser.backendValue.expression !== "")
|
||||
sourceUrlChooser.backendValue.resetValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Materials")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.materials
|
||||
model: backendValues.materials.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.Material"
|
||||
textRole: "idAndName"
|
||||
|
||||
onAdd: function(value) { backendValues.materials.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.materials.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.materials.idListReplace(idx, value) }
|
||||
|
||||
extraButtonIcon: StudioTheme.Constants.material_medium
|
||||
extraButtonToolTip: qsTr("Edit material")
|
||||
onExtraButtonClicked: (idx) => { backendValues.materials.openMaterialEditor(idx) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Casts Shadows")
|
||||
tooltip: qsTr("Enables the geometry of this model to be rendered to the shadow maps.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.castsShadows.valueToString
|
||||
backendValue: backendValues.castsShadows
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Receives Shadows")
|
||||
tooltip: qsTr("Enables the geometry of this model to receive shadows.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.receivesShadows.valueToString
|
||||
backendValue: backendValues.receivesShadows
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Casts Reflections")
|
||||
tooltip: qsTr("Enables reflection probes to reflect this model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.castsReflections.valueToString
|
||||
backendValue: backendValues.castsReflections
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Receives Reflections")
|
||||
tooltip: qsTr("Enables the geometry of this model to receive reflections from the nearest reflection probe. The model must be inside at least one reflection probe to start receiving reflections.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.receivesReflections.valueToString
|
||||
backendValue: backendValues.receivesReflections
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Is Pickable")
|
||||
tooltip: qsTr("Enables ray cast based picking for this model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.pickable.valueToString
|
||||
backendValue: backendValues.pickable
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Used in Baked Lighting")
|
||||
tooltip: qsTr("This model is static and suitable to contribute to baked lighting.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.usedInBakedLighting.valueToString
|
||||
backendValue: backendValues.usedInBakedLighting
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Depth Bias")
|
||||
tooltip: qsTr("Sets the depth bias of the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.depthBias
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("LOD Bias")
|
||||
tooltip: qsTr("Sets the size a model needs to be when rendered before the automatic level of detail meshes are used")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0.0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.levelOfDetailBias
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Instancing")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Data Source")
|
||||
tooltip: qsTr("If this property is set, the model will not be rendered normally. Instead, a number of instances of the model will be rendered, as defined by the instance table.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Instancing"
|
||||
backendValue: backendValues.instancing
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Origin Node")
|
||||
tooltip: qsTr("Sets the origin of the instance’s coordinate system.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Node"
|
||||
backendValue: backendValues.instanceRoot
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Animation")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Skeleton")
|
||||
tooltip: qsTr("Sets the skeleton for the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Skeleton"
|
||||
backendValue: backendValues.skeleton
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Morph Targets")
|
||||
tooltip: qsTr("Sets a list of MorphTargets used to render the provided geometry.")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.morphTargets
|
||||
model: backendValues.morphTargets.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.MorphTarget"
|
||||
|
||||
onAdd: function(value) { backendValues.morphTargets.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.morphTargets.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.morphTargets.idListReplace(idx, value) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Skin")
|
||||
tooltip: qsTr("Sets the skin for the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Skin"
|
||||
backendValue: backendValues.skin
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Lightmapping")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Resolution")
|
||||
tooltip: qsTr("Sets the target resolution of the baked lightmap texture for the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 128
|
||||
maximumValue: 4096
|
||||
decimals: 0
|
||||
stepSize: 128
|
||||
sliderIndicatorVisible: true
|
||||
backendValue: backendValues.lightmapBaseResolution
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Lightmap")
|
||||
tooltip: qsTr("Sets the baked lightmap data for the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.BakedLightmap"
|
||||
backendValue: backendValues.bakedLightmap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user