diff --git a/include/QtNodes/internal/DagGraphicsScene.hpp b/include/QtNodes/internal/DagGraphicsScene.hpp index d102dd01..7fcaaba9 100644 --- a/include/QtNodes/internal/DagGraphicsScene.hpp +++ b/include/QtNodes/internal/DagGraphicsScene.hpp @@ -25,7 +25,7 @@ class NODE_EDITOR_PUBLIC DagGraphicsScene : public BasicGraphicsScene bool isBlank() const { return _graphModel.isEmpty(); } public Q_SLOTS: - bool save(const QString &filePath) const; + bool save(const QString &filePath, const QJsonObject &metadata = {}) const; bool load(const QString &filePath); void createNodeAt(const QString &name, const QPointF &pos); diff --git a/src/DagGraphicsScene.cpp b/src/DagGraphicsScene.cpp index 26925eeb..94c24e41 100644 --- a/src/DagGraphicsScene.cpp +++ b/src/DagGraphicsScene.cpp @@ -148,7 +148,7 @@ QMenu *DagGraphicsScene::createSceneMenu(QPointF const scenePos) return modelMenu; } -bool DagGraphicsScene::save(const QString &filePath) const +bool DagGraphicsScene::save(const QString &filePath, const QJsonObject &metadata) const { QFileInfo fileInfo(filePath); if (fileInfo.suffix().compare("dag", Qt::CaseInsensitive) != 0) @@ -156,7 +156,21 @@ bool DagGraphicsScene::save(const QString &filePath) const QFile file(fileInfo.absoluteFilePath()); if (!file.open(QIODevice::WriteOnly)) return false; - file.write(QJsonDocument(_graphModel.save()).toJson()); + + QJsonObject sceneJson = _graphModel.save(); + // Merge metadata safely + if (!metadata.isEmpty()) { + QJsonObject globals; + for (auto it = metadata.begin(); it != metadata.end(); ++it) { + if (!it.value().isUndefined()) + globals[it.key()] = it.value(); + } + + if (!globals.isEmpty()) + sceneJson["globals"] = globals; + } + + file.write(QJsonDocument(sceneJson).toJson()); file.close(); return true; }