diff --git a/src/qtgui/snippets.ui b/src/qtgui/snippets.ui index 0d7d4613..8ba30831 100644 --- a/src/qtgui/snippets.ui +++ b/src/qtgui/snippets.ui @@ -16,15 +16,90 @@ true - + - - - - about:blank - - - + + + + + + about:blank + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 0 + 0 + + + + X + + + Qt::ToolButtonTextOnly + + + + + + + Find: + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Next + + + + + + + + 0 + 0 + + + + Prev + + + + + + + @@ -63,5 +138,21 @@ + + searchClosePB + clicked() + searchFM + hide() + + + 33 + 414 + + + 328 + 414 + + + diff --git a/src/qtgui/snippets_w.cpp b/src/qtgui/snippets_w.cpp index 6e1bff26..498951c4 100644 --- a/src/qtgui/snippets_w.cpp +++ b/src/qtgui/snippets_w.cpp @@ -21,8 +21,13 @@ #include #include +#include using namespace std; +#include +#include +#include + #include "debuglog.h" #include "recoll.h" #include "snippets_w.h" @@ -50,6 +55,25 @@ void SnippetsW::init() if (m_source.isNull()) return; + searchFM->hide(); + webView->page()->currentFrame()->setScrollBarPolicy(Qt::Horizontal, + Qt::ScrollBarAlwaysOff); + + + new QShortcut(QKeySequence::Find, this, SLOT(slotEditFind())); + new QShortcut(QKeySequence(Qt::Key_Slash), this, SLOT(slotEditFind())); + new QShortcut(QKeySequence::FindNext, this, SLOT(slotEditFindNext())); + new QShortcut(QKeySequence::FindPrevious, this, + SLOT(slotEditFindPrevious())); + connect(searchLE, SIGNAL(textChanged(const QString&)), + this, SLOT(slotSearchTextChanged(const QString&))); + connect(nextPB, SIGNAL(clicked()), this, SLOT(slotEditFindNext())); + new QShortcut(QKeySequence(Qt::Key_F3), this, SLOT(slotEditFindNext())); + connect(prevPB, SIGNAL(clicked()), this, SLOT(slotEditFindPrevious())); + connect(webView, SIGNAL(linkClicked(const QUrl &)), + this, SLOT(linkWasClicked(const QUrl &))); + webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); + // Make title out of file name if none yet string titleOrFilename; string utf8fn; @@ -58,7 +82,6 @@ void SnippetsW::init() if (titleOrFilename.empty()) { titleOrFilename = utf8fn; } - setWindowTitle(QString::fromUtf8(titleOrFilename.c_str())); vector vpabs; @@ -67,43 +90,60 @@ void SnippetsW::init() HighlightData hdata; m_source->getTerms(hdata); - QString html = QString::fromAscii( + ostringstream oss; + oss << "" "" "" "" - ); + ; g_hiliter.set_inputhtml(false); for (vector::const_iterator it = vpabs.begin(); it != vpabs.end(); it++) { - html += "\n"); + if (!g_hiliter.plaintorich(it->snippet, lr, hdata)) { + LOGDEB1(("No match for [%s]\n", it->snippet.c_str())); + continue; + } + oss << "" << endl; } - html.append(""); - webView->setHtml(html); - connect(webView, SIGNAL(linkClicked(const QUrl &)), - this, SLOT(linkWasClicked(const QUrl &))); - webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); + oss << ""; + + QWebSettings *ws = webView->page()->settings(); + if (prefs.reslistfontfamily != "") { + ws->setFontFamily(QWebSettings::StandardFont, prefs.reslistfontfamily); + ws->setFontSize(QWebSettings::DefaultFontSize, prefs.reslistfontsize); + } + + webView->setHtml(QString::fromUtf8(oss.str().c_str())); } +void SnippetsW::slotEditFind() +{ + searchFM->show(); + searchLE->selectAll(); + searchLE->setFocus(); +} +void SnippetsW::slotEditFindNext() +{ + webView->findText(searchLE->text()); +} +void SnippetsW::slotEditFindPrevious() +{ + webView->findText(searchLE->text(), QWebPage::FindBackward); +} +void SnippetsW::slotSearchTextChanged(const QString& txt) +{ + webView->findText(txt); +} void SnippetsW::linkWasClicked(const QUrl &url) { diff --git a/src/qtgui/snippets_w.h b/src/qtgui/snippets_w.h index 6b50152b..87ea2947 100644 --- a/src/qtgui/snippets_w.h +++ b/src/qtgui/snippets_w.h @@ -38,7 +38,10 @@ public: protected slots: virtual void linkWasClicked(const QUrl &); - + virtual void slotEditFind(); + virtual void slotEditFindNext(); + virtual void slotEditFindPrevious(); + virtual void slotSearchTextChanged(const QString&); signals: void startNativeViewer(Rcl::Doc, int pagenum, QString term);
"; - if (it->page > 0) { - char txt[100]; - sprintf(txt, "P. %d", it->page); - char url[100]; - sprintf(url, "P%dT%s", it->page, it->term.c_str()); - html += ""; - html += txt; - html += ""; - } - html += ""; list lr; - g_hiliter.plaintorich(it->snippet, lr, hdata); - html.append(QString::fromUtf8(lr.front().c_str())); - html.append("
"; + if (it->page > 0) { + oss << "page << "T" << it->term << "\">" + << "P. " << it->page << ""; + } + oss << "" << lr.front().c_str() << "