]> Shamusworld >> Repos - architektonas/blob - src/object.h
4f50821f0dcdae32bf9cf5935d34090839019e58
[architektonas] / src / object.h
1 #ifndef __OBJECT_H__
2 #define __OBJECT_H__
3
4 #include <stdio.h>
5 #include <vector>                                                       // This is a container
6 #include "vector.h"                                                     // This is the mathematical construct
7 #include "connection.h"
8 #include <QRectF>
9
10 class Painter;
11 class QFont;
12 class Dimension;
13 //class FILE;
14
15 enum ObjectState { OSInactive, OSSelected };
16 enum ObjectType { OTNone, OTObject, OTLine, OTCircle, OTArc, OTDimension, OTEllipse, OTContainer };
17
18 class Object
19 {
20         friend class Geometry;
21
22         public:
23                 Object();
24                 Object(Vector, Object * passedInParent = 0);
25                 ~Object();
26
27                 virtual void Draw(Painter *);
28                 virtual Vector Center(void);
29                 virtual bool Collided(Vector);
30                 virtual void PointerMoved(Vector);
31                 virtual void PointerReleased(void);
32                 virtual bool NeedsUpdate(void);
33                 virtual bool HitTest(Point);
34                 virtual void Transmute(Object *, Object *);
35                 virtual Object * GetParent(void);
36                 virtual void Add(Object *);
37                 virtual Vector * GetPointAt(Vector);
38                 virtual void Enumerate(FILE *);
39                 virtual Object * Copy(void);
40                 virtual Vector GetPointAtParameter(double parameter);
41 //Not yet, soon though          virtual void MovePointAtParameter(double parameter, Vector);
42                 virtual void Connect(Object *, double);
43                 virtual void Disconnect(Object *, double);
44                 virtual void DisconnectAll(Object *);
45                 virtual QRectF Extents(void);
46 //              virtual ObjectType Type(void);// = 0; // Pure virtual, must be implemented
47                 virtual void Translate(Vector);
48                 virtual void Rotate(Point, double);
49                 virtual void Scale(Point, double);
50                 virtual void Mirror(Point, Point);
51                 virtual void Save(void);
52                 virtual void Restore(void);
53                 ObjectState GetState(void);
54                 void Reparent(Object *);
55 //              Dimension * GetAttachedDimension(void);
56 //Hm.           Object * Connect(Object *);
57
58                 // Class methods
59                 static void SetFixedAngle(bool state = true);
60                 static void SetFixedLength(bool state = true);
61                 static void SetFont(QFont *);
62                 static void SetViewportHeight(int);
63                 static void SetDeleteActive(bool state = true);
64                 static void SetDimensionActive(bool state = true);
65                 static void SetSnapMode(bool state = true);
66                 static Vector SnapPointToGrid(Vector);
67
68         protected:
69                 Vector position;                                        // All objects have a position (doubles as reference point)
70                 Object * parent;
71 //              Pen pen;
72 //              Fill fill;
73                 Point oldPosition;
74         public:
75                 ObjectType type;
76                 ObjectState state;
77                 unsigned int layer;
78         protected:
79                 ObjectState oldState;
80                 bool needUpdate;
81 //              Dimension * attachedDimension;
82                 std::vector<Connection> connected;
83
84                 // Class variables
85         public:
86                 static QFont * font;
87         protected:
88                 static bool fixedAngle;
89                 static bool fixedLength;
90                 static int viewportHeight;
91                 static bool deleteActive;
92                 static bool dimensionActive;
93         public:
94                 static bool snapToGrid;
95                 static bool ignoreClicks;
96                 static bool dontMove;
97         public:
98                 static bool selectionInProgress;
99                 static QRectF selection;
100                 static double gridSpacing;                      // Grid spacing in base units
101                 static int currentLayer;
102 };
103
104 #endif  // __OBJECT_H__