7 #include "CmdMediator.h" 8 #include "CoordUnitsDate.h" 9 #include "CoordUnitsTime.h" 10 #include "DocumentModelCoords.h" 11 #include "DocumentSerialize.h" 12 #include "EngaugeAssert.h" 15 #include <QTextStream> 16 #include "QtToString.h" 17 #include <QXmlStreamWriter> 20 const double PI = 3.1415926535;
21 const double TWO_PI = 2.0 * PI;
25 const double DEFAULT_ORIGIN_RADIUS_LINEAR = 0.0;
28 m_coordsType (COORDS_TYPE_CARTESIAN),
29 m_originRadius (DEFAULT_ORIGIN_RADIUS_LINEAR),
30 m_coordScaleXTheta (COORD_SCALE_LINEAR),
31 m_coordScaleYRadius (COORD_SCALE_LINEAR),
32 m_coordUnitsX (COORD_UNITS_NON_POLAR_THETA_NUMBER),
33 m_coordUnitsY (COORD_UNITS_NON_POLAR_THETA_NUMBER),
34 m_coordUnitsTheta (COORD_UNITS_POLAR_THETA_DEGREES),
35 m_coordUnitsRadius (COORD_UNITS_NON_POLAR_THETA_NUMBER),
36 m_coordUnitsDate (COORD_UNITS_DATE_YEAR_MONTH_DAY),
37 m_coordUnitsTime (COORD_UNITS_TIME_HOUR_MINUTE_SECOND)
42 m_coordsType (document.modelCoords().
coordsType()),
46 m_coordUnitsX(document.modelCoords().
coordUnitsX()),
47 m_coordUnitsY(document.modelCoords().
coordUnitsY()),
87 return m_coordScaleXTheta;
92 return m_coordScaleYRadius;
102 return m_coordUnitsDate;
107 return m_coordUnitsRadius;
112 return m_coordUnitsTheta;
117 return m_coordUnitsTime;
122 return m_coordUnitsX;
127 return m_coordUnitsY;
132 LOG4CPP_INFO_S ((*mainCat)) <<
"DocumentModelCoords::loadXml";
136 QXmlStreamAttributes attributes = reader.attributes();
138 if (attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_TYPE) &&
139 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_ORIGIN_RADIUS) &&
140 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_X_THETA) &&
141 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_Y_RADIUS) &&
142 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_X) &&
143 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_Y) &&
144 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_THETA) &&
145 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_RADIUS) &&
146 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_DATE) &&
147 attributes.hasAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_TIME)) {
149 setCoordsType ((CoordsType) attributes.value(DOCUMENT_SERIALIZE_COORDS_TYPE).toInt());
150 setOriginRadius (attributes.value(DOCUMENT_SERIALIZE_COORDS_ORIGIN_RADIUS).toDouble());
151 setCoordScaleXTheta ((CoordScale) attributes.value(DOCUMENT_SERIALIZE_COORDS_SCALE_X_THETA).toInt());
152 setCoordScaleYRadius ((CoordScale) attributes.value(DOCUMENT_SERIALIZE_COORDS_SCALE_Y_RADIUS).toInt());
153 setCoordUnitsX ((CoordUnitsNonPolarTheta) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_X).toInt());
154 setCoordUnitsY ((CoordUnitsNonPolarTheta) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_Y).toInt());
155 setCoordUnitsTheta ((CoordUnitsPolarTheta) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_THETA).toInt());
156 setCoordUnitsRadius ((CoordUnitsNonPolarTheta) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_RADIUS).toInt());
157 setCoordUnitsDate ((CoordUnitsDate) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_DATE).toInt());
158 setCoordUnitsTime ((CoordUnitsTime) attributes.value(DOCUMENT_SERIALIZE_COORDS_UNITS_TIME).toInt());
161 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
162 (reader.name() != DOCUMENT_SERIALIZE_COORDS)){
163 loadNextFromReader(reader);
164 if (reader.atEnd()) {
172 reader.raiseError (QObject::tr (
"Cannot read coordinates data"));
178 return m_originRadius;
182 QTextStream &str)
const 184 str << indentation <<
"DocumentModelCoords\n";
186 indentation += INDENTATION_DELTA;
188 str << indentation <<
"coordsType=" << coordsTypeToString (m_coordsType) <<
"\n";
189 str << indentation <<
"originRadius=" << m_originRadius <<
"\n";
190 str << indentation <<
"coordScaleXTheta=" << coordScaleToString (m_coordScaleXTheta) <<
"\n";
191 str << indentation <<
"coordScaleYRadius=" << coordScaleToString (m_coordScaleYRadius) <<
"\n";
192 str << indentation <<
"coordUnitsX=" << coordUnitsNonPolarThetaToString (m_coordUnitsX) <<
"\n";
193 str << indentation <<
"coordUnitsY=" << coordUnitsNonPolarThetaToString (m_coordUnitsY) <<
"\n";
194 str << indentation <<
"coordUnitsTheta=" << coordUnitsPolarThetaToString (m_coordUnitsTheta) <<
"\n";
195 str << indentation <<
"coordUnitsRadius=" << coordUnitsNonPolarThetaToString (m_coordUnitsRadius) <<
"\n";
196 str << indentation <<
"coordUnitsDate=" << coordUnitsDateToString (m_coordUnitsDate) <<
"\n";
197 str << indentation <<
"coordUnitsTime=" << coordUnitsTimeToString (m_coordUnitsTime) <<
"\n";
202 LOG4CPP_INFO_S ((*mainCat)) <<
"DocumentModelCoords::saveXml";
204 writer.writeStartElement(DOCUMENT_SERIALIZE_COORDS);
205 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_TYPE, QString::number (m_coordsType));
206 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_TYPE_STRING, coordsTypeToString (m_coordsType));
207 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_ORIGIN_RADIUS, QString::number (m_originRadius));
208 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_X_THETA, QString::number (m_coordScaleXTheta));
209 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_X_THETA_STRING, coordScaleToString (m_coordScaleXTheta));
210 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_Y_RADIUS, QString::number (m_coordScaleYRadius));
211 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_SCALE_Y_RADIUS_STRING, coordScaleToString (m_coordScaleYRadius));
212 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_X, QString::number (m_coordUnitsX));
213 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_X_STRING, coordUnitsNonPolarThetaToString (m_coordUnitsX));
214 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_Y, QString::number (m_coordUnitsY));
215 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_Y_STRING, coordUnitsNonPolarThetaToString (m_coordUnitsY));
216 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_THETA, QString::number (m_coordUnitsTheta));
217 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_THETA_STRING, coordUnitsPolarThetaToString (m_coordUnitsTheta));
218 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_RADIUS, QString::number (m_coordUnitsRadius));
219 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_RADIUS_STRING, coordUnitsNonPolarThetaToString (m_coordUnitsRadius));
220 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_DATE, QString::number (m_coordUnitsDate));
221 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_DATE_STRING, coordUnitsDateToString (m_coordUnitsDate));
222 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_TIME, QString::number (m_coordUnitsTime));
223 writer.writeAttribute(DOCUMENT_SERIALIZE_COORDS_UNITS_TIME_STRING, coordUnitsTimeToString (m_coordUnitsTime));
224 writer.writeEndElement();
229 m_coordScaleXTheta = coordScale;
234 m_coordScaleYRadius = coordScale;
244 m_coordUnitsDate = coordUnits;
249 m_coordUnitsRadius = coordUnits;
254 m_coordUnitsTheta = coordUnits;
259 m_coordUnitsTime = coordUnits;
264 m_coordUnitsX = coordUnits;
269 m_coordUnitsY = coordUnits;
279 switch (m_coordUnitsTheta) {
280 case COORD_UNITS_POLAR_THETA_DEGREES:
281 case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES:
282 case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS:
283 case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW:
286 case COORD_UNITS_POLAR_THETA_GRADIANS:
289 case COORD_UNITS_POLAR_THETA_RADIANS:
292 case COORD_UNITS_POLAR_THETA_TURNS:
299 LOG4CPP_ERROR_S ((*mainCat)) <<
"DocumentModelCoords::thetaPeriod";
301 ENGAUGE_ASSERT(
false);
void setCoordUnitsTime(CoordUnitsTime coordUnits)
Set method for time units.
void setCoordUnitsDate(CoordUnitsDate coordUnits)
Set method for date units.
CoordUnitsNonPolarTheta coordUnitsRadius() const
Get method for radius 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.
void setCoordScaleYRadius(CoordScale coordScale)
Set method for linear/log scale on y/radius.
CoordUnitsNonPolarTheta coordUnitsY() const
Get method for x units.
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.
CoordUnitsPolarTheta coordUnitsTheta() const
Get method for theta unit.
DocumentModelCoords & operator=(const DocumentModelCoords &other)
Assignment constructor.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
DocumentModelCoords()
Default constructor.
CoordUnitsTime coordUnitsTime() const
Get method for time format when used.
CoordScale coordScaleXTheta() const
Get method for linear/log scale on x/theta.
void setCoordUnitsTheta(CoordUnitsPolarTheta coordUnits)
Set method for theta units.
CoordUnitsDate coordUnitsDate() const
Get method for date format when used.
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.
void setCoordUnitsRadius(CoordUnitsNonPolarTheta coordUnits)
Set method for radius units.
CoordScale coordScaleYRadius() const
Get method for linear/log scale on y/radius.
CoordsType coordsType() const
Get method for coordinates type.
CoordUnitsNonPolarTheta coordUnitsX() const
Get method for x units.
double originRadius() const
Get method for origin radius in polar mode.
void setCoordScaleXTheta(CoordScale coordScale)
Set method for linear/log scale on x/theta.
void setCoordsType(CoordsType coordsType)
Set method for coordinates type.