QmlDesigner: Delete the preview factory for every project change

Change-Id: Ia49608ea327d68ec12969cc079d85895515e1f12
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2022-01-20 11:22:20 +01:00
parent 2dead05a03
commit 1fb54d4f2b
2 changed files with 13 additions and 12 deletions

View File

@@ -97,17 +97,20 @@ public:
Sqlite::JournalMode::Wal, Sqlite::JournalMode::Wal,
Sqlite::LockingMode::Normal}; Sqlite::LockingMode::Normal};
ImageCacheStorage<Sqlite::Database> storage{database}; ImageCacheStorage<Sqlite::Database> storage{database};
ImageCacheConnectionManager connectionManager;
ImageCacheCollector collector{connectionManager,
ImageCacheCollectorNullImageHandling::DontCaptureNullImage};
TimeStampProvider timeStampProvider;
AsynchronousExplicitImageCache cache{storage}; AsynchronousExplicitImageCache cache{storage};
AsynchronousImageFactory factory{storage, timeStampProvider, collector};
}; };
class QmlDesignerProjectManagerProjectData class QmlDesignerProjectManagerProjectData
{ {
public: public:
QmlDesignerProjectManagerProjectData(ImageCacheStorage<Sqlite::Database> &storage)
: factory{storage, timeStampProvider, collector}
{}
ImageCacheConnectionManager connectionManager;
ImageCacheCollector collector{connectionManager,
ImageCacheCollectorNullImageHandling::DontCaptureNullImage};
TimeStampProvider timeStampProvider;
AsynchronousImageFactory factory;
::ProjectExplorer::Target *activeTarget = nullptr; ::ProjectExplorer::Target *activeTarget = nullptr;
}; };
@@ -157,8 +160,8 @@ void QmlDesignerProjectManager::currentEditorChanged(::Core::IEditor *)
m_projectData->activeTarget); m_projectData->activeTarget);
if (qmlBuildSystem) { if (qmlBuildSystem) {
m_imageCacheData->collector.setTarget(m_projectData->activeTarget); m_projectData->collector.setTarget(m_projectData->activeTarget);
m_imageCacheData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8()); m_projectData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8());
} }
} }
@@ -166,17 +169,15 @@ void QmlDesignerProjectManager::editorsClosed(const QList<::Core::IEditor *> &)
void QmlDesignerProjectManager::projectAdded(::ProjectExplorer::Project *project) void QmlDesignerProjectManager::projectAdded(::ProjectExplorer::Project *project)
{ {
m_projectData = std::make_unique<QmlDesignerProjectManagerProjectData>(); m_projectData = std::make_unique<QmlDesignerProjectManagerProjectData>(m_imageCacheData->storage);
m_projectData->activeTarget = project->activeTarget(); m_projectData->activeTarget = project->activeTarget();
} }
void QmlDesignerProjectManager::aboutToRemoveProject(::ProjectExplorer::Project *) void QmlDesignerProjectManager::aboutToRemoveProject(::ProjectExplorer::Project *)
{ {
if (m_projectData) { if (m_projectData)
m_imageCacheData->collector.setTarget(nullptr);
m_projectData.reset(); m_projectData.reset();
} }
}
void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {} void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {}

View File

@@ -62,7 +62,7 @@ private:
void projectRemoved(::ProjectExplorer::Project *project); void projectRemoved(::ProjectExplorer::Project *project);
private: private:
std::unique_ptr<QmlDesignerProjectManagerProjectData> m_projectData;
std::unique_ptr<PreviewImageCacheData> m_imageCacheData; std::unique_ptr<PreviewImageCacheData> m_imageCacheData;
std::unique_ptr<QmlDesignerProjectManagerProjectData> m_projectData;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner