Git commit 02cec2e0d36818b9862fd40d4d4a3c064fd99d61 by Natalie Clarius. Committed on 24/03/2024 at 13:51. Pushed by nclarius into branch 'shift-click-forward-search'.
add Shift+Leftclick in editor to forward search Analogous to 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 +63 -2 src/eventfilter.cpp M +11 -1 src/eventfilter.h M +2 -1 src/kiledocmanager.cpp https://invent.kde.org/office/kile/-/commit/02cec2e0d36818b9862fd40d4d4a3c064fd99d61 diff --git a/doc/index.docbook b/doc/index.docbook index 3ba55e29..66e7b288 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 c3342b6f..cf758763 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 d78e82ee..b6f40265 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 62dc724e..4c823b7d 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,57 @@ 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 + // live preview + if (m_previewManager->isLivePreviewEnabledForCurrentDocument()) { + m_previewManager->showCursorPositionInDocumentViewer(); + return true; + } + // generated PDF or DVI file + auto forwardPdfTool = m_toolManager->createTool(QLatin1String("ForwardPDF")); + if (!forwardPdfTool) { + return false; + } + forwardPdfTool->prepareToRun(); + QFile pdfFile(forwardPdfTool->targetDir() + QLatin1Char('/') + + forwardPdfTool->target()); + auto forwardDviTool = m_toolManager->createTool(QLatin1String("ForwardDVI")); + if (!forwardDviTool) { + 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()) { + m_toolManager->run(forwardPdfTool); + delete forwardPdfTool; + delete forwardDviTool; + return true; + } else { + m_toolManager->run(forwardDviTool); + delete forwardPdfTool; + delete forwardDviTool; + return true; + } + } else if (QFileInfo(pdfFile).exists()) { + m_toolManager->run(forwardPdfTool); + delete forwardPdfTool; + delete forwardDviTool; + return true; + } else if (QFileInfo(dviFile).exists()) { + m_toolManager->run(forwardDviTool); + delete forwardPdfTool; + delete forwardDviTool; + return true; + } + return false; + } + } + //pass this event on return false; } diff --git a/src/eventfilter.h b/src/eventfilter.h index cdc78d5e..28f46a63 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 002a010f..c96290b4 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();