summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@qt.io>2019-11-29 00:07:04 +0100
committerAlessandro Portale <alessandro.portale@qt.io>2019-12-06 13:38:07 +0000
commita44562f6766a46446c4870068122039eed928d84 (patch)
tree863e8724b3048c3dc8d39b3e26db16ab5c4f2a5b
parent51e93af2de628cc8e37ea2ce981f5a57612e8449 (diff)
downloadqt-creator-a44562f6766a46446c4870068122039eed928d84.tar.gz
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>
-rw-r--r--src/plugins/mcusupport/mcusupportoptionspage.cpp54
1 files changed, 47 insertions, 7 deletions
diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp
index c0d1c42afc..1ba895cab6 100644
--- a/src/plugins/mcusupport/mcusupportoptionspage.cpp
+++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp
@@ -27,6 +27,8 @@
#include "mcusupportoptionspage.h"
#include "mcusupportoptions.h"
+#include <cmakeprojectmanager/cmakeprojectconstants.h>
+#include <cmakeprojectmanager/cmaketoolmanager.h>
#include <coreplugin/icore.h>
#include <projectexplorer/kitmanager.h>
#include <projectexplorer/projectexplorerconstants.h>
@@ -36,6 +38,7 @@
#include <QComboBox>
#include <QDir>
+#include <QHBoxLayout>
#include <QFormLayout>
#include <QGroupBox>
#include <QLabel>
@@ -44,6 +47,11 @@
namespace McuSupport {
namespace Internal {
+static bool cMakeAvailable()
+{
+ return !CMakeProjectManager::CMakeToolManager::cmakeTools().isEmpty();
+}
+
class McuSupportOptionsWidget : public QWidget
{
public:
@@ -53,12 +61,16 @@ public:
void showMcuTargetPackages();
McuTarget *currentMcuTarget() const;
+protected:
+ void showEvent(QShowEvent *event) override;
+
private:
QString m_armGccPath;
const McuSupportOptions *m_options;
QMap <McuPackage*, QWidget*> m_packageWidgets;
QMap <McuTarget*, QWidget*> m_mcuTargetPacketWidgets;
QFormLayout *m_packagesLayout = nullptr;
+ QLabel *m_statusIcon = nullptr;
QLabel *m_statusLabel = nullptr;
QComboBox *m_mcuTargetComboBox = nullptr;
};
@@ -87,17 +99,29 @@ McuSupportOptionsWidget::McuSupportOptionsWidget(const McuSupportOptions *option
m_packagesLayout = new QFormLayout;
m_packagesGroupBox->setLayout(m_packagesLayout);
+ m_statusIcon = new QLabel;
+ m_statusIcon->setAlignment(Qt::AlignBottom);
m_statusLabel = new QLabel;
- mainLayout->addWidget(m_statusLabel, 2);
m_statusLabel->setWordWrap(true);
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(m_mcuTargetComboBox, &QComboBox::currentTextChanged,
this, &McuSupportOptionsWidget::showMcuTargetPackages);
+ connect(m_statusLabel, &QLabel::linkActivated, this, []{
+ Core::ICore::showOptionsDialog(
+ CMakeProjectManager::Constants::CMAKE_SETTINGSPAGE_ID,
+ Core::ICore::mainWindow());
+ });
showMcuTargetPackages();
- updateStatus();
}
void McuSupportOptionsWidget::updateStatus()
@@ -106,12 +130,22 @@ void McuSupportOptionsWidget::updateStatus()
if (!mcuTarget)
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. "
"Press Apply to generate it.").arg(m_options->kitName(
mcuTarget))
- : QString::fromLatin1("Provide the package paths in order to create a kit for "
- "your target."));
+ : errorStrings.join("<br/>"));
}
void McuSupportOptionsWidget::showMcuTargetPackages()
@@ -143,6 +177,12 @@ McuTarget *McuSupportOptionsWidget::currentMcuTarget() const
return m_options->mcuTargets.isEmpty() ? nullptr : m_options->mcuTargets.at(mcuTargetIndex);
}
+void McuSupportOptionsWidget::showEvent(QShowEvent *event)
+{
+ Q_UNUSED(event)
+ updateStatus();
+}
+
McuSupportOptionsPage::McuSupportOptionsPage(QObject* parent)
: Core::IOptionsPage(parent)
{
@@ -168,8 +208,8 @@ void McuSupportOptionsPage::apply()
QTC_ASSERT(m_options->armGccPackage, return);
QTC_ASSERT(m_options->qtForMCUsSdkPackage, return);
- if (!widget()->isVisible())
- return; // Only create/overwrite kits when this option page is shown
+ if (!widget()->isVisible() || !cMakeAvailable())
+ return;
const McuTarget *mcuTarget = m_widget->currentMcuTarget();
if (!mcuTarget)