From 83c3b6c20a87387c8efba2cbe4ac26013607e1ac Mon Sep 17 00:00:00 2001 From: Daniel Teske <daniel.teske@digia.com> Date: Fri, 10 Jan 2014 18:25:59 +0100 Subject: [PATCH] Line locator: Also work with editors that are derived from IEditor IEditor has a concept of line and column number and goto line, thus this can be done. Change-Id: Ic2e3bdcfa2b1debf102afc21bfe9be667a0264c8 Reviewed-by: Eike Ziller <eike.ziller@digia.com> --- src/plugins/android/androidmanifesteditor.cpp | 12 ++++++++++++ src/plugins/android/androidmanifesteditor.h | 4 ++++ src/plugins/texteditor/linenumberfilter.cpp | 16 ++++------------ src/plugins/texteditor/linenumberfilter.h | 10 ++++------ 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/plugins/android/androidmanifesteditor.cpp b/src/plugins/android/androidmanifesteditor.cpp index 65f4a92b21e..cb924937126 100644 --- a/src/plugins/android/androidmanifesteditor.cpp +++ b/src/plugins/android/androidmanifesteditor.cpp @@ -36,6 +36,7 @@ #include <QActionGroup> #include <QToolBar> +#include <QTextBlock> using namespace Android; using namespace Internal; @@ -93,6 +94,17 @@ TextEditor::BaseTextEditorWidget *AndroidManifestEditor::textEditor() const return widget()->textEditorWidget(); } +int AndroidManifestEditor::currentLine() const +{ + return textEditor()->textCursor().blockNumber() + 1; +} + +int AndroidManifestEditor::currentColumn() const +{ + QTextCursor cursor = textEditor()->textCursor(); + return cursor.position() - cursor.block().position() + 1; +} + void AndroidManifestEditor::changeEditorPage(QAction *action) { if (!widget()->setActivePage(static_cast<AndroidManifestEditorWidget::EditorPage>(action->data().toInt()))) { diff --git a/src/plugins/android/androidmanifesteditor.h b/src/plugins/android/androidmanifesteditor.h index d7f51e91600..aedd29c57c1 100644 --- a/src/plugins/android/androidmanifesteditor.h +++ b/src/plugins/android/androidmanifesteditor.h @@ -57,6 +57,10 @@ public: Core::IDocument *document(); TextEditor::BaseTextEditorWidget *textEditor() const; + int currentLine() const; + int currentColumn() const; + void gotoLine(int line, int column = 0) { textEditor()->gotoLine(line, column); } + private slots: void changeEditorPage(QAction *action); diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp index a97af5dbdad..3764bbedc71 100644 --- a/src/plugins/texteditor/linenumberfilter.cpp +++ b/src/plugins/texteditor/linenumberfilter.cpp @@ -70,7 +70,7 @@ QList<LocatorFilterEntry> LineNumberFilter::matchesFor(QFutureInterface<Core::Lo column = lineAndColumn.at(1).toInt(&ok); if (!ok) return value; - if (currentTextEditor() && (line > 0 || column > 0)) { + if (EditorManager::currentEditor() && (line > 0 || column > 0)) { LineColumn data; data.first = line; data.second = column - 1; // column API is 0-based @@ -88,21 +88,13 @@ QList<LocatorFilterEntry> LineNumberFilter::matchesFor(QFutureInterface<Core::Lo void LineNumberFilter::accept(LocatorFilterEntry selection) const { - ITextEditor *editor = currentTextEditor(); + IEditor *editor = EditorManager::currentEditor(); if (editor) { EditorManager::addCurrentPositionToNavigationHistory(); LineColumn data = selection.internalData.value<LineColumn>(); - if (data.first < 1) { // jump to column in same line - int currLine, currColumn; - editor->convertPosition(editor->position(), &currLine, &currColumn); - data.first = currLine; - } + if (data.first < 1) // jump to column in same line + data.first = editor->currentLine(); editor->gotoLine(data.first, data.second); EditorManager::activateEditor(editor); } } - -ITextEditor *LineNumberFilter::currentTextEditor() const -{ - return qobject_cast<TextEditor::ITextEditor *>(EditorManager::currentEditor()); -} diff --git a/src/plugins/texteditor/linenumberfilter.h b/src/plugins/texteditor/linenumberfilter.h index 01617c2e5b8..a4eb8b2c77b 100644 --- a/src/plugins/texteditor/linenumberfilter.h +++ b/src/plugins/texteditor/linenumberfilter.h @@ -36,10 +36,11 @@ #include <QList> #include <QFutureInterface> -namespace TextEditor { - -class ITextEditor; +namespace Core { +class IEditor; +} +namespace TextEditor { namespace Internal { class LineNumberFilter : public Core::ILocatorFilter @@ -52,9 +53,6 @@ public: QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future, const QString &entry); void accept(Core::LocatorFilterEntry selection) const; void refresh(QFutureInterface<void> &) {} - -private: - ITextEditor *currentTextEditor() const; }; } // namespace Internal -- GitLab