diff options
author | hjk <hjk@qt.io> | 2020-02-05 17:51:41 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2020-02-10 13:54:39 +0000 |
commit | 9c934ed44cd107adcef85898393ffc02e0f29e5d (patch) | |
tree | c1219b52429e61fac27c1acc4422c91799c492ad | |
parent | e12ba2d68312434f50437c3b01f12834926eeb3b (diff) |
TextEditor: De-QObject-ify TextEditorActionHandler
Change-Id: I8c4919b89ce35d421edd4a21a650d5e0df4a7ead
Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r-- | src/plugins/android/androidmanifesteditorfactory.cpp | 10 | ||||
-rw-r--r-- | src/plugins/android/androidmanifesteditorfactory.h | 5 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditorfactory.cpp | 50 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditorfactory.h | 8 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 3 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditoractionhandler.cpp | 28 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditoractionhandler.h | 15 |
7 files changed, 65 insertions, 54 deletions
diff --git a/src/plugins/android/androidmanifesteditorfactory.cpp b/src/plugins/android/androidmanifesteditorfactory.cpp index 1a412bac49..347ee6cac8 100644 --- a/src/plugins/android/androidmanifesteditorfactory.cpp +++ b/src/plugins/android/androidmanifesteditorfactory.cpp @@ -29,22 +29,20 @@ #include "androidmanifesteditor.h" #include <coreplugin/id.h> -#include <texteditor/texteditoractionhandler.h> #include <texteditor/texteditorsettings.h> using namespace Android; using namespace Android::Internal; AndroidManifestEditorFactory::AndroidManifestEditorFactory() + : m_actionHandler(Constants::ANDROID_MANIFEST_EDITOR_ID, + Constants::ANDROID_MANIFEST_EDITOR_CONTEXT, + TextEditor::TextEditorActionHandler::None, + [](Core::IEditor *editor) { return static_cast<AndroidManifestEditor *>(editor)->textEditor(); }) { setId(Constants::ANDROID_MANIFEST_EDITOR_ID); setDisplayName(AndroidManifestEditorWidget::tr("Android Manifest editor")); addMimeType(Constants::ANDROID_MANIFEST_MIME_TYPE); - auto actionHandler = new TextEditor::TextEditorActionHandler( - this, id(), Constants::ANDROID_MANIFEST_EDITOR_CONTEXT); - actionHandler->setTextEditorWidgetResolver([](Core::IEditor *editor) { - return static_cast<AndroidManifestEditor *>(editor)->textEditor(); - }); setEditorCreator([] { auto androidManifestEditorWidget = new AndroidManifestEditorWidget; return androidManifestEditorWidget->editor(); diff --git a/src/plugins/android/androidmanifesteditorfactory.h b/src/plugins/android/androidmanifesteditorfactory.h index b73eab9ecb..b56951d15e 100644 --- a/src/plugins/android/androidmanifesteditorfactory.h +++ b/src/plugins/android/androidmanifesteditorfactory.h @@ -27,6 +27,8 @@ #include <coreplugin/editormanager/ieditorfactory.h> +#include <texteditor/texteditoractionhandler.h> + namespace Android { namespace Internal { @@ -34,6 +36,9 @@ class AndroidManifestEditorFactory final : public Core::IEditorFactory { public: AndroidManifestEditorFactory(); + +private: + TextEditor::TextEditorActionHandler m_actionHandler; }; } // namespace Internal diff --git a/src/plugins/diffeditor/diffeditorfactory.cpp b/src/plugins/diffeditor/diffeditorfactory.cpp index 12a1d58ff9..46c79df29d 100644 --- a/src/plugins/diffeditor/diffeditorfactory.cpp +++ b/src/plugins/diffeditor/diffeditorfactory.cpp @@ -33,35 +33,41 @@ #include <QCoreApplication> +using namespace Core; +using namespace TextEditor; + namespace DiffEditor { namespace Internal { -DiffEditorFactory::DiffEditorFactory() +DiffEditorFactory::DiffEditorFactory() : + descriptionHandler { + Constants::DIFF_EDITOR_ID, + Constants::C_DIFF_EDITOR_DESCRIPTION, + TextEditorActionHandler::None, + [](IEditor *e) { return static_cast<DiffEditor *>(e)->descriptionWidget(); } + }, + unifiedHandler { + Constants::DIFF_EDITOR_ID, + Constants::UNIFIED_VIEW_ID, + TextEditorActionHandler::None, + [](IEditor *e) { return static_cast<DiffEditor *>(e)->unifiedEditorWidget(); } + }, + leftHandler { + Constants::DIFF_EDITOR_ID, + Id(Constants::SIDE_BY_SIDE_VIEW_ID).withSuffix(1), + TextEditorActionHandler::None, + [](IEditor *e) { return static_cast<DiffEditor *>(e)->leftEditorWidget(); } + }, + rightHandler { + Constants::DIFF_EDITOR_ID, + Core::Id(Constants::SIDE_BY_SIDE_VIEW_ID).withSuffix(2), + TextEditorActionHandler::None, + [](Core::IEditor *e) { return static_cast<DiffEditor *>(e)->rightEditorWidget(); } + } { setId(Constants::DIFF_EDITOR_ID); setDisplayName(QCoreApplication::translate("DiffEditorFactory", Constants::DIFF_EDITOR_DISPLAY_NAME)); addMimeType(Constants::DIFF_EDITOR_MIMETYPE); - auto descriptionHandler = new TextEditor::TextEditorActionHandler( - this, id(), Constants::C_DIFF_EDITOR_DESCRIPTION); - descriptionHandler->setTextEditorWidgetResolver([](Core::IEditor *e) { - return static_cast<DiffEditor *>(e)->descriptionWidget(); - }); - auto unifiedHandler = new TextEditor::TextEditorActionHandler( - this, id(), Constants::UNIFIED_VIEW_ID); - unifiedHandler->setTextEditorWidgetResolver([](Core::IEditor *e) { - return static_cast<DiffEditor *>(e)->unifiedEditorWidget(); - }); - auto leftHandler = new TextEditor::TextEditorActionHandler( - this, id(), Core::Id(Constants::SIDE_BY_SIDE_VIEW_ID).withSuffix(1)); - leftHandler->setTextEditorWidgetResolver([](Core::IEditor *e) { - return static_cast<DiffEditor *>(e)->leftEditorWidget(); - }); - auto rightHandler = new TextEditor::TextEditorActionHandler( - this, id(), Core::Id(Constants::SIDE_BY_SIDE_VIEW_ID).withSuffix(2)); - rightHandler->setTextEditorWidgetResolver([](Core::IEditor *e) { - return static_cast<DiffEditor *>(e)->rightEditorWidget(); - }); - setEditorCreator([] { return new DiffEditor(new DiffEditorDocument); }); } diff --git a/src/plugins/diffeditor/diffeditorfactory.h b/src/plugins/diffeditor/diffeditorfactory.h index 3f9fbfac64..7a4abbab7a 100644 --- a/src/plugins/diffeditor/diffeditorfactory.h +++ b/src/plugins/diffeditor/diffeditorfactory.h @@ -27,6 +27,8 @@ #include <coreplugin/editormanager/ieditorfactory.h> +#include <texteditor/texteditoractionhandler.h> + namespace DiffEditor { namespace Internal { @@ -34,6 +36,12 @@ class DiffEditorFactory : public Core::IEditorFactory { public: DiffEditorFactory(); + +private: + TextEditor::TextEditorActionHandler descriptionHandler; + TextEditor::TextEditorActionHandler unifiedHandler; + TextEditor::TextEditorActionHandler leftHandler; + TextEditor::TextEditorActionHandler rightHandler; }; } // namespace Internal diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index de81447629..ae5f5f356e 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -8598,8 +8598,7 @@ void TextEditorFactory::setAutoCompleterCreator(const AutoCompleterCreator &crea void TextEditorFactory::setEditorActionHandlers(uint optionalActions) { - d->m_textEditorActionHandler.reset( - new TextEditorActionHandler(nullptr, id(), id(), optionalActions)); + d->m_textEditorActionHandler.reset(new TextEditorActionHandler(id(), id(), optionalActions)); } void TextEditorFactory::addHoverHandler(BaseHoverHandler *handler) diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index 8508f9afd8..4cae664cb4 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -190,15 +190,9 @@ public: Core::Id m_contextId; }; -static TextEditorWidget *castWidgetToTextEditorWidget(Core::IEditor *editor) -{ - return qobject_cast<TextEditorWidget *>(editor->widget()); -} - TextEditorActionHandlerPrivate::TextEditorActionHandlerPrivate (Core::Id editorId, Core::Id contextId, uint optionalActions) - : m_findTextWidget(castWidgetToTextEditorWidget) - , m_optionalActions(optionalActions) + : m_optionalActions(optionalActions) , m_editorId(editorId) , m_contextId(contextId) { @@ -228,7 +222,7 @@ void TextEditorActionHandlerPrivate::createActions() QString locatorString = TextEditorPlugin::lineNumberFilter()->shortcutString(); locatorString += QLatin1Char(' '); const int selectionStart = locatorString.size(); - locatorString += TextEditorActionHandler::tr("<line>:<column>"); + locatorString += tr("<line>:<column>"); Core::LocatorManager::show(locatorString, selectionStart, locatorString.size() - selectionStart); }); m_printAction = registerAction(PRINT, @@ -589,11 +583,16 @@ void TextEditorActionHandlerPrivate::updateCurrentEditor(Core::IEditor *editor) } // namespace Internal -TextEditorActionHandler::TextEditorActionHandler(QObject *parent, Core::Id editorId, - Core::Id contextId, uint optionalActions) - : QObject(parent), d(new Internal::TextEditorActionHandlerPrivate(editorId, contextId, - optionalActions)) +TextEditorActionHandler::TextEditorActionHandler(Core::Id editorId, + Core::Id contextId, + uint optionalActions, + const TextEditorWidgetResolver &resolver) + : d(new Internal::TextEditorActionHandlerPrivate(editorId, contextId, optionalActions)) { + if (resolver) + d->m_findTextWidget = resolver; + else + d->m_findTextWidget = [](Core::IEditor *editor) { return qobject_cast<TextEditorWidget *>(editor->widget()); }; } TextEditorActionHandler::~TextEditorActionHandler() @@ -601,9 +600,4 @@ TextEditorActionHandler::~TextEditorActionHandler() delete d; } -void TextEditorActionHandler::setTextEditorWidgetResolver(const TextEditorWidgetResolver &resolver) -{ - d->m_findTextWidget = resolver; -} - } // namespace TextEditor diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h index f542b5d7ce..f91ad7a806 100644 --- a/src/plugins/texteditor/texteditoractionhandler.h +++ b/src/plugins/texteditor/texteditoractionhandler.h @@ -43,9 +43,10 @@ namespace Internal { class TextEditorActionHandlerPrivate; } // Redirects slots from global actions to the respective editor. -class TEXTEDITOR_EXPORT TextEditorActionHandler : public QObject +class TEXTEDITOR_EXPORT TextEditorActionHandler final { - Q_OBJECT + TextEditorActionHandler(const TextEditorActionHandler &) = delete; + TextEditorActionHandler &operator=(const TextEditorActionHandler &) = delete; public: enum OptionalActionsMask { @@ -58,14 +59,14 @@ public: }; using TextEditorWidgetResolver = std::function<TextEditorWidget *(Core::IEditor *)>; - explicit TextEditorActionHandler(QObject *parent, Core::Id editorId, Core::Id contextId, - uint optionalActions = None); - ~TextEditorActionHandler() override; + TextEditorActionHandler(Core::Id editorId, + Core::Id contextId, + uint optionalActions = None, + const TextEditorWidgetResolver &resolver = {}); - void setTextEditorWidgetResolver(const TextEditorWidgetResolver &resolver); + ~TextEditorActionHandler(); private: - friend class Internal::TextEditorActionHandlerPrivate; Internal::TextEditorActionHandlerPrivate *d; }; |