From 64442a709811eb7ece02ad0ccce5ef436bdb9108 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Tue, 29 Aug 2023 16:24:43 +0300 Subject: [PATCH] QmlDesigner: Implement removing a composition node Fixes: QDS-10410 Change-Id: I4c4922c82f294d676dbf1e82f8c6dbb0f4089fdb Reviewed-by: Miikka Heikkinen --- .../EffectCompositionNode.qml | 6 ++++ .../effectmaker/compositionnode.cpp | 3 +- .../components/effectmaker/compositionnode.h | 3 -- .../effectmaker/effectmakermodel.cpp | 29 ++++--------------- .../components/effectmaker/effectmakermodel.h | 8 ++--- 5 files changed, 15 insertions(+), 34 deletions(-) diff --git a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectCompositionNode.qml b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectCompositionNode.qml index d1bcd4fb454..6efa67919d0 100644 --- a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectCompositionNode.qml +++ b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectCompositionNode.qml @@ -15,6 +15,12 @@ HelperWidgets.Section { caption: nodeName category: "EffectMaker" + showCloseButton: true + closeButtonToolTip: qsTr("Remove") + onCloseButtonClicked: { + EffectMakerBackend.effectMakerModel.removeNode(index) + } + Column { spacing: 10 diff --git a/src/plugins/qmldesigner/components/effectmaker/compositionnode.cpp b/src/plugins/qmldesigner/components/effectmaker/compositionnode.cpp index f4f1eba37d5..0414d3ef44c 100644 --- a/src/plugins/qmldesigner/components/effectmaker/compositionnode.cpp +++ b/src/plugins/qmldesigner/components/effectmaker/compositionnode.cpp @@ -7,7 +7,7 @@ #include "effectmakeruniformsmodel.h" #include "uniform.h" -#include +#include #include #include #include @@ -46,7 +46,6 @@ QStringList CompositionNode::requiredNodes() const void CompositionNode::parse(const QString &qenPath) { - QFile qenFile(qenPath); if (!qenFile.open(QIODevice::ReadOnly)) { diff --git a/src/plugins/qmldesigner/components/effectmaker/compositionnode.h b/src/plugins/qmldesigner/components/effectmaker/compositionnode.h index cb9e41dae1d..2b2864efb97 100644 --- a/src/plugins/qmldesigner/components/effectmaker/compositionnode.h +++ b/src/plugins/qmldesigner/components/effectmaker/compositionnode.h @@ -6,12 +6,9 @@ #include "effectmakeruniformsmodel.h" #include -#include namespace QmlDesigner { -class Uniform; - class CompositionNode : public QObject { Q_OBJECT diff --git a/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.cpp b/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.cpp index 50879021938..9188c43254a 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.cpp +++ b/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.cpp @@ -34,39 +34,22 @@ QVariant EffectMakerModel::data(const QModelIndex &index, int role) const QTC_ASSERT(index.isValid() && index.row() < m_nodes.size(), return {}); QTC_ASSERT(roleNames().contains(role), return {}); - return m_nodes.values().at(index.row())->property(roleNames().value(role)); -} - -void EffectMakerModel::resetModel() -{ - beginResetModel(); - endResetModel(); + return m_nodes.at(index.row())->property(roleNames().value(role)); } void EffectMakerModel::addNode(const QString &nodeQenPath) { - static int id = 0; - beginInsertRows({}, m_nodes.size(), m_nodes.size()); auto *node = new CompositionNode(nodeQenPath); - m_nodes.insert(id++, node); + m_nodes.append(node); endInsertRows(); } -void EffectMakerModel::selectEffect(int idx, bool force) +void EffectMakerModel::removeNode(int idx) { - Q_UNUSED(idx) - Q_UNUSED(force) - - // TODO -} - -void EffectMakerModel::applyToSelected(qint64 internalId, bool add) -{ - Q_UNUSED(internalId) - Q_UNUSED(add) - - // TODO: remove? + beginRemoveRows({}, idx, idx); + m_nodes.removeAt(idx); + endRemoveRows(); } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.h b/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.h index bad64a6cddc..4193b918f22 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.h +++ b/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.h @@ -26,17 +26,13 @@ public: bool isEmpty() const { return m_isEmpty; } - void resetModel(); - void addNode(const QString &nodeQenPath); - Q_INVOKABLE void selectEffect(int idx, bool force = false); - Q_INVOKABLE void applyToSelected(qint64 internalId, bool add = false); + Q_INVOKABLE void removeNode(int idx); signals: void isEmptyChanged(); void selectedIndexChanged(int idx); - void hasModelSelectionChanged(); private: enum Roles { @@ -46,7 +42,7 @@ private: bool isValidIndex(int idx) const; - QMap m_nodes; + QList m_nodes; int m_selectedIndex = -1; bool m_isEmpty = true;