Engauge Digitizer  2
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 QImage;
23 class QTransform;
24 class QXmlStreamWriter;
25 class Transformation;
26 
28 class Document
29 {
30 public:
32  Document (const QImage &image);
33 
35  Document (const QString &fileName);
36 
38  void addGraphCurveAtEnd (const QString &curveName);
39 
45  void addPointAxisWithGeneratedIdentifier (const QPointF &posScreen,
46  const QPointF &posGraph,
47  QString &identifier,
48  double ordinal);
49 
55  void addPointAxisWithSpecifiedIdentifier (const QPointF &posScreen,
56  const QPointF &posGraph,
57  const QString &identifier,
58  double ordinal);
59 
61  void addPointGraphWithGeneratedIdentifier (const QString &curveName,
62  const QPointF &posScreen,
63  QString &generatedIentifier,
64  double ordinal);
65 
67  void addPointGraphWithSpecifiedIdentifier (const QString &curveName,
68  const QPointF &posScreen,
69  const QString &identifier,
70  double ordinal);
71 
74 
76  void checkAddPointAxis (const QPointF &posScreen,
77  const QPointF &posGraph,
78  bool &isError,
79  QString &errorMessage);
80 
82  void checkEditPointAxis (const QString &pointIdentifier,
83  const QPointF &posScreen,
84  const QPointF &posGraph,
85  bool &isError,
86  QString &errorMessage);
87 
89  const Curve &curveAxes () const;
90 
92  const Curve *curveForCurveName (const QString &curveName) const;
93 
95  const CurvesGraphs &curvesGraphs () const;
96 
98  QStringList curvesGraphsNames () const;
99 
101  int curvesGraphsNumPoints (const QString &curveName) const;
102 
104  void editPointAxis (const QPointF &posGraph,
105  const QString &identifier);
106 
108  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
109 
111  void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
112 
114  void iterateThroughCurveSegments (const QString &curveName,
115  const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
116 
118  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
119 
121  void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
122 
125 
128 
131 
134 
137 
140 
143 
146 
149 
152 
154  void movePoint (const QString &pointIdentifier,
155  const QPointF &deltaScreen);
156 
158  int nextOrdinalForCurve (const QString &curveName) const;
159 
161  QPixmap pixmap () const;
162 
164  QPointF positionGraph (const QString &pointIdentifier) const;
165 
167  QPointF positionScreen (const QString &pointIdentifier) const;
168 
170  void print () const;
171 
173  void printStream (QString indentation,
174  QTextStream &str) const;
175 
177  QString reasonForUnsuccessfulRead () const;
178 
180  void removePointAxis (const QString &identifier);
181 
183  void removePointGraph (const QString &identifier);
184 
186  void removePointsInCurvesGraphs (CurvesGraphs &curvesGraphs);
187 
189  void saveXml (QXmlStreamWriter &writer) const;
190 
192  void setCurvesGraphs (const CurvesGraphs &curvesGraphs);
193 
195  void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
196 
198  void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter);
199 
201  void setModelCommon (const DocumentModelCommon &modelCommon);
202 
204  void setModelCoords (const DocumentModelCoords &modelCoords);
205 
207  void setModelCurveStyles(const CurveStyles &modelCurveStyles);
208 
210  void setModelDigitizeCurve (const DocumentModelDigitizeCurve &modelDigitizeCurve);
211 
213  void setModelExport(const DocumentModelExportFormat &modelExport);
214 
216  void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
217 
219  void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch);
220 
222  void setModelSegments(const DocumentModelSegments &modelSegments);
223 
225  bool successfulRead () const;
226 
229  void updatePointOrdinals (const Transformation &transformation);
230 
231 private:
232  Document ();
233 
234  Curve *curveForCurveName (const QString &curveName); // For use by Document only. External classes should use functors
235  void generateEmptyPixmap(const QXmlStreamAttributes &attributes);
236  void loadCurvesGraphs(QXmlStreamReader &reader);
237  void loadImage(QXmlStreamReader &reader);
238  void loadPostVersion5 (const QString &fileName);
239  void loadPreVersion6 (const QString &fileName);
240 
241  // Metadata
242  QString m_name;
243  QPixmap m_pixmap;
244 
245  // Read variables
246  bool m_successfulRead;
247  QString m_reasonForUnsuccessfulRead;
248 
249  // Curves
250  Curve *m_curveAxes;
251  CurvesGraphs m_curvesGraphs;
252 
253  // Model objects for the various settings
254  DocumentModelAxesChecker m_modelAxesChecker;
255  // DocumentModelColorFilter is not here since filtering settings are stored inside the Curve class
256  DocumentModelCommon m_modelCommon;
257  DocumentModelCoords m_modelCoords;
258  // CurveStyles is not here since curve properties are stored inside the Curve class
259  DocumentModelDigitizeCurve m_modelDigitizeCurve;
260  DocumentModelExportFormat m_modelExport;
261  DocumentModelGridRemoval m_modelGridRemoval;
262  DocumentModelPointMatch m_modelPointMatch;
263  DocumentModelSegments m_modelSegments;
264 };
265 
266 #endif // DOCUMENT_H
DocumentModelCommon modelCommon() const
Get method for DocumentModelCommon.
Definition: Document.cpp:626
void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: Document.cpp:79
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:107
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:708
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:669
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:726
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:618
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: Document.cpp:830
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:886
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:126
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:659
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: Document.cpp:891
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: Document.cpp:766
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:16
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:896
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:144
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: Document.cpp:290
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:214
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:631
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:876
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:257
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:695
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:901
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:856
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
Definition: Document.cpp:192
void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: Document.cpp:773
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:881
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:262
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:861
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:636
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:613
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:780
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:644
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:835
Model for DlgSettingsCoords and CmdSettingsCoords.
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:700
Storage of one imported image and the data attached to that image.
Definition: Document.h:28
Container for one set of digitized Points.
Definition: Curve.h:26
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: Document.cpp:252
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:87
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:716
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:304
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:679
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:247
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:234
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:664
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:315
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
Definition: Document.cpp:823
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:161
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...
void setModelCommon(const DocumentModelCommon &modelCommon)
Set method for DocumentModelCommon.
Definition: Document.cpp:851
QString reasonForUnsuccessfulRead() const
Return an informative text message explaining why startup loading failed. Applies if successfulRead r...
Definition: Document.cpp:759
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:654
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:906
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:649
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:171