diff options
author | Tobias Koenig <tobias.koenig@kdab.com> | 2017-02-21 12:48:56 +0100 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2019-11-25 12:01:39 +0100 |
commit | 8bd52f014ac0f2f9f8f948d8c63715d53e871962 (patch) | |
tree | dcbfe1f10b395c377980eba0275b9cc6f4dd1937 | |
parent | 0f07c791c64c7f914bd07be70dbbf50501c862f4 (diff) |
Add 'PageNumberRole' to QPdfBookmarkModel
Provide the referenced page of an bookmark entry through a
model role.
Change-Id: Ia1657d75acf0128389ef0de896b242b4e8df87fe
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r-- | src/pdf/qpdfbookmarkmodel.cpp | 19 | ||||
-rw-r--r-- | src/pdf/qpdfbookmarkmodel.h | 3 | ||||
-rw-r--r-- | tests/auto/pdf/qpdfbookmarkmodel/pdf-sample.bookmarks_pages.pdf | bin | 0 -> 27523 bytes | |||
-rw-r--r-- | tests/auto/pdf/qpdfbookmarkmodel/tst_qpdfbookmarkmodel.cpp | 25 |
4 files changed, 45 insertions, 2 deletions
diff --git a/src/pdf/qpdfbookmarkmodel.cpp b/src/pdf/qpdfbookmarkmodel.cpp index 2946a7006..a96df50e5 100644 --- a/src/pdf/qpdfbookmarkmodel.cpp +++ b/src/pdf/qpdfbookmarkmodel.cpp @@ -54,6 +54,7 @@ public: explicit BookmarkNode(BookmarkNode *parentNode = nullptr) : m_parentNode(parentNode) , m_level(0) + , m_pageNumber(0) { } @@ -116,12 +117,23 @@ public: m_level = level; } + int pageNumber() const + { + return m_pageNumber; + } + + void setPageNumber(int pageNumber) + { + m_pageNumber = pageNumber; + } + private: QVector<BookmarkNode*> m_childNodes; BookmarkNode *m_parentNode; QString m_title; int m_level; + int m_pageNumber; }; @@ -180,9 +192,12 @@ public: QVector<ushort> titleBuffer(titleLength); FPDFBookmark_GetTitle(bookmark, titleBuffer.data(), titleBuffer.length()); - childBookmarkNode->setTitle(QString::fromUtf16(titleBuffer.data())); + const FPDF_DEST dest = FPDFBookmark_GetDest(document, bookmark); + const int pageNumber = FPDFDest_GetPageIndex(document, dest); + childBookmarkNode->setTitle(QString::fromUtf16(titleBuffer.data())); childBookmarkNode->setLevel(level); + childBookmarkNode->setPageNumber(pageNumber); // recurse down appendChildNode(childBookmarkNode, bookmark, level + 1, document); @@ -271,6 +286,8 @@ QVariant QPdfBookmarkModel::data(const QModelIndex &index, int role) const return node->title(); case LevelRole: return node->level(); + case PageNumberRole: + return node->pageNumber(); default: return QVariant(); } diff --git a/src/pdf/qpdfbookmarkmodel.h b/src/pdf/qpdfbookmarkmodel.h index 25663ee36..5347219c4 100644 --- a/src/pdf/qpdfbookmarkmodel.h +++ b/src/pdf/qpdfbookmarkmodel.h @@ -64,7 +64,8 @@ public: enum Role { TitleRole = Qt::DisplayRole, - LevelRole = Qt::UserRole + LevelRole = Qt::UserRole, + PageNumberRole }; Q_ENUM(Role) diff --git a/tests/auto/pdf/qpdfbookmarkmodel/pdf-sample.bookmarks_pages.pdf b/tests/auto/pdf/qpdfbookmarkmodel/pdf-sample.bookmarks_pages.pdf Binary files differnew file mode 100644 index 000000000..c4e1aa36e --- /dev/null +++ b/tests/auto/pdf/qpdfbookmarkmodel/pdf-sample.bookmarks_pages.pdf diff --git a/tests/auto/pdf/qpdfbookmarkmodel/tst_qpdfbookmarkmodel.cpp b/tests/auto/pdf/qpdfbookmarkmodel/tst_qpdfbookmarkmodel.cpp index b0ce136d0..fddc98011 100644 --- a/tests/auto/pdf/qpdfbookmarkmodel/tst_qpdfbookmarkmodel.cpp +++ b/tests/auto/pdf/qpdfbookmarkmodel/tst_qpdfbookmarkmodel.cpp @@ -58,6 +58,7 @@ private slots: void unloadDocument(); void testTreeStructure(); void testListStructure(); + void testPageNumberRole(); }; void tst_QPdfBookmarkModel::emptyModel() @@ -257,6 +258,30 @@ void tst_QPdfBookmarkModel::testListStructure() const QModelIndex index4 = model.index(8, 0); QCOMPARE(index4, QModelIndex()); } + +void tst_QPdfBookmarkModel::testPageNumberRole() +{ + QPdfDocument document; + QCOMPARE(document.load(QFINDTESTDATA("pdf-sample.bookmarks_pages.pdf")), QPdfDocument::NoError); + + QPdfBookmarkModel model; + model.setDocument(&document); + + QCOMPARE(model.rowCount(), 3); + + const QModelIndex index1 = model.index(0, 0); + QCOMPARE(index1.data(QPdfBookmarkModel::PageNumberRole).toInt(), 0); + + const QModelIndex index2 = model.index(1, 0); + QCOMPARE(index2.data(QPdfBookmarkModel::PageNumberRole).toInt(), 1); + + const QModelIndex index2_1 = model.index(0, 0, index2); + QCOMPARE(index2_1.data(QPdfBookmarkModel::PageNumberRole).toInt(), 1); + + const QModelIndex index3 = model.index(2, 0); + QCOMPARE(index3.data(QPdfBookmarkModel::PageNumberRole).toInt(), 2); +} + QTEST_MAIN(tst_QPdfBookmarkModel) #include "tst_qpdfbookmarkmodel.moc" |