From 95da4190671d715e7a1266cac877730679934680 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Mon, 11 Jan 2010 15:22:17 +0100 Subject: [PATCH] VCS[vcs,p4,svn,hg]: Use VCManager for delete operations. ...and its dialog prompt consistently. Rename method and introduce overload taking IVersionControl. Add convenience slot to VCSBasePlugin. --- src/plugins/coreplugin/vcsmanager.cpp | 14 +++-- src/plugins/coreplugin/vcsmanager.h | 3 +- src/plugins/cvs/cvsplugin.cpp | 14 ++--- src/plugins/cvs/cvsplugin.h | 1 - src/plugins/mercurial/constants.h | 2 + src/plugins/mercurial/mercurialcontrol.cpp | 3 +- src/plugins/mercurial/mercurialcontrol.h | 1 - src/plugins/mercurial/mercurialplugin.cpp | 52 +++++++++++++------ src/plugins/mercurial/mercurialplugin.h | 3 ++ src/plugins/perforce/perforceplugin.cpp | 11 +--- src/plugins/perforce/perforceplugin.h | 1 - .../projectexplorer/projectexplorer.cpp | 2 +- src/plugins/subversion/subversionplugin.cpp | 13 ++--- src/plugins/subversion/subversionplugin.h | 1 - src/plugins/vcsbase/vcsbaseplugin.cpp | 10 ++++ src/plugins/vcsbase/vcsbaseplugin.h | 5 ++ 16 files changed, 79 insertions(+), 57 deletions(-) diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp index 5bac775e399..d9fd8318366 100644 --- a/src/plugins/coreplugin/vcsmanager.cpp +++ b/src/plugins/coreplugin/vcsmanager.cpp @@ -33,6 +33,7 @@ #include "filemanager.h" #include <extensionsystem/pluginmanager.h> +#include <utils/qtcassert.h> #include <QtCore/QString> #include <QtCore/QList> @@ -133,10 +134,17 @@ IVersionControl* VCSManager::findVersionControlForDirectory(const QString &direc return 0; } -bool VCSManager::showDeleteDialog(const QString &fileName) +bool VCSManager::promptToDelete(const QString &fileName) { - IVersionControl *vc = findVersionControlForDirectory(QFileInfo(fileName).absolutePath()); - if (!vc || !vc->supportsOperation(IVersionControl::DeleteOperation)) + if (IVersionControl *vc = findVersionControlForDirectory(QFileInfo(fileName).absolutePath())) + return promptToDelete(vc, fileName); + return true; +} + +bool VCSManager::promptToDelete(IVersionControl *vc, const QString &fileName) +{ + QTC_ASSERT(vc, return true) + if (!vc->supportsOperation(IVersionControl::DeleteOperation)) return true; const QString title = QCoreApplication::translate("VCSManager", "Version Control"); const QString msg = QCoreApplication::translate("VCSManager", diff --git a/src/plugins/coreplugin/vcsmanager.h b/src/plugins/coreplugin/vcsmanager.h index df8932c2b38..62c28c6dccc 100644 --- a/src/plugins/coreplugin/vcsmanager.h +++ b/src/plugins/coreplugin/vcsmanager.h @@ -72,7 +72,8 @@ public: // Shows a confirmation dialog, whether the file should also be deleted // from revision control Calls sccDelete on the file. Returns false // if a failure occurs - bool showDeleteDialog(const QString &fileName); + bool promptToDelete(const QString &fileName); + bool promptToDelete(IVersionControl *versionControl, const QString &fileName); friend CORE_EXPORT QDebug operator<<(QDebug in, const VCSManager &); diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index 929bd41b608..06a94e38824 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -261,14 +261,14 @@ bool CVSPlugin::initialize(const QStringList & /*arguments */, QString *errorMes connect(m_addAction, SIGNAL(triggered()), this, SLOT(addCurrentFile())); cvsMenu->addAction(command); - m_deleteAction = new Utils::ParameterAction(tr("Delete"), tr("Delete \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); + m_deleteAction = new Utils::ParameterAction(tr("Delete..."), tr("Delete \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this); command = ami->registerAction(m_deleteAction, CMD_ID_DELETE_FILE, globalcontext); command->setAttribute(Core::Command::CA_UpdateText); - connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(deleteCurrentFile())); + connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(promptToDeleteCurrentFile())); cvsMenu->addAction(command); - m_revertAction = new Utils::ParameterAction(tr("Revert"), tr("Revert \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); + m_revertAction = new Utils::ParameterAction(tr("Revert..."), tr("Revert \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this); command = ami->registerAction(m_revertAction, CMD_ID_REVERT, globalcontext); command->setAttribute(Core::Command::CA_UpdateText); @@ -524,14 +524,6 @@ void CVSPlugin::addCurrentFile() vcsAdd(state.currentFileTopLevel(), state.relativeCurrentFile()); } -void CVSPlugin::deleteCurrentFile() -{ - const VCSBase::VCSBasePluginState state = currentState(); - QTC_ASSERT(state.hasFile(), return) - if (!Core::ICore::instance()->vcsManager()->showDeleteDialog(state.currentFile())) - QMessageBox::warning(0, QLatin1String("CVS remove"), tr("The file '%1' could not be deleted.").arg(state.currentFile()), QMessageBox::Ok); -} - void CVSPlugin::revertCurrentFile() { const VCSBase::VCSBasePluginState state = currentState(); diff --git a/src/plugins/cvs/cvsplugin.h b/src/plugins/cvs/cvsplugin.h index 74eb3055cc1..33cda600feb 100644 --- a/src/plugins/cvs/cvsplugin.h +++ b/src/plugins/cvs/cvsplugin.h @@ -99,7 +99,6 @@ public: private slots: void addCurrentFile(); - void deleteCurrentFile(); void revertCurrentFile(); void diffProject(); void diffCurrentFile(); diff --git a/src/plugins/mercurial/constants.h b/src/plugins/mercurial/constants.h index aa6b1fc3334..070d2c784c4 100644 --- a/src/plugins/mercurial/constants.h +++ b/src/plugins/mercurial/constants.h @@ -85,6 +85,8 @@ const char * const COMMITMIMETYPE = "application/vnd.nokia.text.scs_mercurial_co //menu items //File menu actions +const char * const ADD = "Mercurial.AddSingleFile"; +const char * const DELETE = "Mercurial.DeleteSingleFile"; const char * const ANNOTATE = "Mercurial.Annotate"; const char * const DIFF = "Mercurial.DiffSingleFile"; const char * const LOG = "Mercurial.LogSingleFile"; diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp index 2bfca86258a..44c6ee04a04 100644 --- a/src/plugins/mercurial/mercurialcontrol.cpp +++ b/src/plugins/mercurial/mercurialcontrol.cpp @@ -38,8 +38,7 @@ using namespace Mercurial::Internal; MercurialControl::MercurialControl(MercurialClient *client) - : mercurialClient(client), - mercurialEnabled(true) + : mercurialClient(client) { } diff --git a/src/plugins/mercurial/mercurialcontrol.h b/src/plugins/mercurial/mercurialcontrol.h index 2c11637aa5a..df3b99ef64c 100644 --- a/src/plugins/mercurial/mercurialcontrol.h +++ b/src/plugins/mercurial/mercurialcontrol.h @@ -66,7 +66,6 @@ public slots: private: MercurialClient *mercurialClient; - bool mercurialEnabled; }; } //namespace Internal diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index a0cc3309533..009d44375c6 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -41,6 +41,7 @@ #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/basemode.h> +#include <coreplugin/vcsmanager.h> #include <coreplugin/coreconstants.h> #include <coreplugin/icore.h> #include <coreplugin/modemanager.h> @@ -124,6 +125,8 @@ MercurialPlugin::MercurialPlugin() : optionsPage(0), m_client(0), changeLog(0), + m_addAction(0), + m_deleteAction(0), m_menuAction(0) { m_instance = this; @@ -225,38 +228,59 @@ void MercurialPlugin::createFileActions(const QList<int> &context) { Core::Command *command; - annotateFile = new Utils::ParameterAction(tr("Annotate Current File"), tr("Annotate \"%1\""), Utils::ParameterAction::AlwaysEnabled, this); + annotateFile = new Utils::ParameterAction(tr("Annotate Current File"), tr("Annotate \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); command = actionManager->registerAction(annotateFile, QLatin1String(Constants::ANNOTATE), context); command->setAttribute(Core::Command::CA_UpdateText); connect(annotateFile, SIGNAL(triggered()), this, SLOT(annotateCurrentFile())); mercurialContainer->addAction(command); - diffFile = new Utils::ParameterAction(tr("Diff Current File"), tr("Diff \"%1\""), Utils::ParameterAction::AlwaysEnabled, this); + diffFile = new Utils::ParameterAction(tr("Diff Current File"), tr("Diff \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); command = actionManager->registerAction(diffFile, QLatin1String(Constants::DIFF), context); command->setAttribute(Core::Command::CA_UpdateText); command->setDefaultKeySequence(QKeySequence(tr("Alt+H,Alt+D"))); connect(diffFile, SIGNAL(triggered()), this, SLOT(diffCurrentFile())); mercurialContainer->addAction(command); - logFile = new Utils::ParameterAction(tr("Log Current File"), tr("Log \"%1\""), Utils::ParameterAction::AlwaysEnabled, this); + logFile = new Utils::ParameterAction(tr("Log Current File"), tr("Log \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); command = actionManager->registerAction(logFile, QLatin1String(Constants::LOG), context); command->setAttribute(Core::Command::CA_UpdateText); command->setDefaultKeySequence(QKeySequence(tr("Alt+H,Alt+L"))); connect(logFile, SIGNAL(triggered()), this, SLOT(logCurrentFile())); mercurialContainer->addAction(command); - revertFile = new Utils::ParameterAction(tr("Revert Current File"), tr("Revert \"%1\""), Utils::ParameterAction::AlwaysEnabled, this); - command = actionManager->registerAction(revertFile, QLatin1String(Constants::REVERT), context); - command->setAttribute(Core::Command::CA_UpdateText); - connect(revertFile, SIGNAL(triggered()), this, SLOT(revertCurrentFile())); - mercurialContainer->addAction(command); - - statusFile = new Utils::ParameterAction(tr("Status Current File"), tr("Status \"%1\""), Utils::ParameterAction::AlwaysEnabled, this); + statusFile = new Utils::ParameterAction(tr("Status Current File"), tr("Status \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); command = actionManager->registerAction(statusFile, QLatin1String(Constants::STATUS), context); command->setAttribute(Core::Command::CA_UpdateText); command->setDefaultKeySequence(QKeySequence(tr("Alt+H,Alt+S"))); connect(statusFile, SIGNAL(triggered()), this, SLOT(statusCurrentFile())); mercurialContainer->addAction(command); + + createSeparator(context, QLatin1String("FileDirSeperator1")); + + m_addAction = new Utils::ParameterAction(tr("Add"), tr("Add \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); + command = actionManager->registerAction(m_addAction, QLatin1String(Constants::ADD), context); + command->setAttribute(Core::Command::CA_UpdateText); + connect(m_addAction, SIGNAL(triggered()), this, SLOT(addCurrentFile())); + mercurialContainer->addAction(command); + + m_deleteAction = new Utils::ParameterAction(tr("Delete..."), tr("Delete \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this); + command = actionManager->registerAction(m_deleteAction, QLatin1String(Constants::DELETE), context); + command->setAttribute(Core::Command::CA_UpdateText); + connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(promptToDeleteCurrentFile())); + mercurialContainer->addAction(command); + + revertFile = new Utils::ParameterAction(tr("Revert Current File..."), tr("Revert \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this); + command = actionManager->registerAction(revertFile, QLatin1String(Constants::REVERT), context); + command->setAttribute(Core::Command::CA_UpdateText); + connect(revertFile, SIGNAL(triggered()), this, SLOT(revertCurrentFile())); + mercurialContainer->addAction(command); +} + +void MercurialPlugin::addCurrentFile() +{ + const VCSBase::VCSBasePluginState state = currentState(); + QTC_ASSERT(state.hasFile(), return) + m_client->add(state.currentFileTopLevel(), state.relativeCurrentFile()); } void MercurialPlugin::annotateCurrentFile() @@ -655,19 +679,15 @@ void MercurialPlugin::updateActions(VCSBase::VCSBasePlugin::ActionState as) return; const QString filename = currentState().currentFileName(); - const bool fileEnabled = !filename.isEmpty(); const bool repoEnabled = currentState().hasTopLevel(); annotateFile->setParameter(filename); - annotateFile->setEnabled(fileEnabled); diffFile->setParameter(filename); - diffFile->setEnabled(fileEnabled); logFile->setParameter(filename); - logFile->setEnabled(fileEnabled); + m_addAction->setParameter(filename); + m_deleteAction->setParameter(filename); revertFile->setParameter(filename); - revertFile->setEnabled(fileEnabled); statusFile->setParameter(filename); - statusFile->setEnabled(fileEnabled); foreach (QAction *repoAction, m_repositoryActionList) repoAction->setEnabled(repoEnabled); diff --git a/src/plugins/mercurial/mercurialplugin.h b/src/plugins/mercurial/mercurialplugin.h index 6b6e9f50717..0a441965ab5 100644 --- a/src/plugins/mercurial/mercurialplugin.h +++ b/src/plugins/mercurial/mercurialplugin.h @@ -88,6 +88,7 @@ public: private slots: // File menu action Slots + void addCurrentFile(); void annotateCurrentFile(); void diffCurrentFile(); void logCurrentFile(); @@ -156,6 +157,8 @@ private: QTemporaryFile *changeLog; //Menu Items (file actions) + Utils::ParameterAction *m_addAction; + Utils::ParameterAction *m_deleteAction; Utils::ParameterAction *annotateFile; Utils::ParameterAction *diffFile; Utils::ParameterAction *logFile; diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index d2a37da631f..d22690bd409 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -276,11 +276,11 @@ bool PerforcePlugin::initialize(const QStringList & /* arguments */, QString * e connect(m_addAction, SIGNAL(triggered()), this, SLOT(addCurrentFile())); mperforce->addAction(command); - m_deleteAction = new Utils::ParameterAction(tr("Delete"), tr("Delete \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); + m_deleteAction = new Utils::ParameterAction(tr("Delete..."), tr("Delete \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this); command = am->registerAction(m_deleteAction, CMD_ID_DELETE_FILE, globalcontext); command->setAttribute(Core::Command::CA_UpdateText); command->setDefaultText(tr("Delete File")); - connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(deleteCurrentFile())); + connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(promptToDeleteCurrentFile())); mperforce->addAction(command); m_revertFileAction = new Utils::ParameterAction(tr("Revert"), tr("Revert \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); @@ -451,13 +451,6 @@ void PerforcePlugin::addCurrentFile() vcsAdd(state.currentFileTopLevel(), state.relativeCurrentFile()); } -void PerforcePlugin::deleteCurrentFile() -{ - const VCSBase::VCSBasePluginState state = currentState(); - QTC_ASSERT(state.hasFile(), return) - vcsDelete(state.currentFileTopLevel(), state.relativeCurrentFile()); -} - void PerforcePlugin::revertCurrentFile() { const VCSBase::VCSBasePluginState state = currentState(); diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h index 8f7c3819e49..5c70ddd8b86 100644 --- a/src/plugins/perforce/perforceplugin.h +++ b/src/plugins/perforce/perforceplugin.h @@ -106,7 +106,6 @@ public slots: private slots: void openCurrentFile(); void addCurrentFile(); - void deleteCurrentFile(); void revertCurrentFile(); void printOpenedFileList(); void diffCurrentFile(); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 292c6b2f28f..cd84597b172 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1946,7 +1946,7 @@ void ProjectExplorerPlugin::removeFile() } // remove from version control - core->vcsManager()->showDeleteDialog(filePath); + core->vcsManager()->promptToDelete(filePath); // remove from file system if (deleteFile) { diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index e83d3262c08..aef5560eff1 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -292,14 +292,14 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *e connect(m_addAction, SIGNAL(triggered()), this, SLOT(addCurrentFile())); subversionMenu->addAction(command); - m_deleteAction = new Utils::ParameterAction(tr("Delete"), tr("Delete \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); + m_deleteAction = new Utils::ParameterAction(tr("Delete..."), tr("Delete \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this); command = ami->registerAction(m_deleteAction, CMD_ID_DELETE_FILE, globalcontext); command->setAttribute(Core::Command::CA_UpdateText); - connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(deleteCurrentFile())); + connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(promptToDeleteCurrentFile())); subversionMenu->addAction(command); - m_revertAction = new Utils::ParameterAction(tr("Revert"), tr("Revert \"%1\""), Utils::ParameterAction::EnabledWithParameter, this); + m_revertAction = new Utils::ParameterAction(tr("Revert..."), tr("Revert \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this); command = ami->registerAction(m_revertAction, CMD_ID_REVERT, globalcontext); command->setAttribute(Core::Command::CA_UpdateText); @@ -556,13 +556,6 @@ void SubversionPlugin::addCurrentFile() vcsAdd(state.currentFileTopLevel(), state.relativeCurrentFile()); } -void SubversionPlugin::deleteCurrentFile() -{ - const VCSBase::VCSBasePluginState state = currentState(); - QTC_ASSERT(state.hasFile(), return) - vcsDelete(state.currentFileTopLevel(), state.relativeCurrentFile()); -} - void SubversionPlugin::revertCurrentFile() { const VCSBase::VCSBasePluginState state = currentState(); diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h index d8ca80810ba..97fda4b06dd 100644 --- a/src/plugins/subversion/subversionplugin.h +++ b/src/plugins/subversion/subversionplugin.h @@ -98,7 +98,6 @@ public: private slots: void addCurrentFile(); - void deleteCurrentFile(); void revertCurrentFile(); void diffProject(); void diffCurrentFile(); diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index 07b719414d3..b672fba110a 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -46,6 +46,7 @@ #include <QtCore/QSharedData> #include <QtGui/QAction> +#include <QtGui/QMessageBox> enum { debug = 0 }; @@ -446,6 +447,15 @@ bool VCSBasePlugin::enableMenuAction(ActionState as, QAction *menuAction) return true; } +void VCSBasePlugin::promptToDeleteCurrentFile() +{ + const VCSBasePluginState state = currentState(); + QTC_ASSERT(state.hasFile(), return) + const bool rc = Core::ICore::instance()->vcsManager()->promptToDelete(versionControl(), state.currentFile()); + if (!rc) + QMessageBox::warning(0, tr("Version Control"), tr("The file '%1' could not be deleted.").arg(state.currentFile()), QMessageBox::Ok); +} + } // namespace VCSBase #include "vcsbaseplugin.moc" diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h index 70f3e8f20aa..c5760032aa1 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.h +++ b/src/plugins/vcsbase/vcsbaseplugin.h @@ -149,6 +149,11 @@ public: const VCSBasePluginState ¤tState() const; Core::IVersionControl *versionControl() const; +public slots: + // Convenience slot for "Delete current file" action. Prompts to + // delete the file via VCSManager. + void promptToDeleteCurrentFile(); + protected: enum ActionState { NoVCSEnabled, OtherVCSEnabled, VCSEnabled }; -- GitLab