summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Koenig <tobias.koenig@kdab.com>2017-02-27 13:34:23 +0100
committerMichal Klocek <michal.klocek@qt.io>2019-11-25 12:01:39 +0100
commit44abdb16fcff4898dc81ea3ed4b65b92c4f19d7a (patch)
tree25cf680b25afdfb59a1d49bd001f01e3011919fb
parente15148e389256f1fd0f41b16a236bc51f6aab2ca (diff)
Fix emission of QPdfDocument::pageCountChanged signal
Emit the signal whenever the amount of pages changes on loading/closing the document. Change-Id: I0555a9cad93cb1f125ded19889eda91e08725592 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/pdf/qpdfdocument.cpp24
-rw-r--r--src/pdf/qpdfdocument.h2
-rw-r--r--src/pdf/qpdfdocument_p.h1
-rw-r--r--tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp31
4 files changed, 49 insertions, 9 deletions
diff --git a/src/pdf/qpdfdocument.cpp b/src/pdf/qpdfdocument.cpp
index 7381a927e..c737ca036 100644
--- a/src/pdf/qpdfdocument.cpp
+++ b/src/pdf/qpdfdocument.cpp
@@ -59,6 +59,7 @@ QPdfDocumentPrivate::QPdfDocumentPrivate()
, loadComplete(false)
, status(QPdfDocument::Null)
, lastError(QPdfDocument::NoError)
+ , pageCount(0)
{
asyncBuffer.setData(QByteArray());
asyncBuffer.open(QIODevice::ReadWrite);
@@ -105,6 +106,11 @@ void QPdfDocumentPrivate::clear()
avail = nullptr;
lock.unlock();
+ if (pageCount != 0) {
+ pageCount = 0;
+ emit q->pageCountChanged(pageCount);
+ }
+
loadComplete = false;
asyncBuffer.close();
@@ -266,7 +272,8 @@ void QPdfDocumentPrivate::checkComplete()
QPdfMutexLocker lock;
- for (int i = 0, count = FPDF_GetPageCount(doc); i < count; ++i) {
+ const int newPageCount = FPDF_GetPageCount(doc);
+ for (int i = 0; i < newPageCount; ++i) {
int result = PDF_DATA_NOTAVAIL;
while (result == PDF_DATA_NOTAVAIL) {
result = FPDFAvail_IsPageAvail(avail, i, this);
@@ -278,8 +285,14 @@ void QPdfDocumentPrivate::checkComplete()
lock.unlock();
- if (loadComplete)
+ if (loadComplete) {
+ if (newPageCount != pageCount) {
+ pageCount = newPageCount;
+ emit q->pageCountChanged(pageCount);
+ }
+
setStatus(QPdfDocument::Ready);
+ }
}
void QPdfDocumentPrivate::setStatus(QPdfDocument::Status documentStatus)
@@ -518,12 +531,7 @@ void QPdfDocument::close()
int QPdfDocument::pageCount() const
{
- if (!d->doc)
- return 0;
-
- const QPdfMutexLocker lock;
-
- return FPDF_GetPageCount(d->doc);
+ return d->pageCount;
}
QSizeF QPdfDocument::pageSize(int page) const
diff --git a/src/pdf/qpdfdocument.h b/src/pdf/qpdfdocument.h
index 78a0b5aed..751c1b31b 100644
--- a/src/pdf/qpdfdocument.h
+++ b/src/pdf/qpdfdocument.h
@@ -113,7 +113,7 @@ Q_SIGNALS:
void passwordChanged();
void passwordRequired();
void statusChanged(QPdfDocument::Status status);
- void pageCountChanged();
+ void pageCountChanged(int pageCount);
private:
friend class QPdfBookmarkModelPrivate;
diff --git a/src/pdf/qpdfdocument_p.h b/src/pdf/qpdfdocument_p.h
index 6e40485f3..56b15cdc5 100644
--- a/src/pdf/qpdfdocument_p.h
+++ b/src/pdf/qpdfdocument_p.h
@@ -75,6 +75,7 @@ public:
QPdfDocument::Status status;
QPdfDocument::DocumentError lastError;
+ int pageCount;
void clear();
diff --git a/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp b/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp
index 105abc87f..b6a00e00c 100644
--- a/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp
+++ b/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp
@@ -102,9 +102,13 @@ void tst_QPdfDocument::pageCount()
TemporaryPdf tempPdf;
QPdfDocument doc;
+ QSignalSpy pageCountChangedSpy(&doc, SIGNAL(pageCountChanged(int)));
+
QCOMPARE(doc.pageCount(), 0);
QCOMPARE(doc.load(tempPdf.fileName()), QPdfDocument::NoError);
QCOMPARE(doc.pageCount(), 2);
+ QCOMPARE(pageCountChangedSpy.count(), 1);
+ QCOMPARE(pageCountChangedSpy[0][0].toInt(), doc.pageCount());
QCOMPARE(doc.pageSize(0).toSize(), tempPdf.pageLayout.fullRectPoints().size());
}
@@ -114,12 +118,15 @@ void tst_QPdfDocument::loadFromIODevice()
TemporaryPdf tempPdf;
QPdfDocument doc;
QSignalSpy statusChangedSpy(&doc, SIGNAL(statusChanged(QPdfDocument::Status)));
+ QSignalSpy pageCountChangedSpy(&doc, SIGNAL(pageCountChanged(int)));
doc.load(&tempPdf);
QCOMPARE(statusChangedSpy.count(), 2);
QCOMPARE(statusChangedSpy[0][0].value<QPdfDocument::Status>(), QPdfDocument::Loading);
QCOMPARE(statusChangedSpy[1][0].value<QPdfDocument::Status>(), QPdfDocument::Ready);
QCOMPARE(doc.error(), QPdfDocument::NoError);
QCOMPARE(doc.pageCount(), 2);
+ QCOMPARE(pageCountChangedSpy.count(), 1);
+ QCOMPARE(pageCountChangedSpy[0][0].toInt(), doc.pageCount());
}
void tst_QPdfDocument::loadAsync()
@@ -133,6 +140,7 @@ void tst_QPdfDocument::loadAsync()
QPdfDocument doc;
QSignalSpy statusChangedSpy(&doc, SIGNAL(statusChanged(QPdfDocument::Status)));
+ QSignalSpy pageCountChangedSpy(&doc, SIGNAL(pageCountChanged(int)));
doc.load(reply.data());
@@ -140,6 +148,8 @@ void tst_QPdfDocument::loadAsync()
QCOMPARE(statusChangedSpy[0][0].value<QPdfDocument::Status>(), QPdfDocument::Loading);
QCOMPARE(statusChangedSpy[1][0].value<QPdfDocument::Status>(), QPdfDocument::Ready);
QCOMPARE(doc.pageCount(), 2);
+ QCOMPARE(pageCountChangedSpy.count(), 1);
+ QCOMPARE(pageCountChangedSpy[0][0].toInt(), doc.pageCount());
}
void tst_QPdfDocument::password()
@@ -166,19 +176,26 @@ void tst_QPdfDocument::close()
QPdfDocument doc;
QSignalSpy statusChangedSpy(&doc, SIGNAL(statusChanged(QPdfDocument::Status)));
+ QSignalSpy pageCountChangedSpy(&doc, SIGNAL(pageCountChanged(int)));
doc.load(&tempPdf);
QCOMPARE(statusChangedSpy.count(), 2);
QCOMPARE(statusChangedSpy[0][0].value<QPdfDocument::Status>(), QPdfDocument::Loading);
QCOMPARE(statusChangedSpy[1][0].value<QPdfDocument::Status>(), QPdfDocument::Ready);
+ QCOMPARE(pageCountChangedSpy.count(), 1);
+ QCOMPARE(pageCountChangedSpy[0][0].toInt(), doc.pageCount());
+
statusChangedSpy.clear();
+ pageCountChangedSpy.clear();
doc.close();
QCOMPARE(statusChangedSpy.count(), 2);
QCOMPARE(statusChangedSpy[0][0].value<QPdfDocument::Status>(), QPdfDocument::Unloading);
QCOMPARE(statusChangedSpy[1][0].value<QPdfDocument::Status>(), QPdfDocument::Null);
QCOMPARE(doc.pageCount(), 0);
+ QCOMPARE(pageCountChangedSpy.count(), 1);
+ QCOMPARE(pageCountChangedSpy[0][0].toInt(), doc.pageCount());
}
void tst_QPdfDocument::loadAfterClose()
@@ -187,18 +204,25 @@ void tst_QPdfDocument::loadAfterClose()
QPdfDocument doc;
QSignalSpy statusChangedSpy(&doc, SIGNAL(statusChanged(QPdfDocument::Status)));
+ QSignalSpy pageCountChangedSpy(&doc, SIGNAL(pageCountChanged(int)));
doc.load(&tempPdf);
QCOMPARE(statusChangedSpy.count(), 2);
QCOMPARE(statusChangedSpy[0][0].value<QPdfDocument::Status>(), QPdfDocument::Loading);
QCOMPARE(statusChangedSpy[1][0].value<QPdfDocument::Status>(), QPdfDocument::Ready);
+ QCOMPARE(pageCountChangedSpy.count(), 1);
+ QCOMPARE(pageCountChangedSpy[0][0].toInt(), doc.pageCount());
statusChangedSpy.clear();
+ pageCountChangedSpy.clear();
doc.close();
QCOMPARE(statusChangedSpy.count(), 2);
QCOMPARE(statusChangedSpy[0][0].value<QPdfDocument::Status>(), QPdfDocument::Unloading);
QCOMPARE(statusChangedSpy[1][0].value<QPdfDocument::Status>(), QPdfDocument::Null);
+ QCOMPARE(pageCountChangedSpy.count(), 1);
+ QCOMPARE(pageCountChangedSpy[0][0].toInt(), doc.pageCount());
statusChangedSpy.clear();
+ pageCountChangedSpy.clear();
doc.load(&tempPdf);
QCOMPARE(statusChangedSpy.count(), 2);
@@ -206,6 +230,8 @@ void tst_QPdfDocument::loadAfterClose()
QCOMPARE(statusChangedSpy[1][0].value<QPdfDocument::Status>(), QPdfDocument::Ready);
QCOMPARE(doc.error(), QPdfDocument::NoError);
QCOMPARE(doc.pageCount(), 2);
+ QCOMPARE(pageCountChangedSpy.count(), 1);
+ QCOMPARE(pageCountChangedSpy[0][0].toInt(), doc.pageCount());
}
void tst_QPdfDocument::closeOnDestroy()
@@ -219,12 +245,15 @@ void tst_QPdfDocument::closeOnDestroy()
doc->load(&tempPdf);
QSignalSpy statusChangedSpy(doc, SIGNAL(statusChanged(QPdfDocument::Status)));
+ QSignalSpy pageCountChangedSpy(doc, SIGNAL(pageCountChanged(int)));
delete doc;
QCOMPARE(statusChangedSpy.count(), 2);
QCOMPARE(statusChangedSpy[0][0].value<QPdfDocument::Status>(), QPdfDocument::Unloading);
QCOMPARE(statusChangedSpy[1][0].value<QPdfDocument::Status>(), QPdfDocument::Null);
+ QCOMPARE(pageCountChangedSpy.count(), 1);
+ QCOMPARE(pageCountChangedSpy[0][0].toInt(), 0);
}
// deleting a closed document should not emit any signal
@@ -234,10 +263,12 @@ void tst_QPdfDocument::closeOnDestroy()
doc->close();
QSignalSpy statusChangedSpy(doc, SIGNAL(statusChanged(QPdfDocument::Status)));
+ QSignalSpy pageCountChangedSpy(doc, SIGNAL(pageCountChanged(int)));
delete doc;
QCOMPARE(statusChangedSpy.count(), 0);
+ QCOMPARE(pageCountChangedSpy.count(), 0);
}
}