summaryrefslogtreecommitdiffstats
path: root/examples/pdf/pdfviewer/viewer.qml
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pdf/pdfviewer/viewer.qml')
-rw-r--r--examples/pdf/pdfviewer/viewer.qml194
1 files changed, 147 insertions, 47 deletions
diff --git a/examples/pdf/pdfviewer/viewer.qml b/examples/pdf/pdfviewer/viewer.qml
index adc2a4b5b..e3bb4b474 100644
--- a/examples/pdf/pdfviewer/viewer.qml
+++ b/examples/pdf/pdfviewer/viewer.qml
@@ -47,22 +47,23 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-import QtQuick 2.15
-import QtQuick.Controls 2.15
-import QtQuick.Layouts 1.15
+import QtQuick 2.14
+import QtQuick.Controls 2.14
+import QtQuick.Layouts 1.14
import QtQuick.Pdf 5.15
-import QtQuick.Shapes 1.15
-import QtQuick.Window 2.15
+import QtQuick.Shapes 1.14
+import QtQuick.Window 2.14
+import Qt.labs.animation 1.0
import Qt.labs.platform 1.1 as Platform
ApplicationWindow {
id: root
width: 800
- height: 640
+ height: 1024
color: "lightgrey"
title: document.title
visible: true
- property alias source: document.source // for main.cpp
+ property string source // for main.cpp
property real scaleStep: Math.sqrt(2)
header: ToolBar {
@@ -79,74 +80,94 @@ ApplicationWindow {
ToolButton {
action: Action {
shortcut: StandardKey.ZoomIn
- enabled: pageView.sourceSize.width < 10000
+ enabled: view.sourceSize.width < 10000
icon.source: "resources/zoom-in.svg"
- onTriggered: pageView.renderScale *= root.scaleStep
+ onTriggered: view.renderScale *= root.scaleStep
}
}
ToolButton {
action: Action {
shortcut: StandardKey.ZoomOut
- enabled: pageView.sourceSize.width > 50
+ enabled: view.sourceSize.width > 50
icon.source: "resources/zoom-out.svg"
- onTriggered: pageView.renderScale /= root.scaleStep
+ onTriggered: view.renderScale /= root.scaleStep
+ }
+ }
+ ToolButton {
+ action: Action {
+ icon.source: "resources/zoom-fit-width.svg"
+ onTriggered: view.scaleToWidth(root.contentItem.width, root.contentItem.height)
+ }
+ }
+ ToolButton {
+ action: Action {
+ icon.source: "resources/zoom-fit-best.svg"
+ onTriggered: view.scaleToPage(root.contentItem.width, root.contentItem.height)
}
}
ToolButton {
action: Action {
shortcut: "Ctrl+0"
icon.source: "resources/zoom-original.svg"
- onTriggered: pageView.renderScale = 1
+ onTriggered: view.resetScale()
}
}
ToolButton {
action: Action {
shortcut: "Ctrl+L"
icon.source: "resources/rotate-left.svg"
- onTriggered: pageView.rotation -= 90
+ onTriggered: view.pageRotation -= 90
}
}
ToolButton {
action: Action {
shortcut: "Ctrl+R"
icon.source: "resources/rotate-right.svg"
- onTriggered: pageView.rotation += 90
+ onTriggered: view.pageRotation += 90
}
}
ToolButton {
action: Action {
- shortcut: StandardKey.MoveToPreviousPage
icon.source: "resources/go-previous-view-page.svg"
- enabled: pageView.currentPage > 0
- onTriggered: pageView.currentPage--
+ enabled: view.backEnabled
+ onTriggered: view.back()
+ }
+ ToolTip.visible: enabled && hovered
+ ToolTip.delay: 2000
+ ToolTip.text: "go back"
+ }
+ SpinBox {
+ id: currentPageSB
+ from: 1
+ to: document.pageCount
+ editable: true
+ value: view.currentPage + 1
+ onValueModified: view.goToPage(value - 1)
+ Shortcut {
+ sequence: StandardKey.MoveToPreviousPage
+ onActivated: view.goToPage(currentPageSB.value - 2)
+ }
+ Shortcut {
+ sequence: StandardKey.MoveToNextPage
+ onActivated: view.goToPage(currentPageSB.value)
}
}
ToolButton {
action: Action {
- shortcut: StandardKey.MoveToNextPage
icon.source: "resources/go-next-view-page.svg"
- enabled: pageView.currentPage < pageView.pageCount - 1
- onTriggered: pageView.currentPage++
+ enabled: view.forwardEnabled
+ onTriggered: view.forward()
}
+ ToolTip.visible: enabled && hovered
+ ToolTip.delay: 2000
+ ToolTip.text: "go forward"
}
- TextField {
- id: searchField
- placeholderText: "search"
- Layout.minimumWidth: 200
- Layout.fillWidth: true
- Image {
- visible: searchField.text !== ""
- source: "resources/edit-clear.svg"
- anchors {
- right: parent.right
- top: parent.top
- bottom: parent.bottom
- margins: 3
- rightMargin: 5
- }
- TapHandler {
- onTapped: searchField.clear()
- }
+ ToolButton {
+ action: Action {
+ shortcut: StandardKey.Copy
+ icon.source: "resources/edit-copy.svg"
+ enabled: view.selectedText !== ""
+ onTriggered: view.copySelectionToClipboard()
}
}
Shortcut {
@@ -182,21 +203,100 @@ ApplicationWindow {
}
}
- PdfPageView {
- id: pageView
+ PdfScrollablePageView {
+ id: view
+ anchors.fill: parent
document: PdfDocument {
id: document
+ source: Qt.resolvedUrl(root.source)
onStatusChanged: if (status === PdfDocument.Error) errorDialog.open()
}
searchString: searchField.text
}
- footer: Label {
- property size implicitPointSize: document.pagePointSize(pageView.currentPage)
- text: "page " + (pageView.currentPage + 1) + " of " + pageView.pageCount +
- " scale " + pageView.renderScale.toFixed(2) +
- " sourceSize " + pageView.sourceSize.width.toFixed(1) + "x" + pageView.sourceSize.height.toFixed(1) +
- " original " + implicitPointSize.width.toFixed(1) + "x" + implicitPointSize.height.toFixed(1)
- visible: pageView.pageCount > 0
+ Drawer {
+ id: searchDrawer
+ edge: Qt.LeftEdge
+ modal: false
+ width: 300
+ y: root.header.height
+ height: view.height
+ dim: false
+ clip: true
+ ListView {
+ id: searchResultsList
+ anchors.fill: parent
+ anchors.margins: 2
+ model: view.searchModel
+ ScrollBar.vertical: ScrollBar { }
+ delegate: ItemDelegate {
+ width: parent ? parent.width : 0
+ text: "page " + (page + 1) + ": " + context
+ highlighted: ListView.isCurrentItem
+ onClicked: {
+ searchResultsList.currentIndex = index
+ view.goToLocation(page, location, 0)
+ view.searchModel.currentResult = indexOnPage
+ }
+ }
+ }
+ }
+
+ footer: ToolBar {
+ height: footerRow.implicitHeight
+ RowLayout {
+ id: footerRow
+ anchors.fill: parent
+ ToolButton {
+ action: Action {
+ icon.source: "resources/go-up-search.svg"
+ shortcut: StandardKey.FindPrevious
+ onTriggered: view.searchBack()
+ }
+ ToolTip.visible: enabled && hovered
+ ToolTip.delay: 2000
+ ToolTip.text: "find previous"
+ }
+ TextField {
+ id: searchField
+ placeholderText: "search"
+ Layout.minimumWidth: 150
+ Layout.maximumWidth: 300
+ Layout.fillWidth: true
+ onAccepted: searchDrawer.open()
+ Image {
+ visible: searchField.text !== ""
+ source: "resources/edit-clear.svg"
+ anchors {
+ right: parent.right
+ top: parent.top
+ bottom: parent.bottom
+ margins: 3
+ rightMargin: 5
+ }
+ TapHandler {
+ onTapped: searchField.clear()
+ }
+ }
+ }
+ ToolButton {
+ action: Action {
+ icon.source: "resources/go-down-search.svg"
+ shortcut: StandardKey.FindNext
+ onTriggered: view.searchForward()
+ }
+ ToolTip.visible: enabled && hovered
+ ToolTip.delay: 2000
+ ToolTip.text: "find next"
+ }
+ Label {
+ Layout.fillWidth: true
+ property size implicitPointSize: document.pagePointSize(view.currentPage)
+ text: "page " + (view.currentPage + 1) + " of " + document.pageCount +
+ " scale " + view.renderScale.toFixed(2) +
+ " original " + implicitPointSize.width.toFixed(1) + "x" + implicitPointSize.height.toFixed(1) + "pts"
+ visible: document.status === PdfDocument.Ready
+ }
+ }
}
}