Wed, 22 Jun 2022 22:59:56 +0300
Move color button into widgets lib
183
97b591813c8b
- Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents:
182
diff
changeset
|
1 | #include <QCheckBox> |
97b591813c8b
- Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents:
182
diff
changeset
|
2 | #include <QLineEdit> |
178 | 3 | #include <QFormLayout> |
252
da4876bfd822
Move some widgets into a static library
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
249
diff
changeset
|
4 | #include <widgets/vec3editor.h> |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
5 | #include "objecteditor.h" |
152 | 6 | #include "document.h" |
178 | 7 | #include "widgets/colorbutton.h" |
8 | #include "widgets/colorindexinput.h" | |
182
27fb1c3c9fbb
add ui file to object editor
Teemu Piippo <teemu@hecknology.net>
parents:
181
diff
changeset
|
9 | #include "ui_objecteditor.h" |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
10 | |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
11 | using PropertyPointer = std::variant< |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
12 | glm::vec3*, |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
13 | glm::mat4*, |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
14 | QString*, |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
15 | ldraw::Color*, |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
16 | CircularFraction*>; |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
17 | |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
18 | enum class PropertyKey |
180
5b7a8f2270ff
Handle properties in a generic manner in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
178
diff
changeset
|
19 | { |
200 | 20 | Point1, |
21 | Point2, | |
22 | Point3, | |
23 | Point4, | |
24 | Control1, | |
25 | Control2, | |
26 | Color, | |
27 | Transformation, | |
28 | Name, | |
29 | Text, | |
30 | Code, | |
232
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
200
diff
changeset
|
31 | Fraction, |
200 | 32 | }; |
180
5b7a8f2270ff
Handle properties in a generic manner in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
178
diff
changeset
|
33 | |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
34 | constexpr std::size_t NUM_PROPERTIES = static_cast<int>(PropertyKey::Fraction) + 1; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
35 | |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
36 | static QString propertyName(PropertyKey key) |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
37 | { |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
38 | switch (key) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
39 | case PropertyKey::Point1: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
40 | return ObjectEditor::tr("Vertex 1"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
41 | case PropertyKey::Point2: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
42 | return ObjectEditor::tr("Vertex 2"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
43 | case PropertyKey::Point3: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
44 | return ObjectEditor::tr("Vertex 3"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
45 | case PropertyKey::Point4: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
46 | return ObjectEditor::tr("Vertex 4"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
47 | case PropertyKey::Control1: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
48 | return ObjectEditor::tr("Control point 1"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
49 | case PropertyKey::Control2: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
50 | return ObjectEditor::tr("Control point 2"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
51 | case PropertyKey::Color: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
52 | return ObjectEditor::tr("Colour"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
53 | case PropertyKey::Transformation: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
54 | return ObjectEditor::tr("Transformation"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
55 | case PropertyKey::Name: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
56 | return ObjectEditor::tr("Name"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
57 | case PropertyKey::Text: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
58 | return ObjectEditor::tr("Text"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
59 | case PropertyKey::Code: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
60 | return ObjectEditor::tr("Code"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
61 | case PropertyKey::Fraction: |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
62 | return ObjectEditor::tr("Fraction"); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
63 | } |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
64 | return ""; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
65 | } |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
66 | |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
67 | static std::map<PropertyKey, PropertyPointer> collectProperties(ModelElement& element) |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
68 | { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
69 | std::map<PropertyKey, PropertyPointer> result; |
200 | 70 | std::visit<void>(overloaded{ |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
71 | [&](Colored<LineSegment>& edge) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
72 | result[PropertyKey::Point1] = &edge.p1; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
73 | result[PropertyKey::Point2] = &edge.p2; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
74 | result[PropertyKey::Color] = &edge.color; |
200 | 75 | }, |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
76 | [&](Colored<Triangle>& tri) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
77 | result[PropertyKey::Point1] = &tri.p1; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
78 | result[PropertyKey::Point2] = &tri.p2; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
79 | result[PropertyKey::Point3] = &tri.p3; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
80 | result[PropertyKey::Color] = &tri.color; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
81 | }, |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
82 | [&](Colored<Quadrilateral>& quad) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
83 | result[PropertyKey::Point1] = &quad.p1; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
84 | result[PropertyKey::Point2] = &quad.p2; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
85 | result[PropertyKey::Point3] = &quad.p3; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
86 | result[PropertyKey::Point4] = &quad.p4; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
87 | result[PropertyKey::Color] = &quad.color; |
200 | 88 | }, |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
89 | [&](Colored<ConditionalEdge>& cedge) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
90 | result[PropertyKey::Point1] = &cedge.p1; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
91 | result[PropertyKey::Point2] = &cedge.p2; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
92 | result[PropertyKey::Control1] = &cedge.c1; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
93 | result[PropertyKey::Control2] = &cedge.c2; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
94 | result[PropertyKey::Color] = &cedge.color; |
200 | 95 | }, |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
96 | [&](Colored<SubfileReference>& ref) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
97 | result[PropertyKey::Transformation] = &ref.transformation; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
98 | result[PropertyKey::Name] = &ref.name; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
99 | result[PropertyKey::Color] = &ref.color; |
200 | 100 | }, |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
101 | [&](Colored<CircularPrimitive>& circ) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
102 | result[PropertyKey::Transformation] = &circ.transformation; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
103 | result[PropertyKey::Fraction] = &circ.fraction; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
104 | result[PropertyKey::Color] = &circ.color; |
232
8efa3a33172e
Add base code for circular primitives
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
200
diff
changeset
|
105 | }, |
200 | 106 | [&](Empty) {}, |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
107 | [&](Comment& comment) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
108 | result[PropertyKey::Text] = &comment.text; |
200 | 109 | }, |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
110 | [&](ParseError& parseError) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
111 | result[PropertyKey::Code] = &parseError.code; |
200 | 112 | }, |
113 | }, element); | |
114 | return result; | |
183
97b591813c8b
- Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents:
182
diff
changeset
|
115 | } |
249
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
116 | |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
117 | |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
118 | ObjectEditor::ObjectEditor(QWidget* parent) : |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
119 | QWidget{parent} |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
120 | { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
121 | this->ui.setupUi(this); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
122 | this->editorwidgets.resize(NUM_PROPERTIES); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
123 | QFormLayout* layout = new QFormLayout{this}; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
124 | for (std::size_t i = 0; i < NUM_PROPERTIES; ++i) { |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
125 | const auto key = static_cast<PropertyKey>(i); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
126 | QLabel* const label = new QLabel{propertyName(key), this}; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
127 | QWidget* const field = new QWidget{this}; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
128 | this->editorwidgets[i] = field; |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
129 | layout->addRow(label, field); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
130 | } |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
131 | this->ui.properties->setLayout(layout); |
37d3c819cafa
Done some work on object editor
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
232
diff
changeset
|
132 | } |