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 
97  void checkAddPointAxis (const QPointF &posScreen,
98  const QPointF &posGraph,
99  bool &isError,
100  QString &errorMessage,
101  bool isXOnly);
102 
104  void checkEditPointAxis (const QString &pointIdentifier,
105  const QPointF &posScreen,
106  const QPointF &posGraph,
107  bool &isError,
108  QString &errorMessage);
109 
111  const CoordSystem &coordSystem() const;
112 
114  unsigned int coordSystemCount() const;
115 
117  CoordSystemIndex coordSystemIndex() const;
118 
120  const Curve &curveAxes () const;
121 
123  const Curve *curveForCurveName (const QString &curveName) const;
124 
126  const CurvesGraphs &curvesGraphs () const;
127 
129  QStringList curvesGraphsNames () const;
130 
132  int curvesGraphsNumPoints (const QString &curveName) const;
133 
135  DocumentAxesPointsRequired documentAxesPointsRequired () const;
136 
138  void editPointAxis (const QPointF &posGraph,
139  const QString &identifier);
140 
142  void editPointGraph (bool isX,
143  bool isY,
144  double x,
145  double y,
146  const QStringList &identifiers,
147  const Transformation &transformation);
148 
150  void initializeGridDisplay (const Transformation &transformation);
151 
153  bool isXOnly (const QString &pointIdentifier) const;
154 
156  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
157 
159  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
160 
162  void iterateThroughCurveSegments (const QString &curveName,
163  const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
164 
166  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
167 
169  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
170 
172  bool loadCurvesFile (const QString &curvesFile);
173 
176 
179 
182 
185 
188 
191 
194 
197 
200 
203 
206 
208  void movePoint (const QString &pointIdentifier,
209  const QPointF &deltaScreen);
210 
212  int nextOrdinalForCurve (const QString &curveName) const;
213 
215  QPixmap pixmap () const;
216 
218  QPointF positionGraph (const QString &pointIdentifier) const;
219 
221  QPointF positionScreen (const QString &pointIdentifier) const;
222 
224  void print () const;
225 
227  void printStream (QString indentation,
228  QTextStream &str) const;
229 
231  QString reasonForUnsuccessfulRead () const;
232 
234  void removePointAxis (const QString &identifier);
235 
237  void removePointGraph (const QString &identifier);
238 
240  void removePointsInCurvesGraphs (CurvesGraphs &curvesGraphs);
241 
243  void saveXml (QXmlStreamWriter &writer) const;
244 
246  QString selectedCurveName () const;
247 
249  void setCoordSystemIndex(CoordSystemIndex coordSystemIndex);
250 
252  void setCurveAxes (const Curve &curveAxes);
253 
255  void setCurvesGraphs (const CurvesGraphs &curvesGraphs);
256 
259  void setDocumentAxesPointsRequired (DocumentAxesPointsRequired documentAxesPointsRequired);
260 
262  void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
263 
265  void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter);
266 
268  void setModelCoords (const DocumentModelCoords &modelCoords);
269 
271  void setModelCurveStyles(const CurveStyles &modelCurveStyles);
272 
274  void setModelDigitizeCurve (const DocumentModelDigitizeCurve &modelDigitizeCurve);
275 
277  void setModelExport(const DocumentModelExportFormat &modelExport);
278 
280  void setModelGeneral (const DocumentModelGeneral &modelGeneral);
281 
283  void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay);
284 
286  void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
287 
289  void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch);
290 
292  void setModelSegments(const DocumentModelSegments &modelSegments);
293 
295  void setPixmap (const QImage &image);
296 
298  void setSelectedCurveName (const QString &selectedCurveName);
299 
301  bool successfulRead () const;
302 
305  void updatePointOrdinals (const Transformation &transformation);
306 
307 private:
308  Document ();
309 
310  bool bytesIndicatePreVersion6 (const QByteArray &bytes) const;
311  Curve *curveForCurveName (const QString &curveName); // For use by Document only. External classes should use functors
312  void generateEmptyPixmap(const QXmlStreamAttributes &attributes);
313  void loadImage(QXmlStreamReader &reader);
314  void loadPreVersion6 (QDataStream &str);
315  void loadVersion6 (QFile *file);
316  void loadVersions7AndUp (QFile *file);
317  int versionFromFile (QFile *file) const;
318 
319  // Metadata
320  QString m_name;
321  QPixmap m_pixmap;
322 
323  // Number of axes points used is set during creation/import
324  DocumentAxesPointsRequired m_documentAxesPointsRequired;
325 
326  // Read variables
327  bool m_successfulRead;
328  QString m_reasonForUnsuccessfulRead;
329 
330  CoordSystemContext m_coordSystemContext;
331 };
332 
333 #endif // DOCUMENT_H
void addCoordSystems(unsigned int numberCoordSystemToAdd)
Add some number (0 or more) of additional coordinate systems.
Definition: Document.cpp:145
void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: Document.cpp:154
Model for DlgSettingsGeneral and CmdSettingsGeneral.
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:326
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:728
const CoordSystem & coordSystem() const
Currently active CoordSystem.
Definition: Document.cpp:270
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: Document.cpp:871
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:948
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:191
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: Document.cpp:955
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: Document.cpp:788
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
Definition: Document.cpp:934
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:22
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:707
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:962
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:735
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:981
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:42
void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Set method for DocumentModelGridDisplay.
Definition: Document.cpp:941
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:204
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: Document.cpp:416
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:305
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: Document.cpp:693
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
Definition: Document.cpp:333
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:658
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:920
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:896
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:714
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:240
void setPixmap(const QImage &image)
Set method for the background pixmap.
Definition: Document.cpp:969
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
Definition: Document.cpp:255
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Set the index of current active CoordSystem.
Definition: Document.cpp:843
void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: Document.cpp:795
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:927
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:679
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:338
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:903
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:176
void setCurveAxes(const Curve &curveAxes)
Let CmdAbstract classes overwrite axes Curve.
Definition: Document.cpp:850
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
Definition: Document.cpp:284
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:802
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:721
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:752
DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition: Document.cpp:700
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:878
Model for DlgSettingsCoords and CmdSettingsCoords.
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:32
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:767
QString reasonForUnsuccessfulRead() const
Return an informative text message explaining why startup loading failed. Applies if successfulRead r...
Definition: Document.cpp:781
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:161
unsigned int coordSystemCount() const
Number of CoordSystem.
Definition: Document.cpp:277
void setDocumentAxesPointsRequired(DocumentAxesPointsRequired documentAxesPointsRequired)
Set the number of axes points required.
Definition: Document.cpp:864
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:439
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
Definition: Document.cpp:857
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:686
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
Definition: Document.cpp:809
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:742
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:217
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:430
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:747
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:347
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:672
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:381
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:757
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:312
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:291
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:665
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: Document.cpp:319
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:986
QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow...
Definition: Document.cpp:838
bool isXOnly(const QString &pointIdentifier) const
See Curve::isXOnly.
Definition: Document.cpp:411
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:976
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:651