forked from qt-creator/qt-creator
QmlDesigner: Add QmlDesignerProjectManager
Task-number: QDS-5886 Change-Id: I78605faa1871c9f27b26173d89e3daf68a07fd04 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
committed by
Thomas Hartmann
parent
3fd3cc307e
commit
00e3a3fa4b
@@ -36,6 +36,7 @@ add_qtc_plugin(QmlDesigner
|
||||
qmldesignerconstants.h
|
||||
qmldesignericons.h
|
||||
qmldesignerplugin.cpp qmldesignerplugin.h
|
||||
qmldesignerprojectmanager.cpp qmldesignerprojectmanager.h
|
||||
settingspage.cpp settingspage.h settingspage.ui
|
||||
shortcutmanager.cpp shortcutmanager.h
|
||||
designermcumanager.cpp designermcumanager.h
|
||||
|
||||
@@ -24,15 +24,16 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmldesignerplugin.h"
|
||||
#include "exception.h"
|
||||
#include "qmldesignerconstants.h"
|
||||
#include "designmodewidget.h"
|
||||
#include "settingspage.h"
|
||||
#include "designmodecontext.h"
|
||||
#include "openuiqmlfiledialog.h"
|
||||
#include "generateresource.h"
|
||||
#include "designmodewidget.h"
|
||||
#include "exception.h"
|
||||
#include "generatecmakelists.h"
|
||||
#include "generateresource.h"
|
||||
#include "nodeinstanceview.h"
|
||||
#include "openuiqmlfiledialog.h"
|
||||
#include "qmldesignerconstants.h"
|
||||
#include "qmldesignerprojectmanager.h"
|
||||
#include "settingspage.h"
|
||||
|
||||
#include <metainfo.h>
|
||||
#include <connectionview.h>
|
||||
@@ -118,6 +119,7 @@ QtQuickDesignerFactory::QtQuickDesignerFactory()
|
||||
class QmlDesignerPluginPrivate
|
||||
{
|
||||
public:
|
||||
QmlDesignerProjectManager projectManager;
|
||||
ViewManager viewManager;
|
||||
DocumentManager documentManager;
|
||||
ShortCutManager shortCutManager;
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2022 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmldesignerprojectmanager.h"
|
||||
|
||||
#include <coreplugin/editormanager/editormanager.h>
|
||||
#include <coreplugin/icore.h>
|
||||
#include <projectexplorer/project.h>
|
||||
#include <projectexplorer/session.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <projectstorage/filestatuscache.h>
|
||||
#include <projectstorage/filesystem.h>
|
||||
#include <projectstorage/nonlockingmutex.h>
|
||||
#include <projectstorage/projectstorage.h>
|
||||
#include <projectstorage/projectstorageupdater.h>
|
||||
#include <projectstorage/qmldocumentparser.h>
|
||||
#include <projectstorage/qmltypesparser.h>
|
||||
#include <projectstorage/sourcepathcache.h>
|
||||
#include <sqlitedatabase.h>
|
||||
#include <qmlprojectmanager/qmlproject.h>
|
||||
#include <qtsupport/baseqtversion.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
|
||||
#include <asynchronousexplicitimagecache.h>
|
||||
#include <imagecache/asynchronousimagefactory.h>
|
||||
#include <imagecache/explicitimagecacheimageprovider.h>
|
||||
#include <imagecache/imagecachecollector.h>
|
||||
#include <imagecache/imagecacheconnectionmanager.h>
|
||||
#include <imagecache/imagecachegenerator.h>
|
||||
#include <imagecache/imagecachestorage.h>
|
||||
#include <imagecache/timestampprovider.h>
|
||||
|
||||
#include <filesystem>
|
||||
#include <type_traits>
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
class PreviewImageCacheData
|
||||
{
|
||||
public:
|
||||
Sqlite::Database database{
|
||||
Utils::PathString{Core::ICore::cacheResourcePath("previewcache.db").toString()}};
|
||||
ImageCacheStorage<Sqlite::Database> storage{database};
|
||||
ImageCacheConnectionManager connectionManager;
|
||||
ImageCacheCollector collector{connectionManager};
|
||||
ImageCacheGenerator generator{collector, storage};
|
||||
TimeStampProvider timeStampProvider;
|
||||
AsynchronousExplicitImageCache cache{storage};
|
||||
AsynchronousImageFactory factory{storage, generator, timeStampProvider};
|
||||
ExplicitImageCacheImageProvider imageProvider{cache, QImage{}};
|
||||
};
|
||||
|
||||
class QmlDesignerProjectManagerProjectData
|
||||
{
|
||||
public:
|
||||
::ProjectExplorer::Target *activeTarget = nullptr;
|
||||
};
|
||||
|
||||
QmlDesignerProjectManager::QmlDesignerProjectManager()
|
||||
: m_imageCacheData{std::make_unique<PreviewImageCacheData>()}
|
||||
{
|
||||
auto editorManager = ::Core::EditorManager::instance();
|
||||
QObject::connect(editorManager, &::Core::EditorManager::editorOpened, [&](auto *editor) {
|
||||
editorOpened(editor);
|
||||
});
|
||||
QObject::connect(editorManager, &::Core::EditorManager::currentEditorChanged, [&](auto *editor) {
|
||||
currentEditorChanged(editor);
|
||||
});
|
||||
QObject::connect(editorManager, &::Core::EditorManager::editorsClosed, [&](const auto &editors) {
|
||||
editorsClosed(editors);
|
||||
});
|
||||
auto sessionManager = ::ProjectExplorer::SessionManager::instance();
|
||||
QObject::connect(sessionManager,
|
||||
&::ProjectExplorer::SessionManager::projectAdded,
|
||||
[&](auto *project) { projectAdded(project); });
|
||||
QObject::connect(sessionManager,
|
||||
&::ProjectExplorer::SessionManager::aboutToRemoveProject,
|
||||
[&](auto *project) { aboutToRemoveProject(project); });
|
||||
QObject::connect(sessionManager,
|
||||
&::ProjectExplorer::SessionManager::projectRemoved,
|
||||
[&](auto *project) { projectRemoved(project); });
|
||||
}
|
||||
|
||||
QmlDesignerProjectManager::~QmlDesignerProjectManager() = default;
|
||||
|
||||
void QmlDesignerProjectManager::editorOpened(::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());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void QmlDesignerProjectManager::projectAdded(::ProjectExplorer::Project *) {}
|
||||
|
||||
void QmlDesignerProjectManager::aboutToRemoveProject(::ProjectExplorer::Project *project)
|
||||
{
|
||||
::QmlProjectManager::QmlBuildSystem *qmlBuildSystem = getQmlBuildSystem(project->activeTarget());
|
||||
|
||||
if (qmlBuildSystem)
|
||||
m_imageCacheData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8());
|
||||
}
|
||||
|
||||
void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {}
|
||||
|
||||
} // namespace QmlDesigner
|
||||
@@ -0,0 +1,64 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2022 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QList>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace Core {
|
||||
class IEditor;
|
||||
} // namespace Core
|
||||
|
||||
namespace ProjectExplorer {
|
||||
class Project;
|
||||
class Target;
|
||||
} // namespace ProjectExplorer
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
class QmlDesignerProjectManagerProjectData;
|
||||
class PreviewImageCacheData;
|
||||
|
||||
class QmlDesignerProjectManager
|
||||
{
|
||||
public:
|
||||
QmlDesignerProjectManager();
|
||||
~QmlDesignerProjectManager();
|
||||
|
||||
private:
|
||||
void editorOpened(::Core::IEditor *editor);
|
||||
void currentEditorChanged(::Core::IEditor *);
|
||||
void editorsClosed(const QList<Core::IEditor *> &editor);
|
||||
void projectAdded(::ProjectExplorer::Project *project);
|
||||
void aboutToRemoveProject(::ProjectExplorer::Project *project);
|
||||
void projectRemoved(::ProjectExplorer::Project *project);
|
||||
|
||||
private:
|
||||
std::unique_ptr<QmlDesignerProjectManagerProjectData> m_projectData;
|
||||
std::unique_ptr<PreviewImageCacheData> m_imageCacheData;
|
||||
};
|
||||
} // namespace QmlDesigner
|
||||
Reference in New Issue
Block a user