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 "CmdSettingsColorFilter.h"
8 #include "Document.h"
9 #include "DocumentSerialize.h"
10 #include "Logger.h"
11 #include "MainWindow.h"
12 #include <QXmlStreamReader>
13 #include "Xml.h"
14
15 const QString CMD_DESCRIPTION ("Filter settings");
16
CmdSettingsColorFilter(MainWindow & mainWindow,Document & document,const DocumentModelColorFilter & modelColorFilterBefore,const DocumentModelColorFilter & modelColorFilterAfter)17 CmdSettingsColorFilter::CmdSettingsColorFilter(MainWindow &mainWindow,
18 Document &document,
19 const DocumentModelColorFilter &modelColorFilterBefore,
20 const DocumentModelColorFilter &modelColorFilterAfter) :
21 CmdAbstract(mainWindow,
22 document,
23 CMD_DESCRIPTION),
24 m_modelColorFilterBefore (modelColorFilterBefore),
25 m_modelColorFilterAfter (modelColorFilterAfter)
26 {
27 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsColorFilter::CmdSettingsColorFilter";
28 }
29
CmdSettingsColorFilter(MainWindow & mainWindow,Document & document,const QString & cmdDescription,QXmlStreamReader & reader)30 CmdSettingsColorFilter::CmdSettingsColorFilter (MainWindow &mainWindow,
31 Document &document,
32 const QString &cmdDescription,
33 QXmlStreamReader &reader) :
34 CmdAbstract (mainWindow,
35 document,
36 cmdDescription)
37 {
38 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsColorFilter::CmdSettingsColorFilter";
39
40 bool success = true;
41
42 // Read until end of this subtree
43 bool isBefore = true;
44 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
45 (reader.name() != DOCUMENT_SERIALIZE_CMD)){
46 loadNextFromReader(reader);
47 if (reader.atEnd()) {
48 xmlExitWithError (reader,
49 QString ("%1 %2")
50 .arg (QObject::tr ("Reached end of file before finding end element for"))
51 .arg (DOCUMENT_SERIALIZE_CMD));
52 success = false;
53 break;
54 }
55
56 if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
57 (reader.name() == DOCUMENT_SERIALIZE_FILTER)) {
58
59 if (isBefore) {
60
61 m_modelColorFilterBefore.loadXml (reader);
62 isBefore = false;
63
64 } else {
65
66 m_modelColorFilterAfter.loadXml (reader);
67
68 }
69 }
70 }
71
72 if (!success) {
73 reader.raiseError ("Cannot read color filter settings");
74 }
75 }
76
~CmdSettingsColorFilter()77 CmdSettingsColorFilter::~CmdSettingsColorFilter ()
78 {
79 }
80
cmdRedo()81 void CmdSettingsColorFilter::cmdRedo ()
82 {
83 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsColorFilter::cmdRedo";
84
85 saveOrCheckPreCommandDocumentStateHash (document ());
86 mainWindow().updateSettingsColorFilter(m_modelColorFilterAfter);
87 mainWindow().updateAfterCommand();
88 saveOrCheckPostCommandDocumentStateHash (document ());
89 }
90
cmdUndo()91 void CmdSettingsColorFilter::cmdUndo ()
92 {
93 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsColorFilter::cmdUndo";
94
95 saveOrCheckPostCommandDocumentStateHash (document ());
96 mainWindow().updateSettingsColorFilter(m_modelColorFilterBefore);
97 mainWindow().updateAfterCommand();
98 saveOrCheckPreCommandDocumentStateHash (document ());
99 }
100
saveXml(QXmlStreamWriter & writer) const101 void CmdSettingsColorFilter::saveXml (QXmlStreamWriter &writer) const
102 {
103 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
104 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_SETTINGS_COLOR_FILTER);
105 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
106 m_modelColorFilterBefore.saveXml (writer);
107 m_modelColorFilterAfter.saveXml(writer);
108 writer.writeEndElement();
109 }
110