00001 /****************************************************************************************************** 00002 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released * 00003 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file * 00004 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. * 00005 ******************************************************************************************************/ 00006 00007 #ifndef DOCUMENT_MODEL_COORDS_H 00008 #define DOCUMENT_MODEL_COORDS_H 00009 00010 #include "CoordScale.h" 00011 #include "CoordsType.h" 00012 #include "CoordUnitsNonPolarTheta.h" 00013 #include "CoordUnitsPolarTheta.h" 00014 #include "DocumentModelAbstractBase.h" 00015 00016 class Document; 00017 class QTextStream; 00018 00020 class DocumentModelCoords : public DocumentModelAbstractBase 00021 { 00022 public: 00024 DocumentModelCoords(); 00025 00027 DocumentModelCoords(const Document &document); 00028 00030 DocumentModelCoords(const DocumentModelCoords &other); 00031 00033 DocumentModelCoords &operator=(const DocumentModelCoords &other); 00034 00036 CoordScale coordScaleXTheta () const; 00037 00039 CoordScale coordScaleYRadius () const; 00040 00042 CoordsType coordsType () const; 00043 00045 CoordUnitsDate coordUnitsDate () const; 00046 00048 CoordUnitsNonPolarTheta coordUnitsRadius () const; 00049 00051 CoordUnitsPolarTheta coordUnitsTheta () const; 00052 00054 CoordUnitsTime coordUnitsTime () const; 00055 00057 CoordUnitsNonPolarTheta coordUnitsX () const; 00058 00060 CoordUnitsNonPolarTheta coordUnitsY () const; 00061 00062 virtual void loadXml(QXmlStreamReader &reader); 00063 00065 double originRadius () const; 00066 00068 void printStream (QString indentation, 00069 QTextStream &str) const; 00070 00071 virtual void saveXml(QXmlStreamWriter &writer) const; 00072 00074 void setCoordScaleXTheta (CoordScale coordScale); 00075 00077 void setCoordScaleYRadius (CoordScale coordScale); 00078 00080 void setCoordsType (CoordsType coordsType); 00081 00083 void setCoordUnitsDate (CoordUnitsDate coordUnits); 00084 00086 void setCoordUnitsRadius (CoordUnitsNonPolarTheta coordUnits); 00087 00089 void setCoordUnitsTheta (CoordUnitsPolarTheta coordUnits); 00090 00092 void setCoordUnitsTime (CoordUnitsTime coordUnits); 00093 00095 void setCoordUnitsX (CoordUnitsNonPolarTheta coordUnits); 00096 00098 void setCoordUnitsY (CoordUnitsNonPolarTheta coordUnits); 00099 00101 void setOriginRadius (double originRadius); 00102 00104 double thetaPeriod () const; 00105 00106 private: 00107 00108 CoordsType m_coordsType; 00109 double m_originRadius; // Applies to polar coordinates. Usually zero 00110 CoordScale m_coordScaleXTheta; 00111 CoordScale m_coordScaleYRadius; 00112 CoordUnitsNonPolarTheta m_coordUnitsX; // Applies to x for cartesian coordinates 00113 CoordUnitsNonPolarTheta m_coordUnitsY; // Applies to y for cartesian coordinates 00114 CoordUnitsPolarTheta m_coordUnitsTheta; // Applies to theta for polar coordinates 00115 CoordUnitsNonPolarTheta m_coordUnitsRadius; // Applies to radius for polar coordinates 00116 CoordUnitsDate m_coordUnitsDate; // Applies to date/time coordinates 00117 CoordUnitsTime m_coordUnitsTime; 00118 }; 00119 00120 #endif // DOCUMENT_MODEL_COORDS_H