From a4fbbb24637b12f08a6dcfef702c34d35d25e03f Mon Sep 17 00:00:00 2001 From: Amr Essam Date: Mon, 14 Aug 2023 11:12:04 +0300 Subject: [PATCH] QmlDesigner: Create effect node entity members The EffectNode entity members and initial implementation for loading effect resources Task-number: QDS-10402 Change-Id: I36913731f15fdc89e7bbaa1a7b40088a817e3086 Reviewed-by: Mahmoud Badri Reviewed-by: Qt CI Patch Build Bot --- .../effectmaker/effectmakernodesmodel.cpp | 6 +- .../components/effectmaker/effectnode.cpp | 67 ++++++++++++++++++- .../components/effectmaker/effectnode.h | 28 +++++++- 3 files changed, 92 insertions(+), 9 deletions(-) diff --git a/src/plugins/qmldesigner/components/effectmaker/effectmakernodesmodel.cpp b/src/plugins/qmldesigner/components/effectmaker/effectmakernodesmodel.cpp index 8b7b5c3deb1..420c3f741bf 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectmakernodesmodel.cpp +++ b/src/plugins/qmldesigner/components/effectmaker/effectmakernodesmodel.cpp @@ -87,11 +87,7 @@ void EffectMakerNodesModel::loadModel() QDirIterator itEffects(categoryPath.toString(), {"*.qen"}, QDir::Files); while (itEffects.hasNext()) { itEffects.next(); - QString fileName = QFileInfo(itEffects.fileName()).baseName(); - QString iconPath = m_nodesPath.path() + '/' + catName + "/icon/" + fileName + ".svg"; - if (!QFileInfo::exists(iconPath)) - iconPath = m_nodesPath.path() + "/placeholder.svg"; - effects.push_back(new EffectNode(fileName, iconPath)); + effects.push_back(new EffectNode(itEffects.filePath())); } catName[0] = catName[0].toUpper(); // capitalize first letter diff --git a/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp b/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp index 5b554bc6364..fef05c3ed00 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp +++ b/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp @@ -3,10 +3,71 @@ #include "effectnode.h" +#include +#include + namespace QmlDesigner { -EffectNode::EffectNode(const QString &name, const QString &iconPath) - : m_name(name) - , m_iconPath(QUrl::fromLocalFile(iconPath)) {} +EffectNode::EffectNode(const QString &qenPath) + : m_qenPath(qenPath) +{ + parse(qenPath); +} + +QString EffectNode::qenPath() const +{ + return m_qenPath; +} + +QString EffectNode::name() const +{ + return m_name; +} + +int EffectNode::nodeId() const +{ + return m_nodeId; +} + +QString EffectNode::fragmentCode() const +{ + return m_fragmentCode; +} + +QString EffectNode::vertexCode() const +{ + return m_vertexCode; +} + +QString EffectNode::qmlCode() const +{ + return m_qmlCode; +} + +QString EffectNode::description() const +{ + return m_description; +} + +void EffectNode::parse(const QString &qenPath) +{ + const QFileInfo fileInfo = QFileInfo(qenPath); + m_name = fileInfo.baseName(); + + QString iconPath = QStringLiteral("%1/icon/%2.svg").arg(fileInfo.absolutePath(), m_name); + if (!QFileInfo::exists(iconPath)) { + QDir parentDir = QDir(fileInfo.absolutePath()); + parentDir.cdUp(); + + iconPath = QStringLiteral("%1/%2").arg(parentDir.path(), "placeholder.svg"); + } + m_iconPath = QUrl::fromLocalFile(iconPath); + + // TODO: QDS-10467 + // Parse the effect from QEN file + // The process from the older implementation has the concept of `project` + // and it contains source & dest nodes that we don't need +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/effectmaker/effectnode.h b/src/plugins/qmldesigner/components/effectmaker/effectnode.h index 4b1216d3539..a82ef4ccac3 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectnode.h +++ b/src/plugins/qmldesigner/components/effectmaker/effectnode.h @@ -16,10 +16,36 @@ class EffectNode : public QObject Q_PROPERTY(QUrl nodeIcon MEMBER m_iconPath CONSTANT) public: - EffectNode(const QString &name, const QString &iconPath); + EffectNode(const QString &qenPath); + + QString qenPath() const; + + QString name() const; + int nodeId() const; + QString fragmentCode() const; + QString vertexCode() const; + QString qmlCode() const; + QString description() const; + + bool operator==(const EffectNode &rhs) const noexcept + { + return this->m_nodeId == rhs.m_nodeId; + } + bool operator!=(const EffectNode &rhs) const noexcept + { + return !operator==(rhs); + } private: + void parse(const QString &qenPath); + + QString m_qenPath; QString m_name; + int m_nodeId = -1; + QString m_fragmentCode; + QString m_vertexCode; + QString m_qmlCode; + QString m_description; QUrl m_iconPath; };