Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
Document.h
1 #ifndef DOCUMENT_H
2 #define DOCUMENT_H
3 
4 #include "CurvesGraphs.h"
5 #include "CurveStyles.h"
6 #include "DocumentModelAxesChecker.h"
7 #include "DocumentModelColorFilter.h"
8 #include "DocumentModelCommon.h"
9 #include "DocumentModelCoords.h"
10 #include "DocumentModelDigitizeCurve.h"
11 #include "DocumentModelExportFormat.h"
12 #include "DocumentModelGridRemoval.h"
13 #include "DocumentModelPointMatch.h"
14 #include "DocumentModelSegments.h"
15 #include "PointStyle.h"
16 #include <QList>
17 #include <QPixmap>
18 #include <QString>
19 #include <QXmlStreamReader>
20 
21 class Curve;
22 class QByteArray;
23 class QImage;
24 class QTransform;
25 class QXmlStreamWriter;
26 class Transformation;
27 
29 class Document
30 {
31 public:
33  Document (const QImage &image);
34 
36  Document (const QString &fileName);
37 
39  void addGraphCurveAtEnd (const QString &curveName);
40 
46  void addPointAxisWithGeneratedIdentifier (const QPointF &posScreen,
47  const QPointF &posGraph,
48  QString &identifier,
49  double ordinal);
50 
56  void addPointAxisWithSpecifiedIdentifier (const QPointF &posScreen,
57  const QPointF &posGraph,
58  const QString &identifier,
59  double ordinal);
60 
62  void addPointGraphWithGeneratedIdentifier (const QString &curveName,
63  const QPointF &posScreen,
64  QString &generatedIentifier,
65  double ordinal);
66 
68  void addPointGraphWithSpecifiedIdentifier (const QString &curveName,
69  const QPointF &posScreen,
70  const QString &identifier,
71  double ordinal);
72 
75 
77  void checkAddPointAxis (const QPointF &posScreen,
78  const QPointF &posGraph,
79  bool &isError,
80  QString &errorMessage);
81 
83  void checkEditPointAxis (const QString &pointIdentifier,
84  const QPointF &posScreen,
85  const QPointF &posGraph,
86  bool &isError,
87  QString &errorMessage);
88 
90  const Curve &curveAxes () const;
91 
93  const Curve *curveForCurveName (const QString &curveName) const;
94 
96  const CurvesGraphs &curvesGraphs () const;
97 
99  QStringList curvesGraphsNames () const;
100 
102  int curvesGraphsNumPoints (const QString &curveName) const;
103 
105  void editPointAxis (const QPointF &posGraph,
106  const QString &identifier);
107 
109  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
110 
112  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
113 
115  void iterateThroughCurveSegments (const QString &curveName,
116  const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
117 
119  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
120 
122  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
123 
126 
129 
132 
135 
138 
141 
144 
147 
150 
153 
155  void movePoint (const QString &pointIdentifier,
156  const QPointF &deltaScreen);
157 
159  int nextOrdinalForCurve (const QString &curveName) const;
160 
162  QPixmap pixmap () const;
163 
165  QPointF positionGraph (const QString &pointIdentifier) const;
166 
168  QPointF positionScreen (const QString &pointIdentifier) const;
169 
171  void print () const;
172 
174  void printStream (QString indentation,
175  QTextStream &str) const;
176 
178  QString reasonForUnsuccessfulRead () const;
179 
181  void removePointAxis (const QString &identifier);
182 
184  void removePointGraph (const QString &identifier);
185 
187  void removePointsInCurvesGraphs (CurvesGraphs &curvesGraphs);
188 
190  void saveXml (QXmlStreamWriter &writer) const;
191 
193  void setCurvesGraphs (const CurvesGraphs &curvesGraphs);
194 
196  void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
197 
199  void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter);
200 
202  void setModelCommon (const DocumentModelCommon &modelCommon);
203 
205  void setModelCoords (const DocumentModelCoords &modelCoords);
206 
208  void setModelCurveStyles(const CurveStyles &modelCurveStyles);
209 
211  void setModelDigitizeCurve (const DocumentModelDigitizeCurve &modelDigitizeCurve);
212 
214  void setModelExport(const DocumentModelExportFormat &modelExport);
215 
217  void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
218 
220  void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch);
221 
223  void setModelSegments(const DocumentModelSegments &modelSegments);
224 
226  bool successfulRead () const;
227 
230  void updatePointOrdinals (const Transformation &transformation);
231 
232 private:
233  Document ();
234 
235  bool bytesIndicatePreVersion6 (const QByteArray &bytes) const;
236  Curve *curveForCurveName (const QString &curveName); // For use by Document only. External classes should use functors
237  void generateEmptyPixmap(const QXmlStreamAttributes &attributes);
238  void loadCurvesGraphs(QXmlStreamReader &reader);
239  void loadImage(QXmlStreamReader &reader);
240  void loadPostVersion5 (QXmlStreamReader &reader);
241  void loadPreVersion6 (QDataStream &str);
242 
243  // Metadata
244  QString m_name;
245  QPixmap m_pixmap;
246 
247  // Read variables
248  bool m_successfulRead;
249  QString m_reasonForUnsuccessfulRead;
250 
251  // Curves
252  Curve *m_curveAxes;
253  CurvesGraphs m_curvesGraphs;
254 
255  // Model objects for the various settings
256  DocumentModelAxesChecker m_modelAxesChecker;
257  // DocumentModelColorFilter is not here since filtering settings are stored inside the Curve class
258  DocumentModelCommon m_modelCommon;
259  DocumentModelCoords m_modelCoords;
260  // CurveStyles is not here since curve properties are stored inside the Curve class
261  DocumentModelDigitizeCurve m_modelDigitizeCurve;
262  DocumentModelExportFormat m_modelExport;
263  DocumentModelGridRemoval m_modelGridRemoval;
264  DocumentModelPointMatch m_modelPointMatch;
265  DocumentModelSegments m_modelSegments;
266 };
267 
268 #endif // DOCUMENT_H
DocumentModelCommon modelCommon() const
Get method for DocumentModelCommon.
Definition: Document.cpp:646
void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: Document.cpp:108
void addPointAxisWithSpecifiedIdentifier(const QPointF &posScreen, const QPointF &posGraph, const QString &identifier, double ordinal)
Add a single axis point with the specified point identifier.
Definition: Document.cpp:136
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:728
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:689
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:746
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:638
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: Document.cpp:850
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:906
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:155
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:679
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: Document.cpp:911
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: Document.cpp:786
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:16
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:916
Model for DlgSettingsCommon and CmdSettingsCommon.
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:173
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: Document.cpp:331
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:255
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:651
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:896
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:298
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:715
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:921
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:876
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
Definition: Document.cpp:233
void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: Document.cpp:793
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:901
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:303
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:18
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
void setModelCurveStyles(const CurveStyles &modelCurveStyles)
Set method for CurveStyles.
Definition: Document.cpp:881
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:656
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:633
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:800
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:664
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:855
Model for DlgSettingsCoords and CmdSettingsCoords.
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:720
Storage of one imported image and the data attached to that image.
Definition: Document.h:29
Container for one set of digitized Points.
Definition: Curve.h:26
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: Document.cpp:293
void addPointAxisWithGeneratedIdentifier(const QPointF &posScreen, const QPointF &posGraph, QString &identifier, double ordinal)
Add a single axis point with a generated point identifier.
Definition: Document.cpp:116
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:736
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
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:345
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:699
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:288
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:275
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:684
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:356
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
Definition: Document.cpp:843
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:190
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
Definition: Document.cpp:810
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
void setModelCommon(const DocumentModelCommon &modelCommon)
Set method for DocumentModelCommon.
Definition: Document.cpp:871
QString reasonForUnsuccessfulRead() const
Return an informative text message explaining why startup loading failed. Applies if successfulRead r...
Definition: Document.cpp:779
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:674
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:926
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:669
void checkAddPointAxis(const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling addPointAxis. Also returns the next available ordinal number (to prevent clashes...
Definition: Document.cpp:212