From 5c78eac17957e585cb2292a67f0fe7379ad0ebcb Mon Sep 17 00:00:00 2001 From: Le Tan Date: Wed, 14 Apr 2021 21:13:21 +0800 Subject: [PATCH] jump to given line when activating a location list item --- src/core/fileopenparameters.h | 1 + src/core/location.h | 2 ++ src/search/filesearchengine.cpp | 2 +- src/search/searcher.cpp | 2 +- src/widgets/editors/markdownvieweradapter.cpp | 2 +- src/widgets/locationlist.cpp | 2 +- src/widgets/markdownviewwindow.cpp | 7 +++++++ src/widgets/markdownviewwindow.h | 2 ++ src/widgets/textviewwindow.cpp | 19 +++++++++++++++++++ src/widgets/textviewwindow.h | 4 ++++ src/widgets/viewarea.cpp | 2 ++ src/widgets/viewwindow.h | 3 +++ 12 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/core/fileopenparameters.h b/src/core/fileopenparameters.h index 1eaf2133..7dea8b6e 100644 --- a/src/core/fileopenparameters.h +++ b/src/core/fileopenparameters.h @@ -24,6 +24,7 @@ namespace vnotex bool m_readOnly = false; // If m_lineNumber > -1, it indicates the line to scroll to after opening the file. + // 0-based. int m_lineNumber = -1; }; } diff --git a/src/core/location.h b/src/core/location.h index 8003fa53..b4976e05 100644 --- a/src/core/location.h +++ b/src/core/location.h @@ -19,6 +19,7 @@ namespace vnotex QString m_displayPath; + // 0-based. int m_lineNumber = -1; }; @@ -42,6 +43,7 @@ namespace vnotex { } + // 0-based. int m_lineNumber = -1; QString m_text; diff --git a/src/search/filesearchengine.cpp b/src/search/filesearchengine.cpp index 20324251..b2ad8f63 100644 --- a/src/search/filesearchengine.cpp +++ b/src/search/filesearchengine.cpp @@ -87,7 +87,7 @@ void FileSearchEngineWorker::searchFile(const QString &p_filePath, const QString QSharedPointer resultItem; - int lineNum = 1; + int lineNum = 0; QTextStream ins(&file); while (!ins.atEnd()) { if (isAskedToStop()) { diff --git a/src/search/searcher.cpp b/src/search/searcher.cpp index 96f31b3e..35f0148a 100644 --- a/src/search/searcher.cpp +++ b/src/search/searcher.cpp @@ -276,7 +276,7 @@ bool Searcher::searchContent(const File *p_file) QSharedPointer resultItem; - int lineNum = 1; + int lineNum = 0; int pos = 0; int contentSize = content.size(); QRegularExpression newlineRegExp("\\n|\\r\\n|\\r"); diff --git a/src/widgets/editors/markdownvieweradapter.cpp b/src/widgets/editors/markdownvieweradapter.cpp index 6ea5b921..c37d8a4d 100644 --- a/src/widgets/editors/markdownvieweradapter.cpp +++ b/src/widgets/editors/markdownvieweradapter.cpp @@ -138,7 +138,7 @@ void MarkdownViewerAdapter::scrollToLine(int p_lineNumber) return; } - m_topLineNumber = -1; + m_topLineNumber = p_lineNumber; emit editLineNumberUpdated(p_lineNumber); } diff --git a/src/widgets/locationlist.cpp b/src/widgets/locationlist.cpp index 7ce3d984..9c4525c2 100644 --- a/src/widgets/locationlist.cpp +++ b/src/widgets/locationlist.cpp @@ -117,7 +117,7 @@ void LocationList::setItemLocationLineAndText(QTreeWidgetItem *p_item, const Com { p_item->setData(Columns::LineColumn, Qt::UserRole, p_line.m_lineNumber); if (p_line.m_lineNumber != -1) { - p_item->setText(Columns::LineColumn, QString::number(p_line.m_lineNumber)); + p_item->setText(Columns::LineColumn, QString::number(p_line.m_lineNumber + 1)); } p_item->setText(Columns::TextColumn, p_line.m_text); } diff --git a/src/widgets/markdownviewwindow.cpp b/src/widgets/markdownviewwindow.cpp index da35a81c..e589a6ac 100644 --- a/src/widgets/markdownviewwindow.cpp +++ b/src/widgets/markdownviewwindow.cpp @@ -918,3 +918,10 @@ bool MarkdownViewWindow::isReadMode() const { return m_mode == ViewWindowMode::Read; } + +void MarkdownViewWindow::openTwice(const QSharedPointer &p_paras) +{ + qDebug() << p_paras->m_lineNumber; + Q_ASSERT(!p_paras || !p_paras->m_newFile); + handleFileOpenParameters(p_paras); +} diff --git a/src/widgets/markdownviewwindow.h b/src/widgets/markdownviewwindow.h index 487d0266..1fade296 100644 --- a/src/widgets/markdownviewwindow.h +++ b/src/widgets/markdownviewwindow.h @@ -38,6 +38,8 @@ namespace vnotex QSharedPointer getOutlineProvider() Q_DECL_OVERRIDE; + void openTwice(const QSharedPointer &p_paras) Q_DECL_OVERRIDE; + public slots: void handleEditorConfigChange() Q_DECL_OVERRIDE; diff --git a/src/widgets/textviewwindow.cpp b/src/widgets/textviewwindow.cpp index 2262f930..3cf29fc9 100644 --- a/src/widgets/textviewwindow.cpp +++ b/src/widgets/textviewwindow.cpp @@ -14,6 +14,7 @@ #include #include #include "editors/statuswidget.h" +#include using namespace vnotex; @@ -76,6 +77,8 @@ void TextViewWindow::handleBufferChangedInternal(const QSharedPointerzoom(textEditorConfig.getZoomDelta()); } } + +void TextViewWindow::openTwice(const QSharedPointer &p_paras) +{ + handleFileOpenParameters(p_paras); +} + +void TextViewWindow::handleFileOpenParameters(const QSharedPointer &p_paras) +{ + if (!p_paras) { + return; + } + + if (p_paras->m_lineNumber > -1) { + m_editor->scrollToLine(p_paras->m_lineNumber, true); + } +} diff --git a/src/widgets/textviewwindow.h b/src/widgets/textviewwindow.h index 8c0963a9..7f4cb1ca 100644 --- a/src/widgets/textviewwindow.h +++ b/src/widgets/textviewwindow.h @@ -25,6 +25,8 @@ namespace vnotex void setMode(ViewWindowMode p_mode) Q_DECL_OVERRIDE; + void openTwice(const QSharedPointer &p_paras) Q_DECL_OVERRIDE; + public slots: void handleEditorConfigChange() Q_DECL_OVERRIDE; @@ -66,6 +68,8 @@ namespace vnotex void updateEditorFromConfig(); + void handleFileOpenParameters(const QSharedPointer &p_paras); + static QSharedPointer createTextEditorConfig(const TextEditorConfig &p_config); // Managed by QObject. diff --git a/src/widgets/viewarea.cpp b/src/widgets/viewarea.cpp index 87b9b318..87804ca9 100644 --- a/src/widgets/viewarea.cpp +++ b/src/widgets/viewarea.cpp @@ -167,6 +167,8 @@ void ViewArea::openBuffer(Buffer *p_buffer, const QSharedPointeropenTwice(p_paras); + setCurrentViewWindow(selectedWin); } diff --git a/src/widgets/viewwindow.h b/src/widgets/viewwindow.h index d52fa8b4..f7360ca6 100644 --- a/src/widgets/viewwindow.h +++ b/src/widgets/viewwindow.h @@ -39,6 +39,9 @@ namespace vnotex void detachFromBuffer(bool p_quiet = false); + // User request to open the buffer attached to this ViewWindow again. + virtual void openTwice(const QSharedPointer &p_paras) = 0; + virtual const QIcon &getIcon() const; virtual QString getName() const;