From 6f7f1238f7848ccdf42a3fb8fe503f60401e5c66 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Tue, 21 Jun 2022 16:34:25 +0200 Subject: [PATCH] GUI: show line numbers in the snippets window if available and no page number --- src/qtgui/rclm_view.cpp | 9 ++++----- src/qtgui/rclm_wins.cpp | 4 ++-- src/qtgui/rclmain_w.h | 3 ++- src/qtgui/snippets_w.cpp | 15 ++++++++++++--- src/qtgui/snippets_w.h | 2 +- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/qtgui/rclm_view.cpp b/src/qtgui/rclm_view.cpp index 10aa360d..ae7cd296 100644 --- a/src/qtgui/rclm_view.cpp +++ b/src/qtgui/rclm_view.cpp @@ -169,7 +169,7 @@ static bool termNeeded(const std::string& cmd) return cmd.find("%s") != std::string::npos; } -void RclMain::startNativeViewer(Rcl::Doc doc, int pagenum, QString qterm) +void RclMain::startNativeViewer(Rcl::Doc doc, int pagenum, QString qterm, int linenum) { std::string term = qs2utf8s(qterm); string apptag; @@ -401,12 +401,11 @@ void RclMain::startNativeViewer(Rcl::Doc doc, int pagenum, QString qterm) pagenum = 1; } - int line = 1; - if (m_source && !term.empty() && linenumNeeded(cmd)) { + if (linenum < 1 && m_source && !term.empty() && linenumNeeded(cmd)) { if (doc.text.empty()) { rcldb->getDocRawText(doc); } - line = m_source->getFirstMatchLine(doc, term); + linenum = m_source->getFirstMatchLine(doc, term); } // Substitute %xx inside arguments @@ -426,7 +425,7 @@ void RclMain::startNativeViewer(Rcl::Doc doc, int pagenum, QString qterm) subs["f"] = fn; subs["F"] = fn; subs["i"] = FileInterner::getLastIpathElt(doc.ipath); - subs["l"] = ulltodecstr(line); + subs["l"] = ulltodecstr(linenum); subs["M"] = doc.mimetype; subs["p"] = ulltodecstr(pagenum); subs["s"] = term; diff --git a/src/qtgui/rclm_wins.cpp b/src/qtgui/rclm_wins.cpp index 7c2d41dc..b3035d98 100644 --- a/src/qtgui/rclm_wins.cpp +++ b/src/qtgui/rclm_wins.cpp @@ -464,8 +464,8 @@ void RclMain::showSnippets(Rcl::Doc doc) return; if (!m_snippets) { m_snippets = new SnippetsW(doc, m_source); - connect(m_snippets, SIGNAL(startNativeViewer(Rcl::Doc, int, QString)), - this, SLOT(startNativeViewer(Rcl::Doc, int, QString))); + connect(m_snippets, SIGNAL(startNativeViewer(Rcl::Doc, int, QString, int)), + this, SLOT(startNativeViewer(Rcl::Doc, int, QString, int))); connect(new QShortcut(quitKeySeq, m_snippets), SIGNAL (activated()), this, SLOT (fileExit())); connect(new QShortcut(closeKeySeq, m_snippets), SIGNAL (activated()), diff --git a/src/qtgui/rclmain_w.h b/src/qtgui/rclmain_w.h index 4311dae7..23e3d660 100644 --- a/src/qtgui/rclmain_w.h +++ b/src/qtgui/rclmain_w.h @@ -141,7 +141,8 @@ public slots: virtual void showActionsSearch(); virtual void startPreview(int docnum, Rcl::Doc doc, int keymods); virtual void startPreview(Rcl::Doc); - virtual void startNativeViewer(Rcl::Doc, int pagenum = -1, QString term = QString()); + virtual void startNativeViewer(Rcl::Doc, int pagenum = -1, QString term = QString(), + int line = -1); virtual void openWith(Rcl::Doc, string); virtual void saveDocToFile(Rcl::Doc); virtual void populateSideFilters(bool init = false); diff --git a/src/qtgui/snippets_w.cpp b/src/qtgui/snippets_w.cpp index e82e83bd..ce03c33a 100644 --- a/src/qtgui/snippets_w.cpp +++ b/src/qtgui/snippets_w.cpp @@ -253,6 +253,9 @@ void SnippetsW::onSetDoc(Rcl::Doc doc, std::shared_ptr source) if (snippet.page > 0) { oss << "" << "P. " << snippet.page << ""; + } else if (snippet.line > 0) { + oss << "" << + "L. " << snippet.line << ""; } oss << "" << lr.front().c_str() << "" << "\n"; } @@ -331,17 +334,23 @@ void SnippetsW::onLinkClicked(const QUrl &url) if (ascurl.size() > 3) { int what = ascurl[0]; switch (what) { - case 'P': + case 'P': + case 'L': { string::size_type numpos = ascurl.find_first_of("0123456789"); if (numpos == string::npos) return; - int page = atoi(ascurl.c_str() + numpos); + int page = -1, line = -1; + if (what == 'P') { + page = atoi(ascurl.c_str() + numpos); + } else { + line = atoi(ascurl.c_str() + numpos); + } string::size_type termpos = ascurl.find_first_of("T"); string term; if (termpos != string::npos) term = ascurl.substr(termpos+1); - emit startNativeViewer(m_doc, page, u8s2qs(term)); + emit startNativeViewer(m_doc, page, u8s2qs(term), line); return; } } diff --git a/src/qtgui/snippets_w.h b/src/qtgui/snippets_w.h index 0ae06adb..d50ea6da 100644 --- a/src/qtgui/snippets_w.h +++ b/src/qtgui/snippets_w.h @@ -60,7 +60,7 @@ protected slots: virtual void reloadByPage(); signals: - void startNativeViewer(Rcl::Doc, int pagenum, QString term); + void startNativeViewer(Rcl::Doc, int pagenum, QString term, int line); private: void init();