aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmlpreview
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2023-01-05 13:53:41 +0100
committerhjk <hjk@qt.io>2023-01-16 09:12:45 +0000
commit4a217001755d3a5cd2e2ac0eace0ee6f3ef3786f (patch)
treeaeb450ef738db62f86df05dfe66f54dbfe7b54dc /src/plugins/qmlpreview
parentc151835834938a9d71895c7fa3c20818a26aa5bb (diff)
QmlPreview: A dedicated class for the QmlPreviewRunWorkerFactory
Change-Id: I994f339ac1ca35e9b1dc7e2572682c4bcdb485ea Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/qmlpreview')
-rw-r--r--src/plugins/qmlpreview/qmlpreviewplugin.cpp123
-rw-r--r--src/plugins/qmlpreview/qmlpreviewplugin.h17
-rw-r--r--src/plugins/qmlpreview/qmlpreviewruncontrol.cpp86
-rw-r--r--src/plugins/qmlpreview/qmlpreviewruncontrol.h31
4 files changed, 131 insertions, 126 deletions
diff --git a/src/plugins/qmlpreview/qmlpreviewplugin.cpp b/src/plugins/qmlpreview/qmlpreviewplugin.cpp
index ddec4c7bdbe..b1c10b6ead8 100644
--- a/src/plugins/qmlpreview/qmlpreviewplugin.cpp
+++ b/src/plugins/qmlpreview/qmlpreviewplugin.cpp
@@ -42,6 +42,7 @@
#include <android/androidconstants.h>
#include <QAction>
+#include <QTimer>
using namespace ProjectExplorer;
@@ -90,20 +91,16 @@ static std::unique_ptr<QmlDebugTranslationClient> defaultCreateDebugTranslationC
{
auto client = std::make_unique<QmlPreview::QmlDebugTranslationClient>(connection);
return client;
-};
-
+}
class QmlPreviewPluginPrivate : public QObject
{
public:
explicit QmlPreviewPluginPrivate(QmlPreviewPlugin *parent);
- void previewCurrentFile();
void onEditorChanged(Core::IEditor *editor);
void onEditorAboutToClose(Core::IEditor *editor);
void setDirty();
- void addPreview(ProjectExplorer::RunControl *preview);
- void removePreview(ProjectExplorer::RunControl *preview);
void attachToEditor();
void checkEditor();
void checkFile(const QString &fileName);
@@ -114,7 +111,7 @@ public:
QmlPreviewRunControlList runningPreviews() const;
QmlPreviewFileClassifier fileClassifier() const;
- void setFileClassifier(QmlPreviewFileClassifier fileClassifer);
+ void setFileClassifier(QmlPreviewFileClassifier fileClassifier);
float zoomFactor() const;
void setZoomFactor(float zoomFactor);
@@ -128,60 +125,24 @@ public:
QmlPreviewPlugin *q = nullptr;
QThread m_parseThread;
QString m_previewedFile;
- QmlPreviewFileLoader m_fileLoader = nullptr;
Core::IEditor *m_lastEditor = nullptr;
QmlPreviewRunControlList m_runningPreviews;
bool m_dirty = false;
- QmlPreview::QmlPreviewFileClassifier m_fileClassifer = nullptr;
- float m_zoomFactor = -1.0;
- QmlPreview::QmlPreviewFpsHandler m_fpsHandler = nullptr;
QString m_localeIsoCode;
- QmlDebugTranslationClientCreator m_createDebugTranslationClientMethod;
LocalQmlPreviewSupportFactory localRunWorkerFactory;
- RunWorkerFactory runWorkerFactory{
- [this](RunControl *runControl) {
- QmlPreviewRunner *runner = new QmlPreviewRunner(QmlPreviewRunnerSetting{
- runControl,
- m_fileLoader,
- m_fileClassifer,
- m_fpsHandler,
- m_zoomFactor,
- m_localeIsoCode,
- m_createDebugTranslationClientMethod
- });
- connect(q, &QmlPreviewPlugin::updatePreviews,
- runner, &QmlPreviewRunner::loadFile);
- connect(q, &QmlPreviewPlugin::rerunPreviews,
- runner, &QmlPreviewRunner::rerun);
- connect(runner, &QmlPreviewRunner::ready,
- this, &QmlPreviewPluginPrivate::previewCurrentFile);
- connect(q, &QmlPreviewPlugin::zoomFactorChanged,
- runner, &QmlPreviewRunner::zoom);
- connect(q, &QmlPreviewPlugin::localeIsoCodeChanged,
- runner, &QmlPreviewRunner::language);
-
- connect(runner, &RunWorker::started, this, [this, runControl] {
- addPreview(runControl);
- });
- connect(runner, &RunWorker::stopped, this, [this, runControl] {
- removePreview(runControl);
- });
-
- return runner;
- },
- {Constants::QML_PREVIEW_RUNNER}
- };
+ QmlPreviewRunnerSetting m_settings;
+ QmlPreviewRunWorkerFactory runWorkerFactory;
};
QmlPreviewPluginPrivate::QmlPreviewPluginPrivate(QmlPreviewPlugin *parent)
- : q(parent)
+ : q(parent), runWorkerFactory(parent, &m_settings)
{
- m_fileLoader = &defaultFileLoader;
- m_fileClassifer = &defaultFileClassifier;
- m_fpsHandler = &defaultFpsHandler;
- m_createDebugTranslationClientMethod = &defaultCreateDebugTranslationClientMethod;
+ m_settings.fileLoader = &defaultFileLoader;
+ m_settings.fileClassifier = &defaultFileClassifier;
+ m_settings.fpsHandler = &defaultFpsHandler;
+ m_settings.createDebugTranslationClientMethod = &defaultCreateDebugTranslationClientMethod;
Core::ActionContainer *menu = Core::ActionManager::actionContainer(
Constants::M_BUILDPROJECT);
@@ -211,7 +172,7 @@ QmlPreviewPluginPrivate::QmlPreviewPluginPrivate(QmlPreviewPlugin *parent)
action, [action](const QmlPreviewRunControlList &previews) {
action->setEnabled(!previews.isEmpty());
});
- connect(action, &QAction::triggered, this, &QmlPreviewPluginPrivate::previewCurrentFile);
+ connect(action, &QAction::triggered, q, &QmlPreviewPlugin::previewCurrentFile);
menu->addAction(
Core::ActionManager::registerAction(action, "QmlPreview.PreviewFile", Core::Context(Constants::C_PROJECT_TREE)),
Constants::G_FILE_OTHER);
@@ -285,49 +246,49 @@ QmlPreviewRunControlList QmlPreviewPlugin::runningPreviews() const
QmlPreviewFileLoader QmlPreviewPlugin::fileLoader() const
{
- return d->m_fileLoader;
+ return d->m_settings.fileLoader;
}
QmlPreviewFileClassifier QmlPreviewPlugin::fileClassifier() const
{
- return d->m_fileClassifer;
+ return d->m_settings.fileClassifier;
}
-void QmlPreviewPlugin::setFileClassifier(QmlPreviewFileClassifier fileClassifer)
+void QmlPreviewPlugin::setFileClassifier(QmlPreviewFileClassifier fileClassifier)
{
- if (d->m_fileClassifer == fileClassifer)
+ if (d->m_settings.fileClassifier == fileClassifier)
return;
- d->m_fileClassifer = fileClassifer;
- emit fileClassifierChanged(d->m_fileClassifer);
+ d->m_settings.fileClassifier = fileClassifier;
+ emit fileClassifierChanged(d->m_settings.fileClassifier);
}
float QmlPreviewPlugin::zoomFactor() const
{
- return d->m_zoomFactor;
+ return d->m_settings.zoomFactor;
}
void QmlPreviewPlugin::setZoomFactor(float zoomFactor)
{
- if (d->m_zoomFactor == zoomFactor)
+ if (d->m_settings.zoomFactor == zoomFactor)
return;
- d->m_zoomFactor = zoomFactor;
- emit zoomFactorChanged(d->m_zoomFactor);
+ d->m_settings.zoomFactor = zoomFactor;
+ emit zoomFactorChanged(d->m_settings.zoomFactor);
}
QmlPreviewFpsHandler QmlPreviewPlugin::fpsHandler() const
{
- return d->m_fpsHandler;
+ return d->m_settings.fpsHandler;
}
void QmlPreviewPlugin::setFpsHandler(QmlPreviewFpsHandler fpsHandler)
{
- if (d->m_fpsHandler == fpsHandler)
+ if (d->m_settings.fpsHandler == fpsHandler)
return;
- d->m_fpsHandler = fpsHandler;
- emit fpsHandlerChanged(d->m_fpsHandler);
+ d->m_settings.fpsHandler = fpsHandler;
+ emit fpsHandlerChanged(d->m_settings.fpsHandler);
}
QString QmlPreviewPlugin::localeIsoCode() const
@@ -348,19 +309,19 @@ void QmlPreviewPlugin::setLocaleIsoCode(const QString &localeIsoCode)
void QmlPreviewPlugin::setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator)
{
- d->m_createDebugTranslationClientMethod = creator;
+ d->m_settings.createDebugTranslationClientMethod = creator;
}
void QmlPreviewPlugin::setFileLoader(QmlPreviewFileLoader fileLoader)
{
- if (d->m_fileLoader == fileLoader)
+ if (d->m_settings.fileLoader == fileLoader)
return;
- d->m_fileLoader = fileLoader;
- emit fileLoaderChanged(d->m_fileLoader);
+ d->m_settings.fileLoader = fileLoader;
+ emit fileLoaderChanged(d->m_settings.fileLoader);
}
-void QmlPreviewPluginPrivate::previewCurrentFile()
+void QmlPreviewPlugin::previewCurrentFile()
{
const Node *currentNode = ProjectTree::currentNode();
if (!currentNode || !currentNode->asFileNode()
@@ -368,10 +329,10 @@ void QmlPreviewPluginPrivate::previewCurrentFile()
return;
const QString file = currentNode->filePath().toString();
- if (file != m_previewedFile)
- q->setPreviewedFile(file);
+ if (file != d->m_previewedFile)
+ setPreviewedFile(file);
else
- checkFile(file);
+ d->checkFile(file);
}
void QmlPreviewPluginPrivate::onEditorChanged(Core::IEditor *editor)
@@ -420,16 +381,16 @@ void QmlPreviewPluginPrivate::setDirty()
});
}
-void QmlPreviewPluginPrivate::addPreview(ProjectExplorer::RunControl *preview)
+void QmlPreviewPlugin::addPreview(RunControl *preview)
{
- m_runningPreviews.append(preview);
- emit q->runningPreviewsChanged(m_runningPreviews);
+ d->m_runningPreviews.append(preview);
+ emit runningPreviewsChanged(d->m_runningPreviews);
}
-void QmlPreviewPluginPrivate::removePreview(ProjectExplorer::RunControl *preview)
+void QmlPreviewPlugin::removePreview(RunControl *preview)
{
- m_runningPreviews.removeOne(preview);
- emit q->runningPreviewsChanged(m_runningPreviews);
+ d->m_runningPreviews.removeOne(preview);
+ emit runningPreviewsChanged(d->m_runningPreviews);
}
void QmlPreviewPluginPrivate::attachToEditor()
@@ -472,11 +433,11 @@ void QmlPreviewPluginPrivate::checkEditor()
void QmlPreviewPluginPrivate::checkFile(const QString &fileName)
{
- if (!m_fileLoader)
+ if (!m_settings.fileLoader)
return;
bool success = false;
- const QByteArray contents = m_fileLoader(fileName, &success);
+ const QByteArray contents = m_settings.fileLoader(fileName, &success);
if (success) {
emit q->checkDocument(fileName,
@@ -490,7 +451,7 @@ void QmlPreviewPluginPrivate::checkFile(const QString &fileName)
void QmlPreviewPluginPrivate::triggerPreview(const QString &changedFile, const QByteArray &contents)
{
if (m_previewedFile.isEmpty())
- previewCurrentFile();
+ q->previewCurrentFile();
else
emit q->updatePreviews(m_previewedFile, changedFile, contents);
}
diff --git a/src/plugins/qmlpreview/qmlpreviewplugin.h b/src/plugins/qmlpreview/qmlpreviewplugin.h
index 569dd6f4db5..4ae3840f87c 100644
--- a/src/plugins/qmlpreview/qmlpreviewplugin.h
+++ b/src/plugins/qmlpreview/qmlpreviewplugin.h
@@ -15,15 +15,18 @@
namespace Core { class IEditor; }
+namespace ProjectExplorer { class RunControl; }
+
namespace QmlDebug { class QmlDebugConnection; }
namespace QmlPreview {
-typedef bool (*QmlPreviewFileClassifier) (const QString &);
-typedef QByteArray (*QmlPreviewFileLoader)(const QString &, bool *);
-typedef void (*QmlPreviewFpsHandler)(quint16[8]);
-typedef QList<ProjectExplorer::RunControl *> QmlPreviewRunControlList;
-typedef std::function<std::unique_ptr<QmlDebugTranslationClient>(QmlDebug::QmlDebugConnection *)> QmlDebugTranslationClientCreator;
+using QmlPreviewFileClassifier = bool (*)(const QString &);
+using QmlPreviewFileLoader = QByteArray (*)(const QString &, bool *);
+using QmlPreviewFpsHandler = void (*)(quint16[8]);
+using QmlPreviewRunControlList = QList<ProjectExplorer::RunControl *>;
+using QmlDebugTranslationClientCreator =
+ std::function<std::unique_ptr<QmlDebugTranslationClient>(QmlDebug::QmlDebugConnection *)>;
class QMLPREVIEW_EXPORT QmlPreviewPlugin : public ExtensionSystem::IPlugin
{
@@ -70,6 +73,10 @@ public:
void setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator);
+ void previewCurrentFile();
+ void addPreview(ProjectExplorer::RunControl *preview);
+ void removePreview(ProjectExplorer::RunControl *preview);
+
signals:
void checkDocument(const QString &name, const QByteArray &contents,
QmlJS::Dialect::Enum dialect);
diff --git a/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp b/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp
index 639923cec95..dab9af41364 100644
--- a/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp
+++ b/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp
@@ -1,6 +1,7 @@
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#include "qmlpreviewconnectionmanager.h"
#include "qmlpreviewruncontrol.h"
#include <qmlprojectmanager/qmlproject.h>
@@ -22,13 +23,39 @@
using namespace ProjectExplorer;
using namespace Utils;
+using namespace QmlPreview::Internal;
namespace QmlPreview {
static const QString QmlServerUrl = "QmlServerUrl";
-QmlPreviewRunner::QmlPreviewRunner(const QmlPreviewRunnerSetting &settings)
- : RunWorker(settings.runControl)
+class QmlPreviewRunner : public ProjectExplorer::RunWorker
+{
+ Q_OBJECT
+
+public:
+ QmlPreviewRunner(ProjectExplorer::RunControl *runControl,
+ const QmlPreviewRunnerSetting &settings);
+
+ void setServerUrl(const QUrl &serverUrl);
+ QUrl serverUrl() const;
+
+signals:
+ void loadFile(const QString &previewedFile, const QString &changedFile,
+ const QByteArray &contents);
+ void language(const QString &locale);
+ void zoom(float zoomFactor);
+ void rerun();
+ void ready();
+private:
+ void start() override;
+ void stop() override;
+
+ Internal::QmlPreviewConnectionManager m_connectionManager;
+};
+
+QmlPreviewRunner::QmlPreviewRunner(RunControl *runControl, const QmlPreviewRunnerSetting &settings)
+ : RunWorker(runControl)
{
setId("QmlPreviewRunner");
m_connectionManager.setFileLoader(settings.fileLoader);
@@ -38,37 +65,36 @@ QmlPreviewRunner::QmlPreviewRunner(const QmlPreviewRunnerSetting &settings)
settings.createDebugTranslationClientMethod);
connect(this, &QmlPreviewRunner::loadFile,
- &m_connectionManager, &Internal::QmlPreviewConnectionManager::loadFile);
+ &m_connectionManager, &QmlPreviewConnectionManager::loadFile);
connect(this, &QmlPreviewRunner::rerun,
- &m_connectionManager, &Internal::QmlPreviewConnectionManager::rerun);
+ &m_connectionManager, &QmlPreviewConnectionManager::rerun);
connect(this, &QmlPreviewRunner::zoom,
- &m_connectionManager, &Internal::QmlPreviewConnectionManager::zoom);
+ &m_connectionManager, &QmlPreviewConnectionManager::zoom);
connect(this, &QmlPreviewRunner::language,
- &m_connectionManager, &Internal::QmlPreviewConnectionManager::language);
+ &m_connectionManager, &QmlPreviewConnectionManager::language);
- connect(&m_connectionManager, &Internal::QmlPreviewConnectionManager::connectionOpened,
+ connect(&m_connectionManager, &QmlPreviewConnectionManager::connectionOpened,
this, [this, settings]() {
- if (settings.zoom > 0)
- emit zoom(settings.zoom);
+ if (settings.zoomFactor > 0)
+ emit zoom(settings.zoomFactor);
if (!settings.language.isEmpty())
emit language(settings.language);
emit ready();
});
- connect(&m_connectionManager, &Internal::QmlPreviewConnectionManager::restart,
- runControl(), [this]() {
- if (!runControl()->isRunning())
+ connect(&m_connectionManager, &QmlPreviewConnectionManager::restart, runControl, [this, runControl] {
+ if (!runControl->isRunning())
return;
- this->connect(runControl(), &RunControl::stopped, [this] {
+ this->connect(runControl, &RunControl::stopped, [this, runControl] {
auto rc = new RunControl(ProjectExplorer::Constants::QML_PREVIEW_RUN_MODE);
- rc->copyDataFromRunControl(runControl());
+ rc->copyDataFromRunControl(runControl);
ProjectExplorerPlugin::startRunControl(rc);
});
- runControl()->initiateStop();
+ runControl->initiateStop();
});
}
@@ -95,6 +121,34 @@ QUrl QmlPreviewRunner::serverUrl() const
return recordedData(QmlServerUrl).toUrl();
}
+QmlPreviewRunWorkerFactory::QmlPreviewRunWorkerFactory(QmlPreviewPlugin *plugin,
+ const QmlPreviewRunnerSetting *runnerSettings)
+{
+ setProducer([this, plugin, runnerSettings](RunControl *runControl) {
+ auto runner = new QmlPreviewRunner(runControl, *runnerSettings);
+ QObject::connect(plugin, &QmlPreviewPlugin::updatePreviews,
+ runner, &QmlPreviewRunner::loadFile);
+ QObject::connect(plugin, &QmlPreviewPlugin::rerunPreviews,
+ runner, &QmlPreviewRunner::rerun);
+ QObject::connect(runner, &QmlPreviewRunner::ready,
+ plugin, &QmlPreviewPlugin::previewCurrentFile);
+ QObject::connect(plugin, &QmlPreviewPlugin::zoomFactorChanged,
+ runner, &QmlPreviewRunner::zoom);
+ QObject::connect(plugin, &QmlPreviewPlugin::localeIsoCodeChanged,
+ runner, &QmlPreviewRunner::language);
+
+ QObject::connect(runner, &RunWorker::started, plugin, [plugin, runControl] {
+ plugin->addPreview(runControl);
+ });
+ QObject::connect(runner, &RunWorker::stopped, plugin, [plugin, runControl] {
+ plugin->removePreview(runControl);
+ });
+
+ return runner;
+ });
+ addSupportedRunMode(Constants::QML_PREVIEW_RUNNER);
+}
+
class LocalQmlPreviewSupport final : public SimpleTargetRunner
{
public:
@@ -150,3 +204,5 @@ LocalQmlPreviewSupportFactory::LocalQmlPreviewSupportFactory()
}
} // QmlPreview
+
+#include "qmlpreviewruncontrol.moc"
diff --git a/src/plugins/qmlpreview/qmlpreviewruncontrol.h b/src/plugins/qmlpreview/qmlpreviewruncontrol.h
index 3543bf8999e..c6b587f1128 100644
--- a/src/plugins/qmlpreview/qmlpreviewruncontrol.h
+++ b/src/plugins/qmlpreview/qmlpreviewruncontrol.h
@@ -3,45 +3,26 @@
#pragma once
-#include "qmlpreviewconnectionmanager.h"
-#include "qmlpreviewfileontargetfinder.h"
#include "qmlpreviewplugin.h"
+
#include <projectexplorer/runconfiguration.h>
namespace QmlPreview {
-struct QmlPreviewRunnerSetting {
- ProjectExplorer::RunControl *runControl = nullptr;
+struct QmlPreviewRunnerSetting
+{
QmlPreviewFileLoader fileLoader;
QmlPreviewFileClassifier fileClassifier;
QmlPreviewFpsHandler fpsHandler;
- float zoom = 1.0;
+ float zoomFactor = 1.0;
QString language;
QmlDebugTranslationClientCreator createDebugTranslationClientMethod;
};
-class QmlPreviewRunner : public ProjectExplorer::RunWorker
+class QmlPreviewRunWorkerFactory final : public ProjectExplorer::RunWorkerFactory
{
- Q_OBJECT
-
public:
- QmlPreviewRunner(const QmlPreviewRunnerSetting &settings);
-
- void setServerUrl(const QUrl &serverUrl);
- QUrl serverUrl() const;
-
-signals:
- void loadFile(const QString &previewedFile, const QString &changedFile,
- const QByteArray &contents);
- void language(const QString &locale);
- void zoom(float zoomFactor);
- void rerun();
- void ready();
-private:
- void start() override;
- void stop() override;
-
- Internal::QmlPreviewConnectionManager m_connectionManager;
+ QmlPreviewRunWorkerFactory(QmlPreviewPlugin *plugin, const QmlPreviewRunnerSetting *runnerSettings);
};
class LocalQmlPreviewSupportFactory final : public ProjectExplorer::RunWorkerFactory