src/documentmanager.h

changeset 148
e1ced2523cad
parent 147
37f936073cac
child 150
b6cbba6e29a1
equal deleted inserted replaced
147:37f936073cac 148:e1ced2523cad
24 { 24 {
25 Q_OBJECT 25 Q_OBJECT
26 public: 26 public:
27 enum OpenType 27 enum OpenType
28 { 28 {
29 /**
30 * Document was opened manually by the user
31 */
29 ManuallyOpened, 32 ManuallyOpened,
33 /**
34 * Document was opened automatically in order to resolve subfile references
35 */
30 AutomaticallyOpened, 36 AutomaticallyOpened,
31 }; 37 };
32 DocumentManager(QObject* parent = nullptr); 38 DocumentManager(QObject* parent = nullptr);
33 QString newModel(); 39 ModelId newModel();
34 Model* findModelByName(const QString& name); 40 Model* findDependencyByName(const ModelId modelId, const QString& name);
35 QString openModel(const QString& path, QTextStream& errorStream, const OpenType openType); 41 Model* getModelById(ModelId modelId);
42 std::optional<ModelId> openModel(const QString& path, QTextStream& errorStream, const OpenType openType);
36 QString makeNewModelName(); 43 QString makeNewModelName();
37 void loadDependenciesForModel(const QString& modelName, 44 void loadDependenciesForAllModels(const LibraryManager &libraries, QTextStream &errorStream);
45 void loadDependenciesForModel(const ModelId modelId,
38 const QString& path, 46 const QString& path,
39 const LibraryManager& libraries, 47 const LibraryManager& libraries,
40 QTextStream& errorStream); 48 QTextStream& errorStream);
41 void closeDocument(const QString& name); 49 void closeDocument(const ModelId modelId);
50 const QString* modelPath(ModelId modelId) const;
51 void setModelPath(
52 const ModelId modelId,
53 const QString& newPath,
54 const LibraryManager &libraries,
55 QTextStream &errorStream);
56 bool saveModel(const ModelId modelId, QTextStream& errors);
57 std::optional<ModelId> findIdForModel(const Model* model) const;
42 private: 58 private:
43 void collectReferences(QSet<QString> &referenced, const QString& name, const Model* model);
44 struct ModelInfo 59 struct ModelInfo
45 { 60 {
46 std::unique_ptr<Model> model; 61 std::unique_ptr<Model> model;
62 QString path;
47 OpenType opentype; 63 OpenType opentype;
64 std::map<QString, ModelId> dependencies = {};
48 }; 65 };
66 struct LoadDepedenciesBag;
67 int modelIdCounter = 0;
49 int untitledNameCounter = 0; 68 int untitledNameCounter = 0;
50 std::map<QString, ModelInfo> openModels; 69 std::map<ModelId, ModelInfo> openModels;
51 void loadDependenciesForModel(const QString& modelName, 70 void loadDependenciesForModel(const ModelId modelId, const QString& path, LoadDepedenciesBag& bag);
52 const QString& path, 71 void collectReferences(QSet<QString> &referenced, const QString& name, const Model* model);
53 const LibraryManager& libraries, 72 void updateDependencies(ModelInfo* model);
54 QStringList& missing, 73 void prune();
55 QStringList& processed, 74 bool isReferencedByAnything(const ModelId modelId) const;
56 QTextStream& errorStream);
57 }; 75 };
58 76
59 QString pathToName(const QFileInfo& path); 77 QString pathToName(const QFileInfo& path);

mercurial