summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/runconfiguration.cpp
diff options
context:
space:
mode:
authorcon <qtc-committer@nokia.com>2011-01-17 13:52:14 +0100
committercon <qtc-committer@nokia.com>2011-01-17 13:52:33 +0100
commitedd7224cd69dd270d860674192b150de22aa6017 (patch)
tree6ff58dc4067546b8e63e817a871880197e228c89 /src/plugins/projectexplorer/runconfiguration.cpp
parentdaafa533d6e9d2efbbfdbf97d44ee8edabbaa957 (diff)
downloadqt-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.cpp61
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