src/documentmanager.h

changeset 212
27259810da6d
parent 193
b4beff48bb7a
child 213
ee5758ddb6d2
--- a/src/documentmanager.h	Thu Jun 09 19:11:27 2022 +0300
+++ b/src/documentmanager.h	Sat Jun 11 14:30:30 2022 +0300
@@ -21,32 +21,33 @@
 #include "model.h"
 #include "polygoncache.h"
 
-class DocumentManager : public QObject
+enum OpenType
 {
-	Q_OBJECT
+	//! \brief Document was opened manually by the user
+	ManuallyOpened,
+	//! \brief Document was opened automatically in order to resolve subfile references
+	AutomaticallyOpened,
+};
+
+class DocumentManager
+{
 public:
-	enum OpenType
+	struct ModelInfo
 	{
-		/**
-		  * Document was opened manually by the user
-		  */
-		ManuallyOpened,
-		/**
-		  * Document was opened automatically in order to resolve subfile references
-		  */
-		AutomaticallyOpened,
+		std::unique_ptr<Model> model;
+		ModelId id;
+		QString path;
+		OpenType opentype;
+		std::map<QString, ModelId> dependencies = {};
+		PolygonCache polygonCache;
 	};
-    DocumentManager(QObject* parent = nullptr);
+	using MissingDependencies = std::map<QString, QString>;
+	DocumentManager();
 	ModelId newModel();
 	Model* findDependencyByName(const ModelId modelId, const QString& name);
 	Model* getModelById(ModelId modelId);
 	std::optional<ModelId> openModel(const QString& path, QTextStream& errorStream, const OpenType openType);
-	QString makeNewModelName();
-	void loadDependenciesForAllModels(const LibraryManager &libraries, QTextStream &errorStream);
-	void loadDependenciesForModel(const ModelId modelId,
-		const QString& path,
-		const LibraryManager& libraries,
-		QTextStream& errorStream);
+	std::map<QString, QString> loadDependenciesForAllModels(const LibraryManager &libraries);
 	void closeDocument(const ModelId modelId);
 	const QString* modelPath(ModelId modelId) const;
 	void setModelPath(
@@ -57,27 +58,16 @@
 	bool saveModel(const ModelId modelId, QTextStream& errors);
 	std::optional<ModelId> findIdForModel(const Model* model) const;
 	PolygonCache* getPolygonCacheForModel(ModelId modelId);
+	const ModelInfo* infoForModel(ModelId modelId) const;
 private:
-	struct ModelInfo
-	{
-		std::unique_ptr<Model> model;
-		ModelId id;
-		QString path;
-		OpenType opentype;
-		std::map<QString, ModelId> dependencies = {};
-	};
-	struct LoadDepedenciesBag;
 	int modelIdCounter = 0;
-	int untitledNameCounter = 0;
 	std::map<ModelId, ModelInfo> openModels;
-	std::map<ModelId, PolygonCache> polygonCaches;
-	void loadDependenciesForModel(const ModelId modelId, const QString& path, LoadDepedenciesBag& bag);
 	void collectReferences(QSet<QString> &referenced, const QString& name, const Model* model);
 	void updateDependencies(ModelInfo* model);
 	void prune();
-	Q_SLOT void modelModified();
 	bool isReferencedByAnything(const ModelId modelId) const;
 	void makePolygonCacheForModel(const ModelId modelId);
 };
 
+QString errorStringFromMissingDependencies(const DocumentManager::MissingDependencies& missing);
 QString pathToName(const QFileInfo& path);

mercurial