diff --git a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectNode.qml b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectNode.qml index 1e9db9ebcd0..324304e4e45 100644 --- a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectNode.qml +++ b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectNode.qml @@ -18,6 +18,8 @@ Rectangle { color: mouseArea.containsMouse ? StudioTheme.Values.themeControlBackgroundInteraction : "transparent" + signal addEffectNode(var nodeQenPath) + MouseArea { id: mouseArea @@ -26,7 +28,7 @@ Rectangle { acceptedButtons: Qt.LeftButton onClicked: { - EffectMakerBackend.rootView.addEffectNode(modelData.nodeName) + root.addEffectNode(modelData.nodeQenPath) } } diff --git a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectNodesComboBox.qml b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectNodesComboBox.qml index 3e5a252fb06..9c52f687aac 100644 --- a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectNodesComboBox.qml +++ b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectNodesComboBox.qml @@ -97,7 +97,12 @@ StudioControls.ComboBox { Repeater { model: categoryNodes - EffectNode {} + EffectNode { + onAddEffectNode: (nodeQenPath) => { + EffectMakerBackend.rootView.addEffectNode(modelData.nodeQenPath) + root.popup.close() + } + } } } } diff --git a/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.cpp b/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.cpp index 0d38ea446e8..cc34926f027 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.cpp +++ b/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.cpp @@ -3,6 +3,8 @@ #include "effectmakermodel.h" +#include "compositionnode.h" + namespace QmlDesigner { EffectMakerModel::EffectMakerModel(QObject *parent) @@ -13,8 +15,7 @@ EffectMakerModel::EffectMakerModel(QObject *parent) QHash EffectMakerModel::roleNames() const { QHash roles; - roles[CategoryRole] = "categoryName"; - roles[EffectsRole] = "effectNames"; + roles[NameRole] = "nodeName"; return roles; } @@ -22,12 +23,12 @@ int EffectMakerModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent) - return m_categories.count(); + return m_nodes.count(); } QVariant EffectMakerModel::data(const QModelIndex &index, int /*role*/) const { - if (index.row() < 0 || index.row() >= m_categories.count()) + if (index.row() < 0 || index.row() >= m_nodes.count()) return {}; // TODO @@ -41,6 +42,15 @@ void EffectMakerModel::resetModel() endResetModel(); } +void EffectMakerModel::addNode(const QString &nodeQenPath) +{ + static int id = 0; + + auto *node = new CompositionNode(nodeQenPath); + m_nodes.insert(id++, node); +// TODO: update model +} + void EffectMakerModel::selectEffect(int idx, bool force) { Q_UNUSED(idx) diff --git a/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.h b/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.h index f56c2ed9b91..969267a7b2d 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.h +++ b/src/plugins/qmldesigner/components/effectmaker/effectmakermodel.h @@ -3,21 +3,17 @@ #pragma once +#include #include -#include "effectnodescategory.h" - namespace QmlDesigner { +class CompositionNode; + class EffectMakerModel : public QAbstractListModel { Q_OBJECT - enum Roles { - CategoryRole = Qt::UserRole + 1, - EffectsRole - }; - Q_PROPERTY(bool isEmpty MEMBER m_isEmpty NOTIFY isEmptyChanged) Q_PROPERTY(int selectedIndex MEMBER m_selectedIndex NOTIFY selectedIndexChanged) @@ -32,7 +28,7 @@ public: void resetModel(); - QList categories() { return m_categories; } + void addNode(const QString &nodeQenPath); Q_INVOKABLE void selectEffect(int idx, bool force = false); Q_INVOKABLE void applyToSelected(qint64 internalId, bool add = false); @@ -43,13 +39,17 @@ signals: void hasModelSelectionChanged(); private: + enum Roles { + NameRole = Qt::UserRole + 1, +// TODO + }; + bool isValidIndex(int idx) const; - QList m_categories; + QMap m_nodes; int m_selectedIndex = -1; bool m_isEmpty = true; - bool m_hasModelSelection = false; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/effectmaker/effectmakerwidget.cpp b/src/plugins/qmldesigner/components/effectmaker/effectmakerwidget.cpp index 2de6e25c9d1..02fe24e344c 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectmakerwidget.cpp +++ b/src/plugins/qmldesigner/components/effectmaker/effectmakerwidget.cpp @@ -99,13 +99,9 @@ QPointer EffectMakerWidget::effectMakerNodesModel() const return m_effectMakerNodesModel; } -void EffectMakerWidget::addEffectNode(const QString &nodeName) +void EffectMakerWidget::addEffectNode(const QString &nodeQenPath) { - Q_UNUSED(nodeName) - - // TODO: implement adding a node to the composition - // TODO: nodeName might be changed to nodeId? -// m_effectMakerModel.addNode(nodeName); + m_effectMakerModel->addNode(nodeQenPath); } void EffectMakerWidget::focusSection(int section) diff --git a/src/plugins/qmldesigner/components/effectmaker/effectmakerwidget.h b/src/plugins/qmldesigner/components/effectmaker/effectmakerwidget.h index 0eee5ef7ff4..e42edd04400 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectmakerwidget.h +++ b/src/plugins/qmldesigner/components/effectmaker/effectmakerwidget.h @@ -35,7 +35,7 @@ public: QPointer effectMakerModel() const; QPointer effectMakerNodesModel() const; - Q_INVOKABLE void addEffectNode(const QString &nodeName); + Q_INVOKABLE void addEffectNode(const QString &nodeQenPath); Q_INVOKABLE void focusSection(int section); protected: diff --git a/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp b/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp index d8774ae8cd3..08d11925f56 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp +++ b/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp @@ -24,11 +24,6 @@ EffectNode::EffectNode(const QString &qenPath) m_iconPath = QUrl::fromLocalFile(iconPath); } -QString EffectNode::qenPath() const -{ - return m_qenPath; -} - QString EffectNode::name() const { return m_name; @@ -39,4 +34,9 @@ QString EffectNode::description() const return m_description; } +QString EffectNode::qenPath() const +{ + return m_qenPath; +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/effectmaker/effectnode.h b/src/plugins/qmldesigner/components/effectmaker/effectnode.h index 3c6563e80f2..823fe092db0 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectnode.h +++ b/src/plugins/qmldesigner/components/effectmaker/effectnode.h @@ -13,19 +13,21 @@ class EffectNode : public QObject Q_OBJECT Q_PROPERTY(QString nodeName MEMBER m_name CONSTANT) + Q_PROPERTY(QString nodeDescription MEMBER m_description CONSTANT) Q_PROPERTY(QUrl nodeIcon MEMBER m_iconPath CONSTANT) + Q_PROPERTY(QString nodeQenPath MEMBER m_qenPath CONSTANT) public: EffectNode(const QString &qenPath); - QString qenPath() const; QString name() const; QString description() const; + QString qenPath() const; private: - QString m_qenPath; QString m_name; QString m_description; + QString m_qenPath; QUrl m_iconPath; };