1 /******************************************************************************************************
2 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5 ******************************************************************************************************/
6
7 #include "CmdSettingsExportFormat.h"
8 #include "Document.h"
9 #include "DocumentModelExportFormat.h"
10 #include "DocumentSerialize.h"
11 #include "Logger.h"
12 #include "MainWindow.h"
13 #include <QXmlStreamReader>
14 #include "Xml.h"
15
16 const QString CMD_DESCRIPTION ("Export settings");
17
CmdSettingsExportFormat(MainWindow & mainWindow,Document & document,const DocumentModelExportFormat & modelExportBefore,const DocumentModelExportFormat & modelExportAfter)18 CmdSettingsExportFormat::CmdSettingsExportFormat(MainWindow &mainWindow,
19 Document &document,
20 const DocumentModelExportFormat &modelExportBefore,
21 const DocumentModelExportFormat &modelExportAfter) :
22 CmdAbstract(mainWindow,
23 document,
24 CMD_DESCRIPTION),
25 m_modelExportBefore (modelExportBefore),
26 m_modelExportAfter (modelExportAfter)
27 {
28 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsExportFormat::CmdSettingsExportFormat";
29 }
30
CmdSettingsExportFormat(MainWindow & mainWindow,Document & document,const QString & cmdDescription,QXmlStreamReader & reader)31 CmdSettingsExportFormat::CmdSettingsExportFormat (MainWindow &mainWindow,
32 Document &document,
33 const QString &cmdDescription,
34 QXmlStreamReader &reader) :
35 CmdAbstract (mainWindow,
36 document,
37 cmdDescription)
38 {
39 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsExportFormat::CmdSettingsExportFormat";
40
41 bool success = true;
42
43 // Read until end of this subtree
44 bool isBefore = true;
45 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
46 (reader.name() != DOCUMENT_SERIALIZE_CMD)){
47 loadNextFromReader(reader);
48 if (reader.atEnd()) {
49 xmlExitWithError (reader,
50 QString ("%1 %2")
51 .arg (QObject::tr ("Reached end of file before finding end element for"))
52 .arg (DOCUMENT_SERIALIZE_CMD));
53 success = false;
54 break;
55 }
56
57 if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
58 (reader.name() == DOCUMENT_SERIALIZE_EXPORT)) {
59
60 if (isBefore) {
61
62 m_modelExportBefore.loadXml (reader);
63 isBefore = false;
64
65 } else {
66
67 m_modelExportAfter.loadXml (reader);
68
69 }
70 }
71 }
72
73 if (!success) {
74 reader.raiseError ("Cannot read export format settings");
75 }
76 }
77
~CmdSettingsExportFormat()78 CmdSettingsExportFormat::~CmdSettingsExportFormat ()
79 {
80 }
81
cmdRedo()82 void CmdSettingsExportFormat::cmdRedo ()
83 {
84 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsExportFormat::cmdRedo";
85
86 saveOrCheckPreCommandDocumentStateHash (document ());
87 mainWindow().updateSettingsExportFormat(m_modelExportAfter);
88 mainWindow().updateAfterCommand();
89 saveOrCheckPostCommandDocumentStateHash (document ());
90 }
91
cmdUndo()92 void CmdSettingsExportFormat::cmdUndo ()
93 {
94 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsExportFormat::cmdUndo";
95
96 saveOrCheckPostCommandDocumentStateHash (document ());
97 mainWindow().updateSettingsExportFormat(m_modelExportBefore);
98 mainWindow().updateAfterCommand();
99 saveOrCheckPreCommandDocumentStateHash (document ());
100 }
101
saveXml(QXmlStreamWriter & writer) const102 void CmdSettingsExportFormat::saveXml (QXmlStreamWriter &writer) const
103 {
104 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
105 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_SETTINGS_EXPORT);
106 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
107 m_modelExportBefore.saveXml (writer);
108 m_modelExportAfter.saveXml(writer);
109 writer.writeEndElement();
110 }
111