QmlDesigner: Fix image creation

We now do it on document change to work around puppet and codemodel
problems.

Change-Id: Ifd1f6835cc5c0abd3430d5d26685e838dc561ae2
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-05 19:08:23 +01:00
committed by Thomas Hartmann
parent 973cb815bd
commit 3babbe2def

View File

@@ -61,16 +61,27 @@
namespace QmlDesigner { namespace QmlDesigner {
static QString defaultImagePath() namespace {
QString defaultImagePath()
{ {
return Core::ICore::resourcePath("qmldesigner/welcomepage/images/newThumbnail.png").toString(); return Core::ICore::resourcePath("qmldesigner/welcomepage/images/newThumbnail.png").toString();
} }
::QmlProjectManager::QmlBuildSystem *getQmlBuildSystem(::ProjectExplorer::Target *target)
{
return qobject_cast<::QmlProjectManager::QmlBuildSystem *>(target->buildSystem());
}
} // namespace
class PreviewImageCacheData class PreviewImageCacheData
{ {
public: public:
Sqlite::Database database{ Sqlite::Database database{Utils::PathString{
Utils::PathString{Core::ICore::cacheResourcePath("previewcache.db").toString()}}; Core::ICore::cacheResourcePath("previewcache.db").toString()},
Sqlite::JournalMode::Wal,
Sqlite::LockingMode::Normal};
ImageCacheStorage<Sqlite::Database> storage{database}; ImageCacheStorage<Sqlite::Database> storage{database};
ImageCacheConnectionManager connectionManager; ImageCacheConnectionManager connectionManager;
ImageCacheCollector collector{connectionManager}; ImageCacheCollector collector{connectionManager};
@@ -78,7 +89,6 @@ public:
TimeStampProvider timeStampProvider; TimeStampProvider timeStampProvider;
AsynchronousExplicitImageCache cache{storage}; AsynchronousExplicitImageCache cache{storage};
AsynchronousImageFactory factory{storage, generator, timeStampProvider}; AsynchronousImageFactory factory{storage, generator, timeStampProvider};
ExplicitImageCacheImageProvider imageProvider{cache, QImage(defaultImagePath())};
}; };
class QmlDesignerProjectManagerProjectData class QmlDesignerProjectManagerProjectData
@@ -112,39 +122,44 @@ QmlDesignerProjectManager::QmlDesignerProjectManager()
[&](auto *project) { projectRemoved(project); }); [&](auto *project) { projectRemoved(project); });
} }
QmlDesignerProjectManager::~QmlDesignerProjectManager() = default;
void QmlDesignerProjectManager::registerPreviewImageProvider(QQmlEngine *engine) const void QmlDesignerProjectManager::registerPreviewImageProvider(QQmlEngine *engine) const
{ {
engine->addImageProvider("project_preview", &m_imageCacheData->imageProvider); auto imageProvider = std::make_unique<ExplicitImageCacheImageProvider>(m_imageCacheData->cache,
} QImage{defaultImagePath()});
QmlDesignerProjectManager::~QmlDesignerProjectManager() = default; engine->addImageProvider("project_preview", imageProvider.release());
}
void QmlDesignerProjectManager::editorOpened(::Core::IEditor *) {} void QmlDesignerProjectManager::editorOpened(::Core::IEditor *) {}
void QmlDesignerProjectManager::currentEditorChanged(::Core::IEditor *) {} void QmlDesignerProjectManager::currentEditorChanged(::Core::IEditor *)
void QmlDesignerProjectManager::editorsClosed(const QList<::Core::IEditor *> &) {}
namespace {
::QmlProjectManager::QmlBuildSystem *getQmlBuildSystem(::ProjectExplorer::Target *target)
{ {
return qobject_cast<::QmlProjectManager::QmlBuildSystem *>(target->buildSystem()); if (!m_projectData || !m_projectData->activeTarget)
} return;
} // namespace ::QmlProjectManager::QmlBuildSystem *qmlBuildSystem = getQmlBuildSystem(
m_projectData->activeTarget);
void QmlDesignerProjectManager::projectAdded(::ProjectExplorer::Project *project)
{
::QmlProjectManager::QmlBuildSystem *qmlBuildSystem = getQmlBuildSystem(project->activeTarget());
if (qmlBuildSystem) { if (qmlBuildSystem) {
m_imageCacheData->collector.setTarget(project->activeTarget()); m_imageCacheData->collector.setTarget(m_projectData->activeTarget);
m_imageCacheData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8()); m_imageCacheData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8());
} }
} }
void QmlDesignerProjectManager::aboutToRemoveProject(::ProjectExplorer::Project *) {} void QmlDesignerProjectManager::editorsClosed(const QList<::Core::IEditor *> &) {}
void QmlDesignerProjectManager::projectAdded(::ProjectExplorer::Project *project)
{
m_projectData = std::make_unique<QmlDesignerProjectManagerProjectData>();
m_projectData->activeTarget = project->activeTarget();
}
void QmlDesignerProjectManager::aboutToRemoveProject(::ProjectExplorer::Project *)
{
m_projectData.reset();
}
void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {} void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {}