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