[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kate] addons/search: S&R: Add wrap around top/bottom messages (like the built in one)
From:       Kåre Särs <kare.sars () iki ! fi>
Date:       2016-06-17 10:44:37
Message-ID: E1bDrGP-0000Ic-4t () scm ! kde ! org
[Download RAW message or body]

Git commit 10a6c00d1889349c120b73813c2402ff596cec2f by Kåre Särs.
Committed on 17/06/2016 at 09:25.
Pushed by sars into branch 'master'.

S&R: Add wrap around top/bottom messages (like the built in one)

M  +26   -0    addons/search/plugin_search.cpp
M  +2    -0    addons/search/plugin_search.h

http://commits.kde.org/kate/10a6c00d1889349c120b73813c2402ff596cec2f

diff --git a/addons/search/plugin_search.cpp b/addons/search/plugin_search.cpp
index 5d1772d..ff15cc5 100644
--- a/addons/search/plugin_search.cpp
+++ b/addons/search/plugin_search.cpp
@@ -1465,6 +1465,7 @@ void KatePluginSearchView::itemSelected(QTreeWidgetItem *item)
 
 void KatePluginSearchView::goToNextMatch()
 {
+    bool fromFirst = false;
     Results *res = qobject_cast<Results *>(m_ui.resultTabWidget->currentWidget());
     if (!res) {
         return;
@@ -1478,15 +1479,28 @@ void KatePluginSearchView::goToNextMatch()
     if (!curr->data(0, ReplaceMatches::ColumnRole).toString().isEmpty()) {
         curr = res->tree->itemBelow(curr);
         if (!curr) {
+            fromFirst = true;
             curr = res->tree->topLevelItem(0);
         }
     }
 
     itemSelected(curr);
+
+    if (fromFirst) {
+        delete m_infoMessage;
+        const QString msg = i18n("Continuing from first match");
+        m_infoMessage = new KTextEditor::Message(msg, KTextEditor::Message::Information);
+        m_infoMessage->setPosition(KTextEditor::Message::TopInView);
+        m_infoMessage->setAutoHide(2000);
+        m_infoMessage->setAutoHideMode(KTextEditor::Message::Immediate);
+        m_infoMessage->setView(m_mainWindow->activeView());
+        m_mainWindow->activeView()->document()->postMessage(m_infoMessage);
+    }
 }
 
 void KatePluginSearchView::goToPreviousMatch()
 {
+    bool fromLast = false;
     Results *res = qobject_cast<Results *>(m_ui.resultTabWidget->currentWidget());
     if (!res) {
         return;
@@ -1515,9 +1529,21 @@ void KatePluginSearchView::goToPreviousMatch()
         // select the last match of the "root item"
         if (!root || (root->childCount() < 1)) return;
         curr = root->child(root->childCount()-1);
+
+        fromLast = true;
     }
 
     itemSelected(curr);
+    if (fromLast) {
+        delete m_infoMessage;
+        const QString msg = i18n("Continuing from last match");
+        m_infoMessage = new KTextEditor::Message(msg, KTextEditor::Message::Information);
+        m_infoMessage->setPosition(KTextEditor::Message::BottomInView);
+        m_infoMessage->setAutoHide(2000);
+        m_infoMessage->setAutoHideMode(KTextEditor::Message::Immediate);
+        m_infoMessage->setView(m_mainWindow->activeView());
+        m_mainWindow->activeView()->document()->postMessage(m_infoMessage);
+    }
 }
 
 void KatePluginSearchView::readSessionConfig(const KConfigGroup &cg)
diff --git a/addons/search/plugin_search.h b/addons/search/plugin_search.h
index 55cc079..f8f2305 100644
--- a/addons/search/plugin_search.h
+++ b/addons/search/plugin_search.h
@@ -26,6 +26,7 @@
 #include <ktexteditor/application.h>
 #include <KTextEditor/Command>
 #include <ktexteditor/sessionconfiginterface.h>
+#include <KTextEditor/Message>
 #include <QAction>
 
 #include <QTreeWidget>
@@ -191,6 +192,7 @@ private:
     QString                            m_resultBaseDir;
     QList<KTextEditor::MovingRange*>   m_matchRanges;
     QTimer                             m_changeTimer;
+    QPointer<KTextEditor::Message>     m_infoMessage;
 
     /**
      * current project plugin view, if any
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic