00001
00002
00003
00004
00005
00006
00007 #ifndef DOCUMENT_H
00008 #define DOCUMENT_H
00009
00010 #include "CoordSystemContext.h"
00011 #include "CoordSystemIndex.h"
00012 #include "CurvesGraphs.h"
00013 #include "CurveStyles.h"
00014 #include "DocumentAxesPointsRequired.h"
00015 #include "DocumentModelAxesChecker.h"
00016 #include "DocumentModelColorFilter.h"
00017 #include "DocumentModelCoords.h"
00018 #include "DocumentModelDigitizeCurve.h"
00019 #include "DocumentModelExportFormat.h"
00020 #include "DocumentModelGeneral.h"
00021 #include "DocumentModelGridDisplay.h"
00022 #include "DocumentModelGridRemoval.h"
00023 #include "DocumentModelPointMatch.h"
00024 #include "DocumentModelSegments.h"
00025 #include "PointStyle.h"
00026 #include <QList>
00027 #include <QPixmap>
00028 #include <QString>
00029 #include <QXmlStreamReader>
00030
00031 class CoordSystem;
00032 class Curve;
00033 class QByteArray;
00034 class QFile;
00035 class QImage;
00036 class QTransform;
00037 class QXmlStreamWriter;
00038 class Transformation;
00039
00041 class Document
00042 {
00043 public:
00045 Document (const QImage &image);
00046
00048 Document (const QString &fileName);
00049
00052 void addCoordSystems(unsigned int numberCoordSystemToAdd);
00053
00055 void addGraphCurveAtEnd (const QString &curveName);
00056
00063 void addPointAxisWithGeneratedIdentifier (const QPointF &posScreen,
00064 const QPointF &posGraph,
00065 QString &identifier,
00066 double ordinal,
00067 bool isXOnly);
00068
00075 void addPointAxisWithSpecifiedIdentifier (const QPointF &posScreen,
00076 const QPointF &posGraph,
00077 const QString &identifier,
00078 double ordinal,
00079 bool isXOnly);
00080
00082 void addPointGraphWithGeneratedIdentifier (const QString &curveName,
00083 const QPointF &posScreen,
00084 QString &generatedIentifier,
00085 double ordinal);
00086
00088 void addPointGraphWithSpecifiedIdentifier (const QString &curveName,
00089 const QPointF &posScreen,
00090 const QString &identifier,
00091 double ordinal);
00092
00094 void addPointsInCurvesGraphs (CurvesGraphs &curvesGraphs);
00095
00104 void addScaleWithGeneratedIdentifier (const QPointF &posScreen0,
00105 const QPointF &posScreen1,
00106 double scaleLength,
00107 QString &identifier0,
00108 QString &identifier1,
00109 double ordinal0,
00110 double ordinal1);
00111
00113 void checkAddPointAxis (const QPointF &posScreen,
00114 const QPointF &posGraph,
00115 bool &isError,
00116 QString &errorMessage,
00117 bool isXOnly);
00118
00120 void checkEditPointAxis (const QString &pointIdentifier,
00121 const QPointF &posScreen,
00122 const QPointF &posGraph,
00123 bool &isError,
00124 QString &errorMessage);
00125
00127 const CoordSystem &coordSystem() const;
00128
00130 unsigned int coordSystemCount() const;
00131
00133 CoordSystemIndex coordSystemIndex() const;
00134
00136 const Curve &curveAxes () const;
00137
00139 const Curve *curveForCurveName (const QString &curveName) const;
00140
00142 const CurvesGraphs &curvesGraphs () const;
00143
00145 QStringList curvesGraphsNames () const;
00146
00148 int curvesGraphsNumPoints (const QString &curveName) const;
00149
00151 DocumentAxesPointsRequired documentAxesPointsRequired () const;
00152
00154 void editPointAxis (const QPointF &posGraph,
00155 const QString &identifier);
00156
00158 void editPointGraph (bool isX,
00159 bool isY,
00160 double x,
00161 double y,
00162 const QStringList &identifiers,
00163 const Transformation &transformation);
00164
00166 void initializeGridDisplay (const Transformation &transformation);
00167
00169 bool isXOnly (const QString &pointIdentifier) const;
00170
00172 void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
00173
00175 void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
00176
00178 void iterateThroughCurveSegments (const QString &curveName,
00179 const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
00180
00182 void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
00183
00185 void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
00186
00188 bool loadCurvesFile (const QString &curvesFile);
00189
00191 DocumentModelAxesChecker modelAxesChecker() const;
00192
00194 DocumentModelColorFilter modelColorFilter() const;
00195
00197 DocumentModelCoords modelCoords () const;
00198
00200 CurveStyles modelCurveStyles() const;
00201
00203 DocumentModelDigitizeCurve modelDigitizeCurve() const;
00204
00206 DocumentModelExportFormat modelExport() const;
00207
00209 DocumentModelGeneral modelGeneral() const;
00210
00212 DocumentModelGridDisplay modelGridDisplay() const;
00213
00215 DocumentModelGridRemoval modelGridRemoval() const;
00216
00218 DocumentModelPointMatch modelPointMatch() const;
00219
00221 DocumentModelSegments modelSegments() const;
00222
00224 void movePoint (const QString &pointIdentifier,
00225 const QPointF &deltaScreen);
00226
00228 int nextOrdinalForCurve (const QString &curveName) const;
00229
00231 QPixmap pixmap () const;
00232
00234 QPointF positionGraph (const QString &pointIdentifier) const;
00235
00237 QPointF positionScreen (const QString &pointIdentifier) const;
00238
00240 void print () const;
00241
00243 void printStream (QString indentation,
00244 QTextStream &str) const;
00245
00247 QString reasonForUnsuccessfulRead () const;
00248
00250 void removePointAxis (const QString &identifier);
00251
00253 void removePointGraph (const QString &identifier);
00254
00256 void removePointsInCurvesGraphs (CurvesGraphs &curvesGraphs);
00257
00259 void saveXml (QXmlStreamWriter &writer) const;
00260
00262 QString selectedCurveName () const;
00263
00265 void setCoordSystemIndex(CoordSystemIndex coordSystemIndex);
00266
00268 void setCurveAxes (const Curve &curveAxes);
00269
00271 void setCurvesGraphs (const CurvesGraphs &curvesGraphs);
00272
00275 void setDocumentAxesPointsRequired (DocumentAxesPointsRequired documentAxesPointsRequired);
00276
00278 void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
00279
00281 void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter);
00282
00284 void setModelCoords (const DocumentModelCoords &modelCoords);
00285
00287 void setModelCurveStyles(const CurveStyles &modelCurveStyles);
00288
00290 void setModelDigitizeCurve (const DocumentModelDigitizeCurve &modelDigitizeCurve);
00291
00293 void setModelExport(const DocumentModelExportFormat &modelExport);
00294
00296 void setModelGeneral (const DocumentModelGeneral &modelGeneral);
00297
00299 void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay);
00300
00302 void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
00303
00305 void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch);
00306
00308 void setModelSegments(const DocumentModelSegments &modelSegments);
00309
00311 void setPixmap (const QImage &image);
00312
00314 void setSelectedCurveName (const QString &selectedCurveName);
00315
00317 bool successfulRead () const;
00318
00321 void updatePointOrdinals (const Transformation &transformation);
00322
00323 private:
00324 Document ();
00325
00326 bool bytesIndicatePreVersion6 (const QByteArray &bytes) const;
00327 Curve *curveForCurveName (const QString &curveName);
00328 void generateEmptyPixmap(const QXmlStreamAttributes &attributes);
00329 void loadImage(QXmlStreamReader &reader);
00330 void loadPreVersion6 (QDataStream &str);
00331 void loadVersion6 (QFile *file);
00332 void loadVersions7AndUp (QFile *file);
00333 void overrideGraphDefaultsWithMapDefaults ();
00334 int versionFromFile (QFile *file) const;
00335
00336
00337 QString m_name;
00338 QPixmap m_pixmap;
00339
00340
00341 DocumentAxesPointsRequired m_documentAxesPointsRequired;
00342
00343
00344 bool m_successfulRead;
00345 QString m_reasonForUnsuccessfulRead;
00346
00347 CoordSystemContext m_coordSystemContext;
00348 };
00349
00350 #endif // DOCUMENT_H