5 |
5 |
6 """ |
6 """ |
7 Module implementing a Search widget. |
7 Module implementing a Search widget. |
8 """ |
8 """ |
9 |
9 |
10 from PyQt6.QtCore import Qt, pyqtSlot, QModelIndex, pyqtSignal |
10 from PyQt6.QtCore import QModelIndex, Qt, pyqtSignal, pyqtSlot |
11 from PyQt6.QtPdf import QPdfSearchModel, QPdfDocument, QPdfLink |
11 from PyQt6.QtPdf import QPdfDocument, QPdfLink, QPdfSearchModel |
12 from PyQt6.QtWidgets import ( |
12 from PyQt6.QtWidgets import ( |
13 QWidget, QVBoxLayout, QLabel, QLineEdit, QHBoxLayout, QToolButton, |
13 QAbstractItemView, |
14 QAbstractItemView, QTreeWidget, QTreeWidgetItem |
14 QHBoxLayout, |
|
15 QLabel, |
|
16 QLineEdit, |
|
17 QToolButton, |
|
18 QTreeWidget, |
|
19 QTreeWidgetItem, |
|
20 QVBoxLayout, |
|
21 QWidget, |
15 ) |
22 ) |
16 |
23 |
17 from eric7 import Preferences |
24 from eric7 import Preferences |
18 from eric7.EricGui import EricPixmapCache |
25 from eric7.EricGui import EricPixmapCache |
19 |
26 |
134 index, QPdfSearchModel.Role.Page.value |
141 index, QPdfSearchModel.Role.Page.value |
135 ) |
142 ) |
136 ) |
143 ) |
137 ), |
144 ), |
138 "", |
145 "", |
139 ] |
146 ], |
140 ) |
147 ) |
141 contextBefore = self.__searchModel.data( |
148 contextBefore = self.__searchModel.data( |
142 index, QPdfSearchModel.Role.ContextBefore.value |
149 index, QPdfSearchModel.Role.ContextBefore.value |
143 ) |
150 ) |
144 if len(contextBefore) > contextLength: |
151 if len(contextBefore) > contextLength: |
148 ) |
155 ) |
149 if len(contextAfter) > contextLength: |
156 if len(contextAfter) > contextLength: |
150 contextAfter = "{0} ...".format(contextAfter[:contextLength]) |
157 contextAfter = "{0} ...".format(contextAfter[:contextLength]) |
151 resultLabel = QLabel( |
158 resultLabel = QLabel( |
152 self.tr( |
159 self.tr( |
153 "{0}<b>{1}</b>{2}", |
160 "{0}<b>{1}</b>{2}", "context before, search string, context after" |
154 "context before, search string, context after" |
|
155 ).format(contextBefore, self.searchString(), contextAfter) |
161 ).format(contextBefore, self.searchString(), contextAfter) |
156 ) |
162 ) |
157 self.setItemWidget(itm, 1, resultLabel) |
163 self.setItemWidget(itm, 1, resultLabel) |
158 |
164 |
159 if Preferences.getPdfViewer("PdfSearchHighlightAll"): |
165 if Preferences.getPdfViewer("PdfSearchHighlightAll"): |
239 |
245 |
240 class PdfSearchWidget(QWidget): |
246 class PdfSearchWidget(QWidget): |
241 """ |
247 """ |
242 Class implementing a Search widget. |
248 Class implementing a Search widget. |
243 |
249 |
244 @signal searchResultAktivated(QPdfLink) emitted to send the activated search |
250 @signal searchResultActivated(QPdfLink) emitted to send the activated search |
245 result link |
251 result link |
246 @signal searchNextAvailable(bool) emitted to indicate the availability of |
252 @signal searchNextAvailable(bool) emitted to indicate the availability of |
247 search results after the current one |
253 search results after the current one |
248 @signal searchPrevAvailable(bool) emitted to indicate the availability of |
254 @signal searchPrevAvailable(bool) emitted to indicate the availability of |
249 search results before the current one |
255 search results before the current one |
276 self.__header.setAlignment(Qt.AlignmentFlag.AlignCenter) |
282 self.__header.setAlignment(Qt.AlignmentFlag.AlignCenter) |
277 self.__layout.addWidget(self.__header) |
283 self.__layout.addWidget(self.__header) |
278 |
284 |
279 # Line 2: search entry and navigation buttons |
285 # Line 2: search entry and navigation buttons |
280 self.__searchLineLayout = QHBoxLayout() |
286 self.__searchLineLayout = QHBoxLayout() |
281 |
287 |
282 self.__searchEdit = QLineEdit(self) |
288 self.__searchEdit = QLineEdit(self) |
283 self.__searchEdit.setPlaceholderText(self.tr("Search ...")) |
289 self.__searchEdit.setPlaceholderText(self.tr("Search ...")) |
284 self.__searchEdit.setClearButtonEnabled(True) |
290 self.__searchEdit.setClearButtonEnabled(True) |
285 self.__searchLineLayout.addWidget(self.__searchEdit) |
291 self.__searchLineLayout.addWidget(self.__searchEdit) |
286 |
292 |
287 # layout for the navigation buttons |
293 # layout for the navigation buttons |
288 self.__buttonsLayout = QHBoxLayout() |
294 self.__buttonsLayout = QHBoxLayout() |
289 self.__buttonsLayout.setSpacing(0) |
295 self.__buttonsLayout.setSpacing(0) |
290 |
296 |
291 self.__findPrevButton = QToolButton(self) |
297 self.__findPrevButton = QToolButton(self) |
294 ) |
300 ) |
295 self.__findPrevButton.setIcon(EricPixmapCache.getIcon("1leftarrow")) |
301 self.__findPrevButton.setIcon(EricPixmapCache.getIcon("1leftarrow")) |
296 self.__buttonsLayout.addWidget(self.__findPrevButton) |
302 self.__buttonsLayout.addWidget(self.__findPrevButton) |
297 |
303 |
298 self.__findNextButton = QToolButton(self) |
304 self.__findNextButton = QToolButton(self) |
299 self.__findNextButton.setToolTip(self.tr("Press to move to the next occurrence")) |
305 self.__findNextButton.setToolTip( |
|
306 self.tr("Press to move to the next occurrence") |
|
307 ) |
300 self.__findNextButton.setIcon(EricPixmapCache.getIcon("1rightarrow")) |
308 self.__findNextButton.setIcon(EricPixmapCache.getIcon("1rightarrow")) |
301 self.__buttonsLayout.addWidget(self.__findNextButton) |
309 self.__buttonsLayout.addWidget(self.__findNextButton) |
302 |
310 |
303 self.__searchLineLayout.addLayout(self.__buttonsLayout) |
311 self.__searchLineLayout.addLayout(self.__buttonsLayout) |
304 self.__layout.addLayout(self.__searchLineLayout) |
312 self.__layout.addLayout(self.__searchLineLayout) |
377 @pyqtSlot(QTreeWidgetItem) |
385 @pyqtSlot(QTreeWidgetItem) |
378 def __entrySelected(self, item): |
386 def __entrySelected(self, item): |
379 """ |
387 """ |
380 Private slot to handle the selection of a search result entry. |
388 Private slot to handle the selection of a search result entry. |
381 |
389 |
382 @param index index of the activated entry |
390 @param item reference to the selected item |
383 @type QModelIndex |
391 @type QTreeWidgetItem |
384 """ |
392 """ |
385 link = self.__resultsWidget.getPdfLink(item) |
393 link = self.__resultsWidget.getPdfLink(item) |
386 self.searchResultActivated.emit(link) |
394 self.searchResultActivated.emit(link) |
387 |
395 |
388 @pyqtSlot() |
396 @pyqtSlot() |