1 // SPDX-FileCopyrightText: 2002 Dominique Devriese <devriese@kde.org>
2 
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 
5 #ifndef KIG_OBJECTS_POINT_TYPE_H
6 #define KIG_OBJECTS_POINT_TYPE_H
7 
8 #include "base_type.h"
9 #include "common.h"
10 #include "circle_imp.h"
11 
12 class FixedPointType
13   : public ArgsParserObjectType
14 {
15   FixedPointType();
16   ~FixedPointType();
17 
18   static const ArgsParser::spec argsspec[1];
19 public:
20   static const FixedPointType* instance();
21 
22   bool inherits( int type ) const override;
23 
24   ObjectImp* calc( const Args& parents, const KigDocument& ) const override;
25   bool canMove( const ObjectTypeCalcer& ourobj ) const override;
26   bool isFreelyTranslatable( const ObjectTypeCalcer& ourobj ) const override;
27   std::vector<ObjectCalcer*> movableParents( const ObjectTypeCalcer& ourobj ) const override;
28   const Coordinate moveReferencePoint( const ObjectTypeCalcer& ourobj ) const override;
29   void move( ObjectTypeCalcer& ourobj, const Coordinate& to,
30              const KigDocument& ) const override;
31   const ObjectImpType* resultId() const override;
32 
33   QStringList specialActions() const override;
34   void executeAction( int i, ObjectHolder& o, ObjectTypeCalcer& t,
35                       KigPart& d, KigWidget& w, NormalMode& m ) const override;
36 };
37 
38 class RelativePointType
39   : public ArgsParserObjectType
40 {
41   RelativePointType();
42   ~RelativePointType();
43 
44   static const ArgsParser::spec argsspec[1];
45 public:
46   static const RelativePointType* instance();
47 
48   ObjectImp* calc( const Args& parents, const KigDocument& ) const override;
49   bool canMove( const ObjectTypeCalcer& ourobj ) const override;
50   bool isFreelyTranslatable( const ObjectTypeCalcer& ourobj ) const override;
51   std::vector<ObjectCalcer*> movableParents( const ObjectTypeCalcer& ourobj ) const override;
52   const Coordinate moveReferencePoint( const ObjectTypeCalcer& ourobj ) const override;
53   void move( ObjectTypeCalcer& ourobj, const Coordinate& to,
54              const KigDocument& ) const override;
55   const ObjectImpType* resultId() const override;
56 
57 //  QStringList specialActions() const;
58 //  void executeAction( int i, ObjectHolder& o, ObjectTypeCalcer& t,
59 //                      KigPart& d, KigWidget& w, NormalMode& m ) const;
60 };
61 
62 class ConstrainedRelativePointType
63   : public ArgsParserObjectType
64 {
65   ConstrainedRelativePointType();
66   ~ConstrainedRelativePointType();
67 
68   static const ArgsParser::spec argsspec[1];
69 public:
70   static const ConstrainedRelativePointType* instance();
71 
72   ObjectImp* calc( const Args& parents, const KigDocument& ) const override;
73   bool canMove( const ObjectTypeCalcer& ourobj ) const override;
74   bool isFreelyTranslatable( const ObjectTypeCalcer& ourobj ) const override;
75   std::vector<ObjectCalcer*> movableParents( const ObjectTypeCalcer& ourobj ) const override;
76   const Coordinate moveReferencePoint( const ObjectTypeCalcer& ourobj ) const override;
77   void move( ObjectTypeCalcer& ourobj, const Coordinate& to,
78              const KigDocument& ) const override;
79   const ObjectImpType* resultId() const override;
80 };
81 
82 class CursorPointType
83   : public ObjectType
84 {
85   CursorPointType();
86   ~CursorPointType();
87 
88 public:
89   static const CursorPointType* instance();
90   ObjectImp* calc( const Args& parents, const KigDocument& ) const override;
91 
92   const ObjectImpType* impRequirement( const ObjectImp* o, const Args& parents ) const override;
93   bool isDefinedOnOrThrough( const ObjectImp* o, const Args& parents ) const override;
94   std::vector<ObjectCalcer*> sortArgs( const std::vector<ObjectCalcer*>& args ) const override;
95   Args sortArgs( const Args& args ) const override;
96   bool canMove( const ObjectTypeCalcer& ourobj ) const override;
97   void move( ObjectTypeCalcer& ourobj, const Coordinate& to,
98              const KigDocument& ) const override;
99   const ObjectImpType* resultId() const override;
100 };
101 
102 class ConstrainedPointType
103   : public ArgsParserObjectType
104 {
105   ConstrainedPointType();
106   ~ConstrainedPointType();
107 public:
108   static const ConstrainedPointType* instance();
109 
110   bool inherits( int type ) const override;
111 
112   ObjectImp* calc( const Args& parents, const KigDocument& ) const override;
113 
114   bool canMove( const ObjectTypeCalcer& ourobj ) const override;
115   bool isFreelyTranslatable( const ObjectTypeCalcer& ourobj ) const override;
116   std::vector<ObjectCalcer*> movableParents( const ObjectTypeCalcer& ourobj ) const override;
117   const Coordinate moveReferencePoint( const ObjectTypeCalcer& ourobj ) const override;
118   void move( ObjectTypeCalcer& ourobj, const Coordinate& to,
119              const KigDocument& ) const override;
120   const ObjectImpType* resultId() const override;
121 
122   QStringList specialActions() const override;
123   void executeAction( int i, ObjectHolder&, ObjectTypeCalcer& o, KigPart& d, KigWidget& w,
124                       NormalMode& m ) const override;
125 };
126 
127 class MidPointType
128   : public ObjectABType
129 {
130   MidPointType();
131   ~MidPointType();
132 public:
133   static const MidPointType* instance();
134   // calcx was an overloaded calc, which produced a compilation warning
135   ObjectImp* calcx( const Coordinate& a, const Coordinate& b ) const override;
136   const ObjectImpType* resultId() const override;
137 };
138 
139 class GoldenPointType
140   : public ObjectABType
141 {
142   GoldenPointType();
143   ~GoldenPointType();
144 public:
145   static const GoldenPointType* instance();
146   // calcx was an overloaded calc, which produced a compilation warning
147   ObjectImp* calcx( const Coordinate& a, const Coordinate& b ) const override;
148   const ObjectImpType* resultId() const override;
149 };
150 
151 class MeasureTransportType
152   : public ObjectType
153 {
154   MeasureTransportType();
155   ~MeasureTransportType();
156 public:
157   static const MeasureTransportType* instance();
158 
159   ObjectImp* calc( const Args& parents, const KigDocument& ) const override;
160   const ObjectImpType* resultId() const override;
161   const ObjectImpType* impRequirement( const ObjectImp* o, const Args& parents ) const override;
162   bool isDefinedOnOrThrough( const ObjectImp* o, const Args& parents ) const override;
163   std::vector<ObjectCalcer*> sortArgs( const std::vector<ObjectCalcer*>& args )const override;
164   Args sortArgs( const Args& args ) const override;
165 };
166 
167 class MeasureTransportTypeOld
168   : public ArgsParserObjectType
169 {
170   MeasureTransportTypeOld();
171   ~MeasureTransportTypeOld();
172 public:
173   static const MeasureTransportTypeOld* instance();
174 
175   ObjectImp* calc( const Args& parents, const KigDocument& ) const override;
176   const ObjectImpType* resultId() const override;
177 };
178 
179 class PointByCoordsType
180   : public ArgsParserObjectType
181 {
182   PointByCoordsType();
183   ~PointByCoordsType();
184 public:
185   static const PointByCoordsType* instance();
186 
187   ObjectImp* calc( const Args& parents, const KigDocument& ) const override;
188   const ObjectImpType* resultId() const override;
189 };
190 
191 class ProjectedPointType
192   : public ArgsParserObjectType
193 {
194   ProjectedPointType();
195   ~ProjectedPointType();
196 public:
197   static const ProjectedPointType* instance();
198 
199   ObjectImp* calc( const Args& parents, const KigDocument& ) const override;
200   const ObjectImpType * resultId() const override;
201 };
202 
203 #endif
204