Engauge Digitizer  2
 All Classes Functions Variables Typedefs Enumerations 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 "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:146
void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: Document.cpp:154
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:820
Model for DlgSettingsGeneral and CmdSettingsGeneral.
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
Definition: Document.cpp:359
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:751
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:835
unsigned int coordSystemCount() const
Number of CoordSystem.
Definition: Document.cpp:303
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
bool isXOnly(const QString &pointIdentifier) const
See Curve::isXOnly.
Definition: Document.cpp:437
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:681
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: Document.cpp:944
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:1021
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
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:737
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: Document.cpp:1028
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: Document.cpp:856
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
Definition: Document.cpp:1007
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:22
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:1035
const CoordSystem & coordSystem() const
Currently active CoordSystem.
Definition: Document.cpp:296
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:42
void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Set method for DocumentModelGridDisplay.
Definition: Document.cpp:1014
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:442
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:317
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:688
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:993
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:352
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:810
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:1054
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:224
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:969
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:264
void setPixmap(const QImage &image)
Set method for the background pixmap.
Definition: Document.cpp:1042
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
Definition: Document.cpp:280
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Set the index of current active CoordSystem.
Definition: Document.cpp:911
void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: Document.cpp:863
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
Definition: Document.cpp:310
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:1000
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:364
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:976
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:695
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:918
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:674
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:870
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:702
QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow...
Definition: Document.cpp:906
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:951
Model for DlgSettingsCoords and CmdSettingsCoords.
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:815
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:345
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:825
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
void setDocumentAxesPointsRequired(DocumentAxesPointsRequired documentAxesPointsRequired)
Set the number of axes points required.
Definition: Document.cpp:932
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:456
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:758
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:338
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:331
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:744
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:465
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
Definition: Document.cpp:925
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:217
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:373
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:407
DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition: Document.cpp:723
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
Definition: Document.cpp:877
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:849
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:730
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:1059
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:709
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:1049
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: Document.cpp:716