diff options
author | con <qtc-committer@nokia.com> | 2011-01-17 13:52:14 +0100 |
---|---|---|
committer | con <qtc-committer@nokia.com> | 2011-01-17 13:52:33 +0100 |
commit | edd7224cd69dd270d860674192b150de22aa6017 (patch) | |
tree | 6ff58dc4067546b8e63e817a871880197e228c89 /src/plugins/projectexplorer/runconfiguration.cpp | |
parent | daafa533d6e9d2efbbfdbf97d44ee8edabbaa957 (diff) | |
download | qt-creator-edd7224cd69dd270d860674192b150de22aa6017.tar.gz |
Add "never ask again" option to dialog asking about killing applications
The option is used for the stop button in the application output.
Closing tabs will still ask unconditionally, also if applications would
be killed as a side-effect, e.g. of closing Qt Creator.
The Symbian controls also always ask, with a more descriptive text,
because killing applications might have negative effect on the device in
some cases.
Reviewed-by: Friedemann Kleint
Task-number: QTCREATORBUG-3119
Diffstat (limited to 'src/plugins/projectexplorer/runconfiguration.cpp')
-rw-r--r-- | src/plugins/projectexplorer/runconfiguration.cpp | 61 |
1 files changed, 47 insertions, 14 deletions
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 68f709d2ed..231f56a5cb 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -38,15 +38,18 @@ #include "target.h" #include "buildconfiguration.h" #include "projectexplorerconstants.h" - #include <extensionsystem/pluginmanager.h> -#include <coreplugin/icore.h> + #include <utils/qtcassert.h> +#include <utils/checkablemessagebox.h> + +#include <coreplugin/icore.h> #include <QtCore/QTimer> +#include <QtCore/QSettings> #include <QtGui/QMainWindow> #include <QtGui/QMessageBox> -#include <QtGui/QAbstractButton> +#include <QtGui/QPushButton> #ifdef Q_OS_MAC #include <Carbon/Carbon.h> @@ -320,20 +323,50 @@ QString RunControl::displayName() const return m_displayName; } -bool RunControl::aboutToStop() const +bool RunControl::promptToStop(bool *optionalPrompt) const { QTC_ASSERT(isRunning(), return true;) - QMessageBox messageBox(QMessageBox::Warning, - tr("Application Still Running"), - tr("%1 is still running.").arg(displayName()), - QMessageBox::Cancel | QMessageBox::Yes, - Core::ICore::instance()->mainWindow()); - messageBox.setInformativeText(tr("Force it to quit?")); - messageBox.setDefaultButton(QMessageBox::Yes); - messageBox.button(QMessageBox::Yes)->setText(tr("Force Quit")); - messageBox.button(QMessageBox::Cancel)->setText(tr("Keep Running")); - return messageBox.exec() == QMessageBox::Yes; + if (optionalPrompt && !*optionalPrompt) + return true; + + const QString msg = tr("<html><head/><body><center><i>%1</i> is still running.<center/>" + "<center>Force it to quit?</center></body></html>").arg(displayName()); + return showPromptToStopDialog(tr("Application Still Running"), msg, + tr("Force Quit"), tr("Keep Running"), + optionalPrompt); +} + +// Utility to prompt to terminate application with checkable box. +bool RunControl::showPromptToStopDialog(const QString &title, + const QString &text, + const QString &stopButtonText, + const QString &cancelButtonText, + bool *prompt) const +{ + QTC_ASSERT(isRunning(), return true;) + // Show a question message box where user can uncheck this + // question for this class. + Utils::CheckableMessageBox messageBox(Core::ICore::instance()->mainWindow()); + messageBox.setWindowTitle(title); + messageBox.setText(text); + messageBox.setStandardButtons(QDialogButtonBox::Yes|QDialogButtonBox::Cancel); + if (!stopButtonText.isEmpty()) + messageBox.button(QDialogButtonBox::Yes)->setText(stopButtonText); + if (!cancelButtonText.isEmpty()) + messageBox.button(QDialogButtonBox::Cancel)->setText(cancelButtonText); + messageBox.setDefaultButton(QDialogButtonBox::Yes); + if (prompt) { + messageBox.setCheckBoxText(tr("Do not ask again")); + messageBox.setChecked(false); + } else { + messageBox.setCheckBoxVisible(false); + } + messageBox.exec(); + const bool close = messageBox.clickedStandardButton() == QDialogButtonBox::Yes; + if (close && prompt && messageBox.isChecked()) + *prompt = false; + return close; } bool RunControl::sameRunConfiguration(const RunControl *other) const |