24 public: |
24 public: |
25 ~EditContext(); |
25 ~EditContext(); |
26 template<typename T, typename... Args> |
26 template<typename T, typename... Args> |
27 ldraw::Id<T> append(Args&&... args); |
27 ldraw::Id<T> append(Args&&... args); |
28 ldraw::id_t append(std::unique_ptr<ldraw::Object>&& object); |
28 ldraw::id_t append(std::unique_ptr<ldraw::Object>&& object); |
|
29 void insertFromState(int position, QByteArray& state); |
29 template<typename T, typename... Args> |
30 template<typename T, typename... Args> |
30 ldraw::Id<T> insert(int position, Args&&... args); |
31 ldraw::Id<T> insert(int position, Args&&... args); |
31 void remove(int position); |
32 void remove(int position); |
32 template<ldraw::Property property> |
33 template<ldraw::Property property> |
33 void setObjectProperty(ldraw::id_t id, const ldraw::PropertyType<property>& value); |
34 void setObjectProperty(ldraw::id_t id, const ldraw::PropertyType<property>& value); |
34 auto setObjectProperty(ldraw::id_t id, ldraw::Property property, const QVariant& value) |
35 auto setObjectProperty(ldraw::id_t id, ldraw::Property property, const QVariant& value) |
35 -> ldraw::Object::SetPropertyResult; |
36 -> ldraw::Object::SetPropertyResult; |
36 void setObjectPoint(ldraw::id_t id, int pointId, const glm::vec3& value); |
37 void setObjectPoint(ldraw::id_t id, int pointId, const glm::vec3& value); |
37 void invertObject(ldraw::id_t id); |
38 void invertObject(ldraw::id_t id); |
|
39 void deserialize(ldraw::id_t id, QDataStream& stream); |
|
40 ldraw::id_t resolve(int position) const; |
38 Model& model(); |
41 Model& model(); |
39 private: |
42 private: |
40 EditContext(Model& model); |
43 EditContext(Model& model); |
|
44 void markObjectAsModified(ldraw::id_t id, ldraw::Object* object); |
41 friend class Model; |
45 friend class Model; |
42 QSet<ldraw::id_t> modifiedObjects; |
46 QMap<ldraw::id_t, QByteArray> modifiedObjects; |
43 Model& storedModel; |
47 Model& storedModel; |
44 }; |
48 }; |
45 |
49 |
46 template<ldraw::Property Property> |
50 template<ldraw::Property Property> |
47 void Model::EditContext::setObjectProperty(const ldraw::id_t id, const ldraw::PropertyType<Property>& value) |
51 void Model::EditContext::setObjectProperty(const ldraw::id_t id, const ldraw::PropertyType<Property>& value) |
48 { |
52 { |
49 ldraw::Object* object = this->model().objectAt(id); |
53 ldraw::Object* object = this->model().objectAt(id); |
50 if (object != nullptr) |
54 if (object != nullptr) |
51 { |
55 { |
|
56 this->markObjectAsModified(id, object); |
52 object->setProperty<Property>(value); |
57 object->setProperty<Property>(value); |
53 modifiedObjects.insert(id); |
|
54 } |
58 } |
55 } |
59 } |
56 |
60 |
57 template<typename T, typename... Args> |
61 template<typename T, typename... Args> |
58 ldraw::Id<T> Model::EditContext::append(Args&&... args) |
62 ldraw::Id<T> Model::EditContext::append(Args&&... args) |