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