diff -r 6e838748867b -r 20d2ed3af73d src/linetypes/object.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/linetypes/object.h Sun Nov 03 18:13:38 2019 +0200 @@ -0,0 +1,82 @@ +#pragma once +#include +#include +#include +#include "main.h" +#include "colors.h" +#include "vertex.h" + +namespace linetypes +{ + enum class Property; + class Object; + class ColoredObject; + class Empty; +} + +/** + * @brief Different properties that can be queried with getProperty + */ +enum class linetypes::Property +{ + Color, // Color of the object + Text, // Text contained in a comment + Point1, // First vertex in a polygon or edge line + Point2, // Second vertex in a polygon or edge line + Point3, // Third vertex in a polygon + Point4, // Fourth vertex in a quadrilateral + ControlPoint1, // First control point in a conditional edge line + ControlPoint2, // Second control point in a conditional edge line + Position, // Position of a subfile reference + Transformation, // Transformation matrix of a subfile reference + ReferenceName, // Subfile reference name + IsInverted, // Whether or not the object has been inverted with BFC INVERTNEXT + ErrorMessage // For error lines, why parsing failed +}; + +class linetypes::Object +{ +public: + enum class SetPropertyResult + { + Success = 0, + PropertyNotHandled, + InvalidValue + }; + Object(); + Object(const Object&) = delete; + virtual ~Object(); + const unsigned int id; + //virtual void toString(QTextStream &out) = 0; + virtual bool hasColor() const; + virtual QVariant getProperty(Property id) const; + virtual SetPropertyResult setProperty(Property id, const QVariant& value); + virtual QString textRepresentation() const = 0; + virtual QBrush textRepresentationForeground() const; + virtual QBrush textRepresentationBackground() const; + virtual QFont textRepresentationFont() const; +}; + +class linetypes::ColoredObject : public Object +{ +public: + ColoredObject(const Color colorIndex = colors::main); + bool hasColor() const override final; + QVariant getProperty(Property id) const override; + SetPropertyResult setProperty(Property id, const QVariant& value) override; +private: + Color colorIndex = colors::main; +}; + +/** + * @brief Represents an empty line. + */ +class linetypes::Empty : public Object +{ + QString textRepresentation() const override; +}; + +namespace linetypes +{ + using Id = std::decay_t; +}