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:147
void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: Document.cpp:155
Model for DlgSettingsGeneral and CmdSettingsGeneral.
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:353
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:752
const CoordSystem & coordSystem() const
Currently active CoordSystem.
Definition: Document.cpp:297
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: Document.cpp:945
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:1022
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:192
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: Document.cpp:1029
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: Document.cpp:857
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
Definition: Document.cpp:1008
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:22
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:731
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:1036
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:759
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:1055
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:42
void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Set method for DocumentModelGridDisplay.
Definition: Document.cpp:1015
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:205
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: Document.cpp:443
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:332
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: Document.cpp:717
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
Definition: Document.cpp:360
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:682
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:994
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:225
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:970
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:738
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:265
void setPixmap(const QImage &image)
Set method for the background pixmap.
Definition: Document.cpp:1043
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
Definition: Document.cpp:281
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Set the index of current active CoordSystem.
Definition: Document.cpp:912
void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: Document.cpp:864
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:1001
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:703
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:365
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:977
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:177
void setCurveAxes(const Curve &curveAxes)
Let CmdAbstract classes overwrite axes Curve.
Definition: Document.cpp:919
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
Definition: Document.cpp:311
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:871
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:745
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:821
DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition: Document.cpp:724
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:952
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:33
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:836
QString reasonForUnsuccessfulRead() const
Return an informative text message explaining why startup loading failed. Applies if successfulRead r...
Definition: Document.cpp:850
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:162
unsigned int coordSystemCount() const
Number of CoordSystem.
Definition: Document.cpp:304
void setDocumentAxesPointsRequired(DocumentAxesPointsRequired documentAxesPointsRequired)
Set the number of axes points required.
Definition: Document.cpp:933
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:466
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
Definition: Document.cpp:926
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:710
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
Definition: Document.cpp:878
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:811
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:218
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:457
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:816
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:374
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:696
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:408
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:826
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:339
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:318
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:689
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: Document.cpp:346
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:1060
QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow...
Definition: Document.cpp:907
bool isXOnly(const QString &pointIdentifier) const
See Curve::isXOnly.
Definition: Document.cpp:438
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
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:675