McuSupport: Use new settings page convenience

Change-Id: Id0c525a32b1c8b9e0d8d04da7bcd37c4f1958508
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
hjk
2020-01-07 17:42:57 +01:00
parent 9c3fc239b4
commit 11c9062cb2
2 changed files with 38 additions and 65 deletions

View File

@@ -53,21 +53,23 @@ static bool cMakeAvailable()
return !CMakeProjectManager::CMakeToolManager::cmakeTools().isEmpty();
}
class McuSupportOptionsWidget : public QWidget
class McuSupportOptionsWidget : public Core::IOptionsPageWidget
{
public:
McuSupportOptionsWidget(const McuSupportOptions *options, QWidget *parent = nullptr);
McuSupportOptionsWidget();
void updateStatus();
void showMcuTargetPackages();
McuTarget *currentMcuTarget() const;
protected:
void showEvent(QShowEvent *event) override;
private:
void apply() final;
void finish() final {}
void showEvent(QShowEvent *event) final;
QString m_armGccPath;
const McuSupportOptions *m_options;
McuSupportOptions m_options;
QMap <McuPackage*, QWidget*> m_packageWidgets;
QMap <McuTarget*, QWidget*> m_mcuTargetPacketWidgets;
QFormLayout *m_packagesLayout = nullptr;
@@ -75,9 +77,7 @@ private:
QComboBox *m_mcuTargetComboBox = nullptr;
};
McuSupportOptionsWidget::McuSupportOptionsWidget(const McuSupportOptions *options, QWidget *parent)
: QWidget(parent)
, m_options(options)
McuSupportOptionsWidget::McuSupportOptionsWidget()
{
auto mainLayout = new QVBoxLayout(this);
@@ -88,8 +88,8 @@ McuSupportOptionsWidget::McuSupportOptionsWidget(const McuSupportOptions *option
mcuTargetChooserLabel->setBuddy(m_mcuTargetComboBox);
mcuTargetChooserLabel->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
m_mcuTargetComboBox->addItems(
Utils::transform<QStringList>(m_options->mcuTargets, [this](McuTarget *t){
return m_options->kitName(t);
Utils::transform<QStringList>(m_options.mcuTargets, [this](McuTarget *t){
return m_options.kitName(t);
}));
mcuTargetChooserlayout->addWidget(m_mcuTargetComboBox);
mainLayout->addLayout(mcuTargetChooserlayout);
@@ -107,7 +107,7 @@ McuSupportOptionsWidget::McuSupportOptionsWidget(const McuSupportOptions *option
m_infoLabel->setWordWrap(true);
mainLayout->addWidget(m_infoLabel);
connect(options, &McuSupportOptions::changed, this, &McuSupportOptionsWidget::updateStatus);
connect(&m_options, &McuSupportOptions::changed, this, &McuSupportOptionsWidget::updateStatus);
connect(m_mcuTargetComboBox, &QComboBox::currentTextChanged,
this, &McuSupportOptionsWidget::showMcuTargetPackages);
connect(m_infoLabel, &QLabel::linkActivated, this, []{
@@ -137,7 +137,7 @@ void McuSupportOptionsWidget::updateStatus()
m_infoLabel->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(
"Press Apply to generate it.").arg(m_options.kitName(
mcuTarget))
: errorStrings.join("<br/>"));
}
@@ -154,7 +154,7 @@ void McuSupportOptionsWidget::showMcuTargetPackages()
row.fieldItem->widget()->hide();
}
for (auto package : m_options->packages) {
for (auto package : m_options.packages) {
QWidget *packageWidget = package->widget();
if (!mcuTarget->packages().contains(package))
continue;
@@ -168,7 +168,7 @@ void McuSupportOptionsWidget::showMcuTargetPackages()
McuTarget *McuSupportOptionsWidget::currentMcuTarget() const
{
const int mcuTargetIndex = m_mcuTargetComboBox->currentIndex();
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)
@@ -177,50 +177,32 @@ void McuSupportOptionsWidget::showEvent(QShowEvent *event)
updateStatus();
}
McuSupportOptionsPage::McuSupportOptionsPage(QObject* parent)
: Core::IOptionsPage(parent)
void McuSupportOptionsWidget::apply()
{
for (auto package : m_options.packages)
package->writeToSettings();
QTC_ASSERT(m_options.armGccPackage, return);
QTC_ASSERT(m_options.qtForMCUsSdkPackage, return);
if (!isVisible() || !cMakeAvailable())
return;
const McuTarget *mcuTarget = currentMcuTarget();
if (!mcuTarget)
return;
for (auto existingKit : m_options.existingKits(mcuTarget))
ProjectExplorer::KitManager::deregisterKit(existingKit);
m_options.newKit(mcuTarget);
}
McuSupportOptionsPage::McuSupportOptionsPage()
{
setId(Core::Id(Constants::SETTINGS_ID));
setDisplayName(tr("MCU"));
setCategory(ProjectExplorer::Constants::DEVICE_SETTINGS_CATEGORY);
}
QWidget *McuSupportOptionsPage::widget()
{
if (!m_options)
m_options = new McuSupportOptions(this);
if (!m_widget)
m_widget = new McuSupportOptionsWidget(m_options);
return m_widget;
}
void McuSupportOptionsPage::apply()
{
for (auto package : m_options->packages)
package->writeToSettings();
QTC_ASSERT(m_options->armGccPackage, return);
QTC_ASSERT(m_options->qtForMCUsSdkPackage, return);
if (!widget()->isVisible() || !cMakeAvailable())
return;
const McuTarget *mcuTarget = m_widget->currentMcuTarget();
if (!mcuTarget)
return;
using namespace ProjectExplorer;
for (auto existingKit : m_options->existingKits(mcuTarget))
ProjectExplorer::KitManager::deregisterKit(existingKit);
m_options->newKit(mcuTarget);
}
void McuSupportOptionsPage::finish()
{
delete m_options;
m_options = nullptr;
delete m_widget;
setWidgetCreator([] { return new McuSupportOptionsWidget; });
}
} // Internal

View File

@@ -27,8 +27,6 @@
#include <coreplugin/dialogs/ioptionspage.h>
#include <QPointer>
namespace McuSupport {
namespace Internal {
@@ -37,14 +35,7 @@ class McuSupportOptionsPage : public Core::IOptionsPage
Q_OBJECT
public:
explicit McuSupportOptionsPage(QObject *parent = nullptr);
QWidget *widget() override;
void apply() override;
void finish() override;
private:
QPointer<class McuSupportOptionsWidget> m_widget;
class McuSupportOptions *m_options = nullptr;
McuSupportOptionsPage();
};
} // namespace Internal