From 0d3b54f410103bbbba7b868607043c01f3011ece Mon Sep 17 00:00:00 2001 From: Knut Petter Svendsen <knutpett@pvv.org> Date: Fri, 22 Feb 2013 14:02:24 +0100 Subject: [PATCH] ClearCase: Don't show Hijack button for dynamic view The Hijack button (makeWriteableButton) should only be shown for snapshot views. Change-Id: I809981885d18b6057d82f73b5104b0f1041cd255 Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> --- src/plugins/bazaar/bazaarcontrol.cpp | 1 - src/plugins/clearcase/clearcasecontrol.cpp | 9 +++++++- src/plugins/clearcase/clearcasecontrol.h | 1 + src/plugins/clearcase/clearcaseplugin.h | 1 + src/plugins/coreplugin/documentmanager.cpp | 22 +++++++++++++------ .../editormanager/editormanager.cpp | 4 ++-- src/plugins/coreplugin/iversioncontrol.cpp | 5 +++++ src/plugins/coreplugin/iversioncontrol.h | 13 ++++++++++- src/plugins/cvs/cvscontrol.cpp | 6 ++++- src/plugins/cvs/cvscontrol.h | 1 + src/plugins/git/gitversioncontrol.cpp | 2 -- src/plugins/mercurial/mercurialcontrol.cpp | 1 - .../perforce/perforceversioncontrol.cpp | 6 ++++- src/plugins/perforce/perforceversioncontrol.h | 1 + src/plugins/subversion/subversioncontrol.cpp | 1 - 15 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/plugins/bazaar/bazaarcontrol.cpp b/src/plugins/bazaar/bazaarcontrol.cpp index 80b6be448f3..28d174831e4 100644 --- a/src/plugins/bazaar/bazaarcontrol.cpp +++ b/src/plugins/bazaar/bazaarcontrol.cpp @@ -85,7 +85,6 @@ bool BazaarControl::supportsOperation(Operation operation) const case Core::IVersionControl::GetRepositoryRootOperation: break; case Core::IVersionControl::CheckoutOperation: - case Core::IVersionControl::OpenOperation: case Core::IVersionControl::SnapshotOperations: supported = false; break; diff --git a/src/plugins/clearcase/clearcasecontrol.cpp b/src/plugins/clearcase/clearcasecontrol.cpp index f16e1063b96..45d04b5b435 100644 --- a/src/plugins/clearcase/clearcasecontrol.cpp +++ b/src/plugins/clearcase/clearcasecontrol.cpp @@ -68,7 +68,6 @@ bool ClearCaseControl::supportsOperation(Operation operation) const { bool rc = isConfigured(); switch (operation) { - case OpenOperation: case AddOperation: case DeleteOperation: case MoveOperation: @@ -84,6 +83,14 @@ bool ClearCaseControl::supportsOperation(Operation operation) const return rc; } +Core::IVersionControl::OpenSupportMode ClearCaseControl::openSupportMode() const +{ + if (m_plugin->isDynamic()) + return IVersionControl::OpenMandatory; // Checkout is the only option for dynamic views + else + return IVersionControl::OpenOptional; // Snapshot views supports Hijack and check out +} + bool ClearCaseControl::vcsOpen(const QString &fileName) { const QFileInfo fi(fileName); diff --git a/src/plugins/clearcase/clearcasecontrol.h b/src/plugins/clearcase/clearcasecontrol.h index f921518464b..f4a0fb5743c 100644 --- a/src/plugins/clearcase/clearcasecontrol.h +++ b/src/plugins/clearcase/clearcasecontrol.h @@ -52,6 +52,7 @@ public: bool isConfigured() const; bool supportsOperation(Operation operation) const; + OpenSupportMode openSupportMode() const; bool vcsOpen(const QString &fileName); SettingsFlags settingsFlags() const; bool vcsAdd(const QString &fileName); diff --git a/src/plugins/clearcase/clearcaseplugin.h b/src/plugins/clearcase/clearcaseplugin.h index 823f0a103a5..0a469b69daa 100644 --- a/src/plugins/clearcase/clearcaseplugin.h +++ b/src/plugins/clearcase/clearcaseplugin.h @@ -158,6 +158,7 @@ public: QString currentView() const { return m_viewData.name; } void refreshActivities(); inline bool isUcm() const { return m_viewData.isUcm; } + inline bool isDynamic() const { return m_viewData.isDynamic; } void setStatus(const QString &file, FileStatus::Status status, bool update = true); bool ccCheckUcm(const QString &viewname, const QString &workingDir) const; diff --git a/src/plugins/coreplugin/documentmanager.cpp b/src/plugins/coreplugin/documentmanager.cpp index 3beb2ad9641..9e60f95d33d 100644 --- a/src/plugins/coreplugin/documentmanager.cpp +++ b/src/plugins/coreplugin/documentmanager.cpp @@ -813,7 +813,7 @@ DocumentManager::ReadOnlyAction { // Version Control: If automatic open is desired, open right away. bool promptVCS = false; - if (versionControl && versionControl->supportsOperation(IVersionControl::OpenOperation)) { + if (versionControl && versionControl->openSupportMode() != IVersionControl::NoOpen) { if (versionControl->settingsFlags() & IVersionControl::AutoOpen) return RO_OpenVCS; promptVCS = true; @@ -824,22 +824,30 @@ DocumentManager::ReadOnlyAction tr("The file <i>%1</i> is read only.").arg(QDir::toNativeSeparators(fileName)), QMessageBox::Cancel, parent); - QString makeWritableText; QPushButton *vcsButton = 0; if (promptVCS) { vcsButton = msgBox.addButton(versionControl->vcsOpenText(), QMessageBox::AcceptRole); - makeWritableText = versionControl->vcsMakeWritableText(); } - if (makeWritableText.isEmpty()) - makeWritableText = tr("Make &Writable"); - QPushButton *makeWritableButton = msgBox.addButton(makeWritableText, QMessageBox::AcceptRole); + QString makeWritableText; + QPushButton *makeWritableButton = 0; + // If the VCS has OpenMandatory we don't show "Make Writable" + if (versionControl->openSupportMode() != IVersionControl::OpenMandatory) { + makeWritableText = versionControl->vcsMakeWritableText(); + if (makeWritableText.isEmpty()) + makeWritableText = tr("Make &Writable"); + makeWritableButton = msgBox.addButton(makeWritableText, QMessageBox::AcceptRole); + } QPushButton *saveAsButton = 0; if (displaySaveAsButton) saveAsButton = msgBox.addButton(tr("&Save As..."), QMessageBox::ActionRole); - msgBox.setDefaultButton(vcsButton ? vcsButton : makeWritableButton); + if (vcsButton) + msgBox.setDefaultButton(vcsButton); + else if (makeWritableButton) + msgBox.setDefaultButton(makeWritableButton); + msgBox.exec(); QAbstractButton *clickedButton = msgBox.clickedButton(); diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index b066e54cd29..52f37ad9d80 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1709,7 +1709,7 @@ void EditorManager::vcsOpenCurrentEditor() const QString directory = QFileInfo(curEditor->document()->fileName()).absolutePath(); IVersionControl *versionControl = ICore::vcsManager()->findVersionControlForDirectory(directory); - if (!versionControl || !versionControl->supportsOperation(IVersionControl::OpenOperation)) + if (!versionControl || versionControl->openSupportMode() == IVersionControl::NoOpen) return; if (!versionControl->vcsOpen(curEditor->document()->fileName())) { @@ -1763,7 +1763,7 @@ void EditorManager::updateMakeWritableWarning() bool promptVCS = false; const QString directory = QFileInfo(curEditor->document()->fileName()).absolutePath(); IVersionControl *versionControl = ICore::vcsManager()->findVersionControlForDirectory(directory); - if (versionControl && versionControl->supportsOperation(IVersionControl::OpenOperation)) { + if (versionControl && versionControl->openSupportMode() != IVersionControl::NoOpen) { if (versionControl->settingsFlags() & IVersionControl::AutoOpen) { vcsOpenCurrentEditor(); ww = false; diff --git a/src/plugins/coreplugin/iversioncontrol.cpp b/src/plugins/coreplugin/iversioncontrol.cpp index cfa30332726..814bee6859f 100644 --- a/src/plugins/coreplugin/iversioncontrol.cpp +++ b/src/plugins/coreplugin/iversioncontrol.cpp @@ -46,4 +46,9 @@ QString IVersionControl::vcsTopic(const QString &) return QString(); } +IVersionControl::OpenSupportMode IVersionControl::openSupportMode() const +{ + return NoOpen; +} + } diff --git a/src/plugins/coreplugin/iversioncontrol.h b/src/plugins/coreplugin/iversioncontrol.h index acee0f9cb18..4ba0277a712 100644 --- a/src/plugins/coreplugin/iversioncontrol.h +++ b/src/plugins/coreplugin/iversioncontrol.h @@ -50,7 +50,7 @@ public: Q_DECLARE_FLAGS(SettingsFlags, SettingsFlag) enum Operation { - AddOperation, DeleteOperation, OpenOperation, MoveOperation, + AddOperation, DeleteOperation, MoveOperation, CreateRepositoryOperation, SnapshotOperations, AnnotateOperation, @@ -58,6 +58,12 @@ public: GetRepositoryRootOperation }; + enum OpenSupportMode { + NoOpen, /*!< Files can be edited without noticing the VCS */ + OpenOptional, /*!< Files can be opened by the VCS, or hijacked */ + OpenMandatory /*!< Files must always be opened by the VCS */ + }; + explicit IVersionControl(QObject *parent = 0) : QObject(parent) {} virtual ~IVersionControl() {} @@ -85,6 +91,11 @@ public: */ virtual bool supportsOperation(Operation operation) const = 0; + /*! + * Returns the open support mode. + */ + virtual OpenSupportMode openSupportMode() const; + /*! * Called prior to save, if the file is read only. Should be implemented if * the scc requires a operation before editing the file, e.g. 'p4 edit' diff --git a/src/plugins/cvs/cvscontrol.cpp b/src/plugins/cvs/cvscontrol.cpp index 5c4cea214fc..e4ddcfd3804 100644 --- a/src/plugins/cvs/cvscontrol.cpp +++ b/src/plugins/cvs/cvscontrol.cpp @@ -69,7 +69,6 @@ bool CvsControl::supportsOperation(Operation operation) const case AddOperation: case DeleteOperation: case AnnotateOperation: - case OpenOperation: break; case MoveOperation: case CreateRepositoryOperation: @@ -82,6 +81,11 @@ bool CvsControl::supportsOperation(Operation operation) const return rc; } +Core::IVersionControl::OpenSupportMode CvsControl::openSupportMode() const +{ + return OpenOptional; +} + bool CvsControl::vcsOpen(const QString &fileName) { const QFileInfo fi(fileName); diff --git a/src/plugins/cvs/cvscontrol.h b/src/plugins/cvs/cvscontrol.h index 7196e079296..586296fa4df 100644 --- a/src/plugins/cvs/cvscontrol.h +++ b/src/plugins/cvs/cvscontrol.h @@ -51,6 +51,7 @@ public: bool isConfigured() const; bool supportsOperation(Operation operation) const; + OpenSupportMode openSupportMode() const; bool vcsOpen(const QString &fileName); bool vcsAdd(const QString &fileName); bool vcsDelete(const QString &filename); diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp index be8a42190cc..ecf823aaf9e 100644 --- a/src/plugins/git/gitversioncontrol.cpp +++ b/src/plugins/git/gitversioncontrol.cpp @@ -80,8 +80,6 @@ bool GitVersionControl::supportsOperation(Operation operation) const case CheckoutOperation: case GetRepositoryRootOperation: return true; - case OpenOperation: - break; } return false; } diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp index 558021f93ab..8eaa73dce19 100644 --- a/src/plugins/mercurial/mercurialcontrol.cpp +++ b/src/plugins/mercurial/mercurialcontrol.cpp @@ -85,7 +85,6 @@ bool MercurialControl::supportsOperation(Operation operation) const case Core::IVersionControl::CheckoutOperation: case Core::IVersionControl::GetRepositoryRootOperation: break; - case Core::IVersionControl::OpenOperation: case Core::IVersionControl::SnapshotOperations: supported = false; break; diff --git a/src/plugins/perforce/perforceversioncontrol.cpp b/src/plugins/perforce/perforceversioncontrol.cpp index 6d119960365..85acdebbce8 100644 --- a/src/plugins/perforce/perforceversioncontrol.cpp +++ b/src/plugins/perforce/perforceversioncontrol.cpp @@ -71,7 +71,6 @@ bool PerforceVersionControl::supportsOperation(Operation operation) const case AddOperation: case DeleteOperation: case MoveOperation: - case OpenOperation: case AnnotateOperation: return supported; case CreateRepositoryOperation: @@ -83,6 +82,11 @@ bool PerforceVersionControl::supportsOperation(Operation operation) const return false; } +Core::IVersionControl::OpenSupportMode PerforceVersionControl::openSupportMode() const +{ + return OpenOptional; +} + bool PerforceVersionControl::vcsOpen(const QString &fileName) { const QFileInfo fi(fileName); diff --git a/src/plugins/perforce/perforceversioncontrol.h b/src/plugins/perforce/perforceversioncontrol.h index ba5bcaf25e4..888ce898501 100644 --- a/src/plugins/perforce/perforceversioncontrol.h +++ b/src/plugins/perforce/perforceversioncontrol.h @@ -50,6 +50,7 @@ public: bool isConfigured() const; bool supportsOperation(Operation operation) const; + OpenSupportMode openSupportMode() const; bool vcsOpen(const QString &fileName); SettingsFlags settingsFlags() const; bool vcsAdd(const QString &fileName); diff --git a/src/plugins/subversion/subversioncontrol.cpp b/src/plugins/subversion/subversioncontrol.cpp index 6d407491f83..3b11ef8acac 100644 --- a/src/plugins/subversion/subversioncontrol.cpp +++ b/src/plugins/subversion/subversioncontrol.cpp @@ -73,7 +73,6 @@ bool SubversionControl::supportsOperation(Operation operation) const case CheckoutOperation: case GetRepositoryRootOperation: break; - case OpenOperation: case CreateRepositoryOperation: case SnapshotOperations: rc = false; -- GitLab