summaryrefslogtreecommitdiffstats
path: root/examples/pdf/multipage/viewer.qml
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2020-02-10 10:49:33 +0100
committerShawn Rutledge <shawn.rutledge@qt.io>2020-02-17 17:50:01 +0100
commit0b6a4d94945a975390b2574e6aff2568ebb7f061 (patch)
tree480d54e4146ee0d23dd3f2ce69877408162bb512 /examples/pdf/multipage/viewer.qml
parente5a33355798d3277c631b0024f389cdca2f2c683 (diff)
PdfSearchModel: be QALM and find search results on all pages
It's a QAbstractListModel, so now PdfMultiPageView has a ListView in a left-side Drawer showing all results found so far. - In PdfMultiPageView, multiple pages exist at once, so it makes sense to use the same searchmodel for all. - It's faster and saves memory. - Search results on each page can be cached. - It's possible to show search results in a ListView or QListView. Change-Id: I66fba6975954a09a4d23262be87ff8cc25ee7478 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'examples/pdf/multipage/viewer.qml')
-rw-r--r--examples/pdf/multipage/viewer.qml96
1 files changed, 61 insertions, 35 deletions
diff --git a/examples/pdf/multipage/viewer.qml b/examples/pdf/multipage/viewer.qml
index 3d9cd371a..8f102a3c1 100644
--- a/examples/pdf/multipage/viewer.qml
+++ b/examples/pdf/multipage/viewer.qml
@@ -230,6 +230,7 @@ ApplicationWindow {
PdfMultiPageView {
id: view
anchors.fill: parent
+ anchors.leftMargin: searchDrawer.position * searchDrawer.width
document: root.document
searchString: searchField.text
onCurrentPageChanged: currentPageSB.value = view.currentPage + 1
@@ -237,10 +238,11 @@ ApplicationWindow {
Drawer {
id: searchDrawer
- edge: Qt.BottomEdge
- x: 20
+ edge: Qt.LeftEdge
+ modal: false
width: searchLayout.implicitWidth
- height: searchLayout.implicitHeight
+ y: root.header.height
+ height: view.height
dim: false
Shortcut {
sequence: StandardKey.Find
@@ -249,45 +251,69 @@ ApplicationWindow {
searchField.forceActiveFocus()
}
}
- RowLayout {
+ ColumnLayout {
id: searchLayout
- ToolButton {
- action: Action {
- icon.source: "resources/go-up-search.svg"
- onTriggered: view.searchBack()
+ anchors.fill: parent
+ anchors.margins: 2
+ RowLayout {
+ 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"
}
- ToolTip.visible: enabled && hovered
- ToolTip.delay: 2000
- ToolTip.text: "find previous"
- }
- 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
+ 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()
+ }
}
- 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"
}
}
- ToolButton {
- action: Action {
- icon.source: "resources/go-down-search.svg"
- onTriggered: view.searchForward()
+ ListView {
+ id: searchResultsList
+ ColumnLayout.fillWidth: true
+ ColumnLayout.fillHeight: true
+ clip: true
+ 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
+ }
}
- ToolTip.visible: enabled && hovered
- ToolTip.delay: 2000
- ToolTip.text: "find next"
}
}
}