Engauge Digitizer  2
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 "DocumentModelGridDisplay.h"
22 #include "DocumentModelGridRemoval.h"
23 #include "DocumentModelPointMatch.h"
24 #include "DocumentModelSegments.h"
25 #include "PointStyle.h"
26 #include <QList>
27 #include <QPixmap>
28 #include <QString>
29 #include <QXmlStreamReader>
30 
31 class CoordSystem;
32 class Curve;
33 class QByteArray;
34 class QFile;
35 class QImage;
36 class QTransform;
37 class QXmlStreamWriter;
38 class Transformation;
39 
41 class Document
42 {
43 public:
45  Document (const QImage &image);
46 
48  Document (const QString &fileName);
49 
52  void addCoordSystems(unsigned int numberCoordSystemToAdd);
53 
55  void addGraphCurveAtEnd (const QString &curveName);
56 
63  void addPointAxisWithGeneratedIdentifier (const QPointF &posScreen,
64  const QPointF &posGraph,
65  QString &identifier,
66  double ordinal,
67  bool isXOnly);
68 
75  void addPointAxisWithSpecifiedIdentifier (const QPointF &posScreen,
76  const QPointF &posGraph,
77  const QString &identifier,
78  double ordinal,
79  bool isXOnly);
80 
82  void addPointGraphWithGeneratedIdentifier (const QString &curveName,
83  const QPointF &posScreen,
84  QString &generatedIentifier,
85  double ordinal);
86 
88  void addPointGraphWithSpecifiedIdentifier (const QString &curveName,
89  const QPointF &posScreen,
90  const QString &identifier,
91  double ordinal);
92 
95 
104  void addScaleWithGeneratedIdentifier (const QPointF &posScreen0,
105  const QPointF &posScreen1,
106  double scaleLength,
107  QString &identifier0,
108  QString &identifier1,
109  double ordinal0,
110  double ordinal1);
111 
113  void checkAddPointAxis (const QPointF &posScreen,
114  const QPointF &posGraph,
115  bool &isError,
116  QString &errorMessage,
117  bool isXOnly);
118 
120  void checkEditPointAxis (const QString &pointIdentifier,
121  const QPointF &posScreen,
122  const QPointF &posGraph,
123  bool &isError,
124  QString &errorMessage);
125 
127  const CoordSystem &coordSystem() const;
128 
130  unsigned int coordSystemCount() const;
131 
133  CoordSystemIndex coordSystemIndex() const;
134 
136  const Curve &curveAxes () const;
137 
139  const Curve *curveForCurveName (const QString &curveName) const;
140 
142  const CurvesGraphs &curvesGraphs () const;
143 
145  QStringList curvesGraphsNames () const;
146 
148  int curvesGraphsNumPoints (const QString &curveName) const;
149 
151  DocumentAxesPointsRequired documentAxesPointsRequired () const;
152 
154  void editPointAxis (const QPointF &posGraph,
155  const QString &identifier);
156 
158  void editPointGraph (bool isX,
159  bool isY,
160  double x,
161  double y,
162  const QStringList &identifiers,
163  const Transformation &transformation);
164 
166  void initializeGridDisplay (const Transformation &transformation);
167 
169  bool isXOnly (const QString &pointIdentifier) const;
170 
172  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
173 
175  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
176 
178  void iterateThroughCurveSegments (const QString &curveName,
179  const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
180 
182  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
183 
185  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
186 
188  bool loadCurvesFile (const QString &curvesFile);
189 
192 
195 
198 
201 
204 
207 
210 
213 
216 
219 
222 
224  void movePoint (const QString &pointIdentifier,
225  const QPointF &deltaScreen);
226 
228  int nextOrdinalForCurve (const QString &curveName) const;
229 
231  QPixmap pixmap () const;
232 
234  QPointF positionGraph (const QString &pointIdentifier) const;
235 
237  QPointF positionScreen (const QString &pointIdentifier) const;
238 
240  void print () const;
241 
243  void printStream (QString indentation,
244  QTextStream &str) const;
245 
247  QString reasonForUnsuccessfulRead () const;
248 
250  void removePointAxis (const QString &identifier);
251 
253  void removePointGraph (const QString &identifier);
254 
256  void removePointsInCurvesGraphs (CurvesGraphs &curvesGraphs);
257 
259  void saveXml (QXmlStreamWriter &writer) const;
260 
262  QString selectedCurveName () const;
263 
265  void setCoordSystemIndex(CoordSystemIndex coordSystemIndex);
266 
268  void setCurveAxes (const Curve &curveAxes);
269 
271  void setCurvesGraphs (const CurvesGraphs &curvesGraphs);
272 
275  void setDocumentAxesPointsRequired (DocumentAxesPointsRequired documentAxesPointsRequired);
276 
278  void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
279 
281  void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter);
282 
284  void setModelCoords (const DocumentModelCoords &modelCoords);
285 
287  void setModelCurveStyles(const CurveStyles &modelCurveStyles);
288 
290  void setModelDigitizeCurve (const DocumentModelDigitizeCurve &modelDigitizeCurve);
291 
293  void setModelExport(const DocumentModelExportFormat &modelExport);
294 
296  void setModelGeneral (const DocumentModelGeneral &modelGeneral);
297 
299  void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay);
300 
302  void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
303 
305  void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch);
306 
308  void setModelSegments(const DocumentModelSegments &modelSegments);
309 
311  void setPixmap (const QImage &image);
312 
314  void setSelectedCurveName (const QString &selectedCurveName);
315 
317  bool successfulRead () const;
318 
321  void updatePointOrdinals (const Transformation &transformation);
322 
323 private:
324  Document ();
325 
326  bool bytesIndicatePreVersion6 (const QByteArray &bytes) const;
327  Curve *curveForCurveName (const QString &curveName); // For use by Document only. External classes should use functors
328  void generateEmptyPixmap(const QXmlStreamAttributes &attributes);
329  void loadImage(QXmlStreamReader &reader);
330  void loadPreVersion6 (QDataStream &str);
331  void loadVersion6 (QFile *file);
332  void loadVersions7AndUp (QFile *file);
333  void overrideGraphDefaultsWithMapDefaults ();
334  int versionFromFile (QFile *file) const;
335 
336  // Metadata
337  QString m_name;
338  QPixmap m_pixmap;
339 
340  // Number of axes points used is set during creation/import
341  DocumentAxesPointsRequired m_documentAxesPointsRequired;
342 
343  // Read variables
344  bool m_successfulRead;
345  QString m_reasonForUnsuccessfulRead;
346 
347  CoordSystemContext m_coordSystemContext;
348 };
349 
350 #endif // DOCUMENT_H
void addCoordSystems(unsigned int numberCoordSystemToAdd)
Add some number (0 or more) of additional coordinate systems.
Definition: Document.cpp:149
void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: Document.cpp:158
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:825
Model for DlgSettingsGeneral and CmdSettingsGeneral.
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
Definition: Document.cpp:361
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:756
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:840
unsigned int coordSystemCount() const
Number of CoordSystem.
Definition: Document.cpp:305
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
bool isXOnly(const QString &pointIdentifier) const
See Curve::isXOnly.
Definition: Document.cpp:439
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:686
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: Document.cpp:949
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:1026
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:195
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:742
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: Document.cpp:1033
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: Document.cpp:861
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
Definition: Document.cpp:1012
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:22
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:1040
const CoordSystem & coordSystem() const
Currently active CoordSystem.
Definition: Document.cpp:298
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:42
void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Set method for DocumentModelGridDisplay.
Definition: Document.cpp:1019
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:208
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: Document.cpp:444
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:319
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:693
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:998
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:354
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:815
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:1059
void addScaleWithGeneratedIdentifier(const QPointF &posScreen0, const QPointF &posScreen1, double scaleLength, QString &identifier0, QString &identifier1, double ordinal0, double ordinal1)
Add scale with a generated point identifier.
Definition: Document.cpp:228
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:974
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:268
void setPixmap(const QImage &image)
Set method for the background pixmap.
Definition: Document.cpp:1047
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
Definition: Document.cpp:283
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Set the index of current active CoordSystem.
Definition: Document.cpp:916
void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: Document.cpp:868
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
Definition: Document.cpp:312
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:1005
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:366
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:981
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:700
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:180
void setCurveAxes(const Curve &curveAxes)
Let CmdAbstract classes overwrite axes Curve.
Definition: Document.cpp:923
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:679
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:875
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:707
QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow...
Definition: Document.cpp:911
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:956
Model for DlgSettingsCoords and CmdSettingsCoords.
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:820
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
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: Document.cpp:347
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:830
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:165
void setDocumentAxesPointsRequired(DocumentAxesPointsRequired documentAxesPointsRequired)
Set the number of axes points required.
Definition: Document.cpp:937
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:458
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:763
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:340
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:333
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:749
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:467
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
Definition: Document.cpp:930
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:221
void editPointGraph(bool isX, bool isY, double x, double y, const QStringList &identifiers, const Transformation &transformation)
Edit the graph coordinates of one or more graph points.
Definition: Document.cpp:375
This class plays the role of context class in a state machine, although the &#39;states&#39; are actually dif...
void initializeGridDisplay(const Transformation &transformation)
Initialize grid display. This is called immediately after the transformation has been defined for the...
Definition: Document.cpp:409
DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition: Document.cpp:728
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
Definition: Document.cpp:882
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:854
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:735
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:1064
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:714
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:1054
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: Document.cpp:721