Files
qt-creator/share/qtcreator/qmldesigner/edit3dQmlSource/BakeLightsSetupDialog.qml

230 lines
8.6 KiB
QML
Raw Normal View History

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import HelperWidgets
import StudioControls as StudioControls
import StudioTheme as StudioTheme
Rectangle {
id: root
property int toolTipDelay: 1000
color: StudioTheme.Values.themePanelBackground
Column {
id: col
padding: 5
leftPadding: 10
spacing: 5
Text {
id: title
text: qsTr("Lights baking setup for 3D view: %1").arg(sceneId)
font.bold: true
font.pixelSize: StudioTheme.Values.myFontSize
color: StudioTheme.Values.themeTextColor
}
Rectangle {
id: ctrlRect
width: root.width - 16
height: root.height - title.height - manualCheckBox.height - 20
color: StudioTheme.Values.themePanelBackground
border.color: StudioTheme.Values.themeControlOutline
border.width: StudioTheme.Values.border
ListView {
id: listView
anchors.fill: parent
anchors.margins: 4
clip: true
model: bakeModel
spacing: 5
delegate: Row {
spacing: 12
enabled: !manualCheckBox.checked
Text {
text: displayId
color: StudioTheme.Values.themeTextColor
width: isTitle ? listView.width : listView.width - 320
clip: true
font.bold: isTitle
verticalAlignment: Qt.AlignVCenter
horizontalAlignment: Qt.AlignLeft
height: bakeModeCombo.height
leftPadding: isTitle ? 0 : 8
ToolTipArea {
anchors.fill: parent
tooltip: displayId // Useful for long ids
}
}
Button {
visible: isUnexposed
text: qsTr("Expose models and lights")
leftPadding: StudioTheme.Values.dialogButtonPadding
rightPadding: StudioTheme.Values.dialogButtonPadding
height: bakeModeCombo.height
onClicked: {
rootView.apply()
rootView.exposeModelsAndLights(nodeId)
}
}
StudioControls.ComboBox {
id: bakeModeCombo
model: ListModel {
ListElement { text: qsTr("Baking Disabled"); value: "Light.BakeModeDisabled" }
ListElement { text: qsTr("Bake Indirect"); value: "Light.BakeModeIndirect" }
ListElement { text: qsTr("Bake All"); value: "Light.BakeModeAll" }
}
visible: !isModel && !isTitle && !isUnexposed
textRole: "text"
valueRole: "value"
currentIndex: bakeMode === "Light.BakeModeAll"
? 2 : bakeMode === "Light.BakeModeIndirect" ? 1 : 0
actionIndicatorVisible: false
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("The baking mode applied to this light.")
ToolTip.delay: root.toolTipDelay
onActivated: bakeMode = currentValue
}
StudioControls.CheckBox {
visible: isModel && !isTitle && !isUnexposed
checked: inUse
text: qsTr("In Use")
actionIndicatorVisible: false
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("If checked, this model contributes to baked lighting,\nfor example in form of casting shadows or indirect light.")
ToolTip.delay: root.toolTipDelay
onToggled: inUse = checked
}
StudioControls.CheckBox {
visible: isModel && !isTitle && !isUnexposed
checked: isEnabled
text: qsTr("Enabled")
actionIndicatorVisible: false
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("If checked, baked lightmap texture is generated and rendered for this model.")
ToolTip.delay: root.toolTipDelay
onToggled: isEnabled = checked
}
Row {
width: resolutionLabel.width + resolutionValue.width + StudioTheme.Values.sectionRowSpacing
spacing: StudioTheme.Values.sectionRowSpacing
visible: isModel && !isTitle && !isUnexposed
Text {
id: resolutionLabel
text: qsTr("Resolution:")
color: enabled ? StudioTheme.Values.themeTextColor
: StudioTheme.Values.themeTextColorDisabled
verticalAlignment: Qt.AlignVCenter
horizontalAlignment: Qt.AlignRight
height: resolutionValue.height
}
StudioControls.RealSpinBox {
id: resolutionValue
realFrom: 128
realTo: 128000
realValue: resolution
realStepSize: 128
width: 60
actionIndicatorVisible: false
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("Generated lightmap resolution for this model.")
ToolTip.delay: root.toolTipDelay
onRealValueChanged: resolution = realValue
}
}
}
}
}
Item {
height: manualCheckBox.height
width: ctrlRect.width
StudioControls.CheckBox {
id: manualCheckBox
checked: rootView.manualMode
text: qsTr("Setup baking manually")
actionIndicatorVisible: false
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("If checked, baking settings above are not applied on close or bake.\nInstead, user is expected to set baking properties manually.")
ToolTip.delay: root.toolTipDelay
onToggled: rootView.manualMode = checked
}
Row {
spacing: StudioTheme.Values.dialogButtonSpacing
height: manualCheckBox.height
anchors.right: parent.right
Button {
id: cancelButton
text: qsTr("Cancel")
leftPadding: StudioTheme.Values.dialogButtonPadding
rightPadding: StudioTheme.Values.dialogButtonPadding
height: manualCheckBox.height
onClicked: rootView.cancel()
}
Button {
id: applyButton
text: qsTr("Apply & Close")
leftPadding: StudioTheme.Values.dialogButtonPadding
rightPadding: StudioTheme.Values.dialogButtonPadding
height: manualCheckBox.height
onClicked: {
rootView.apply()
rootView.cancel()
}
}
Button {
id: bakeButton
text: qsTr("Bake")
leftPadding: StudioTheme.Values.dialogButtonPadding
rightPadding: StudioTheme.Values.dialogButtonPadding
height: manualCheckBox.height
onClicked: {
rootView.apply()
rootView.bakeLights()
}
}
}
}
}
}