summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/runconfiguration.cpp
diff options
context:
space:
mode:
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