diff --git a/src/libs/utils/infobar.cpp b/src/libs/utils/infobar.cpp index 4e1255956a7..fc68de95b17 100644 --- a/src/libs/utils/infobar.cpp +++ b/src/libs/utils/infobar.cpp @@ -103,7 +103,15 @@ void InfoBarEntry::setCancelButtonInfo(const QString &_cancelButtonText, CallBac m_cancelButtonCallBack = callBack; } -void InfoBarEntry::setComboInfo(const QStringList &list, InfoBarEntry::ComboCallBack callBack) +void InfoBarEntry::setComboInfo(const QStringList &list, ComboCallBack callBack) +{ + m_comboInfo = Utils::transform(list, [](const QString &string) { + return ComboInfo{string, string}; + }); + m_comboCallBack = callBack; +} + +void InfoBarEntry::setComboInfo(const QList &list, ComboCallBack callBack) { m_comboCallBack = callBack; m_comboInfo = list; @@ -308,9 +316,10 @@ void InfoBarDisplay::update() if (!info.m_comboInfo.isEmpty()) { auto cb = new QComboBox(); - cb->addItems(info.m_comboInfo); - connect(cb, &QComboBox::currentTextChanged, [info](const QString &text) { - info.m_comboCallBack(text); + for (const InfoBarEntry::ComboInfo &comboInfo : qAsConst(info.m_comboInfo)) + cb->addItem(comboInfo.displayText, comboInfo.data); + connect(cb, &QComboBox::currentIndexChanged, [cb, info]() { + info.m_comboCallBack({cb->currentText(), cb->currentData()}); }); hbox->addWidget(cb); diff --git a/src/libs/utils/infobar.h b/src/libs/utils/infobar.h index 9ba6e6a6b44..d2196d9db8a 100644 --- a/src/libs/utils/infobar.h +++ b/src/libs/utils/infobar.h @@ -60,8 +60,14 @@ public: void addCustomButton(const QString &_buttonText, CallBack callBack); void setCancelButtonInfo(CallBack callBack); void setCancelButtonInfo(const QString &_cancelButtonText, CallBack callBack); - using ComboCallBack = std::function; + struct ComboInfo + { + QString displayText; + QVariant data; + }; + using ComboCallBack = std::function; void setComboInfo(const QStringList &list, ComboCallBack callBack); + void setComboInfo(const QList &infos, ComboCallBack callBack); void removeCancelButton(); using DetailsWidgetCreator = std::function; @@ -83,7 +89,7 @@ private: DetailsWidgetCreator m_detailsWidgetCreator; bool m_useCancelButton = true; ComboCallBack m_comboCallBack; - QStringList m_comboInfo; + QList m_comboInfo; friend class InfoBar; friend class InfoBarDisplay; }; diff --git a/src/plugins/mcusupport/mcusupportplugin.cpp b/src/plugins/mcusupport/mcusupportplugin.cpp index 833fb93e51e..41abf94f836 100644 --- a/src/plugins/mcusupport/mcusupportplugin.cpp +++ b/src/plugins/mcusupport/mcusupportplugin.cpp @@ -143,12 +143,15 @@ void McuSupportPlugin::askUserAboutMcuSupportKitsUpgrade() Utils::InfoBarEntry info(upgradeMcuSupportKits, tr("New version of Qt for MCUs detected. Upgrade existing Kits?"), Utils::InfoBarEntry::GlobalSuppression::Enabled); - static McuKitManager::UpgradeOption selectedOption = McuKitManager::UpgradeOption::Keep; + using McuKitManager::UpgradeOption; + static UpgradeOption selectedOption = UpgradeOption::Keep; - const QStringList options = {tr("Create new kits"), tr("Replace existing kits")}; - info.setComboInfo(options, [options](const QString &selected) { - selectedOption = options.indexOf(selected) == 0 ? McuKitManager::UpgradeOption::Keep - : McuKitManager::UpgradeOption::Replace; + const QList infos + = {{tr("Create new kits"), QVariant::fromValue(UpgradeOption::Keep)}, + {tr("Replace existing kits"), QVariant::fromValue(UpgradeOption::Replace)}}; + + info.setComboInfo(infos, [](const Utils::InfoBarEntry::ComboInfo &selected) { + selectedOption = selected.data.value(); }); info.addCustomButton(tr("Proceed"), [upgradeMcuSupportKits] { diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 1864fc4caba..d07dc79d9e3 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -3254,8 +3254,8 @@ void TextEditorWidgetPrivate::updateSyntaxInfoBar(const Highlighter::Definitions BaseTextEditor::tr("More than one highlight definition was found for this file. " "Which one should be used to highlight this file?")); info.setComboInfo(Utils::transform(definitions, &Highlighter::Definition::name), - [this](const QString &definition) { - this->configureGenericHighlighter(Highlighter::definitionForName(definition)); + [this](const InfoBarEntry::ComboInfo &info) { + this->configureGenericHighlighter(Highlighter::definitionForName(info.displayText)); }); info.addCustomButton(BaseTextEditor::tr("Remember My Choice"), [multiple, this]() {