diff --git a/src/plugins/qmlpreview/CMakeLists.txt b/src/plugins/qmlpreview/CMakeLists.txt index 00bda33ab0b..6e2dbc4238f 100644 --- a/src/plugins/qmlpreview/CMakeLists.txt +++ b/src/plugins/qmlpreview/CMakeLists.txt @@ -1,3 +1,5 @@ +find_package(Qt5 COMPONENTS QmlDebug REQUIRED) + add_qtc_plugin(QmlPreview DEPENDS QmlDebug QmlJS PLUGIN_DEPENDS Core ProjectExplorer QmlJSTools QtSupport ResourceEditor QmlProjectManager @@ -9,8 +11,6 @@ add_qtc_plugin(QmlPreview qmlpreviewruncontrol.cpp qmlpreviewruncontrol.h qmldebugtranslationclient.cpp qmldebugtranslationclient.h qmlpreview_global.h - projectfileselectionswidget.cpp projectfileselectionswidget.h - qmldebugtranslationwidget.cpp qmldebugtranslationwidget.h ) extend_qtc_plugin(QmlPreview @@ -19,3 +19,21 @@ extend_qtc_plugin(QmlPreview tests/qmlpreviewclient_test.cpp tests/qmlpreviewclient_test.h tests/qmlpreviewplugin_test.cpp tests/qmlpreviewplugin_test.h ) + +# check if Qt version have_qml_debug_translation_protocol +# will be introduced in Qt 6.2, but there are users +# who needs it in older but special built Qt versions aswell +string(REGEX MATCH "^[0-9]*" QT_VERSION_MAJOR ${Qt5_VERSION}) +get_target_property(qmldebugprivate_include_directories + Qt${QT_VERSION_MAJOR}::QmlDebugPrivate + INTERFACE_INCLUDE_DIRECTORIES +) +find_file(have_qml_debug_translation_protocol + NAMES private/qqmldebugtranslationprotocol_p.h + PATHS ${qmldebugprivate_include_directories} +) +extend_qtc_plugin(QmlPreview + CONDITION have_qml_debug_translation_protocol + PUBLIC_DEPENDS Qt5::QmlDebugPrivate + PUBLIC_DEFINES "FOUND_QML_DEBUG_TRANSLATION_PROTOCOL" +) diff --git a/src/plugins/qmlpreview/projectfileselectionswidget.cpp b/src/plugins/qmlpreview/projectfileselectionswidget.cpp deleted file mode 100644 index 44b8451dfcb..00000000000 --- a/src/plugins/qmlpreview/projectfileselectionswidget.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 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 "projectfileselectionswidget.h" - -#include -#include -#include - -#include - -#include -#include -#include -#include - -namespace QmlPreview { - -class ProjectFileItem : public Utils::TreeItem -{ -public: - ProjectFileItem() = default; - ProjectFileItem(const Utils::FilePath &f, bool d) - : filePath(f) - , disabled(d) - {} - - Qt::ItemFlags flags(int) const override - { - return Qt::ItemIsUserCheckable | Qt::ItemIsEnabled; - } - - QVariant data(int , int role) const override - { - if (role == Qt::DisplayRole) - return filePath.toUserOutput(); - if (role == Qt::CheckStateRole) { - if (disabled) - return Qt::Unchecked; - else - return Qt::Checked; - } - return QVariant(); - } - - bool setData(int , const QVariant &data, int role) override - { - if (role != Qt::CheckStateRole) - return false; - disabled = (data == Qt::Unchecked); - return true; - } - - Utils::FilePath filePath; - bool disabled = false; -}; - - -ProjectFileSelectionsWidget::ProjectFileSelectionsWidget(const QString &projectSettingsKey, ProjectExplorer::FileType fileType, QWidget *parent) - : QWidget(parent) - , m_projectSettingsKey(projectSettingsKey) - , m_fileType(fileType) -{ - auto model = new Utils::TreeModel(this); - model->setHeader({tr("Files to test:")}); - auto updateCheckedFiles = [this, model] () { - m_checkedFiles.clear(); - QStringList uncheckedFiles; - model->forAllItems([&, this](ProjectFileItem *item) { - if (item->disabled) - uncheckedFiles.append(item->filePath.toString()); - else - m_checkedFiles.append(item->filePath); - }); - if (auto project = ProjectExplorer::SessionManager::startupProject()) - project->setNamedSettings(m_projectSettingsKey, uncheckedFiles); - emit selectionChanged(m_checkedFiles); - }; - - connect(model, &QAbstractItemModel::dataChanged, updateCheckedFiles); - - auto view = new QTreeView(this); - view->setMinimumSize(QSize(100, 100)); - view->setTextElideMode(Qt::ElideMiddle); - view->setWordWrap(false); - view->setUniformRowHeights(true); - view->setModel(model); - - const auto viewLayout = new QHBoxLayout; - viewLayout->addWidget(view); - - auto layout = new QVBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); - layout->addLayout(viewLayout); - - auto initModel = [this, model, updateCheckedFiles](ProjectExplorer::Project *project) { - if (!project) - return; - - auto refreshModel = [this, model, updateCheckedFiles] () { - model->clear(); - if (auto project = ProjectExplorer::SessionManager::startupProject()) { - const auto settingsDisabledFiles = project->namedSettings(m_projectSettingsKey).toStringList(); - - if (auto rootProjectNode = project->rootProjectNode()) { - auto rootPath = rootProjectNode->filePath(); - - rootProjectNode->forEachNode([this, settingsDisabledFiles, model, rootPath](ProjectExplorer::FileNode *fileNode) { - if (fileNode->fileType() == m_fileType - && !fileNode->filePath().relativeChildPath(rootPath).startsWith("imports/")) { - bool isDisabled = settingsDisabledFiles.contains(fileNode->filePath().toString()); - model->rootItem()->appendChild(new ProjectFileItem(fileNode->filePath(), isDisabled)); - } - }); - } - updateCheckedFiles(); - } - }; - // deploymentDataChanged is only triggered if the active project changed, so it is not a - // problem that maybe many different targets are connected to refreshModel - this->connect(project->activeTarget(), &ProjectExplorer::Target::deploymentDataChanged, - model, refreshModel, Qt::UniqueConnection); - refreshModel(); - }; - - if (auto project = ProjectExplorer::SessionManager::startupProject()) { - initModel(project); - } - - connect(ProjectExplorer::SessionManager::instance(), - &ProjectExplorer::SessionManager::startupProjectChanged, - initModel); -} - -Utils::FilePaths ProjectFileSelectionsWidget::checkedFiles() -{ - return m_checkedFiles; -} - -} // QmlPreview diff --git a/src/plugins/qmlpreview/projectfileselectionswidget.h b/src/plugins/qmlpreview/projectfileselectionswidget.h deleted file mode 100644 index 4bacb41d49b..00000000000 --- a/src/plugins/qmlpreview/projectfileselectionswidget.h +++ /dev/null @@ -1,50 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 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 -#include - -#include - -namespace QmlPreview { - -class ProjectFileSelectionsWidget : public QWidget -{ - Q_OBJECT - -public: - explicit ProjectFileSelectionsWidget(const QString &projectSettingsKey, ProjectExplorer::FileType fileType, QWidget *parent = nullptr); - Utils::FilePaths checkedFiles(); -signals: - void selectionChanged(const Utils::FilePaths &selectedFiles); -private: - const QString m_projectSettingsKey; - ProjectExplorer::FileType m_fileType; - - Utils::FilePaths m_checkedFiles; -}; - -} // QmlPreview diff --git a/src/plugins/qmlpreview/qmldebugtranslationclient.cpp b/src/plugins/qmlpreview/qmldebugtranslationclient.cpp index 6ebc13d8f8a..3ef4351d498 100644 --- a/src/plugins/qmlpreview/qmldebugtranslationclient.cpp +++ b/src/plugins/qmlpreview/qmldebugtranslationclient.cpp @@ -26,8 +26,9 @@ #include "qmldebugtranslationclient.h" #include -#include -#include +#ifdef FOUND_QML_DEBUG_TRANSLATION_PROTOCOL +#include +#endif namespace QmlPreview { @@ -39,51 +40,14 @@ QmlDebugTranslationClient::QmlDebugTranslationClient(QmlDebug::QmlDebugConnectio void QmlDebugTranslationClient::changeLanguage(const QUrl &url, const QString &localeIsoCode) { QmlDebug::QPacket packet(dataStreamVersion()); - packet << static_cast(Command::ChangeLanguage) << url << localeIsoCode; +#ifdef FOUND_QML_DEBUG_TRANSLATION_PROTOCOL + sendMessage(QQmlDebugTranslation::createChangeLanguageRequest(packet, url, localeIsoCode)); +#else + const int request_change_language = 1; + packet << request_change_language << url << localeIsoCode; sendMessage(packet.data()); -} +#endif -void QmlDebugTranslationClient::changeWarningColor(const QColor &warningColor) -{ - QmlDebug::QPacket packet(dataStreamVersion()); - packet << static_cast(Command::ChangeWarningColor) << warningColor; - sendMessage(packet.data()); -} - -void QmlDebugTranslationClient::changeElidedTextWarningString(const QString &warningString) -{ - QmlDebug::QPacket packet(dataStreamVersion()); - packet << static_cast(Command::ChangeElidedTextWarningString) << warningString; - sendMessage(packet.data()); -} - -void QmlDebugTranslationClient::changeElideWarning(bool elideWarning) -{ - if (elideWarning) - enableElidedTextWarning(); - else - disableElidedTextWarning(); -} - -void QmlDebugTranslationClient::setDebugTranslationServiceLogFile(const QString &logFilePath) -{ - QmlDebug::QPacket packet(dataStreamVersion()); - packet << static_cast(Command::SetDebugTranslationServiceLogFile) << logFilePath; - sendMessage(packet.data()); -} - -void QmlDebugTranslationClient::enableElidedTextWarning() -{ - QmlDebug::QPacket packet(dataStreamVersion()); - packet << static_cast(Command::EnableElidedTextWarning); - sendMessage(packet.data()); -} - -void QmlDebugTranslationClient::disableElidedTextWarning() -{ - QmlDebug::QPacket packet(dataStreamVersion()); - packet << static_cast(Command::DisableElidedTextWarning); - sendMessage(packet.data()); } void QmlDebugTranslationClient::messageReceived(const QByteArray &data) diff --git a/src/plugins/qmlpreview/qmldebugtranslationclient.h b/src/plugins/qmlpreview/qmldebugtranslationclient.h index db00b6f0056..0b9e3594b2b 100644 --- a/src/plugins/qmlpreview/qmldebugtranslationclient.h +++ b/src/plugins/qmlpreview/qmldebugtranslationclient.h @@ -34,34 +34,14 @@ class QMLPREVIEW_EXPORT QmlDebugTranslationClient : public QmlDebug::QmlDebugCli { Q_OBJECT public: - //needs to be in sync with QQmlDebugTranslationClient in qtdeclarative/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h - enum class Command { - ChangeLanguage, - MissingTranslationsChecked, - EnableElidedTextWarning, - DisableElidedTextWarning, - ChangeWarningColor, - ChangeElidedTextWarningString, - SetDebugTranslationServiceLogFile, - TestAllLanguages - }; - explicit QmlDebugTranslationClient(QmlDebug::QmlDebugConnection *connection); void changeLanguage(const QUrl &url, const QString &localeIsoCode); - void changeWarningColor(const QColor &warningColor); - void changeElidedTextWarningString(const QString &warningString); //is QByteArray better here? - void changeElideWarning(bool elideWarning); - void setDebugTranslationServiceLogFile(const QString &logFilePath); - void enableElidedTextWarning(); - void disableElidedTextWarning(); void messageReceived(const QByteArray &message) override; void stateChanged(State state) override; signals: -// void pathRequested(const QString &path); -// void errorReported(const QString &error); void debugServiceUnavailable(); }; diff --git a/src/plugins/qmlpreview/qmldebugtranslationwidget.cpp b/src/plugins/qmlpreview/qmldebugtranslationwidget.cpp deleted file mode 100644 index f835fa79459..00000000000 --- a/src/plugins/qmlpreview/qmldebugtranslationwidget.cpp +++ /dev/null @@ -1,523 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 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 "qmldebugtranslationwidget.h" -#include "qmlpreviewruncontrol.h" -#include "qmlpreviewplugin.h" -#include "projectfileselectionswidget.h" - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace { -QObject *getPreviewPlugin() -{ - const QVector &specs = ExtensionSystem::PluginManager::plugins(); - const auto pluginIt = std::find_if(specs.cbegin(), specs.cend(), - [](const ExtensionSystem::PluginSpec *p) { - return p->name() == "QmlPreview"; - }); - - if (pluginIt != specs.cend()) - return (*pluginIt)->plugin(); - - return nullptr; -} - -} - -namespace QmlPreview { - -QmlDebugTranslationWidget::QmlDebugTranslationWidget(QWidget *parent, TestLanguageGetter languagesGetterMethod) - : QWidget(parent) - , m_testLanguagesGetter(languagesGetterMethod) - , m_warningColor(Qt::red) - //, m_foundTrColor(Qt::green) // invalid color -> init without the frame - , m_lastWarningColor(m_warningColor) - , m_lastfoundTrColor(Qt::green) - -{ - auto mainLayout = new QVBoxLayout(this); - - auto buttonGroup = new QButtonGroup(this); - // it gets the text from updateCurrentEditor method - m_singleFileButton = new QRadioButton(); - m_singleFileButton->setChecked(true); - buttonGroup->addButton(m_singleFileButton); - - const QString projectSettingsKey = "QmlPreview.DisabledDebugTranslationFiles"; - const ProjectExplorer::FileType filterFileType = ProjectExplorer::FileType::QML; - m_checkableProjectFileView = new ProjectFileSelectionsWidget(projectSettingsKey, filterFileType); - m_checkableProjectFileView->setVisible(false); - connect(m_checkableProjectFileView, &ProjectFileSelectionsWidget::selectionChanged, this, &QmlDebugTranslationWidget::setFiles); - m_multipleFileButton = new QRadioButton(tr("Multiple files")); - buttonGroup->addButton(m_multipleFileButton); - connect(m_multipleFileButton, &QAbstractButton::toggled, m_checkableProjectFileView, &QWidget::setVisible); - connect(m_multipleFileButton, &QAbstractButton::toggled, this, &QmlDebugTranslationWidget::updateFiles); - - mainLayout->addWidget(m_singleFileButton); - mainLayout->addWidget(m_multipleFileButton); - mainLayout->addWidget(m_checkableProjectFileView); - - // language checkboxes are add in updateAvailableTranslations method - m_selectLanguageLayout = new QHBoxLayout; - mainLayout->addLayout(m_selectLanguageLayout); - - auto settingsLayout = new QHBoxLayout(); - mainLayout->addLayout(settingsLayout); - - auto elideWarningCheckBox = new QCheckBox(tr("Elide warning")); - connect(elideWarningCheckBox, &QCheckBox::stateChanged, [this] (int state) { - m_elideWarning = (state == Qt::Checked); - }); - settingsLayout->addWidget(elideWarningCheckBox); - - auto warningColorCheckbox = new QCheckBox(tr("Warning color: ")); - settingsLayout->addWidget(warningColorCheckbox); - auto warningColorButton = new Utils::QtColorButton(); - connect(warningColorCheckbox, &QCheckBox::stateChanged, [warningColorButton, this] (int state) { - if (state == Qt::Checked) { - warningColorButton->setColor(m_lastWarningColor); - warningColorButton->setEnabled(true); - } else { - m_lastWarningColor = warningColorButton->color(); - warningColorButton->setColor({}); - warningColorButton->setEnabled(false); - } - }); - connect(warningColorButton, &Utils::QtColorButton::colorChanged, [this](const QColor &color) { - m_warningColor = color; - }); - warningColorCheckbox->setCheckState(Qt::Checked); - settingsLayout->addWidget(warningColorButton); - - auto foundTrColorCheckbox = new QCheckBox(tr("Found \"tr\" color: ")); - settingsLayout->addWidget(foundTrColorCheckbox); - auto foundTrColorButton = new Utils::QtColorButton(); - foundTrColorButton->setDisabled(true); - connect(foundTrColorCheckbox, &QCheckBox::stateChanged, [foundTrColorButton, this] (int state) { - if (state == Qt::Checked) { - foundTrColorButton->setColor(m_lastfoundTrColor); - foundTrColorButton->setEnabled(true); - } else { - m_lastfoundTrColor = foundTrColorButton->color(); - foundTrColorButton->setColor({}); - foundTrColorButton->setEnabled(false); - } - }); - connect(foundTrColorButton, &Utils::QtColorButton::colorChanged, [this](const QColor &color) { - m_foundTrColor = color; - }); - settingsLayout->addWidget(foundTrColorButton); - - settingsLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding)); - - auto controlLayout = new QHBoxLayout; - mainLayout->addLayout(controlLayout); - - auto showLogButton = new QToolButton; - showLogButton->setText(tr("Show Log")); - showLogButton->setCheckable(true); - controlLayout->addWidget(showLogButton); - - // TODO: do we still need this buttons? -// auto pauseButton = new QToolButton; -// pauseButton->setText(tr("Pause")); -// pauseButton->setCheckable(true); -// controlLayout->addWidget(pauseButton); - -// auto onTheFlyButton = new QToolButton; -// onTheFlyButton->setText(tr("On the Fly")); -// controlLayout->addWidget(onTheFlyButton); - - m_runTestButton = new QPushButton(); - m_runTestButton->setCheckable(true); - m_runTestButton->setText(runButtonText()); - connect(m_runTestButton, &QPushButton::toggled, [this](bool checked) { - m_runTestButton->setText(runButtonText(checked)); - }); - - connect(m_runTestButton, &QPushButton::clicked, [this](bool checked) { - if (checked) - runTest(); - else { - if (m_currentRunControl) - m_currentRunControl->initiateStop(); - // TODO: what happens if we already have a preview running? -// QmlPreviewPlugin::stopAllRunControls(); -// qWarning() << "not implemented"; // TODO: stop still running tests - } - }); - controlLayout->addWidget(m_runTestButton); - - m_runOutputWindow = new Core::OutputWindow(Core::Context("QmlPreview.DebugTranslation"), - "QmlPreview/OutputWindow/Zoom"); - - m_runOutputWindow->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - m_runOutputWindow->setReadOnly(true); - m_runOutputWindow->setVisible(false); - mainLayout->addWidget(m_runOutputWindow); - - QSpacerItem *endSpacerItem = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding); - mainLayout->addItem(endSpacerItem); - - connect(showLogButton, &QToolButton::toggled, m_runOutputWindow, [this, mainLayout, endSpacerItem](bool checked) { - m_runOutputWindow->setVisible(checked); - if (m_runOutputWindow->isVisible()) - mainLayout->takeAt(mainLayout->count() - 1); - else - mainLayout->addItem(endSpacerItem); - }); - - auto loadLogButton = new QToolButton; - loadLogButton->setText(tr("Load")); - controlLayout->addWidget(loadLogButton); - connect(loadLogButton, &QToolButton::clicked, this, &QmlDebugTranslationWidget::loadLogFile); - - auto saveLogButton = new QToolButton; - saveLogButton->setText(tr("Save")); - controlLayout->addWidget(saveLogButton); - connect(saveLogButton, &QToolButton::clicked, this, &QmlDebugTranslationWidget::saveLogToFile); - - auto clearButton = new QToolButton; - clearButton->setText(tr("Clear")); - controlLayout->addWidget(clearButton); - connect(clearButton, &QToolButton::clicked, this, &QmlDebugTranslationWidget::clear); - - Core::EditorManager *editorManager = Core::EditorManager::instance(); - connect(editorManager, &Core::EditorManager::currentEditorChanged, this, &QmlDebugTranslationWidget::updateCurrentEditor); - updateCurrentEditor(Core::EditorManager::currentEditor()); - - connect(ProjectExplorer::SessionManager::instance(), &ProjectExplorer::SessionManager::startupProjectChanged, - this, &QmlDebugTranslationWidget::updateCurrentTranslations); - - updateStartupProjectTranslations(); - - ProjectExplorer::TaskHub::addCategory("QmlPreview.Translation", tr("Translation issues")); -} - -QmlDebugTranslationWidget::~QmlDebugTranslationWidget() -{ - -} - -void QmlDebugTranslationWidget::updateCurrentEditor(const Core::IEditor *editor) -{ - if (editor && editor->document()) - m_currentFilePath = editor->document()->filePath(); - else - m_currentFilePath.clear(); - m_singleFileButton->setText(singleFileButtonText(m_currentFilePath.toString())); - updateFiles(); -} - -void QmlDebugTranslationWidget::updateStartupProjectTranslations() -{ - updateCurrentTranslations(ProjectExplorer::SessionManager::startupProject()); -} - -QColor QmlDebugTranslationWidget::warningColor() -{ - return m_warningColor; -} - -QColor QmlDebugTranslationWidget::foundTrColor() -{ - return m_foundTrColor; -} - -void QmlDebugTranslationWidget::updateCurrentTranslations(ProjectExplorer::Project *project) -{ - m_testLanguages.clear(); - for (int i = m_selectLanguageLayout->count()-1; i >= 0; --i) { - auto layoutItem = m_selectLanguageLayout->takeAt(i); - delete layoutItem->widget(); - delete layoutItem; - } - if (!project) - return; - - if (auto multiLanguageAspect = QmlProjectManager::QmlMultiLanguageAspect::current(project)) { - connect(multiLanguageAspect, &QmlProjectManager::QmlMultiLanguageAspect::changed, - this, &QmlDebugTranslationWidget::updateStartupProjectTranslations, - Qt::UniqueConnection); - auto languageLabel = new QLabel(); - languageLabel->setText(tr("Language to test:")); - m_selectLanguageLayout->addWidget(languageLabel); - if (multiLanguageAspect->value()) { - addLanguageCheckBoxes({multiLanguageAspect->currentLocale()}); - if (m_testLanguagesGetter) { - auto addTestLanguages = new QPushButton(tr("Add Test Languages")); - m_selectLanguageLayout->addWidget(addTestLanguages); - connect(addTestLanguages, &QPushButton::clicked, [this]() { - addLanguageCheckBoxes(m_testLanguagesGetter()); - }); - } - } else { - QString errorMessage; - addLanguageCheckBoxes(project->availableQmlPreviewTranslations(&errorMessage)); - } - m_selectLanguageLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum)); - } -} - -void QmlDebugTranslationWidget::updateFiles() -{ - if (m_multipleFileButton->isChecked()) - setFiles(m_checkableProjectFileView->checkedFiles()); - else - setFiles({m_currentFilePath}); -} - -void QmlDebugTranslationWidget::setFiles(const Utils::FilePaths &filePathes) -{ - m_selectedFilePaths = filePathes; -} - -void QmlDebugTranslationWidget::runTest() -{ - m_runOutputWindow->grayOutOldContent(); - - auto runControl = new ProjectExplorer::RunControl(ProjectExplorer::Constants::QML_PREVIEW_RUN_MODE); - QTC_ASSERT(runControl, qWarning("Can not create a QmlPreviewRunner"); return;); - auto previewPlugin = qobject_cast(getPreviewPlugin()); - - connect(runControl, &ProjectExplorer::RunControl::started, [this, runControl, previewPlugin]() { - //Q_ASSERT(m_currentRunControl == nullptr); //TODO: who deletes the runcontrol - m_currentRunControl = runControl; - m_runOutputWindow->setLineParsers( - ProjectExplorer::OutputFormatterFactory::createFormatters(runControl->target())); - int timerCounter = 1; - const auto testLanguageList = m_testLanguages; - - if (m_elideWarning) - previewPlugin->changeElideWarning(true); - - auto testLanguages = [previewPlugin, runControl, testLanguageList](int timerCounter, const QString &previewedFile) { - for (auto language : testLanguageList) { - QTimer::singleShot(timerCounter * 1000, previewPlugin, [previewPlugin, runControl, language, previewedFile]() { - if (runControl && runControl->isRunning()) { - if (!previewedFile.isEmpty()) - previewPlugin->setPreviewedFile(previewedFile); - previewPlugin->setLocaleIsoCode(language); - } - }); - } - }; - for (auto filePath : qAsConst(m_selectedFilePaths)) { - testLanguages(timerCounter++, filePath.toString()); - } - }); - connect(runControl, &ProjectExplorer::RunControl::stopped, [this]() { - m_runTestButton->setChecked(false); - //delete m_currentRunControl; // who deletes the runcontrol? - m_currentRunControl = nullptr; - if (auto previewPlugin = qobject_cast(getPreviewPlugin())) - previewPlugin->setLocaleIsoCode(m_lastUsedLanguageBeforeTest); - }); - - connect(runControl, &ProjectExplorer::RunControl::appendMessage, - this, &QmlDebugTranslationWidget::appendMessage); - - if (auto project = ProjectExplorer::SessionManager::startupProject()) { - if (auto target = project->activeTarget()) { - if (auto multiLanguageAspect = QmlProjectManager::QmlMultiLanguageAspect::current(target)) - m_lastUsedLanguageBeforeTest = multiLanguageAspect->currentLocale(); - if (auto runConfiguration = target->activeRunConfiguration()) { - runControl->setRunConfiguration(runConfiguration); - if (runControl->createMainWorker()) { - previewPlugin->setLocaleIsoCode(QString()); - runControl->initiateStart(); - } - } - } - } -} - -void QmlDebugTranslationWidget::clear() -{ - m_runOutputWindow->clear(); - ProjectExplorer::TaskHub::clearTasks("QmlPreview.Translation"); -} - -QString QmlDebugTranslationWidget::currentDir() const -{ - return m_lastDir.isEmpty() ? - ProjectExplorer::ProjectTree::currentFilePath().parentDir().toString() : m_lastDir; -} - -void QmlDebugTranslationWidget::setCurrentDir(const QString &path) -{ - m_lastDir = path; -} - -void QmlDebugTranslationWidget::loadLogFile() -{ - const auto fileName = QFileDialog::getOpenFileName(this, QStringLiteral("Open File"), currentDir()); - if (!fileName.isEmpty()) { - setCurrentDir(QFileInfo(fileName).absolutePath()); - QFile f(fileName); - if (f.open(QFile::ReadOnly)) { - clear(); - while (!f.atEnd()) - appendMessage(QString::fromUtf8(f.readLine()), Utils::GeneralMessageFormat); - } else { - // TODO: maybe add this message to log and tasks - qWarning() << "Failed to open" << fileName << ":" << f.errorString(); - } - } -} - -void QmlDebugTranslationWidget::saveLogToFile() -{ - const QString fileName = QFileDialog::getSaveFileName( - this, tr("Choose file to save logged issues."), currentDir()); - if (!fileName.isEmpty()) { - setCurrentDir(QFileInfo(fileName).absolutePath()); - QFile f(fileName); - if (f.open(QFile::WriteOnly | QFile::Text)) - f.write(m_runOutputWindow->toPlainText().toUtf8()); - } -} - -void QmlDebugTranslationWidget::appendMessage(const QString &message, Utils::OutputFormat format) -{ - const auto newLine = QRegularExpression("[\r\n]"); - const auto messages = message.split(newLine, Qt::SkipEmptyParts); - - if (messages.count() > 1) { - for (auto m : messages) - appendMessage(m + "\n", format); - return; - } - const QString serviceSeperator = ": QQmlDebugTranslationService: "; - if (!message.contains(serviceSeperator)) - return; - QString locationString = message; - locationString = locationString.split(serviceSeperator).first(); - static const QRegularExpression qmlLineColumnLink("^(" QT_QML_URL_REGEXP ")" // url - ":(\\d+)" // line - ":(\\d+)$"); // column - const QRegularExpressionMatch qmlLineColumnMatch = qmlLineColumnLink.match(locationString); - - auto fileLine = -1; - QUrl fileUrl; - if (qmlLineColumnMatch.hasMatch()) { - fileUrl = QUrl(qmlLineColumnMatch.captured(1)); - fileLine = qmlLineColumnMatch.captured(2).toInt(); - } - - m_runOutputWindow->appendMessage(message, format); - - - auto type = ProjectExplorer::Task::TaskType::Warning; - auto description = message.split(serviceSeperator).at(1); - auto filePath = Utils::FilePath::fromString(fileUrl.toLocalFile()); - auto category = "QmlPreview.Translation"; - auto icon = Utils::Icons::WARNING.icon(); - - ProjectExplorer::TaskHub::addTask(ProjectExplorer::Task(type, - description, - filePath, - fileLine, - category, - icon, - ProjectExplorer::Task::NoOptions)); -} - -QString QmlDebugTranslationWidget::singleFileButtonText(const QString &filePath) -{ - auto buttonText = tr("Current file: %1"); - if (filePath.isEmpty()) - return buttonText.arg(tr("Empty")); - return buttonText.arg(filePath); -} - -QString QmlDebugTranslationWidget::runButtonText(bool isRunning) -{ - if (isRunning) { - return tr("Stop"); - } - return tr("Run Language Tests"); -} - -void QmlDebugTranslationWidget::addLanguageCheckBoxes(const QStringList &languages) -{ - for (auto language : languages) { - auto languageCheckBox = new QCheckBox(language); - m_selectLanguageLayout->addWidget(languageCheckBox); - connect(languageCheckBox, &QCheckBox::stateChanged, [this, language] (int state) { - if (state == Qt::Checked) - m_testLanguages.append(language); - else - m_testLanguages.removeAll(language); - }); - languageCheckBox->setChecked(true); - } -} - -} // namespace QmlPreview diff --git a/src/plugins/qmlpreview/qmldebugtranslationwidget.h b/src/plugins/qmlpreview/qmldebugtranslationwidget.h deleted file mode 100644 index de0c7ba3624..00000000000 --- a/src/plugins/qmlpreview/qmldebugtranslationwidget.h +++ /dev/null @@ -1,110 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 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 "qmlpreview_global.h" - -#include -#include - -#include - -QT_BEGIN_NAMESPACE -class QRadioButton; -class QPushButton; -class QHBoxLayout; -QT_END_NAMESPACE - -namespace Core { -class IEditor; -class OutputWindow; -} -namespace ProjectExplorer { -class Project; -class RunControl; -} - -namespace QmlPreview { - -class ProjectFileSelectionsWidget; - - -class QMLPREVIEW_EXPORT QmlDebugTranslationWidget : public QWidget -{ - using TestLanguageGetter = std::function; - Q_OBJECT -public: - explicit QmlDebugTranslationWidget(QWidget *parent = nullptr, TestLanguageGetter languagesGetterMethod = {}); - ~QmlDebugTranslationWidget() override; - - void setCurrentFile(const Utils::FilePath &filepath); - void setFiles(const Utils::FilePaths &filePathes); - void updateStartupProjectTranslations(); - - QColor warningColor(); - QColor foundTrColor(); -private: - void updateCurrentEditor(const Core::IEditor *editor); - void updateCurrentTranslations(ProjectExplorer::Project *project); - void updateFiles(); - void runTest(); - void appendMessage(const QString &message, Utils::OutputFormat format); - void clear(); - void loadLogFile(); - void saveLogToFile(); - QString currentDir() const; - void setCurrentDir(const QString &path); - - QString singleFileButtonText(const QString &filePath); - QString runButtonText(bool isRunning = false); - void addLanguageCheckBoxes(const QStringList &languages); - - QStringList m_testLanguages; - QString m_lastUsedLanguageBeforeTest; - bool m_elideWarning = false; - - Core::OutputWindow *m_runOutputWindow = nullptr; - - QRadioButton *m_singleFileButton = nullptr; - QRadioButton *m_multipleFileButton = nullptr; - ProjectFileSelectionsWidget *m_checkableProjectFileView = nullptr; - QPushButton *m_runTestButton = nullptr; - - Utils::FilePath m_currentFilePath; - Utils::FilePaths m_selectedFilePaths; - ProjectExplorer::RunControl *m_currentRunControl = nullptr; - - QString m_lastDir; - - QHBoxLayout *m_selectLanguageLayout; - TestLanguageGetter m_testLanguagesGetter; - QColor m_warningColor; - QColor m_foundTrColor; - QColor m_lastWarningColor; - QColor m_lastfoundTrColor; -}; - -} // namespace QmlPreview diff --git a/src/plugins/qmlpreview/qmlpreview.pro b/src/plugins/qmlpreview/qmlpreview.pro index ea53ac2f4ea..cfc571521f5 100644 --- a/src/plugins/qmlpreview/qmlpreview.pro +++ b/src/plugins/qmlpreview/qmlpreview.pro @@ -10,23 +10,19 @@ include(tests/tests.pri) HEADERS += \ qmlpreview_global.h \ qmldebugtranslationclient.h \ - qmldebugtranslationwidget.h \ qmlpreviewclient.h \ qmlpreviewplugin.h \ qmlpreviewruncontrol.h \ qmlpreviewconnectionmanager.h \ - qmlpreviewfileontargetfinder.h \ - projectfileselectionswidget.h + qmlpreviewfileontargetfinder.h SOURCES += \ qmlpreviewplugin.cpp \ qmldebugtranslationclient.cpp \ - qmldebugtranslationwidget.cpp \ qmlpreviewclient.cpp \ qmlpreviewruncontrol.cpp \ qmlpreviewconnectionmanager.cpp \ - qmlpreviewfileontargetfinder.cpp \ - projectfileselectionswidget.cpp + qmlpreviewfileontargetfinder.cpp OTHER_FILES += \ QmlPreview.json.in diff --git a/src/plugins/qmlpreview/qmlpreviewconnectionmanager.cpp b/src/plugins/qmlpreview/qmlpreviewconnectionmanager.cpp index 6767544c1d7..0087d97f21d 100644 --- a/src/plugins/qmlpreview/qmlpreviewconnectionmanager.cpp +++ b/src/plugins/qmlpreview/qmlpreviewconnectionmanager.cpp @@ -40,6 +40,9 @@ QmlPreviewConnectionManager::QmlPreviewConnectionManager(QObject *parent) : QmlDebug::QmlDebugConnectionManager(parent) { setTarget(nullptr); + m_createDebugTranslationClientMethod = [](QmlDebug::QmlDebugConnection *connection) { + return std::make_unique(connection); + }; } QmlPreviewConnectionManager::~QmlPreviewConnectionManager() = default; @@ -66,6 +69,11 @@ void QmlPreviewConnectionManager::setFpsHandler(QmlPreviewFpsHandler fpsHandler) m_fpsHandler = fpsHandler; } +void QmlPreviewConnectionManager::setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator) +{ + m_createDebugTranslationClientMethod = creator; +} + void QmlPreviewConnectionManager::createClients() { createPreviewClient(); @@ -113,9 +121,9 @@ QUrl QmlPreviewConnectionManager::findValidI18nDirectoryAsUrl(const QString &loc void QmlPreviewConnectionManager::createDebugTranslationClient() { - m_qmlDebugTranslationClient = new QmlDebugTranslationClient(connection()); + m_qmlDebugTranslationClient = m_createDebugTranslationClientMethod(connection()); connect(this, &QmlPreviewConnectionManager::language, - m_qmlDebugTranslationClient, [this](const QString &locale) { + m_qmlDebugTranslationClient.get(), [this](const QString &locale) { m_lastUsedLanguage = locale; // findValidI18nDirectoryAsUrl does not work if we didn't load any file // service expects a context URL. @@ -124,10 +132,7 @@ void QmlPreviewConnectionManager::createDebugTranslationClient() m_qmlDebugTranslationClient->changeLanguage(findValidI18nDirectoryAsUrl(locale), locale); } }); - connect(this, &QmlPreviewConnectionManager::changeElideWarning, - m_qmlDebugTranslationClient, &QmlDebugTranslationClient::changeElideWarning); - - connect(m_qmlDebugTranslationClient.data(), &QmlDebugTranslationClient::debugServiceUnavailable, + connect(m_qmlDebugTranslationClient.get(), &QmlDebugTranslationClient::debugServiceUnavailable, this, []() { QMessageBox::warning(Core::ICore::dialogParent(), "Error connect to QML DebugTranslation service", "QML DebugTranslation feature is not available for this version of Qt."); @@ -260,7 +265,7 @@ void QmlPreviewConnectionManager::clearClient(QObject *client) void QmlPreviewConnectionManager::destroyClients() { clearClient(m_qmlPreviewClient); - clearClient(m_qmlDebugTranslationClient); + clearClient(m_qmlDebugTranslationClient.release()); m_fileSystemWatcher.removeFiles(m_fileSystemWatcher.files()); QTC_ASSERT(m_fileSystemWatcher.directories().isEmpty(), m_fileSystemWatcher.removeDirectories(m_fileSystemWatcher.directories())); diff --git a/src/plugins/qmlpreview/qmlpreviewconnectionmanager.h b/src/plugins/qmlpreview/qmlpreviewconnectionmanager.h index c63db57343c..a23c68c31a9 100644 --- a/src/plugins/qmlpreview/qmlpreviewconnectionmanager.h +++ b/src/plugins/qmlpreview/qmlpreviewconnectionmanager.h @@ -52,12 +52,12 @@ public: void setFileLoader(QmlPreviewFileLoader fileLoader); void setFileClassifier(QmlPreviewFileClassifier fileClassifier); void setFpsHandler(QmlPreviewFpsHandler fpsHandler); + void setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator); signals: void loadFile(const QString &filename, const QString &changedFile, const QByteArray &contents); void zoom(float zoomFactor); void language(const QString &locale); - void changeElideWarning(bool elideWarning); void rerun(); void restart(); @@ -68,18 +68,19 @@ protected: private: void createPreviewClient(); void createDebugTranslationClient(); - QUrl findValidI18nDirectoryAsUrl(const QString &locale); void clearClient(QObject *client); + QUrl findValidI18nDirectoryAsUrl(const QString &locale); Utils::FileInProjectFinder m_projectFileFinder; QmlPreviewFileOnTargetFinder m_targetFileFinder; QPointer m_qmlPreviewClient; - QPointer m_qmlDebugTranslationClient; + std::unique_ptr m_qmlDebugTranslationClient; Utils::FileSystemWatcher m_fileSystemWatcher; QUrl m_lastLoadedUrl; QString m_lastUsedLanguage; QmlPreviewFileLoader m_fileLoader = nullptr; QmlPreviewFileClassifier m_fileClassifier = nullptr; QmlPreviewFpsHandler m_fpsHandler = nullptr; + QmlDebugTranslationClientCreator m_createDebugTranslationClientMethod; }; } // namespace Internal diff --git a/src/plugins/qmlpreview/qmlpreviewplugin.cpp b/src/plugins/qmlpreview/qmlpreviewplugin.cpp index 137c51b4b3d..06c3887dbdf 100644 --- a/src/plugins/qmlpreview/qmlpreviewplugin.cpp +++ b/src/plugins/qmlpreview/qmlpreviewplugin.cpp @@ -26,8 +26,6 @@ #include "qmlpreviewplugin.h" #include "qmlpreviewruncontrol.h" -#include "qmldebugtranslationwidget.h" - #ifdef WITH_TESTS #include "tests/qmlpreviewclient_test.h" #include "tests/qmlpreviewplugin_test.h" @@ -67,7 +65,6 @@ using namespace ProjectExplorer; namespace QmlPreview { -namespace Internal { class QmlPreviewParser : public QObject { @@ -151,8 +148,7 @@ public: float m_zoomFactor = -1.0; QmlPreview::QmlPreviewFpsHandler m_fpsHandler = nullptr; QString m_localeIsoCode; - bool m_translationElideWarning = false; - QPointer m_qmlDebugTranslationWidget; + QmlDebugTranslationClientCreator m_createDebugTranslationClientMethod; RunWorkerFactory localRunWorkerFactory{ RunWorkerFactory::make(), @@ -170,7 +166,7 @@ public: m_fpsHandler, m_zoomFactor, m_localeIsoCode, - m_translationElideWarning + m_createDebugTranslationClientMethod }); connect(q, &QmlPreviewPlugin::updatePreviews, runner, &QmlPreviewRunner::loadFile); @@ -182,8 +178,6 @@ public: runner, &QmlPreviewRunner::zoom); connect(q, &QmlPreviewPlugin::localeIsoCodeChanged, runner, &QmlPreviewRunner::language); - connect(q, &QmlPreviewPlugin::elideWarningChanged, - runner, &QmlPreviewRunner::changeElideWarning); connect(runner, &RunWorker::started, this, [this, runControl] { addPreview(runControl); @@ -222,50 +216,6 @@ QmlPreviewPluginPrivate::QmlPreviewPluginPrivate(QmlPreviewPlugin *parent) Core::ActionManager::registerAction(action, "QmlPreview.RunPreview"), Constants::G_BUILD_RUN); - action = new QAction(QmlPreviewPlugin::tr("Test Translations"), this); - action->setToolTip(QLatin1String("Runs the preview with all available translations and collects all issues.")); - action->setEnabled(SessionManager::startupProject() != nullptr); - connect(SessionManager::instance(), &SessionManager::startupProjectChanged, action, - &QAction::setEnabled); - connect(action, &QAction::triggered, this, [this]() { - if (SessionManager::startupProject()) { - // Deletion for this widget is taken care of in aboutToShutdown() and registerWindow() - m_qmlDebugTranslationWidget = new QmlDebugTranslationWidget(); - Core::ICore::registerWindow(m_qmlDebugTranslationWidget, Core::Context("Core.DebugTranslation")); - m_qmlDebugTranslationWidget->show(); - } - }); - menu->addAction( - Core::ActionManager::registerAction(action, "QmlPreview.TestTranslations"), - Constants::G_BUILD_RUN); - auto updateTestTranslationAction = [action]() { - bool showTestTranslationAction = false; - bool enableTestTranslationAction = false; - QtSupport::BaseQtVersion *activeQt{}; - if (auto project = SessionManager::startupProject()) { - if (auto target = project->activeTarget()) { - if (auto activeKit = target->kit()) - activeQt = QtSupport::QtKitAspect::qtVersion(activeKit); - } - } - for (auto qtVersion : QtSupport::QtVersionManager::versions()) { - if (qtVersion->features().contains("QtStudio")) { - showTestTranslationAction = true; - if (qtVersion == activeQt) - enableTestTranslationAction = true; - } - } - action->setVisible(showTestTranslationAction); - action->setEnabled(enableTestTranslationAction); - }; - connect(ProjectExplorer::SessionManager::instance(), - &ProjectExplorer::SessionManager::startupProjectChanged, - updateTestTranslationAction); - - connect(QtSupport::QtVersionManager::instance(), - &QtSupport::QtVersionManager::qtVersionsChanged, - updateTestTranslationAction); - menu = Core::ActionManager::actionContainer(Constants::M_FILECONTEXT); action = new QAction(QmlPreviewPlugin::tr("Preview File"), this); action->setEnabled(false); @@ -314,7 +264,6 @@ ExtensionSystem::IPlugin::ShutdownFlag QmlPreviewPlugin::aboutToShutdown() { d->m_parseThread.quit(); d->m_parseThread.wait(); - delete d->m_qmlDebugTranslationWidget; return SynchronousShutdown; } @@ -410,15 +359,9 @@ void QmlPreviewPlugin::setLocaleIsoCode(const QString &localeIsoCode) emit localeIsoCodeChanged(d->m_localeIsoCode); } -bool QmlPreviewPlugin::elideWarning() const +void QmlPreviewPlugin::setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator) { - return d->m_translationElideWarning; -} - -void QmlPreviewPlugin::changeElideWarning(bool elideWarning) -{ - d->m_translationElideWarning = elideWarning; - emit elideWarningChanged(elideWarning); + d->m_createDebugTranslationClientMethod = creator; } void QmlPreviewPlugin::setFileLoader(QmlPreviewFileLoader fileLoader) @@ -588,7 +531,6 @@ void QmlPreviewParser::parse(const QString &name, const QByteArray &contents, emit failure(); } -} // namespace Internal } // namespace QmlPreview #include diff --git a/src/plugins/qmlpreview/qmlpreviewplugin.h b/src/plugins/qmlpreview/qmlpreviewplugin.h index b2455b10773..873564b5ac6 100644 --- a/src/plugins/qmlpreview/qmlpreviewplugin.h +++ b/src/plugins/qmlpreview/qmlpreviewplugin.h @@ -25,6 +25,9 @@ #pragma once +#include "qmlpreview_global.h" +#include "qmldebugtranslationclient.h" + #include #include #include @@ -34,16 +37,17 @@ namespace Core { class IEditor; } +namespace QmlDebug { class QmlDebugConnection; } + namespace QmlPreview { typedef bool (*QmlPreviewFileClassifier) (const QString &); typedef QByteArray (*QmlPreviewFileLoader)(const QString &, bool *); typedef void (*QmlPreviewFpsHandler)(quint16[8]); typedef QList QmlPreviewRunControlList; +typedef std::function(QmlDebug::QmlDebugConnection *)> QmlDebugTranslationClientCreator; -namespace Internal { - -class QmlPreviewPlugin : public ExtensionSystem::IPlugin +class QMLPREVIEW_EXPORT QmlPreviewPlugin : public ExtensionSystem::IPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "QmlPreview.json") @@ -59,7 +63,6 @@ class QmlPreviewPlugin : public ExtensionSystem::IPlugin WRITE setFpsHandler NOTIFY fpsHandlerChanged) Q_PROPERTY(float zoomFactor READ zoomFactor WRITE setZoomFactor NOTIFY zoomFactorChanged) Q_PROPERTY(QString localeIsoCode READ localeIsoCode WRITE setLocaleIsoCode NOTIFY localeIsoCodeChanged) - Q_PROPERTY(bool elideWarning READ elideWarning WRITE changeElideWarning NOTIFY elideWarningChanged) public: ~QmlPreviewPlugin() override; @@ -87,8 +90,7 @@ public: QString localeIsoCode() const; void setLocaleIsoCode(const QString &localeIsoCode); - bool elideWarning() const; - void changeElideWarning(bool elideWarning); + void setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator); signals: void checkDocument(const QString &name, const QByteArray &contents, @@ -104,13 +106,11 @@ signals: void zoomFactorChanged(float zoomFactor); void localeIsoCodeChanged(const QString &localeIsoCode); - void elideWarningChanged(bool elideWarning); private: class QmlPreviewPluginPrivate *d = nullptr; }; -} // namespace Internal } // namespace QmlPreview Q_DECLARE_METATYPE(QmlPreview::QmlPreviewFileLoader) diff --git a/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp b/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp index f04f7525277..fd1d3bde3d9 100644 --- a/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp +++ b/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp @@ -52,6 +52,8 @@ QmlPreviewRunner::QmlPreviewRunner(const QmlPreviewRunnerSetting &settings) m_connectionManager.setFileLoader(settings.fileLoader); m_connectionManager.setFileClassifier(settings.fileClassifier); m_connectionManager.setFpsHandler(settings.fpsHandler); + m_connectionManager.setQmlDebugTranslationClientCreator( + settings.createDebugTranslationClientMethod); connect(this, &QmlPreviewRunner::loadFile, &m_connectionManager, &Internal::QmlPreviewConnectionManager::loadFile); @@ -62,8 +64,6 @@ QmlPreviewRunner::QmlPreviewRunner(const QmlPreviewRunnerSetting &settings) &m_connectionManager, &Internal::QmlPreviewConnectionManager::zoom); connect(this, &QmlPreviewRunner::language, &m_connectionManager, &Internal::QmlPreviewConnectionManager::language); - connect(this, &QmlPreviewRunner::changeElideWarning, - &m_connectionManager, &Internal::QmlPreviewConnectionManager::changeElideWarning); connect(&m_connectionManager, &Internal::QmlPreviewConnectionManager::connectionOpened, this, [this, settings]() { @@ -71,8 +71,6 @@ QmlPreviewRunner::QmlPreviewRunner(const QmlPreviewRunnerSetting &settings) emit zoom(settings.zoom); if (!settings.language.isEmpty()) emit language(settings.language); - if (settings.translationElideWarning) - emit changeElideWarning(true); emit ready(); }); diff --git a/src/plugins/qmlpreview/qmlpreviewruncontrol.h b/src/plugins/qmlpreview/qmlpreviewruncontrol.h index c5171e22488..2b425ee8bd7 100644 --- a/src/plugins/qmlpreview/qmlpreviewruncontrol.h +++ b/src/plugins/qmlpreview/qmlpreviewruncontrol.h @@ -39,7 +39,7 @@ struct QmlPreviewRunnerSetting { QmlPreviewFpsHandler fpsHandler; float zoom = 1.0; QString language; - bool translationElideWarning = false; + QmlDebugTranslationClientCreator createDebugTranslationClientMethod; }; class QmlPreviewRunner : public ProjectExplorer::RunWorker @@ -59,7 +59,6 @@ signals: void zoom(float zoomFactor); void rerun(); void ready(); - void changeElideWarning(bool elideWarning); private: void start() override; void stop() override; diff --git a/src/plugins/qmlpreview/tests/qmlpreviewclient_test.cpp b/src/plugins/qmlpreview/tests/qmlpreviewclient_test.cpp index 9aec2d6cc66..8b99a8f1d7d 100644 --- a/src/plugins/qmlpreview/tests/qmlpreviewclient_test.cpp +++ b/src/plugins/qmlpreview/tests/qmlpreviewclient_test.cpp @@ -29,7 +29,6 @@ #include namespace QmlPreview { -namespace Internal { class TestableQmlPreviewClient : public QmlPreviewClient { @@ -139,7 +138,6 @@ void QmlPreviewClientTest::testMessageReceived() } } -} // namespace Internal } // namespace QmlPreview #include "qmlpreviewclient_test.moc" diff --git a/src/plugins/qmlpreview/tests/qmlpreviewclient_test.h b/src/plugins/qmlpreview/tests/qmlpreviewclient_test.h index 43ae0030036..dcb8d380c74 100644 --- a/src/plugins/qmlpreview/tests/qmlpreviewclient_test.h +++ b/src/plugins/qmlpreview/tests/qmlpreviewclient_test.h @@ -26,7 +26,6 @@ #include namespace QmlPreview { -namespace Internal { class QmlPreviewClientTest : public QObject { @@ -39,5 +38,4 @@ private slots: void testMessageReceived(); }; -} // namespace Internal } // namespace QmlPreview diff --git a/src/plugins/qmlpreview/tests/qmlpreviewplugin_test.cpp b/src/plugins/qmlpreview/tests/qmlpreviewplugin_test.cpp index 0e3306f15df..08ede8b185e 100644 --- a/src/plugins/qmlpreview/tests/qmlpreviewplugin_test.cpp +++ b/src/plugins/qmlpreview/tests/qmlpreviewplugin_test.cpp @@ -31,11 +31,10 @@ #include #include -Q_DECLARE_METATYPE(QmlPreview::Internal::TestFileLoader) -Q_DECLARE_METATYPE(QmlPreview::Internal::TestFpsHandler) +Q_DECLARE_METATYPE(QmlPreview::TestFileLoader) +Q_DECLARE_METATYPE(QmlPreview::TestFpsHandler) namespace QmlPreview { -namespace Internal { QmlPreviewPluginTest::QmlPreviewPluginTest(QObject *parent) : QObject(parent) { @@ -90,5 +89,4 @@ void QmlPreviewPluginTest::testFpsHandlerProperty() handler(stats); } -} // namespace Internal } // namespace QmlPreview diff --git a/src/plugins/qmlpreview/tests/qmlpreviewplugin_test.h b/src/plugins/qmlpreview/tests/qmlpreviewplugin_test.h index 8ceeb6669ca..5c28e9cc341 100644 --- a/src/plugins/qmlpreview/tests/qmlpreviewplugin_test.h +++ b/src/plugins/qmlpreview/tests/qmlpreviewplugin_test.h @@ -28,7 +28,6 @@ #include namespace QmlPreview { -namespace Internal { typedef QByteArray (*TestFileLoader)(const QString &, bool *); typedef void (*TestFpsHandler)(quint16[8]); @@ -45,5 +44,4 @@ private slots: void testFpsHandlerProperty(); }; -} // namespace Internal } // namespace QmlPreview