src/model.h

changeset 3
55a55a9ec2c2
child 5
593a658cba8e
equal deleted inserted replaced
2:2bdc3ac5e77c 3:55a55a9ec2c2
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 }

mercurial