Skip to content

Commit e7d6c2a

Browse files
committed
Finished save/open speedchart
1 parent 62c3e8c commit e7d6c2a

File tree

4 files changed

+73
-11
lines changed

4 files changed

+73
-11
lines changed

.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
*.dll *.exe andriod/
1+
*.dll
2+
*.exe
3+
android/
4+
*.user.*

mainwindow.cpp

+64-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
#include <QAction>
1313
#include <QFileDialog>
1414
#include <QKeyEvent>
15+
#include <QJsonArray>
16+
#include <QJsonDocument>
17+
#include <QJsonObject>
1518
#include <QMessageBox>
1619
#include <QScrollArea>
1720
#include <QStandardPaths>
@@ -1399,12 +1402,37 @@ void MainWindow::load() {
13991402
#else
14001403
QStringList files = QFileDialog::getOpenFileNames(this, "Import Character file(s)", _dir, "Hero System Character(s) (*.hdc *.hsccu *.hsc)");
14011404
if (files.isEmpty()) return;
1402-
for (const auto& filename: files) {
1405+
for (auto filename: files) {
14031406
#endif
14041407
std::shared_ptr<Char> character;
14051408
if (filename.endsWith(".hdc")) character = make_shared<hscChar>();
1406-
else if (filename.endsWith(".hsscu")) character = make_shared<hsccuChar>();
1409+
else if (filename.endsWith(".hsccu")) character = make_shared<hsccuChar>();
14071410
else {
1411+
QFile file(filename);
1412+
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;
1413+
1414+
QByteArray data(file.readAll());
1415+
file.close();
1416+
1417+
QString jsonStr(data);
1418+
QJsonDocument json = QJsonDocument::fromJson(jsonStr.toUtf8());
1419+
QJsonArray fileList = json["files"].toArray();
1420+
for (int i = 0; i < fileList.count(); ++i) {
1421+
if (fileList[i].isString()) {
1422+
filename = fileList[i].toString();
1423+
if (filename.endsWith(".hdc")) character = make_shared<hscChar>();
1424+
else character = make_shared<hsccuChar>();
1425+
}
1426+
else {
1427+
QJsonObject obj = fileList[i].toObject();
1428+
filename = obj["name"].toString() + "," + obj["dcv"].toString() + "," + obj["dex"].toString() + "," +
1429+
obj["dmcv"].toString() + "," + obj["ed"].toString() + "," + obj["ocv"].toString() + "," +
1430+
obj["omcv"].toString() + "," + obj["pd"].toString() + "," + obj["rEd"].toString() + "," +
1431+
obj["rPd"].toString() + "," + obj["spd"].toString();
1432+
character = SimpleDialog::create();
1433+
}
1434+
load(character, filename);
1435+
}
14081436
continue;
14091437
}
14101438
load(character, filename);
@@ -1460,11 +1488,40 @@ void MainWindow::remove() {
14601488

14611489
#ifndef __wasm__
14621490
void MainWindow::save() {
1463-
// get a save file from the user
1464-
// go through all of the characters:
1465-
// write the path for characters that have a non-empty one
1466-
// else write the simple character to the save-file
1467-
// success!!
1491+
QString filename = QFileDialog::getSaveFileName(this, "Export SpeedChart", _dir, "Hero System SpeedChart (*.hsc)");
1492+
if (filename.isEmpty()) return;
1493+
1494+
QJsonDocument json;
1495+
QJsonObject top;
1496+
QJsonArray files;
1497+
QStringList keys = _characters.keys();
1498+
for (const auto& name: keys) {
1499+
QString filename = _characters[name]->path();
1500+
if (filename.isEmpty()) {
1501+
QJsonObject obj;
1502+
std::shared_ptr<Char> chr = _characters[name];
1503+
obj["name"] = chr->name();
1504+
obj["dcv"] = chr->getPrimary("DCV");
1505+
obj["dex"] = chr->getPrimary("DEX");
1506+
obj["dmcv"] = chr->getPrimary("DMCV");
1507+
obj["ed"] = chr->getPrimary("ED");
1508+
obj["ocv"] = chr->getPrimary("OCV");
1509+
obj["omcv"] = chr->getPrimary("OMCV");
1510+
obj["pd"] = chr->getPrimary("PD");
1511+
obj["rEd"] = chr->getPrimaryResistant("ED");
1512+
obj["rPd"] = chr->getPrimaryResistant("PD");
1513+
obj["spd"] = chr->getPrimary("SPD");
1514+
files.append(obj);
1515+
} else files.append(filename);
1516+
}
1517+
top["files"] = files;
1518+
json.setObject(top);
1519+
1520+
QFile file(filename);
1521+
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) return;
1522+
QTextStream out(&file);
1523+
out << json.toJson();
1524+
file.close();
14681525
}
14691526
#endif
14701527

simpledialog.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,7 @@ void SimpleDialog::ok() {
9696
MainWindow::ref->displayCharacter(name);
9797
}
9898

99-
std::shared_ptr<class Char> Sinpleload(QJsonObject&);
99+
std::shared_ptr<class Char> SimpleDialog::create() {
100+
std::shared_ptr<Char> character = std::make_shared<simpleChar>();
101+
return character;
102+
}

simpledialog.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#define SIMPLEDIALOG_H
33

44
#include <QDialog>
5-
#include <QJsonObject>
65

76
namespace Ui {
87
class SimpleDialog;
@@ -16,7 +15,7 @@ class SimpleDialog : public QDialog
1615
explicit SimpleDialog(QWidget *parent = nullptr);
1716
~SimpleDialog();
1817

19-
static std::shared_ptr<class Char> load(QJsonObject&);
18+
static std::shared_ptr<class Char> create();
2019

2120
private:
2221
Ui::SimpleDialog *ui;

0 commit comments

Comments
 (0)