-
Notifications
You must be signed in to change notification settings - Fork 2
/
CircuitFileParser.cpp
115 lines (93 loc) · 2.91 KB
/
CircuitFileParser.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "CircuitFileParser.h"
#include "Configuration.h"
CircuitFileParser::CircuitFileParser(RuntimeConfigParser& pRuntimeConfigParser):
mIsCircuitModified(false),
mRuntimeConfigParser(pRuntimeConfigParser)
{}
void CircuitFileParser::LoadJson(const QFileInfo& pFileInfo, bool pIsFromRecents)
{
QFile loadFile(pFileInfo.absoluteFilePath());
if (!loadFile.open(QIODevice::ReadOnly))
{
emit LoadCircuitFileFailedSignal(pFileInfo, pIsFromRecents);
return;
}
QByteArray rawData = loadFile.readAll();
if (file::SAVE_FORMAT == file::SaveFormat::BINARY)
{
rawData = qUncompress(rawData);
if (rawData.isEmpty())
{
// if the data could not be decompressed
emit LoadCircuitFileFailedSignal(pFileInfo, pIsFromRecents);
return;
}
auto jsonDoc = QJsonDocument(QCborValue::fromCbor(rawData).toMap().toJsonObject());
mCurrentFile = pFileInfo;
mRuntimeConfigParser.AddRecentFilePath(mCurrentFile.value());
emit LoadCircuitFileSuccessSignal(mCurrentFile.value(), jsonDoc.object());
}
else
{
auto jsonDoc = QJsonDocument::fromJson(rawData);
mCurrentFile = pFileInfo;
mRuntimeConfigParser.AddRecentFilePath(mCurrentFile.value());
emit LoadCircuitFileSuccessSignal(mCurrentFile.value(), jsonDoc.object());
}
mRuntimeConfigParser.SetLastFilePath(pFileInfo.path());
}
void CircuitFileParser::SaveJson(const QJsonObject& pJson)
{
if (mCurrentFile.has_value())
{
SaveJsonAs(mCurrentFile.value(), pJson);
}
}
void CircuitFileParser::SaveJsonAs(const QFileInfo& pFileInfo, const QJsonObject& pJson)
{
QFile saveFile(pFileInfo.absoluteFilePath());
if (!saveFile.open(QIODevice::WriteOnly))
{
emit SaveCircuitFileFailedSignal(pFileInfo);
return;
}
if (file::SAVE_FORMAT == file::SaveFormat::BINARY)
{
auto bin = QCborValue::fromJsonValue(pJson).toCbor();
saveFile.write(qCompress(bin, 9));
}
else
{
auto json = QJsonDocument(pJson).toJson(QJsonDocument::Compact);
saveFile.write(json);
}
mCurrentFile = pFileInfo;
mIsCircuitModified = false;
mRuntimeConfigParser.AddRecentFilePath(mCurrentFile.value());
mRuntimeConfigParser.SetLastFilePath(pFileInfo.path());
emit SaveCircuitFileSuccessSignal(mCurrentFile.value());}
void CircuitFileParser::ResetCurrentFileInfo()
{
mCurrentFile = std::nullopt;
mIsCircuitModified = false;
}
bool CircuitFileParser::IsFileOpen() const
{
return mCurrentFile.has_value();
}
bool CircuitFileParser::IsCircuitModified() const
{
return mIsCircuitModified;
}
void CircuitFileParser::MarkAsModified()
{
if (!mIsCircuitModified)
{
mIsCircuitModified = true;
emit CircuitModifiedSignal();
}
}
std::optional<QFileInfo> CircuitFileParser::GetFileInfo() const
{
return mCurrentFile;
}