aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2009-06-19 16:34:38 +0200
committerFriedemann Kleint <[email protected]>2009-06-19 16:34:38 +0200
commit2508fa03a09391957933c5d7d83b9ab80cb4ca9e (patch)
tree919369920a429ada9e3f00b5d56e71c7d807ef6c
parente05505613a0c316fe15023766b54b085e67249d2 (diff)
Make the "prompt to submit" setting a per-plugin one.
Provide a checkable message box to be able to turn prompting off when asked.
-rw-r--r--src/libs/utils/checkablemessagebox.cpp150
-rw-r--r--src/libs/utils/checkablemessagebox.h77
-rw-r--r--src/libs/utils/checkablemessagebox.ui154
-rw-r--r--src/libs/utils/utils.pro9
-rw-r--r--src/plugins/git/gitplugin.cpp8
-rw-r--r--src/plugins/git/gitsettings.cpp9
-rw-r--r--src/plugins/git/gitsettings.h1
-rw-r--r--src/plugins/git/settingspage.cpp2
-rw-r--r--src/plugins/git/settingspage.ui9
-rw-r--r--src/plugins/perforce/perforceplugin.cpp10
-rw-r--r--src/plugins/perforce/perforcesettings.cpp29
-rw-r--r--src/plugins/perforce/perforcesettings.h4
-rw-r--r--src/plugins/perforce/settingspage.cpp2
-rw-r--r--src/plugins/perforce/settingspage.ui58
-rw-r--r--src/plugins/subversion/settingspage.cpp2
-rw-r--r--src/plugins/subversion/settingspage.ui40
-rw-r--r--src/plugins/subversion/subversionplugin.cpp5
-rw-r--r--src/plugins/subversion/subversionsettings.cpp9
-rw-r--r--src/plugins/subversion/subversionsettings.h1
-rw-r--r--src/plugins/vcsbase/vcsbasesettings.cpp10
-rw-r--r--src/plugins/vcsbase/vcsbasesettings.h2
-rw-r--r--src/plugins/vcsbase/vcsbasesettingspage.cpp2
-rw-r--r--src/plugins/vcsbase/vcsbasesettingspage.ui7
-rw-r--r--src/plugins/vcsbase/vcsbasesubmiteditor.cpp20
-rw-r--r--src/plugins/vcsbase/vcsbasesubmiteditor.h3
25 files changed, 554 insertions, 69 deletions
diff --git a/src/libs/utils/checkablemessagebox.cpp b/src/libs/utils/checkablemessagebox.cpp
new file mode 100644
index 00000000000..d72bd9e6da4
--- /dev/null
+++ b/src/libs/utils/checkablemessagebox.cpp
@@ -0,0 +1,150 @@
+#include "checkablemessagebox.h"
+#include "ui_checkablemessagebox.h"
+
+#include <QtGui/QPushButton>
+#include <QtCore/QDebug>
+
+namespace Core {
+namespace Utils {
+
+struct CheckableMessageBoxPrivate {
+ CheckableMessageBoxPrivate() : clickedButton(0) {}
+
+ Ui::CheckableMessageBox ui;
+ QAbstractButton *clickedButton;
+};
+
+CheckableMessageBox::CheckableMessageBox(QWidget *parent) :
+ QDialog(parent),
+ m_d(new CheckableMessageBoxPrivate)
+{
+ setModal(true);
+ setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ m_d->ui.setupUi(this);
+ m_d->ui.pixmapLabel->setVisible(false);
+ connect(m_d->ui.buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(m_d->ui.buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+ connect(m_d->ui.buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(slotClicked(QAbstractButton*)));
+}
+
+CheckableMessageBox::~CheckableMessageBox()
+{
+ delete m_d;
+}
+
+void CheckableMessageBox::slotClicked(QAbstractButton *b)
+{
+ m_d->clickedButton = b;
+}
+
+QAbstractButton *CheckableMessageBox::clickedButton() const
+{
+ return m_d->clickedButton;
+}
+
+QDialogButtonBox::StandardButton CheckableMessageBox::clickedStandardButton() const
+{
+ if (m_d->clickedButton)
+ return m_d->ui.buttonBox->standardButton(m_d->clickedButton);
+ return QDialogButtonBox::NoButton;
+}
+
+QString CheckableMessageBox::text() const
+{
+ return m_d->ui.messageLabel->text();
+}
+
+void CheckableMessageBox::setText(const QString &t)
+{
+ m_d->ui.messageLabel->setText(t);
+}
+
+QPixmap CheckableMessageBox::iconPixmap() const
+{
+ if (const QPixmap *p = m_d->ui.pixmapLabel->pixmap())
+ return QPixmap(*p);
+ return QPixmap();
+}
+
+void CheckableMessageBox::setIconPixmap(const QPixmap &p)
+{
+ m_d->ui.pixmapLabel->setPixmap(p);
+ m_d->ui.pixmapLabel->setVisible(!p.isNull());
+}
+
+bool CheckableMessageBox::isChecked() const
+{
+ return m_d->ui.checkBox->isChecked();
+}
+
+void CheckableMessageBox::setChecked(bool s)
+{
+ m_d->ui.checkBox->setChecked(s);
+}
+
+QString CheckableMessageBox::checkBoxText() const
+{
+ return m_d->ui.checkBox->text();
+}
+
+void CheckableMessageBox::setCheckBoxText(const QString &t)
+{
+ m_d->ui.checkBox->setText(t);
+}
+
+QDialogButtonBox::StandardButtons CheckableMessageBox::standardButtons() const
+{
+ return m_d->ui.buttonBox->standardButtons();
+}
+
+void CheckableMessageBox::setStandardButtons(QDialogButtonBox::StandardButtons s)
+{
+ m_d->ui.buttonBox->setStandardButtons(s);
+}
+
+QDialogButtonBox::StandardButton CheckableMessageBox::defaultButton() const
+{
+ foreach (QAbstractButton *b, m_d->ui.buttonBox->buttons())
+ if (QPushButton *pb = qobject_cast<QPushButton *>(b))
+ if (pb->isDefault())
+ return m_d->ui.buttonBox->standardButton(pb);
+ return QDialogButtonBox::NoButton;
+}
+
+void CheckableMessageBox::setDefaultButton(QDialogButtonBox::StandardButton s)
+{
+ if (QPushButton *b = m_d->ui.buttonBox->button(s)) {
+ b->setDefault(true);
+ b->setFocus();
+ }
+}
+
+QDialogButtonBox::StandardButton
+ CheckableMessageBox::question(QWidget *parent,
+ const QString &title,
+ const QString &question,
+ const QString &checkBoxText,
+ bool *checkBoxSetting,
+ QDialogButtonBox::StandardButtons buttons,
+ QDialogButtonBox::StandardButton defaultButton)
+{
+ CheckableMessageBox mb(parent);
+ mb.setWindowTitle(title);
+ mb.setIconPixmap(QMessageBox::standardIcon(QMessageBox::Question));
+ mb.setText(question);
+ mb.setCheckBoxText(checkBoxText);
+ mb.setChecked(*checkBoxSetting);
+ mb.setStandardButtons(buttons);
+ mb.setDefaultButton(defaultButton);
+ mb.exec();
+ *checkBoxSetting = mb.isChecked();
+ return mb.clickedStandardButton();
+}
+
+QMessageBox::StandardButton CheckableMessageBox::dialogButtonBoxToMessageBoxButton(QDialogButtonBox::StandardButton db)
+{
+ return static_cast<QMessageBox::StandardButton>(int(db));
+}
+
+} // namespace Utils
+} // namespace Core
diff --git a/src/libs/utils/checkablemessagebox.h b/src/libs/utils/checkablemessagebox.h
new file mode 100644
index 00000000000..4b57e25fa3b
--- /dev/null
+++ b/src/libs/utils/checkablemessagebox.h
@@ -0,0 +1,77 @@
+#ifndef CHECKABLEMESSAGEBOX_H
+#define CHECKABLEMESSAGEBOX_H
+
+#include "utils_global.h"
+
+#include <QtGui/QDialogButtonBox>
+#include <QtGui/QMessageBox>
+#include <QtGui/QDialog>
+
+namespace Core {
+namespace Utils {
+
+struct CheckableMessageBoxPrivate;
+
+/* A messagebox suitable for questions with a
+ * "Do not ask me again" checkbox. Emulates the QMessageBox API with
+ * static conveniences. */
+
+class QTCREATOR_UTILS_EXPORT CheckableMessageBox : public QDialog
+{
+ Q_OBJECT
+ Q_PROPERTY(QString text READ text WRITE setText)
+ Q_PROPERTY(QPixmap iconPixmap READ iconPixmap WRITE setIconPixmap)
+ Q_PROPERTY(bool isChecked READ isChecked WRITE setChecked)
+ Q_PROPERTY(QString checkBoxText READ checkBoxText WRITE setCheckBoxText)
+ Q_PROPERTY(QDialogButtonBox::StandardButtons buttons READ standardButtons WRITE setStandardButtons)
+ Q_PROPERTY(QDialogButtonBox::StandardButton defaultButton READ defaultButton WRITE setDefaultButton)
+public:
+ explicit CheckableMessageBox(QWidget *parent);
+ virtual ~CheckableMessageBox();
+
+ static QDialogButtonBox::StandardButton
+ question(QWidget *parent,
+ const QString &title,
+ const QString &question,
+ const QString &checkBoxText,
+ bool *checkBoxSetting,
+ QDialogButtonBox::StandardButtons buttons = QDialogButtonBox::Yes|QDialogButtonBox::No,
+ QDialogButtonBox::StandardButton defaultButton = QDialogButtonBox::No);
+
+ QString text() const;
+ void setText(const QString &);
+
+ bool isChecked() const;
+ void setChecked(bool s);
+
+ QString checkBoxText() const;
+ void setCheckBoxText(const QString &);
+
+ QDialogButtonBox::StandardButtons standardButtons() const;
+ void setStandardButtons(QDialogButtonBox::StandardButtons s);
+
+ QDialogButtonBox::StandardButton defaultButton() const;
+ void setDefaultButton(QDialogButtonBox::StandardButton s);
+
+ // see static QMessageBox::standardPixmap()
+ QPixmap iconPixmap() const;
+ void setIconPixmap (const QPixmap &p);
+
+ // Query the result
+ QAbstractButton *clickedButton() const;
+ QDialogButtonBox::StandardButton clickedStandardButton() const;
+
+ // Conversion convenience
+ static QMessageBox::StandardButton dialogButtonBoxToMessageBoxButton(QDialogButtonBox::StandardButton);
+
+private slots:
+ void slotClicked(QAbstractButton *b);
+
+private:
+ CheckableMessageBoxPrivate *m_d;
+};
+
+} // namespace Utils
+} // namespace Core
+
+#endif // CHECKABLEMESSAGEBOX_H
diff --git a/src/libs/utils/checkablemessagebox.ui b/src/libs/utils/checkablemessagebox.ui
new file mode 100644
index 00000000000..c5f6d7265b5
--- /dev/null
+++ b/src/libs/utils/checkablemessagebox.ui
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Core::Utils::CheckableMessageBox</class>
+ <widget class="QDialog" name="Core::Utils::CheckableMessageBox">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>195</width>
+ <height>107</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Dialog</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="pixmapLabel"/>
+ </item>
+ <item>
+ <spacer name="pixmapSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>0</width>
+ <height>5</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="messageLabel">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="checkBoxLeftSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox">
+ <property name="text">
+ <string>CheckBox</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="checkBoxRightSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="buttonSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Minimum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>0</width>
+ <height>5</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ <property name="centerButtons">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>Core::Utils::CheckableMessageBox</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>Core::Utils::CheckableMessageBox</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/libs/utils/utils.pro b/src/libs/utils/utils.pro
index a35874026bc..da5191635fa 100644
--- a/src/libs/utils/utils.pro
+++ b/src/libs/utils/utils.pro
@@ -28,7 +28,8 @@ SOURCES += reloadpromptutils.cpp \
consoleprocess.cpp \
uncommentselection.cpp \
parameteraction.cpp \
- treewidgetcolumnstretcher.cpp
+ treewidgetcolumnstretcher.cpp \
+ checkablemessagebox.cpp
win32 {
SOURCES += abstractprocess_win.cpp \
consoleprocess_win.cpp \
@@ -63,9 +64,11 @@ HEADERS += utils_global.h \
submitfieldwidget.h \
uncommentselection.h \
parameteraction.h \
- treewidgetcolumnstretcher.h
+ treewidgetcolumnstretcher.h \
+ checkablemessagebox.h
FORMS += filewizardpage.ui \
projectintropage.ui \
newclasswidget.ui \
- submiteditorwidget.ui
+ submiteditorwidget.ui \
+ checkablemessagebox.ui
RESOURCES += utils.qrc
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 595090085cb..3919232ac0a 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -690,12 +690,14 @@ bool GitPlugin::editorAboutToClose(Core::IEditor *iEditor)
return true;
// Prompt user. Force a prompt unless submit was actually invoked (that
// is, the editor was closed or shutdown).
+ GitSettings settings = m_gitClient->settings();
+ const bool wantedPrompt = settings.promptToSubmit;
const VCSBase::VCSBaseSubmitEditor::PromptSubmitResult answer =
editor->promptSubmit(tr("Closing git editor"),
tr("Do you want to commit the change?"),
tr("The commit message check failed. Do you want to commit the change?"),
- !m_submitActionTriggered);
- m_submitActionTriggered = false;
+ &settings.promptToSubmit, !m_submitActionTriggered);
+ m_submitActionTriggered = false;
switch (answer) {
case VCSBase::VCSBaseSubmitEditor::SubmitCanceled:
return false; // Keep editing and change file
@@ -705,6 +707,8 @@ bool GitPlugin::editorAboutToClose(Core::IEditor *iEditor)
default:
break;
}
+ if (wantedPrompt != settings.promptToSubmit)
+ m_gitClient->setSettings(settings);
// Go ahead!
const QStringList fileList = editor->checkedFiles();
if (Git::Constants::debug)
diff --git a/src/plugins/git/gitsettings.cpp b/src/plugins/git/gitsettings.cpp
index 460e5537df1..f35bf5b7d31 100644
--- a/src/plugins/git/gitsettings.cpp
+++ b/src/plugins/git/gitsettings.cpp
@@ -41,6 +41,7 @@ static const char *sysEnvKeyC = "SysEnv";
static const char *pathKeyC = "Path";
static const char *logCountKeyC = "LogCount";
static const char *timeoutKeyC = "TimeOut";
+static const char *promptToSubmitKeyC = "PromptForSubmit";
enum { defaultLogCount = 10 , defaultTimeOut = 30};
@@ -50,7 +51,8 @@ namespace Internal {
GitSettings::GitSettings() :
adoptPath(false),
logCount(defaultLogCount),
- timeout(defaultTimeOut)
+ timeout(defaultTimeOut),
+ promptToSubmit(true)
{
}
@@ -61,6 +63,7 @@ void GitSettings::fromSettings(QSettings *settings)
path = settings->value(QLatin1String(pathKeyC), QString()).toString();
logCount = settings->value(QLatin1String(logCountKeyC), defaultLogCount).toInt();
timeout = settings->value(QLatin1String(timeoutKeyC), defaultTimeOut).toInt();
+ promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
settings->endGroup();
}
@@ -71,12 +74,14 @@ void GitSettings::toSettings(QSettings *settings) const
settings->setValue(QLatin1String(pathKeyC), path);
settings->setValue(QLatin1String(logCountKeyC), logCount);
settings->setValue(QLatin1String(timeoutKeyC), timeout);
+ settings->setValue(QLatin1String(promptToSubmitKeyC), promptToSubmit);
settings->endGroup();
}
bool GitSettings::equals(const GitSettings &s) const
{
- return adoptPath == s.adoptPath && path == s.path && logCount == s.logCount && timeout == s.timeout;
+ return adoptPath == s.adoptPath && path == s.path && logCount == s.logCount
+ && timeout == s.timeout && promptToSubmit == s.promptToSubmit;
}
QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const
diff --git a/src/plugins/git/gitsettings.h b/src/plugins/git/gitsettings.h
index 3bd14d458fa..666e1483e3a 100644
--- a/src/plugins/git/gitsettings.h
+++ b/src/plugins/git/gitsettings.h
@@ -55,6 +55,7 @@ struct GitSettings
QString path;
int logCount;
int timeout;
+ bool promptToSubmit;
};
inline bool operator==(const GitSettings &p1, const GitSettings &p2)
diff --git a/src/plugins/git/settingspage.cpp b/src/plugins/git/settingspage.cpp
index ed192142021..2167bafa7ff 100644
--- a/src/plugins/git/settingspage.cpp
+++ b/src/plugins/git/settingspage.cpp
@@ -54,6 +54,7 @@ GitSettings SettingsPageWidget::settings() const
rc.adoptPath = m_ui.environmentGroupBox->isChecked() && !rc.path.isEmpty();
rc.logCount = m_ui.logCountSpinBox->value();
rc.timeout = m_ui.timeoutSpinBox->value();
+ rc.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
return rc;
}
@@ -63,6 +64,7 @@ void SettingsPageWidget::setSettings(const GitSettings &s)
m_ui.pathLineEdit->setText(s.path);
m_ui.logCountSpinBox->setValue(s.logCount);
m_ui.timeoutSpinBox->setValue(s.timeout);
+ m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit);
}
void SettingsPageWidget::setSystemPath()
diff --git a/src/plugins/git/settingspage.ui b/src/plugins/git/settingspage.ui
index 02f3671a1df..13884c70d1f 100644
--- a/src/plugins/git/settingspage.ui
+++ b/src/plugins/git/settingspage.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>403</width>
+ <width>409</width>
<height>251</height>
</rect>
</property>
@@ -104,6 +104,13 @@
</property>
</widget>
</item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QCheckBox" name="promptToSubmitCheckBox">
+ <property name="text">
+ <string>Prompt to submit</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 92ac232b832..f40ab02a31e 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -930,20 +930,26 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
if (!perforceEditor)
return true;
QFileInfo editorFile(fileIFace->fileName());
- QFileInfo changeFile(m_changeTmpFile->fileName());
+ QFileInfo changeFile(m_changeTmpFile->fileName());
if (editorFile.absoluteFilePath() == changeFile.absoluteFilePath()) {
// Prompt the user. Force a prompt unless submit was actually invoked (that
// is, the editor was closed or shutdown).
+ bool wantsPrompt = m_settings.promptToSubmit();
const VCSBase::VCSBaseSubmitEditor::PromptSubmitResult answer =
perforceEditor->promptSubmit(tr("Closing p4 Editor"),
tr("Do you want to submit this change list?"),
tr("The commit message check failed. Do you want to submit this change list"),
- !m_submitActionTriggered);
+ &wantsPrompt, !m_submitActionTriggered);
m_submitActionTriggered = false;
if (answer == VCSBase::VCSBaseSubmitEditor::SubmitCanceled)
return false;
+ // Set without triggering the checking mechanism
+ if (wantsPrompt != m_settings.promptToSubmit()) {
+ m_settings.setPromptToSubmit(wantsPrompt);
+ m_settings.toSettings(Core::ICore::instance()->settings());
+ }
core->fileManager()->blockFileChange(fileIFace);
fileIFace->save();
core->fileManager()->unblockFileChange(fileIFace);
diff --git a/src/plugins/perforce/perforcesettings.cpp b/src/plugins/perforce/perforcesettings.cpp
index 78854dff4ca..8ee12f218bd 100644
--- a/src/plugins/perforce/perforcesettings.cpp
+++ b/src/plugins/perforce/perforcesettings.cpp
@@ -44,6 +44,7 @@ static const char *defaultKeyC = "Default";
static const char *portKeyC = "Port";
static const char *clientKeyC = "Client";
static const char *userKeyC = "User";
+static const char *promptToSubmitKeyC = "PromptForSubmit";
static QString defaultCommand()
{
@@ -59,7 +60,8 @@ namespace Perforce {
namespace Internal {
Settings::Settings() :
- defaultEnv(true)
+ defaultEnv(true),
+ promptToSubmit(true)
{
}
@@ -67,7 +69,8 @@ bool Settings::equals(const Settings &rhs) const
{
return defaultEnv == rhs.defaultEnv
&& p4Command == rhs.p4Command && p4Port == rhs.p4Port
- && p4Client == rhs.p4Client && p4User == rhs.p4User;
+ && p4Client == rhs.p4Client && p4User == rhs.p4User
+ && promptToSubmit == rhs.promptToSubmit;
};
QStringList Settings::basicP4Args() const
@@ -188,6 +191,7 @@ void PerforceSettings::fromSettings(QSettings *settings)
m_settings.p4Port = settings->value(QLatin1String(portKeyC), QString()).toString();
m_settings.p4Client = settings->value(QLatin1String(clientKeyC), QString()).toString();
m_settings.p4User = settings->value(QLatin1String(userKeyC), QString()).toString();
+ m_settings.promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
settings->endGroup();
m_mutex.unlock();
@@ -198,11 +202,12 @@ void PerforceSettings::toSettings(QSettings *settings) const
{
m_mutex.lock();
settings->beginGroup(QLatin1String(groupC));
- settings->setValue(commandKeyC, m_settings.p4Command);
- settings->setValue(defaultKeyC, m_settings.defaultEnv);
- settings->setValue(portKeyC, m_settings.p4Port);
- settings->setValue(clientKeyC, m_settings.p4Client);
- settings->setValue(userKeyC, m_settings.p4User);
+ settings->setValue(QLatin1String(commandKeyC), m_settings.p4Command);
+ settings->setValue(QLatin1String(defaultKeyC), m_settings.defaultEnv);
+ settings->setValue(QLatin1String(portKeyC), m_settings.p4Port);
+ settings->setValue(QLatin1String(clientKeyC), m_settings.p4Client);
+ settings->setValue(QLatin1String(userKeyC), m_settings.p4User);
+ settings->setValue(QLatin1String(promptToSubmitKeyC), m_settings.promptToSubmit);
settings->endGroup();
m_mutex.unlock();
}
@@ -249,6 +254,16 @@ bool PerforceSettings::defaultEnv() const
return m_settings.defaultEnv;
}
+bool PerforceSettings::promptToSubmit() const
+{
+ return m_settings.promptToSubmit;
+}
+
+void PerforceSettings::setPromptToSubmit(bool p)
+{
+ m_settings.promptToSubmit = p;
+}
+
QString PerforceSettings::errorString() const
{
m_mutex.lock();
diff --git a/src/plugins/perforce/perforcesettings.h b/src/plugins/perforce/perforcesettings.h
index 8eabb32cddc..ab02ae9c2ad 100644
--- a/src/plugins/perforce/perforcesettings.h
+++ b/src/plugins/perforce/perforcesettings.h
@@ -54,6 +54,7 @@ struct Settings {
QString p4User;
QString errorString;
bool defaultEnv;
+ bool promptToSubmit;
};
inline bool operator==(const Settings &s1, const Settings &s2) { return s1.equals(s2); }
@@ -81,6 +82,9 @@ public:
QString p4Client() const;
QString p4User() const;
bool defaultEnv() const;
+ bool promptToSubmit() const;
+ void setPromptToSubmit(bool p);
+
QStringList basicP4Args() const;
// Error code of last check
diff --git a/src/plugins/perforce/settingspage.cpp b/src/plugins/perforce/settingspage.cpp
index cc0c866786a..126a6916834 100644
--- a/src/plugins/perforce/settingspage.cpp
+++ b/src/plugins/perforce/settingspage.cpp
@@ -70,6 +70,7 @@ Settings SettingsPageWidget::settings() const
settings.p4Port = m_ui.portLineEdit->text();
settings.p4User = m_ui.userLineEdit->text();
settings.p4Client= m_ui.clientLineEdit->text();
+ settings.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
return settings;
}
@@ -80,6 +81,7 @@ void SettingsPageWidget::setSettings(const PerforceSettings &s)
m_ui.portLineEdit->setText(s.p4Port());
m_ui.clientLineEdit->setText(s.p4Client());
m_ui.userLineEdit->setText(s.p4User());
+ m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit());
const QString errorString = s.errorString();
setStatusText(errorString.isEmpty(), errorString);
}
diff --git a/src/plugins/perforce/settingspage.ui b/src/plugins/perforce/settingspage.ui
index 4ea88a436dd..5eccd25c950 100644
--- a/src/plugins/perforce/settingspage.ui
+++ b/src/plugins/perforce/settingspage.ui
@@ -6,39 +6,63 @@
<rect>
<x>0</x>
<y>0</y>
- <width>408</width>
+ <width>423</width>
<height>463</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <layout class="QHBoxLayout">
- <property name="spacing">
- <number>6</number>
+ <layout class="QFormLayout" name="formLayout_2">
+ <item row="0" column="0" colspan="2">
+ <widget class="QCheckBox" name="promptToSubmitCheckBox">
+ <property name="text">
+ <string>Prompt to submit</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
- <property name="margin">
- <number>0</number>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
</property>
- <item>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <item row="0" column="0">
<widget class="QLabel" name="commandLabel">
<property name="text">
<string>P4 Command:</string>
</property>
</widget>
</item>
- <item>
- <widget class="Core::Utils::PathChooser" name="pathChooser" native="true"/>
+ <item row="0" column="1">
+ <widget class="Core::Utils::PathChooser" name="pathChooser"/>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QCheckBox" name="defaultCheckBox">
+ <property name="text">
+ <string>Use default P4 environment variables</string>
+ </property>
+ </widget>
</item>
</layout>
</item>
<item>
- <widget class="QCheckBox" name="defaultCheckBox">
- <property name="text">
- <string>Use default P4 environment variables</string>
- </property>
- </widget>
- </item>
- <item>
<widget class="QGroupBox" name="groupBox">
<property name="enabled">
<bool>true</bool>
@@ -129,7 +153,7 @@
<item>
<widget class="QLabel" name="errorLabel">
<property name="text">
- <string extracomment="Placeholder" notr="true">errorLabel: blah blubb</string>
+ <string notr="true" extracomment="Placeholder">errorLabel: blah blubb</string>
</property>
</widget>
</item>
diff --git a/src/plugins/subversion/settingspage.cpp b/src/plugins/subversion/settingspage.cpp
index c39e54597dd..1b0a64d2336 100644
--- a/src/plugins/subversion/settingspage.cpp
+++ b/src/plugins/subversion/settingspage.cpp
@@ -59,6 +59,7 @@ SubversionSettings SettingsPageWidget::settings() const
rc.password = m_ui.passwordLineEdit->text();
if (rc.user.isEmpty())
rc.useAuthentication = false;
+ rc.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
return rc;
}
@@ -68,6 +69,7 @@ void SettingsPageWidget::setSettings(const SubversionSettings &s)
m_ui.usernameLineEdit->setText(s.user);
m_ui.passwordLineEdit->setText(s.password);
m_ui.userGroupBox->setChecked(s.useAuthentication);
+ m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit);
}
SettingsPage::SettingsPage()
diff --git a/src/plugins/subversion/settingspage.ui b/src/plugins/subversion/settingspage.ui
index 007026bab86..b4b8d93b7e1 100644
--- a/src/plugins/subversion/settingspage.ui
+++ b/src/plugins/subversion/settingspage.ui
@@ -6,30 +6,54 @@
<rect>
<x>0</x>
<y>0</y>
- <width>427</width>
- <height>280</height>
+ <width>575</width>
+ <height>437</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <layout class="QHBoxLayout" name="commandHBox">
- <property name="spacing">
- <number>6</number>
+ <layout class="QFormLayout" name="formLayout_3">
+ <item row="0" column="0" colspan="2">
+ <widget class="QCheckBox" name="promptToSubmitCheckBox">
+ <property name="text">
+ <string>Prompt to submit</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="topverticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QFormLayout" name="formLayout_2">
<property name="margin">
<number>0</number>
</property>
- <item>
+ <item row="0" column="0">
<widget class="QLabel" name="commandLabel">
<property name="text">
<string>Subversion Command:</string>
</property>
</widget>
</item>
- <item>
- <widget class="Core::Utils::PathChooser" name="pathChooser" native="true"/>
+ <item row="0" column="1">
+ <widget class="Core::Utils::PathChooser" name="pathChooser"/>
</item>
</layout>
</item>
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 1c794e84a75..a9101e4d905 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -480,11 +480,12 @@ bool SubversionPlugin::editorAboutToClose(Core::IEditor *iEditor)
// Prompt user. Force a prompt unless submit was actually invoked (that
// is, the editor was closed or shutdown).
+ SubversionSettings newSettings = m_settings;
const VCSBase::VCSBaseSubmitEditor::PromptSubmitResult answer =
editor->promptSubmit(tr("Closing Subversion Editor"),
tr("Do you want to commit the change?"),
tr("The commit message check failed. Do you want to commit the change?"),
- !m_submitActionTriggered);
+ &newSettings.promptToSubmit, !m_submitActionTriggered);
m_submitActionTriggered = false;
switch (answer) {
case VCSBase::VCSBaseSubmitEditor::SubmitCanceled:
@@ -495,7 +496,7 @@ bool SubversionPlugin::editorAboutToClose(Core::IEditor *iEditor)
default:
break;
}
-
+ setSettings(newSettings); // in case someone turned prompting off
const QStringList fileList = editor->checkedFiles();
bool closeEditor = true;
if (!fileList.empty()) {
diff --git a/src/plugins/subversion/subversionsettings.cpp b/src/plugins/subversion/subversionsettings.cpp
index 277238cd066..8df4853667f 100644
--- a/src/plugins/subversion/subversionsettings.cpp
+++ b/src/plugins/subversion/subversionsettings.cpp
@@ -40,6 +40,7 @@ static const char *authenticationKeyC = "Authentication";
static const char *userNameOptionC = "--username";
static const char *passwordOptionC = "--password";
+static const char *promptToSubmitKeyC = "PromptForSubmit";
static QString defaultCommand()
{
@@ -55,7 +56,8 @@ using namespace Subversion::Internal;
SubversionSettings::SubversionSettings() :
svnCommand(defaultCommand()),
- useAuthentication(false)
+ useAuthentication(false),
+ promptToSubmit(true)
{
}
@@ -66,6 +68,7 @@ void SubversionSettings::fromSettings(QSettings *settings)
useAuthentication = settings->value(QLatin1String(authenticationKeyC), QVariant(false)).toBool();
user = settings->value(QLatin1String(userKeyC), QString()).toString();
password = settings->value(QLatin1String(passwordKeyC), QString()).toString();
+ promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
settings->endGroup();
}
@@ -76,6 +79,7 @@ void SubversionSettings::toSettings(QSettings *settings) const
settings->setValue(QLatin1String(authenticationKeyC), QVariant(useAuthentication));
settings->setValue(QLatin1String(userKeyC), user);
settings->setValue(QLatin1String(passwordKeyC), password);
+ settings->setValue(QLatin1String(promptToSubmitKeyC), promptToSubmit);
settings->endGroup();
}
@@ -84,7 +88,8 @@ bool SubversionSettings::equals(const SubversionSettings &s) const
return svnCommand == s.svnCommand
&& useAuthentication == s.useAuthentication
&& user == s.user
- && password == s.password;
+ && password == s.password
+ && promptToSubmit == s.promptToSubmit;
}
QStringList SubversionSettings::addOptions(const QStringList &args) const
diff --git a/src/plugins/subversion/subversionsettings.h b/src/plugins/subversion/subversionsettings.h
index eb00c49dcc8..963c2a5fa43 100644
--- a/src/plugins/subversion/subversionsettings.h
+++ b/src/plugins/subversion/subversionsettings.h
@@ -59,6 +59,7 @@ struct SubversionSettings
bool useAuthentication;
QString user;
QString password;
+ bool promptToSubmit;
};
inline bool operator==(const SubversionSettings &p1, const SubversionSettings &p2)
diff --git a/src/plugins/vcsbase/vcsbasesettings.cpp b/src/plugins/vcsbase/vcsbasesettings.cpp
index 9036262704f..c40561173c1 100644
--- a/src/plugins/vcsbase/vcsbasesettings.cpp
+++ b/src/plugins/vcsbase/vcsbasesettings.cpp
@@ -35,7 +35,6 @@
static const char *settingsGroupC = "VCS";
static const char *nickNameMailMapKeyC = "NickNameMailMap";
static const char *nickNameFieldListFileKeyC = "NickNameFieldListFile";
-static const char *promptForSubmitKeyC = "PromptForSubmit";
static const char *submitMessageCheckScriptKeyC = "SubmitMessageCheckScript";
static const char *lineWrapKeyC = "LineWrap";
static const char *lineWrapWidthKeyC = "LineWrapWidth";
@@ -47,7 +46,6 @@ namespace VCSBase {
namespace Internal {
VCSBaseSettings::VCSBaseSettings() :
- promptForSubmit(true),
lineWrap(lineWrapDefault),
lineWrapWidth(lineWrapWidthDefault)
{
@@ -59,7 +57,6 @@ void VCSBaseSettings::toSettings(QSettings *s) const
s->setValue(QLatin1String(nickNameMailMapKeyC), nickNameMailMap);
s->setValue(QLatin1String(nickNameFieldListFileKeyC), nickNameFieldListFile);
s->setValue(QLatin1String(submitMessageCheckScriptKeyC), submitMessageCheckScript);
- s->setValue(QLatin1String(promptForSubmitKeyC), promptForSubmit);
s->setValue(QLatin1String(lineWrapKeyC), lineWrap);
s->setValue(QLatin1String(lineWrapWidthKeyC), lineWrapWidth);
s->endGroup();
@@ -71,7 +68,6 @@ void VCSBaseSettings::fromSettings(QSettings *s)
nickNameMailMap = s->value(QLatin1String(nickNameMailMapKeyC), QString()).toString();
nickNameFieldListFile = s->value(QLatin1String(nickNameFieldListFileKeyC), QString()).toString();
submitMessageCheckScript = s->value(QLatin1String(submitMessageCheckScriptKeyC), QString()).toString();
- promptForSubmit = s->value(QLatin1String(promptForSubmitKeyC), QVariant(true)).toBool();
lineWrap = s->value(QLatin1String(lineWrapKeyC), lineWrapDefault).toBool();
lineWrapWidth = s->value(QLatin1String(lineWrapWidthKeyC), lineWrapWidthDefault).toInt();
s->endGroup();
@@ -79,8 +75,7 @@ void VCSBaseSettings::fromSettings(QSettings *s)
bool VCSBaseSettings::equals(const VCSBaseSettings &rhs) const
{
- return promptForSubmit == rhs.promptForSubmit
- && lineWrap == rhs.lineWrap
+ return lineWrap == rhs.lineWrap
&& lineWrapWidth == rhs.lineWrapWidth
&& nickNameMailMap == rhs.nickNameMailMap
&& nickNameFieldListFile == rhs.nickNameFieldListFile
@@ -89,8 +84,7 @@ bool VCSBaseSettings::equals(const VCSBaseSettings &rhs) const
QDebug operator<<(QDebug d,const VCSBaseSettings& s)
{
- d.nospace() << "promptForSubmit=" << s.promptForSubmit
- << " lineWrap=" << s.lineWrap
+ d.nospace() << " lineWrap=" << s.lineWrap
<< " lineWrapWidth=" << s.lineWrapWidth
<< " nickNameMailMap='" << s.nickNameMailMap
<< "' nickNameFieldListFile='" << s.nickNameFieldListFile
diff --git a/src/plugins/vcsbase/vcsbasesettings.h b/src/plugins/vcsbase/vcsbasesettings.h
index fcf6f54df76..7f7d36328cd 100644
--- a/src/plugins/vcsbase/vcsbasesettings.h
+++ b/src/plugins/vcsbase/vcsbasesettings.h
@@ -45,8 +45,6 @@ namespace Internal {
struct VCSBaseSettings {
VCSBaseSettings();
- bool promptForSubmit;
-
QString nickNameMailMap;
QString nickNameFieldListFile;
diff --git a/src/plugins/vcsbase/vcsbasesettingspage.cpp b/src/plugins/vcsbase/vcsbasesettingspage.cpp
index 24782d9e0d7..bfa6f8891be 100644
--- a/src/plugins/vcsbase/vcsbasesettingspage.cpp
+++ b/src/plugins/vcsbase/vcsbasesettingspage.cpp
@@ -66,7 +66,6 @@ VCSBaseSettings VCSBaseSettingsWidget::settings() const
rc.nickNameMailMap = m_ui->nickNameMailMapChooser->path();
rc.nickNameFieldListFile = m_ui->nickNameFieldsFileChooser->path();
rc.submitMessageCheckScript = m_ui->submitMessageCheckScriptChooser->path();
- rc.promptForSubmit = m_ui->promptForSubmitCheckBox->isChecked();
rc.lineWrap= m_ui->lineWrapCheckBox->isChecked();
rc.lineWrapWidth = m_ui->lineWrapSpinBox->value();
return rc;
@@ -77,7 +76,6 @@ void VCSBaseSettingsWidget::setSettings(const VCSBaseSettings &s)
m_ui->nickNameMailMapChooser->setPath(s.nickNameMailMap);
m_ui->nickNameFieldsFileChooser->setPath(s.nickNameFieldListFile);
m_ui->submitMessageCheckScriptChooser->setPath(s.submitMessageCheckScript);
- m_ui->promptForSubmitCheckBox->setChecked(s.promptForSubmit);
m_ui->lineWrapCheckBox->setChecked(s.lineWrap);
m_ui->lineWrapSpinBox->setValue(s.lineWrapWidth);
}
diff --git a/src/plugins/vcsbase/vcsbasesettingspage.ui b/src/plugins/vcsbase/vcsbasesettingspage.ui
index 50aa9cf94bd..b4c7e233160 100644
--- a/src/plugins/vcsbase/vcsbasesettingspage.ui
+++ b/src/plugins/vcsbase/vcsbasesettingspage.ui
@@ -22,13 +22,6 @@
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <widget class="QCheckBox" name="promptForSubmitCheckBox">
- <property name="text">
- <string>Prompt to submit</string>
- </property>
- </widget>
- </item>
- <item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="lineWrapCheckBox">
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index b54b1442480..05cb5708473 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -40,6 +40,7 @@
#include <coreplugin/uniqueidmanager.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <utils/submiteditorwidget.h>
+#include <utils/checkablemessagebox.h>
#include <utils/submitfieldwidget.h>
#include <find/basetextfind.h>
#include <texteditor/fontsettings.h>
@@ -433,12 +434,13 @@ VCSBaseSubmitEditor::PromptSubmitResult
VCSBaseSubmitEditor::promptSubmit(const QString &title,
const QString &question,
const QString &checkFailureQuestion,
+ bool *promptSetting,
bool forcePrompt) const
{
QString errorMessage;
QMessageBox::StandardButton answer = QMessageBox::Yes;
- const bool prompt = forcePrompt || Internal::VCSBasePlugin::instance()->settings().promptForSubmit;
+ const bool prompt = forcePrompt || *promptSetting;
QWidget *parent = Core::ICore::instance()->mainWindow();
// Pop up a message depending on whether the check succeeded and the
@@ -446,9 +448,19 @@ VCSBaseSubmitEditor::PromptSubmitResult
if (checkSubmitMessage(&errorMessage)) {
// Check ok, do prompt?
if (prompt) {
- answer = QMessageBox::question(parent, title, question,
- QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,
- QMessageBox::Yes);
+ // Provide check box to turn off prompt ONLY if it was not forced
+ if (*promptSetting && !forcePrompt) {
+ const QDialogButtonBox::StandardButton danswer =
+ Core::Utils::CheckableMessageBox::question(parent, title, question,
+ tr("Prompt to submit"), promptSetting,
+ QDialogButtonBox::Yes|QDialogButtonBox::No|QDialogButtonBox::Cancel,
+ QDialogButtonBox::Yes);
+ answer = Core::Utils::CheckableMessageBox::dialogButtonBoxToMessageBoxButton(danswer);
+ } else {
+ answer = QMessageBox::question(parent, title, question,
+ QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,
+ QMessageBox::Yes);
+ }
}
} else {
// Check failed.
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 7bade2dd334..a43a35befae 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -112,9 +112,12 @@ public:
// Runs checks on the message and prompts according to configuration.
// Force prompt should be true if it is invoked by closing an editor
// as opposed to invoking the "Submit" button.
+ // 'promptSetting' points to a bool variable containing the plugin's
+ // prompt setting. The user can uncheck it from the message box.
enum PromptSubmitResult { SubmitConfirmed, SubmitCanceled, SubmitDiscarded };
PromptSubmitResult promptSubmit(const QString &title, const QString &question,
const QString &checkFailureQuestion,
+ bool *promptSetting,
bool forcePrompt = false) const;
int fileNameColumn() const;