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 initializeGridDisplay (const Transformation &transformation);
143 
145  bool isXOnly (const QString &pointIdentifier) const;
146 
148  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
149 
151  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
152 
154  void iterateThroughCurveSegments (const QString &curveName,
155  const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
156 
158  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
159 
161  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
162 
164  bool loadCurvesFile (const QString &curvesFile);
165 
168 
171 
174 
177 
180 
183 
186 
189 
192 
195 
198 
200  void movePoint (const QString &pointIdentifier,
201  const QPointF &deltaScreen);
202 
204  int nextOrdinalForCurve (const QString &curveName) const;
205 
207  QPixmap pixmap () const;
208 
210  QPointF positionGraph (const QString &pointIdentifier) const;
211 
213  QPointF positionScreen (const QString &pointIdentifier) const;
214 
216  void print () const;
217 
219  void printStream (QString indentation,
220  QTextStream &str) const;
221 
223  QString reasonForUnsuccessfulRead () const;
224 
226  void removePointAxis (const QString &identifier);
227 
229  void removePointGraph (const QString &identifier);
230 
232  void removePointsInCurvesGraphs (CurvesGraphs &curvesGraphs);
233 
235  void saveXml (QXmlStreamWriter &writer) const;
236 
238  QString selectedCurveName () const;
239 
241  void setCoordSystemIndex(CoordSystemIndex coordSystemIndex);
242 
244  void setCurveAxes (const Curve &curveAxes);
245 
247  void setCurvesGraphs (const CurvesGraphs &curvesGraphs);
248 
251  void setDocumentAxesPointsRequired (DocumentAxesPointsRequired documentAxesPointsRequired);
252 
254  void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
255 
257  void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter);
258 
260  void setModelCoords (const DocumentModelCoords &modelCoords);
261 
263  void setModelCurveStyles(const CurveStyles &modelCurveStyles);
264 
266  void setModelDigitizeCurve (const DocumentModelDigitizeCurve &modelDigitizeCurve);
267 
269  void setModelExport(const DocumentModelExportFormat &modelExport);
270 
272  void setModelGeneral (const DocumentModelGeneral &modelGeneral);
273 
275  void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay);
276 
278  void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
279 
281  void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch);
282 
284  void setModelSegments(const DocumentModelSegments &modelSegments);
285 
287  void setSelectedCurveName (const QString &selectedCurveName);
288 
290  bool successfulRead () const;
291 
294  void updatePointOrdinals (const Transformation &transformation);
295 
296 private:
297  Document ();
298 
299  bool bytesIndicatePreVersion6 (const QByteArray &bytes) const;
300  Curve *curveForCurveName (const QString &curveName); // For use by Document only. External classes should use functors
301  void generateEmptyPixmap(const QXmlStreamAttributes &attributes);
302  void loadImage(QXmlStreamReader &reader);
303  void loadPreVersion6 (QDataStream &str);
304  void loadVersion6 (QFile *file);
305  void loadVersions7AndUp (QFile *file);
306  int versionFromFile (QFile *file) const;
307 
308  // Metadata
309  QString m_name;
310  QPixmap m_pixmap;
311 
312  // Number of axes points used is set during creation/import
313  DocumentAxesPointsRequired m_documentAxesPointsRequired;
314 
315  // Read variables
316  bool m_successfulRead;
317  QString m_reasonForUnsuccessfulRead;
318 
319  CoordSystemContext m_coordSystemContext;
320 };
321 
322 #endif // DOCUMENT_H
void addCoordSystems(unsigned int numberCoordSystemToAdd)
Add some number (0 or more) of additional coordinate systems.
Definition: Document.cpp:143
void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: Document.cpp:152
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:733
Model for DlgSettingsGeneral and CmdSettingsGeneral.
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
Definition: Document.cpp:331
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:709
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:748
unsigned int coordSystemCount() const
Number of CoordSystem.
Definition: Document.cpp:275
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
bool isXOnly(const QString &pointIdentifier) const
See Curve::isXOnly.
Definition: Document.cpp:392
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:639
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: Document.cpp:852
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:929
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:189
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:695
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: Document.cpp:936
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: Document.cpp:769
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
Definition: Document.cpp:915
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:22
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:943
const CoordSystem & coordSystem() const
Currently active CoordSystem.
Definition: Document.cpp:268
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:41
void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Set method for DocumentModelGridDisplay.
Definition: Document.cpp:922
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:202
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: Document.cpp:397
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:289
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:646
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:901
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:324
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:723
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:955
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:877
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:238
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
Definition: Document.cpp:253
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Set the index of current active CoordSystem.
Definition: Document.cpp:824
void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: Document.cpp:776
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
Definition: Document.cpp:282
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:908
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:336
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:884
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:653
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:174
void setCurveAxes(const Curve &curveAxes)
Let CmdAbstract classes overwrite axes Curve.
Definition: Document.cpp:831
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:632
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:783
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:660
QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow...
Definition: Document.cpp:819
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:859
Model for DlgSettingsCoords and CmdSettingsCoords.
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:728
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
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: Document.cpp:317
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:738
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:159
void setDocumentAxesPointsRequired(DocumentAxesPointsRequired documentAxesPointsRequired)
Set the number of axes points required.
Definition: Document.cpp:845
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:411
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:716
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:310
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:303
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:702
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:420
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
Definition: Document.cpp:838
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:215
This class plays the role of context class in a state machine, although the 'states' 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:362
DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition: Document.cpp:681
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
Definition: Document.cpp:790
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:762
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:688
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:960
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:667
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:950
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: Document.cpp:674