Files
qt-creator/share/qtcreator/qmldesigner/edit3dQmlSource/SnapConfigurationDialog.qml
Miikka Heikkinen 516a2238e2 QmlDesigner: Ensure we save the latest values on 3D snap dialog close
Track value property of spin boxes changes directly instead of the
extra valueModified signal, which is not emitted in all cases.

Also removed duplicate applying of snap configuration.

Fixes: QDS-10653
Change-Id: If0ce7bffa1dcfb5b01e80b6e962f356f91f44d51
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
2023-09-18 10:09:31 +00:00

251 lines
7.5 KiB
QML

// 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 QtQuickDesignerTheme
import HelperWidgets as HelperWidgets
import StudioControls as StudioControls
import StudioTheme as StudioTheme
Rectangle {
id: root
property int toolTipDelay: 1000
width: 230
height: 270
color: StudioTheme.Values.themePanelBackground
border.color: StudioTheme.Values.themeControlOutline
border.width: StudioTheme.Values.border
function handlePosIntChanged() {
posIntSpin.value = posInt
}
function handleRotIntChanged() {
rotIntSpin.value = rotInt
}
function handleScaleIntChanged() {
scaleIntSpin.value = scaleInt
}
// Connect context object signals to our handler functions
// Spinboxes lose the initial binding if the value changes so we need these handlers
Component.onCompleted: {
onPosIntChanged.connect(handlePosIntChanged);
onRotIntChanged.connect(handleRotIntChanged);
onScaleIntChanged.connect(handleScaleIntChanged);
}
ColumnLayout {
anchors.fill: parent
spacing: 0
RowLayout {
height: 32
Layout.topMargin: 8
Layout.rightMargin: 8
Layout.leftMargin: 8
Layout.fillWidth: true
spacing: 16
Rectangle {
width: 40
height: 40
radius: 5
Layout.fillHeight: false
color: StudioTheme.Values.themePanelBackground
border.color: StudioTheme.Values.themeControlOutline
border.width: StudioTheme.Values.border
HelperWidgets.IconIndicator {
anchors.fill: parent
icon: StudioTheme.Constants.snapping_conf_medium
pixelSize: StudioTheme.Values.myIconFontSize * 1.4
iconColor: StudioTheme.Values.themeLinkIndicatorColorHover
enabled: false
states: [] // Disable normal state based coloring
}
}
Text {
text: qsTr("Snap Configuration")
font.pixelSize: 12
horizontalAlignment: Text.AlignLeft
Layout.fillWidth: true
font.bold: true
color: StudioTheme.Values.themeTextColor
}
}
GridLayout {
Layout.margins:10
Layout.fillWidth: true
Layout.fillHeight: true
rowSpacing: 5
columnSpacing: 5
rows: 5
columns: 3
Text {
text: qsTr("Interval")
Layout.column: 1
Layout.row: 0
Layout.leftMargin: 10
font.pixelSize: 12
font.bold: true
color: StudioTheme.Values.themeTextColor
}
StudioControls.CheckBox {
text: qsTr("Position")
Layout.column: 0
Layout.row: 1
Layout.minimumWidth: 100
checked: posEnabled
actionIndicatorVisible: false
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("Snap position.")
ToolTip.delay: root.toolTipDelay
onToggled: posEnabled = checked
}
HelperWidgets.DoubleSpinBox {
id: posIntSpin
Layout.fillWidth: true
Layout.column: 1
Layout.row: 1
Layout.leftMargin: 10
minimumValue: 1
maximumValue: 10000
value: posInt
stepSize: 1
decimals: 0
ToolTip.visible: hover
ToolTip.text: qsTr("Snap interval for move gizmo.")
ToolTip.delay: root.toolTipDelay
onValueChanged: posInt = value
}
StudioControls.CheckBox {
text: qsTr("Rotation")
Layout.column: 0
Layout.row: 2
Layout.minimumWidth: 100
checked: rotEnabled
actionIndicatorVisible: false
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("Snap rotation.")
ToolTip.delay: root.toolTipDelay
onToggled: rotEnabled = checked
}
HelperWidgets.DoubleSpinBox {
id: rotIntSpin
Layout.fillWidth: true
Layout.column: 1
Layout.row: 2
Layout.leftMargin: 10
minimumValue: 1
maximumValue: 90
value: rotInt
stepSize: 1
decimals: 0
ToolTip.visible: hover
ToolTip.text: qsTr("Snap interval in degrees for rotation gizmo.")
ToolTip.delay: root.toolTipDelay
onValueChanged: rotInt = value
}
StudioControls.CheckBox {
text: qsTr("Scale")
Layout.column: 0
Layout.row: 3
Layout.minimumWidth: 100
checked: scaleEnabled
actionIndicatorVisible: false
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("Snap scale.")
ToolTip.delay: root.toolTipDelay
onToggled: scaleEnabled = checked
}
HelperWidgets.DoubleSpinBox {
id: scaleIntSpin
Layout.fillWidth: true
Layout.column: 1
Layout.row: 3
Layout.leftMargin: 10
minimumValue: 1
maximumValue: 100
value: scaleInt
stepSize: 1
decimals: 0
ToolTip.visible: hover
ToolTip.text: qsTr("Snap interval for scale gizmo in percentage of original scale.")
ToolTip.delay: root.toolTipDelay
onValueChanged: scaleInt = value
}
StudioControls.CheckBox {
text: qsTr("Absolute Position")
Layout.fillWidth: false
Layout.leftMargin: 0
Layout.column: 0
Layout.row: 4
Layout.columnSpan: 3
checked: absolute
actionIndicatorVisible: false
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("Toggles if the position snaps to absolute values or relative to object position.")
ToolTip.delay: root.toolTipDelay
onToggled: absolute = checked
}
Text {
text: qsTr("deg")
font.pixelSize: 12
Layout.column: 2
Layout.row: 2
color: StudioTheme.Values.themeTextColor
}
Text {
text: qsTr("%")
font.pixelSize: 12
Layout.column: 2
Layout.row: 3
color: StudioTheme.Values.themeTextColor
}
}
HelperWidgets.Button {
text: qsTr("Reset All")
Layout.bottomMargin: 8
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
onClicked: resetDefaults()
}
}
}