FIX: 修正文件路径逻辑

dev-wuyize
karlis 2023-03-20 22:26:38 +08:00
parent b944572204
commit 769effe49c
9 changed files with 48 additions and 17 deletions

View File

@ -3,6 +3,8 @@
#include "DataManager/ProjectDataManager.h" #include "DataManager/ProjectDataManager.h"
#include <QTimer> #include <QTimer>
#include <QFileInfo> #include <QFileInfo>
#include <QFile>
#include <QDir>
EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(parent) EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(parent)
{ {
@ -66,7 +68,7 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p
ProjectDataManager::Instance()->addProjectData(data); ProjectDataManager::Instance()->addProjectData(data);
// end test // end test
QJsonObject source = jsonDoc.object(); QJsonObject source = jsonDoc.object();
elementManager = new ElementManager(source,Renderer::ElementRenderer::instance()); elementManager = new ElementManager(source, QFileInfo(filePath).absolutePath());
layerManager = new LayerManager(source, elementManager); layerManager = new LayerManager(source, elementManager);
elementInfoDisplayWidget->setElementManager(elementManager); elementInfoDisplayWidget->setElementManager(elementManager);
treeWidget->elementManager = elementManager; treeWidget->elementManager = elementManager;
@ -125,6 +127,23 @@ void EditorWidgetItem::save() const
void EditorWidgetItem::saveAs(QString filePath) const void EditorWidgetItem::saveAs(QString filePath) const
{ {
saveImpl(filePath); saveImpl(filePath);
QString srcHome = QFileInfo(this->filePath).absolutePath();
if (!QDir(QFileInfo(filePath).absolutePath() + "/svg").exists())
{
QDir().mkdir(QFileInfo(filePath).absolutePath() + "/svg");
}
for (auto& ele : elementManager->elements)
{
auto e = dynamic_cast<SimpleElement*>(ele);
if (e != nullptr)
{
QString fileName = e->jsonSource["data"].toObject()["include"].toString();
QString src = srcHome + fileName;
QString dst = QFileInfo(filePath).absolutePath() + fileName;
QFile::copy(src, dst);
}
}
} }
void EditorWidgetItem::saveImpl(QString filePath) const void EditorWidgetItem::saveImpl(QString filePath) const

View File

@ -1,16 +1,20 @@
#include "ElementManager.h" #include "ElementManager.h"
ElementManager::ElementManager(QJsonObject source,Renderer::ElementRenderer* renderer) #include <QFileInfo>
#include <QDir>
#include <QFile>
ElementManager::ElementManager(QJsonObject source, QString fileHome)
{ {
auto elementsJson = source.value("elements").toArray(); auto elementsJson = source.value("elements").toArray();
this->fileHome = fileHome;
int index = 0; int index = 0;
for (auto elementJson : elementsJson) for (auto elementJson : elementsJson)
{ {
if (elementJson.toObject().value("type").toString() == "group") if (elementJson.toObject().value("type").toString() == "group")
elements.push_back(new GroupElement()); elements.push_back(new GroupElement());
else else
elements.push_back(new SimpleElement(elementJson.toObject())); elements.push_back(new SimpleElement(elementJson.toObject(), fileHome));
(*elements.rbegin())->name = elementJson.toObject().value("name").toString(); (*elements.rbegin())->name = elementJson.toObject().value("name").toString();
(*elements.rbegin())->renderer = renderer;
} }
for (auto element : elements) for (auto element : elements)
element->index = index++; element->index = index++;
@ -90,9 +94,11 @@ void ElementManager::createGroupElement(QString name, FolderLayerWrapper* source
void ElementManager::createSimpleElement(QString name, QString filePath) { void ElementManager::createSimpleElement(QString name, QString filePath) {
QJsonObject json; QJsonObject json;
QJsonObject data; QJsonObject data;
data.insert("include", filePath); QFile fileSrc(filePath);
QFile::copy(filePath, QDir::cleanPath(fileHome + "/svg/" + QFileInfo(filePath).fileName()));
data.insert("include", "/svg/"+QFileInfo(filePath).fileName());
json.insert("data", data); json.insert("data", data);
auto element = new SimpleElement(json); auto element = new SimpleElement(json, fileHome);
element->name = name; element->name = name;
addElement(element); addElement(element);
} }

View File

@ -14,9 +14,10 @@ class ElementManager
{ {
public: public:
vector<GraphicElement *> elements; vector<GraphicElement *> elements;
QString fileHome;
public: public:
ElementManager(QJsonObject source,Renderer::ElementRenderer *renderer); ElementManager(QJsonObject source, QString fileHome);
~ElementManager(); ~ElementManager();
void addElement(GraphicElement *element); void addElement(GraphicElement *element);
void removeElement(GraphicElement *pElement); void removeElement(GraphicElement *pElement);

View File

@ -2,6 +2,8 @@
#include "util/SvgFileLoader.h" #include "util/SvgFileLoader.h"
#include <QGuiApplication> #include <QGuiApplication>
#include <QScreen> #include <QScreen>
#include <QDir>
using namespace std; using namespace std;
PixelPath SimpleElement::getPaintObject() const PixelPath SimpleElement::getPaintObject() const
@ -23,13 +25,13 @@ void SimpleElement::loadSvgFile(const QString& filePath)
qDebug() << "load svg file success " << painterPath.elementCount() << (isClosed() ? "is" : "not") << "closed"; qDebug() << "load svg file success " << painterPath.elementCount() << (isClosed() ? "is" : "not") << "closed";
} }
SimpleElement::SimpleElement(QJsonObject jsonSource) : jsonSource(jsonSource) SimpleElement::SimpleElement(QJsonObject jsonSource, QString fileHome) : jsonSource(jsonSource)
{ {
painterPath.clear(); painterPath.clear();
filePath = jsonSource["data"].toObject()["include"].toString(); filePath = jsonSource["data"].toObject()["include"].toString();
//loadSvgFile("D:\\Projects\\BigC\\svg\\3.svg"); //loadSvgFile("D:\\Projects\\BigC\\svg\\3.svg");
QFileInfo info(filePath); QFileInfo info(QDir::cleanPath(fileHome + "/" + filePath));
loadSvgFile(filePath); loadSvgFile(info.absoluteFilePath());
} }
GroupElement::GroupElement(FolderLayerWrapper* sourceLayer) GroupElement::GroupElement(FolderLayerWrapper* sourceLayer)

View File

@ -46,7 +46,7 @@ public:
public: public:
QJsonObject toJson() const override; QJsonObject toJson() const override;
SimpleElement(QJsonObject jsonSource); SimpleElement(QJsonObject jsonSource, QString fileHome);
SimpleElement(QString filePath); SimpleElement(QString filePath);
~SimpleElement() = default; ~SimpleElement() = default;
PixelPath getPaintObject() const override; PixelPath getPaintObject() const override;

View File

@ -75,7 +75,7 @@ FolderLayerWrapper::FolderLayerWrapper(QJsonObject json, ElementManager *element
} }
LeafLayerWrapper::LeafLayerWrapper(QJsonObject json, ElementManager* elementManager, FolderLayerWrapper* parent) LeafLayerWrapper::LeafLayerWrapper(QJsonObject json, ElementManager* elementManager, FolderLayerWrapper* parent)
: LayerWrapper(json, parent), : LayerWrapper(json, parent, elementManager),
wrappedElement(elementManager->getElementById(json.value("element").toInt())), wrappedElement(elementManager->getElementById(json.value("element").toInt())),
styles(LayerStyleContainer::fromJson(wrappedElement->isClosed(), json.value("styles").toArray())) styles(LayerStyleContainer::fromJson(wrappedElement->isClosed(), json.value("styles").toArray()))
{ {
@ -255,6 +255,7 @@ QJsonObject FolderLayerWrapper::toJson() const
QJsonObject json = LayerWrapper::toJson(); QJsonObject json = LayerWrapper::toJson();
QJsonArray childrenJson; QJsonArray childrenJson;
for (auto& child : children) for (auto& child : children)
if(child != nullptr)
childrenJson.push_back(child->toJson()); childrenJson.push_back(child->toJson());
json.insert("children", childrenJson); json.insert("children", childrenJson);
json.insert("is-folder", true); json.insert("is-folder", true);
@ -268,7 +269,7 @@ QJsonObject FolderLayerWrapper::toJson() const
QJsonObject LeafLayerWrapper::toJson() const QJsonObject LeafLayerWrapper::toJson() const
{ {
QJsonObject json = LayerWrapper::toJson(); QJsonObject json = LayerWrapper::toJson();
json.insert("element", wrappedElement->index); json.insert("element", elementManager->getElementIndex(wrappedElement));
json.insert("is-folder", false); json.insert("is-folder", false);
json.insert("styles", styles.toJson()); json.insert("styles", styles.toJson());
return json; return json;

View File

@ -59,6 +59,7 @@ void LayerTreeWidget::popMenu(const QPoint &pos)
connect(dialog, &LayerCreateWidget::LayerInfoReturned, this, [this, layer](QJsonObject jsonObj) { connect(dialog, &LayerCreateWidget::LayerInfoReturned, this, [this, layer](QJsonObject jsonObj) {
auto folderLayer = dynamic_cast<FolderLayerWrapper*>(layer); auto folderLayer = dynamic_cast<FolderLayerWrapper*>(layer);
LayerWrapper* newLayer; LayerWrapper* newLayer;
qDebug() << this->elementManager;
if(jsonObj.value("is-folder").toBool()) if(jsonObj.value("is-folder").toBool())
newLayer = new FolderLayerWrapper(jsonObj, this->elementManager, folderLayer); newLayer = new FolderLayerWrapper(jsonObj, this->elementManager, folderLayer);
else else

View File

@ -3,6 +3,7 @@
#include <QJsondocument> #include <QJsondocument>
#include "PainterPathUtil.h" #include "PainterPathUtil.h"
#include <queue> #include <queue>
#include <QFileInfo>
using Renderer::Painting; using Renderer::Painting;
using Renderer::BaseElement; using Renderer::BaseElement;
@ -37,7 +38,7 @@ Painting PaintingUtil::transfromToPainting(QString jsonFilePath) {
glm::bvec2 flip(0, 0); glm::bvec2 flip(0, 0);
QJsonObject jsonObj = readJsonFile(jsonFilePath); QJsonObject jsonObj = readJsonFile(jsonFilePath);
qDebug() << jsonObj; qDebug() << jsonObj;
shared_ptr<ElementManager> elementManager = make_shared<ElementManager>(jsonObj, Renderer::ElementRenderer::instance()); shared_ptr<ElementManager> elementManager = make_shared<ElementManager>(jsonObj, QFileInfo(jsonFilePath).absolutePath());
shared_ptr<LayerManager> layerManager = make_shared<LayerManager>(jsonObj, elementManager.get()); shared_ptr<LayerManager> layerManager = make_shared<LayerManager>(jsonObj, elementManager.get());
//qDebug() << elementManager->toJson(); //qDebug() << elementManager->toJson();
//qDebug() << layerManager->toJson(); //qDebug() << layerManager->toJson();

View File

@ -8,7 +8,7 @@
"name": "ababa", "name": "ababa",
"type": "svg-file", "type": "svg-file",
"data": { "data": {
"include": "../svg/2.svg" "include": "/svg/2.svg"
} }
}, },
{ {
@ -22,7 +22,7 @@
"name": "ababa2", "name": "ababa2",
"type": "svg-file", "type": "svg-file",
"data": { "data": {
"include": "../svg/0.svg" "include": "/svg/0.svg"
} }
} }
], ],