From c2a470e8539af72807911ce465242964bbe308f6 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 16 Oct 2023 16:18:56 +0200 Subject: [PATCH] Revert "TextEditor: Hide LineNumberFilter implementation" Fixes missing "Line in Current Document" locator filter. Locator filters need to be created during startup. This reverts commit 8af6d16b6c2a0a08ee4f49abdfc7b0a503276bde. Change-Id: I53ec1c1079b4a719169e8db95b6d77f703264b65 Reviewed-by: Reviewed-by: David Schulz --- src/plugins/texteditor/linenumberfilter.cpp | 108 ++++++++---------- src/plugins/texteditor/linenumberfilter.h | 13 ++- .../texteditor/texteditoractionhandler.cpp | 3 +- src/plugins/texteditor/texteditorplugin.cpp | 6 + src/plugins/texteditor/texteditorplugin.h | 3 + 5 files changed, 70 insertions(+), 63 deletions(-) diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp index 245d8565190..b718e5b4331 100644 --- a/src/plugins/texteditor/linenumberfilter.cpp +++ b/src/plugins/texteditor/linenumberfilter.cpp @@ -1,79 +1,69 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +#include "linenumberfilter.h" + #include "texteditortr.h" #include -#include using namespace Core; using namespace Utils; namespace TextEditor::Internal { -class LineNumberFilter : public ILocatorFilter +LineNumberFilter::LineNumberFilter() { -public: - LineNumberFilter() - { - setId("Line in current document"); - setDisplayName(Tr::tr("Line in Current Document")); - setDescription(Tr::tr("Jumps to the given line in the current document.")); - setDefaultSearchText(Tr::tr(":")); - setPriority(High); - setDefaultShortcutString("l"); - setDefaultIncludedByDefault(true); - } + setId("Line in current document"); + setDisplayName(Tr::tr("Line in Current Document")); + setDescription(Tr::tr("Jumps to the given line in the current document.")); + setDefaultSearchText(Tr::tr(":")); + setPriority(High); + setDefaultShortcutString("l"); + setDefaultIncludedByDefault(true); +} -private: - LocatorMatcherTasks matchers() final - { - using namespace Tasking; +LocatorMatcherTasks LineNumberFilter::matchers() +{ + using namespace Tasking; - TreeStorage storage; + TreeStorage storage; - const auto onSetup = [storage] { - const QStringList lineAndColumn = storage->input().split(':'); - int sectionCount = lineAndColumn.size(); - int line = 0; - int column = 0; - bool ok = false; - if (sectionCount > 0) - line = lineAndColumn.at(0).toInt(&ok); - if (ok && sectionCount > 1) - column = lineAndColumn.at(1).toInt(&ok); - if (!ok) - return; - if (EditorManager::currentEditor() && (line > 0 || column > 0)) { - QString text; - if (line > 0 && column > 0) - text = Tr::tr("Line %1, Column %2").arg(line).arg(column); - else if (line > 0) - text = Tr::tr("Line %1").arg(line); - else - text = Tr::tr("Column %1").arg(column); - LocatorFilterEntry entry; - entry.displayName = text; - entry.acceptor = [line, targetColumn = column - 1] { - IEditor *editor = EditorManager::currentEditor(); - if (!editor) - return AcceptResult(); - EditorManager::addCurrentPositionToNavigationHistory(); - editor->gotoLine(line < 1 ? editor->currentLine() : line, targetColumn); - EditorManager::activateEditor(editor); + const auto onSetup = [storage] { + const QStringList lineAndColumn = storage->input().split(':'); + int sectionCount = lineAndColumn.size(); + int line = 0; + int column = 0; + bool ok = false; + if (sectionCount > 0) + line = lineAndColumn.at(0).toInt(&ok); + if (ok && sectionCount > 1) + column = lineAndColumn.at(1).toInt(&ok); + if (!ok) + return; + if (EditorManager::currentEditor() && (line > 0 || column > 0)) { + QString text; + if (line > 0 && column > 0) + text = Tr::tr("Line %1, Column %2").arg(line).arg(column); + else if (line > 0) + text = Tr::tr("Line %1").arg(line); + else + text = Tr::tr("Column %1").arg(column); + LocatorFilterEntry entry; + entry.displayName = text; + entry.acceptor = [line, targetColumn = column - 1] { + IEditor *editor = EditorManager::currentEditor(); + if (!editor) return AcceptResult(); - }; - storage->reportOutput({entry}); - } - }; - return {{Sync(onSetup), storage}}; - } -}; - -ILocatorFilter *lineNumberFilter() -{ - static LineNumberFilter theLineNumberFilter; - return &theLineNumberFilter; + EditorManager::addCurrentPositionToNavigationHistory(); + editor->gotoLine(line < 1 ? editor->currentLine() : line, targetColumn); + EditorManager::activateEditor(editor); + return AcceptResult(); + }; + storage->reportOutput({entry}); + } + }; + return {{Sync(onSetup), storage}}; } } // namespace TextEditor::Internal diff --git a/src/plugins/texteditor/linenumberfilter.h b/src/plugins/texteditor/linenumberfilter.h index cbae14ea014..ec72c1bb029 100644 --- a/src/plugins/texteditor/linenumberfilter.h +++ b/src/plugins/texteditor/linenumberfilter.h @@ -3,10 +3,17 @@ #pragma once -namespace Core { class ILocatorFilter; } +#include namespace TextEditor::Internal { -Core::ILocatorFilter *lineNumberFilter(); +class LineNumberFilter : public Core::ILocatorFilter +{ +public: + LineNumberFilter(); -} // TextEditor::Internal +private: + Core::LocatorMatcherTasks matchers() final; +}; + +} // namespace TextEditor::Internal diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index c105a26cc4a..49b83b8a756 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -7,6 +7,7 @@ #include "displaysettings.h" #include "fontsettings.h" #include "linenumberfilter.h" +#include "texteditorplugin.h" #include "texteditortr.h" #include "texteditorsettings.h" @@ -179,7 +180,7 @@ void TextEditorActionHandlerPrivate::createActions() registerAction(SELECTALL, [] (TextEditorWidget *w) { w->selectAll(); }, true); registerAction(GOTO, [] (TextEditorWidget *) { - Core::LocatorManager::showFilter(lineNumberFilter()); + Core::LocatorManager::showFilter(TextEditorPlugin::lineNumberFilter()); }); m_modifyingActions << registerAction(PRINT, [] (TextEditorWidget *widget) { widget->print(Core::ICore::printer()); }); diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp index 7746ddb4491..f8de8503937 100644 --- a/src/plugins/texteditor/texteditorplugin.cpp +++ b/src/plugins/texteditor/texteditorplugin.cpp @@ -99,6 +99,7 @@ public: FilePath m_marginActionFileName; TextEditorSettings settings; + LineNumberFilter lineNumberFilter; // Goto line functionality for quick open OutlineFactory outlineFactory; FindInFiles findInFilesFilter; @@ -425,6 +426,11 @@ void TextEditorPlugin::extensionsInitialized() }); } +LineNumberFilter *TextEditorPlugin::lineNumberFilter() +{ + return &m_instance->d->lineNumberFilter; +} + ExtensionSystem::IPlugin::ShutdownFlag TextEditorPlugin::aboutToShutdown() { Highlighter::handleShutdown(); diff --git a/src/plugins/texteditor/texteditorplugin.h b/src/plugins/texteditor/texteditorplugin.h index 3f21b7ce2f5..f5725061950 100644 --- a/src/plugins/texteditor/texteditorplugin.h +++ b/src/plugins/texteditor/texteditorplugin.h @@ -8,6 +8,8 @@ namespace TextEditor { namespace Internal { +class LineNumberFilter; + class TextEditorPlugin final : public ExtensionSystem::IPlugin { Q_OBJECT @@ -18,6 +20,7 @@ public: ~TextEditorPlugin() final; static TextEditorPlugin *instance(); + static LineNumberFilter *lineNumberFilter(); ShutdownFlag aboutToShutdown() override;