forked from qt-creator/qt-creator
Add detailedText to CheckableMessageBox
QMessageBox creates dialogs that are not resizable, so extend our own message box implementation with that feature and use it for the Plugin install wizard. Change-Id: I0e8a2d525894f8c2897b1e4d8ab546a856030c57 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -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();
|
||||
|
@@ -101,6 +101,9 @@ public:
|
||||
bool isCheckBoxVisible() const;
|
||||
void setCheckBoxVisible(bool);
|
||||
|
||||
QString detailedText() const;
|
||||
void setDetailedText(const QString &text);
|
||||
|
||||
QDialogButtonBox::StandardButtons standardButtons() const;
|
||||
void setStandardButtons(QDialogButtonBox::StandardButtons s);
|
||||
QPushButton *button(QDialogButtonBox::StandardButton b) const;
|
||||
|
@@ -38,6 +38,7 @@
|
||||
#include <extensionsystem/pluginview.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/checkablemessagebox.h>
|
||||
#include <utils/environment.h>
|
||||
#include <utils/fancylineedit.h>
|
||||
#include <utils/infolabel.h>
|
||||
@@ -372,13 +373,14 @@ static bool unzip(const FilePath &src, const FilePath &dest)
|
||||
QTC_ASSERT(tool, return false);
|
||||
const QString workingDirectory = dest.toFileInfo().absoluteFilePath();
|
||||
QDir(workingDirectory).mkpath(".");
|
||||
QMessageBox box(QMessageBox::Information,
|
||||
PluginDialog::tr("Unzipping File"),
|
||||
PluginDialog::tr("Unzipping \"%1\" to \"%2\".")
|
||||
.arg(src.toUserOutput(), dest.toUserOutput()),
|
||||
QMessageBox::Ok | QMessageBox::Cancel,
|
||||
ICore::dialogParent());
|
||||
box.button(QMessageBox::Ok)->setEnabled(false);
|
||||
CheckableMessageBox box(ICore::dialogParent());
|
||||
box.setIcon(QMessageBox::Information);
|
||||
box.setWindowTitle(PluginDialog::tr("Unzipping File"));
|
||||
box.setText(PluginDialog::tr("Unzipping \"%1\" to \"%2\".")
|
||||
.arg(src.toUserOutput(), dest.toUserOutput()));
|
||||
box.setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||
box.button(QDialogButtonBox::Ok)->setEnabled(false);
|
||||
box.setCheckBoxVisible(false);
|
||||
box.setDetailedText(
|
||||
PluginDialog::tr("Running %1\nin \"%2\".\n\n", "Running <cmd> in <workingdirectory>")
|
||||
.arg(CommandLine(tool->executable, tool->arguments).toUserOutput(), workingDirectory));
|
||||
@@ -390,8 +392,8 @@ static bool unzip(const FilePath &src, const FilePath &dest)
|
||||
QObject::connect(&process,
|
||||
QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
|
||||
[&box](int, QProcess::ExitStatus) {
|
||||
box.button(QMessageBox::Ok)->setEnabled(true);
|
||||
box.button(QMessageBox::Cancel)->setEnabled(false);
|
||||
box.button(QDialogButtonBox::Ok)->setEnabled(true);
|
||||
box.button(QDialogButtonBox::Cancel)->setEnabled(false);
|
||||
});
|
||||
QObject::connect(&box, &QMessageBox::rejected, &process, [&process] {
|
||||
SynchronousProcess::stopProcess(process);
|
||||
|
Reference in New Issue
Block a user