2
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
3
#include <QStandardPaths>
5
#include <QDesktopServices>
9
#include "importexport.h"
11
QString ImportExport::savePath;
13
QString ImportExport::getSavePath(void)
15
if (!ImportExport::savePath.isNull() && !ImportExport::savePath.isEmpty()) {
16
return ImportExport::savePath;
19
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
20
QString prefix = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
22
QString prefix = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
29
QString path = prefix + QDir::separator() + SAVE_FILENAME;
33
void ImportExport::saveProject(const Speaker &speaker, const SealedBox &sbox, const PortedBox &pbox, const BandPassBox &bpbox, int number, int tab)
35
QString path = ImportExport::getSavePath();
38
/* do not test if it exists, just override it */
39
exportProject(file, speaker, sbox, pbox, bpbox, number, tab);
42
void ImportExport::restoreProject(Speaker &speaker, SealedBox &sbox, PortedBox &pbox, BandPassBox &bpbox, int* number, int* tab)
44
QString path = ImportExport::getSavePath();
47
importProject(speaker, sbox, pbox, bpbox, number, tab, file);
50
void ImportExport::exportProject(QFile &file, const Speaker &speaker, const SealedBox &sbox, const PortedBox &pbox, const BandPassBox &bpbox, int number, int tab)
52
QDomDocument xml("QSpeakersProject");
53
QDomElement root = xml.createElement("project");
54
xml.appendChild(root);
56
QDomElement spk = speaker.toDomElement(xml);
57
root.appendChild(spk);
59
QDomElement xsbox = sbox.toDomElement(xml);
60
root.appendChild(xsbox);
62
QDomElement xpbox = pbox.toDomElement(xml);
63
root.appendChild(xpbox);
65
QDomElement xbpbox = bpbox.toDomElement(xml);
66
root.appendChild(xbpbox);
68
QDomElement xlayout = xml.createElement("layout");
69
xlayout.setAttribute("sibling", number);
70
root.appendChild(xlayout);
72
QDomElement xstate = xml.createElement("state");
73
xstate.setAttribute("tab", tab);
74
root.appendChild(xstate);
76
file.open(QIODevice::WriteOnly);
77
file.write(xml.toByteArray());
81
void ImportExport::importProject(Speaker &speaker, SealedBox &sbox, PortedBox &pbox, BandPassBox &bpbox, int *number, int *tab, QFile &file)
83
QDomDocument doc("QSpeakersProject");
86
file.open(QIODevice::ReadOnly);
87
doc.setContent(&file);
91
QDomElement root = doc.firstChildElement("project");
93
QDomNodeList speakers = root.elementsByTagName("speaker");
94
/* for now, only one speaker is considered */
95
QDomElement spk = speakers.at(0).toElement();
98
speaker.fromDomElement(spk);
100
/* crawl 1st level boxes */
101
QDomElement box = root.firstChildElement("box");
102
while (!box.isNull()) {
103
if (box.attribute("type") == "sealed")
104
sbox.fromDomElement(box);
105
else if (box.attribute("type") == "ported")
106
pbox.fromDomElement(box);
107
else if (box.attribute("type") == "bandpass")
108
bpbox.fromDomElement(box);
110
qWarning() << __func__ << "unrecognized box type";
111
box = box.nextSiblingElement("box");
114
if (number != NULL) {
115
QDomElement layout = root.firstChildElement("layout");
117
*number = 1; /* default */
119
*number = layout.attribute("sibling", "1").toInt();
123
QDomElement state = root.firstChildElement("state");
127
*tab = state.attribute("tab", "0").toInt();
131
void ImportExport::setSavePath(const QString &path)
133
ImportExport::savePath = path;