Warning, file /office/calligra/filters/karbon/xfig/XFigDocument.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*  This file is part of the Calligra project, made within the KDE community.
0002 
0003     SPDX-FileCopyrightText: 2012 Friedrich W. H. Kossebau <kossebau@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef XFIGDOCUMENT_H
0009 #define XFIGDOCUMENT_H
0010 
0011 // Qt
0012 #include <QHash>
0013 #include <QVector>
0014 #include <QColor>
0015 #include <QString>
0016 #include <QFont>
0017 
0018 typedef qint32 XFigCoord;
0019 
0020 
0021 enum XFigCapType {
0022     XFigCapButt,
0023     XFigCapRound,
0024     XFigCapProjecting
0025 };
0026 
0027 enum XFigJoinType {
0028     XFigJoinMiter,
0029     XFigJoinRound,
0030     XFigJoinBevel
0031 };
0032 
0033 struct XFigPoint
0034 {
0035 public:
0036     XFigPoint() : m_X(0), m_Y(0) {}
0037     XFigPoint( XFigCoord x, XFigCoord y ) : m_X(x), m_Y(y) {}
0038 
0039     XFigCoord x() const { return m_X; }
0040     XFigCoord y() const { return m_Y; }
0041 private:
0042     XFigCoord m_X;
0043     XFigCoord m_Y;
0044 };
0045 
0046 enum XFigArrowHeadType
0047 {
0048     XFigArrowHeadStick = 0, ///>  -->
0049     XFigArrowHeadHollowTriangle, ///>  --|>
0050     XFigArrowHeadFilledTriangle, ///>  --|>
0051     XFigArrowHeadHollowConcaveSpear, ///>  --}>
0052     XFigArrowHeadFilledConcaveSpear, ///>  --}>
0053     XFigArrowHeadHollowConvexSpear, ///> --{>
0054     XFigArrowHeadFilledConvexSpear, ///> --{>
0055     XFigArrowHeadHollowDiamond, ///> --<>
0056     XFigArrowHeadFilledDiamond, ///> --<>
0057     XFigArrowHeadHollowCircle, ///> --()
0058     XFigArrowHeadFilledCircle, ///> --()
0059     XFigArrowHeadHollowHalfCircle, ///> --(|
0060     XFigArrowHeadFilledHalfCircle, ///> --(|
0061     XFigArrowHeadHollowSquare, ///> --[]
0062     XFigArrowHeadFilledSquare, ///> --[]
0063     XFigArrowHeadHollowReverseTriangle, ///> --<|
0064     XFigArrowHeadFilledReverseTriangle, ///> --<|
0065     XFigArrowHeadTopHalfFilledConcaveSpear,
0066     XFigArrowHeadBottomHalfFilledConcaveSpear,
0067     XFigArrowHeadHollowTopHalfTriangle,
0068     XFigArrowHeadFilledTopHalfTriangle,
0069     XFigArrowHeadHollowTopHalfConcaveSpear,
0070     XFigArrowHeadFilledTopHalfConcaveSpear,
0071     XFigArrowHeadHollowTopHalfConvexSpear,
0072     XFigArrowHeadFilledTopHalfConvexSpear,
0073     XFigArrowHeadWye, ///> --<
0074     XFigArrowHeadBar, ///> --|
0075     XFigArrowHeadTwoProngFork, ///> --[
0076     XFigArrowHeadReverseTwoProngFork, ///> --]
0077     XFigArrowHeadTypeCount
0078 };
0079 
0080 class XFigArrowHead
0081 {
0082 public:
0083     XFigArrowHead()
0084     : m_Type(XFigArrowHeadStick), m_Thickness(0.0), m_Width(0.0), m_Length(0.0)
0085     {}
0086 
0087     void setType(XFigArrowHeadType type) { m_Type = type; }
0088     void setThickness(double thickness) { m_Thickness = thickness; }
0089     void setSize(double width, double length) { m_Width = width; m_Length = length; }
0090 
0091     XFigArrowHeadType type() const { return m_Type; }
0092     double thickness() const { return m_Thickness; }
0093     double width() const { return m_Width; }
0094     double length() const { return m_Length; }
0095 private:
0096     XFigArrowHeadType m_Type;
0097     double m_Thickness;
0098     double m_Width;
0099     double m_Length;
0100 };
0101 
0102 class XFigAbstractObject
0103 {
0104 public:
0105     enum TypeId
0106     {
0107         EllipseId,
0108         PolylineId,
0109         PolygonId,
0110         BoxId,
0111         PictureBoxId,
0112         SplineId,
0113         ArcId,
0114         TextId,
0115         CompoundId
0116     };
0117 
0118 protected:
0119     explicit XFigAbstractObject(TypeId typeId) : m_TypeId( typeId ) {}
0120 private:
0121     XFigAbstractObject( const XFigAbstractObject& );
0122     XFigAbstractObject& operator=( const XFigAbstractObject& );
0123 public:
0124     virtual ~XFigAbstractObject() {}
0125 
0126     void setComment(const QString& comment) { m_Comment = comment; }
0127 
0128     TypeId typeId() const { return m_TypeId; }
0129     const QString& comment() const { return m_Comment; }
0130 private:
0131     TypeId m_TypeId;
0132     QString m_Comment;
0133 };
0134 
0135 enum XFigFillType {
0136     XFigFillNone,
0137     XFigFillSolid,
0138     XFigFillPattern
0139 };
0140 
0141 
0142 enum XFigFillPatternType
0143 {
0144     XFigFillLeftDiagonal30Degree,
0145     XFigFillRightDiagonal30Degree,
0146     XFigFillCrossHatch30Degree,
0147     XFigFillLeftDiagonal45Degree,
0148     XFigFillRightDiagonal45Degree,
0149     XFigFillCrossHatch45Degree,
0150     XFigFillHorizontalBricks,
0151     XFigFillVerticalBricks,
0152     XFigFillHorizontalLines,
0153     XFigFillVerticalLines,
0154     XFigFillCrossHatch,
0155     XFigFillHorizontalShinglesSkewedRight,
0156     XFigFillHorizontalShinglesSkewedLeft,
0157     XFigFillVerticalShinglesSkewedDown,
0158     XFigFillVerticalShinglesSkewedUp,
0159     XFigFillFishScales,
0160     XFigFillSmallFishScales,
0161     XFigFillCircles,
0162     XFigFillHexagons,
0163     XFigFillOctagons,
0164     XFigFillHorizontalTireTreads,
0165     XFigFillVerticalTireTreads
0166 };
0167 
0168 class XFigFillable
0169 {
0170 protected:
0171     XFigFillable() : mFillType(XFigFillNone) {}
0172 public:
0173     void setFillColorId(qint32 colorId) { mFillColorId = colorId; }
0174     void setFillPatternType(XFigFillPatternType patternType)
0175     { mFillType = XFigFillPattern; mPatternType = patternType; }
0176     void setFillTinting(qint32 tinting)
0177     { mFillType = XFigFillSolid; mTinting = tinting; }
0178     void setFillNone()
0179     { mFillType = XFigFillNone; }
0180 
0181     qint32 fillColorId() const { return mFillColorId; }
0182     XFigFillType fillType() const { return mFillType; }
0183     XFigFillPatternType fillPatternType() const { return mPatternType; }
0184     qint32 fillTinting() const { return mTinting; }
0185 private:
0186     qint32 mFillColorId;
0187     XFigFillType mFillType;
0188     union {
0189         XFigFillPatternType mPatternType;
0190         qint32 mTinting;
0191     };
0192 };
0193 
0194 class XFigAbstractGraphObject : public XFigAbstractObject
0195 {
0196 protected:
0197     explicit XFigAbstractGraphObject(TypeId typeId)
0198     : XFigAbstractObject( typeId ) {}
0199 public:
0200     void setDepth( qint32 depth ) { m_Depth = depth; }
0201 
0202     qint32 depth() const { return m_Depth; }
0203 private:
0204     qint32 m_Depth;
0205 };
0206 
0207 enum XFigLineType
0208 {
0209     XFigLineDefault = -1,
0210     XFigLineSolid = 0,
0211     XFigLineDashed = 1,
0212     XFigLineDotted = 2,
0213     XFigLineDashDotted = 3,
0214     XFigLineDashDoubleDotted = 4,
0215     XFigLineDashTrippleDotted = 5
0216 };
0217 
0218 class XFigLineable
0219 {
0220 protected:
0221     XFigLineable() {}
0222 public:
0223     void setLine( XFigLineType type, qint32 thickness, float styleValue, qint32 colorId  )
0224     { m_Type = type; m_Thickness = thickness; m_StyleValue = styleValue; m_ColorId = colorId; }
0225 
0226     XFigLineType lineType() const { return m_Type; }
0227     qint32 lineThickness() const { return m_Thickness; }
0228     float lineStyleValue() const { return m_StyleValue; }
0229     qint32 lineColorId() const { return m_ColorId; }
0230 private:
0231     XFigLineType m_Type;
0232     qint32 m_Thickness;
0233     float m_StyleValue;
0234     qint32 m_ColorId;
0235 };
0236 
0237 class XFigLineEndable
0238 {
0239 protected:
0240     XFigLineEndable() : m_ForwardArrow(0), m_BackwardArrow(0), m_CapType(XFigCapButt) {}
0241 public:
0242     ~XFigLineEndable() { delete m_ForwardArrow; delete m_BackwardArrow; }
0243 
0244     void setForwardArrow( XFigArrowHead* forwardArrow ) { delete m_ForwardArrow; m_ForwardArrow = forwardArrow; }
0245     void setBackwardArrow( XFigArrowHead* backwardArrow ) { delete m_BackwardArrow; m_BackwardArrow = backwardArrow; }
0246     void setCapType(XFigCapType capType) { m_CapType = capType; }
0247 
0248     const XFigArrowHead* forwardArrow() const { return m_ForwardArrow; }
0249     const XFigArrowHead* backwardArrow() const { return m_BackwardArrow; }
0250     XFigCapType capType() const { return m_CapType; }
0251 private:
0252     XFigArrowHead* m_ForwardArrow;
0253     XFigArrowHead* m_BackwardArrow;
0254     XFigCapType m_CapType;
0255 };
0256 
0257 class XFigEllipseObject : public XFigAbstractGraphObject, public XFigFillable, public XFigLineable
0258 {
0259 public:
0260     enum Subtype { EllipseByRadii, EllipseByDiameter, CircleByRadius, CircleByDiameter };
0261 
0262     XFigEllipseObject() : XFigAbstractGraphObject(EllipseId), m_Subtype(EllipseByRadii)  {}
0263 
0264     void setSubtype( Subtype subtype ) { m_Subtype = subtype; }
0265     void setCenterPoint( XFigPoint centerPoint ) { m_CenterPoint = centerPoint; }
0266     void setStartEnd( XFigPoint startPoint, XFigPoint endPoint ) { m_StartPoint = startPoint; m_EndPoint = endPoint; }
0267     void setRadii( qint32 xRadius, qint32 yRadius ) { m_XRadius = xRadius; m_YRadius = yRadius; }
0268     void setXAxisAngle( double xAxisAngle ) { m_XAxisAngle = xAxisAngle; }
0269 
0270     Subtype subtype() const { return m_Subtype; }
0271     XFigPoint centerPoint() const { return m_CenterPoint; }
0272     XFigPoint startPoint() const { return m_StartPoint; }
0273     XFigPoint endPoint() const { return m_EndPoint; }
0274     qint32 xRadius() const { return m_XRadius; }
0275     qint32 yRadius() const { return m_YRadius; }
0276     double xAxisAngle() const { return m_XAxisAngle; }
0277 private:
0278     Subtype m_Subtype;
0279     XFigPoint m_CenterPoint;
0280     XFigPoint m_StartPoint;
0281     XFigPoint m_EndPoint;
0282     qint32 m_XRadius;
0283     qint32 m_YRadius;
0284     double m_XAxisAngle;
0285 };
0286 
0287 class XFigAbstractPolylineObject : public XFigAbstractGraphObject, public XFigFillable, public XFigLineable
0288 {
0289 protected:
0290     explicit XFigAbstractPolylineObject(TypeId typeId)
0291     : XFigAbstractGraphObject( typeId ), m_JoinType(XFigJoinMiter)
0292     {}
0293 public:
0294     virtual void setPoints(const QVector<XFigPoint>& points) = 0;
0295 
0296     void setJoinType(XFigJoinType joinType) { m_JoinType = joinType; }
0297 
0298     XFigJoinType joinType() const { return m_JoinType; }
0299 private:
0300     XFigJoinType m_JoinType;
0301 };
0302 
0303 class XFigPolylineObject : public XFigAbstractPolylineObject, public XFigLineEndable
0304 {
0305 public:
0306     XFigPolylineObject()
0307     : XFigAbstractPolylineObject(PolylineId)
0308     {}
0309 
0310     void setPoints(const QVector<XFigPoint>& points) override { m_Points = points; }
0311 
0312     const QVector<XFigPoint>& points() const { return m_Points; }
0313 private:
0314     QVector<XFigPoint> m_Points;
0315 };
0316 
0317 class XFigPolygonObject : public XFigAbstractPolylineObject
0318 {
0319 public:
0320     XFigPolygonObject() : XFigAbstractPolylineObject(PolygonId) {}
0321 
0322     void setPoints(const QVector<XFigPoint>& points) override { m_Points = points; }
0323 
0324     const QVector<XFigPoint>& points() const { return m_Points; }
0325 private:
0326     QVector<XFigPoint> m_Points;
0327 };
0328 
0329 class XFigBoxObject : public XFigAbstractPolylineObject
0330 {
0331 protected:
0332     explicit XFigBoxObject(TypeId typeId)
0333     : XFigAbstractPolylineObject( typeId ), m_Width(0), m_Height(0), m_Radius(0) {}
0334 
0335 public:
0336     XFigBoxObject() : XFigAbstractPolylineObject(BoxId), m_Width(0), m_Height(0), m_Radius(0) {}
0337 
0338     void setPoints(const QVector<XFigPoint>& points) override;
0339 
0340     void setRadius( qint32 radius ) { m_Radius = radius; }
0341 
0342     XFigPoint upperLeft() const { return m_UpperLeftCorner; }
0343     qint32 width() const { return m_Width; }
0344     qint32 height() const { return m_Height; }
0345     qint32 radius() const { return m_Radius; }
0346 private:
0347     XFigPoint m_UpperLeftCorner;
0348     qint32 m_Width;
0349     qint32 m_Height;
0350     qint32 m_Radius;
0351 };
0352 
0353 class XFigPictureBoxObject : public XFigBoxObject
0354 {
0355 public:
0356     XFigPictureBoxObject() : XFigBoxObject(PictureBoxId) {}
0357 
0358     void setIsFlipped( bool isFlipped ) { m_IsFlipped = isFlipped; }
0359     void setFileName( const QString& fileName ) { m_FileName = fileName; }
0360 
0361     bool isFlipped() const { return m_IsFlipped; }
0362     const QString& fileName() const { return m_FileName; }
0363 private:
0364     bool m_IsFlipped;
0365     QString m_FileName;
0366 };
0367 
0368 class XFigSplineObject : public XFigAbstractGraphObject, public XFigFillable, public XFigLineable
0369 {
0370 public:
0371     enum Subtype { OpenApproximated, ClosedApproximated, OpenInterpolated, ClosedInterpolated, OpenX, ClosedX };
0372 
0373     XFigSplineObject() : XFigAbstractGraphObject(SplineId), m_Subtype(OpenApproximated) {}
0374 
0375     void setSubtype( Subtype subtype ) { m_Subtype = subtype; }
0376 //     void addPathPoint( const XFigPathPoint& pathPoint ) { mPathPoints.append(pathPoint); }
0377 
0378     Subtype subtype() const { return m_Subtype; }
0379 //     const QVector<XFigPathPoint>& pathPoints() const { return mPathPoints; }
0380 private:
0381     Subtype m_Subtype;
0382 //     QVector<XFigPathPoint> mPathPoints;
0383 };
0384 
0385 class XFigArcObject : public XFigAbstractGraphObject, public XFigFillable, public XFigLineable, public XFigLineEndable
0386 {
0387 public:
0388     enum Subtype { OpenEnded, PieWedgeClosed };
0389     enum Direction { Clockwise, CounterClockwise };
0390 
0391     XFigArcObject() : XFigAbstractGraphObject(ArcId), m_Subtype(OpenEnded), m_Direction(Clockwise) {}
0392 
0393     void setSubtype( Subtype subtype ) { m_Subtype = subtype; }
0394     void setDirection( Direction direction ) { m_Direction = direction; }
0395     void setCenterPoint( XFigPoint centerPoint ) { m_CenterPoint = centerPoint; }
0396     void setPoints( XFigPoint point1, XFigPoint point2, XFigPoint point3 )
0397     { m_Point1 = point1; m_Point2 = point2; m_Point3 = point3; }
0398 
0399     Subtype subtype() const { return m_Subtype; }
0400     Direction direction() const { return m_Direction; }
0401     XFigPoint centerPoint() const { return m_CenterPoint; }
0402     XFigPoint point1() const { return m_Point1; }
0403     XFigPoint point2() const { return m_Point2; }
0404     XFigPoint point3() const { return m_Point3; }
0405 private:
0406     Subtype m_Subtype;
0407     Direction m_Direction;
0408     XFigPoint m_CenterPoint;
0409     XFigPoint m_Point1;
0410     XFigPoint m_Point2;
0411     XFigPoint m_Point3;
0412 };
0413 
0414 
0415 enum XFigTextAlignment {
0416     XFigTextLeftAligned,
0417     XFigTextCenterAligned,
0418     XFigTextRightAligned
0419 };
0420 
0421 struct XFigFontData
0422 {
0423     QString mFamily;
0424     QFont::Weight mWeight;
0425     QFont::Style mStyle;
0426     float mSize; ///> in points
0427 };
0428 
0429 class XFigTextObject : public XFigAbstractGraphObject, public XFigFillable
0430 {
0431 public:
0432     XFigTextObject()
0433     : XFigAbstractGraphObject(TextId), m_TextAlignment(XFigTextLeftAligned), m_Length(0), m_Height(0) {}
0434 
0435     void setText(const QString& text) { m_Text = text; }
0436     void setTextAlignment(XFigTextAlignment textAlignment) { m_TextAlignment = textAlignment; }
0437     void setBaselineStartPoint(XFigPoint baselineStartPoint) { m_BaselineStartPoint = baselineStartPoint; }
0438     void setSize(double length, double height) { m_Length = length; m_Height = height; }
0439     void setXAxisAngle(double xAxisAngle) { m_XAxisAngle = xAxisAngle; }
0440     void setColorId(qint32 colorId) { m_ColorId = colorId; }
0441     void setFontData(const XFigFontData& fontData) { m_FontData = fontData; }
0442     void setIsHidden(bool isHidden) { m_IsHidden = isHidden; }
0443 
0444     const QString& text() const { return m_Text; }
0445     XFigTextAlignment textAlignment() const { return m_TextAlignment; }
0446     XFigPoint baselineStartPoint() const { return m_BaselineStartPoint; }
0447     double height() const { return m_Height; }
0448     double length() const { return m_Length; }
0449     double xAxisAngle() const { return m_XAxisAngle; }
0450     qint32 colorId() const { return m_ColorId; }
0451     const XFigFontData& fontData() const { return m_FontData; }
0452     bool isHidden() const { return m_IsHidden; }
0453 private:
0454     QString m_Text;
0455     XFigTextAlignment m_TextAlignment;
0456     XFigPoint m_BaselineStartPoint;
0457     double m_Length;
0458     double m_Height;
0459     double m_XAxisAngle;
0460     qint32 m_ColorId;
0461     XFigFontData m_FontData;
0462     bool m_IsHidden :1;
0463 };
0464 
0465 
0466 class XFigBoundingBox
0467 {
0468 public:
0469     XFigBoundingBox() {}
0470     XFigBoundingBox( XFigPoint upperLeft, XFigPoint lowerRight)
0471     : m_UpperLeft(upperLeft), m_LowerRight(lowerRight)
0472     {}
0473 
0474     void setUpperLeft( XFigPoint upperLeft ) { m_UpperLeft = upperLeft; }
0475     void setLowerRight( XFigPoint lowerRight ) { m_LowerRight = lowerRight; }
0476 
0477     XFigPoint upperLeft() const { return m_UpperLeft; }
0478     XFigPoint lowerRight() const { return m_LowerRight; }
0479 private:
0480     XFigPoint m_UpperLeft;
0481     XFigPoint m_LowerRight;
0482 };
0483 
0484 class XFigCompoundObject : public XFigAbstractObject
0485 {
0486 public:
0487     XFigCompoundObject() : XFigAbstractObject(CompoundId) {}
0488     ~XFigCompoundObject() override { qDeleteAll( m_Objects );}
0489 
0490     void addObject( XFigAbstractObject* object ) { m_Objects.append(object); }
0491     void setBoundingBox( XFigBoundingBox boundingBox ) { m_BoundingBox = boundingBox; }
0492 
0493     const QVector<XFigAbstractObject*>& objects() const { return m_Objects; }
0494     XFigBoundingBox boundingBox() const { return m_BoundingBox; }
0495 private:
0496     QVector<XFigAbstractObject*> m_Objects;
0497     XFigBoundingBox m_BoundingBox;
0498 };
0499 
0500 class XFigPage
0501 {
0502 public:
0503     XFigPage() {}
0504     ~XFigPage() { qDeleteAll( m_Objects ); }
0505 
0506     void addObject( XFigAbstractObject* object ) { m_Objects.append(object); }
0507 
0508     const QVector<XFigAbstractObject*>& objects() const { return m_Objects; }
0509 private:
0510     QVector<XFigAbstractObject*> m_Objects;
0511 };
0512 
0513 enum XFigUnitType
0514 {
0515     XFigUnitTypeUnknown,
0516     XFigUnitMetric,
0517     XFigUnitInches
0518 };
0519 
0520 enum XFigCoordSystemOriginType
0521 {
0522     XFigCoordSystemOriginTypeUnknown,
0523     XFigCoordSystemOriginUpperLeft,
0524     XFigCoordSystemOriginLowerLeft
0525 };
0526 
0527 enum XFigPageOrientation
0528 {
0529     XFigPageOrientationUnknown,
0530     XFigPagePortrait,
0531     XFigPageLandscape
0532 };
0533 
0534 enum XFigPageSizeType
0535 {
0536     XFigPageSizeUnknown,
0537     XFigPageSizeLetter,
0538     XFigPageSizeLegal,
0539     XFigPageSizeTabloid,
0540 
0541     XFigPageSizeA,
0542     XFigPageSizeB,
0543     XFigPageSizeC,
0544     XFigPageSizeD,
0545     XFigPageSizeE,
0546 
0547     XFigPageSizeA9,
0548     XFigPageSizeA8,
0549     XFigPageSizeA7,
0550     XFigPageSizeA6,
0551     XFigPageSizeA5,
0552     XFigPageSizeA4,
0553     XFigPageSizeA3,
0554     XFigPageSizeA2,
0555     XFigPageSizeA1,
0556     XFigPageSizeA0,
0557 
0558     XFigPageSizeB10,
0559     XFigPageSizeB9,
0560     XFigPageSizeB8,
0561     XFigPageSizeB7,
0562     XFigPageSizeB6,
0563     XFigPageSizeB5,
0564     XFigPageSizeB4,
0565     XFigPageSizeB3,
0566     XFigPageSizeB2,
0567     XFigPageSizeB1,
0568     XFigPageSizeB0
0569 };
0570 
0571 class XFigDocument
0572 {
0573 public:
0574     XFigDocument();
0575     ~XFigDocument() { qDeleteAll( m_Pages); }
0576 
0577     void setPageOrientation( XFigPageOrientation pageOrientation ) { m_PageOrientation = pageOrientation; }
0578     void setCoordSystemOriginType( XFigCoordSystemOriginType coordSystemOriginType )
0579     { m_CoordSystemOriginType = coordSystemOriginType; }
0580     void setUnitType( XFigUnitType unitType ) { m_UnitType = unitType; }
0581     void setPageSizeType( XFigPageSizeType pageSizeType ) { m_PageSizeType = pageSizeType; }
0582     void setResolution( qint32 resolution ) { m_Resolution = resolution; }
0583     void setComment(const QString& comment) { m_Comment = comment; }
0584     void addPage( XFigPage* page ) { m_Pages.append(page); }
0585     void setUserColor( int id, const QColor& color )
0586     { if ((32<=id) && (id<=543)) m_ColorTable.insert(id, color); }
0587 
0588     XFigPageOrientation pageOrientation() const { return m_PageOrientation; }
0589     XFigCoordSystemOriginType coordSystemOriginType() const { return m_CoordSystemOriginType; }
0590     XFigUnitType unitType() const { return m_UnitType; }
0591     XFigPageSizeType pageSizeType() const { return m_PageSizeType; }
0592     qint32 resolution() const { return m_Resolution; }
0593     const QString& comment() const { return m_Comment; }
0594     const QVector<XFigPage*>& pages() const { return m_Pages; }
0595     const QColor* color( int id ) const;
0596 private:
0597     XFigPageOrientation m_PageOrientation;
0598     XFigCoordSystemOriginType m_CoordSystemOriginType;
0599     XFigUnitType m_UnitType;
0600     XFigPageSizeType m_PageSizeType;
0601     qint32 m_Resolution;
0602     QString m_Comment;
0603 
0604     QHash<int, QColor> m_ColorTable;
0605 
0606     QVector<XFigPage*> m_Pages;
0607 };
0608 
0609 #endif