diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp index 5bac775e3993fd18a6a798175acd2b7b3f3686a4..d9fd8318366d0aab3bf4c627aa9f368190eb5f2e 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 df8932c2b3884516ec83dd87aaa4f66577ee3cac..62c28c6dcccbc1c9e86aec4c857402d874c6c4e9 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 929bd41b608ed7cf9ea7ad1a3f50b9db336bb96c..06a94e38824ffe0312b773922c293444524d7f8d 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 74eb3055cc153953d37749eb3d872fe8ac89450b..33cda600febe8ea4c765bba4b00c0eaad359767e 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 aa6b1fc333415c12a26bb3ab912136af637d2200..070d2c784c45f08294b79395c3006e85773da1b7 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 2bfca86258a302aa0379e001082da2b20db01686..44c6ee04a04a33ff8356fa1e032a19abfd63c00e 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 2c11637aa5a2a8c49c977fbaad8219a55e9926fa..df3b99ef64cca071c80eed250f8fd0c1d68ca3de 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 a0cc33095332e69c3eaee14874df166370c898bc..009d44375c69300a3d268e113567b3bcb1e3e830 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 6b6e9f50717a1b61525afff367d0c58343cf1dad..0a441965ab51a9c141c686bd5e664fe9a823902b 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 d2a37da631fe4eec38549e500ff2bc7fc29c295a..d22690bd409309ecabf073d7ef03ef2cb08d5ada 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 8f7c3819e495bb7e15cabc096eda8e06e9eebfb1..5c70ddd8b86887684d02e53e2d31e32ad8927b06 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 292c6b2f28f46aa58d45183c694e2b94728b91cd..cd84597b172369e2a723b78f28d04e4d7601f5c8 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 e83d3262c08045e726f0df100111f97bc2f5b447..aef5560eff16124110c06f1424266db6d310dcc0 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 d8ca80810bada019dc2c10aa50bb6c4c90b0d19c..97fda4b06ddd98719948c432d7dc3e3c4435be77 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 07b719414d3e887e654a6d8ae759a8a781a44cd7..b672fba110a3b45bc44bfda73464d66ae985d773 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 70f3e8f20aa8e870dad77f46cb8197fd4c0fa472..c5760032aa1f0eaee212940c9b6d04878349a6ce 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 };