1 #include "CmdMediator.h"
2 #include "CoordUnitsDate.h"
3 #include "CoordUnitsTime.h"
4 #include "DocumentModelCoords.h"
5 #include "DocumentSerialize.h"
6 #include "EngaugeAssert.h"
9 #include "QtToString.h"
10 #include <QXmlStreamWriter>
13 const double PI = 3.1415926535;
14 const double TWO_PI = 2.0 * PI;
18 const double DEFAULT_ORIGIN_RADIUS_LINEAR = 0.0;
21 m_coordsType (COORDS_TYPE_CARTESIAN),
22 m_originRadius (DEFAULT_ORIGIN_RADIUS_LINEAR),
23 m_coordScaleXTheta (COORD_SCALE_LINEAR),
24 m_coordScaleYRadius (COORD_SCALE_LINEAR),
25 m_coordUnitsX (COORD_UNITS_NON_POLAR_THETA_NUMBER),
26 m_coordUnitsY (COORD_UNITS_NON_POLAR_THETA_NUMBER),
27 m_coordUnitsTheta (COORD_UNITS_POLAR_THETA_DEGREES),
28 m_coordUnitsRadius (COORD_UNITS_NON_POLAR_THETA_NUMBER),
29 m_coordUnitsDate (COORD_UNITS_DATE_YEAR_MONTH_DAY),
30 m_coordUnitsTime (COORD_UNITS_TIME_HOUR_MINUTE_SECOND)
35 m_coordsType (document.modelCoords().coordsType()),
36 m_originRadius(document.modelCoords().originRadius()),
37 m_coordScaleXTheta(document.modelCoords().coordScaleXTheta()),
38 m_coordScaleYRadius(document.modelCoords().coordScaleYRadius()),
39 m_coordUnitsX(document.modelCoords().coordUnitsX()),
40 m_coordUnitsY(document.modelCoords().coordUnitsY()),
41 m_coordUnitsTheta(document.modelCoords().coordUnitsTheta()),
42 m_coordUnitsRadius(document.modelCoords().coordUnitsRadius()),
43 m_coordUnitsDate(document.modelCoords().coordUnitsDate()),
44 m_coordUnitsTime(document.modelCoords().coordUnitsTime())
49 m_coordsType (other.coordsType ()),
50 m_originRadius (other.originRadius ()),
51 m_coordScaleXTheta (other.coordScaleXTheta()),
52 m_coordScaleYRadius (other.coordScaleYRadius ()),
53 m_coordUnitsX (other.coordUnitsX()),
54 m_coordUnitsY (other.coordUnitsY()),
55 m_coordUnitsTheta (other.coordUnitsTheta ()),
56 m_coordUnitsRadius (other.coordUnitsRadius ()),
57 m_coordUnitsDate (other.coordUnitsDate ()),
58 m_coordUnitsTime (other.coordUnitsTime ())
80 return m_coordScaleXTheta;
85 return m_coordScaleYRadius;
95 return m_coordUnitsDate;
100 return m_coordUnitsRadius;
105 return m_coordUnitsTheta;
110 return m_coordUnitsTime;
115 return m_coordUnitsX;
120 return m_coordUnitsY;
125 LOG4CPP_INFO_S ((*mainCat)) <<
"DocumentModelCoords::loadXml";
129 QXmlStreamAttributes attributes = reader.attributes();
131 if (attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_TYPE) &&
132 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_ORIGIN_RADIUS) &&
133 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_X_THETA) &&
134 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_Y_RADIUS) &&
135 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_X) &&
136 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_Y) &&
137 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_THETA) &&
138 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_RADIUS) &&
139 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_DATE) &&
140 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_TIME)) {
142 setCoordsType ((CoordsType) attributes.value(DOCUMENT_SERIALIZE_COORDS_TYPE).toInt());
143 setOriginRadius (attributes.value(DOCUMENT_SERIALIZE_COORDS_ORIGIN_RADIUS).toDouble());
144 setCoordScaleXTheta ((CoordScale) attributes.value(DOCUMENT_SERIALIZE_COORDS_SCALE_X_THETA).toInt());
145 setCoordScaleYRadius ((CoordScale) attributes.value(DOCUMENT_SERIALIZE_COORDS_SCALE_Y_RADIUS).toInt());
146 setCoordUnitsX ((CoordUnitsNonPolarTheta) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_X).toInt());
147 setCoordUnitsY ((CoordUnitsNonPolarTheta) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_Y).toInt());
148 setCoordUnitsTheta ((CoordUnitsPolarTheta) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_THETA).toInt());
149 setCoordUnitsRadius ((CoordUnitsNonPolarTheta) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_RADIUS).toInt());
150 setCoordUnitsDate ((CoordUnitsDate) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_DATE).toInt());
151 setCoordUnitsTime ((CoordUnitsTime) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_TIME).toInt());
154 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
155 (reader.name() != DOCUMENT_SERIALIZE_COORDS)){
156 loadNextFromReader(reader);
157 if (reader.atEnd()) {
165 reader.raiseError (
"Cannot read coordinates data");
171 return m_originRadius;
175 QTextStream &str)
const
177 str << indentation <<
"DocumentModelCoords\n";
179 indentation += INDENTATION_DELTA;
181 str << indentation <<
"coordsType=" << coordsTypeToString (m_coordsType) <<
"\n";
182 str << indentation <<
"originRadius" << m_originRadius <<
"\n";
183 str << indentation <<
"coordScaleXTheta=" << coordScaleToString (m_coordScaleXTheta) <<
"\n";
184 str << indentation <<
"coordScaleYRadius=" << coordScaleToString (m_coordScaleYRadius) <<
"\n";
185 str << indentation <<
"coordUnitsX=" << coordUnitsNonPolarThetaToString (m_coordUnitsX) <<
"\n";
186 str << indentation <<
"coordUnitsY=" << coordUnitsNonPolarThetaToString (m_coordUnitsY) <<
"\n";
187 str << indentation <<
"coordUnitsTheta=" << coordUnitsPolarThetaToString (m_coordUnitsTheta) <<
"\n";
188 str << indentation <<
"coordUnitsRadius=" << coordUnitsNonPolarThetaToString (m_coordUnitsRadius) <<
"\n";
189 str << indentation <<
"coordUnitsDate=" << coordUnitsDateToString (m_coordUnitsDate) <<
"\n";
190 str << indentation <<
"coordUnitsTime=" << coordUnitsTimeToString (m_coordUnitsTime) <<
"\n";
195 LOG4CPP_INFO_S ((*mainCat)) <<
"DocumentModelCoords::saveXml";
197 writer.writeStartElement(DOCUMENT_SERIALIZE_COORDS);
198 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_TYPE, QString::number (m_coordsType));
199 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_TYPE_STRING, coordsTypeToString (m_coordsType));
200 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_ORIGIN_RADIUS, QString::number (m_originRadius));
201 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_X_THETA, QString::number (m_coordScaleXTheta));
202 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_X_THETA_STRING, coordScaleToString (m_coordScaleXTheta));
203 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_Y_RADIUS, QString::number (m_coordScaleYRadius));
204 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_Y_RADIUS_STRING, coordScaleToString (m_coordScaleYRadius));
205 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_X, QString::number (m_coordUnitsX));
206 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_X_STRING, coordUnitsNonPolarThetaToString (m_coordUnitsX));
207 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_Y, QString::number (m_coordUnitsY));
208 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_Y_STRING, coordUnitsNonPolarThetaToString (m_coordUnitsY));
209 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_THETA, QString::number (m_coordUnitsTheta));
210 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_THETA_STRING, coordUnitsPolarThetaToString (m_coordUnitsTheta));
211 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_RADIUS, QString::number (m_coordUnitsRadius));
212 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_RADIUS_STRING, coordUnitsNonPolarThetaToString (m_coordUnitsRadius));
213 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_DATE, QString::number (m_coordUnitsDate));
214 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_DATE_STRING, coordUnitsDateToString (m_coordUnitsDate));
215 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_TIME, QString::number (m_coordUnitsTime));
216 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_TIME_STRING, coordUnitsTimeToString (m_coordUnitsTime));
217 writer.writeEndElement();
222 m_coordScaleXTheta = coordScale;
227 m_coordScaleYRadius = coordScale;
237 m_coordUnitsDate = coordUnits;
242 m_coordUnitsRadius = coordUnits;
247 m_coordUnitsTheta = coordUnits;
252 m_coordUnitsTime = coordUnits;
257 m_coordUnitsX = coordUnits;
262 m_coordUnitsY = coordUnits;
272 switch (m_coordUnitsTheta) {
273 case COORD_UNITS_POLAR_THETA_DEGREES:
274 case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES:
275 case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS:
276 case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW:
279 case COORD_UNITS_POLAR_THETA_GRADIANS:
282 case COORD_UNITS_POLAR_THETA_RADIANS:
285 case COORD_UNITS_POLAR_THETA_TURNS:
292 LOG4CPP_ERROR_S ((*mainCat)) <<
"DocumentModelCoords::thetaPeriod";
294 ENGAUGE_ASSERT(
false);
void setCoordUnitsTime(CoordUnitsTime coordUnits)
Set method for time units.
void setCoordUnitsDate(CoordUnitsDate coordUnits)
Set method for date units.
void setCoordUnitsY(CoordUnitsNonPolarTheta coordUnits)
Set method for y units.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
void setCoordUnitsX(CoordUnitsNonPolarTheta coordUnits)
Set method for x units.
CoordScale coordScaleYRadius() const
Get method for linear/log scale on y/radius.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
double originRadius() const
Get method for origin radius in polar mode.
void setCoordScaleYRadius(CoordScale coordScale)
Set method for linear/log scale on y/radius.
CoordUnitsNonPolarTheta coordUnitsRadius() const
Get method for radius units.
CoordUnitsTime coordUnitsTime() const
Get method for time format when used.
DocumentModelCoords & operator=(const DocumentModelCoords &other)
Assignment constructor.
DocumentModelCoords()
Default constructor.
double thetaPeriod() const
Return the period of the theta value for polar coordinates, consistent with CoordThetaUnits.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
CoordUnitsNonPolarTheta coordUnitsY() const
Get method for x units.
CoordScale coordScaleXTheta() const
Get method for linear/log scale on x/theta.
void setCoordUnitsTheta(CoordUnitsPolarTheta coordUnits)
Set method for theta units.
CoordsType coordsType() const
Get method for coordinates type.
CoordUnitsNonPolarTheta coordUnitsX() const
Get method for x units.
Model for DlgSettingsCoords and CmdSettingsCoords.
void setOriginRadius(double originRadius)
Set method for origin radius in polar mode.
Storage of one imported image and the data attached to that image.
CoordUnitsDate coordUnitsDate() const
Get method for date format when used.
void setCoordUnitsRadius(CoordUnitsNonPolarTheta coordUnits)
Set method for radius units.
void setCoordScaleXTheta(CoordScale coordScale)
Set method for linear/log scale on x/theta.
CoordUnitsPolarTheta coordUnitsTheta() const
Get method for theta unit.
void setCoordsType(CoordsType coordsType)
Set method for coordinates type.