summaryrefslogtreecommitdiffstats
path: root/tests/manual/quick/pdf/underscoredLinks.qml
blob: 514008ca26b829e1e8d0b592d262efbd052a6b2c (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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
import QtQuick.Dialogs
import QtQuick.Pdf
import QtQuick.Shapes

ApplicationWindow {
    id: root
    width: 800
    height: 940
    color: "darkgrey"
    title: doc.source
    visible: true

    property PdfDocument doc: PdfDocument { source: "test.pdf" }

    Component.onCompleted: {
        if (Application.arguments.length > 2)
            doc.source = Application.arguments[Application.arguments.length - 1]
    }
    FileDialog {
        id: fileDialog
        title: "Open a PDF file"
        nameFilters: [ "PDF files (*.pdf)" ]
        onAccepted: doc.source = selectedFile
    }
    ScrollView {
        anchors.fill: parent
        contentWidth: paper.width
        contentHeight: paper.height

        Rectangle {
            id: paper
            width: image.width
            height: image.height
            PdfPageImage {
                id: image
                document: doc

                property real zoomFactor: Math.sqrt(2)

                Shortcut {
                    sequence: StandardKey.MoveToNextPage
                    enabled: image.currentFrame < image.frameCount - 1
                    onActivated: image.currentFrame++
                }
                Shortcut {
                    sequence: StandardKey.MoveToPreviousPage
                    enabled: image.currentFrame > 0
                    onActivated: image.currentFrame--
                }
                Shortcut {
                    sequence: StandardKey.ZoomIn
                    enabled: image.sourceSize.width < 5000
                    onActivated: {
                        image.sourceSize.width = image.implicitWidth * image.zoomFactor
                        image.sourceSize.height = image.implicitHeight * image.zoomFactor
                    }
                }
                Shortcut {
                    sequence: StandardKey.ZoomOut
                    enabled: image.width > 50
                    onActivated: {
                        image.sourceSize.width = image.implicitWidth / image.zoomFactor
                        image.sourceSize.height = image.implicitHeight / image.zoomFactor
                    }
                }
                Shortcut {
                    sequence: "Ctrl+0"
                    onActivated: image.sourceSize = undefined
                }
                Shortcut {
                    sequence: StandardKey.Open
                    onActivated: fileDialog.open()
                }
                Shortcut {
                    sequence: StandardKey.Quit
                    onActivated: Qt.quit()
                }
            }

            Menu {
                id: linkContextMenu
                property var currentLink
                MenuItem {
                    text: "Go"
                    onTriggered: {
                        if (linkContextMenu.currentLink.page >= 0)
                            image.currentFrame = linkContextMenu.currentLink.page
                        else
                            Qt.openUrlExternally(linkContextMenu.currentLink.url)
                    }
                }
                MenuItem {
                    text: "Copy"
                    onTriggered: linkContextMenu.currentLink.copyToClipboard()
                }
            }

            Repeater {
                model: PdfLinkModel {
                    id: linkModel
                    document: doc
                    page: image.currentFrame
                }
                delegate: PdfLinkDelegate {
                    x: rectangle.x
                    y: rectangle.y
                    width: rectangle.width
                    height: rectangle.height
                    onTapped:
                        (link) => {
                            if (link.page >= 0)
                                image.currentFrame = link.page
                            else
                                Qt.openUrlExternally(url)
                        }
                    onContextMenuRequested:
                        (link) => {
                            linkContextMenu.currentLink = link
                            linkContextMenu.x = x
                            linkContextMenu.y = y
                            linkContextMenu.open()
                        }
                    Shape {
                        anchors.fill: parent
                        ShapePath {
                            strokeWidth: 1
                            strokeColor: palette.link
                            strokeStyle: ShapePath.DashLine
                            dashPattern: [ 1, 4 ]
                            startX: 0; startY: height
                            PathLine { x: width; y: height }
                        }
                    }
                }
            }
        }
    }
    Label {
        anchors { bottom: parent.bottom; right: parent.right; margins: 6 }
        text: "page " + (image.currentFrame + 1) + " of " + doc.pageCount
    }
}