Implement text highlight support after full text search.

This commit is contained in:
kh1
2010-03-30 16:10:05 +02:00
parent 6ea66ca3bd
commit a8801d15c5
3 changed files with 39 additions and 13 deletions

View File

@@ -83,7 +83,7 @@ public:
bool isBackwardAvailable() const; bool isBackwardAvailable() const;
bool findText(const QString &text, Find::IFindSupport::FindFlags flags, bool findText(const QString &text, Find::IFindSupport::FindFlags flags,
bool incremental); bool incremental, bool fromSearch);
static QString AboutBlankPage; static QString AboutBlankPage;
static QString PageNotFoundMessage; static QString PageNotFoundMessage;

View File

@@ -53,6 +53,13 @@ HelpViewer::HelpViewer(qreal zoom, QWidget *parent)
: QTextBrowser(parent) : QTextBrowser(parent)
, d(new HelpViewerPrivate(zoom)) , d(new HelpViewerPrivate(zoom))
{ {
QPalette p = palette();
p.setColor(QPalette::Inactive, QPalette::Highlight,
p.color(QPalette::Active, QPalette::Highlight));
p.setColor(QPalette::Inactive, QPalette::HighlightedText,
p.color(QPalette::Active, QPalette::HighlightedText));
setPalette(p);
installEventFilter(this); installEventFilter(this);
document()->setDocumentMargin(8); document()->setDocumentMargin(8);
@@ -173,16 +180,16 @@ bool HelpViewer::isBackwardAvailable() const
} }
bool HelpViewer::findText(const QString &text, IFindSupport::FindFlags flags, bool HelpViewer::findText(const QString &text, IFindSupport::FindFlags flags,
bool incremental) bool incremental, bool fromSearch)
{ {
QTextDocument *doc = document(); QTextDocument *doc = document();
QTextCursor cursor = textCursor(); QTextCursor cursor = textCursor();
if (!doc || cursor.isNull()) if (!doc || cursor.isNull())
return false; return false;
const int position = cursor.selectionStart();
if (incremental) if (incremental)
cursor.setPosition(cursor.selectionStart()); cursor.setPosition(position);
QTextDocument::FindFlags f = IFindSupport::textDocumentFlagsForFindFlags(flags); QTextDocument::FindFlags f = IFindSupport::textDocumentFlagsForFindFlags(flags);
QTextCursor found = doc->find(text, cursor, f); QTextCursor found = doc->find(text, cursor, f);
@@ -192,14 +199,33 @@ bool HelpViewer::findText(const QString &text, IFindSupport::FindFlags flags,
else else
cursor.movePosition(QTextCursor::End); cursor.movePosition(QTextCursor::End);
found = doc->find(text, cursor, f); found = doc->find(text, cursor, f);
if (found.isNull()) { }
return false;
if (fromSearch) {
cursor.beginEditBlock();
viewport()->setUpdatesEnabled(false);
QTextCharFormat marker;
marker.setForeground(Qt::red);
cursor.movePosition(QTextCursor::Start);
setTextCursor(cursor);
while (find(text)) {
QTextCursor hit = textCursor();
hit.mergeCharFormat(marker);
} }
viewport()->setUpdatesEnabled(true);
cursor.endEditBlock();
} }
if (!found.isNull()) {
setTextCursor(found); bool cursorIsNull = found.isNull();
if (cursorIsNull) {
found = textCursor();
found.setPosition(position);
} }
return true; setTextCursor(found);
return cursorIsNull;
} }
// -- public slots // -- public slots

View File

@@ -140,8 +140,8 @@ QNetworkReply *HelpNetworkAccessManager::createRequest(Operation /*op*/,
} }
const QHelpEngineCore &engine = HelpManager::helpEngineCore(); const QHelpEngineCore &engine = HelpManager::helpEngineCore();
const QByteArray &data = engine.findFile(url).isValid() const QByteArray &data = engine.findFile(url).isValid() ? engine.fileData(url)
? engine.fileData(url) : HelpViewer::PageNotFoundMessage.arg(url.toString()).toUtf8(); : HelpViewer::PageNotFoundMessage.arg(url.toString()).toUtf8();
return new HelpNetworkReply(request, data, mimeType); return new HelpNetworkReply(request, data, mimeType);
} }
@@ -329,9 +329,9 @@ bool HelpViewer::isBackwardAvailable() const
} }
bool HelpViewer::findText(const QString &text, IFindSupport::FindFlags flags, bool HelpViewer::findText(const QString &text, IFindSupport::FindFlags flags,
bool incremental) bool incremental, bool fromSearch)
{ {
Q_UNUSED(incremental) Q_UNUSED((incremental && fromSearch))
QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument; QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument;
if (flags & Find::IFindSupport::FindBackward) if (flags & Find::IFindSupport::FindBackward)
options |= QWebPage::FindBackward; options |= QWebPage::FindBackward;