Engauge Digitizer  2
CmdMediator.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 "CmdAbstract.h"
8 #include "CmdFactory.h"
9 #include "CmdMediator.h"
10 #include "Document.h"
11 #include "DocumentSerialize.h"
12 #include "EngaugeAssert.h"
13 #include "Logger.h"
14 #include "LoggerUpload.h"
15 #include "MainWindow.h"
16 #include "Point.h"
17 #include <QDomNode>
18 #include <QImage>
19 #include <QUndoCommand>
20 #include <QXmlStreamReader>
21 #include <QXmlStreamWriter>
22 #include "Transformation.h"
23 #include "Xml.h"
24 
26  const QImage &image) :
27  m_document (image)
28 {
29  LOG4CPP_INFO_S ((*mainCat)) << "CmdMediator::CmdMediator image=" << image.width() << "x" << image.height ();
30 
31  connectSignals(mainWindow);
32 }
33 
35  const QString &fileName) :
36  m_document (fileName)
37 {
38  LOG4CPP_INFO_S ((*mainCat)) << "CmdMediator::CmdMediator filename=" << fileName.toLatin1().data();
39 
40  connectSignals(mainWindow);
41 }
42 
44 {
45 }
46 
47 void CmdMediator::connectSignals (MainWindow &mainWindow)
48 {
49  connect (this, SIGNAL (cleanChanged (bool)), &mainWindow, SLOT (slotCleanChanged (bool)));
50 }
51 
53 {
54  return m_document.coordSystem();
55 }
56 
58 {
59  return m_document.curveAxes ();
60 }
61 
62 QStringList CmdMediator::curvesGraphsNames () const
63 {
64  return m_document.curvesGraphsNames();
65 }
66 
67 int CmdMediator::curvesGraphsNumPoints (const QString &curveName) const
68 {
69  return m_document.curvesGraphsNumPoints(curveName);
70 }
71 
73 {
74  return m_document;
75 }
76 
78 {
79  return m_document;
80 }
81 
83 {
84  return !isClean();
85 }
86 
87 void CmdMediator::iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback)
88 {
89  m_document.iterateThroughCurvePointsAxes (ftorWithCallback);
90 }
91 
92 void CmdMediator::iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const
93 {
94  m_document.iterateThroughCurvePointsAxes (ftorWithCallback);
95 }
96 
97 void CmdMediator::iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback)
98 {
99  return m_document.iterateThroughCurvesPointsGraphs (ftorWithCallback);
100 }
101 
102 QPixmap CmdMediator::pixmap () const
103 {
104  ENGAUGE_ASSERT (m_document.successfulRead ());
105 
106  return m_document.pixmap ();
107 }
108 
110 {
111  return m_document.reasonForUnsuccessfulRead ();
112 }
113 
114 void CmdMediator::saveXml(QXmlStreamWriter &writer) const
115 {
116  writer.writeStartElement(DOCUMENT_SERIALIZE_CMD_MEDIATOR);
117 
118  for (int i = 0; i < index(); i++) {
119 
120  const CmdAbstract *cmd = dynamic_cast<const CmdAbstract *>(command(i));
121  cmd->saveXml (writer);
122  }
123 
124  writer.writeEndElement();
125 }
126 
128 {
129  return m_document.selectedCurveName ();
130 }
131 
132 void CmdMediator::setDocumentAxesPointsRequired (DocumentAxesPointsRequired documentAxesPointsRequired)
133 {
134  m_document.setDocumentAxesPointsRequired (documentAxesPointsRequired);
135 }
136 
138 {
139  m_document.setSelectedCurveName (selectedCurveName);
140 }
141 
143 {
144  return m_document.successfulRead();
145 }
const Curve & curveAxes() const
See Document::curveAxes.
Definition: CmdMediator.cpp:57
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:353
const CoordSystem & coordSystem() const
Currently active CoordSystem.
Definition: Document.cpp:297
void setSelectedCurveName(const QString &selectedCurveName)
Save curve name that is selected for the current coordinate system, for the next time the coordinate ...
Wrapper around QUndoCommand. This simplifies the more complicated feature set of QUndoCommand.
Definition: CmdAbstract.h:19
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:1055
QString reasonForUnsuccessfulRead() const
See Document::reasonForUnsuccessfulRead.
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:42
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: Document.cpp:443
QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow...
bool successfulRead() const
Wrapper for Document::successfulRead.
QPixmap pixmap() const
See Document::pixmap.
void setDocumentAxesPointsRequired(DocumentAxesPointsRequired documentAxesPointsRequired)
Set the number of axes points required.
Document & document()
Provide the Document to commands, primarily for undo/redo processing.
Definition: CmdMediator.cpp:72
~CmdMediator()
Destructor.
Definition: CmdMediator.cpp:43
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
Container for one set of digitized Points.
Definition: Curve.h:33
QString reasonForUnsuccessfulRead() const
Return an informative text message explaining why startup loading failed. Applies if successfulRead r...
Definition: Document.cpp:850
void setDocumentAxesPointsRequired(DocumentAxesPointsRequired documentAxesPointsRequired)
Set the number of axes points required.
Definition: Document.cpp:933
void saveXml(QXmlStreamWriter &writer) const
Serialize to xml.
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: CmdMediator.cpp:67
void iterateThroughCurvesPointsGraphs(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for all the graphs curves.
Definition: Document.cpp:466
virtual void saveXml(QXmlStreamWriter &writer) const =0
Save commands as xml for later uploading.
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:811
void iterateThroughCurvesPointsGraphs(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for all the graphs curves.
Definition: CmdMediator.cpp:97
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the single axes curve.
Definition: CmdMediator.cpp:87
bool isModified() const
Dirty flag.
Definition: CmdMediator.cpp:82
const CoordSystem & coordSystem() const
Provide the current CoordSystem to commands with read-only access, primarily for undo/redo processing...
Definition: CmdMediator.cpp:52
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:318
CmdMediator(MainWindow &mainWindow, const QImage &image)
Constructor for imported images and dragged images. Only one coordinate system is created but others ...
Definition: CmdMediator.cpp:25
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: Document.cpp:346
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:89
QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow...
Definition: Document.cpp:907
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: CmdMediator.cpp:62
void setSelectedCurveName(const QString &selectedCurveName)
Save curve name that is selected for the current coordinate system, for the next time the coordinate ...
Definition: Document.cpp:1050