Port the Qt5 viewer demo to use the lazy outline item API (even if for loading all items up front for now).
diff --git a/qt5/demos/toc.cpp b/qt5/demos/toc.cpp
index 9916736..50d4d68 100644
--- a/qt5/demos/toc.cpp
+++ b/qt5/demos/toc.cpp
@@ -23,29 +23,28 @@
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QTreeWidget>
-static void fillToc(const QDomNode &parent, QTreeWidget *tree, QTreeWidgetItem *parentItem)
+static void fillToc(const QVector<Poppler::OutlineItem> &items, QTreeWidget *tree, QTreeWidgetItem *parentItem)
{
QTreeWidgetItem *newitem = nullptr;
- for (QDomNode node = parent.firstChild(); !node.isNull(); node = node.nextSibling()) {
- QDomElement e = node.toElement();
+ for (const auto &item : items) {
+ if (item.isNull()) {
+ continue;
+ }
if (!parentItem) {
newitem = new QTreeWidgetItem(tree, newitem);
} else {
newitem = new QTreeWidgetItem(parentItem, newitem);
}
- newitem->setText(0, e.tagName());
+ newitem->setText(0, item.name());
- bool isOpen = false;
- if (e.hasAttribute(QStringLiteral("Open"))) {
- isOpen = QVariant(e.attribute(QStringLiteral("Open"))).toBool();
- }
- if (isOpen) {
+ if (item.isOpen()) {
tree->expandItem(newitem);
}
- if (e.hasChildNodes()) {
- fillToc(node, tree, newitem);
+ const auto children = item.children();
+ if (!children.isEmpty()) {
+ fillToc(children, tree, newitem);
}
}
}
@@ -68,9 +67,9 @@
void TocDock::fillInfo()
{
- const QDomDocument *toc = document()->toc();
- if (toc) {
- fillToc(*toc, m_tree, nullptr);
+ const auto outline = document()->outline();
+ if (!outline.isEmpty()) {
+ fillToc(outline, m_tree, nullptr);
} else {
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, tr("No TOC"));