Engauge Digitizer  2
CmdSettingsAxesChecker.cpp
Go to the documentation of this file.
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 
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 ("Axes checker settings");
16 
18  Document &document,
19  const DocumentModelAxesChecker &modelAxesCheckerBefore,
20  const DocumentModelAxesChecker &modelAxesCheckerAfter) :
21  CmdAbstract(mainWindow,
22  document,
24  m_modelAxesCheckerBefore (modelAxesCheckerBefore),
25  m_modelAxesCheckerAfter (modelAxesCheckerAfter)
26 {
27  LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsAxesChecker::CmdSettingsAxesChecker";
28 }
29 
31  Document &document,
32  const QString &cmdDescription,
33  QXmlStreamReader &reader) :
34  CmdAbstract (mainWindow,
35  document,
36  cmdDescription)
37 {
38  LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsAxesChecker::CmdSettingsAxesChecker";
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_AXES_CHECKER)) {
58 
59  if (isBefore) {
60 
61  m_modelAxesCheckerBefore.loadXml (reader);
62  isBefore = false;
63 
64  } else {
65 
66  m_modelAxesCheckerAfter.loadXml (reader);
67 
68  }
69  }
70  }
71 
72  if (!success) {
73  reader.raiseError ("Cannot read axes checker settings");
74  }
75 }
76 
78 {
79 }
80 
82 {
83  LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsAxesChecker::cmdRedo";
84 
86  mainWindow().updateSettingsAxesChecker(m_modelAxesCheckerAfter);
89 }
90 
92 {
93  LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsAxesChecker::cmdUndo";
94 
96  mainWindow().updateSettingsAxesChecker(m_modelAxesCheckerBefore);
99 }
100 
101 void CmdSettingsAxesChecker::saveXml (QXmlStreamWriter &writer) const
102 {
103  writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
105  writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
106  m_modelAxesCheckerBefore.saveXml(writer);
107  m_modelAxesCheckerAfter.saveXml(writer);
108  writer.writeEndElement();
109 }
virtual void cmdRedo()
Redo method that is called when QUndoStack is moved one command forward.
QXmlStreamReader::TokenType loadNextFromReader(QXmlStreamReader &reader)
Load next token from xml reader.
Definition: Xml.cpp:14
virtual void cmdUndo()
Undo method that is called when QUndoStack is moved one command backward.
const QString DOCUMENT_SERIALIZE_AXES_CHECKER
Wrapper around QUndoCommand. This simplifies the more complicated feature set of QUndoCommand.
Definition: CmdAbstract.h:19
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
const QString CMD_DESCRIPTION("Axes checker settings")
const QString DOCUMENT_SERIALIZE_CMD_SETTINGS_AXES_CHECKER
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
void saveOrCheckPostCommandDocumentStateHash(const Document &document)
Save, when called the first time, a hash value representing the state of the Document.
const QString DOCUMENT_SERIALIZE_CMD_TYPE
void saveOrCheckPreCommandDocumentStateHash(const Document &document)
Save, when called the first time, a hash value representing the state of the Document.
const QString DOCUMENT_SERIALIZE_CMD_DESCRIPTION
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
MainWindow & mainWindow()
Return the MainWindow so it can be updated by this command as a last step.
Definition: CmdAbstract.cpp:45
virtual void saveXml(QXmlStreamWriter &writer) const
Save commands as xml for later uploading.
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
void updateSettingsAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Update with new axes indicator properties.
CmdSettingsAxesChecker(MainWindow &mainWindow, Document &document, const DocumentModelAxesChecker &modelAxesCheckerBefore, const DocumentModelAxesChecker &modelAxesCheckerAfter)
Constructor for normal creation.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
log4cpp::Category * mainCat
Definition: Logger.cpp:14
void xmlExitWithError(QXmlStreamReader &reader, const QString &message)
Show specified message for an error while reading xml, then quit.
Definition: Xml.cpp:25
Document & document()
Return the Document that this command will modify during redo and undo.
Definition: CmdAbstract.cpp:35
const QString DOCUMENT_SERIALIZE_CMD
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:91