diff --git a/src/plugins/bazaar/bazaareditor.cpp b/src/plugins/bazaar/bazaareditor.cpp index 0f17923e440c72520f27c61bf446fcbc70177247..8657f2c4ceaf816d3037626fb2ba77aeadfa0973 100644 --- a/src/plugins/bazaar/bazaareditor.cpp +++ b/src/plugins/bazaar/bazaareditor.cpp @@ -41,8 +41,7 @@ using namespace Bazaar::Internal; using namespace Bazaar; -BazaarEditor::BazaarEditor(const VcsBase::VcsBaseEditorParameters *type, QWidget *parent) - : VcsBase::VcsBaseEditorWidget(type, parent), +BazaarEditor::BazaarEditor() : m_changesetId(QLatin1String(Constants::CHANGESET_ID)), m_exactChangesetId(QLatin1String(Constants::CHANGESET_ID_EXACT)) { diff --git a/src/plugins/bazaar/bazaareditor.h b/src/plugins/bazaar/bazaareditor.h index 7c36320404c437e48ab68557dff502b518cb96b6..dbbaf27cf76338c2b22765a88a30e6e551c689f3 100644 --- a/src/plugins/bazaar/bazaareditor.h +++ b/src/plugins/bazaar/bazaareditor.h @@ -41,7 +41,7 @@ class BazaarEditor : public VcsBase::VcsBaseEditorWidget Q_OBJECT public: - explicit BazaarEditor(const VcsBase::VcsBaseEditorParameters *type, QWidget *parent); + BazaarEditor(); private: QSet<QString> annotationChanges() const; diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp index 7327c8ea2cd2928aadea9e773832786ab1837f2b..5a5f2fca6862864ae196b989d9729e065a8f6778 100644 --- a/src/plugins/bazaar/bazaarplugin.cpp +++ b/src/plugins/bazaar/bazaarplugin.cpp @@ -166,8 +166,6 @@ bool BazaarPlugin::initialize(const QStringList &arguments, QString *errorMessag Q_UNUSED(arguments); Q_UNUSED(errorMessage); - typedef VcsEditorFactory<BazaarEditor> BazaarEditorFactory; - m_client = new BazaarClient(&m_bazaarSettings); initializeVcs(new BazaarControl(m_client)); @@ -179,8 +177,9 @@ bool BazaarPlugin::initialize(const QStringList &arguments, QString *errorMessag static const char *describeSlot = SLOT(view(QString,QString)); const int editorCount = sizeof(editorParameters) / sizeof(VcsBaseEditorParameters); + const auto widgetCreator = []() { return new BazaarEditor; }; for (int i = 0; i < editorCount; i++) - addAutoReleasedObject(new BazaarEditorFactory(editorParameters + i, m_client, describeSlot)); + addAutoReleasedObject(new VcsEditorFactory(editorParameters + i, widgetCreator, m_client, describeSlot)); addAutoReleasedObject(new VcsSubmitEditorFactory<CommitEditor>(&submitEditorParameters)); @@ -657,7 +656,8 @@ void BazaarPlugin::testDiffFileResolving_data() void BazaarPlugin::testDiffFileResolving() { - BazaarEditor editor(editorParameters + 2, 0); + BazaarEditor editor; + editor.setParameters(editorParameters + 2); editor.testDiffFileResolving(); } @@ -681,7 +681,8 @@ void BazaarPlugin::testLogResolving() " (gz) Set approved revision and vote \"Approve\" when using lp-propose\n" " --approve (Jonathan Lange)\n" ); - BazaarEditor editor(editorParameters, 0); + BazaarEditor editor; + editor.setParameters(editorParameters); editor.testLogResolving(data, "6572", "6571"); } #endif diff --git a/src/plugins/clearcase/clearcaseeditor.cpp b/src/plugins/clearcase/clearcaseeditor.cpp index 1d85248b0b64933b3c2df3e64297e966436befdf..5ed123636de7af0161848b1027f295cc41c2f559 100644 --- a/src/plugins/clearcase/clearcaseeditor.cpp +++ b/src/plugins/clearcase/clearcaseeditor.cpp @@ -44,9 +44,7 @@ using namespace ClearCase; using namespace ClearCase::Internal; -ClearCaseEditor::ClearCaseEditor(const VcsBase::VcsBaseEditorParameters *type, - QWidget *parent) : - VcsBase::VcsBaseEditorWidget(type, parent), +ClearCaseEditor::ClearCaseEditor() : m_versionNumberPattern(QLatin1String("[\\\\/]main[\\\\/][^ \t\n\"]*")) { QTC_ASSERT(m_versionNumberPattern.isValid(), return); diff --git a/src/plugins/clearcase/clearcaseeditor.h b/src/plugins/clearcase/clearcaseeditor.h index 396dd2e113d7cde65a430b08580b18537f2b9b64..2efaac758b69ed944508c36ba7a68f35db92bbd9 100644 --- a/src/plugins/clearcase/clearcaseeditor.h +++ b/src/plugins/clearcase/clearcaseeditor.h @@ -43,8 +43,7 @@ class ClearCaseEditor : public VcsBase::VcsBaseEditorWidget Q_OBJECT public: - explicit ClearCaseEditor(const VcsBase::VcsBaseEditorParameters *type, - QWidget *parent); + ClearCaseEditor(); private: QSet<QString> annotationChanges() const; diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 66ad105bc39eff89fbea9629a80c4407b5383df6..989a0a46896e08fd9a020379e8ab16f0159b60f4 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -437,7 +437,6 @@ static const VcsBase::VcsBaseSubmitEditorParameters submitParameters = { bool ClearCasePlugin::initialize(const QStringList & /*arguments */, QString *errorMessage) { typedef VcsBase::VcsSubmitEditorFactory<ClearCaseSubmitEditor> ClearCaseSubmitEditorFactory; - typedef VcsBase::VcsEditorFactory<ClearCaseEditor> ClearCaseEditorFactory; using namespace Constants; using namespace Core::Constants; @@ -466,8 +465,9 @@ bool ClearCasePlugin::initialize(const QStringList & /*arguments */, QString *er // any editor responds to describe (when clicking a version) static const char *describeSlot = SLOT(describe(QString,QString)); const int editorCount = sizeof(editorParameters)/sizeof(VcsBase::VcsBaseEditorParameters); + const auto widgetCreator = []() { return new ClearCaseEditor; }; for (int i = 0; i < editorCount; i++) - addAutoReleasedObject(new ClearCaseEditorFactory(editorParameters + i, this, describeSlot)); + addAutoReleasedObject(new VcsBase::VcsEditorFactory(editorParameters + i, widgetCreator, this, describeSlot)); const QString description = QLatin1String("ClearCase"); const QString prefix = QLatin1String("cc"); @@ -2229,7 +2229,8 @@ void ClearCasePlugin::testDiffFileResolving_data() void ClearCasePlugin::testDiffFileResolving() { - ClearCaseEditor editor(editorParameters + 2, 0); + ClearCaseEditor editor; + editor.setParameters(editorParameters + 2); editor.testDiffFileResolving(); } @@ -2239,7 +2240,8 @@ void ClearCasePlugin::testLogResolving() "13-Sep.17:41 user1 create version \"src/plugins/clearcase/clearcaseeditor.h@@/main/branch1/branch2/9\" (baseline1, baseline2, ...)\n" "22-Aug.14:13 user2 create version \"src/plugins/clearcase/clearcaseeditor.h@@/main/branch1/branch2/8\" (baseline3, baseline4, ...)\n" ); - ClearCaseEditor editor(editorParameters, 0); + ClearCaseEditor editor; + editor.setParameters(editorParameters); editor.testLogResolving(data, "src/plugins/clearcase/clearcaseeditor.h@@/main/branch1/branch2/9", "src/plugins/clearcase/clearcaseeditor.h@@/main/branch1/branch2/8"); diff --git a/src/plugins/cvs/cvseditor.cpp b/src/plugins/cvs/cvseditor.cpp index df1bdfd62b14c299366298d78ad14972d2e1e28b..abe49f6d942b65c93a81cc7427843873bac1b0eb 100644 --- a/src/plugins/cvs/cvseditor.cpp +++ b/src/plugins/cvs/cvseditor.cpp @@ -47,9 +47,7 @@ namespace Internal { #define CVS_REVISION_PATTERN "[\\d\\.]+" #define CVS_REVISION_AT_START_PATTERN "^(" CVS_REVISION_PATTERN ") " -CvsEditor::CvsEditor(const VcsBase::VcsBaseEditorParameters *type, - QWidget *parent) : - VcsBase::VcsBaseEditorWidget(type, parent), +CvsEditor::CvsEditor() : m_revisionAnnotationPattern(QLatin1String(CVS_REVISION_AT_START_PATTERN ".*$")), m_revisionLogPattern(QLatin1String("^revision *(" CVS_REVISION_PATTERN ")$")) { diff --git a/src/plugins/cvs/cvseditor.h b/src/plugins/cvs/cvseditor.h index a1307f73f5a6a306c019c02eeee09557a1b4f1d8..bc61b1efc4b10909385c572313c129bf6af0eb59 100644 --- a/src/plugins/cvs/cvseditor.h +++ b/src/plugins/cvs/cvseditor.h @@ -42,8 +42,7 @@ class CvsEditor : public VcsBase::VcsBaseEditorWidget Q_OBJECT public: - explicit CvsEditor(const VcsBase::VcsBaseEditorParameters *type, - QWidget *parent); + CvsEditor(); private: QSet<QString> annotationChanges() const; diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index 37f0716232bea1c55bf7ffae82376e2de500671d..b55ed542117b1ababab374b8ac1af254d8d88cae 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -231,7 +231,6 @@ bool CvsPlugin::initialize(const QStringList &arguments, QString *errorMessage) { Q_UNUSED(arguments); typedef VcsSubmitEditorFactory<CvsSubmitEditor> CVSSubmitEditorFactory; - typedef VcsEditorFactory<CvsEditor> CVSEditorFactory; using namespace Constants; using namespace Core::Constants; @@ -254,8 +253,9 @@ bool CvsPlugin::initialize(const QStringList &arguments, QString *errorMessage) static const char *describeSlotC = SLOT(slotDescribe(QString,QString)); const int editorCount = sizeof(editorParameters) / sizeof(editorParameters[0]); + const auto widgetCreator = []() { return new CvsEditor; }; for (int i = 0; i < editorCount; i++) - addAutoReleasedObject(new CVSEditorFactory(editorParameters + i, this, describeSlotC)); + addAutoReleasedObject(new VcsEditorFactory(editorParameters + i, widgetCreator, this, describeSlotC)); auto checkoutWizardFactory = new BaseCheckoutWizardFactory; checkoutWizardFactory->setId(QLatin1String(VcsBase::Constants::VCS_ID_CVS)); @@ -1318,7 +1318,8 @@ void CvsPlugin::testDiffFileResolving_data() void CvsPlugin::testDiffFileResolving() { - CvsEditor editor(editorParameters + 3, 0); + CvsEditor editor; + editor.setParameters(editorParameters + 3); editor.testDiffFileResolving(); } @@ -1345,7 +1346,8 @@ void CvsPlugin::testLogResolving() "added latest commentary\n" "----------------------------\n" ); - CvsEditor editor(editorParameters + 1, 0); + CvsEditor editor; + editor.setParameters(editorParameters + 1); editor.testLogResolving(data, "1.3", "1.2"); } #endif diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp index 99e17b3a346314d826036602545b8afa6e75e119..c8d00dd7c0cdee4832ff8d4c913a187437963680 100644 --- a/src/plugins/git/giteditor.cpp +++ b/src/plugins/git/giteditor.cpp @@ -58,8 +58,7 @@ namespace Git { namespace Internal { -GitEditorWidget::GitEditorWidget(const VcsBase::VcsBaseEditorParameters *type, QWidget *parent) : - VcsBase::VcsBaseEditorWidget(type, parent), +GitEditorWidget::GitEditorWidget() : m_changeNumberPattern(QLatin1String(CHANGE_PATTERN)) { QTC_ASSERT(m_changeNumberPattern.isValid(), return); diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h index f1604e3227f325ca037001113cb67c0bd608be85..338e5e9fb6479b9bb00bc3c7095fb32586c445ac 100644 --- a/src/plugins/git/giteditor.h +++ b/src/plugins/git/giteditor.h @@ -46,8 +46,7 @@ class GitEditorWidget : public VcsBase::VcsBaseEditorWidget Q_OBJECT public: - GitEditorWidget(const VcsBase::VcsBaseEditorParameters *type, - QWidget *parent); + GitEditorWidget(); public slots: void setPlainTextFiltered(const QString &text); diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 4e363101e3d11b10214ce3fd0fe53803c3dffc08..ee4298ff5827eb2cbf5dae36f58a7dac8c118198 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -280,7 +280,6 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) m_gitClient = new GitClient(&m_settings); - typedef VcsEditorFactory<GitEditorWidget> GitEditorFactory; typedef VcsSubmitEditorFactory<GitSubmitEditor> GitSubmitEditorFactory; initializeVcs(new GitVersionControl(m_gitClient)); @@ -293,8 +292,9 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) static const char *describeSlot = SLOT(show(QString,QString)); const int editorCount = sizeof(editorParameters) / sizeof(editorParameters[0]); + const auto widgetCreator = []() { return new GitEditorWidget; }; for (int i = 0; i < editorCount; i++) - addAutoReleasedObject(new GitEditorFactory(editorParameters + i, m_gitClient, describeSlot)); + addAutoReleasedObject(new VcsEditorFactory(editorParameters + i, widgetCreator, m_gitClient, describeSlot)); addAutoReleasedObject(new GitSubmitEditorFactory(&submitParameters)); @@ -1523,7 +1523,8 @@ void GitPlugin::testDiffFileResolving_data() void GitPlugin::testDiffFileResolving() { - GitEditorWidget editor(editorParameters + 3, 0); + GitEditorWidget editor; + editor.setParameters(editorParameters + 3); editor.testDiffFileResolving(); } @@ -1549,7 +1550,8 @@ void GitPlugin::testLogResolving() " \n" " Signed-off-by: Junio C Hamano <gitster@pobox.com>\n" ); - GitEditorWidget editor(editorParameters + 1, 0); + GitEditorWidget editor; + editor.setParameters(editorParameters + 1); editor.testLogResolving(data, "50a6b54c - Merge branch 'for-junio' of git://bogomips.org/git-svn", "3587b513 - Update draft release notes to 1.8.2"); diff --git a/src/plugins/mercurial/mercurialeditor.cpp b/src/plugins/mercurial/mercurialeditor.cpp index 81ed8bb257180df555db602b6ffcf4abde023a76..ef3676464aa473fa4928224bac774cae6889fdf9 100644 --- a/src/plugins/mercurial/mercurialeditor.cpp +++ b/src/plugins/mercurial/mercurialeditor.cpp @@ -46,8 +46,7 @@ using namespace Mercurial::Internal; using namespace Mercurial; -MercurialEditor::MercurialEditor(const VcsBase::VcsBaseEditorParameters *type, QWidget *parent) - : VcsBase::VcsBaseEditorWidget(type, parent), +MercurialEditor::MercurialEditor() : exactIdentifier12(QLatin1String(Constants::CHANGEIDEXACT12)), exactIdentifier40(QLatin1String(Constants::CHANGEIDEXACT40)), changesetIdentifier12(QLatin1String(Constants::CHANGESETID12)), diff --git a/src/plugins/mercurial/mercurialeditor.h b/src/plugins/mercurial/mercurialeditor.h index cda4ae94d9caafbdf24c9e426b4ba362bf7746c5..57e040dcd198417459053dc0cc530b7e7f8c7aca 100644 --- a/src/plugins/mercurial/mercurialeditor.h +++ b/src/plugins/mercurial/mercurialeditor.h @@ -41,7 +41,7 @@ class MercurialEditor : public VcsBase::VcsBaseEditorWidget { Q_OBJECT public: - explicit MercurialEditor(const VcsBase::VcsBaseEditorParameters *type, QWidget *parent); + MercurialEditor(); private: QSet<QString> annotationChanges() const; diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index 5908f0eec1214c8fca4f4d64569fbb69b4cb05a9..e184958a474d12ba8fb03796e00d7b46a5c613f7 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -139,8 +139,6 @@ MercurialPlugin::~MercurialPlugin() bool MercurialPlugin::initialize(const QStringList & /* arguments */, QString * /*errorMessage */) { - typedef VcsEditorFactory<MercurialEditor> MercurialEditorFactory; - m_client = new MercurialClient(&mercurialSettings); initializeVcs(new MercurialControl(m_client)); @@ -153,8 +151,9 @@ bool MercurialPlugin::initialize(const QStringList & /* arguments */, QString * static const char *describeSlot = SLOT(view(QString,QString)); const int editorCount = sizeof(editorParameters)/sizeof(editorParameters[0]); + const auto widgetCreator = []() { return new MercurialEditor; }; for (int i = 0; i < editorCount; i++) - addAutoReleasedObject(new MercurialEditorFactory(editorParameters + i, m_client, describeSlot)); + addAutoReleasedObject(new VcsEditorFactory(editorParameters + i, widgetCreator, m_client, describeSlot)); addAutoReleasedObject(new VcsSubmitEditorFactory<CommitEditor>(&submitEditorParameters)); @@ -726,7 +725,8 @@ void MercurialPlugin::testDiffFileResolving_data() void MercurialPlugin::testDiffFileResolving() { - MercurialEditor editor(editorParameters + 2, 0); + MercurialEditor editor; + editor.setParameters(editorParameters + 2); editor.testDiffFileResolving(); } @@ -747,7 +747,8 @@ void MercurialPlugin::testLogResolving() "date: Sat Jan 19 04:08:16 2013 +0100\n" "summary: test-rebase: add another test for rebase with multiple roots\n" ); - MercurialEditor editor(editorParameters, 0); + MercurialEditor editor; + editor.setParameters(editorParameters); editor.testLogResolving(data, "18473:692cbda1eb50", "18472:37100f30590f"); } #endif diff --git a/src/plugins/perforce/perforceeditor.cpp b/src/plugins/perforce/perforceeditor.cpp index 5865a09bd547f0b73a940d9c8ed2e62f4e1bf637..394e8b4a09cda4c7e26b18d77039554e42d6586b 100644 --- a/src/plugins/perforce/perforceeditor.cpp +++ b/src/plugins/perforce/perforceeditor.cpp @@ -56,9 +56,7 @@ namespace Perforce { namespace Internal { // ------------ PerforceEditor -PerforceEditor::PerforceEditor(const VcsBase::VcsBaseEditorParameters *type, - QWidget *parent) : - VcsBase::VcsBaseEditorWidget(type, parent), +PerforceEditor::PerforceEditor() : m_changeNumberPattern(QLatin1String("^\\d+$")) { QTC_CHECK(m_changeNumberPattern.isValid()); @@ -70,8 +68,6 @@ PerforceEditor::PerforceEditor(const VcsBase::VcsBaseEditorParameters *type, setDiffFilePattern(QRegExp(QLatin1String("^(?:={4}|\\+{3}) (.+)(?:\\t|#\\d)"))); setLogEntryPattern(QRegExp(QLatin1String("^... #\\d change (\\d+) "))); setAnnotateRevisionTextFormat(tr("Annotate change list \"%1\"")); - if (Perforce::Constants::debug) - qDebug() << "PerforceEditor::PerforceEditor" << type->type << type->id; } QSet<QString> PerforceEditor::annotationChanges() const diff --git a/src/plugins/perforce/perforceeditor.h b/src/plugins/perforce/perforceeditor.h index 1abc5227ade92abed2408b0aa02e23639bbca0a5..ff67549bd691f4052b83c5bebe8e1a9d5f380014 100644 --- a/src/plugins/perforce/perforceeditor.h +++ b/src/plugins/perforce/perforceeditor.h @@ -37,15 +37,12 @@ namespace Perforce { namespace Internal { -class PerforcePlugin; - class PerforceEditor : public VcsBase::VcsBaseEditorWidget { Q_OBJECT public: - explicit PerforceEditor(const VcsBase::VcsBaseEditorParameters *type, - QWidget *parent); + PerforceEditor(); private: QSet<QString> annotationChanges() const; diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index 498c1688248d20f57738e66805922af5cfc0950a..582a20cfcd63730a3a6a4c33cb58f7c557ca5cf9 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -227,7 +227,6 @@ static const VcsBaseSubmitEditorParameters submitParameters = { bool PerforcePlugin::initialize(const QStringList & /* arguments */, QString *errorMessage) { - typedef VcsEditorFactory<PerforceEditor> PerforceEditorFactory; typedef VcsSubmitEditorFactory<PerforceSubmitEditor> PerforceSubmitEditorFactory; initializeVcs(new PerforceVersionControl(this)); @@ -245,8 +244,9 @@ bool PerforcePlugin::initialize(const QStringList & /* arguments */, QString *er static const char *describeSlot = SLOT(describe(QString,QString)); const int editorCount = sizeof(editorParameters) / sizeof(editorParameters[0]); + const auto widgetCreator = []() { return new PerforceEditor; }; for (int i = 0; i < editorCount; i++) - addAutoReleasedObject(new PerforceEditorFactory(editorParameters + i, this, describeSlot)); + addAutoReleasedObject(new VcsEditorFactory(editorParameters + i, widgetCreator, this, describeSlot)); const QString prefix = QLatin1String("p4"); m_commandLocator = new CommandLocator("Perforce", prefix, prefix); @@ -1557,13 +1557,14 @@ void PerforcePlugin::testLogResolving() "\n" " Comment\n" ); - PerforceEditor editor(editorParameters, 0); + PerforceEditor editor; + editor.setParameters(editorParameters); editor.testLogResolving(data, "12345", "12344"); } #endif -} -} +} // namespace Internal +} // namespace Perforce Q_EXPORT_PLUGIN(Perforce::Internal::PerforcePlugin) diff --git a/src/plugins/subversion/subversioneditor.cpp b/src/plugins/subversion/subversioneditor.cpp index b7deb0f5868955bc8edd6d0258a0dca14f74a5c6..11e30f3590b9be82d58f11aa8e52ca2a832ed998 100644 --- a/src/plugins/subversion/subversioneditor.cpp +++ b/src/plugins/subversion/subversioneditor.cpp @@ -44,9 +44,7 @@ using namespace Subversion; using namespace Subversion::Internal; -SubversionEditor::SubversionEditor(const VcsBase::VcsBaseEditorParameters *type, - QWidget *parent) : - VcsBase::VcsBaseEditorWidget(type, parent), +SubversionEditor::SubversionEditor() : m_changeNumberPattern(QLatin1String("^\\d+$")), m_revisionNumberPattern(QLatin1String("^r\\d+$")) { diff --git a/src/plugins/subversion/subversioneditor.h b/src/plugins/subversion/subversioneditor.h index 2777eded9a0741ef743499df6102690210062c88..9941db4d170852c5982dbe8899fbbac31c6bb97d 100644 --- a/src/plugins/subversion/subversioneditor.h +++ b/src/plugins/subversion/subversioneditor.h @@ -42,8 +42,7 @@ class SubversionEditor : public VcsBase::VcsBaseEditorWidget Q_OBJECT public: - explicit SubversionEditor(const VcsBase::VcsBaseEditorParameters *type, - QWidget *parent); + SubversionEditor(); private: QSet<QString> annotationChanges() const; diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index eb2fbef1b7fa8e37f7397ee8edfb832f911bb014..fc4c2dd7e984cee34930913ed8f7c9348d6c0332 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -248,7 +248,6 @@ const VcsBaseSubmitEditorParameters submitParameters = { bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *errorMessage) { typedef VcsSubmitEditorFactory<SubversionSubmitEditor> SubversionSubmitEditorFactory; - typedef VcsEditorFactory<SubversionEditor> SubversionEditorFactory; using namespace Constants; using namespace Core::Constants; @@ -270,8 +269,9 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *e static const char *describeSlot = SLOT(describe(QString,QString)); const int editorCount = sizeof(editorParameters) / sizeof(editorParameters[0]); + const auto widgetCreator = []() { return new SubversionEditor; }; for (int i = 0; i < editorCount; i++) - addAutoReleasedObject(new SubversionEditorFactory(editorParameters + i, this, describeSlot)); + addAutoReleasedObject(new VcsEditorFactory(editorParameters + i, widgetCreator, this, describeSlot)); auto checkoutWizardFactory = new BaseCheckoutWizardFactory; checkoutWizardFactory->setId(QLatin1String(VcsBase::Constants::VCS_ID_SUBVERSION)); @@ -1282,7 +1282,8 @@ void SubversionPlugin::testDiffFileResolving_data() void SubversionPlugin::testDiffFileResolving() { - SubversionEditor editor(editorParameters + 2, 0); + SubversionEditor editor; + editor.setParameters(editorParameters + 2); editor.testDiffFileResolving(); } @@ -1304,7 +1305,8 @@ void SubversionPlugin::testLogResolving() " expectations, remove XFail.\n" "\n" ); - SubversionEditor editor(editorParameters, 0); + SubversionEditor editor; + editor.setParameters(editorParameters); editor.testLogResolving(data, "r1439551", "r1439540"); } #endif diff --git a/src/plugins/vcsbase/basevcseditorfactory.cpp b/src/plugins/vcsbase/basevcseditorfactory.cpp index 73289913295aafd2489a6e6f501b5d403179f0b5..e7f3dd1e337340efa732e8e5fa8ef4eb6a951bdb 100644 --- a/src/plugins/vcsbase/basevcseditorfactory.cpp +++ b/src/plugins/vcsbase/basevcseditorfactory.cpp @@ -37,6 +37,8 @@ #include <QCoreApplication> #include <QStringList> +using namespace TextEditor; + /*! \class VcsBase::BaseVCSEditorFactory @@ -52,44 +54,57 @@ namespace Internal { class BaseVcsEditorFactoryPrivate { public: - const VcsBaseEditorParameters *m_type; + const VcsBaseEditorParameters *m_parameters; QObject *m_describeReceiver; const char *m_describeSlot; + BaseTextEditor::WidgetCreator m_widgetCreator; }; } // namespace Internal -BaseVcsEditorFactory::BaseVcsEditorFactory(const VcsBaseEditorParameters *t, - QObject *describeReceiver, const char *describeSlot) +VcsEditorFactory::VcsEditorFactory(const VcsBaseEditorParameters *parameters, + const BaseTextEditor::WidgetCreator &creator, + QObject *describeReceiver, const char *describeSlot) : d(new Internal::BaseVcsEditorFactoryPrivate) { - d->m_type = t; + d->m_parameters = parameters; d->m_describeReceiver = describeReceiver; d->m_describeSlot = describeSlot; - setId(t->id); - setDisplayName(QCoreApplication::translate("VCS", t->displayName)); - if (QLatin1String(t->mimeType) != QLatin1String(DiffEditor::Constants::DIFF_EDITOR_MIMETYPE)) - addMimeType(t->mimeType); - new TextEditor::TextEditorActionHandler(this, t->context); + d->m_widgetCreator = creator; + setId(parameters->id); + setDisplayName(QCoreApplication::translate("VCS", parameters->displayName)); + if (QLatin1String(parameters->mimeType) != QLatin1String(DiffEditor::Constants::DIFF_EDITOR_MIMETYPE)) + addMimeType(parameters->mimeType); + new TextEditor::TextEditorActionHandler(this, parameters->context); } -BaseVcsEditorFactory::~BaseVcsEditorFactory() +VcsEditorFactory::~VcsEditorFactory() { delete d; } -Core::IEditor *BaseVcsEditorFactory::createEditor() +Core::IEditor *VcsEditorFactory::createEditor() { - VcsBaseEditorWidget *vcsEditor = createVcsBaseEditor(d->m_type); + TextEditor::BaseTextEditor *editor = new VcsBaseEditor(d->m_parameters); + + VcsBaseEditorWidget *widget = qobject_cast<VcsBaseEditorWidget *>(d->m_widgetCreator()); + widget->setParameters(d->m_parameters); + + // Pass on signals. + connect(widget, SIGNAL(describeRequested(QString,QString)), + editor, SIGNAL(describeRequested(QString,QString))); + connect(widget, SIGNAL(annotateRevisionRequested(QString,QString,QString,int)), + editor, SIGNAL(annotateRevisionRequested(QString,QString,QString,int))); + editor->setEditorWidget(widget); - vcsEditor->init(); + widget->init(); if (d->m_describeReceiver) - connect(vcsEditor, SIGNAL(describeRequested(QString,QString)), d->m_describeReceiver, d->m_describeSlot); + connect(widget, SIGNAL(describeRequested(QString,QString)), d->m_describeReceiver, d->m_describeSlot); if (!mimeTypes().isEmpty()) - vcsEditor->textDocument()->setMimeType(mimeTypes().front()); + widget->textDocument()->setMimeType(mimeTypes().front()); - return vcsEditor->editor(); + return editor; } } // namespace VcsBase diff --git a/src/plugins/vcsbase/basevcseditorfactory.h b/src/plugins/vcsbase/basevcseditorfactory.h index e25465acdd8c46e9cee2d76a21363a4805058800..b9a71ee5cb8b3df3a63d10f80515f008445648f0 100644 --- a/src/plugins/vcsbase/basevcseditorfactory.h +++ b/src/plugins/vcsbase/basevcseditorfactory.h @@ -34,48 +34,28 @@ #include "vcsbaseeditor.h" #include <coreplugin/editormanager/ieditorfactory.h> +#include <texteditor/basetexteditor.h> namespace VcsBase { namespace Internal { class BaseVcsEditorFactoryPrivate; } -class VCSBASE_EXPORT BaseVcsEditorFactory : public Core::IEditorFactory +class VCSBASE_EXPORT VcsEditorFactory : public Core::IEditorFactory { Q_OBJECT public: - explicit BaseVcsEditorFactory(const VcsBaseEditorParameters *type, - QObject *describeReceiver, - const char *describeSlot); - ~BaseVcsEditorFactory(); + VcsEditorFactory(const VcsBaseEditorParameters *type, + const TextEditor::BaseTextEditor::WidgetCreator &creator, + QObject *describeReceiver, + const char *describeSlot); + ~VcsEditorFactory(); Core::IEditor *createEditor(); private: - // Implement to create and initialize (call init()) a VcsBaseEditor subclass. - virtual VcsBaseEditorWidget *createVcsBaseEditor(const VcsBaseEditorParameters *type) = 0; - Internal::BaseVcsEditorFactoryPrivate *const d; }; -// Utility template to create an editor. -template <class Editor> -class VcsEditorFactory : public BaseVcsEditorFactory -{ -public: - explicit VcsEditorFactory(const VcsBaseEditorParameters *type, - QObject *describeReceiver = 0, - const char *describeSlot = 0) - : BaseVcsEditorFactory(type, describeReceiver, describeSlot) - { - } - -private: - VcsBaseEditorWidget *createVcsBaseEditor(const VcsBaseEditorParameters *type) - { - return new Editor(type, 0); - } -}; - } // namespace VcsBase #endif // BASEVCSEDITORFACTORY_H diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index ba9f689f00875c7bfe16d3c946c1b23549560a1b..8f031cb8afbcbec13b37f164d3573cf5427a18e4 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -150,18 +150,6 @@ namespace VcsBase { manager passes the editor around. */ -class VcsBaseEditor : public TextEditor::BaseTextEditor -{ - Q_OBJECT -public: - explicit VcsBaseEditor(const VcsBaseEditorParameters *type); - -signals: - void describeRequested(const QString &source, const QString &change); - void annotateRevisionRequested(const QString &workingDirectory, const QString &file, - const QString &change, int line); -}; - VcsBaseEditor::VcsBaseEditor(const VcsBaseEditorParameters *type) { setContext(Core::Context(type->context, TextEditor::Constants::C_TEXTEDITOR)); @@ -547,13 +535,14 @@ void EmailTextCursorHandler::slotOpenUrl() class VcsBaseEditorWidgetPrivate { public: - VcsBaseEditorWidgetPrivate(VcsBaseEditorWidget* editorWidget, const VcsBaseEditorParameters *type); + VcsBaseEditorWidgetPrivate(VcsBaseEditorWidget *editorWidget); AbstractTextCursorHandler *findTextCursorHandler(const QTextCursor &cursor); // creates a browse combo in the toolbar for quick access to entries. // Can be used for diff and log. Combo created on first call. QComboBox *entriesComboBox(); + TextEditor::BaseTextEditorWidget *q; const VcsBaseEditorParameters *m_parameters; QString m_workingDirectory; @@ -566,7 +555,6 @@ public: QString m_annotatePreviousRevisionTextFormat; QString m_copyRevisionTextFormat; bool m_fileLogAnnotateEnabled; - TextEditor::BaseTextEditor *m_editor; VcsBaseEditorParameterWidget *m_configurationWidget; bool m_mouseDragging; QList<AbstractTextCursorHandler *> m_textCursorHandlers; @@ -576,14 +564,13 @@ private: QComboBox *m_entriesComboBox; }; -VcsBaseEditorWidgetPrivate::VcsBaseEditorWidgetPrivate(VcsBaseEditorWidget *editorWidget, - const VcsBaseEditorParameters *type) : - m_parameters(type), +VcsBaseEditorWidgetPrivate::VcsBaseEditorWidgetPrivate(VcsBaseEditorWidget *editorWidget) : + q(editorWidget), + m_parameters(0), m_cursorLine(-1), m_annotateRevisionTextFormat(VcsBaseEditorWidget::tr("Annotate \"%1\"")), m_copyRevisionTextFormat(VcsBaseEditorWidget::tr("Copy \"%1\"")), m_fileLogAnnotateEnabled(false), - m_editor(0), m_configurationWidget(0), m_mouseDragging(false), m_entriesComboBox(0) @@ -613,8 +600,7 @@ QComboBox *VcsBaseEditorWidgetPrivate::entriesComboBox() policy.setHorizontalPolicy(QSizePolicy::Expanding); m_entriesComboBox->setSizePolicy(policy); - m_editor->editorWidget()->insertExtraToolBarWidget - (TextEditor::BaseTextEditorWidget::Left, m_entriesComboBox); + q->insertExtraToolBarWidget(TextEditor::BaseTextEditorWidget::Left, m_entriesComboBox); return m_entriesComboBox; } @@ -647,15 +633,20 @@ QComboBox *VcsBaseEditorWidgetPrivate::entriesComboBox() \sa VcsBase::BaseVcsEditorFactory, VcsBase::VcsBaseEditorParameters, VcsBase::EditorContentType */ -VcsBaseEditorWidget::VcsBaseEditorWidget(const VcsBaseEditorParameters *type, QWidget *parent) - : BaseTextEditorWidget(parent), - d(new Internal::VcsBaseEditorWidgetPrivate(this, type)) +VcsBaseEditorWidget::VcsBaseEditorWidget() + : d(new Internal::VcsBaseEditorWidgetPrivate(this)) { + viewport()->setMouseTracking(true); BaseTextDocumentPtr doc(new BaseTextDocument); - doc->setId(type->id); - doc->setMimeType(QLatin1String(d->m_parameters->mimeType)); setTextDocument(doc); - viewport()->setMouseTracking(true); +} + +void VcsBaseEditorWidget::setParameters(const VcsBaseEditorParameters *parameters) +{ + QTC_CHECK(d->m_parameters == 0); + d->m_parameters = parameters; + textDocument()->setId(d->m_parameters->id); + textDocument()->setMimeType(QLatin1String(d->m_parameters->mimeType)); } void VcsBaseEditorWidget::setDiffFilePattern(const QRegExp &pattern) @@ -689,7 +680,6 @@ QString VcsBaseEditorWidget::fileNameForLine(int line) const void VcsBaseEditorWidget::init() { - d->m_editor = editor(); switch (d->m_parameters->type) { case OtherContent: break; @@ -817,14 +807,7 @@ bool VcsBaseEditorWidget::isModified() const TextEditor::BaseTextEditor *VcsBaseEditorWidget::createEditor() { - TextEditor::BaseTextEditor *editor = new VcsBaseEditor(d->m_parameters); - - // Pass on signals. - connect(this, SIGNAL(describeRequested(QString,QString)), - editor, SIGNAL(describeRequested(QString,QString))); - connect(this, SIGNAL(annotateRevisionRequested(QString,QString,QString,int)), - editor, SIGNAL(annotateRevisionRequested(QString,QString,QString,int))); - return editor; + QTC_ASSERT("should not happen anymore" && false, return 0); } void VcsBaseEditorWidget::slotPopulateDiffBrowser() @@ -1334,11 +1317,11 @@ QString VcsBaseEditorWidget::getTitleId(const QString &workingDirectory, bool VcsBaseEditorWidget::setConfigurationWidget(VcsBaseEditorParameterWidget *w) { - if (!d->m_editor || d->m_configurationWidget) + if (d->m_configurationWidget) return false; d->m_configurationWidget = w; - d->m_editor->editorWidget()->insertExtraToolBarWidget(TextEditor::BaseTextEditorWidget::Right, w); + insertExtraToolBarWidget(TextEditor::BaseTextEditorWidget::Right, w); return true; } @@ -1569,8 +1552,21 @@ Core::IEditor* VcsBaseEditorWidget::locateEditorByTag(const QString &tag) #ifdef WITH_TESTS #include <QTest> +// Tests need a fully set-up editor/widget combo. +void VcsBase::VcsBaseEditorWidget::addDummyEditor() +{ + TextEditor::BaseTextEditor *editor = new VcsBaseEditor(d->m_parameters); + // Pass on signals. + connect(this, SIGNAL(describeRequested(QString,QString)), + editor, SIGNAL(describeRequested(QString,QString))); + connect(this, SIGNAL(annotateRevisionRequested(QString,QString,QString,int)), + editor, SIGNAL(annotateRevisionRequested(QString,QString,QString,int))); + editor->setEditorWidget(this); +} + void VcsBase::VcsBaseEditorWidget::testDiffFileResolving() { + addDummyEditor(); QFETCH(QByteArray, header); QFETCH(QByteArray, fileName); QTextDocument doc(QString::fromLatin1(header)); @@ -1583,6 +1579,7 @@ void VcsBase::VcsBaseEditorWidget::testLogResolving(QByteArray &data, const QByteArray &entry1, const QByteArray &entry2) { + addDummyEditor(); init(); textDocument()->setPlainText(QLatin1String(data)); QCOMPARE(d->entriesComboBox()->itemText(0), QString::fromLatin1(entry1)); diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h index 22f7e32007e8a5b4018e9122c630c1295ff70c37..3744df146d6aecff29d32c2d5a6d38c2880680a4 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.h +++ b/src/plugins/vcsbase/vcsbaseeditor.h @@ -87,6 +87,18 @@ public: QByteArray header; }; +class VcsBaseEditor : public TextEditor::BaseTextEditor +{ + Q_OBJECT +public: + explicit VcsBaseEditor(const VcsBaseEditorParameters *type); + +signals: + void describeRequested(const QString &source, const QString &change); + void annotateRevisionRequested(const QString &workingDirectory, const QString &file, + const QString &change, int line); +}; + class VCSBASE_EXPORT VcsBaseEditorWidget : public TextEditor::BaseTextEditorWidget { Q_PROPERTY(QString source READ source WRITE setSource) @@ -100,8 +112,7 @@ class VCSBASE_EXPORT VcsBaseEditorWidget : public TextEditor::BaseTextEditorWidg protected: // Initialization requires calling init() (which in turns calls // virtual functions). - explicit VcsBaseEditorWidget(const VcsBaseEditorParameters *type, - QWidget *parent); + VcsBaseEditorWidget(); // Pattern for diff header. File name must be in the first capture group void setDiffFilePattern(const QRegExp &pattern); // Pattern for log entry. hash/revision number must be in the first capture group @@ -111,6 +122,8 @@ protected: public: virtual void init(); + // + void setParameters(const VcsBaseEditorParameters *parameters); ~VcsBaseEditorWidget(); @@ -281,6 +294,7 @@ private: #ifdef WITH_TESTS public: + void addDummyEditor(); void testDiffFileResolving(); void testLogResolving(QByteArray &data, const QByteArray &entry1, const QByteArray &entry2); #endif