summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Koenig <tobias.koenig@kdab.com>2017-02-21 12:48:56 +0100
committerMichal Klocek <michal.klocek@qt.io>2019-11-25 12:01:39 +0100
commit8bd52f014ac0f2f9f8f948d8c63715d53e871962 (patch)
treedcbfe1f10b395c377980eba0275b9cc6f4dd1937
parent0f07c791c64c7f914bd07be70dbbf50501c862f4 (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.cpp19
-rw-r--r--src/pdf/qpdfbookmarkmodel.h3
-rw-r--r--tests/auto/pdf/qpdfbookmarkmodel/pdf-sample.bookmarks_pages.pdfbin0 -> 27523 bytes
-rw-r--r--tests/auto/pdf/qpdfbookmarkmodel/tst_qpdfbookmarkmodel.cpp25
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
new file mode 100644
index 000000000..c4e1aa36e
--- /dev/null
+++ b/tests/auto/pdf/qpdfbookmarkmodel/pdf-sample.bookmarks_pages.pdf
Binary files differ
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"