Commit a96cc1a3 authored by Friedemann Kleint's avatar Friedemann Kleint
Browse files

VCS[Perforce]: Add a setting to automatically open files

when attempting to save a file under Perforce.

Reviewed-by: con
Task-number: QTCREATORBUG-1823
parent 795ae72e
......@@ -1389,13 +1389,22 @@ EditorManager::ReadOnlyAction
QWidget *parent,
bool displaySaveAsButton)
{
// Version Control: If automatic open is desired, open right away.
bool promptVCS = false;
if (versionControl && versionControl->supportsOperation(IVersionControl::OpenOperation)) {
if (versionControl->settingsFlags() & IVersionControl::AutoOpen)
return RO_OpenVCS;
promptVCS = true;
}
// Create message box.
QMessageBox msgBox(QMessageBox::Question, tr("File is Read Only"),
tr("The file %1 is read only.").arg(QDir::toNativeSeparators(fileName)),
tr("The file <i>%1</i> is read only.").arg(QDir::toNativeSeparators(fileName)),
QMessageBox::Cancel, parent);
QPushButton *sccButton = 0;
if (versionControl && versionControl->supportsOperation(IVersionControl::OpenOperation))
sccButton = msgBox.addButton(tr("Open with VCS (%1)").arg(versionControl->displayName()), QMessageBox::AcceptRole);
QPushButton *vcsButton = 0;
if (promptVCS)
vcsButton = msgBox.addButton(tr("Open with VCS (%1)").arg(versionControl->displayName()), QMessageBox::AcceptRole);
QPushButton *makeWritableButton = msgBox.addButton(tr("Make writable"), QMessageBox::AcceptRole);
......@@ -1403,11 +1412,11 @@ EditorManager::ReadOnlyAction
if (displaySaveAsButton)
saveAsButton = msgBox.addButton(tr("Save as ..."), QMessageBox::ActionRole);
msgBox.setDefaultButton(sccButton ? sccButton : makeWritableButton);
msgBox.setDefaultButton(vcsButton ? vcsButton : makeWritableButton);
msgBox.exec();
QAbstractButton *clickedButton = msgBox.clickedButton();
if (clickedButton == sccButton)
if (clickedButton == vcsButton)
return RO_OpenVCS;
if (clickedButton == makeWritableButton)
return RO_MakeWriteable;
......
......@@ -34,13 +34,20 @@
#include <QtCore/QObject>
#include <QtCore/QString>
#include <QtCore/QFlags>
namespace Core {
class CORE_EXPORT IVersionControl : public QObject
{
Q_OBJECT
Q_ENUMS(SettingsFlag Operation)
public:
enum SettingsFlag {
AutoOpen = 0x1
};
Q_DECLARE_FLAGS(SettingsFlags, SettingsFlag)
enum Operation {
AddOperation, DeleteOperation, OpenOperation, MoveOperation,
CreateRepositoryOperation,
......@@ -76,6 +83,12 @@ public:
*/
virtual bool vcsOpen(const QString &fileName) = 0;
/*!
* Returns settings.
*/
virtual SettingsFlags settingsFlags() const { return 0; }
/*!
* Called after a file has been added to a project If the version control
* needs to know which files it needs to track you should reimplement this
......@@ -137,6 +150,8 @@ signals:
// virtual bool sccManaged(const QString &filename) = 0;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(Core::IVersionControl::SettingsFlags)
} // namespace Core
#endif // IVERSIONCONTROL_H
......@@ -46,6 +46,7 @@ static const char *portKeyC = "Port";
static const char *clientKeyC = "Client";
static const char *userKeyC = "User";
static const char *promptToSubmitKeyC = "PromptForSubmit";
static const char *autoOpenKeyC = "PromptToOpen";
static const char *timeOutKeyC = "TimeOut";
static const char *logCountKeyC = "LogCount";
......@@ -68,7 +69,8 @@ Settings::Settings() :
logCount(defaultLogCount),
defaultEnv(true),
timeOutS(defaultTimeOutS),
promptToSubmit(true)
promptToSubmit(true),
autoOpen(true)
{
}
......@@ -78,7 +80,8 @@ bool Settings::equals(const Settings &rhs) const
&& logCount == rhs.logCount
&& p4Command == rhs.p4Command && p4Port == rhs.p4Port
&& p4Client == rhs.p4Client && p4User == rhs.p4User
&& timeOutS == rhs.timeOutS && promptToSubmit == rhs.promptToSubmit;
&& timeOutS == rhs.timeOutS && promptToSubmit == rhs.promptToSubmit
&& autoOpen == rhs.autoOpen;
};
QStringList Settings::commonP4Arguments() const
......@@ -115,6 +118,7 @@ void PerforceSettings::fromSettings(QSettings *settings)
m_settings.timeOutS = settings->value(QLatin1String(timeOutKeyC), defaultTimeOutS).toInt();
m_settings.promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
m_settings.logCount = settings->value(QLatin1String(logCountKeyC), int(defaultLogCount)).toInt();
m_settings.autoOpen = settings->value(QLatin1String(autoOpenKeyC), true).toBool();
settings->endGroup();
}
......@@ -129,6 +133,7 @@ void PerforceSettings::toSettings(QSettings *settings) const
settings->setValue(QLatin1String(timeOutKeyC), m_settings.timeOutS);
settings->setValue(QLatin1String(promptToSubmitKeyC), m_settings.promptToSubmit);
settings->setValue(QLatin1String(logCountKeyC), m_settings.logCount);
settings->setValue(QLatin1String(autoOpenKeyC), m_settings.autoOpen);
settings->endGroup();
}
......@@ -180,6 +185,16 @@ void PerforceSettings::setPromptToSubmit(bool p)
m_settings.promptToSubmit = p;
}
bool PerforceSettings::autoOpen() const
{
return m_settings.autoOpen;
}
void PerforceSettings::setAutoOpen(bool b)
{
m_settings.autoOpen = b;
}
QString PerforceSettings::topLevel() const
{
return m_topLevel;
......
......@@ -61,6 +61,7 @@ struct Settings {
bool defaultEnv;
int timeOutS;
bool promptToSubmit;
bool autoOpen;
};
inline bool operator==(const Settings &s1, const Settings &s2) { return s1.equals(s2); }
......@@ -122,6 +123,8 @@ public:
bool defaultEnv() const;
bool promptToSubmit() const;
void setPromptToSubmit(bool p);
bool autoOpen() const;
void setAutoOpen(bool p);
// Return basic arguments, including -d and server connection parameters.
QStringList commonP4Arguments(const QString &workingDir) const;
......
......@@ -70,6 +70,14 @@ bool PerforceVersionControl::vcsOpen(const QString &fileName)
return m_plugin->vcsOpen(fi.absolutePath(), fi.fileName());
}
Core::IVersionControl::SettingsFlags PerforceVersionControl::settingsFlags() const
{
SettingsFlags rc;
if (m_plugin->settings().autoOpen())
rc|= AutoOpen;
return rc;
};
bool PerforceVersionControl::vcsAdd(const QString &fileName)
{
const QFileInfo fi(fileName);
......
......@@ -50,6 +50,7 @@ public:
virtual bool supportsOperation(Operation operation) const;
virtual bool vcsOpen(const QString &fileName);
virtual SettingsFlags settingsFlags() const;
virtual bool vcsAdd(const QString &fileName);
virtual bool vcsDelete(const QString &filename);
virtual bool vcsMove(const QString &from, const QString &to);
......
......@@ -85,6 +85,7 @@ Settings SettingsPageWidget::settings() const
settings.timeOutS = m_ui.timeOutSpinBox->value();
settings.logCount = m_ui.logCountSpinBox->value();
settings.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
settings.autoOpen = m_ui.autoOpenCheckBox->isChecked();
return settings;
}
......@@ -98,6 +99,7 @@ void SettingsPageWidget::setSettings(const PerforceSettings &s)
m_ui.logCountSpinBox->setValue(s.logCount());
m_ui.timeOutSpinBox->setValue(s.timeOutS());
m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit());
m_ui.autoOpenCheckBox->setChecked(s.autoOpen());
}
void SettingsPageWidget::setStatusText(const QString &t)
......
......@@ -2,14 +2,6 @@
<ui version="4.0">
<class>Perforce::Internal::SettingsPage</class>
<widget class="QWidget" name="Perforce::Internal::SettingsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>437</width>
<height>407</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="configGroupBox">
......@@ -25,7 +17,7 @@
</widget>
</item>
<item row="0" column="1">
<widget class="Utils::PathChooser" name="pathChooser"/>
<widget class="Utils::PathChooser" name="pathChooser" native="true"/>
</item>
</layout>
</widget>
......@@ -134,6 +126,13 @@
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="autoOpenCheckBox">
<property name="text">
<string>Automatically open files when editing</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
......
......@@ -674,7 +674,7 @@ bool Qt4PriFileNode::priFileWritable(const QString &path)
switch (Core::EditorManager::promptReadOnlyFile(path, versionControl, core->mainWindow(), false)) {
case Core::EditorManager::RO_OpenVCS:
if (!versionControl->vcsOpen(path)) {
QMessageBox::warning(core->mainWindow(), tr("Failed!"), tr("Could not open the file for edit with SCC."));
QMessageBox::warning(core->mainWindow(), tr("Failed!"), tr("Could not open the file for edit with VCS."));
return false;
}
break;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment