Engauge Digitizer  2
CmdSettingsCurveProperties.cpp
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 "CmdSettingsCurveProperties.h"
8 #include "Document.h"
9 #include "DocumentSerialize.h"
10 #include "Logger.h"
11 #include "MainWindow.h"
12 #include <QDebug>
13 #include <QXmlStreamReader>
14 #include "Xml.h"
15 
16 const QString CMD_DESCRIPTION ("Curve Properties settings");
17 
19  Document &document,
20  const CurveStyles &modelCurveStylesBefore,
21  const CurveStyles &modelCurveStylesAfter) :
22  CmdAbstract(mainWindow,
23  document,
24  CMD_DESCRIPTION),
25  m_modelCurveStylesBefore (modelCurveStylesBefore),
26  m_modelCurveStylesAfter (modelCurveStylesAfter)
27 {
28  LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsCurveProperties::CmdSettingsCurveProperties";
29 }
30 
33  const QString &cmdDescription,
34  QXmlStreamReader &reader) :
35  CmdAbstract (mainWindow,
36  document,
37  cmdDescription)
38 {
39  LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsCurveProperties::CmdSettingsCurveProperties";
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_CURVE_STYLES)) {
59 
60  if (isBefore) {
61 
62  m_modelCurveStylesBefore.loadXml (reader);
63  isBefore = false;
64 
65  } else {
66 
67  m_modelCurveStylesAfter.loadXml (reader);
68 
69  }
70  }
71  }
72 
73  if (!success) {
74  reader.raiseError ("Cannot read curve properties settings");
75  }
76 }
77 
78 CmdSettingsCurveProperties::~CmdSettingsCurveProperties ()
79 {
80 }
81 
83 {
84  LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsCurveProperties::cmdRedo";
85 
87  document().updatePointOrdinals (mainWindow().transformation());
88  mainWindow().updateSettingsCurveStyles(m_modelCurveStylesAfter);
91 }
92 
94 {
95  LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsCurveProperties::cmdUndo";
96 
98  document().updatePointOrdinals (mainWindow().transformation());
99  mainWindow().updateSettingsCurveStyles(m_modelCurveStylesBefore);
102 }
103 
104 void CmdSettingsCurveProperties::saveXml (QXmlStreamWriter &writer) const
105 {
106  writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
107  writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_SETTINGS_CURVE_PROPERTIES);
108  writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
109  m_modelCurveStylesBefore.saveXml(writer);
110  m_modelCurveStylesAfter.saveXml(writer);
111  writer.writeEndElement();
112 }
virtual void saveXml(QXmlStreamWriter &writer) const
Save commands as xml for later uploading.
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:22
Wrapper around QUndoCommand. This simplifies the more complicated feature set of QUndoCommand.
Definition: CmdAbstract.h:19
void loadXml(QXmlStreamReader &reader)
Load from serialized xml.
void saveXml(QXmlStreamWriter &writer) const
Serialize to xml.
virtual void cmdUndo()
Undo method that is called when QUndoStack is moved one command backward.
void saveOrCheckPostCommandDocumentStateHash(const Document &document)
Save, when called the first time, a hash value representing the state of the Document.
void saveOrCheckPreCommandDocumentStateHash(const Document &document)
Save, when called the first time, a hash value representing the state of the Document.
void updateSettingsCurveStyles(const CurveStyles &modelCurveStyles)
Update with new curve styles.
MainWindow & mainWindow()
Return the MainWindow so it can be updated by this command as a last step.
Definition: CmdAbstract.cpp:45
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
virtual void cmdRedo()
Redo method that is called when QUndoStack is moved one command forward.
CmdSettingsCurveProperties(MainWindow &mainWindow, Document &document, const CurveStyles &modelCurveStylesBefore, const CurveStyles &modelCurveStylesAfter)
Constructor for normal creation.
Document & document()
Return the Document that this command will modify during redo and undo.
Definition: CmdAbstract.cpp:35
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:89
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:1060