Fri, 04 Mar 2022 11:37:50 +0200
Major refactoring
- Model now just stores objects
- Document contains business logic
- Model::EditContext is now ModelEditor, no longer a nested class
89 | 1 | #include <QFormLayout> |
83
b8bd338eb602
refactor, added splitter
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
2 | #include <QSplitter> |
152 | 3 | #include "document.h" |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
4 | #include "modeleditcontext.h" |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
5 | #include "widgets/vec3editor.h" |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
6 | #include "ui/polygonobjecteditor.h" |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
7 | |
89 | 8 | static constexpr char INDEX_NAME[] = "_ldforge_index"; |
9 | static constexpr char LABEL_NAME[] = "_ldforge_label"; | |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
10 | |
152 | 11 | PolygonObjectEditor::PolygonObjectEditor(Document* document, ldraw::id_t id) : |
12 | QWidget{document}, | |
13 | document{document}, | |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
14 | storedObjectId{ldraw::NULL_ID.value} |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
15 | { |
89 | 16 | this->splitter.emplace(Qt::Vertical, this); |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
17 | this->setObjectId(id); |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
18 | } |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
19 | |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
20 | // destructor needed for std::unique_ptr |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
21 | PolygonObjectEditor::~PolygonObjectEditor() |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
22 | { |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
23 | } |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
24 | |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
25 | ldraw::id_t PolygonObjectEditor::objectId() const |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
26 | { |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
27 | return this->storedObjectId; |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
28 | } |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
29 | |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
30 | void PolygonObjectEditor::setObjectId(ldraw::id_t id) |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
31 | { |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
32 | this->storedObjectId = id; |
89 | 33 | this->buildWidgets(); |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
34 | } |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
35 | |
89 | 36 | void PolygonObjectEditor::buildWidgets() |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
37 | { |
89 | 38 | this->widgets.clear(); |
39 | delete this->layout(); | |
40 | QFormLayout* layout = new QFormLayout{this}; | |
41 | this->setLayout(layout); | |
42 | for (int n : {0, 1, 2, 3}) | |
43 | { | |
44 | this->setupPointWidget(n); | |
45 | } | |
46 | for (std::unique_ptr<QWidget>& widget : this->widgets) | |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
47 | { |
89 | 48 | const QString label = widget->property(LABEL_NAME).toString(); |
49 | layout->addRow(label, widget.get()); | |
50 | } | |
51 | layout->addRow("", &*this->splitter); | |
52 | } | |
53 | ||
54 | void PolygonObjectEditor::setupPointWidget(int n) | |
55 | { | |
152 | 56 | const QModelIndex index = this->document->getModel().find(this->objectId()); |
57 | if (index.isValid()) | |
89 | 58 | { |
152 | 59 | const ldraw::Object* const object = this->document->getModel()[index.row()]; |
60 | const ldraw::Property property = ldraw::pointProperty(n); | |
61 | const QVariant value = object->getProperty(property); | |
62 | if (value.isValid()) | |
63 | { | |
64 | std::unique_ptr<Vec3Editor> editor = std::make_unique<Vec3Editor>(value.value<glm::vec3>(), this); | |
65 | QObject::connect(editor.get(), &Vec3Editor::valueChanged, this, &PolygonObjectEditor::pointChanged); | |
66 | editor->setProperty(INDEX_NAME, QVariant::fromValue(n)); | |
67 | editor->setProperty(LABEL_NAME, &ldraw::traits(property).name[0]); | |
68 | this->widgets.push_back(std::move(editor)); | |
69 | } | |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
70 | } |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
71 | } |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
72 | |
89 | 73 | void PolygonObjectEditor::pointChanged(const glm::vec3& value) |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
74 | { |
152 | 75 | std::unique_ptr<ModelEditor> modelEditor = this->document->editModel(); |
89 | 76 | const int n = this->sender()->property(INDEX_NAME).toInt(); |
77 | const ldraw::Property property = ldraw::pointProperty(n); | |
152 | 78 | modelEditor->setObjectProperty(this->objectId(), property, QVariant::fromValue(value)); |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
79 | } |