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 "DocumentModelCoords.h"
9 #include "DocumentModelDigitizeCurve.h"
10 #include "DocumentModelExportFormat.h"
11 #include "DocumentModelGeneral.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 
125  bool loadCurvesFile (const QString &curvesFile);
126 
129 
132 
135 
138 
141 
144 
147 
150 
153 
156 
158  void movePoint (const QString &pointIdentifier,
159  const QPointF &deltaScreen);
160 
162  int nextOrdinalForCurve (const QString &curveName) const;
163 
165  QPixmap pixmap () const;
166 
168  QPointF positionGraph (const QString &pointIdentifier) const;
169 
171  QPointF positionScreen (const QString &pointIdentifier) const;
172 
174  void print () const;
175 
177  void printStream (QString indentation,
178  QTextStream &str) const;
179 
181  QString reasonForUnsuccessfulRead () const;
182 
184  void removePointAxis (const QString &identifier);
185 
187  void removePointGraph (const QString &identifier);
188 
190  void removePointsInCurvesGraphs (CurvesGraphs &curvesGraphs);
191 
193  void saveXml (QXmlStreamWriter &writer) const;
194 
196  void setCurvesGraphs (const CurvesGraphs &curvesGraphs);
197 
199  void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
200 
202  void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter);
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 setModelGeneral (const DocumentModelGeneral &modelGeneral);
218 
220  void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
221 
223  void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch);
224 
226  void setModelSegments(const DocumentModelSegments &modelSegments);
227 
229  bool successfulRead () const;
230 
233  void updatePointOrdinals (const Transformation &transformation);
234 
235 private:
236  Document ();
237 
238  bool bytesIndicatePreVersion6 (const QByteArray &bytes) const;
239  Curve *curveForCurveName (const QString &curveName); // For use by Document only. External classes should use functors
240  void generateEmptyPixmap(const QXmlStreamAttributes &attributes);
241  void loadImage(QXmlStreamReader &reader);
242  void loadPostVersion5 (QXmlStreamReader &reader);
243  void loadPreVersion6 (QDataStream &str);
244 
245  // Metadata
246  QString m_name;
247  QPixmap m_pixmap;
248 
249  // Read variables
250  bool m_successfulRead;
251  QString m_reasonForUnsuccessfulRead;
252 
253  // Curves
254  Curve *m_curveAxes;
255  CurvesGraphs m_curvesGraphs;
256 
257  // Model objects for the various settings
258  DocumentModelAxesChecker m_modelAxesChecker;
259  // DocumentModelColorFilter is not here since filtering settings are stored inside the Curve class
260  DocumentModelCoords m_modelCoords;
261  // CurveStyles is not here since curve properties are stored inside the Curve class
262  DocumentModelDigitizeCurve m_modelDigitizeCurve;
263  DocumentModelExportFormat m_modelExport;
264  DocumentModelGeneral m_modelGeneral;
265  DocumentModelGridRemoval m_modelGridRemoval;
266  DocumentModelPointMatch m_modelPointMatch;
267  DocumentModelSegments m_modelSegments;
268 };
269 
270 #endif // DOCUMENT_H
void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: Document.cpp:114
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:142
QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: Document.cpp:734
Model for DlgSettingsGeneral and CmdSettingsGeneral.
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: Document.cpp:695
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:752
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:644
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: Document.cpp:860
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:916
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:161
DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: Document.cpp:685
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: Document.cpp:921
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: Document.cpp:792
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
Definition: Document.cpp:911
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:16
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: Document.cpp:926
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:179
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: Document.cpp:337
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:261
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:652
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: Document.cpp:901
int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: Document.cpp:304
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:721
bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: Document.cpp:931
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: Document.cpp:881
bool loadCurvesFile(const QString &curvesFile)
Load the curve names in the specified Engauge file into the current document. This is called near the...
void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage)
Check before calling editPointAxis.
Definition: Document.cpp:239
void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: Document.cpp:799
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: Document.cpp:906
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:309
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:886
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:657
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:639
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:806
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:665
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: Document.cpp:865
Model for DlgSettingsCoords and CmdSettingsCoords.
QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: Document.cpp:726
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:299
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:122
void print() const
Debugging method for printing directly from symbolic debugger.
Definition: Document.cpp:742
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:351
int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: Document.cpp:705
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:294
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:281
DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: Document.cpp:690
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:362
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
Definition: Document.cpp:853
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:196
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
Definition: Document.cpp:816
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:785
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:680
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:936
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: Document.cpp:670
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:218
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: Document.cpp:675