From 913a17734b2189a0954e7eb8e50ff6076e695521 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 19 Dec 2023 18:29:22 +0100 Subject: [PATCH] Coco: Move plugin class definition to .cpp Change-Id: Ic183657636ab2d8094eee5253a0d6679ea5a805d Reviewed-by: David Schulz --- src/plugins/coco/CMakeLists.txt | 2 +- src/plugins/coco/coco.qbs | 1 - src/plugins/coco/cocoplugin.cpp | 154 ++++++++++++++++---------------- src/plugins/coco/cocoplugin.h | 26 ------ 4 files changed, 78 insertions(+), 105 deletions(-) delete mode 100644 src/plugins/coco/cocoplugin.h diff --git a/src/plugins/coco/CMakeLists.txt b/src/plugins/coco/CMakeLists.txt index 20e5132fffb..bb5c5f165ac 100644 --- a/src/plugins/coco/CMakeLists.txt +++ b/src/plugins/coco/CMakeLists.txt @@ -2,6 +2,6 @@ add_qtc_plugin(Coco PLUGIN_DEPENDS Core LanguageClient SOURCES cocolanguageclient.cpp cocolanguageclient.h - cocoplugin.cpp cocoplugin.h + cocoplugin.cpp cocotr.h ) diff --git a/src/plugins/coco/coco.qbs b/src/plugins/coco/coco.qbs index 70a072c3196..6e32634eaf4 100644 --- a/src/plugins/coco/coco.qbs +++ b/src/plugins/coco/coco.qbs @@ -11,7 +11,6 @@ QtcPlugin { files: [ "cocoplugin.cpp", - "cocoplugin.h", "cocolanguageclient.cpp", "cocolanguageclient.h", ] diff --git a/src/plugins/coco/cocoplugin.cpp b/src/plugins/coco/cocoplugin.cpp index c92f7785d48..5925f457603 100644 --- a/src/plugins/coco/cocoplugin.cpp +++ b/src/plugins/coco/cocoplugin.cpp @@ -1,15 +1,17 @@ // Copyright (C) 2022 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 -#include "cocoplugin.h" - #include "cocolanguageclient.h" #include "cocotr.h" #include #include #include + #include + +#include + #include #include @@ -21,85 +23,83 @@ using namespace Utils; namespace Coco { -class CocoPluginPrivate +class CocoPlugin final : public ExtensionSystem::IPlugin { -public: - void startCoco(); + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Coco.json") +public: + ~CocoPlugin() final + { + // FIXME: Kill m_client? + } + + void initialize() final + { + using namespace Core; + ActionContainer *menu = ActionManager::actionContainer(Debugger::Constants::M_DEBUG_ANALYZER); + if (menu) { + auto startCoco = new QAction("Squish Coco ...", this); + Command *cmd = ActionManager::registerAction(startCoco, "Coco.startCoco"); + menu->addAction(cmd, Debugger::Constants::G_ANALYZER_TOOLS); + + connect(startCoco, &QAction::triggered, this, [this] { this->startCoco(); }); + } + } + + void startCoco() + { + if (m_client) + m_client->shutdown(); + m_client = nullptr; + + QDialog dialog(Core::ICore::dialogParent()); + dialog.setModal(true); + auto layout = new QFormLayout(); + + const Environment env = Environment::systemEnvironment(); + const FilePath squishCocoPath = FilePath::fromUserInput(env.value("SQUISHCOCO")); + const FilePath candidate = FilePath("coveragebrowser").searchInPath({squishCocoPath}, + FilePath::PrependToPath); + + PathChooser cocoChooser; + if (!candidate.isEmpty()) + cocoChooser.setFilePath(candidate); + cocoChooser.setExpectedKind(PathChooser::Command); + cocoChooser.setPromptDialogTitle(Tr::tr("Select a Squish Coco CoverageBrowser Executable")); + + cocoChooser.setHistoryCompleter("Coco.CoverageBrowser.history", true); + layout->addRow(Tr::tr("CoverageBrowser:"), &cocoChooser); + PathChooser csmesChoser; + csmesChoser.setHistoryCompleter("Coco.CSMes.history", true); + csmesChoser.setExpectedKind(PathChooser::File); + csmesChoser.setInitialBrowsePathBackup(FileUtils::homePath()); + csmesChoser.setPromptDialogFilter(Tr::tr("Coco instrumentation files (*.csmes)")); + csmesChoser.setPromptDialogTitle(Tr::tr("Select a Squish Coco Instrumentation File")); + layout->addRow(Tr::tr("CSMes:"), &csmesChoser); + QDialogButtonBox buttons(QDialogButtonBox::Cancel | QDialogButtonBox::Open); + layout->addItem(new QSpacerItem(0, 20, QSizePolicy::Expanding, QSizePolicy::MinimumExpanding)); + layout->addWidget(&buttons); + dialog.setLayout(layout); + dialog.resize(480, dialog.height()); + + QObject::connect(&buttons, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); + QObject::connect(&buttons, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); + + if (dialog.exec() == QDialog::Accepted) { + const FilePath cocoPath = cocoChooser.filePath(); + const FilePath csmesPath = csmesChoser.filePath(); + if (cocoPath.isExecutableFile() && csmesPath.exists()) { + m_client = new CocoLanguageClient(cocoPath, csmesPath); + m_client->start(); + } + } + } + +private: CocoLanguageClient *m_client = nullptr; }; -void CocoPluginPrivate::startCoco() -{ - if (m_client) - m_client->shutdown(); - m_client = nullptr; - - QDialog dialog(Core::ICore::dialogParent()); - dialog.setModal(true); - auto layout = new QFormLayout(); - - const Environment env = Environment::systemEnvironment(); - const FilePath squishCocoPath = FilePath::fromUserInput(env.value("SQUISHCOCO")); - const FilePath candidate = FilePath("coveragebrowser").searchInPath({squishCocoPath}, - FilePath::PrependToPath); - - PathChooser cocoChooser; - if (!candidate.isEmpty()) - cocoChooser.setFilePath(candidate); - cocoChooser.setExpectedKind(PathChooser::Command); - cocoChooser.setPromptDialogTitle(Tr::tr("Select a Squish Coco CoverageBrowser Executable")); - - cocoChooser.setHistoryCompleter("Coco.CoverageBrowser.history", true); - layout->addRow(Tr::tr("CoverageBrowser:"), &cocoChooser); - PathChooser csmesChoser; - csmesChoser.setHistoryCompleter("Coco.CSMes.history", true); - csmesChoser.setExpectedKind(PathChooser::File); - csmesChoser.setInitialBrowsePathBackup(FileUtils::homePath()); - csmesChoser.setPromptDialogFilter(Tr::tr("Coco instrumentation files (*.csmes)")); - csmesChoser.setPromptDialogTitle(Tr::tr("Select a Squish Coco Instrumentation File")); - layout->addRow(Tr::tr("CSMes:"), &csmesChoser); - QDialogButtonBox buttons(QDialogButtonBox::Cancel | QDialogButtonBox::Open); - layout->addItem(new QSpacerItem(0, 20, QSizePolicy::Expanding, QSizePolicy::MinimumExpanding)); - layout->addWidget(&buttons); - dialog.setLayout(layout); - dialog.resize(480, dialog.height()); - - QObject::connect(&buttons, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); - QObject::connect(&buttons, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); - - if (dialog.exec() == QDialog::Accepted) { - const FilePath cocoPath = cocoChooser.filePath(); - const FilePath csmesPath = csmesChoser.filePath(); - if (cocoPath.isExecutableFile() && csmesPath.exists()) { - m_client = new CocoLanguageClient(cocoPath, csmesPath); - m_client->start(); - } - } -} - -CocoPlugin::CocoPlugin() - : d (new CocoPluginPrivate) -{} - -CocoPlugin::~CocoPlugin() -{ - delete d; -} - -void CocoPlugin::initialize() -{ - using namespace Core; - ActionContainer *menu = ActionManager::actionContainer(Debugger::Constants::M_DEBUG_ANALYZER); - if (menu) { - auto startCoco = new QAction("Squish Coco ...", this); - Command *cmd = ActionManager::registerAction(startCoco, "Coco.startCoco"); - menu->addAction(cmd, Debugger::Constants::G_ANALYZER_TOOLS); - - connect(startCoco, &QAction::triggered, this, [this] { d->startCoco(); }); - } -} - } // namespace Coco - +#include "cocoplugin.moc" diff --git a/src/plugins/coco/cocoplugin.h b/src/plugins/coco/cocoplugin.h deleted file mode 100644 index 919acfbff41..00000000000 --- a/src/plugins/coco/cocoplugin.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include - -namespace Coco { - -class CocoPluginPrivate; - -class CocoPlugin : public ExtensionSystem::IPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Coco.json") - -public: - CocoPlugin(); - ~CocoPlugin() override; - - void initialize() override; -private: - CocoPluginPrivate *d; -}; - -} // namespace Coco