EffectComposer: Disable effect composer on MCU projects

Fixes: QDS-11867
Change-Id: I2b405faf68623272fd674662b97cb3f0e50170e4
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
Mahmoud Badri
2024-01-30 14:03:41 +02:00
parent 58dd1405fe
commit 217ff89827
7 changed files with 56 additions and 26 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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+");

View File

@@ -7,6 +7,7 @@
#include "effectcomposernodesmodel.h"
#include "effectcomposerwidget.h"
#include <designermcumanager.h>
#include <documentmanager.h>
#include <modelnodeoperations.h>
#include <qmldesignerconstants.h>
@@ -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;

View File

@@ -5,6 +5,8 @@
#include <coreplugin/icore.h>
#include "qmldesignercomponents_global.h"
#include <QString>
#include <QStringList>
#include <QSet>
@@ -12,7 +14,7 @@
namespace QmlDesigner {
class DesignerMcuManager
class QMLDESIGNERCOMPONENTS_EXPORT DesignerMcuManager
{
public:
struct Version {

View File

@@ -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);
}