23 #include "linetypes/triangle.h" |
23 #include "linetypes/triangle.h" |
24 |
24 |
25 class Model::EditContext |
25 class Model::EditContext |
26 { |
26 { |
27 public: |
27 public: |
|
28 ~EditContext(); |
28 template<typename T, typename... Args> |
29 template<typename T, typename... Args> |
29 ldraw::Id<T> append(Args&&... args); |
30 ldraw::Id<T> append(Args&&... args); |
30 ldraw::id_t append(std::unique_ptr<ldraw::Object>&& object); |
31 ldraw::id_t append(std::unique_ptr<ldraw::Object>&& object); |
31 template<typename T, typename... Args> |
32 template<typename T, typename... Args> |
32 ldraw::Id<T> insert(int position, Args&&... args); |
33 ldraw::Id<T> insert(int position, Args&&... args); |
33 void remove(int position); |
34 void remove(int position); |
34 void setObjectProperty( |
35 template<ldraw::Property property> |
35 ldraw::id_t object, |
36 void setObjectProperty(ldraw::id_t id, const ldraw::PropertyType_t<property>& value) |
36 ldraw::Property property, |
37 { |
37 const QVariant &value); |
38 ldraw::Object* object = this->model().objectAt(id); |
|
39 if (object != nullptr) |
|
40 { |
|
41 object->setProperty<property>(value); |
|
42 modifiedObjects.insert(id); |
|
43 } |
|
44 } |
|
45 void setObjectPoint(ldraw::id_t id, int pointId, const glm::vec3& value); |
38 void invertObject(ldraw::id_t id); |
46 void invertObject(ldraw::id_t id); |
39 Model& model(); |
47 Model& model(); |
40 private: |
48 private: |
41 EditContext(Model& model); |
49 EditContext(Model& model); |
42 friend class Model; |
50 friend class Model; |
|
51 QSet<ldraw::id_t> modifiedObjects; |
43 Model& storedModel; |
52 Model& storedModel; |
44 }; |
53 }; |
45 |
54 |
46 template<typename T, typename... Args> |
55 template<typename T, typename... Args> |
47 ldraw::Id<T> Model::EditContext::append(Args&&... args) |
56 ldraw::Id<T> Model::EditContext::append(Args&&... args) |