src/model.h

changeset 35
98906a94732f
parent 26
3a9e761e4faa
child 51
1a9eac27698d
equal deleted inserted replaced
34:1de2b8d64e9f 35:98906a94732f
40 EditContext edit(); 40 EditContext edit();
41 int rowCount(const QModelIndex&) const override; 41 int rowCount(const QModelIndex&) const override;
42 QVariant data(const QModelIndex& index, int role) const override; 42 QVariant data(const QModelIndex& index, int role) const override;
43 QVariant getHeaderProperty(const HeaderProperty property); 43 QVariant getHeaderProperty(const HeaderProperty property);
44 const QString& getName() const; 44 const QString& getName() const;
45 QVariant getObjectProperty(const int index, const linetypes::Property property) const; 45 QVariant getObjectProperty(const int index, const ldraw::Property property) const;
46 std::vector<gl::Polygon> getPolygons(class DocumentManager* documents) const; 46 std::vector<gl::Polygon> getPolygons(class DocumentManager* documents) const;
47 void getObjectPolygons(const int index, std::vector<gl::Polygon>& polygons_out, linetypes::GetPolygonsContext* context) const; 47 void getObjectPolygons(const int index, std::vector<gl::Polygon>& polygons_out, ldraw::GetPolygonsContext* context) const;
48 signals: 48 signals:
49 void objectAdded(linetypes::Id id, int position); 49 void objectAdded(ldraw::Id id, int position);
50 private: 50 private:
51 using ModelObjectPointer = std::unique_ptr<linetypes::Object>; 51 using ModelObjectPointer = std::unique_ptr<ldraw::Object>;
52 template<typename T, typename... Args> 52 template<typename T, typename... Args>
53 linetypes::Id append(Args&&... args); 53 ldraw::Id append(Args&&... args);
54 void append(ModelObjectPointer&& object); 54 void append(ModelObjectPointer&& object);
55 template<typename T, typename... Args> 55 template<typename T, typename... Args>
56 linetypes::Id insert(int position, Args&&... args); 56 ldraw::Id insert(int position, Args&&... args);
57 bool modified = false; 57 bool modified = false;
58 QString path; 58 QString path;
59 LDHeader header; 59 LDHeader header;
60 std::vector<ModelObjectPointer> body; 60 std::vector<ModelObjectPointer> body;
61 std::map<linetypes::Id, linetypes::Object*> objectsById; 61 std::map<ldraw::Id, ldraw::Object*> objectsById;
62 mutable std::vector<gl::Polygon> cachedPolygons; 62 mutable std::vector<gl::Polygon> cachedPolygons;
63 mutable bool needRecache = true; 63 mutable bool needRecache = true;
64 }; 64 };
65 65
66 template<typename T, typename... Args> 66 template<typename T, typename... Args>
67 linetypes::Id Model::append(Args&&... args) 67 ldraw::Id Model::append(Args&&... args)
68 { 68 {
69 emit layoutAboutToBeChanged(); 69 emit layoutAboutToBeChanged();
70 this->body.push_back(std::make_unique<T>(args...)); 70 this->body.push_back(std::make_unique<T>(args...));
71 linetypes::Object* pointer = this->body.back().get(); 71 ldraw::Object* pointer = this->body.back().get();
72 this->objectsById[pointer->id] = pointer; 72 this->objectsById[pointer->id] = pointer;
73 emit objectAdded(pointer->id, this->body.size() - 1); 73 emit objectAdded(pointer->id, this->body.size() - 1);
74 emit layoutChanged(); 74 emit layoutChanged();
75 return pointer->id; 75 return pointer->id;
76 } 76 }
77 77
78 template<typename T, typename... Args> 78 template<typename T, typename... Args>
79 linetypes::Id Model::insert(int position, Args&&... args) 79 ldraw::Id Model::insert(int position, Args&&... args)
80 { 80 {
81 emit layoutAboutToBeChanged(); 81 emit layoutAboutToBeChanged();
82 this->body.insert(position, std::make_unique<T>(args...)); 82 this->body.insert(position, std::make_unique<T>(args...));
83 linetypes::Object* pointer = this->body[position].get(); 83 ldraw::Object* pointer = this->body[position].get();
84 this->objectsById[pointer->id] = pointer; 84 this->objectsById[pointer->id] = pointer;
85 emit objectAdded(pointer->id, position); 85 emit objectAdded(pointer->id, position);
86 emit layoutChanged(); 86 emit layoutChanged();
87 return pointer->id; 87 return pointer->id;
88 } 88 }

mercurial