src/documentmanager.h

changeset 214
8e1fe64ce4e3
parent 213
ee5758ddb6d2
child 230
a1f3f7d9078b
equal deleted inserted replaced
213:ee5758ddb6d2 214:8e1fe64ce4e3
27 ManuallyOpened, 27 ManuallyOpened,
28 //! \brief Document was opened automatically in order to resolve subfile references 28 //! \brief Document was opened automatically in order to resolve subfile references
29 AutomaticallyOpened, 29 AutomaticallyOpened,
30 }; 30 };
31 31
32 class DocumentManager 32 class DocumentManager : public QObject
33 { 33 {
34 Q_OBJECT
34 public: 35 public:
35 struct ModelInfo 36 struct ModelInfo
36 { 37 {
37 std::unique_ptr<Model> model; 38 std::unique_ptr<Model> model;
38 ModelId id; 39 ModelId id;
39 QString path; 40 QString path;
40 OpenType opentype; 41 OpenType opentype;
41 std::map<QString, ModelId> dependencies = {}; 42 std::map<QString, ModelId> dependencies = {};
42 PolygonCache polygonCache; 43 PolygonCache polygonCache = {};
44 QObject* payload;
43 }; 45 };
44 using MissingDependencies = std::map<QString, QString>; 46 using MissingDependencies = std::map<QString, QString>;
45 DocumentManager(); 47 DocumentManager(QObject* parent = nullptr);
48 auto begin() const { return this->openModels.begin(); }
49 auto end() const { return this->openModels.end(); }
46 ModelId newModel(); 50 ModelId newModel();
47 Model* findDependencyByName(const ModelId modelId, const QString& name); 51 Model* findDependencyByName(const ModelId modelId, const QString& name);
48 Model* getModelById(ModelId modelId); 52 Model* getModelById(ModelId modelId);
49 std::optional<ModelId> openModel(const QString& path, QTextStream& errorStream, const OpenType openType); 53 std::optional<ModelId> openModel(const QString& path, QTextStream& errorStream, const OpenType openType);
50 std::map<QString, QString> loadDependenciesForAllModels(const LibraryManager &libraries); 54 std::map<QString, QString> loadDependenciesForAllModels(const LibraryManager &libraries);
56 const LibraryManager &libraries, 60 const LibraryManager &libraries,
57 QTextStream &errorStream); 61 QTextStream &errorStream);
58 bool saveModel(const ModelId modelId, QTextStream& errors); 62 bool saveModel(const ModelId modelId, QTextStream& errors);
59 std::optional<ModelId> findIdForModel(const Model* model) const; 63 std::optional<ModelId> findIdForModel(const Model* model) const;
60 PolygonCache* getPolygonCacheForModel(ModelId modelId); 64 PolygonCache* getPolygonCacheForModel(ModelId modelId);
61 const ModelInfo* infoForModel(ModelId modelId) const; 65 const ModelInfo* find(ModelId modelId) const;
66 void setModelPayload(ModelId modelId, QObject* object);
67 template<typename T>
68 T* findPayload(ModelId modelId) const
69 {
70 const ModelInfo* info = this->find(modelId);
71 return info ? qobject_cast<T*>(info->payload) : nullptr;
72 }
62 private: 73 private:
63 int modelIdCounter = 0; 74 int modelIdCounter = 0;
64 std::map<ModelId, ModelInfo> openModels; 75 std::map<ModelId, ModelInfo> openModels;
65 void collectReferences(QSet<QString> &referenced, const QString& name, const Model* model); 76 void collectReferences(QSet<QString> &referenced, const QString& name, const Model* model);
66 void updateDependencies(ModelInfo* model); 77 void updateDependencies(ModelInfo* model);

mercurial