mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix #5516 (search forward AND backward in Ebook Viewer)
This commit is contained in:
parent
5318d73056
commit
0c18cf92e3
@ -92,10 +92,10 @@ class EbookIterator(object):
|
||||
ext = re.sub(r'(x{0,1})htm(l{0,1})', 'html', ext)
|
||||
self.ebook_ext = ext
|
||||
|
||||
def search(self, text, index):
|
||||
def search(self, text, index, backwards=False):
|
||||
text = text.lower()
|
||||
for i, path in enumerate(self.spine):
|
||||
if i > index:
|
||||
if (backwards and i < index) or (not backwards and i > index):
|
||||
if text in open(path, 'rb').read().decode(path.encoding).lower():
|
||||
return i
|
||||
|
||||
|
@ -137,6 +137,13 @@ class SearchBox2(QComboBox):
|
||||
if event.timerId() == self.timer:
|
||||
self.do_search()
|
||||
|
||||
@property
|
||||
def smart_text(self):
|
||||
text = unicode(self.currentText()).strip()
|
||||
if not text or text == self.help_text:
|
||||
return ''
|
||||
return text
|
||||
|
||||
def do_search(self):
|
||||
text = unicode(self.currentText()).strip()
|
||||
if not text or text == self.help_text:
|
||||
|
@ -585,7 +585,9 @@ class DocumentView(QWebView):
|
||||
def fset(self, val): self.document.current_language = val
|
||||
return property(fget=fget, fset=fset)
|
||||
|
||||
def search(self, text):
|
||||
def search(self, text, backwards=False):
|
||||
if backwards:
|
||||
return self.findText(text, self.document.FindBackwards)
|
||||
return self.findText(text)
|
||||
|
||||
def path(self):
|
||||
|
@ -229,7 +229,11 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
||||
self.connect(self.action_previous_page, SIGNAL('triggered(bool)'),
|
||||
lambda x:self.view.previous_page())
|
||||
self.connect(self.action_find_next, SIGNAL('triggered(bool)'),
|
||||
lambda x:self.find(unicode(self.search.text()), True, repeat=True))
|
||||
lambda x:self.find(self.search.smart_text, True, repeat=True))
|
||||
self.connect(self.action_find_previous, SIGNAL('triggered(bool)'),
|
||||
lambda x:self.find(self.search.smart_text, True,
|
||||
repeat=True, backwards=True))
|
||||
|
||||
self.connect(self.action_full_screen, SIGNAL('triggered(bool)'),
|
||||
self.toggle_fullscreen)
|
||||
self.action_full_screen.setShortcuts([Qt.Key_F11, Qt.CTRL+Qt.SHIFT+Qt.Key_F])
|
||||
@ -420,13 +424,15 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
||||
self.set_bookmarks(self.iterator.bookmarks)
|
||||
|
||||
|
||||
def find(self, text, refinement, repeat=False):
|
||||
def find(self, text, refinement, repeat=False, backwards=False):
|
||||
if not text:
|
||||
self.view.search('')
|
||||
return self.search.search_done(False)
|
||||
if self.view.search(text):
|
||||
self.scrolled(self.view.scroll_fraction)
|
||||
return self.search.search_done(True)
|
||||
index = self.iterator.search(text, self.current_index)
|
||||
index = self.iterator.search(text, self.current_index,
|
||||
backwards=backwards)
|
||||
if index is None:
|
||||
if self.current_index > 0:
|
||||
index = self.iterator.search(text, 0)
|
||||
@ -444,10 +450,7 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
||||
self.scrolled(self.view.scroll_fraction)
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
if event.key() == Qt.Key_F3:
|
||||
text = unicode(self.search.text())
|
||||
self.find(text, True, repeat=True)
|
||||
elif event.key() == Qt.Key_Slash:
|
||||
if event.key() == Qt.Key_Slash:
|
||||
self.search.setFocus(Qt.OtherFocusReason)
|
||||
else:
|
||||
return MainWindow.keyPressEvent(self, event)
|
||||
|
@ -142,6 +142,7 @@
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<addaction name="action_find_next"/>
|
||||
<addaction name="action_find_previous"/>
|
||||
</widget>
|
||||
<action name="action_back">
|
||||
<property name="icon">
|
||||
@ -232,6 +233,12 @@
|
||||
<property name="text">
|
||||
<string>Find next</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Find next occurrence</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>F3</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_copy">
|
||||
<property name="icon">
|
||||
@ -287,6 +294,21 @@
|
||||
<string>Print</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_find_previous">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../resources/images.qrc">
|
||||
<normaloff>:/images/arrow-up.svg</normaloff>:/images/arrow-up.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Find previous</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Find previous occurrence</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Shift+F3</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
Loading…
x
Reference in New Issue
Block a user