Spaces:
Sleeping
Sleeping
/* | |
* Copyright (C) 2009-2010, Pino Toscano <[email protected]> | |
* Copyright (C) 2018, Albert Astals Cid <[email protected]> | |
* Copyright (C) 2019, Oliver Sander <[email protected]> | |
* Copyright (C) 2024 g10 Code GmbH, Author: Sune Stolborg Vuorela <[email protected]> | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License as published by | |
* the Free Software Foundation; either version 2, or (at your option) | |
* any later version. | |
* | |
* This program is distributed in the hope that it will be useful, | |
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
* GNU General Public License for more details. | |
* | |
* You should have received a copy of the GNU General Public License | |
* along with this program; if not, write to the Free Software | |
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. | |
*/ | |
/** | |
\file poppler-toc.h | |
*/ | |
using namespace poppler; | |
toc_private::toc_private() { } | |
toc_private::~toc_private() { } | |
toc *toc_private::load_from_outline(Outline *outline) | |
{ | |
if (!outline) { | |
return nullptr; | |
} | |
const std::vector<OutlineItem *> *items = outline->getItems(); | |
if (!items || items->size() < 1) { | |
return nullptr; | |
} | |
toc *newtoc = new toc(); | |
newtoc->d->root.d->is_open = true; | |
newtoc->d->root.d->load_children(items); | |
return newtoc; | |
} | |
toc_item_private::toc_item_private() : is_open(false) { } | |
toc_item_private::~toc_item_private() | |
{ | |
delete_all(children); | |
} | |
void toc_item_private::load(const OutlineItem *item) | |
{ | |
const std::vector<Unicode> &title_unicode = item->getTitle(); | |
title = detail::unicode_to_ustring(title_unicode.data(), title_unicode.size()); | |
is_open = item->isOpen(); | |
} | |
void toc_item_private::load_children(const std::vector<OutlineItem *> *items) | |
{ | |
const int num_items = items->size(); | |
children.resize(num_items); | |
for (int i = 0; i < num_items; ++i) { | |
OutlineItem *item = (*items)[i]; | |
toc_item *new_item = new toc_item(); | |
new_item->d->load(item); | |
children[i] = new_item; | |
item->open(); | |
const std::vector<OutlineItem *> *item_children = item->getKids(); | |
if (item_children) { | |
new_item->d->load_children(item_children); | |
} | |
} | |
} | |
/** | |
\class poppler::toc poppler-toc.h "poppler/cpp/poppler-toc.h" | |
Represents the TOC (Table of Contents) of a PDF %document. | |
The TOC of a PDF %document is represented as a tree of items. | |
*/ | |
toc::toc() : d(new toc_private()) { } | |
/** | |
Destroys the TOC. | |
*/ | |
toc::~toc() | |
{ | |
delete d; | |
} | |
/** | |
Returns the "invisible item" representing the root of the TOC. | |
This item is special, it has no title nor actions, it is open and its children | |
are the effective root items of the TOC. This is provided as a convenience | |
when iterating through the TOC. | |
\returns the root "item" | |
*/ | |
toc_item *toc::root() const | |
{ | |
return &d->root; | |
} | |
/** | |
\class poppler::toc_item poppler-toc.h "poppler/cpp/poppler-toc.h" | |
Represents an item of the TOC (Table of Contents) of a PDF %document. | |
*/ | |
/** | |
\typedef std::vector<toc_item *>::const_iterator poppler::toc_item::iterator | |
An iterator for the children of a TOC item. | |
*/ | |
toc_item::toc_item() : d(new toc_item_private()) { } | |
/** | |
Destroys the TOC item. | |
*/ | |
toc_item::~toc_item() | |
{ | |
delete d; | |
} | |
/** | |
\returns the title of the TOC item | |
*/ | |
ustring toc_item::title() const | |
{ | |
return d->title; | |
} | |
/** | |
Returns whether the TOC item should be represented as open when showing the | |
TOC. | |
This is not a functional behaviour, but a visualisation hint of the item. | |
Regardless of this state, the item can be expanded and collapsed freely when | |
represented in a TOC view of a PDF viewer. | |
\returns whether the TOC item should be open | |
*/ | |
bool toc_item::is_open() const | |
{ | |
return d->is_open; | |
} | |
/** | |
\returns the children of the TOC item | |
*/ | |
std::vector<toc_item *> toc_item::children() const | |
{ | |
return d->children; | |
} | |
/** | |
\returns an iterator to the being of the list of children of the TOC item | |
*/ | |
toc_item::iterator toc_item::children_begin() const | |
{ | |
return d->children.begin(); | |
} | |
/** | |
\returns an iterator to the end of the list of children of the TOC item | |
*/ | |
toc_item::iterator toc_item::children_end() const | |
{ | |
return d->children.end(); | |
} | |