forked from qt-creator/qt-creator
McuSupport: Check for presence of CMake
If no CMake tool is present, direct the user to the CMake settings, insted of creating non-functional kits. Change-Id: I0326b1fd37a0475a3a2983ad6108729b0c54d87c Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -27,6 +27,8 @@
|
|||||||
#include "mcusupportoptionspage.h"
|
#include "mcusupportoptionspage.h"
|
||||||
#include "mcusupportoptions.h"
|
#include "mcusupportoptions.h"
|
||||||
|
|
||||||
|
#include <cmakeprojectmanager/cmakeprojectconstants.h>
|
||||||
|
#include <cmakeprojectmanager/cmaketoolmanager.h>
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <projectexplorer/kitmanager.h>
|
#include <projectexplorer/kitmanager.h>
|
||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
@@ -36,6 +38,7 @@
|
|||||||
|
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QHBoxLayout>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QGroupBox>
|
#include <QGroupBox>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
@@ -44,6 +47,11 @@
|
|||||||
namespace McuSupport {
|
namespace McuSupport {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
|
static bool cMakeAvailable()
|
||||||
|
{
|
||||||
|
return !CMakeProjectManager::CMakeToolManager::cmakeTools().isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
class McuSupportOptionsWidget : public QWidget
|
class McuSupportOptionsWidget : public QWidget
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -53,12 +61,16 @@ public:
|
|||||||
void showMcuTargetPackages();
|
void showMcuTargetPackages();
|
||||||
McuTarget *currentMcuTarget() const;
|
McuTarget *currentMcuTarget() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void showEvent(QShowEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_armGccPath;
|
QString m_armGccPath;
|
||||||
const McuSupportOptions *m_options;
|
const McuSupportOptions *m_options;
|
||||||
QMap <McuPackage*, QWidget*> m_packageWidgets;
|
QMap <McuPackage*, QWidget*> m_packageWidgets;
|
||||||
QMap <McuTarget*, QWidget*> m_mcuTargetPacketWidgets;
|
QMap <McuTarget*, QWidget*> m_mcuTargetPacketWidgets;
|
||||||
QFormLayout *m_packagesLayout = nullptr;
|
QFormLayout *m_packagesLayout = nullptr;
|
||||||
|
QLabel *m_statusIcon = nullptr;
|
||||||
QLabel *m_statusLabel = nullptr;
|
QLabel *m_statusLabel = nullptr;
|
||||||
QComboBox *m_mcuTargetComboBox = nullptr;
|
QComboBox *m_mcuTargetComboBox = nullptr;
|
||||||
};
|
};
|
||||||
@@ -87,17 +99,29 @@ McuSupportOptionsWidget::McuSupportOptionsWidget(const McuSupportOptions *option
|
|||||||
m_packagesLayout = new QFormLayout;
|
m_packagesLayout = new QFormLayout;
|
||||||
m_packagesGroupBox->setLayout(m_packagesLayout);
|
m_packagesGroupBox->setLayout(m_packagesLayout);
|
||||||
|
|
||||||
|
m_statusIcon = new QLabel;
|
||||||
|
m_statusIcon->setAlignment(Qt::AlignBottom);
|
||||||
m_statusLabel = new QLabel;
|
m_statusLabel = new QLabel;
|
||||||
mainLayout->addWidget(m_statusLabel, 2);
|
|
||||||
m_statusLabel->setWordWrap(true);
|
m_statusLabel->setWordWrap(true);
|
||||||
m_statusLabel->setAlignment(Qt::AlignBottom | Qt::AlignLeft);
|
m_statusLabel->setAlignment(Qt::AlignBottom | Qt::AlignLeft);
|
||||||
|
m_statusLabel->setOpenExternalLinks(false);
|
||||||
|
auto statusWidget = new QWidget;
|
||||||
|
auto statusLayout = new QHBoxLayout(statusWidget);
|
||||||
|
statusLayout->setMargin(0);
|
||||||
|
statusLayout->addWidget(m_statusIcon, 0);
|
||||||
|
statusLayout->addWidget(m_statusLabel, 2);
|
||||||
|
mainLayout->addWidget(statusWidget, 2);
|
||||||
|
|
||||||
connect(options, &McuSupportOptions::changed, this, &McuSupportOptionsWidget::updateStatus);
|
connect(options, &McuSupportOptions::changed, this, &McuSupportOptionsWidget::updateStatus);
|
||||||
connect(m_mcuTargetComboBox, &QComboBox::currentTextChanged,
|
connect(m_mcuTargetComboBox, &QComboBox::currentTextChanged,
|
||||||
this, &McuSupportOptionsWidget::showMcuTargetPackages);
|
this, &McuSupportOptionsWidget::showMcuTargetPackages);
|
||||||
|
connect(m_statusLabel, &QLabel::linkActivated, this, []{
|
||||||
|
Core::ICore::showOptionsDialog(
|
||||||
|
CMakeProjectManager::Constants::CMAKE_SETTINGSPAGE_ID,
|
||||||
|
Core::ICore::mainWindow());
|
||||||
|
});
|
||||||
|
|
||||||
showMcuTargetPackages();
|
showMcuTargetPackages();
|
||||||
updateStatus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void McuSupportOptionsWidget::updateStatus()
|
void McuSupportOptionsWidget::updateStatus()
|
||||||
@@ -106,12 +130,22 @@ void McuSupportOptionsWidget::updateStatus()
|
|||||||
if (!mcuTarget)
|
if (!mcuTarget)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_statusLabel->setText(mcuTarget->isValid()
|
static const QPixmap okIcon = Utils::Icons::OK.pixmap();
|
||||||
|
static const QPixmap notOkIcon = Utils::Icons::BROKEN.pixmap();
|
||||||
|
m_statusIcon->setPixmap(cMakeAvailable() && mcuTarget->isValid() ? okIcon : notOkIcon);
|
||||||
|
|
||||||
|
QStringList errorStrings;
|
||||||
|
if (!mcuTarget->isValid())
|
||||||
|
errorStrings << "Provide the package paths in order to create a kit for your target.";
|
||||||
|
if (!cMakeAvailable())
|
||||||
|
errorStrings << "No CMake tool was detected. Add a CMake tool in the "
|
||||||
|
"<a href=\"cmake\">CMake options</a> and press Apply.";
|
||||||
|
|
||||||
|
m_statusLabel->setText(errorStrings.isEmpty()
|
||||||
? QString::fromLatin1("A kit <b>%1</b> for the selected target can be generated. "
|
? QString::fromLatin1("A kit <b>%1</b> for the selected target can be generated. "
|
||||||
"Press Apply to generate it.").arg(m_options->kitName(
|
"Press Apply to generate it.").arg(m_options->kitName(
|
||||||
mcuTarget))
|
mcuTarget))
|
||||||
: QString::fromLatin1("Provide the package paths in order to create a kit for "
|
: errorStrings.join("<br/>"));
|
||||||
"your target."));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void McuSupportOptionsWidget::showMcuTargetPackages()
|
void McuSupportOptionsWidget::showMcuTargetPackages()
|
||||||
@@ -143,6 +177,12 @@ McuTarget *McuSupportOptionsWidget::currentMcuTarget() const
|
|||||||
return m_options->mcuTargets.isEmpty() ? nullptr : m_options->mcuTargets.at(mcuTargetIndex);
|
return m_options->mcuTargets.isEmpty() ? nullptr : m_options->mcuTargets.at(mcuTargetIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void McuSupportOptionsWidget::showEvent(QShowEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event)
|
||||||
|
updateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
McuSupportOptionsPage::McuSupportOptionsPage(QObject* parent)
|
McuSupportOptionsPage::McuSupportOptionsPage(QObject* parent)
|
||||||
: Core::IOptionsPage(parent)
|
: Core::IOptionsPage(parent)
|
||||||
{
|
{
|
||||||
@@ -168,8 +208,8 @@ void McuSupportOptionsPage::apply()
|
|||||||
QTC_ASSERT(m_options->armGccPackage, return);
|
QTC_ASSERT(m_options->armGccPackage, return);
|
||||||
QTC_ASSERT(m_options->qtForMCUsSdkPackage, return);
|
QTC_ASSERT(m_options->qtForMCUsSdkPackage, return);
|
||||||
|
|
||||||
if (!widget()->isVisible())
|
if (!widget()->isVisible() || !cMakeAvailable())
|
||||||
return; // Only create/overwrite kits when this option page is shown
|
return;
|
||||||
|
|
||||||
const McuTarget *mcuTarget = m_widget->currentMcuTarget();
|
const McuTarget *mcuTarget = m_widget->currentMcuTarget();
|
||||||
if (!mcuTarget)
|
if (!mcuTarget)
|
||||||
|
Reference in New Issue
Block a user