forked from qt-creator/qt-creator
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:
committed by
Thomas Hartmann
parent
973cb815bd
commit
3babbe2def
@@ -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 *) {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user