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