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