Sun, 03 Jul 2022 12:20:26 +0300
Let's try to keep the amount of indents in check...
#include <QCheckBox> #include <QLineEdit> #include <QFormLayout> #include "src/ui/objecteditor.h" #include "src/widgets/colorindexinput.h" #include "widgets/colorbutton.h" #include "widgets/vec3editor.h" using PropertyPointer = std::variant< glm::vec3*, glm::mat4*, QString*, ldraw::Color*, CircularFraction*>; enum class PropertyKey { Point1, Point2, Point3, Point4, Control1, Control2, Color, Transformation, Name, Text, Code, Fraction, }; constexpr std::size_t NUM_PROPERTIES = static_cast<int>(PropertyKey::Fraction) + 1; static QString propertyName(PropertyKey key) { switch (key) { case PropertyKey::Point1: return ObjectEditor::tr("Vertex 1"); case PropertyKey::Point2: return ObjectEditor::tr("Vertex 2"); case PropertyKey::Point3: return ObjectEditor::tr("Vertex 3"); case PropertyKey::Point4: return ObjectEditor::tr("Vertex 4"); case PropertyKey::Control1: return ObjectEditor::tr("Control point 1"); case PropertyKey::Control2: return ObjectEditor::tr("Control point 2"); case PropertyKey::Color: return ObjectEditor::tr("Colour"); case PropertyKey::Transformation: return ObjectEditor::tr("Transformation"); case PropertyKey::Name: return ObjectEditor::tr("Name"); case PropertyKey::Text: return ObjectEditor::tr("Text"); case PropertyKey::Code: return ObjectEditor::tr("Code"); case PropertyKey::Fraction: return ObjectEditor::tr("Fraction"); } return ""; } static std::map<PropertyKey, PropertyPointer> collectProperties(ModelElement& element) { std::map<PropertyKey, PropertyPointer> result; std::visit<void>(overloaded{ [&](Colored<LineSegment>& edge) { result[PropertyKey::Point1] = &edge.p1; result[PropertyKey::Point2] = &edge.p2; result[PropertyKey::Color] = &edge.color; }, [&](Colored<Triangle>& tri) { result[PropertyKey::Point1] = &tri.p1; result[PropertyKey::Point2] = &tri.p2; result[PropertyKey::Point3] = &tri.p3; result[PropertyKey::Color] = &tri.color; }, [&](Colored<Quadrilateral>& quad) { result[PropertyKey::Point1] = &quad.p1; result[PropertyKey::Point2] = &quad.p2; result[PropertyKey::Point3] = &quad.p3; result[PropertyKey::Point4] = &quad.p4; result[PropertyKey::Color] = &quad.color; }, [&](Colored<ConditionalEdge>& cedge) { result[PropertyKey::Point1] = &cedge.p1; result[PropertyKey::Point2] = &cedge.p2; result[PropertyKey::Control1] = &cedge.c1; result[PropertyKey::Control2] = &cedge.c2; result[PropertyKey::Color] = &cedge.color; }, [&](Colored<SubfileReference>& ref) { result[PropertyKey::Transformation] = &ref.transformation; result[PropertyKey::Name] = &ref.name; result[PropertyKey::Color] = &ref.color; }, [&](Colored<CircularPrimitive>& circ) { result[PropertyKey::Transformation] = &circ.transformation; result[PropertyKey::Fraction] = &circ.fraction; result[PropertyKey::Color] = &circ.color; }, [&](Empty) {}, [&](Comment& comment) { result[PropertyKey::Text] = &comment.text; }, [&](ParseError& parseError) { result[PropertyKey::Code] = &parseError.code; }, }, element); return result; } ObjectEditor::ObjectEditor(QWidget* parent) : QWidget{parent} { this->ui.setupUi(this); }