summaryrefslogtreecommitdiffstats
path: root/src/pdf
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2020-02-14 09:26:19 +0100
committerShawn Rutledge <shawn.rutledge@qt.io>2020-02-17 17:50:11 +0100
commitd0e96aa21daa8601254cffd584d33f38d62ff1df (patch)
treeceeb6c98dee6147bfb66201fe4f359db494f1e46 /src/pdf
parent0b6a4d94945a975390b2574e6aff2568ebb7f061 (diff)
Use a timer to update PdfSearchModel in the background
Change-Id: I855150578c9127b175c5907500d057b704fe5e0e Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/pdf')
-rw-r--r--src/pdf/api/qpdfsearchmodel.h1
-rw-r--r--src/pdf/api/qpdfsearchmodel_p.h2
-rw-r--r--src/pdf/qpdfsearchmodel.cpp18
3 files changed, 21 insertions, 0 deletions
diff --git a/src/pdf/api/qpdfsearchmodel.h b/src/pdf/api/qpdfsearchmodel.h
index c8190f192..cc91e214a 100644
--- a/src/pdf/api/qpdfsearchmodel.h
+++ b/src/pdf/api/qpdfsearchmodel.h
@@ -85,6 +85,7 @@ Q_SIGNALS:
protected:
void updatePage(int page);
+ void timerEvent(QTimerEvent *event) override;
private:
QHash<int, QByteArray> m_roleNames;
diff --git a/src/pdf/api/qpdfsearchmodel_p.h b/src/pdf/api/qpdfsearchmodel_p.h
index 0855bc216..2a23706b2 100644
--- a/src/pdf/api/qpdfsearchmodel_p.h
+++ b/src/pdf/api/qpdfsearchmodel_p.h
@@ -77,6 +77,8 @@ public:
QVector<bool> pagesSearched;
QVector<QVector<QPdfSearchResult>> searchResults;
int rowCountSoFar = 0;
+ int updateTimerId = -1;
+ int nextPageToUpdate = 0;
};
QT_END_NAMESPACE
diff --git a/src/pdf/qpdfsearchmodel.cpp b/src/pdf/qpdfsearchmodel.cpp
index aa19af5b1..4129c7cb7 100644
--- a/src/pdf/qpdfsearchmodel.cpp
+++ b/src/pdf/qpdfsearchmodel.cpp
@@ -51,6 +51,7 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(qLcS, "qt.pdf.search")
+static const int UpdateTimerInterval = 100;
static const int ContextChars = 20;
static const double CharacterHitTolerance = 6.0;
@@ -164,12 +165,27 @@ void QPdfSearchModel::setDocument(QPdfDocument *document)
d->clearResults();
}
+void QPdfSearchModel::timerEvent(QTimerEvent *event)
+{
+ Q_D(QPdfSearchModel);
+ if (event->timerId() != d->updateTimerId)
+ return;
+ if (!d->document || d->nextPageToUpdate >= d->document->pageCount()) {
+ if (d->document)
+ qCDebug(qLcS, "done updating search results on %d pages", d->searchResults.count());
+ killTimer(d->updateTimerId);
+ d->updateTimerId = -1;
+ }
+ d->doSearch(d->nextPageToUpdate++);
+}
+
QPdfSearchModelPrivate::QPdfSearchModelPrivate()
{
}
void QPdfSearchModelPrivate::clearResults()
{
+ Q_Q(QPdfSearchModel);
rowCountSoFar = 0;
searchResults.clear();
pagesSearched.clear();
@@ -180,6 +196,8 @@ void QPdfSearchModelPrivate::clearResults()
searchResults.resize(0);
pagesSearched.resize(0);
}
+ nextPageToUpdate = 0;
+ updateTimerId = q->startTimer(UpdateTimerInterval);
}
bool QPdfSearchModelPrivate::doSearch(int page)