McuSupport: Some code cosmetics

Namespaces, spacing, connect object guards, ...

Change-Id: I64bcab14f52d990adab938ebcdef535f1c09b061
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
hjk
2020-09-17 11:05:28 +02:00
parent cf2a651c3b
commit 6400aab190

View File

@@ -58,6 +58,9 @@
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QVariant> #include <QVariant>
using namespace ProjectExplorer;
using namespace Utils;
namespace McuSupport { namespace McuSupport {
namespace Internal { namespace Internal {
@@ -72,14 +75,14 @@ static QString packagePathFromSettings(const QString &settingsKey,
const QString path = s->value(QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) const QString path = s->value(QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX)
+ settingsKey, defaultPath).toString(); + settingsKey, defaultPath).toString();
s->endGroup(); s->endGroup();
return Utils::FilePath::fromFileInfo(path).toString(); return FilePath::fromFileInfo(path).toString();
} }
static bool kitNeedsQtVersion() static bool kitNeedsQtVersion()
{ {
// Only on Windows, Qt is linked into the distributed qul Desktop libs. Also, the host tools // Only on Windows, Qt is linked into the distributed qul Desktop libs. Also, the host tools
// are missing the Qt runtime libraries on non-Windows. // are missing the Qt runtime libraries on non-Windows.
return !Utils::HostOsInfo::isWindowsHost(); return !HostOsInfo::isWindowsHost();
} }
McuPackage::McuPackage(const QString &label, const QString &defaultPath, McuPackage::McuPackage(const QString &label, const QString &defaultPath,
@@ -118,23 +121,23 @@ QWidget *McuPackage::widget()
return m_widget; return m_widget;
m_widget = new QWidget; m_widget = new QWidget;
m_fileChooser = new Utils::PathChooser; m_fileChooser = new PathChooser;
m_fileChooser->lineEdit()->setButtonIcon(Utils::FancyLineEdit::Right, m_fileChooser->lineEdit()->setButtonIcon(FancyLineEdit::Right,
Utils::Icons::RESET.icon()); Icons::RESET.icon());
m_fileChooser->lineEdit()->setButtonVisible(Utils::FancyLineEdit::Right, true); m_fileChooser->lineEdit()->setButtonVisible(FancyLineEdit::Right, true);
connect(m_fileChooser->lineEdit(), &Utils::FancyLineEdit::rightButtonClicked, [&](){ connect(m_fileChooser->lineEdit(), &FancyLineEdit::rightButtonClicked, this, [&] {
m_fileChooser->setPath(m_defaultPath); m_fileChooser->setPath(m_defaultPath);
}); });
auto layout = new QGridLayout(m_widget); auto layout = new QGridLayout(m_widget);
layout->setContentsMargins(0, 0, 0, 0); layout->setContentsMargins(0, 0, 0, 0);
m_infoLabel = new Utils::InfoLabel(); m_infoLabel = new InfoLabel();
if (!m_downloadUrl.isEmpty()) { if (!m_downloadUrl.isEmpty()) {
auto downLoadButton = new QToolButton; auto downLoadButton = new QToolButton;
downLoadButton->setIcon(Utils::Icons::ONLINE.icon()); downLoadButton->setIcon(Icons::ONLINE.icon());
downLoadButton->setToolTip(tr("Download from \"%1\"").arg(m_downloadUrl)); downLoadButton->setToolTip(tr("Download from \"%1\"").arg(m_downloadUrl));
QObject::connect(downLoadButton, &QToolButton::pressed, [this]{ QObject::connect(downLoadButton, &QToolButton::pressed, this, [this] {
QDesktopServices::openUrl(m_downloadUrl); QDesktopServices::openUrl(m_downloadUrl);
}); });
layout->addWidget(downLoadButton, 0, 2); layout->addWidget(downLoadButton, 0, 2);
@@ -145,8 +148,7 @@ QWidget *McuPackage::widget()
m_fileChooser->setPath(m_path); m_fileChooser->setPath(m_path);
QObject::connect(m_fileChooser, &Utils::PathChooser::pathChanged, QObject::connect(m_fileChooser, &PathChooser::pathChanged, this, [this] {
[this](){
updateStatus(); updateStatus();
emit changed(); emit changed();
}); });
@@ -205,15 +207,14 @@ void McuPackage::updateStatus()
{ {
m_path = m_fileChooser->rawPath(); m_path = m_fileChooser->rawPath();
const bool validPath = m_fileChooser->isValid(); const bool validPath = m_fileChooser->isValid();
const Utils::FilePath detectionPath = Utils::FilePath::fromString( const FilePath detectionPath = FilePath::fromString(
m_fileChooser->filePath().toString() + "/" + m_detectionPath); m_fileChooser->filePath().toString() + "/" + m_detectionPath);
const QString displayDetectionPath = Utils::FilePath::fromString(m_detectionPath).toUserOutput(); const QString displayDetectionPath = FilePath::fromString(m_detectionPath).toUserOutput();
const bool validPackage = m_detectionPath.isEmpty() || detectionPath.exists(); const bool validPackage = m_detectionPath.isEmpty() || detectionPath.exists();
m_status = validPath ? (validPackage ? ValidPackage : ValidPathInvalidPackage) : InvalidPath; m_status = validPath ? (validPackage ? ValidPackage : ValidPathInvalidPackage) : InvalidPath;
m_infoLabel->setType(m_status == ValidPackage ? Utils::InfoLabel::Ok m_infoLabel->setType(m_status == ValidPackage ? InfoLabel::Ok : InfoLabel::NotOk);
: Utils::InfoLabel::NotOk);
QString statusText; QString statusText;
switch (m_status) { switch (m_status) {
@@ -230,8 +231,7 @@ void McuPackage::updateStatus()
break; break;
} }
m_infoLabel->setText(statusText); m_infoLabel->setText(statusText);
m_fileChooser->lineEdit()->button(Utils::FancyLineEdit::Right)->setEnabled( m_fileChooser->lineEdit()->button(FancyLineEdit::Right)->setEnabled(m_path != m_defaultPath);
m_path != m_defaultPath);
} }
McuToolChainPackage::McuToolChainPackage(const QString &label, const QString &defaultPath, McuToolChainPackage::McuToolChainPackage(const QString &label, const QString &defaultPath,
@@ -247,10 +247,8 @@ McuToolChainPackage::Type McuToolChainPackage::type() const
return m_type; return m_type;
} }
static ProjectExplorer::ToolChain *desktopToolChain(Utils::Id language) static ToolChain *desktopToolChain(Id language)
{ {
using namespace ProjectExplorer;
ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) { ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) {
const Abi abi = t->targetAbi(); const Abi abi = t->targetAbi();
return (abi.os() != Abi::WindowsOS return (abi.os() != Abi::WindowsOS
@@ -263,10 +261,8 @@ static ProjectExplorer::ToolChain *desktopToolChain(Utils::Id language)
return toolChain; return toolChain;
} }
static ProjectExplorer::ToolChain* armGccToolChain(const Utils::FilePath &path, Utils::Id language) static ToolChain *armGccToolChain(const FilePath &path, Id language)
{ {
using namespace ProjectExplorer;
ToolChain *toolChain = ToolChainManager::toolChain([&path, language](const ToolChain *t){ ToolChain *toolChain = ToolChainManager::toolChain([&path, language](const ToolChain *t){
return t->compilerCommand() == path && t->language() == language; return t->compilerCommand() == path && t->language() == language;
}); });
@@ -289,16 +285,16 @@ static ProjectExplorer::ToolChain* armGccToolChain(const Utils::FilePath &path,
return toolChain; return toolChain;
} }
ProjectExplorer::ToolChain *McuToolChainPackage::toolChain(Utils::Id language) const ToolChain *McuToolChainPackage::toolChain(Id language) const
{ {
ProjectExplorer::ToolChain *tc = nullptr; ToolChain *tc = nullptr;
if (m_type == TypeDesktop) { if (m_type == TypeDesktop) {
tc = desktopToolChain(language); tc = desktopToolChain(language);
} else { } else {
const QLatin1String compilerName( const QLatin1String compilerName(
language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++"); language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++");
const Utils::FilePath compiler = Utils::FilePath::fromUserInput( const FilePath compiler = FilePath::fromUserInput(
Utils::HostOsInfo::withExecutableSuffix( HostOsInfo::withExecutableSuffix(
path() + ( path() + (
m_type == TypeArmGcc m_type == TypeArmGcc
? "/bin/arm-none-eabi-%1" : m_type == TypeIAR ? "/bin/arm-none-eabi-%1" : m_type == TypeIAR
@@ -321,8 +317,8 @@ QVariant McuToolChainPackage::debuggerId() const
{ {
using namespace Debugger; using namespace Debugger;
const Utils::FilePath command = Utils::FilePath::fromUserInput( const FilePath command = FilePath::fromUserInput(
Utils::HostOsInfo::withExecutableSuffix(path() + ( HostOsInfo::withExecutableSuffix(path() + (
m_type == TypeArmGcc m_type == TypeArmGcc
? "/bin/arm-none-eabi-gdb-py" : m_type == TypeIAR ? "/bin/arm-none-eabi-gdb-py" : m_type == TypeIAR
? "/foo/bar-iar-gdb" : "/bar/foo-keil-gdb"))); ? "/foo/bar-iar-gdb" : "/bar/foo-keil-gdb")));
@@ -419,16 +415,16 @@ McuSupportOptions::~McuSupportOptions()
void McuSupportOptions::populatePackagesAndTargets() void McuSupportOptions::populatePackagesAndTargets()
{ {
setQulDir(Utils::FilePath::fromUserInput(qtForMCUsSdkPackage->path())); setQulDir(FilePath::fromUserInput(qtForMCUsSdkPackage->path()));
} }
static Utils::FilePath qulDocsDir() static FilePath qulDocsDir()
{ {
const Utils::FilePath qulDir = McuSupportOptions::qulDirFromSettings(); const FilePath qulDir = McuSupportOptions::qulDirFromSettings();
if (qulDir.isEmpty() || !qulDir.exists()) if (qulDir.isEmpty() || !qulDir.exists())
return {}; return {};
const Utils::FilePath docsDir = qulDir.pathAppended("docs"); const FilePath docsDir = qulDir.pathAppended("docs");
return docsDir.exists() ? docsDir : Utils::FilePath(); return docsDir.exists() ? docsDir : FilePath();
} }
void McuSupportOptions::registerQchFiles() void McuSupportOptions::registerQchFiles()
@@ -441,19 +437,16 @@ void McuSupportOptions::registerQchFiles()
docsDir + "/quickultralite.qch", docsDir + "/quickultralite.qch",
docsDir + "/quickultralitecmake.qch" docsDir + "/quickultralitecmake.qch"
}; };
Core::HelpManager::registerDocumentation( Core::HelpManager::registerDocumentation(Utils::filtered(qchFiles, &QFileInfo::exists));
Utils::filtered(qchFiles,
[](const QString &file) { return QFileInfo::exists(file); }));
} }
void McuSupportOptions::registerExamples() void McuSupportOptions::registerExamples()
{ {
const Utils::FilePath docsDir = qulDocsDir(); const FilePath docsDir = qulDocsDir();
if (docsDir.isEmpty()) if (docsDir.isEmpty())
return; return;
const Utils::FilePath examplesDir = const FilePath examplesDir = McuSupportOptions::qulDirFromSettings().pathAppended("demos");
McuSupportOptions::qulDirFromSettings().pathAppended("demos");
if (!examplesDir.exists()) if (!examplesDir.exists())
return; return;
@@ -475,37 +468,33 @@ const QVersionNumber &McuSupportOptions::minimalQulVersion()
return v; return v;
} }
void McuSupportOptions::setQulDir(const Utils::FilePath &dir) void McuSupportOptions::setQulDir(const FilePath &dir)
{ {
deletePackagesAndTargets(); deletePackagesAndTargets();
Sdk::targetsAndPackages(dir, &packages, &mcuTargets); Sdk::targetsAndPackages(dir, &packages, &mcuTargets);
//packages.append(qtForMCUsSdkPackage); //packages.append(qtForMCUsSdkPackage);
for (auto package : packages) { for (auto package : packages)
connect(package, &McuPackage::changed, [this](){ connect(package, &McuPackage::changed, this, &McuSupportOptions::changed);
emit changed();
});
}
emit changed(); emit changed();
} }
Utils::FilePath McuSupportOptions::qulDirFromSettings() FilePath McuSupportOptions::qulDirFromSettings()
{ {
return Utils::FilePath::fromUserInput( return FilePath::fromUserInput(
packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK, packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK,
QSettings::UserScope)); QSettings::UserScope));
} }
static Utils::FilePath jomExecutablePath() static FilePath jomExecutablePath()
{ {
return Utils::HostOsInfo::isWindowsHost() ? return HostOsInfo::isWindowsHost()
Utils::FilePath::fromUserInput(Core::ICore::libexecPath() + "/jom.exe") ? FilePath::fromUserInput(Core::ICore::libexecPath() + "/jom.exe")
: Utils::FilePath(); : FilePath();
} }
static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k, static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mcuTarget)
const McuTarget* mcuTarget)
{ {
using namespace ProjectExplorer;
using namespace Constants; using namespace Constants;
k->setUnexpandedDisplayName(kitName); k->setUnexpandedDisplayName(kitName);
@@ -519,9 +508,7 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k,
k->makeSticky(); k->makeSticky();
if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop) if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop)
k->setDeviceTypeForIcon(DEVICE_TYPE); k->setDeviceTypeForIcon(DEVICE_TYPE);
QSet<Utils::Id> irrelevant = { QSet<Id> irrelevant = { SysRootKitAspect::id() };
SysRootKitAspect::id()
};
if (!kitNeedsQtVersion()) if (!kitNeedsQtVersion())
irrelevant.insert(QtSupport::QtKitAspect::id()); irrelevant.insert(QtSupport::QtKitAspect::id());
if (jomExecutablePath().exists()) // TODO: add id() getter to CMakeGeneratorKitAspect if (jomExecutablePath().exists()) // TODO: add id() getter to CMakeGeneratorKitAspect
@@ -529,19 +516,19 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k,
k->setIrrelevantAspects(irrelevant); k->setIrrelevantAspects(irrelevant);
} }
static void setKitToolchains(ProjectExplorer::Kit *k, const McuToolChainPackage *tcPackage) static void setKitToolchains(Kit *k, const McuToolChainPackage *tcPackage)
{ {
// No Green Hills toolchain, because support for it is missing. // No Green Hills toolchain, because support for it is missing.
if (tcPackage->type() == McuToolChainPackage::TypeGHS) if (tcPackage->type() == McuToolChainPackage::TypeGHS)
return; return;
ProjectExplorer::ToolChainKitAspect::setToolChain(k, tcPackage->toolChain( ToolChainKitAspect::setToolChain(k, tcPackage->toolChain(
ProjectExplorer::Constants::C_LANGUAGE_ID)); ProjectExplorer::Constants::C_LANGUAGE_ID));
ProjectExplorer::ToolChainKitAspect::setToolChain(k, tcPackage->toolChain( ToolChainKitAspect::setToolChain(k, tcPackage->toolChain(
ProjectExplorer::Constants::CXX_LANGUAGE_ID)); ProjectExplorer::Constants::CXX_LANGUAGE_ID));
} }
static void setKitDebugger(ProjectExplorer::Kit *k, const McuToolChainPackage *tcPackage) static void setKitDebugger(Kit *k, const McuToolChainPackage *tcPackage)
{ {
// Qt Creator seems to be smart enough to deduce the right Kit debugger from the ToolChain // Qt Creator seems to be smart enough to deduce the right Kit debugger from the ToolChain
// We rely on that at least in the Desktop case. // We rely on that at least in the Desktop case.
@@ -553,21 +540,19 @@ static void setKitDebugger(ProjectExplorer::Kit *k, const McuToolChainPackage *t
Debugger::DebuggerKitAspect::setDebugger(k, tcPackage->debuggerId()); Debugger::DebuggerKitAspect::setDebugger(k, tcPackage->debuggerId());
} }
static void setKitDevice(ProjectExplorer::Kit *k, const McuTarget* mcuTarget) static void setKitDevice(Kit *k, const McuTarget* mcuTarget)
{ {
// "Device Type" Desktop is the default. We use that for the Qt for MCUs Desktop Kit // "Device Type" Desktop is the default. We use that for the Qt for MCUs Desktop Kit
if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop) if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop)
return; return;
ProjectExplorer::DeviceTypeKitAspect::setDeviceTypeId(k, Constants::DEVICE_TYPE); DeviceTypeKitAspect::setDeviceTypeId(k, Constants::DEVICE_TYPE);
} }
static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarget, static void setKitEnvironment(Kit *k, const McuTarget *mcuTarget,
const McuPackage *qtForMCUsSdkPackage) const McuPackage *qtForMCUsSdkPackage)
{ {
using namespace ProjectExplorer; EnvironmentItems changes;
Utils::EnvironmentItems changes;
QStringList pathAdditions; QStringList pathAdditions;
// The Desktop version depends on the Qt shared libs in Qul_DIR/bin. // The Desktop version depends on the Qt shared libs in Qul_DIR/bin.
@@ -588,10 +573,10 @@ static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarge
processPackage(package); processPackage(package);
processPackage(qtForMCUsSdkPackage); processPackage(qtForMCUsSdkPackage);
const QString path = QLatin1String(Utils::HostOsInfo().isWindowsHost() ? "Path" : "PATH"); const QString path = QLatin1String(HostOsInfo().isWindowsHost() ? "Path" : "PATH");
pathAdditions.append("${" + path + "}"); pathAdditions.append("${" + path + "}");
pathAdditions.append(QDir::toNativeSeparators(Core::ICore::libexecPath() + "/clang/bin")); pathAdditions.append(QDir::toNativeSeparators(Core::ICore::libexecPath() + "/clang/bin"));
changes.append({path, pathAdditions.join(Utils::HostOsInfo::pathListSeparator())}); changes.append({path, pathAdditions.join(HostOsInfo::pathListSeparator())});
if (kitNeedsQtVersion()) if (kitNeedsQtVersion())
changes.append({QLatin1String("LD_LIBRARY_PATH"), "%{Qt:QT_INSTALL_LIBS}"}); changes.append({QLatin1String("LD_LIBRARY_PATH"), "%{Qt:QT_INSTALL_LIBS}"});
@@ -599,8 +584,7 @@ static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarge
EnvironmentKitAspect::setEnvironmentChanges(k, changes); EnvironmentKitAspect::setEnvironmentChanges(k, changes);
} }
static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarget, static void setKitCMakeOptions(Kit *k, const McuTarget* mcuTarget, const QString &qulDir)
const QString &qulDir)
{ {
using namespace CMakeProjectManager; using namespace CMakeProjectManager;
@@ -626,7 +610,7 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg
if (mcuTarget->colorDepth() >= 0) if (mcuTarget->colorDepth() >= 0)
config.append(CMakeConfigItem("QUL_COLOR_DEPTH", config.append(CMakeConfigItem("QUL_COLOR_DEPTH",
QString::number(mcuTarget->colorDepth()).toLatin1())); QString::number(mcuTarget->colorDepth()).toLatin1()));
const Utils::FilePath jom = jomExecutablePath(); const FilePath jom = jomExecutablePath();
if (jom.exists()) { if (jom.exists()) {
config.append(CMakeConfigItem("CMAKE_MAKE_PROGRAM", jom.toString().toLatin1())); config.append(CMakeConfigItem("CMAKE_MAKE_PROGRAM", jom.toString().toLatin1()));
CMakeGeneratorKitAspect::setGenerator(k, "NMake Makefiles JOM"); CMakeGeneratorKitAspect::setGenerator(k, "NMake Makefiles JOM");
@@ -636,7 +620,7 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg
CMakeConfigurationKitAspect::setConfiguration(k, config); CMakeConfigurationKitAspect::setConfiguration(k, config);
} }
static void setKitQtVersionOptions(ProjectExplorer::Kit *k) static void setKitQtVersionOptions(Kit *k)
{ {
if (!kitNeedsQtVersion()) if (!kitNeedsQtVersion())
QtSupport::QtKitAspect::setQtVersion(k, nullptr); QtSupport::QtKitAspect::setQtVersion(k, nullptr);
@@ -667,9 +651,8 @@ QString McuSupportOptions::kitName(const McuTarget *mcuTarget)
colorDepth); colorDepth);
} }
QList<ProjectExplorer::Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTarget) QList<Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTarget)
{ {
using namespace ProjectExplorer;
using namespace Constants; using namespace Constants;
return Utils::filtered(KitManager::kits(), [mcuTarget](Kit *kit) { return Utils::filtered(KitManager::kits(), [mcuTarget](Kit *kit) {
return kit->isAutoDetected() return kit->isAutoDetected()
@@ -684,9 +667,9 @@ QList<ProjectExplorer::Kit *> McuSupportOptions::existingKits(const McuTarget *m
}); });
} }
QList<ProjectExplorer::Kit *> McuSupportOptions::outdatedKits() QList<Kit *> McuSupportOptions::outdatedKits()
{ {
return Utils::filtered(ProjectExplorer::KitManager::kits(), [](ProjectExplorer::Kit *kit) { return Utils::filtered(KitManager::kits(), [](Kit *kit) {
return kit->isAutoDetected() return kit->isAutoDetected()
&& !kit->value(Constants::KIT_MCUTARGET_VENDOR_KEY).isNull() && !kit->value(Constants::KIT_MCUTARGET_VENDOR_KEY).isNull()
&& kit->value(Constants::KIT_MCUTARGET_KITVERSION_KEY) != KIT_VERSION; && kit->value(Constants::KIT_MCUTARGET_KITVERSION_KEY) != KIT_VERSION;
@@ -696,14 +679,11 @@ QList<ProjectExplorer::Kit *> McuSupportOptions::outdatedKits()
void McuSupportOptions::removeOutdatedKits() void McuSupportOptions::removeOutdatedKits()
{ {
for (auto kit : McuSupportOptions::outdatedKits()) for (auto kit : McuSupportOptions::outdatedKits())
ProjectExplorer::KitManager::deregisterKit(kit); KitManager::deregisterKit(kit);
} }
ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget, Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdk)
const McuPackage *qtForMCUsSdk)
{ {
using namespace ProjectExplorer;
const auto init = [mcuTarget, qtForMCUsSdk](Kit *k) { const auto init = [mcuTarget, qtForMCUsSdk](Kit *k) {
KitGuard kitGuard(k); KitGuard kitGuard(k);