[office/kile] /: add Shift+Leftclick in editor to forward search
Michel Ludwig
null at kde.org
Sat Mar 30 06:44:53 GMT 2024
Git commit 09836a88734784bcd0a427c4efe5326a65c84f3b by Michel Ludwig, on behalf of Natalie Clarius.
Committed on 30/03/2024 at 06:44.
Pushed by mludwig into branch 'master'.
add Shift+Leftclick in editor to forward search
Analogous to the already existent Shift+Leftclick in the viewer to backward search.
M +2 -2 doc/index.docbook
M +12 -10 src/documentinfo.cpp
M +4 -1 src/documentinfo.h
M +65 -2 src/eventfilter.cpp
M +11 -1 src/eventfilter.h
M +2 -1 src/kiledocmanager.cpp
https://invent.kde.org/office/kile/-/commit/09836a88734784bcd0a427c4efe5326a65c84f3b
diff --git a/doc/index.docbook b/doc/index.docbook
index 3ba55e298..66e7b2881 100644
--- a/doc/index.docbook
+++ b/doc/index.docbook
@@ -694,8 +694,8 @@
<guimenuitem>Tools</guimenuitem><guilabel>Build</guilabel></menuchoice>
and always choose the <guilabel>Modern</guilabel> configuration.</para>
- <para>To execute a forward search, position the cursor on a line of source code, and click
- <guilabel>Forward Search</guilabel> to jump to the associated position
+ <para>To execute a forward search, position the cursor on a line of source code, and click
+ with the <mousebutton>left</mousebutton> mouse button while pressing &Shift;, or click <guilabel>Forward DVI</guilabel>/<guilabel>Forward PDF</guilabel> to jump to the associated position
in the &DVI; or PDF viewer window.</para>
</sect1>
diff --git a/src/documentinfo.cpp b/src/documentinfo.cpp
index c3342b6fc..cf758763d 100644
--- a/src/documentinfo.cpp
+++ b/src/documentinfo.cpp
@@ -831,22 +831,24 @@ void TextInfo::setDocumentContents(const QStringList& contents)
m_documentContents = contents;
}
-LaTeXInfo::LaTeXInfo(Extensions* extensions,
- KileAbbreviation::Manager* abbreviationManager,
- LatexCommands* commands,
- EditorExtension* editorExtension,
- KileConfiguration::Manager* manager,
- KileCodeCompletion::Manager* codeCompletionManager,
- KileTool::LivePreviewManager* livePreviewManager,
+LaTeXInfo::LaTeXInfo(Extensions *extensions,
+ KileAbbreviation::Manager *abbreviationManager,
+ LatexCommands *commands,
+ EditorExtension *editorExtension,
+ KileConfiguration::Manager *manager,
+ KileCodeCompletion::Manager *codeCompletionManager,
+ KileTool::LivePreviewManager *livePreviewManager,
KileView::Manager *viewManager,
- KileParser::Manager* parserManager)
+ KileParser::Manager *parserManager,
+ KileTool::Manager *toolManager)
: TextInfo(extensions, abbreviationManager, parserManager, "LaTeX"),
m_commands(commands),
m_editorExtension(editorExtension),
m_configurationManager(manager),
m_eventFilter(Q_NULLPTR),
m_livePreviewManager(livePreviewManager),
- m_viewManager(viewManager)
+ m_viewManager(viewManager),
+ m_toolManager(toolManager)
{
documentTypePromotionAllowed = false;
updateStructLevelInfo();
@@ -976,7 +978,7 @@ void LaTeXInfo::updateStructLevelInfo() {
QList<QObject*> LaTeXInfo::createEventFilters(KTextEditor::View *view)
{
QList<QObject*> toReturn;
- QObject *eventFilter = new LaTeXEventFilter(view, m_editorExtension);
+ QObject *eventFilter = new LaTeXEventFilter(view, m_editorExtension, m_viewManager, m_livePreviewManager, m_toolManager);
connect(m_configurationManager, SIGNAL(configChanged()), eventFilter, SLOT(readConfig()));
toReturn << eventFilter;
return toReturn;
diff --git a/src/documentinfo.h b/src/documentinfo.h
index d78e82ee0..b6f402656 100644
--- a/src/documentinfo.h
+++ b/src/documentinfo.h
@@ -26,6 +26,7 @@
#include "kileconstants.h"
#include "kileextensions.h"
+#include "kiletoolmanager.h"
#include "livepreview_utils.h"
#include "outputinfo.h"
@@ -481,7 +482,8 @@ public:
KileCodeCompletion::Manager *codeCompletionManager,
KileTool::LivePreviewManager *livePreviewManager,
KileView::Manager *viewManager,
- KileParser::Manager *parserManager);
+ KileParser::Manager *parserManager,
+ KileTool::Manager *toolManager);
virtual ~LaTeXInfo();
@@ -504,6 +506,7 @@ protected:
KileCodeCompletion::LaTeXCompletionModel *m_latexCompletionModel;
KileTool::LivePreviewManager *m_livePreviewManager;
KileView::Manager *m_viewManager;
+ KileTool::Manager *m_toolManager;
virtual void updateStructLevelInfo() override;
virtual void checkChangedDeps();
diff --git a/src/eventfilter.cpp b/src/eventfilter.cpp
index 62dc724eb..f785723b3 100644
--- a/src/eventfilter.cpp
+++ b/src/eventfilter.cpp
@@ -25,12 +25,22 @@
#include <KModifierKeyInfo>
#include <KTextEditor/Document>
#include <KTextEditor/View>
+#include <qfileinfo.h>
-#include "kiledebug.h"
#include "editorextension.h"
#include "kileconfig.h"
+#include "kiledebug.h"
+#include "kiletoolmanager.h"
+#include "kileviewmanager.h"
+#include "livepreview.h"
-LaTeXEventFilter::LaTeXEventFilter(KTextEditor::View *view, KileDocument::EditorExtension *edit) : QObject(view), m_view(view), m_edit(edit)
+LaTeXEventFilter::LaTeXEventFilter(
+ KTextEditor::View *view, KileDocument::EditorExtension *edit,
+ KileView::Manager *viewManager,
+ KileTool::LivePreviewManager *livePreviewManager,
+ KileTool::Manager *toolManager)
+ : QObject(view), m_view(view), m_edit(edit), m_viewManager(viewManager),
+ m_previewManager(livePreviewManager), m_toolManager(toolManager)
{
m_modifierKeyInfo = new KModifierKeyInfo(this);
readConfig();
@@ -271,6 +281,59 @@ bool LaTeXEventFilter::eventFilter(QObject* /* o */, QEvent *e)
}
}
+ else if(e->type() == QEvent::MouseButtonPress) {
+ QMouseEvent *me = static_cast<QMouseEvent*>(e);
+ if(me->button() == Qt::LeftButton &&
+ me->modifiers() & Qt::ShiftModifier) { // forward search
+ // change the cursor position first
+ // use global coordinates to correctly handle possible icon borders, line numbers, ...
+ m_view->setCursorPosition(m_view->coordinatesToCursor(m_view->mapFromGlobal(me->globalPosition().toPoint())));
+ // live preview
+ if(m_previewManager->isLivePreviewEnabledForCurrentDocument()) {
+ m_previewManager->showCursorPositionInDocumentViewer();
+ return true;
+ }
+ // generated PDF or DVI file
+ KileTool::Base* forwardPdfTool = m_toolManager->createTool(QLatin1String("ForwardPDF"));
+ if(!forwardPdfTool) { // just to be avoid crashing as this shouldn't happen
+ return false;
+ }
+ forwardPdfTool->prepareToRun();
+ QFile pdfFile(forwardPdfTool->targetDir() + QLatin1Char('/') + forwardPdfTool->target());
+
+ KileTool::Base* forwardDviTool = m_toolManager->createTool(QLatin1String("ForwardDVI"));
+ if(!forwardDviTool) { // just to be avoid crashing as this shouldn't happen
+ return false;
+ }
+ forwardDviTool->prepareToRun();
+ QFile dviFile(forwardDviTool->targetDir() + QLatin1Char('/') + forwardDviTool->target());
+
+ if(QFileInfo(pdfFile).exists() && QFileInfo(dviFile).exists()) {
+ if(QFileInfo(pdfFile).lastModified() > QFileInfo(dviFile).lastModified()) {
+ delete forwardDviTool;
+ m_toolManager->run(forwardPdfTool);
+ return true;
+ }
+ else {
+ delete forwardPdfTool;
+ m_toolManager->run(forwardDviTool);
+ return true;
+ }
+ }
+ else if(QFileInfo(pdfFile).exists()) {
+ delete forwardDviTool;
+ m_toolManager->run(forwardPdfTool);
+ return true;
+ }
+ else if(QFileInfo(dviFile).exists()) {
+ delete forwardPdfTool;
+ m_toolManager->run(forwardDviTool);
+ return true;
+ }
+ return false;
+ }
+ }
+
//pass this event on
return false;
}
diff --git a/src/eventfilter.h b/src/eventfilter.h
index cdc78d5ea..28f46a633 100644
--- a/src/eventfilter.h
+++ b/src/eventfilter.h
@@ -15,6 +15,9 @@
#ifndef EVENTFILTER_H
#define EVENTFILTER_H
+#include "kiletoolmanager.h"
+#include "kileviewmanager.h"
+#include "livepreview.h"
#include <QEvent>
#include <QObject>
@@ -36,7 +39,11 @@ class LaTeXEventFilter : public QObject
Q_OBJECT
public:
- LaTeXEventFilter(KTextEditor::View *view, KileDocument::EditorExtension *edit);
+ LaTeXEventFilter(KTextEditor::View *view,
+ KileDocument::EditorExtension *edit,
+ KileView::Manager *viewManager,
+ KileTool::LivePreviewManager *previewManager,
+ KileTool::Manager *toolManager);
public Q_SLOTS:
void readConfig();
@@ -49,6 +56,9 @@ private:
bool m_bCompleteEnvironment;
KTextEditor::View *m_view;
KileDocument::EditorExtension *m_edit;
+ KileView::Manager *m_viewManager;
+ KileTool::LivePreviewManager *m_previewManager;
+ KileTool::Manager *m_toolManager;
KModifierKeyInfo *m_modifierKeyInfo;
};
diff --git a/src/kiledocmanager.cpp b/src/kiledocmanager.cpp
index 055c8271e..194825e95 100644
--- a/src/kiledocmanager.cpp
+++ b/src/kiledocmanager.cpp
@@ -431,7 +431,8 @@ TextInfo* Manager::createTextDocumentInfo(KileDocument::Type type, const QUrl &u
m_ki->codeCompletionManager(),
m_ki->livePreviewManager(),
m_ki->viewManager(),
- m_ki->parserManager());
+ m_ki->parserManager(),
+ m_ki->toolManager());
break;
case BibTeX:
KILE_DEBUG_MAIN << "CREATING BibInfo for " << url.url();
More information about the kde-doc-english
mailing list