src/linetypes/object.h

changeset 14
20d2ed3af73d
parent 13
6e838748867b
child 17
a5111f4e6412
equal deleted inserted replaced
13:6e838748867b 14:20d2ed3af73d
1 #pragma once
2 #include <QPointF>
3 #include <QString>
4 #include <QStringView>
5 #include "main.h"
6 #include "colors.h"
7 #include "vertex.h"
8
9 namespace linetypes
10 {
11 enum class Property;
12 class Object;
13 class ColoredObject;
14 class Empty;
15 }
16
17 /**
18 * @brief Different properties that can be queried with getProperty
19 */
20 enum class linetypes::Property
21 {
22 Color, // Color of the object
23 Text, // Text contained in a comment
24 Point1, // First vertex in a polygon or edge line
25 Point2, // Second vertex in a polygon or edge line
26 Point3, // Third vertex in a polygon
27 Point4, // Fourth vertex in a quadrilateral
28 ControlPoint1, // First control point in a conditional edge line
29 ControlPoint2, // Second control point in a conditional edge line
30 Position, // Position of a subfile reference
31 Transformation, // Transformation matrix of a subfile reference
32 ReferenceName, // Subfile reference name
33 IsInverted, // Whether or not the object has been inverted with BFC INVERTNEXT
34 ErrorMessage // For error lines, why parsing failed
35 };
36
37 class linetypes::Object
38 {
39 public:
40 enum class SetPropertyResult
41 {
42 Success = 0,
43 PropertyNotHandled,
44 InvalidValue
45 };
46 Object();
47 Object(const Object&) = delete;
48 virtual ~Object();
49 const unsigned int id;
50 //virtual void toString(QTextStream &out) = 0;
51 virtual bool hasColor() const;
52 virtual QVariant getProperty(Property id) const;
53 virtual SetPropertyResult setProperty(Property id, const QVariant& value);
54 virtual QString textRepresentation() const = 0;
55 virtual QBrush textRepresentationForeground() const;
56 virtual QBrush textRepresentationBackground() const;
57 virtual QFont textRepresentationFont() const;
58 };
59
60 class linetypes::ColoredObject : public Object
61 {
62 public:
63 ColoredObject(const Color colorIndex = colors::main);
64 bool hasColor() const override final;
65 QVariant getProperty(Property id) const override;
66 SetPropertyResult setProperty(Property id, const QVariant& value) override;
67 private:
68 Color colorIndex = colors::main;
69 };
70
71 /**
72 * @brief Represents an empty line.
73 */
74 class linetypes::Empty : public Object
75 {
76 QString textRepresentation() const override;
77 };
78
79 namespace linetypes
80 {
81 using Id = std::decay_t<decltype(Object::id)>;
82 }

mercurial