]> Shamusworld >> Repos - architektonas/blob - src/object.h
Various fixes to Container/Group handling, added DrawArcAction.
[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         public:
21                 Object();
22                 Object(Vector, Object * passedInParent = 0);
23                 ~Object();
24
25                 virtual void Draw(Painter *);
26                 virtual Vector Center(void);
27                 virtual bool Collided(Vector);
28                 virtual void PointerMoved(Vector);
29                 virtual void PointerReleased(void);
30                 virtual bool NeedsUpdate(void);
31                 virtual bool HitTest(Point);
32                 virtual void Transmute(Object *, Object *);
33                 virtual Object * GetParent(void);
34                 virtual void Add(Object *);
35                 virtual Vector * GetPointAt(Vector);
36                 virtual void Enumerate(FILE *);
37                 virtual Object * Copy(void);
38                 virtual Vector GetPointAtParameter(double parameter);
39                 virtual void Connect(Object *, double);
40                 virtual void Disconnect(Object *, double);
41                 virtual void DisconnectAll(Object *);
42                 virtual QRectF Extents(void);
43 //              virtual ObjectType Type(void);// = 0; // Pure virtual, must be implemented
44                 virtual void Translate(Vector);
45                 virtual void Rotate(Vector, double);
46                 virtual void Scale(Vector, double);
47                 ObjectState GetState(void);
48                 void Reparent(Object *);
49 //              Dimension * GetAttachedDimension(void);
50 //Hm.           Object * Connect(Object *);
51
52                 // Class methods
53                 static void SetFixedAngle(bool state = true);
54                 static void SetFixedLength(bool state = true);
55                 static void SetFont(QFont *);
56                 static void SetViewportHeight(int);
57                 static void SetDeleteActive(bool state = true);
58                 static void SetDimensionActive(bool state = true);
59                 static void SetSnapMode(bool state = true);
60
61         protected:
62                 Vector position;                                        // All objects have a position (doubles as reference point)
63                 Object * parent;
64 //              Pen pen;
65 //              Fill fill;
66         public:
67                 ObjectType type;
68                 ObjectState state;
69         protected:
70                 ObjectState oldState;
71                 bool needUpdate;
72 //              Dimension * attachedDimension;
73                 std::vector<Connection> connected;
74
75                 // Class variables
76                 static QFont * font;
77                 static bool fixedAngle;
78                 static bool fixedLength;
79                 static int viewportHeight;
80                 static bool deleteActive;
81                 static bool dimensionActive;
82         public:
83                 static bool snapToGrid;
84                 static bool ignoreClicks;
85                 static bool dontMove;
86         public:
87                 static bool selectionInProgress;
88                 static QRectF selection;
89 };
90
91 #endif  // __OBJECT_H__