diff --git a/ArchitectureColoredPainting/EditorWidget.ui b/ArchitectureColoredPainting/EditorWidget.ui index 5825ce6..0ae06e0 100644 --- a/ArchitectureColoredPainting/EditorWidget.ui +++ b/ArchitectureColoredPainting/EditorWidget.ui @@ -120,12 +120,12 @@ 1 - + Tab 1 - + Tab 2 @@ -136,14 +136,6 @@ - - - EditorWidgetItem - QWidget -
EditorWidgetItem.h
- 1 -
-
diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp index 91926d6..1c3a43b 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp @@ -18,16 +18,24 @@ EditorWidget::EditorWidget(QWidget* parent) : QWidget(parent) } connect(this->createButton, &QPushButton::clicked, this, [this]() { static int count = 0; - this->tabWidget->addTab(new EditorWidgetItem(this),"untitled"+QString::number(count++)); + this->tabWidget->addTab(new EditorWidgetItem("../data.json",this), "untitled" + QString::number(count++)); }); connect(this->closeButton, &QPushButton::clicked, this, [this]() { this->tabWidget->removeTab(this->tabWidget->currentIndex()); }); connect(this->saveButton, &QPushButton::clicked, this, [this]() { - + EditorWidgetItem* item = dynamic_cast(this->tabWidget->currentWidget()); + if (item != nullptr) + { + item->saveAs("../data.back.json"); + } }); connect(this->saveAsButton, &QPushButton::clicked, this, [this]() { - + EditorWidgetItem* item = dynamic_cast(this->tabWidget->currentWidget()); + if (item != nullptr) + { + item->saveAs("../data.back.json"); + } }); } diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp index abb1410..a8f630f 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp @@ -1,6 +1,6 @@ #include "EditorWidgetItem.h" -EditorWidgetItem::EditorWidgetItem(QWidget *parent) : QWidget(parent) +EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(parent) { QImage x; displayLayer = nullptr; @@ -9,6 +9,7 @@ EditorWidgetItem::EditorWidgetItem(QWidget *parent) : QWidget(parent) previewWindow = ui.Preview; treeWidget = ui.LayerTree; tabWidget = ui.DisplayTab; + this->filePath = filePath; layerInfoDisplayWidget = dynamic_cast(tabWidget->widget(0)); elementInfoDisplayWidget = dynamic_cast(tabWidget->widget(1)); connect(treeWidget, &LayerTreeWidget::displayLayerChange, this, &EditorWidgetItem::onLayerChange); @@ -20,7 +21,8 @@ EditorWidgetItem::EditorWidgetItem(QWidget *parent) : QWidget(parent) // &EditorWidget::triggerRefreshPreview); // test QFile settingFile; - settingFile.setFileName("../data.json"); + //settingFile.setFileName("../data.json"); + settingFile.setFileName(filePath); settingFile.open(QFile::ReadOnly); QByteArray setting = settingFile.readAll().trimmed(); QJsonParseError jError; @@ -61,3 +63,29 @@ void EditorWidgetItem::triggerRefreshPreview() { previewWindow->update(); } + +void EditorWidgetItem::save() const +{ + saveImpl(this->filePath); +} + +void EditorWidgetItem::saveAs(QString filePath) const +{ + saveImpl(filePath); +} + +void EditorWidgetItem::saveImpl(QString filePath) const +{ + QJsonObject source1 = layerManager->toJson(); + QJsonObject source2 = elementManager->toJson(); + QJsonObject json; + json.insert("width", 1080); + json.insert("height", 1080); + json.insert("root-layer", source1.value("root-layer")); + json.insert("elements", source2.value("elements")); + QJsonDocument doc(json); + QFile file(filePath); + file.open(QIODevice::WriteOnly); + file.write(doc.toJson()); + file.close(); +} \ No newline at end of file diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h index 794743b..8e447d2 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h @@ -27,11 +27,15 @@ class EditorWidgetItem : public QWidget // QT DATA PART LayerWrapper *displayLayer; GraphicElement *displayElement; + QString filePath; + void saveImpl(QString filePath)const; public: - EditorWidgetItem(QWidget *parent = nullptr); + EditorWidgetItem(QString filePath, QWidget *parent = nullptr); ~EditorWidgetItem(); void paintEvent(QPaintEvent *event) override; + void save() const; + void saveAs(QString filePath)const; private slots: void onLayerChange(LayerWrapper *layer); diff --git a/data.back.json b/data.back.json new file mode 100644 index 0000000..f58455c --- /dev/null +++ b/data.back.json @@ -0,0 +1,104 @@ +{ + "elements": [ + { + "name": "ababa", + "type": "svg-file", + "data": { + "include": "./svg/2.svg" + } + }, + { + "name": "ababa-group", + "type": "group", + "data": { + "reference-layer": "0.0" + } + } + ], + "height": 1080, + "root-layer": { + "children": [ + { + "children": [ + { + "element": 0, + "is-folder": false, + "name": "Leaf1", + "transform": { + "offset": { + "x": 0, + "y": 0 + }, + "rotation": 0, + "scale": { + "x": 1, + "y": 1 + } + } + }, + { + "element": 0, + "is-folder": false, + "name": "Leaf2", + "transform": { + "offset": { + "x": 150, + "y": 0 + }, + "rotation": 0, + "scale": { + "x": 1.5, + "y": 1.5 + } + } + } + ], + "is-folder": true, + "name": "GroupFolderExample", + "referenced-by": 1, + "transform": { + "offset": { + "x": 50, + "y": 50 + }, + "rotation": 0, + "scale": { + "x": 1, + "y": 1 + } + } + }, + { + "element": 1, + "is-folder": false, + "name": "ReferencingGroupLayer", + "transform": { + "offset": { + "x": 100, + "y": 0 + }, + "rotation": 45, + "scale": { + "x": 1, + "y": 1 + } + } + } + ], + "is-folder": true, + "name": "root", + "referenced-by": null, + "transform": { + "offset": { + "x": 0, + "y": 0 + }, + "rotation": 0, + "scale": { + "x": 1, + "y": 1 + } + } + }, + "width": 1080 +}