|
12 | 12 | #include <QAction>
|
13 | 13 | #include <QFileDialog>
|
14 | 14 | #include <QKeyEvent>
|
| 15 | +#include <QJsonArray> |
| 16 | +#include <QJsonDocument> |
| 17 | +#include <QJsonObject> |
15 | 18 | #include <QMessageBox>
|
16 | 19 | #include <QScrollArea>
|
17 | 20 | #include <QStandardPaths>
|
@@ -1399,12 +1402,37 @@ void MainWindow::load() {
|
1399 | 1402 | #else
|
1400 | 1403 | QStringList files = QFileDialog::getOpenFileNames(this, "Import Character file(s)", _dir, "Hero System Character(s) (*.hdc *.hsccu *.hsc)");
|
1401 | 1404 | if (files.isEmpty()) return;
|
1402 |
| - for (const auto& filename: files) { |
| 1405 | + for (auto filename: files) { |
1403 | 1406 | #endif
|
1404 | 1407 | std::shared_ptr<Char> character;
|
1405 | 1408 | 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>(); |
1407 | 1410 | 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 | + } |
1408 | 1436 | continue;
|
1409 | 1437 | }
|
1410 | 1438 | load(character, filename);
|
@@ -1460,11 +1488,40 @@ void MainWindow::remove() {
|
1460 | 1488 |
|
1461 | 1489 | #ifndef __wasm__
|
1462 | 1490 | 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(); |
1468 | 1525 | }
|
1469 | 1526 | #endif
|
1470 | 1527 |
|
|
0 commit comments