Tue, 28 Sep 2021 23:07:23 +0300
Use QSaveFile to save the file more safely
89 | 1 | #include <QFormLayout> |
83
b8bd338eb602
refactor, added splitter
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
2 | #include <QSplitter> |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
3 | #include "model.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 | |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
11 | PolygonObjectEditor::PolygonObjectEditor(Model* model, ldraw::id_t id, QWidget* parent) : |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
12 | QWidget{parent}, |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
13 | model{model}, |
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 | { | |
56 | const ldraw::Object* const object = this->model->get(this->objectId()); | |
57 | const ldraw::Property property = ldraw::pointProperty(n); | |
58 | const QVariant value = object->getProperty(property); | |
59 | if (value.isValid()) | |
60 | { | |
61 | std::unique_ptr<Vec3Editor> editor = std::make_unique<Vec3Editor>(value.value<glm::vec3>(), this); | |
62 | QObject::connect(editor.get(), &Vec3Editor::valueChanged, this, &PolygonObjectEditor::pointChanged); | |
63 | editor->setProperty(INDEX_NAME, QVariant::fromValue(n)); | |
64 | editor->setProperty(LABEL_NAME, &ldraw::traits(property).name[0]); | |
65 | this->widgets.push_back(std::move(editor)); | |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
66 | } |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
67 | } |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
84
diff
changeset
|
68 | |
89 | 69 | void PolygonObjectEditor::pointChanged(const glm::vec3& value) |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
70 | { |
89 | 71 | Model::EditContext editcontext = this->model->edit(); |
72 | const int n = this->sender()->property(INDEX_NAME).toInt(); | |
73 | const ldraw::Property property = ldraw::pointProperty(n); | |
74 | editcontext.setObjectProperty(this->objectId(), property, QVariant::fromValue(value)); | |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
75 | } |