diff --git a/src/plugins/bazaar/bazaarcontrol.cpp b/src/plugins/bazaar/bazaarcontrol.cpp index 80b6be448f3686e3b8a0c882744d363bb3b0c632..28d174831e41d2d564778910cddb8fec6b1abbc7 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 f16e1063b969639e8249d6275f6d42b772c68b94..45d04b5b4358ee634ecbd8ca60402c05db60f889 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 f921518464b609cd5e19f8e273b0881ca2b7c3cb..f4a0fb5743c1327cc02fb23a165013af559a9db3 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 823f0a103a52f6119a719307e8849652232f33b5..0a469b69daae63eb72ccba6ddd79b5ce2c8621f2 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 3beb2ad9641cb0e6f7288275bfd6c15fdc11b3be..9e60f95d33d02735a401bf83f24b5a108b8f7b90 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 b066e54cd294e6f6ce1abc98f5b045b77d94fe33..52f37ad9d806895c0f6857b1ec19b24f50955034 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 cfa303327261875121bbb41fc315fb7d5b0cf2f9..814bee6859fbbdaa7e311b96291e08c15309cb38 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 acee0f9cb18f9eae2cc179964957625486e07895..4ba0277a712931e95bf5b85ba1ad96fdbd96a575 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 5c4cea214fc4bf70dff08d8389fbbfaeba017c87..e4ddcfd3804d5f8f357cd3bb73ad6c4f1106b9e0 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 7196e079296aefd1a2bf0c8c58133f055925d4e1..586296fa4df9563fffb5d727b99357a8e550becd 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 be8a42190ccff005c10cfd69af983f706e20a560..ecf823aaf9ef3a9cdfc5d514fc1daca620202a53 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 558021f93ab9e83d73b6b87c82e985fa4784bdce..8eaa73dce19b93e53fbffe7e408fc340a1e26d0a 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 6d119960365cd81ac8e3b883f9229179eca11827..85acdebbce80684cff2b9d53eb8ff0df1bc3e4b9 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 ba5bcaf25e48b5f5a216ecaace09703f7510ce60..888ce898501425902d30e91e74cf94935beeb912 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 6d407491f83a9059a2a8a3b36150290b6ce1c4b1..3b11ef8acac422e6c6a5bcd05d1c8d84f9ea922f 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;