forked from qt-creator/qt-creator
McuSupport: Restructure UI to reflect the data hierarchy
1) User selects the Qt for MCUs sdk dir 2) User chooses which board to configure 3) User provides paths for dependencies 4) User creates Kit Change-Id: Ia30ca7e245e2500c7650d12ea6768ab6e60d99c7 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -462,11 +462,10 @@ McuSupportOptions::McuSupportOptions(QObject *parent)
|
|||||||
McuPackage* seggerJLinkPackage = createSeggerJLinkPackage();
|
McuPackage* seggerJLinkPackage = createSeggerJLinkPackage();
|
||||||
|
|
||||||
QVector<McuPackage*> stmEvalPackages = {
|
QVector<McuPackage*> stmEvalPackages = {
|
||||||
armGccPackage, stm32CubeProgrammerPackage, qtForMCUsSdkPackage};
|
armGccPackage, stm32CubeProgrammerPackage};
|
||||||
QVector<McuPackage*> nxpEvalPackages = {
|
QVector<McuPackage*> nxpEvalPackages = {
|
||||||
armGccPackage, seggerJLinkPackage, qtForMCUsSdkPackage};
|
armGccPackage, seggerJLinkPackage};
|
||||||
QVector<McuPackage*> desktopPackages = {
|
QVector<McuPackage*> desktopPackages = {};
|
||||||
qtForMCUsSdkPackage};
|
|
||||||
packages = {
|
packages = {
|
||||||
armGccPackage, stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage,
|
armGccPackage, stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage,
|
||||||
seggerJLinkPackage, qtForMCUsSdkPackage};
|
seggerJLinkPackage, qtForMCUsSdkPackage};
|
||||||
@@ -564,13 +563,20 @@ static void setKitDevice(ProjectExplorer::Kit *k)
|
|||||||
ProjectExplorer::DeviceTypeKitAspect::setDeviceTypeId(k, Constants::DEVICE_TYPE);
|
ProjectExplorer::DeviceTypeKitAspect::setDeviceTypeId(k, Constants::DEVICE_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarget)
|
static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarget,
|
||||||
|
McuPackage *qtForMCUsSdkPackage)
|
||||||
{
|
{
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
|
|
||||||
Utils::EnvironmentItems changes;
|
Utils::EnvironmentItems changes;
|
||||||
QStringList pathAdditions;
|
QStringList pathAdditions;
|
||||||
for (auto package : mcuTarget->packages()) {
|
|
||||||
|
QVector<McuPackage *> packagesIncludingSdk;
|
||||||
|
packagesIncludingSdk.reserve(mcuTarget->packages().size() + 1);
|
||||||
|
packagesIncludingSdk.append(mcuTarget->packages());
|
||||||
|
packagesIncludingSdk.append(qtForMCUsSdkPackage);
|
||||||
|
|
||||||
|
for (auto package : packagesIncludingSdk) {
|
||||||
if (package->addToPath())
|
if (package->addToPath())
|
||||||
pathAdditions.append(QDir::toNativeSeparators(package->path()));
|
pathAdditions.append(QDir::toNativeSeparators(package->path()));
|
||||||
if (!package->environmentVariableName().isEmpty())
|
if (!package->environmentVariableName().isEmpty())
|
||||||
@@ -646,7 +652,7 @@ ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget)
|
|||||||
setKitDebugger(k, mcuTarget->toolChainPackage());
|
setKitDebugger(k, mcuTarget->toolChainPackage());
|
||||||
setKitDevice(k);
|
setKitDevice(k);
|
||||||
}
|
}
|
||||||
setKitEnvironment(k, mcuTarget);
|
setKitEnvironment(k, mcuTarget, qtForMCUsSdkPackage);
|
||||||
setKitCMakeOptions(k, mcuTarget, qtForMCUsSdkPackage->path());
|
setKitCMakeOptions(k, mcuTarget, qtForMCUsSdkPackage->path());
|
||||||
|
|
||||||
k->setup();
|
k->setup();
|
||||||
|
|||||||
@@ -74,48 +74,62 @@ private:
|
|||||||
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;
|
||||||
Utils::InfoLabel *m_infoLabel = nullptr;
|
QGroupBox *m_qtForMCUsSdkGroupBox = nullptr;
|
||||||
QComboBox *m_mcuTargetComboBox = nullptr;
|
QGroupBox *m_packagesGroupBox = nullptr;
|
||||||
|
QGroupBox *m_mcuTargetsGroupBox = nullptr;
|
||||||
|
QComboBox *m_mcuTargetsComboBox = nullptr;
|
||||||
|
QGroupBox *m_kitCreationGroupBox = nullptr;
|
||||||
|
Utils::InfoLabel *m_kitCreationInfoLabel = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
McuSupportOptionsWidget::McuSupportOptionsWidget()
|
McuSupportOptionsWidget::McuSupportOptionsWidget()
|
||||||
{
|
{
|
||||||
auto mainLayout = new QVBoxLayout(this);
|
auto mainLayout = new QVBoxLayout(this);
|
||||||
|
|
||||||
auto mcuTargetChooserlayout = new QHBoxLayout;
|
m_qtForMCUsSdkGroupBox = new QGroupBox(m_options.qtForMCUsSdkPackage->label());
|
||||||
auto mcuTargetChooserLabel = new QLabel(tr("Target:"));
|
m_qtForMCUsSdkGroupBox->setFlat(true);
|
||||||
mcuTargetChooserlayout->addWidget(mcuTargetChooserLabel);
|
auto qtForMCUsSdkGroupBoxLayout = new QVBoxLayout(m_qtForMCUsSdkGroupBox);
|
||||||
m_mcuTargetComboBox = new QComboBox;
|
qtForMCUsSdkGroupBoxLayout->addWidget(m_options.qtForMCUsSdkPackage->widget());
|
||||||
mcuTargetChooserLabel->setBuddy(m_mcuTargetComboBox);
|
mainLayout->addWidget(m_qtForMCUsSdkGroupBox);
|
||||||
mcuTargetChooserLabel->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
|
|
||||||
m_mcuTargetComboBox->addItems(
|
m_mcuTargetsGroupBox = new QGroupBox(tr("Targets supported by the %1")
|
||||||
|
.arg(m_qtForMCUsSdkGroupBox->title()));
|
||||||
|
m_mcuTargetsGroupBox->setFlat(true);
|
||||||
|
mainLayout->addWidget(m_mcuTargetsGroupBox);
|
||||||
|
auto qtForMCUsTargetsGroupBoxLayout = new QVBoxLayout(m_mcuTargetsGroupBox);
|
||||||
|
m_mcuTargetsComboBox = new QComboBox;
|
||||||
|
m_mcuTargetsComboBox->addItems(
|
||||||
Utils::transform<QStringList>(m_options.mcuTargets, [this](McuTarget *t){
|
Utils::transform<QStringList>(m_options.mcuTargets, [this](McuTarget *t){
|
||||||
return m_options.kitName(t);
|
return m_options.kitName(t);
|
||||||
}));
|
}));
|
||||||
mcuTargetChooserlayout->addWidget(m_mcuTargetComboBox);
|
qtForMCUsTargetsGroupBoxLayout->addWidget(m_mcuTargetsComboBox);
|
||||||
mainLayout->addLayout(mcuTargetChooserlayout);
|
|
||||||
|
|
||||||
auto m_packagesGroupBox = new QGroupBox(tr("Packages"));
|
m_packagesGroupBox = new QGroupBox(tr("Requirements"));
|
||||||
|
m_packagesGroupBox->setFlat(true);
|
||||||
mainLayout->addWidget(m_packagesGroupBox);
|
mainLayout->addWidget(m_packagesGroupBox);
|
||||||
m_packagesLayout = new QFormLayout;
|
m_packagesLayout = new QFormLayout;
|
||||||
m_packagesGroupBox->setLayout(m_packagesLayout);
|
m_packagesGroupBox->setLayout(m_packagesLayout);
|
||||||
|
|
||||||
|
m_kitCreationGroupBox = new QGroupBox(tr("Create a Kit"));
|
||||||
|
m_kitCreationGroupBox->setFlat(true);
|
||||||
|
mainLayout->addWidget(m_kitCreationGroupBox);
|
||||||
|
auto kitCreationGroupBoxLayout = new QVBoxLayout(m_kitCreationGroupBox);
|
||||||
|
m_kitCreationInfoLabel = new Utils::InfoLabel;
|
||||||
|
m_kitCreationInfoLabel->setOpenExternalLinks(false);
|
||||||
|
m_kitCreationInfoLabel->setElideMode(Qt::ElideNone);
|
||||||
|
m_kitCreationInfoLabel->setWordWrap(true);
|
||||||
|
kitCreationGroupBoxLayout->addWidget(m_kitCreationInfoLabel);
|
||||||
|
|
||||||
mainLayout->addStretch();
|
mainLayout->addStretch();
|
||||||
|
|
||||||
m_infoLabel = new Utils::InfoLabel;
|
|
||||||
m_infoLabel->setOpenExternalLinks(false);
|
|
||||||
m_infoLabel->setElideMode(Qt::ElideNone);
|
|
||||||
m_infoLabel->setWordWrap(true);
|
|
||||||
mainLayout->addWidget(m_infoLabel);
|
|
||||||
|
|
||||||
connect(&m_options, &McuSupportOptions::changed, this, &McuSupportOptionsWidget::updateStatus);
|
connect(&m_options, &McuSupportOptions::changed, this, &McuSupportOptionsWidget::updateStatus);
|
||||||
connect(m_mcuTargetComboBox, &QComboBox::currentTextChanged,
|
connect(m_mcuTargetsComboBox, &QComboBox::currentTextChanged,
|
||||||
this, &McuSupportOptionsWidget::showMcuTargetPackages);
|
this, &McuSupportOptionsWidget::showMcuTargetPackages);
|
||||||
connect(m_infoLabel, &QLabel::linkActivated, this, []{
|
connect(m_kitCreationInfoLabel, &QLabel::linkActivated, this, []{
|
||||||
Core::ICore::showOptionsDialog(
|
Core::ICore::showOptionsDialog(
|
||||||
CMakeProjectManager::Constants::CMAKE_SETTINGSPAGE_ID,
|
CMakeProjectManager::Constants::CMAKE_SETTINGSPAGE_ID,
|
||||||
Core::ICore::mainWindow());
|
Core::ICore::mainWindow());
|
||||||
});
|
});
|
||||||
|
|
||||||
showMcuTargetPackages();
|
showMcuTargetPackages();
|
||||||
}
|
}
|
||||||
@@ -126,8 +140,13 @@ void McuSupportOptionsWidget::updateStatus()
|
|||||||
if (!mcuTarget)
|
if (!mcuTarget)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_infoLabel->setType(cMakeAvailable() && mcuTarget->isValid()
|
m_kitCreationInfoLabel->setType(cMakeAvailable() && mcuTarget->isValid()
|
||||||
? Utils::InfoLabel::Ok : Utils::InfoLabel::NotOk);
|
? Utils::InfoLabel::Ok : Utils::InfoLabel::NotOk);
|
||||||
|
|
||||||
|
const bool sdkValid = m_options.qtForMCUsSdkPackage->status() == McuPackage::ValidPackage;
|
||||||
|
m_mcuTargetsGroupBox->setVisible(sdkValid);
|
||||||
|
m_packagesGroupBox->setVisible(sdkValid && !mcuTarget->packages().isEmpty());
|
||||||
|
m_kitCreationGroupBox->setVisible(sdkValid);
|
||||||
|
|
||||||
QStringList errorStrings;
|
QStringList errorStrings;
|
||||||
if (!mcuTarget->isValid())
|
if (!mcuTarget->isValid())
|
||||||
@@ -136,7 +155,8 @@ void McuSupportOptionsWidget::updateStatus()
|
|||||||
errorStrings << "No CMake tool was detected. Add a CMake tool in the "
|
errorStrings << "No CMake tool was detected. Add a CMake tool in the "
|
||||||
"<a href=\"cmake\">CMake options</a> and press Apply.";
|
"<a href=\"cmake\">CMake options</a> and press Apply.";
|
||||||
|
|
||||||
m_infoLabel->setText(errorStrings.isEmpty()
|
m_kitCreationInfoLabel->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))
|
||||||
@@ -168,7 +188,7 @@ void McuSupportOptionsWidget::showMcuTargetPackages()
|
|||||||
|
|
||||||
McuTarget *McuSupportOptionsWidget::currentMcuTarget() const
|
McuTarget *McuSupportOptionsWidget::currentMcuTarget() const
|
||||||
{
|
{
|
||||||
const int mcuTargetIndex = m_mcuTargetComboBox->currentIndex();
|
const int mcuTargetIndex = m_mcuTargetsComboBox->currentIndex();
|
||||||
return m_options.mcuTargets.isEmpty() ? nullptr : m_options.mcuTargets.at(mcuTargetIndex);
|
return m_options.mcuTargets.isEmpty() ? nullptr : m_options.mcuTargets.at(mcuTargetIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user