From aaec90c6bc1f8ceb605007dd3f747fdfaf993b54 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 6 Feb 2019 09:43:51 +0100 Subject: [PATCH] Core: add combo info to info bar entry This allows user to show a combo box for a stringlist. Every time the user changes the selection a callback is called. Change-Id: I27e16843465e6006cccdc3502e76be852b584dfa Reviewed-by: Eike Ziller --- src/plugins/coreplugin/infobar.cpp | 19 ++++++++++++++++++- src/plugins/coreplugin/infobar.h | 4 ++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/infobar.cpp b/src/plugins/coreplugin/infobar.cpp index 827f1e8337a..a81a8834d50 100644 --- a/src/plugins/coreplugin/infobar.cpp +++ b/src/plugins/coreplugin/infobar.cpp @@ -36,6 +36,7 @@ #include #include #include +#include static const char C_SUPPRESSED_WARNINGS[] = "SuppressedWarnings"; @@ -73,6 +74,12 @@ void InfoBarEntry::setCancelButtonInfo(const QString &_cancelButtonText, CallBac m_cancelButtonCallBack = callBack; } +void InfoBarEntry::setComboInfo(const QStringList &list, InfoBarEntry::ComboCallBack callBack) +{ + m_comboCallBack = callBack; + m_comboInfo = list; +} + void InfoBarEntry::removeCancelButton() { m_useCancelButton = false; @@ -242,7 +249,7 @@ void InfoBarDisplay::update() QLabel *infoWidgetLabel = new QLabel(info.m_infoText); infoWidgetLabel->setWordWrap(true); - hbox->addWidget(infoWidgetLabel); + hbox->addWidget(infoWidgetLabel, 1); if (info.m_detailsWidgetCreator) { if (m_isShowingDetailsWidget) { @@ -270,6 +277,16 @@ void InfoBarDisplay::update() m_isShowingDetailsWidget = false; } + 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); + }); + + hbox->addWidget(cb); + } + if (!info.m_buttonText.isEmpty()) { auto infoWidgetButton = new QToolButton; infoWidgetButton->setText(info.m_buttonText); diff --git a/src/plugins/coreplugin/infobar.h b/src/plugins/coreplugin/infobar.h index ccd235cedc9..b65a821bcf1 100644 --- a/src/plugins/coreplugin/infobar.h +++ b/src/plugins/coreplugin/infobar.h @@ -61,6 +61,8 @@ public: void setCustomButtonInfo(const QString &_buttonText, CallBack callBack); void setCancelButtonInfo(CallBack callBack); void setCancelButtonInfo(const QString &_cancelButtonText, CallBack callBack); + using ComboCallBack = std::function; + void setComboInfo(const QStringList &list, ComboCallBack callBack); void removeCancelButton(); using DetailsWidgetCreator = std::function; @@ -76,6 +78,8 @@ private: GlobalSuppressionMode m_globalSuppression; DetailsWidgetCreator m_detailsWidgetCreator; bool m_useCancelButton = true; + ComboCallBack m_comboCallBack; + QStringList m_comboInfo; friend class InfoBar; friend class InfoBarDisplay; };