From 23dc06532704a6f6129f390b27c8b28993059af6 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 24 Mar 2020 18:58:29 +0100 Subject: [PATCH] McuSupport: Register Qt for MCUs .qch files At plugin initialization and along with the creation of a Qt for MCUs Kit (which currently happens when the user presses "Apply"), these .qch files get registered: /docs/quickultralite.qch /docs/quickultralitecmake.qch In order not to duplicate the code for retrieving package paths (e.g. the one for "QtForMCUsSdk") from the settings, some refactoring was done. As a result McuSupportOptions::qulDirFromSettings() has been introduced. It will be also used in further changes. Task-number: UL-1685 Change-Id: I82e638e129120cdadcf2f4812f467fce34b32ec9 Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportconstants.h | 1 + src/plugins/mcusupport/mcusupportoptions.cpp | 39 ++++++++++++++++--- src/plugins/mcusupport/mcusupportoptions.h | 2 + .../mcusupport/mcusupportoptionspage.cpp | 5 ++- src/plugins/mcusupport/mcusupportplugin.cpp | 2 + src/plugins/mcusupport/mcusupportsdk.cpp | 2 +- 6 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportconstants.h b/src/plugins/mcusupport/mcusupportconstants.h index cc9233eee4f..bc0b7b21d33 100644 --- a/src/plugins/mcusupport/mcusupportconstants.h +++ b/src/plugins/mcusupport/mcusupportconstants.h @@ -37,6 +37,7 @@ const char KIT_MCUTARGET_MODEL_KEY[] = "McuSupport.McuTargetModel"; const char SETTINGS_GROUP[] = "McuSupport"; const char SETTINGS_KEY_PACKAGE_PREFIX[] = "Package_"; +const char SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK[] = "QtForMCUsSdk"; // Key known by SDK installer } // namespace McuSupport } // namespace Constants diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 98fa88617d6..159c88e7a0a 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -28,6 +28,7 @@ #include "mcusupportsdk.h" #include +#include #include #include #include @@ -56,6 +57,16 @@ namespace McuSupport { namespace Internal { +static QString packagePathFromSettings(const QString &settingsKey, const QString &defaultPath = {}) +{ + QSettings *s = Core::ICore::settings(); + s->beginGroup(Constants::SETTINGS_GROUP); + const QString path = s->value(QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + + settingsKey, defaultPath).toString(); + s->endGroup(); + return path; +} + McuPackage::McuPackage(const QString &label, const QString &defaultPath, const QString &detectionPath, const QString &settingsKey) : m_label(label) @@ -63,11 +74,7 @@ McuPackage::McuPackage(const QString &label, const QString &defaultPath, , m_detectionPath(detectionPath) , m_settingsKey(settingsKey) { - QSettings *s = Core::ICore::settings(); - s->beginGroup(Constants::SETTINGS_GROUP); - m_path = s->value(QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + m_settingsKey, - m_defaultPath).toString(); - s->endGroup(); + m_path = packagePathFromSettings(settingsKey, defaultPath); } QString McuPackage::path() const @@ -349,6 +356,22 @@ void McuSupportOptions::populatePackagesAndTargets() setQulDir(Utils::FilePath::fromUserInput(qtForMCUsSdkPackage->path())); } +void McuSupportOptions::registerQchFiles() +{ + const QString qulDir = qulDirFromSettings().toString(); + if (qulDir.isEmpty() || !QFileInfo::exists(qulDir)) + return; + + const QString docsPath = qulDir + "/docs/"; + const QStringList qchFiles = { + docsPath + "quickultralite.qch", + docsPath + "quickultralitecmake.qch" + }; + Core::HelpManager::registerDocumentation( + Utils::filtered(qchFiles, + [](const QString &file) { return QFileInfo::exists(file); })); +} + void McuSupportOptions::deletePackagesAndTargets() { qDeleteAll(packages); @@ -370,6 +393,12 @@ void McuSupportOptions::setQulDir(const Utils::FilePath &dir) emit changed(); } +Utils::FilePath McuSupportOptions::qulDirFromSettings() +{ + return Utils::FilePath::fromUserInput( + packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK)); +} + static bool mcuTargetIsDesktop(const McuTarget* mcuTarget) { return mcuTarget->qulPlatform() == "Qt"; diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index 7e1edd60159..b22f32375e3 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -160,12 +160,14 @@ public: McuPackage *qtForMCUsSdkPackage = nullptr; void setQulDir(const Utils::FilePath &dir); + static Utils::FilePath qulDirFromSettings(); QString kitName(const McuTarget* mcuTarget) const; QList existingKits(const McuTarget *mcuTargt); ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget); void populatePackagesAndTargets(); + static void registerQchFiles(); private: void deletePackagesAndTargets(); diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp index cfbe4784930..e07899028d5 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.cpp +++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp @@ -223,14 +223,15 @@ void McuSupportOptionsWidget::showEvent(QShowEvent *event) void McuSupportOptionsWidget::apply() { + m_options.qtForMCUsSdkPackage->writeToSettings(); for (auto package : m_options.packages) package->writeToSettings(); - QTC_ASSERT(m_options.qtForMCUsSdkPackage, return); - if (!isVisible()) return; + McuSupportOptions::registerQchFiles(); + const McuTarget *mcuTarget = currentMcuTarget(); if (!mcuTarget) return; diff --git a/src/plugins/mcusupport/mcusupportplugin.cpp b/src/plugins/mcusupport/mcusupportplugin.cpp index d6b2dd427a6..4182713e866 100644 --- a/src/plugins/mcusupport/mcusupportplugin.cpp +++ b/src/plugins/mcusupport/mcusupportplugin.cpp @@ -26,6 +26,7 @@ #include "mcusupportplugin.h" #include "mcusupportconstants.h" #include "mcusupportdevice.h" +#include "mcusupportoptions.h" #include "mcusupportoptionspage.h" #include "mcusupportrunconfiguration.h" @@ -74,6 +75,7 @@ bool McuSupportPlugin::initialize(const QStringList& arguments, QString* errorSt dd = new McuSupportPluginPrivate; + McuSupportOptions::registerQchFiles(); ProjectExplorer::JsonWizardFactory::addWizardPath( Utils::FilePath::fromString(":/mcusupport/wizards/")); diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 4b6c6fbd627..b4b72ad5e7a 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -55,7 +55,7 @@ McuPackage *createQtForMCUsPackage() McuPackage::tr("Qt for MCUs SDK"), QDir::homePath(), Utils::HostOsInfo::withExecutableSuffix("bin/qmltocpp"), - "QtForMCUsSdk"); + Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK); result->setEnvironmentVariableName("Qul_DIR"); return result; }