diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt index 2320b4d76fd..ec233e40955 100644 --- a/src/plugins/qmldesigner/CMakeLists.txt +++ b/src/plugins/qmldesigner/CMakeLists.txt @@ -715,6 +715,7 @@ extend_qtc_plugin(QmlDesigner effectmakernodesmodel.cpp effectmakernodesmodel.h effectnode.cpp effectnode.h effectnodescategory.cpp effectnodescategory.h + compositionnode.cpp compositionnode.h ) extend_qtc_plugin(QmlDesigner diff --git a/src/plugins/qmldesigner/components/effectmaker/compositionnode.cpp b/src/plugins/qmldesigner/components/effectmaker/compositionnode.cpp new file mode 100644 index 00000000000..ce686bc3fd6 --- /dev/null +++ b/src/plugins/qmldesigner/components/effectmaker/compositionnode.cpp @@ -0,0 +1,63 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include "compositionnode.h" + +#include +#include +#include +#include + +namespace QmlDesigner { + +CompositionNode::CompositionNode(const QString &qenPath) +{ + parse(qenPath); +} + +QString CompositionNode::fragmentCode() const +{ + return m_fragmentCode; +} + +QString CompositionNode::vertexCode() const +{ + return m_vertexCode; +} + +QString CompositionNode::description() const +{ + return m_description; +} + +void CompositionNode::parse(const QString &qenPath) +{ + + QFile loadFile(qenPath); + + if (!loadFile.open(QIODevice::ReadOnly)) { + qWarning("Couldn't open effect file."); + return; + } + + QByteArray loadData = loadFile.readAll(); + QJsonParseError parseError; + QJsonDocument jsonDoc(QJsonDocument::fromJson(loadData, &parseError)); + if (parseError.error != QJsonParseError::NoError) { + QString error = QString("Error parsing the effect node: %1:").arg(qenPath); + QString errorDetails = QString("%1: %2").arg(parseError.offset).arg(parseError.errorString()); + qWarning() << qPrintable(error); + qWarning() << qPrintable(errorDetails); + return; + } + + QJsonObject json = jsonDoc.object(); + QFileInfo fi(loadFile); + + // 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 +} + +} diff --git a/src/plugins/qmldesigner/components/effectmaker/compositionnode.h b/src/plugins/qmldesigner/components/effectmaker/compositionnode.h new file mode 100644 index 00000000000..0d16dbc5dc7 --- /dev/null +++ b/src/plugins/qmldesigner/components/effectmaker/compositionnode.h @@ -0,0 +1,31 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#pragma once + +#include + +namespace QmlDesigner { + +class CompositionNode : public QObject +{ + Q_OBJECT + +public: + CompositionNode(const QString &qenPath); + + QString fragmentCode() const; + QString vertexCode() const; + QString description() const; + +private: + void parse(const QString &qenPath); + + QString m_name; + QString m_fragmentCode; + QString m_vertexCode; + QString m_description; +}; + +} // namespace QmlDesigner + diff --git a/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp b/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp index fef05c3ed00..d8774ae8cd3 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp +++ b/src/plugins/qmldesigner/components/effectmaker/effectnode.cpp @@ -11,7 +11,17 @@ namespace QmlDesigner { EffectNode::EffectNode(const QString &qenPath) : m_qenPath(qenPath) { - parse(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); } QString EffectNode::qenPath() const @@ -24,50 +34,9 @@ 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 a82ef4ccac3..3c6563e80f2 100644 --- a/src/plugins/qmldesigner/components/effectmaker/effectnode.h +++ b/src/plugins/qmldesigner/components/effectmaker/effectnode.h @@ -19,32 +19,12 @@ public: 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; };