|
1 #pragma once |
|
2 #include <memory> |
|
3 #include "main.h" |
|
4 #include "header.h" |
|
5 #include "objecttypes/modelobject.h" |
|
6 |
|
7 class Model : public QObject |
|
8 { |
|
9 Q_OBJECT |
|
10 public: |
|
11 class EditContext; |
|
12 Model(); |
|
13 Model(const Model &) = delete; |
|
14 int size() const; |
|
15 EditContext edit(); |
|
16 private: |
|
17 template<typename T, typename... Args> |
|
18 T* append(Args&&... args); |
|
19 template<typename T, typename... Args> |
|
20 T* insert(int position, Args&&... args); |
|
21 bool modified = false; |
|
22 QString path; |
|
23 using ModelObjectPointer = std::unique_ptr<modelobjects::BaseObject>; |
|
24 LDHeader header; |
|
25 std::vector<ModelObjectPointer> body; |
|
26 }; |
|
27 |
|
28 template<typename T, typename... Args> |
|
29 T* Model::append(Args&&... args) |
|
30 { |
|
31 this->body.push_back(std::make_unique<T>(args...)); |
|
32 return static_cast<T*>(this->body.back().get()); |
|
33 } |
|
34 |
|
35 template<typename T, typename... Args> |
|
36 T* Model::insert(int position, Args&&... args) |
|
37 { |
|
38 this->body.insert(position, std::make_unique<T>(args...)); |
|
39 return this->body[position]; |
|
40 } |