Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator 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 
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
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:752
Model for DlgSettingsGeneral and CmdSettingsGeneral.
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
Definition: Document.cpp:333
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:728
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
unsigned int coordSystemCount() const
Number of CoordSystem.
Definition: Document.cpp:277
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
bool isXOnly(const QString &pointIdentifier) const
See Curve::isXOnly.
Definition: Document.cpp:411
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:658
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
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:714
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
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:962
const CoordSystem & coordSystem() const
Currently active CoordSystem.
Definition: Document.cpp:270
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 & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:291
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:665
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:920
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:326
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:742
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:981
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:896
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
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
Definition: Document.cpp:284
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:927
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
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:672
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
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:651
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:802
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:679
QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow...
Definition: Document.cpp:838
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:878
Model for DlgSettingsCoords and CmdSettingsCoords.
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:747
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:319
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:757
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:864
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
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:735
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:312
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:305
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:721
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
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:347
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
DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition: Document.cpp:700
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
Definition: Document.cpp:809
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:781
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:707
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:986
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:686
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
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: Document.cpp:693