src/eric7/PdfViewer/PdfSearchWidget.py

Wed, 18 Jan 2023 16:38:29 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 18 Jan 2023 16:38:29 +0100
branch
pdf_viewer
changeset 9706
c0ff0b4d5657
parent 9704
6e1650b9b3b5
child 9707
717f95e35ca8
permissions
-rw-r--r--

PDF Viewer
- added the search actions and a 'Full Screen' action to the menus

9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a Search widget.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import Qt, pyqtSlot, QModelIndex, pyqtSignal
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtPdf import QPdfSearchModel, QPdfDocument, QPdfLink
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtWidgets import (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 QWidget, QVBoxLayout, QLabel, QLineEdit, QHBoxLayout, QToolButton,
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 QAbstractItemView, QTreeWidget, QTreeWidgetItem
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from eric7 import Preferences
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from eric7.EricGui import EricPixmapCache
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 class PdfSearchResultsWidget(QTreeWidget):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class implementing a widget to show the search results.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 @signal rowCountChanged() emitted to indicate a change of the number
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 of items
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
27 @signal searchNextAvailable(bool) emitted to indicate the availability of
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
28 search results after the current one
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
29 @signal searchPrevAvailable(bool) emitted to indicate the availability of
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
30 search results before the current one
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 rowCountChanged = pyqtSignal()
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
34 searchNextAvailable = pyqtSignal(bool)
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
35 searchPrevAvailable = pyqtSignal(bool)
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 def __init__(self, parent=None):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Constructor
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @param parent reference to the parent widget (defaults to None)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @type QWidget (optional)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 super().__init__(parent)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.setColumnCount(2)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.setHeaderHidden(True)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.setAlternatingRowColors(True)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.setSortingEnabled(False)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.__searchModel = QPdfSearchModel(self)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.__searchModel.modelReset.connect(self.__clear)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.__searchModel.rowsInserted.connect(self.__rowsInserted)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
57 self.currentItemChanged.connect(self.__handleCurrentItemChanged)
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
58
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 def setSearchString(self, searchString):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 Public method to set the search string.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @param searchString search string
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @type str
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.__searchModel.setSearchString(searchString)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 def searchString(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 Public method to get the current search string.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 @return search string
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @rtype str
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 return self.__searchModel.searchString()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 def setDocument(self, document):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 Public method to set the PDF document object to be searched.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 @param document reference to the PDF document object
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 @type QPdfDocument
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.__searchModel.setDocument(document)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 def document(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 Public method to get the reference to the PDF document object.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 @return reference to the PDF document object
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 @rtype QPdfDocument
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 return self.__searchModel.document()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 @pyqtSlot()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 def __clear(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 Private slot to clear the list of search results.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.clear()
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
101
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 self.rowCountChanged.emit()
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
103 self.searchNextAvailable.emit(False)
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
104 self.searchPrevAvailable.emit(False)
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @pyqtSlot(QModelIndex, int, int)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 def __rowsInserted(self, parent, first, last):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 Private slot to handle the insertion of rows of the search model.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 @param parent reference to the parent index
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 @type QModelIndex
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 @param first first row inserted
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 @type int
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 @param last last row inserted
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 @type int
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 contextLength = Preferences.getPdfViewer("PdfSearchContextLength")
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 for row in range(first, last + 1):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 index = self.__searchModel.index(row, 0)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 itm = QTreeWidgetItem(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 self,
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 [
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 self.tr("Page {0}").format(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 self.__searchModel.document().pageLabel(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 self.__searchModel.data(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 index, QPdfSearchModel.Role.Page.value
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 ),
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 "",
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 ]
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 contextBefore = self.__searchModel.data(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 index, QPdfSearchModel.Role.ContextBefore.value
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 if len(contextBefore) > contextLength:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 contextBefore = "... {0}".format(contextBefore[-contextLength:])
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 contextAfter = self.__searchModel.data(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 index, QPdfSearchModel.Role.ContextAfter.value
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 if len(contextAfter) > contextLength:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 contextAfter = "{0} ...".format(contextAfter[:contextLength])
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 resultLabel = QLabel(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 self.tr(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 "{0}<b>{1}</b>{2}",
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 "context before, search string, context after"
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 ).format(contextBefore, self.searchString(), contextAfter)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 self.setItemWidget(itm, 1, resultLabel)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 for column in range(self.columnCount()):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 self.resizeColumnToContents(column)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 self.rowCountChanged.emit()
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
157 self.searchNextAvailable.emit(True)
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 def rowCount(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 Public method to get the number of rows.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 @return number of rows
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 @rtype int
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 return self.topLevelItemCount()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 def currentRow(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 Public method to get the current row.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 @return current row
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 @rtype int
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 curItem = self.currentItem()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 if curItem is None:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 return -1
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 else:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 return self.indexOfTopLevelItem(curItem)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 def setCurrentRow(self, row):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 Public method to set the current row.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 @param row row number to make the current row
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 @type int
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 if 0 <= row < self.topLevelItemCount():
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 self.setCurrentItem(self.topLevelItem(row))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 def searchResultData(self, item, role):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 Public method to get data of a search result item.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 @param item reference to the search result item
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 @type QTreeWidgetItem
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 @param role item data role
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 @type QPdfSearchModel.Role or Qt.ItemDataRole
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 @return requested data
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 @rtype Any
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 row = self.indexOfTopLevelItem(item)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 index = self.__searchModel.index(row, 0)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 return self.__searchModel.data(index, role)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 def getPdfLink(self, item):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 Public method to get the PDF link associated with a search result item.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 @param item reference to the search result item
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 @type QTreeWidgetItem
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 @return associated PDF link
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 @rtype QPdfLink
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 row = self.indexOfTopLevelItem(item)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 return self.__searchModel.resultAtIndex(row)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
218 @pyqtSlot()
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
219 def __handleCurrentItemChanged(self):
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
220 """
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
221 Private slot to handle a change of the current item.
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
222 """
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
223 hasSearchResults = bool(self.topLevelItemCount())
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
224 currentRow = self.currentRow()
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
225 self.searchPrevAvailable.emit(hasSearchResults and currentRow > 0)
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
226 self.searchNextAvailable.emit(
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
227 hasSearchResults and currentRow < self.topLevelItemCount() - 1
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
228 )
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
229
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 class PdfSearchWidget(QWidget):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 Class implementing a Search widget.
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
234
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
235 @signal searchResultAktivated(QPdfLink) emitted to send the activated search
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
236 result link
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
237 @signal searchNextAvailable(bool) emitted to indicate the availability of
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
238 search results after the current one
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
239 @signal searchPrevAvailable(bool) emitted to indicate the availability of
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
240 search results before the current one
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 searchResultActivated = pyqtSignal(QPdfLink)
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
244 searchNextAvailable = pyqtSignal(bool)
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
245 searchPrevAvailable = pyqtSignal(bool)
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 def __init__(self, document, parent=None):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 Constructor
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 @param document reference to the PDF document object
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 @type QPdfDocument
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 @param parent reference to the parent widget (defaults to None)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 @type QWidget (optional)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 super().__init__(parent)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 self.__layout = QVBoxLayout(self)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 # Line 1: a header label
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 self.__header = QLabel("<h2>{0}</h2>".format(self.tr("Search")))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 self.__header.setAlignment(Qt.AlignmentFlag.AlignCenter)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 self.__layout.addWidget(self.__header)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 # Line 2: search entry and navigation buttons
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 self.__searchLineLayout = QHBoxLayout()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 self.__searchEdit = QLineEdit(self)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 self.__searchEdit.setPlaceholderText(self.tr("Search ..."))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 self.__searchEdit.setClearButtonEnabled(True)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 self.__searchLineLayout.addWidget(self.__searchEdit)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 # layout for the navigation buttons
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 self.__buttonsLayout = QHBoxLayout()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 self.__buttonsLayout.setSpacing(0)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 self.__findPrevButton = QToolButton(self)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 self.__findPrevButton.setToolTip(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 self.tr("Press to move to the previous occurrence")
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 self.__findPrevButton.setIcon(EricPixmapCache.getIcon("1leftarrow"))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 self.__buttonsLayout.addWidget(self.__findPrevButton)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 self.__findNextButton = QToolButton(self)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 self.__findNextButton.setToolTip(self.tr("Press to move to the next occurrence"))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 self.__findNextButton.setIcon(EricPixmapCache.getIcon("1rightarrow"))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 self.__buttonsLayout.addWidget(self.__findNextButton)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 self.__searchLineLayout.addLayout(self.__buttonsLayout)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 self.__layout.addLayout(self.__searchLineLayout)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 self.__resultsWidget = PdfSearchResultsWidget(self)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 self.__resultsWidget.setDocument(document)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 self.__layout.addWidget(self.__resultsWidget)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 self.setLayout(self.__layout)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 self.__searchEdit.setEnabled(False)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 self.__resultsWidget.setEnabled(False)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 self.__findPrevButton.setEnabled(False)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 self.__findNextButton.setEnabled(False)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 self.__resultsWidget.itemActivated.connect(self.__entrySelected)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 document.statusChanged.connect(self.__handleDocumentStatus)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 self.__searchEdit.returnPressed.connect(self.__search)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 self.__searchEdit.textChanged.connect(self.__searchTextChanged)
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
307 self.__resultsWidget.searchNextAvailable.connect(self.searchNextAvailable)
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
308 self.__resultsWidget.searchPrevAvailable.connect(self.searchPrevAvailable)
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
309 self.__resultsWidget.searchNextAvailable.connect(
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
310 self.__findNextButton.setEnabled
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 )
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
312 self.__resultsWidget.searchPrevAvailable.connect(
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
313 self.__findPrevButton.setEnabled
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
314 )
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
315 self.__findNextButton.clicked.connect(self.nextResult)
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
316 self.__findPrevButton.clicked.connect(self.previousResult)
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 @pyqtSlot(QPdfDocument.Status)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 def __handleDocumentStatus(self, status):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 Private slot to handle a change of the document status.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 @param status document status
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 @type QPdfDocument.Status
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 ready = status == QPdfDocument.Status.Ready
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 self.__searchEdit.setEnabled(ready)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 self.__resultsWidget.setEnabled(ready)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 if not ready:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 self.__searchEdit.clear()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 @pyqtSlot(str)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 def __searchTextChanged(self, text):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 Private slot to handle a change of the search string.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 @param text search string
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 @type str
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 if not text:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 self.__resultsWidget.setSearchString("")
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 @pyqtSlot()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 def __search(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 Private slot to initiate a new search.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 searchString = self.__searchEdit.text()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 self.__resultsWidget.setSearchString(searchString)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 @pyqtSlot(QTreeWidgetItem)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 def __entrySelected(self, item):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 Private slot to handle the selection of a search result entry.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 @param index index of the activated entry
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 @type QModelIndex
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 link = self.__resultsWidget.getPdfLink(item)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 self.searchResultActivated.emit(link)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 @pyqtSlot()
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
365 def nextResult(self):
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 """
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
367 Public slot to activate the next result.
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 row = self.__resultsWidget.currentRow()
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
370 if row < self.__resultsWidget.rowCount() - 1:
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 nextItem = self.__resultsWidget.topLevelItem(row + 1)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 self.__resultsWidget.setCurrentItem(nextItem)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 self.__entrySelected(nextItem)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 @pyqtSlot()
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
376 def previousResult(self):
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 """
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
378 Public slot to activate the previous result.
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 row = self.__resultsWidget.currentRow()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 if row > 0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 prevItem = self.__resultsWidget.topLevelItem(row - 1)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 self.__resultsWidget.setCurrentItem(prevItem)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 self.__entrySelected(prevItem)
9706
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
385
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
386 @pyqtSlot()
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
387 def activateSearch(self):
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
388 """
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
389 Public slot to 'activate' a search.
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
390 """
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
391 self.__searchEdit.setFocus(Qt.FocusReason.OtherFocusReason)
c0ff0b4d5657 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
392 self.__searchEdit.selectAll()

eric ide

mercurial