From 002bfbf80f81d2d41a159442a927b22b6bff0534 Mon Sep 17 00:00:00 2001 From: Shrief Gabr Date: Tue, 19 Mar 2024 14:52:20 +0200 Subject: [PATCH] EffectComposer: Add 'reset' button for values Task-number: QDS-11719 Change-Id: Ia03366bf109427fbcfe5cc1d4f68ae97fa8dc256 Reviewed-by: Miikka Heikkinen Reviewed-by: Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Mahmoud Badri --- .../EffectCompositionNode.qml | 2 ++ .../EffectCompositionNodeUniform.qml | 33 +++++++++++++++++-- .../effectComposerQmlSources/ValueColor.qml | 10 ++++-- .../effectComposerQmlSources/ValueFloat.qml | 6 +++- .../effectComposerQmlSources/ValueInt.qml | 6 +++- .../effectComposerQmlSources/ValueVec2.qml | 12 +++++-- .../effectComposerQmlSources/ValueVec3.qml | 18 ++++++++-- .../effectComposerQmlSources/ValueVec4.qml | 24 +++++++++++--- .../imports/HelperWidgets/DoubleSpinBox.qml | 1 + .../effectcomposeruniformsmodel.cpp | 12 ++++++- .../effectcomposeruniformsmodel.h | 1 + src/plugins/effectcomposer/uniform.cpp | 6 ++++ 12 files changed, 115 insertions(+), 16 deletions(-) diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml index 6defa3b0922..a606461b5c5 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml @@ -43,6 +43,8 @@ HelperWidgets.Section { EffectCompositionNodeUniform { width: root.width + + onReset: nodeUniformsModel.resetData(index) } } } diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNodeUniform.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNodeUniform.qml index 71cbf94f8bc..7c3214c5fa7 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNodeUniform.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNodeUniform.qml @@ -13,9 +13,10 @@ Item { id: root height: layout.implicitHeight - visible: !uniformUseCustomValue + signal reset() + Component.onCompleted: { if (uniformType === "int") { if (uniformControlType === "channel") @@ -49,10 +50,11 @@ Item { RowLayout { id: layout - spacing: 20 anchors.fill: parent Text { + id: textName + text: uniformDisplayName color: StudioTheme.Values.themeTextColor font.pixelSize: StudioTheme.Values.baseFontSize @@ -63,11 +65,38 @@ Item { elide: Text.ElideRight HelperWidgets.ToolTipArea { + id: tooltipArea + anchors.fill: parent tooltip: uniformDescription } } + Item { + Layout.preferredHeight: 30 + Layout.preferredWidth: 30 + + MouseArea { + id: mouseArea + + anchors.fill: parent + hoverEnabled: true + } + + HelperWidgets.IconButton { + id: iconButton + + buttonSize: 24 + icon: StudioTheme.Constants.reload_medium + iconSize: 16 + anchors.centerIn: parent + visible: mouseArea.containsMouse || iconButton.containsMouse + tooltip: qsTr("Reset value") + onClicked: root.reset() + } + + } + Loader { id: valueLoader Layout.fillWidth: true diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueColor.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueColor.qml index 4b00bd76135..f7482260b58 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueColor.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueColor.qml @@ -15,8 +15,14 @@ Row { StudioControls.ColorEditor { actionIndicatorVisible: false - Component.onCompleted: color = uniformValue + // color: uniformValue binding can get overwritten by normal operation of the control + property color resetValue: uniformValue - onColorChanged: uniformValue = color + onResetValueChanged: color = uniformValue + Component.onCompleted: color = uniformValue + onColorChanged: { + if (uniformValue !== color) + uniformValue = color + } } } diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueFloat.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueFloat.qml index 7348d6668be..969d7e29492 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueFloat.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueFloat.qml @@ -14,6 +14,10 @@ Row { HelperWidgets.DoubleSpinBox { id: spinBox + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue + onResetValueChanged: value = resetValue + width: 60 spinBoxIndicatorVisible: false inputHAlignment: Qt.AlignHCenter @@ -22,7 +26,7 @@ Row { value: uniformValue stepSize: .01 decimals: 2 - onValueChanged: uniformValue = value + onValueModified: uniformValue = value } StudioControls.Slider { diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueInt.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueInt.qml index 89f571c8cb7..d67929168a9 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueInt.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueInt.qml @@ -14,6 +14,10 @@ Row { HelperWidgets.DoubleSpinBox { id: spinBox + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue + onResetValueChanged: value = resetValue + width: 60 spinBoxIndicatorVisible: false inputHAlignment: Qt.AlignHCenter @@ -22,7 +26,7 @@ Row { value: uniformValue stepSize: 1 decimals: 0 - onValueChanged: uniformValue = Math.round(value) + onValueModified: uniformValue = Math.round(value) } StudioControls.Slider { diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec2.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec2.qml index b703d5f184a..adb4fe99056 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec2.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec2.qml @@ -15,6 +15,10 @@ RowLayout { HelperWidgets.DoubleSpinBox { id: vX + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue.x + onResetValueChanged: value = resetValue + Layout.fillWidth: true Layout.minimumWidth: 30 Layout.maximumWidth: 60 @@ -26,7 +30,7 @@ RowLayout { value: uniformValue.x stepSize: .01 decimals: 2 - onValueChanged: uniformValue.x = value + onValueModified: uniformValue.x = value } Item { // spacer @@ -51,6 +55,10 @@ RowLayout { HelperWidgets.DoubleSpinBox { id: vY + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue.y + onResetValueChanged: value = resetValue + Layout.fillWidth: true Layout.minimumWidth: 30 Layout.maximumWidth: 60 @@ -62,7 +70,7 @@ RowLayout { value: uniformValue.y stepSize: .01 decimals: 2 - onValueChanged: uniformValue.y = value + onValueModified: uniformValue.y = value } Item { // spacer diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec3.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec3.qml index d59b63a514f..78573c48f67 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec3.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec3.qml @@ -15,6 +15,10 @@ RowLayout { HelperWidgets.DoubleSpinBox { id: vX + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue.x + onResetValueChanged: value = resetValue + Layout.fillWidth: true Layout.minimumWidth: 30 Layout.maximumWidth: 60 @@ -26,7 +30,7 @@ RowLayout { value: uniformValue.x stepSize: .01 decimals: 2 - onValueChanged: uniformValue.x = value + onValueModified: uniformValue.x = value } Item { // spacer @@ -51,6 +55,10 @@ RowLayout { HelperWidgets.DoubleSpinBox { id: vY + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue.y + onResetValueChanged: value = resetValue + Layout.fillWidth: true Layout.minimumWidth: 30 Layout.maximumWidth: 60 @@ -62,7 +70,7 @@ RowLayout { value: uniformValue.y stepSize: .01 decimals: 2 - onValueChanged: uniformValue.y = value + onValueModified: uniformValue.y = value } Item { // spacer @@ -87,6 +95,10 @@ RowLayout { HelperWidgets.DoubleSpinBox { id: vZ + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue.z + onResetValueChanged: value = resetValue + Layout.fillWidth: true Layout.minimumWidth: 30 Layout.maximumWidth: 60 @@ -98,7 +110,7 @@ RowLayout { value: uniformValue.z stepSize: .01 decimals: 2 - onValueChanged: uniformValue.z = value + onValueModified: uniformValue.z = value } Item { // spacer diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec4.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec4.qml index 7e930abf815..61ce8e63893 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec4.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec4.qml @@ -15,6 +15,10 @@ RowLayout { HelperWidgets.DoubleSpinBox { id: vX + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue.x + onResetValueChanged: value = resetValue + Layout.fillWidth: true Layout.minimumWidth: 30 Layout.maximumWidth: 60 @@ -26,7 +30,7 @@ RowLayout { value: uniformValue.x stepSize: .01 decimals: 2 - onValueChanged: uniformValue.x = value + onValueModified: uniformValue.x = value } Item { // spacer @@ -51,6 +55,10 @@ RowLayout { HelperWidgets.DoubleSpinBox { id: vY + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue.y + onResetValueChanged: value = resetValue + Layout.fillWidth: true Layout.minimumWidth: 30 Layout.maximumWidth: 60 @@ -62,7 +70,7 @@ RowLayout { value: uniformValue.y stepSize: .01 decimals: 2 - onValueChanged: uniformValue.y = value + onValueModified: uniformValue.y = value } Item { // spacer @@ -87,6 +95,10 @@ RowLayout { HelperWidgets.DoubleSpinBox { id: vZ + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue.z + onResetValueChanged: value = resetValue + Layout.fillWidth: true Layout.minimumWidth: 30 Layout.maximumWidth: 60 @@ -98,7 +110,7 @@ RowLayout { value: uniformValue.z stepSize: .01 decimals: 2 - onValueChanged: uniformValue.z = value + onValueModified: uniformValue.z = value } Item { // spacer @@ -123,6 +135,10 @@ RowLayout { HelperWidgets.DoubleSpinBox { id: vW + // value: uniformValue binding can get overwritten by normal operation of the control + property double resetValue: uniformValue.w + onResetValueChanged: value = resetValue + Layout.fillWidth: true Layout.minimumWidth: 30 Layout.maximumWidth: 60 @@ -134,7 +150,7 @@ RowLayout { value: uniformValue.w stepSize: .01 decimals: 2 - onValueChanged: uniformValue.w = value + onValueModified: uniformValue.w = value } Item { // spacer diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DoubleSpinBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DoubleSpinBox.qml index a44e8c690be..11ce0e1e753 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DoubleSpinBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DoubleSpinBox.qml @@ -53,5 +53,6 @@ Item { decimals: 2 onRealValueModified: wrapper.valueModified() + onCompressedRealValueModified: wrapper.valueModified() } } diff --git a/src/plugins/effectcomposer/effectcomposeruniformsmodel.cpp b/src/plugins/effectcomposer/effectcomposeruniformsmodel.cpp index 492d5a9e806..c2c162a87ee 100644 --- a/src/plugins/effectcomposer/effectcomposeruniformsmodel.cpp +++ b/src/plugins/effectcomposer/effectcomposeruniformsmodel.cpp @@ -59,7 +59,9 @@ bool EffectComposerUniformsModel::setData(const QModelIndex &index, const QVaria int idx = value.toString().indexOf("file:"); QString path = idx > 0 ? updatedValue.right(updatedValue.size() - idx - 5) : updatedValue; - updatedValue = QUrl::fromLocalFile(path).toString(); + + if (idx == -1) + updatedValue = QUrl::fromLocalFile(path).toString(); uniform->setValue(updatedValue); g_propertyData.insert(uniform->name(), updatedValue); @@ -73,6 +75,14 @@ bool EffectComposerUniformsModel::setData(const QModelIndex &index, const QVaria return true; } +bool EffectComposerUniformsModel::resetData(int row) +{ + QModelIndex idx = index(row, 0); + QTC_ASSERT(idx.isValid(), return false); + + return setData(idx, idx.data(DefaultValueRole), ValueRole); +} + void EffectComposerUniformsModel::resetModel() { beginResetModel(); diff --git a/src/plugins/effectcomposer/effectcomposeruniformsmodel.h b/src/plugins/effectcomposer/effectcomposeruniformsmodel.h index 65b2d7b2f00..fc82194fdf3 100644 --- a/src/plugins/effectcomposer/effectcomposeruniformsmodel.h +++ b/src/plugins/effectcomposer/effectcomposeruniformsmodel.h @@ -20,6 +20,7 @@ public: int rowCount(const QModelIndex & parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role) override; + Q_INVOKABLE bool resetData(int row); void resetModel(); diff --git a/src/plugins/effectcomposer/uniform.cpp b/src/plugins/effectcomposer/uniform.cpp index 98d5ffd336f..590b38b423b 100644 --- a/src/plugins/effectcomposer/uniform.cpp +++ b/src/plugins/effectcomposer/uniform.cpp @@ -94,7 +94,13 @@ void Uniform::setValue(const QVariant &newValue) { if (m_value != newValue) { m_value = newValue; + emit uniformValueChanged(); + + if (m_type == Type::Sampler) { + m_backendValue->setValue(newValue); + emit uniformBackendValueChanged(); + } } }