diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp index 417761c1044411c7dc019ce1bfe7c77e95aac349..aecfa62604a37ac8522c2bfcfb30528711920205 100644 --- a/src/plugins/bazaar/bazaarplugin.cpp +++ b/src/plugins/bazaar/bazaarplugin.cpp @@ -112,7 +112,7 @@ static const VcsBase::VcsBaseSubmitEditorParameters submitEditorParameters = { BazaarPlugin *BazaarPlugin::m_instance = 0; BazaarPlugin::BazaarPlugin() - : VcsBase::VcsBasePlugin(Constants::COMMIT_ID), + : VcsBase::VcsBasePlugin(), m_optionsPage(0), m_client(0), m_commandLocator(0), @@ -517,7 +517,7 @@ void BazaarPlugin::createSubmitEditorActions() void BazaarPlugin::commit() { - if (VcsBase::VcsBaseSubmitEditor::raiseSubmitEditor()) + if (raiseSubmitEditor()) return; const VcsBase::VcsBasePluginState state = currentState(); @@ -566,6 +566,7 @@ void BazaarPlugin::showCommitWidget(const QList<VcsBase::VcsBaseClient::StatusIt outputWindow->appendError(tr("Unable to create a commit editor.")); return; } + setSubmitEditor(commitEditor); commitEditor->registerActions(m_editorUndo, m_editorRedo, m_editorCommit, m_editorDiff); connect(commitEditor, SIGNAL(diffSelectedFiles(QStringList)), @@ -653,12 +654,12 @@ void BazaarPlugin::commitFromEditor() Core::ICore::editorManager()->closeEditor(); } -bool BazaarPlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor) +bool BazaarPlugin::submitEditorAboutToClose() { - Core::IDocument *editorDocument = submitEditor->document(); - const CommitEditor *commitEditor = qobject_cast<const CommitEditor *>(submitEditor); - if (!editorDocument || !commitEditor) - return true; + CommitEditor *commitEditor = qobject_cast<CommitEditor *>(submitEditor()); + QTC_ASSERT(commitEditor, return true); + Core::IDocument *editorDocument = commitEditor->document(); + QTC_ASSERT(editorDocument, return true); bool dummyPrompt = m_bazaarSettings.boolValue(BazaarSettings::promptOnSubmitKey); const VcsBase::VcsBaseSubmitEditor::PromptSubmitResult response = @@ -690,7 +691,7 @@ bool BazaarPlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submit *iFile = parts.last(); } - const BazaarCommitWidget *commitWidget = commitEditor->commitWidget(); + BazaarCommitWidget *commitWidget = commitEditor->commitWidget(); QStringList extraOptions; // Author if (!commitWidget->committer().isEmpty()) diff --git a/src/plugins/bazaar/bazaarplugin.h b/src/plugins/bazaar/bazaarplugin.h index 60a562d274f03d368053a53a45ffa535cd264651..0baa0157c1497204b538c8138fe31ee4fe544d33 100644 --- a/src/plugins/bazaar/bazaarplugin.h +++ b/src/plugins/bazaar/bazaarplugin.h @@ -115,7 +115,7 @@ private slots: protected: void updateActions(VcsBase::VcsBasePlugin::ActionState); - bool submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor); + bool submitEditorAboutToClose(); private: // Methods diff --git a/src/plugins/bazaar/commiteditor.cpp b/src/plugins/bazaar/commiteditor.cpp index 2ba32a59a42637f033a28f02959a9a5cd615b96c..b41a04012f6819c3d25eba6de56203f4ef388432 100644 --- a/src/plugins/bazaar/commiteditor.cpp +++ b/src/plugins/bazaar/commiteditor.cpp @@ -43,12 +43,6 @@ CommitEditor::CommitEditor(const VcsBase::VcsBaseSubmitEditorParameters *paramet setDisplayName(tr("Commit Editor")); } -const BazaarCommitWidget *CommitEditor::commitWidget() const -{ - CommitEditor *nonConstThis = const_cast<CommitEditor *>(this); - return static_cast<const BazaarCommitWidget *>(nonConstThis->widget()); -} - BazaarCommitWidget *CommitEditor::commitWidget() { return static_cast<BazaarCommitWidget *>(widget()); diff --git a/src/plugins/bazaar/commiteditor.h b/src/plugins/bazaar/commiteditor.h index 483fb819bb40cbebc7c9c1df083afdee88dcbf9f..491d4557af3767488023650ef65c6f4b125ea010 100644 --- a/src/plugins/bazaar/commiteditor.h +++ b/src/plugins/bazaar/commiteditor.h @@ -54,10 +54,9 @@ public: const QString &userName, const QString &email, const QList<VcsBase::VcsBaseClient::StatusItem> &repoStatus); - const BazaarCommitWidget *commitWidget() const; + BazaarCommitWidget *commitWidget(); private: - BazaarCommitWidget *commitWidget(); VcsBase::SubmitFileModel *m_fileModel; }; diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 2412ca1cc3b4199fa3008419f9c8a3aba72356b3..3c74ad1a5b49407eab19dc97a55c0f5e1bbd8fdc 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -469,15 +469,15 @@ bool ClearCasePlugin::initialize(const QStringList & /*arguments */, QString *er } // called before closing the submit editor -bool ClearCasePlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor) +bool ClearCasePlugin::submitEditorAboutToClose() { if (!isCheckInEditorOpen()) return true; - Core::IDocument *editorDocument = submitEditor->document(); - ClearCaseSubmitEditor *editor = qobject_cast<ClearCaseSubmitEditor *>(submitEditor); - if (!editorDocument || !editor) - return true; + ClearCaseSubmitEditor *editor = qobject_cast<ClearCaseSubmitEditor *>(submitEditor()); + QTC_ASSERT(editor, return true); + Core::IDocument *editorDocument = editor->document(); + QTC_ASSERT(editorDocument, return true); // Submit editor closing. Make it write out the check in message // and retrieve files @@ -1030,7 +1030,7 @@ void ClearCasePlugin::startCheckInActivity() * check in will start. */ void ClearCasePlugin::startCheckIn(const QString &workingDir, const QStringList &files) { - if (VcsBase::VcsBaseSubmitEditor::raiseSubmitEditor()) + if (raiseSubmitEditor()) return; VcsBase::VcsBaseOutputWindow *outputwindow = VcsBase::VcsBaseOutputWindow::instance(); @@ -1059,6 +1059,7 @@ void ClearCasePlugin::startCheckIn(const QString &workingDir, const QStringList m_checkInView = workingDir; // Create a submit editor and set file list ClearCaseSubmitEditor *editor = openClearCaseSubmitEditor(m_checkInMessageFileName, m_viewData.isUcm); + setSubmitEditor(editor); editor->setStatusList(files); if (m_viewData.isUcm && (files.size() == 1)) { diff --git a/src/plugins/clearcase/clearcaseplugin.h b/src/plugins/clearcase/clearcaseplugin.h index 0a469b69daae63eb72ccba6ddd79b5ce2c8621f2..842e2602f3d432f391830caaed965dd4f6fca2dc 100644 --- a/src/plugins/clearcase/clearcaseplugin.h +++ b/src/plugins/clearcase/clearcaseplugin.h @@ -201,7 +201,7 @@ private slots: protected: void updateActions(VcsBase::VcsBasePlugin::ActionState); - bool submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor); + bool submitEditorAboutToClose(); QString ccGet(const QString &workingDir, const QString &file, const QString &prefix = QString()); QList<QStringPair> ccGetActivities() const; diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index ea0ee3911bd5fe660e7ccceee3f4b8cc269bb4e2..75d3e09dfccf8f6598e9cc1c0a29430081b59bdf 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -162,7 +162,7 @@ static inline bool messageBoxQuestion(const QString &title, const QString &quest CvsPlugin *CvsPlugin::m_cvsPluginInstance = 0; CvsPlugin::CvsPlugin() : - VcsBasePlugin(Constants::CVSCOMMITEDITOR_ID), + VcsBasePlugin(), m_commandLocator(0), m_addAction(0), m_deleteAction(0), @@ -450,15 +450,15 @@ bool CvsPlugin::initialize(const QStringList &arguments, QString *errorMessage) return true; } -bool CvsPlugin::submitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor) +bool CvsPlugin::submitEditorAboutToClose() { if (!isCommitEditorOpen()) return true; - IDocument *editorDocument = submitEditor->document(); - const CvsSubmitEditor *editor = qobject_cast<CvsSubmitEditor *>(submitEditor); - if (!editorDocument || !editor) - return true; + CvsSubmitEditor *editor = qobject_cast<CvsSubmitEditor *>(submitEditor()); + QTC_ASSERT(editor, return true); + IDocument *editorDocument = editor->document(); + QTC_ASSERT(editorDocument, return true); // Submit editor closing. Make it write out the commit message // and retrieve files @@ -759,7 +759,7 @@ void CvsPlugin::startCommitAll() * commit will start. */ void CvsPlugin::startCommit(const QString &workingDir, const QStringList &files) { - if (VcsBaseSubmitEditor::raiseSubmitEditor()) + if (raiseSubmitEditor()) return; if (isCommitEditorOpen()) { VcsBaseOutputWindow::instance()->appendWarning(tr("Another commit is currently being executed.")); @@ -804,6 +804,7 @@ void CvsPlugin::startCommit(const QString &workingDir, const QStringList &files) m_commitMessageFileName = saver.fileName(); // Create a submit editor and set file list CvsSubmitEditor *editor = openCVSSubmitEditor(m_commitMessageFileName); + setSubmitEditor(editor); editor->setCheckScriptWorkingDirectory(m_commitRepository); editor->setStateList(statusOutput); } diff --git a/src/plugins/cvs/cvsplugin.h b/src/plugins/cvs/cvsplugin.h index ec8235ae47e05ab408c0d2ff9b41c57d6d077d55..09b8a43522060e6201151702e7f14600b8392d6c 100644 --- a/src/plugins/cvs/cvsplugin.h +++ b/src/plugins/cvs/cvsplugin.h @@ -131,7 +131,7 @@ private slots: protected: void updateActions(VcsBase::VcsBasePlugin::ActionState); - bool submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor); + bool submitEditorAboutToClose(); private: bool isCommitEditorOpen() const; diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index f80b661a6b011e89402171a740d03616d587752b..ef1053ca415d6baaf1a036002f2ee17b81485c30 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -125,7 +125,7 @@ using namespace Git::Internal; GitPlugin *GitPlugin::m_instance = 0; GitPlugin::GitPlugin() : - VcsBase::VcsBasePlugin(Git::Constants::GITSUBMITEDITOR_ID), + VcsBase::VcsBasePlugin(), m_commandLocator(0), m_submitCurrentAction(0), m_diffSelectedFilesAction(0), @@ -843,7 +843,7 @@ void GitPlugin::startCommit() void GitPlugin::startCommit(bool amend) { - if (VcsBase::VcsBaseSubmitEditor::raiseSubmitEditor()) + if (raiseSubmitEditor()) return; if (isCommitEditorOpen()) { VcsBase::VcsBaseOutputWindow::instance()->appendWarning(tr("Another submit is currently being executed.")); @@ -904,6 +904,7 @@ Core::IEditor *GitPlugin::openSubmitEditor(const QString &fileName, const Commit Core::EditorManager::ModeSwitch); GitSubmitEditor *submitEditor = qobject_cast<GitSubmitEditor*>(editor); QTC_ASSERT(submitEditor, return 0); + setSubmitEditor(submitEditor); // The actions are for some reason enabled by the context switching // mechanism. Disable them correctly. submitEditor->registerActions(m_undoAction, m_redoAction, m_submitCurrentAction, m_diffSelectedFilesAction); @@ -924,14 +925,14 @@ void GitPlugin::submitCurrentLog() Core::ICore::editorManager()->closeEditor(); } -bool GitPlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor) +bool GitPlugin::submitEditorAboutToClose() { if (!isCommitEditorOpen()) return false; - Core::IDocument *editorDocument = submitEditor->document(); - const GitSubmitEditor *editor = qobject_cast<GitSubmitEditor *>(submitEditor); - if (!editorDocument || !editor) - return true; + GitSubmitEditor *editor = qobject_cast<GitSubmitEditor *>(submitEditor()); + QTC_ASSERT(editor, return true); + Core::IDocument *editorDocument = editor->document(); + QTC_ASSERT(editorDocument, return true); // Submit editor closing. Make it write out the commit message // and retrieve files const QFileInfo editorFile(editorDocument->fileName()); diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h index d52e75a54c6acd050dc0098316e118d1ec24542c..711b81acd7ddc78c729d863aa0760114d3f5251c 100644 --- a/src/plugins/git/gitplugin.h +++ b/src/plugins/git/gitplugin.h @@ -149,7 +149,7 @@ private slots: #endif protected: void updateActions(VcsBase::VcsBasePlugin::ActionState); - bool submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor); + bool submitEditorAboutToClose(); private: inline ParameterActionCommandPair diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index ebdb31a91377a38d048ace1aea6d3f22ff5bafb2..e076c81dd72497235d20b43a036ea09d6ac057ab 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -115,7 +115,7 @@ static const VcsBaseSubmitEditorParameters submitEditorParameters = { MercurialPlugin *MercurialPlugin::m_instance = 0; MercurialPlugin::MercurialPlugin() : - VcsBasePlugin(Constants::COMMIT_ID), + VcsBasePlugin(), optionsPage(0), m_client(0), core(0), @@ -534,7 +534,7 @@ void MercurialPlugin::createSubmitEditorActions() void MercurialPlugin::commit() { - if (VcsBaseSubmitEditor::raiseSubmitEditor()) + if (raiseSubmitEditor()) return; const VcsBasePluginState state = currentState(); @@ -578,6 +578,7 @@ void MercurialPlugin::showCommitWidget(const QList<VcsBaseClient::StatusItem> &s QTC_ASSERT(qobject_cast<CommitEditor *>(editor), return); CommitEditor *commitEditor = static_cast<CommitEditor *>(editor); + setSubmitEditor(commitEditor); commitEditor->registerActions(editorUndo, editorRedo, editorCommit, editorDiff); connect(commitEditor, SIGNAL(diffSelectedFiles(QStringList)), @@ -606,12 +607,12 @@ void MercurialPlugin::commitFromEditor() Core::ICore::editorManager()->closeEditor(); } -bool MercurialPlugin::submitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor) +bool MercurialPlugin::submitEditorAboutToClose() { - Core::IDocument *editorFile = submitEditor->document(); - CommitEditor *commitEditor = qobject_cast<CommitEditor *>(submitEditor); - if (!editorFile || !commitEditor) - return true; + CommitEditor *commitEditor = qobject_cast<CommitEditor *>(submitEditor()); + QTC_ASSERT(commitEditor, return true); + Core::IDocument *editorFile = commitEditor->document(); + QTC_ASSERT(editorFile, return true); bool dummyPrompt = mercurialSettings.boolValue(MercurialSettings::promptOnSubmitKey); const VcsBaseSubmitEditor::PromptSubmitResult response = diff --git a/src/plugins/mercurial/mercurialplugin.h b/src/plugins/mercurial/mercurialplugin.h index a6c1265969be4a6e2955e1e17f42a0c41b6395d3..824bc04eb1fd1f7a7b777e1447d6df904f2c7cad 100644 --- a/src/plugins/mercurial/mercurialplugin.h +++ b/src/plugins/mercurial/mercurialplugin.h @@ -125,7 +125,7 @@ private slots: protected: void updateActions(VcsBase::VcsBasePlugin::ActionState); - bool submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor); + bool submitEditorAboutToClose(); private: void createMenu(); diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index c74d8004b76ec2908aa77ee94ed0d08c73d3e0d2..dbf348790488be2099c679048d55216505c3869b 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -176,7 +176,7 @@ PerforceResponse::PerforceResponse() : PerforcePlugin *PerforcePlugin::m_perforcePluginInstance = NULL; PerforcePlugin::PerforcePlugin() : - VcsBase::VcsBasePlugin(Constants::PERFORCE_SUBMIT_EDITOR_ID), + VcsBase::VcsBasePlugin(), m_commandLocator(0), m_editAction(0), m_addAction(0), @@ -596,7 +596,7 @@ void PerforcePlugin::printOpenedFileList() void PerforcePlugin::startSubmitProject() { - if (VcsBase::VcsBaseSubmitEditor::raiseSubmitEditor()) + if (raiseSubmitEditor()) return; if (isCommitEditorOpen()) { @@ -661,6 +661,7 @@ Core::IEditor *PerforcePlugin::openPerforceSubmitEditor(const QString &fileName, Core::IEditor *editor = Core::EditorManager::openEditor(fileName, Constants::PERFORCE_SUBMIT_EDITOR_ID, Core::EditorManager::ModeSwitch); PerforceSubmitEditor *submitEditor = static_cast<PerforceSubmitEditor*>(editor); + setSubmitEditor(submitEditor); submitEditor->restrictToProjectFiles(depotFileNames); submitEditor->registerActions(m_undoAction, m_redoAction, m_submitCurrentLogAction, m_diffSelectedFiles); connect(submitEditor, SIGNAL(diffSelectedFiles(QStringList)), this, SLOT(slotSubmitDiff(QStringList))); @@ -1321,14 +1322,14 @@ bool PerforcePlugin::isCommitEditorOpen() const return !m_commitMessageFileName.isEmpty(); } -bool PerforcePlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor) +bool PerforcePlugin::submitEditorAboutToClose() { if (!isCommitEditorOpen()) return true; - Core::IDocument *editorDocument = submitEditor->document(); - const PerforceSubmitEditor *perforceEditor = qobject_cast<PerforceSubmitEditor *>(submitEditor); - if (!editorDocument || !perforceEditor) - return true; + PerforceSubmitEditor *perforceEditor = qobject_cast<PerforceSubmitEditor *>(submitEditor()); + QTC_ASSERT(perforceEditor, return true); + Core::IDocument *editorDocument = perforceEditor->document(); + QTC_ASSERT(editorDocument, return true); // Prompt the user. Force a prompt unless submit was actually invoked (that // is, the editor was closed or shutdown). bool wantsPrompt = m_settings.promptToSubmit(); @@ -1371,7 +1372,7 @@ bool PerforcePlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *subm } VcsBase::VcsBaseOutputWindow::instance()->append(submitResponse.stdOut); if (submitResponse.stdOut.contains(QLatin1String("Out of date files must be resolved or reverted)"))) - QMessageBox::warning(submitEditor->widget(), tr("Pending change"), tr("Could not submit the change, because your workspace was out of date. Created a pending submit instead.")); + QMessageBox::warning(perforceEditor->widget(), tr("Pending change"), tr("Could not submit the change, because your workspace was out of date. Created a pending submit instead.")); cleanCommitMessageFile(); return true; diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h index bfde3f71a253337d20701f5ed4f2346288bc9622..8eeb1e232e3328af5b172c5c9a0ab64ec9259ab4 100644 --- a/src/plugins/perforce/perforceplugin.h +++ b/src/plugins/perforce/perforceplugin.h @@ -142,7 +142,7 @@ private slots: #endif protected: void updateActions(VcsBase::VcsBasePlugin::ActionState); - bool submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor); + bool submitEditorAboutToClose(); private: diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index 5c6f4b72e4de6b55e5e5191a3db823da4341b143..1dce476c37fffb4593ff74c6ed1b26040cc16a35 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -186,7 +186,7 @@ static inline QStringList svnDirectories() SubversionPlugin *SubversionPlugin::m_subversionPluginInstance = 0; SubversionPlugin::SubversionPlugin() : - VcsBase::VcsBasePlugin(Subversion::Constants::SUBVERSIONCOMMITEDITOR_ID), + VcsBase::VcsBasePlugin(), m_svnDirectories(svnDirectories()), m_commandLocator(0), m_addAction(0), @@ -455,15 +455,15 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *e return true; } -bool SubversionPlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor) +bool SubversionPlugin::submitEditorAboutToClose() { if (!isCommitEditorOpen()) return true; - Core::IDocument *editorDocument = submitEditor->document(); - const SubversionSubmitEditor *editor = qobject_cast<SubversionSubmitEditor *>(submitEditor); - if (!editorDocument || !editor) - return true; + SubversionSubmitEditor *editor = qobject_cast<SubversionSubmitEditor *>(submitEditor()); + QTC_ASSERT(editor, return true); + Core::IDocument *editorDocument = editor->document(); + QTC_ASSERT(editorDocument, return true); // Submit editor closing. Make it write out the commit message // and retrieve files @@ -623,6 +623,7 @@ SubversionSubmitEditor *SubversionPlugin::openSubversionSubmitEditor(const QStri Core::EditorManager::ModeSwitch); SubversionSubmitEditor *submitEditor = qobject_cast<SubversionSubmitEditor*>(editor); QTC_CHECK(submitEditor); + setSubmitEditor(submitEditor); submitEditor->registerActions(m_submitUndoAction, m_submitRedoAction, m_submitCurrentLogAction, m_submitDiffAction); connect(submitEditor, SIGNAL(diffSelectedFiles(QStringList)), this, SLOT(diffCommitFiles(QStringList))); submitEditor->setCheckScriptWorkingDirectory(m_commitRepository); @@ -766,7 +767,7 @@ void SubversionPlugin::startCommitProject() * commit will start. */ void SubversionPlugin::startCommit(const QString &workingDir, const QStringList &files) { - if (VcsBase::VcsBaseSubmitEditor::raiseSubmitEditor()) + if (raiseSubmitEditor()) return; if (isCommitEditorOpen()) { VcsBase::VcsBaseOutputWindow::instance()->appendWarning(tr("Another commit is currently being executed.")); diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h index b10c489b6edff125d9ae55f3b5d748de8dfa6acf..2020313a60cc7435fce2ef3ea003c7771e4c9e83 100644 --- a/src/plugins/subversion/subversionplugin.h +++ b/src/plugins/subversion/subversionplugin.h @@ -144,7 +144,7 @@ private slots: protected: void updateActions(VcsBase::VcsBasePlugin::ActionState); - bool submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor); + bool submitEditorAboutToClose(); private: inline bool isCommitEditorOpen() const; diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index 11991ac5753ba88ad10138944fcc49f26e498c53..7193f0deff5ad6a47ec8bedcdebf07bab9f8d1e8 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -490,11 +490,11 @@ VCSBASE_EXPORT QDebug operator<<(QDebug in, const VcsBasePluginState &state) struct VcsBasePluginPrivate { - explicit VcsBasePluginPrivate(const Core::Id submitEditorId); + explicit VcsBasePluginPrivate(); inline bool supportsRepositoryCreation() const; - const Core::Id m_submitEditorId; + QPointer<VcsBaseSubmitEditor> m_submitEditor; Core::IVersionControl *m_versionControl; VcsBasePluginState m_state; int m_actionState; @@ -507,8 +507,7 @@ struct VcsBasePluginPrivate static Internal::StateListener *m_listener; }; -VcsBasePluginPrivate::VcsBasePluginPrivate(const Core::Id submitEditorId) : - m_submitEditorId(submitEditorId), +VcsBasePluginPrivate::VcsBasePluginPrivate() : m_versionControl(0), m_actionState(-1), m_testSnapshotAction(0), @@ -525,8 +524,8 @@ bool VcsBasePluginPrivate::supportsRepositoryCreation() const Internal::StateListener *VcsBasePluginPrivate::m_listener = 0; -VcsBasePlugin::VcsBasePlugin(const Core::Id submitEditorId) : - d(new VcsBasePluginPrivate(submitEditorId)) +VcsBasePlugin::VcsBasePlugin() : + d(new VcsBasePluginPrivate()) { } @@ -561,9 +560,11 @@ void VcsBasePlugin::extensionsInitialized() void VcsBasePlugin::slotSubmitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor, bool *result) { if (debug) - qDebug() << this << d->m_submitEditorId.name() << "Closing submit editor" << submitEditor << submitEditor->id().name(); - if (submitEditor->id() == d->m_submitEditorId) - *result = submitEditorAboutToClose(submitEditor); + qDebug() << this << "plugin's submit editor" + << d->m_submitEditor << (d->m_submitEditor ? d->m_submitEditor->id().name() : "") + << "closing submit editor" << submitEditor << submitEditor->id().name(); + if (submitEditor == d->m_submitEditor) + *result = submitEditorAboutToClose(); } Core::IVersionControl *VcsBasePlugin::versionControl() const @@ -673,6 +674,26 @@ void VcsBasePlugin::createRepository() } } +void VcsBasePlugin::setSubmitEditor(VcsBaseSubmitEditor *submitEditor) +{ + d->m_submitEditor = submitEditor; +} + +VcsBaseSubmitEditor *VcsBasePlugin::submitEditor() const +{ + return d->m_submitEditor; +} + +bool VcsBasePlugin::raiseSubmitEditor() const +{ + if (!d->m_submitEditor) + return false; + Core::EditorManager::activateEditor( + d->m_submitEditor, + Core::EditorManager::IgnoreNavigationHistory | Core::EditorManager::ModeSwitch); + return true; +} + // For internal tests: Create actions driving IVersionControl's snapshot interface. QList<QAction*> VcsBasePlugin::createSnapShotTestActions() { diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h index ae018d9933afc6c17083a30528232a3b23076932..630f1d907a5f0dce82503de056c8b48f2c049e80 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.h +++ b/src/plugins/vcsbase/vcsbaseplugin.h @@ -127,7 +127,7 @@ class VCSBASE_EXPORT VcsBasePlugin : public ExtensionSystem::IPlugin Q_OBJECT protected: - explicit VcsBasePlugin(const Core::Id submitEditorId); + explicit VcsBasePlugin(); void initializeVcs(Core::IVersionControl *vc); virtual void extensionsInitialized(); @@ -207,10 +207,20 @@ public slots: protected: enum ActionState { NoVcsEnabled, OtherVcsEnabled, VcsEnabled }; + // Sets the current submit editor for this specific version control plugin. + // The plugin automatically checks if the submit editor is closed and calls + // submitEditorAboutToClose(). + // The method raiseSubmitEditor can be used to check for a running submit editor and raise it. + void setSubmitEditor(VcsBaseSubmitEditor *submitEditor); + // Current submit editor set through setSubmitEditor, if it wasn't closed inbetween + VcsBaseSubmitEditor *submitEditor() const; + // Tries to raise the submit editor set through setSubmitEditor. Returns true if that was found. + bool raiseSubmitEditor() const; + // Implement to enable the plugin menu actions according to state. virtual void updateActions(ActionState as) = 0; - // Implement to start the submit process. - virtual bool submitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor) = 0; + // Implement to start the submit process, use submitEditor() to get the submit editor instance. + virtual bool submitEditorAboutToClose() = 0; // A helper to enable the VCS menu action according to state: // NoVcsEnabled -> visible, enabled if repository creation is supported diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index 34c390200c58608d144912787db74c41a6dc2112..3383b72f3578b7c70b206e909eb047d828050d44 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -589,12 +589,12 @@ VcsBaseSubmitEditor::PromptSubmitResult const QString &checkFailureQuestion, bool *promptSetting, bool forcePrompt, - bool canCommitOnFailure) const + bool canCommitOnFailure) { - SubmitEditorWidget *submitWidget = - static_cast<SubmitEditorWidget *>(const_cast<VcsBaseSubmitEditor *>(this)->widget()); + SubmitEditorWidget *submitWidget = static_cast<SubmitEditorWidget *>(this->widget()); - raiseSubmitEditor(); + Core::EditorManager::activateEditor( + this, Core::EditorManager::IgnoreNavigationHistory | Core::EditorManager::ModeSwitch); QString errorMessage; QMessageBox::StandardButton answer = QMessageBox::Yes; @@ -814,23 +814,4 @@ void VcsBaseSubmitEditor::filterUntrackedFilesOfProject(const QString &repositor } } -// Helper to raise an already open submit editor to prevent opening twice. -bool VcsBaseSubmitEditor::raiseSubmitEditor() -{ - // Nothing to do? - if (Core::IEditor *ce = Core::EditorManager::currentEditor()) - if (qobject_cast<VcsBaseSubmitEditor*>(ce)) - return true; - // Try to activate a hidden one - Core::EditorManager *em = Core::EditorManager::instance(); - foreach (Core::IEditor *e, em->openedEditors()) { - if (qobject_cast<VcsBaseSubmitEditor*>(e)) { - Core::EditorManager::activateEditor(e, - Core::EditorManager::IgnoreNavigationHistory | Core::EditorManager::ModeSwitch); - return true; - } - } - return false; -} - } // namespace VcsBase diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h index 59d89a98994d2852a6991afcd8ce8d39a7a01b6a..a12e9e7c625fde049b40281b1b21ad89b654da3b 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.h +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h @@ -92,7 +92,7 @@ public: const QString &checkFailureQuestion, bool *promptSetting, bool forcePrompt = false, - bool canCommitOnFailure = true) const; + bool canCommitOnFailure = true); QAbstractItemView::SelectionMode fileListSelectionMode() const; void setFileListSelectionMode(QAbstractItemView::SelectionMode sm); @@ -145,9 +145,6 @@ public: // that are actually part of the current project(s). static void filterUntrackedFilesOfProject(const QString &repositoryDirectory, QStringList *untrackedFiles); - // Helper to raise an already open submit editor to prevent opening twice. - static bool raiseSubmitEditor(); - signals: void diffSelectedFiles(const QStringList &files); void diffSelectedFiles(const QList<int> &rows);