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