Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
Document.h
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 #ifndef DOCUMENT_H
8 #define DOCUMENT_H
9 
10 #include "CoordSystemContext.h"
11 #include "CoordSystemIndex.h"
12 #include "CurvesGraphs.h"
13 #include "CurveStyles.h"
14 #include "DocumentAxesPointsRequired.h"
15 #include "DocumentModelAxesChecker.h"
16 #include "DocumentModelColorFilter.h"
17 #include "DocumentModelCoords.h"
18 #include "DocumentModelDigitizeCurve.h"
19 #include "DocumentModelExportFormat.h"
20 #include "DocumentModelGeneral.h"
21 #include "DocumentModelGridRemoval.h"
22 #include "DocumentModelPointMatch.h"
23 #include "DocumentModelSegments.h"
24 #include "PointStyle.h"
25 #include <QList>
26 #include <QPixmap>
27 #include <QString>
28 #include <QXmlStreamReader>
29 
30 class CoordSystem;
31 class Curve;
32 class QByteArray;
33 class QFile;
34 class QImage;
35 class QTransform;
36 class QXmlStreamWriter;
37 class Transformation;
38 
40 class Document
41 {
42 public:
44  Document (const QImage &image);
45 
47  Document (const QString &fileName);
48 
51  void addCoordSystems(unsigned int numberCoordSystemToAdd);
52 
54  void addGraphCurveAtEnd (const QString &curveName);
55 
62  void addPointAxisWithGeneratedIdentifier (const QPointF &posScreen,
63  const QPointF &posGraph,
64  QString &identifier,
65  double ordinal,
66  bool isXOnly);
67 
74  void addPointAxisWithSpecifiedIdentifier (const QPointF &posScreen,
75  const QPointF &posGraph,
76  const QString &identifier,
77  double ordinal,
78  bool isXOnly);
79 
81  void addPointGraphWithGeneratedIdentifier (const QString &curveName,
82  const QPointF &posScreen,
83  QString &generatedIentifier,
84  double ordinal);
85 
87  void addPointGraphWithSpecifiedIdentifier (const QString &curveName,
88  const QPointF &posScreen,
89  const QString &identifier,
90  double ordinal);
91 
94 
96  void checkAddPointAxis (const QPointF &posScreen,
97  const QPointF &posGraph,
98  bool &isError,
99  QString &errorMessage,
100  bool isXOnly);
101 
103  void checkEditPointAxis (const QString &pointIdentifier,
104  const QPointF &posScreen,
105  const QPointF &posGraph,
106  bool &isError,
107  QString &errorMessage);
108 
110  const CoordSystem &coordSystem() const;
111 
113  unsigned int coordSystemCount() const;
114 
116  CoordSystemIndex coordSystemIndex() const;
117 
119  const Curve &curveAxes () const;
120 
122  const Curve *curveForCurveName (const QString &curveName) const;
123 
125  const CurvesGraphs &curvesGraphs () const;
126 
128  QStringList curvesGraphsNames () const;
129 
131  int curvesGraphsNumPoints (const QString &curveName) const;
132 
134  DocumentAxesPointsRequired documentAxesPointsRequired () const;
135 
137  void editPointAxis (const QPointF &posGraph,
138  const QString &identifier);
139 
141  bool isXOnly (const QString &pointIdentifier) const;
142 
144  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
145 
147  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
148 
150  void iterateThroughCurveSegments (const QString &curveName,
151  const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
152 
154  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
155 
157  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
158 
160  bool loadCurvesFile (const QString &curvesFile);
161 
164 
167 
170 
173 
176 
179 
182 
185 
188 
191 
193  void movePoint (const QString &pointIdentifier,
194  const QPointF &deltaScreen);
195 
197  int nextOrdinalForCurve (const QString &curveName) const;
198 
200  QPixmap pixmap () const;
201 
203  QPointF positionGraph (const QString &pointIdentifier) const;
204 
206  QPointF positionScreen (const QString &pointIdentifier) const;
207 
209  void print () const;
210 
212  void printStream (QString indentation,
213  QTextStream &str) const;
214 
216  QString reasonForUnsuccessfulRead () const;
217 
219  void removePointAxis (const QString &identifier);
220 
222  void removePointGraph (const QString &identifier);
223 
225  void removePointsInCurvesGraphs (CurvesGraphs &curvesGraphs);
226 
228  void saveXml (QXmlStreamWriter &writer) const;
229 
231  void setCoordSystemIndex(CoordSystemIndex coordSystemIndex);
232 
234  void setCurvesGraphs (const CurvesGraphs &curvesGraphs);
235 
237  void setCurvesGraphs (CoordSystemIndex coordSystemIndex,
238  const CurvesGraphs &curvesGraphs);
239 
242  void setDocumentAxesPointsRequired (DocumentAxesPointsRequired documentAxesPointsRequired);
243 
245  void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
246 
248  void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter);
249 
251  void setModelCoords (const DocumentModelCoords &modelCoords);
252 
254  void setModelCurveStyles(const CurveStyles &modelCurveStyles);
255 
257  void setModelDigitizeCurve (const DocumentModelDigitizeCurve &modelDigitizeCurve);
258 
260  void setModelExport(const DocumentModelExportFormat &modelExport);
261 
263  void setModelGeneral (const DocumentModelGeneral &modelGeneral);
264 
266  void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
267 
269  void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch);
270 
272  void setModelSegments(const DocumentModelSegments &modelSegments);
273 
275  bool successfulRead () const;
276 
279  void updatePointOrdinals (const Transformation &transformation);
280 
281 private:
282  Document ();
283 
284  bool bytesIndicatePreVersion6 (const QByteArray &bytes) const;
285  Curve *curveForCurveName (const QString &curveName); // For use by Document only. External classes should use functors
286  void generateEmptyPixmap(const QXmlStreamAttributes &attributes);
287  void loadImage(QXmlStreamReader &reader);
288  void loadPreVersion6 (QDataStream &str);
289  void loadVersion6 (QFile *file);
290  void loadVersion7 (QFile *file);
291  int versionFromFile (QFile *file) const;
292 
293  // Metadata
294  QString m_name;
295  QPixmap m_pixmap;
296 
297  // Number of axes points used is set during creation/import
298  DocumentAxesPointsRequired m_documentAxesPointsRequired;
299 
300  // Read variables
301  bool m_successfulRead;
302  QString m_reasonForUnsuccessfulRead;
303 
304  CoordSystemContext m_coordSystemContext;
305 };
306 
307 #endif // DOCUMENT_H
void addCoordSystems(unsigned int numberCoordSystemToAdd)
Add some number (0 or more) of additional coordinate systems.
Definition: Document.cpp:138
void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: Document.cpp:147
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:691
Model for DlgSettingsGeneral and CmdSettingsGeneral.
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
Definition: Document.cpp:326
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:667
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
Definition: Document.cpp:706
unsigned int coordSystemCount() const
Number of CoordSystem.
Definition: Document.cpp:270
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
bool isXOnly(const QString &pointIdentifier) const
See Curve::isXOnly.
Definition: Document.cpp:357
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:604
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: Document.cpp:807
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:877
void addPointGraphWithGeneratedIdentifier(const QString &curveName, const QPointF &posScreen, QString &generatedIentifier, double ordinal)
Add a single graph point with a generated point identifier.
Definition: Document.cpp:184
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:653
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: Document.cpp:884
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: Document.cpp:727
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
Definition: Document.cpp:870
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:22
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:891
const CoordSystem & coordSystem() const
Currently active CoordSystem.
Definition: Document.cpp:263
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:40
void addPointGraphWithSpecifiedIdentifier(const QString &curveName, const QPointF &posScreen, const QString &identifier, double ordinal)
Add a single graph point with the specified point identifer. Note that PointStyle is not applied to t...
Definition: Document.cpp:197
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: Document.cpp:362
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:284
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:611
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:856
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:319
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:681
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:898
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:832
bool loadCurvesFile(const QString &curvesFile)
Load the curve names in the specified Engauge file into the current document. This is called near the...
void checkAddPointAxis(const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage, bool isXOnly)
Check before calling addPointAxis. Also returns the next available ordinal number (to prevent clashes...
Definition: Document.cpp:233
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
Definition: Document.cpp:248
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Set the index of current active CoordSystem.
Definition: Document.cpp:777
void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: Document.cpp:734
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
Definition: Document.cpp:277
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:863
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
void editPointAxis(const QPointF &posGraph, const QString &identifier)
Edit the graph coordinates of a single axis point. Call this after checkAddPointAxis to guarantee suc...
Definition: Document.cpp:331
Affine transformation between screen and graph coordinates, based on digitized axis points...
Container for all graph curves. The axes point curve is external to this class.
Definition: CurvesGraphs.h:24
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
void setModelCurveStyles(const CurveStyles &modelCurveStyles)
Set method for CurveStyles.
Definition: Document.cpp:839
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:618
void addPointAxisWithSpecifiedIdentifier(const QPointF &posScreen, const QPointF &posGraph, const QString &identifier, double ordinal, bool isXOnly)
Add a single axis point with the specified point identifier.
Definition: Document.cpp:169
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:597
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:741
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:625
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:814
Model for DlgSettingsCoords and CmdSettingsCoords.
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:686
Storage of one imported image and the data attached to that image.
Definition: Document.h:40
Container for one set of digitized Points.
Definition: Curve.h:32
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: Document.cpp:312
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:696
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
void addPointAxisWithGeneratedIdentifier(const QPointF &posScreen, const QPointF &posGraph, QString &identifier, double ordinal, bool isXOnly)
Add a single axis point with a generated point identifier.
Definition: Document.cpp:154
void setDocumentAxesPointsRequired(DocumentAxesPointsRequired documentAxesPointsRequired)
Set the number of axes points required.
Definition: Document.cpp:800
void iterateThroughCurveSegments(const QString &curveName, const Functor2wRet< const Point &, const Point &, CallbackSearchReturn > &ftorWithCallback) const
See Curve::iterateThroughCurveSegments, for any axes or graph curve.
Definition: Document.cpp:376
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:674
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:305
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:298
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:660
Model for DlgSettingsSegments and CmdSettingsSegments.
void iterateThroughCurvesPointsGraphs(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for all the graphs curves.
Definition: Document.cpp:385
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
Definition: Document.cpp:784
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:210
This class plays the role of context class in a state machine, although the &#39;states&#39; are actually dif...
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
Definition: Document.cpp:748
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
QString reasonForUnsuccessfulRead() const
Return an informative text message explaining why startup loading failed. Applies if successfulRead r...
Definition: Document.cpp:720
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:646
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:903
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:632
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: Document.cpp:639