aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/checkablemessagebox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/utils/checkablemessagebox.cpp')
-rw-r--r--src/libs/utils/checkablemessagebox.cpp51
1 files changed, 41 insertions, 10 deletions
diff --git a/src/libs/utils/checkablemessagebox.cpp b/src/libs/utils/checkablemessagebox.cpp
index 0cded34acd..c2c6a4c6ce 100644
--- a/src/libs/utils/checkablemessagebox.cpp
+++ b/src/libs/utils/checkablemessagebox.cpp
@@ -33,6 +33,7 @@
#include <QPushButton>
#include <QSettings>
#include <QStyle>
+#include <QTextEdit>
/*!
\class Utils::CheckableMessageBox
@@ -73,15 +74,23 @@ public:
messageLabel->setOpenExternalLinks(true);
messageLabel->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse);
messageLabel->setFocusPolicy(Qt::NoFocus);
-
- auto checkBoxRightSpacer =
- new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum);
- auto buttonSpacer =
- new QSpacerItem(0, 1, QSizePolicy::Minimum, QSizePolicy::Minimum);
+ messageLabel->setAlignment(Qt::AlignLeft | Qt::AlignTop);
checkBox = new QCheckBox(q);
checkBox->setText(CheckableMessageBox::tr("Do not ask again"));
+ const QString showText = CheckableMessageBox::tr("Show Details...");
+ detailsButton = new QPushButton(showText, q);
+ detailsButton->setAutoDefault(false);
+ detailsButton->hide();
+ detailsText = new QTextEdit(q);
+ detailsText->hide();
+ QObject::connect(detailsButton, &QPushButton::clicked, detailsText, [this, showText] {
+ detailsText->setVisible(!detailsText->isVisible());
+ detailsButton->setText(
+ detailsText->isVisible() ? CheckableMessageBox::tr("Hide Details...") : showText);
+ });
+
buttonBox = new QDialogButtonBox(q);
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
@@ -92,16 +101,22 @@ public:
auto horizontalLayout_2 = new QHBoxLayout();
horizontalLayout_2->addLayout(verticalLayout);
- horizontalLayout_2->addWidget(messageLabel);
+ horizontalLayout_2->addWidget(messageLabel, 10);
auto horizontalLayout = new QHBoxLayout();
horizontalLayout->addWidget(checkBox);
- horizontalLayout->addItem(checkBoxRightSpacer);
+ horizontalLayout->addStretch(10);
+
+ auto detailsButtonLayout = new QHBoxLayout;
+ detailsButtonLayout->addWidget(detailsButton);
+ detailsButtonLayout->addStretch(10);
auto verticalLayout_2 = new QVBoxLayout(q);
verticalLayout_2->addLayout(horizontalLayout_2);
verticalLayout_2->addLayout(horizontalLayout);
- verticalLayout_2->addItem(buttonSpacer);
+ verticalLayout_2->addLayout(detailsButtonLayout);
+ verticalLayout_2->addWidget(detailsText, 10);
+ verticalLayout_2->addStretch(1);
verticalLayout_2->addWidget(buttonBox);
}
@@ -110,6 +125,8 @@ public:
QCheckBox *checkBox = nullptr;
QDialogButtonBox *buttonBox = nullptr;
QAbstractButton *clickedButton = nullptr;
+ QPushButton *detailsButton = nullptr;
+ QTextEdit *detailsText = nullptr;
QMessageBox::Icon icon = QMessageBox::NoIcon;
};
@@ -230,6 +247,18 @@ void CheckableMessageBox::setCheckBoxVisible(bool v)
d->checkBox->setVisible(v);
}
+QString CheckableMessageBox::detailedText() const
+{
+ return d->detailsText->toPlainText();
+}
+
+void CheckableMessageBox::setDetailedText(const QString &text)
+{
+ d->detailsText->setText(text);
+ if (!text.isEmpty())
+ d->detailsButton->setVisible(true);
+}
+
QDialogButtonBox::StandardButtons CheckableMessageBox::standardButtons() const
{
return d->buttonBox->standardButtons();
@@ -252,7 +281,8 @@ QPushButton *CheckableMessageBox::addButton(const QString &text, QDialogButtonBo
QDialogButtonBox::StandardButton CheckableMessageBox::defaultButton() const
{
- foreach (QAbstractButton *b, d->buttonBox->buttons())
+ const QList<QAbstractButton *> buttons = d->buttonBox->buttons();
+ for (QAbstractButton *b : buttons)
if (auto *pb = qobject_cast<QPushButton *>(b))
if (pb->isDefault())
return d->buttonBox->standardButton(pb);
@@ -435,7 +465,8 @@ bool CheckableMessageBox::hasSuppressedQuestions(QSettings *settings)
QTC_ASSERT(settings, return false);
bool hasSuppressed = false;
settings->beginGroup(QLatin1String(kDoNotAskAgainKey));
- foreach (const QString &subKey, settings->childKeys()) {
+ const QStringList childKeys = settings->childKeys();
+ for (const QString &subKey : childKeys) {
if (settings->value(subKey, false).toBool()) {
hasSuppressed = true;
break;