summaryrefslogtreecommitdiffstats
path: root/src/pdfquick/qquickpdflinkmodel.cpp
blob: 469d13faff861ec495cfe6d0116545e0953257fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

#include "qquickpdflinkmodel_p.h"
#include <QQuickItem>
#include <QQmlEngine>
#include <QStandardPaths>

QT_BEGIN_NAMESPACE

/*!
    \qmltype PdfLinkModel
//!    \instantiates QQuickPdfLinkModel
    \inqmlmodule QtQuick.Pdf
    \ingroup pdf
    \brief A representation of links within a PDF document.
    \since 5.15

    PdfLinkModel provides the geometry and the destination for each link
    that the specified \l page contains.

    The available model roles are:

    \value rectangle
        Bounding rectangle around the link.
    \value url
        If the link is a web link, the URL for that; otherwise an empty URL.
    \value page
        If the link is an internal link, the page number to which the link should jump; otherwise \c {-1}.
    \value location
        If the link is an internal link, the location on the page to which the link should jump.
    \value zoom
        If the link is an internal link, the intended zoom level on the destination page.

    Normally it will be used with \l {QtQuick::Repeater}{Repeater} to visualize
    the links and provide the ability to click them:

    \qml
    Repeater {
        model: PdfLinkModel {
            document: root.document
            page: image.currentFrame
        }
        delegate: Rectangle {
            required property rect rectangle
            required property url url
            required property int page
            color: "transparent"
            border.color: "lightgrey"
            x: rectangle.x
            y: rectangle.y
            width: rectangle.width
            height: rectangle.height
            HoverHandler { cursorShape: Qt.PointingHandCursor }
            TapHandler {
                onTapped: {
                    if (page >= 0)
                        image.currentFrame = page
                    else
                        Qt.openUrlExternally(url)
                }
            }
        }
    }
    \endqml

    \note General-purpose PDF viewing capabilities are provided by
    \c PdfScrollablePageView and \c PdfMultiPageView. PdfLinkModel is only needed
    when building PDF view components from scratch.
*/

QQuickPdfLinkModel::QQuickPdfLinkModel(QObject *parent)
    : QPdfLinkModel(parent)
{
}

/*!
    \internal
*/
QQuickPdfLinkModel::~QQuickPdfLinkModel() = default;

/*!
    \qmlproperty PdfDocument PdfLinkModel::document

    This property holds the PDF document in which links are to be found.
*/
QQuickPdfDocument *QQuickPdfLinkModel::document() const
{
    return m_quickDocument;
}

void QQuickPdfLinkModel::setDocument(QQuickPdfDocument *document)
{
    if (document == m_quickDocument)
        return;
    m_quickDocument = document;
    if (document)
        QPdfLinkModel::setDocument(document->document());
}

/*!
    \qmlproperty int PdfLinkModel::page

    This property holds the page number on which links are to be found.
*/

QT_END_NAMESPACE

#include "moc_qquickpdflinkmodel_p.cpp"