feat: Implement feature graph and JSON document save/load
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
90
src/Document.cpp
Normal file
90
src/Document.cpp
Normal file
@@ -0,0 +1,90 @@
|
||||
#include "Document.h"
|
||||
#include "Feature.h"
|
||||
#include "SketchFeature.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonObject>
|
||||
|
||||
Document::Document(QObject *parent) : QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
Document::~Document()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void Document::addFeature(Feature* feature)
|
||||
{
|
||||
m_features.append(feature);
|
||||
}
|
||||
|
||||
void Document::clear()
|
||||
{
|
||||
qDeleteAll(m_features);
|
||||
m_features.clear();
|
||||
}
|
||||
|
||||
bool Document::save(const QString& path) const
|
||||
{
|
||||
QJsonArray featuresArray;
|
||||
for (const Feature* feature : m_features) {
|
||||
QJsonObject featureObject;
|
||||
feature->write(featureObject);
|
||||
featuresArray.append(featureObject);
|
||||
}
|
||||
|
||||
QJsonObject rootObject;
|
||||
rootObject["features"] = featuresArray;
|
||||
|
||||
QJsonDocument doc(rootObject);
|
||||
QFile file(path);
|
||||
if (!file.open(QIODevice::WriteOnly)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
file.write(doc.toJson());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Document::load(const QString& path)
|
||||
{
|
||||
QFile file(path);
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QByteArray data = file.readAll();
|
||||
QJsonDocument doc = QJsonDocument::fromJson(data);
|
||||
|
||||
if (doc.isNull() || !doc.isObject()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
clear();
|
||||
|
||||
QJsonObject rootObject = doc.object();
|
||||
if (rootObject.contains("features") && rootObject["features"].isArray()) {
|
||||
QJsonArray featuresArray = rootObject["features"].toArray();
|
||||
for (const QJsonValue& value : featuresArray) {
|
||||
QJsonObject obj = value.toObject();
|
||||
if (obj.contains("type") && obj["type"].isString()) {
|
||||
QString type = obj["type"].toString();
|
||||
Feature* feature = nullptr;
|
||||
|
||||
if (type == "Sketch") {
|
||||
feature = new SketchFeature("");
|
||||
}
|
||||
|
||||
if (feature) {
|
||||
feature->read(obj);
|
||||
addFeature(feature);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user