diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposer.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposer.qml index ce8c3b41ca7..95ab2c49bd4 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposer.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposer.qml @@ -15,6 +15,8 @@ ColumnLayout { spacing: 1 + readonly property var backendModel: EffectComposerBackend.effectComposerModel + property var draggedSec: null property var secsY: [] property int moveFromIdx: 0 @@ -32,9 +34,9 @@ ColumnLayout { } Connections { - target: EffectComposerBackend.effectComposerModel + target: root.backendModel function onIsEmptyChanged() { - if (EffectComposerBackend.effectComposerModel.isEmpty) + if (root.backendModel.isEmpty) saveAsDialog.close() } } @@ -49,7 +51,7 @@ ColumnLayout { anchors.centerIn: parent onSave: { - if (EffectComposerBackend.effectComposerModel.currentComposition === "") { + if (root.backendModel.currentComposition === "") { // if current composition is unsaved, show save as dialog and clear afterwards saveAsDialog.clearOnClose = true saveAsDialog.open() @@ -67,27 +69,27 @@ ColumnLayout { Layout.fillWidth: true onAddClicked: { - root.onSaveChangesCallback = () => { EffectComposerBackend.effectComposerModel.clear(true) } + root.onSaveChangesCallback = () => { root.backendModel.clear(true) } - if (EffectComposerBackend.effectComposerModel.hasUnsavedChanges) + if (root.backendModel.hasUnsavedChanges) saveChangesDialog.open() else - EffectComposerBackend.effectComposerModel.clear(true) + root.backendModel.clear(true) } onSaveClicked: { - let name = EffectComposerBackend.effectComposerModel.currentComposition + let name = root.backendModel.currentComposition if (name === "") saveAsDialog.open() else - EffectComposerBackend.effectComposerModel.saveComposition(name) + root.backendModel.saveComposition(name) } onSaveAsClicked: saveAsDialog.open() onAssignToSelectedClicked: { - EffectComposerBackend.effectComposerModel.assignToSelected() + root.backendModel.assignToSelected() } } @@ -153,9 +155,9 @@ ColumnLayout { style: StudioTheme.Values.viewBarButtonStyle buttonIcon: StudioTheme.Constants.clearList_medium tooltip: qsTr("Remove all effect nodes.") - enabled: !EffectComposerBackend.effectComposerModel.isEmpty + enabled: !root.backendModel.isEmpty - onClicked: EffectComposerBackend.effectComposerModel.clear() + onClicked: root.backendModel.clear() } HelperWidgets.AbstractButton { @@ -199,7 +201,7 @@ ColumnLayout { id: repeater width: parent.width - model: EffectComposerBackend.effectComposerModel + model: root.backendModel onCountChanged: { HelperWidgets.Controller.setCount("EffectComposer", repeater.count) @@ -231,7 +233,7 @@ ColumnLayout { if (root.moveFromIdx === root.moveToIdx) root.draggedSec.y = root.secsY[root.moveFromIdx] else - EffectComposerBackend.effectComposerModel.moveNode(root.moveFromIdx, root.moveToIdx) + root.backendModel.moveNode(root.moveFromIdx, root.moveToIdx) highlightBorder = false root.draggedSec = null @@ -271,13 +273,14 @@ ColumnLayout { } // ScrollView Text { - text: qsTr("Add an effect node to start") + text: root.backendModel.isEnabled ? qsTr("Add an effect node to start") + : qsTr("Effect Composer is disabled on MCU projects") color: StudioTheme.Values.themeTextColor font.pixelSize: StudioTheme.Values.baseFontSize anchors.centerIn: parent - visible: EffectComposerBackend.effectComposerModel.isEmpty + visible: root.backendModel.isEmpty } } // Item } // Column diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml index 0ffa51d976b..c01bc6dc992 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml @@ -13,6 +13,8 @@ Rectangle { height: StudioTheme.Values.toolbarHeight color: StudioTheme.Values.themeToolbarBackground + readonly property var backendModel: EffectComposerBackend.effectComposerModel + signal addClicked signal saveClicked signal saveAsClicked @@ -26,7 +28,7 @@ Rectangle { style: StudioTheme.Values.viewBarButtonStyle buttonIcon: StudioTheme.Constants.add_medium tooltip: qsTr("Add new composition") - + enabled: root.backendModel.isEnabled onClicked: root.addClicked() } @@ -34,8 +36,8 @@ Rectangle { style: StudioTheme.Values.viewBarButtonStyle buttonIcon: StudioTheme.Constants.save_medium tooltip: qsTr("Save current composition") - enabled: EffectComposerBackend.effectComposerModel.hasUnsavedChanges - || EffectComposerBackend.effectComposerModel.currentComposition === "" + enabled: root.backendModel.isEnabled && (root.backendModel.hasUnsavedChanges + || root.backendModel.currentComposition === "") onClicked: root.saveClicked() } @@ -44,7 +46,7 @@ Rectangle { style: StudioTheme.Values.viewBarButtonStyle buttonIcon: StudioTheme.Constants.saveAs_medium tooltip: qsTr("Save current composition with a new name") - enabled: !EffectComposerBackend.effectComposerModel.isEmpty + enabled: root.backendModel.isEnabled && !root.backendModel.isEmpty onClicked: root.saveAsClicked() } @@ -53,7 +55,7 @@ Rectangle { style: StudioTheme.Values.viewBarButtonStyle buttonIcon: StudioTheme.Constants.assignTo_medium tooltip: qsTr("Assign current composition to selected item") - enabled: EffectComposerBackend.effectComposerModel.currentComposition !== "" + enabled: root.backendModel.isEnabled && root.backendModel.currentComposition !== "" onClicked: root.assignToSelectedClicked() } @@ -61,7 +63,7 @@ Rectangle { Text { - readonly property string compName: EffectComposerBackend.effectComposerModel.currentComposition + readonly property string compName: root.backendModel.currentComposition text: compName !== "" ? compName : qsTr("Untitled") anchors.centerIn: parent diff --git a/src/plugins/effectcomposer/effectcomposermodel.cpp b/src/plugins/effectcomposer/effectcomposermodel.cpp index c6eed3e4160..966465ff31d 100644 --- a/src/plugins/effectcomposer/effectcomposermodel.cpp +++ b/src/plugins/effectcomposer/effectcomposermodel.cpp @@ -1475,6 +1475,19 @@ void EffectComposerModel::setShadersUpToDate(bool UpToDate) emit shadersUpToDateChanged(); } +bool EffectComposerModel::isEnabled() const +{ + return m_isEnabled; +} + +void EffectComposerModel::setIsEnabled(bool enabled) +{ + if (m_isEnabled == enabled) + return; + m_isEnabled = enabled; + emit isEnabledChanged(); +} + // Returns name for image mipmap property. // e.g. "myImage" -> "myImageMipmap". QString EffectComposerModel::mipmapPropertyName(const QString &name) const diff --git a/src/plugins/effectcomposer/effectcomposermodel.h b/src/plugins/effectcomposer/effectcomposermodel.h index 3c81e52472a..69afc503ea4 100644 --- a/src/plugins/effectcomposer/effectcomposermodel.h +++ b/src/plugins/effectcomposer/effectcomposermodel.h @@ -46,6 +46,7 @@ class EffectComposerModel : public QAbstractListModel Q_PROPERTY(int selectedIndex MEMBER m_selectedIndex NOTIFY selectedIndexChanged) Q_PROPERTY(bool hasUnsavedChanges MEMBER m_hasUnsavedChanges WRITE setHasUnsavedChanges NOTIFY hasUnsavedChangesChanged) Q_PROPERTY(bool shadersUpToDate READ shadersUpToDate WRITE setShadersUpToDate NOTIFY shadersUpToDateChanged) + Q_PROPERTY(bool isEnabled READ isEnabled WRITE setIsEnabled NOTIFY isEnabledChanged) Q_PROPERTY(QString qmlComponentString READ qmlComponentString) Q_PROPERTY(QString currentComposition READ currentComposition WRITE setCurrentComposition NOTIFY currentCompositionChanged) @@ -73,6 +74,9 @@ public: bool shadersUpToDate() const; void setShadersUpToDate(bool newShadersUpToDate); + bool isEnabled() const; + void setIsEnabled(bool enabled); + QString fragmentShader() const; void setFragmentShader(const QString &newFragmentShader); @@ -105,6 +109,7 @@ signals: void selectedIndexChanged(int idx); void effectErrorChanged(); void shadersUpToDateChanged(); + void isEnabledChanged(); void shadersBaked(); void currentCompositionChanged(); void nodesChanged(); @@ -201,6 +206,7 @@ private: QString m_previewEffectPropertiesString; QString m_qmlComponentString; bool m_loadComponentImages = true; + bool m_isEnabled = true; QString m_currentComposition; const QRegularExpression m_spaceReg = QRegularExpression("\\s+"); diff --git a/src/plugins/effectcomposer/effectcomposerview.cpp b/src/plugins/effectcomposer/effectcomposerview.cpp index f7bf50504bf..3c1901a3d4c 100644 --- a/src/plugins/effectcomposer/effectcomposerview.cpp +++ b/src/plugins/effectcomposer/effectcomposerview.cpp @@ -7,6 +7,7 @@ #include "effectcomposernodesmodel.h" #include "effectcomposerwidget.h" +#include #include #include #include @@ -59,7 +60,7 @@ QmlDesigner::WidgetInfo EffectComposerView::widgetInfo() Core::ICore::addContextObject(context); } - return createWidgetInfo(m_widget.data(), "Effect Composer", + return createWidgetInfo(m_widget.data(), "EffectComposer", QmlDesigner::WidgetInfo::LeftPane, 0, tr("Effect Composer [beta]")); } @@ -82,9 +83,11 @@ void EffectComposerView::modelAttached(QmlDesigner::Model *model) QString currProjectPath = QmlDesigner::DocumentManager::currentProjectDirPath().toString(); - // if starting a new project, clear the effect composer - if (m_currProjectPath != currProjectPath) + if (m_currProjectPath != currProjectPath) { // starting a new project m_widget->effectComposerModel()->clear(true); + m_widget->effectComposerModel()->setIsEnabled( + !QmlDesigner::DesignerMcuManager::instance().isMCUProject()); + } m_currProjectPath = currProjectPath; diff --git a/src/plugins/qmldesigner/designermcumanager.h b/src/plugins/qmldesigner/designermcumanager.h index 56f5a493aca..59ea892d468 100644 --- a/src/plugins/qmldesigner/designermcumanager.h +++ b/src/plugins/qmldesigner/designermcumanager.h @@ -5,6 +5,8 @@ #include +#include "qmldesignercomponents_global.h" + #include #include #include @@ -12,7 +14,7 @@ namespace QmlDesigner { -class DesignerMcuManager +class QMLDESIGNERCOMPONENTS_EXPORT DesignerMcuManager { public: struct Version { diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 98112515ca7..0c059803b9c 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -493,7 +493,8 @@ void DesignModeWidget::setup() static bool isMcuDisabledView(const QString viewId) { - static const QStringList mcuDisabledViews = {"Editor3D", "MaterialEditor", "MaterialBrowser", "TextureEditor"}; + static const QStringList mcuDisabledViews = {"Editor3D", "MaterialEditor", "MaterialBrowser", + "TextureEditor", "EffectComposer"}; return mcuDisabledViews.contains(viewId); }