Engauge Digitizer  2
CoordSystemContext.h
Go to the documentation of this file.
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 COORD_SYSTEM_CONTEXT_H
8 #define COORD_SYSTEM_CONTEXT_H
9 
10 #include "CoordSystem.h"
11 #include "CoordSystemIndex.h"
12 #include "CoordSystemInterface.h"
14 #include <QVector>
15 
16 class QDataStream;
17 class QXmlStreamReader;
18 class QXmlStreamWriter;
19 
20 typedef QVector<CoordSystem*> CoordSystems;
21 
25 {
26  public:
29 
31 
33  void addCoordSystems(unsigned int numberCoordSystemToAdd);
34 
35  virtual void addGraphCurveAtEnd (const QString &curveName);
36  virtual void addPointAxisWithGeneratedIdentifier (const QPointF &posScreen,
37  const QPointF &posGraph,
38  QString &identifier,
39  double ordinal,
40  bool isXOnly);
41  virtual void addPointAxisWithSpecifiedIdentifier (const QPointF &posScreen,
42  const QPointF &posGraph,
43  const QString &identifier,
44  double ordinal,
45  bool isXOnly);
46  virtual void addPointGraphWithGeneratedIdentifier (const QString &curveName,
47  const QPointF &posScreen,
48  QString &generatedIentifier,
49  double ordinal);
50  virtual void addPointGraphWithSpecifiedIdentifier (const QString &curveName,
51  const QPointF &posScreen,
52  const QString &identifier,
53  double ordinal);
55  virtual void checkAddPointAxis (const QPointF &posScreen,
56  const QPointF &posGraph,
57  bool &isError,
58  QString &errorMessage,
59  bool isXOnly,
60  DocumentAxesPointsRequired documentAxesPointsRequired);
61  virtual void checkEditPointAxis (const QString &pointIdentifier,
62  const QPointF &posScreen,
63  const QPointF &posGraph,
64  bool &isError,
65  QString &errorMessage,
66  DocumentAxesPointsRequired documentAxesPointsRequired);
67 
69  const CoordSystem &coordSystem () const;
70 
72  unsigned int coordSystemCount() const;
73 
76 
77  virtual const Curve &curveAxes () const;
78  virtual Curve *curveForCurveName (const QString &curveName);
79  virtual const Curve *curveForCurveName (const QString &curveName) const;
80  virtual const CurvesGraphs &curvesGraphs () const;
81  virtual QStringList curvesGraphsNames () const;
82  virtual int curvesGraphsNumPoints (const QString &curveName) const;
83  virtual void editPointAxis (const QPointF &posGraph,
84  const QString &identifier);
85  virtual void editPointGraph (bool isX,
86  bool isY,
87  double x,
88  double y,
89  const QStringList &identifiers,
90  const Transformation &transformation);
91 
93  bool isXOnly (const QString &pointIdentifier) const;
94 
95  virtual void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
96  virtual void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
97  virtual void iterateThroughCurveSegments (const QString &curveName,
98  const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
99  virtual void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
100  virtual void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
101  virtual bool loadCurvesFile (const QString &curvesFile);
102 
104  void loadPreVersion6 (QDataStream &str,
105  double version,
106  DocumentAxesPointsRequired &documentAxesPointsRequired);
108  void loadVersion6 (QXmlStreamReader &reader,
109  DocumentAxesPointsRequired &documentAxesPointsRequired);
112  void loadVersions7AndUp (QXmlStreamReader &reader);
113 
116  virtual DocumentModelCoords modelCoords () const;
117  virtual CurveStyles modelCurveStyles() const;
119  virtual DocumentModelExportFormat modelExport() const;
120  virtual DocumentModelGeneral modelGeneral() const;
124  virtual DocumentModelSegments modelSegments() const;
125  virtual void movePoint (const QString &pointIdentifier,
126  const QPointF &deltaScreen);
127  virtual int nextOrdinalForCurve (const QString &curveName) const;
128  virtual QPointF positionGraph (const QString &pointIdentifier) const;
129  virtual QPointF positionScreen (const QString &pointIdentifier) const;
130  virtual void print () const;
131  virtual void printStream (QString indentation,
132  QTextStream &str) const;
133  virtual QString reasonForUnsuccessfulRead () const;
134  virtual void removePointAxis (const QString &identifier);
135  virtual void removePointGraph (const QString &identifier);
137  virtual void saveXml (QXmlStreamWriter &writer) const;
138  virtual QString selectedCurveName () const;
139 
142 
143  virtual void setCurveAxes (const Curve &curveAxes);
144  virtual void setCurvesGraphs (const CurvesGraphs &curvesGraphs); // Applies to current coordinate system
147  virtual void setModelCoords (const DocumentModelCoords &modelCoords);
148  virtual void setModelCurveStyles(const CurveStyles &modelCurveStyles);
151  virtual void setModelGeneral (const DocumentModelGeneral &modelGeneral);
156  virtual void setSelectedCurveName(const QString &selectedCurveName);
157  virtual bool successfulRead () const;
158  virtual void updatePointOrdinals (const Transformation &transformation);
159 
160  private:
161 
162  CoordSystemIndex m_coordSystemIndex;
163  CoordSystems m_coordSystems;
164 
165 };
166 
167 #endif // COORD_SYSTEM_CONTEXT_H
CoordSystemContext::setModelCurveStyles
virtual void setModelCurveStyles(const CurveStyles &modelCurveStyles)
Set method for CurveStyles.
Definition: CoordSystemContext.cpp:515
CoordSystemContext::curveAxes
virtual const Curve & curveAxes() const
Get method for axis curve.
Definition: CoordSystemContext.cpp:158
CoordSystemContext::setModelSegments
virtual void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: CoordSystemContext.cpp:564
CoordSystemContext::addGraphCurveAtEnd
virtual void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: CoordSystemContext.cpp:37
CoordSystemContext::setModelGridRemoval
virtual void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: CoordSystemContext.cpp:550
CoordSystemContext::setModelExport
virtual void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: CoordSystemContext.cpp:529
CoordSystemContext::addPointGraphWithSpecifiedIdentifier
virtual 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: CoordSystemContext.cpp:87
CoordSystemContext::printStream
virtual void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
Definition: CoordSystemContext.cpp:419
CoordSystemContext::setModelGeneral
virtual void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
Definition: CoordSystemContext.cpp:536
DocumentModelGridDisplay
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
Definition: DocumentModelGridDisplay.h:17
CoordSystemContext::successfulRead
virtual bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: CoordSystemContext.cpp:576
CoordSystemContext::iterateThroughCurvePointsAxes
virtual void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: CoordSystemContext.cpp:233
DocumentAxesPointsRequired
DocumentAxesPointsRequired
Definition: DocumentAxesPointsRequired.h:9
CoordSystemContext
This class plays the role of context class in a state machine, although the 'states' are actually dif...
Definition: CoordSystemContext.h:23
CoordSystemContext::curvesGraphsNumPoints
virtual int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: CoordSystemContext.cpp:193
CoordSystemContext::modelPointMatch
virtual DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: CoordSystemContext.cpp:368
CoordSystemContext::print
virtual void print() const
Debugging method for printing directly from symbolic debugger.
Definition: CoordSystemContext.cpp:412
CoordSystemContext::removePointAxis
virtual void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: CoordSystemContext.cpp:435
CoordSystemContext::modelGeneral
virtual DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: CoordSystemContext.cpp:347
CoordSystemContext::updatePointOrdinals
virtual void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: CoordSystemContext.cpp:583
Transformation
Affine transformation between screen and graph coordinates, based on digitized axis points.
Definition: Transformation.h:30
CoordSystemContext::modelGridRemoval
virtual DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: CoordSystemContext.cpp:361
CoordSystemContext::addPointAxisWithGeneratedIdentifier
virtual 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: CoordSystemContext.cpp:44
CoordSystemContext::isXOnly
bool isXOnly(const QString &pointIdentifier) const
True/false if y/x value is empty.
Definition: CoordSystemContext.cpp:226
CoordSystemContext::modelCoords
virtual DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: CoordSystemContext.cpp:319
CoordSystemContext::curvesGraphs
virtual const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: CoordSystemContext.cpp:179
CoordSystemContext::reasonForUnsuccessfulRead
virtual QString reasonForUnsuccessfulRead() const
Return an informative text message explaining why startup loading failed. Applies if successfulRead r...
Definition: CoordSystemContext.cpp:428
CoordSystemContext::loadVersion6
void loadVersion6(QXmlStreamReader &reader, DocumentAxesPointsRequired &documentAxesPointsRequired)
Load from file in version 6 format, into the single CoordSystem.
Definition: CoordSystemContext.cpp:288
Curve
Container for one set of digitized Points.
Definition: Curve.h:32
DocumentModelColorFilter
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
Definition: DocumentModelColorFilter.h:20
CoordSystemContext::saveXml
virtual void saveXml(QXmlStreamWriter &writer) const
Save graph to xml.
Definition: CoordSystemContext.cpp:456
CoordSystemIndex
unsigned int CoordSystemIndex
Zero-based index for identifying CoordSystem instantiations.
Definition: CoordSystemIndex.h:10
CoordSystemContext::coordSystemIndex
CoordSystemIndex coordSystemIndex() const
Index of current CoordSystem.
Definition: CoordSystemContext.cpp:153
CoordSystemContext::coordSystem
const CoordSystem & coordSystem() const
Current CoordSystem.
Definition: CoordSystemContext.cpp:141
CoordSystemContext::modelAxesChecker
virtual DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: CoordSystemContext.cpp:305
CoordSystemContext::removePointGraph
virtual void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: CoordSystemContext.cpp:442
CoordSystemContext::setModelDigitizeCurve
virtual void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: CoordSystemContext.cpp:522
DocumentModelGeneral
Model for DlgSettingsGeneral and CmdSettingsGeneral.
Definition: DocumentModelGeneral.h:15
CoordSystemContext::setSelectedCurveName
virtual void setSelectedCurveName(const QString &selectedCurveName)
Save curve name that is selected for the current coordinate system, for the next time the coordinate ...
Definition: CoordSystemContext.cpp:571
CoordSystemContext::curvesGraphsNames
virtual QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: CoordSystemContext.cpp:186
DocumentAxesPointsRequired.h
CoordSystemContext::nextOrdinalForCurve
virtual int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: CoordSystemContext.cpp:391
CoordSystemContext::modelSegments
virtual DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: CoordSystemContext.cpp:375
CoordSystemContext::checkEditPointAxis
virtual void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage, DocumentAxesPointsRequired documentAxesPointsRequired)
Check before calling editPointAxis.
Definition: CoordSystemContext.cpp:124
CoordSystemContext::setCurvesGraphs
virtual void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs. Applies to current coordinate system.
Definition: CoordSystemContext.cpp:487
CoordSystemContext::modelCurveStyles
virtual CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: CoordSystemContext.cpp:326
CoordSystemContext::addPointsInCurvesGraphs
virtual void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: CoordSystemContext.cpp:100
CoordSystemContext::setCurveAxes
virtual void setCurveAxes(const Curve &curveAxes)
Let CmdAbstract classes overwrite axes Curve. Applies to current coordinate system.
Definition: CoordSystemContext.cpp:480
CoordSystemContext::modelDigitizeCurve
virtual DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: CoordSystemContext.cpp:333
CoordSystemContext::positionScreen
virtual QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: CoordSystemContext.cpp:405
CoordSystemContext::loadCurvesFile
virtual bool loadCurvesFile(const QString &curvesFile)
Load the curve names in the specified Engauge file into the current graph. This is called near the en...
Definition: CoordSystemContext.cpp:270
CoordSystemContext::setModelAxesChecker
virtual void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: CoordSystemContext.cpp:494
CoordSystemContext::selectedCurveName
virtual QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow.
Definition: CoordSystemContext.cpp:465
CoordSystemContext::editPointGraph
virtual 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: CoordSystemContext.cpp:209
CoordSystemContext::addCoordSystems
void addCoordSystems(unsigned int numberCoordSystemToAdd)
Add specified number of coordinate systems to the original one created by the constructor.
Definition: CoordSystemContext.cpp:26
CoordSystemContext::addPointGraphWithGeneratedIdentifier
virtual void addPointGraphWithGeneratedIdentifier(const QString &curveName, const QPointF &posScreen, QString &generatedIentifier, double ordinal)
Add a single graph point with a generated point identifier.
Definition: CoordSystemContext.cpp:74
CoordSystemContext::setModelGridDisplay
virtual void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Set method for DocumentModelGridDisplay.
Definition: CoordSystemContext.cpp:543
DocumentModelExportFormat
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
Definition: DocumentModelExportFormat.h:22
DocumentModelSegments
Model for DlgSettingsSegments and CmdSettingsSegments.
Definition: DocumentModelSegments.h:16
CoordSystemContext::modelGridDisplay
virtual DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition: CoordSystemContext.cpp:354
CurvesGraphs
Container for all graph curves. The axes point curve is external to this class.
Definition: CurvesGraphs.h:23
CoordSystemInterface
Interface common to CoordSystemContext and CoordSystem classes.
Definition: CoordSystemInterface.h:33
CoordSystemContext::setModelPointMatch
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: CoordSystemContext.cpp:557
CoordSystemContext::loadVersions7AndUp
void loadVersions7AndUp(QXmlStreamReader &reader)
Load one CoordSystem from file in version 7 format or newer, into the most recent CoordSystem which w...
Definition: CoordSystemContext.cpp:297
CoordSystems
QVector< CoordSystem * > CoordSystems
Definition: CoordSystemContext.h:17
CoordSystemContext::modelColorFilter
virtual DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: CoordSystemContext.cpp:312
DocumentModelDigitizeCurve
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Definition: DocumentModelDigitizeCurve.h:17
DocumentModelPointMatch
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Definition: DocumentModelPointMatch.h:16
CoordSystemIndex.h
CoordSystemContext::curveForCurveName
virtual Curve * curveForCurveName(const QString &curveName)
See CurvesGraphs::curveForCurveName, although this also works for AXIS_CURVE_NAME.
Definition: CoordSystemContext.cpp:165
CoordSystemContext::setModelColorFilter
virtual void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: CoordSystemContext.cpp:501
DocumentModelAxesChecker
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
Definition: DocumentModelAxesChecker.h:17
CoordSystemContext::editPointAxis
virtual 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: CoordSystemContext.cpp:200
CoordSystemContext::checkAddPointAxis
virtual void checkAddPointAxis(const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage, bool isXOnly, DocumentAxesPointsRequired documentAxesPointsRequired)
Check before calling addPointAxis. Also returns the next available ordinal number (to prevent clashes...
Definition: CoordSystemContext.cpp:107
CoordSystemContext::positionGraph
virtual QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: CoordSystemContext.cpp:398
CoordSystemContext::movePoint
virtual void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: CoordSystemContext.cpp:382
CoordSystemContext::addPointAxisWithSpecifiedIdentifier
virtual 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: CoordSystemContext.cpp:59
DocumentModelGridRemoval
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
Definition: DocumentModelGridRemoval.h:16
CurveStyles
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:21
CoordSystemInterface.h
CoordSystem.h
CoordSystemContext::coordSystemCount
unsigned int coordSystemCount() const
Number of CoordSystem.
Definition: CoordSystemContext.cpp:148
DocumentModelCoords
Model for DlgSettingsCoords and CmdSettingsCoords.
Definition: DocumentModelCoords.h:19
CoordSystemContext::~CoordSystemContext
~CoordSystemContext()
Definition: CoordSystemContext.cpp:19
CoordSystemContext::iterateThroughCurveSegments
virtual void iterateThroughCurveSegments(const QString &curveName, const Functor2wRet< const Point &, const Point &, CallbackSearchReturn > &ftorWithCallback) const
See Curve::iterateThroughCurveSegments, for any axes or graph curve.
Definition: CoordSystemContext.cpp:247
CoordSystemContext::removePointsInCurvesGraphs
virtual void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: CoordSystemContext.cpp:449
CoordSystemContext::iterateThroughCurvesPointsGraphs
virtual void iterateThroughCurvesPointsGraphs(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for all the graphs curves.
Definition: CoordSystemContext.cpp:256
CoordSystemContext::setModelCoords
virtual void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: CoordSystemContext.cpp:508
CoordSystemContext::loadPreVersion6
void loadPreVersion6(QDataStream &str, double version, DocumentAxesPointsRequired &documentAxesPointsRequired)
Load from file in pre-version 6 format.
Definition: CoordSystemContext.cpp:277
CoordSystemContext::modelExport
virtual DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: CoordSystemContext.cpp:340
CoordSystem
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:41
CoordSystemContext::setCoordSystemIndex
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Index of current CoordSystem.
Definition: CoordSystemContext.cpp:470
CoordSystemContext::CoordSystemContext
CoordSystemContext()
Default constructor for constructing from opened file.
Definition: CoordSystemContext.cpp:13