diff --git a/src/calibre/gui2/tweak_book/check.py b/src/calibre/gui2/tweak_book/check.py index 43f758105d..21156456eb 100644 --- a/src/calibre/gui2/tweak_book/check.py +++ b/src/calibre/gui2/tweak_book/check.py @@ -59,6 +59,15 @@ class Check(QWidget): elif url == 'run:check': self.check_requested.emit() + def next_error(self, delta=1): + row = self.items.currentRow() + num = self.items.count() + if num > 0: + row = (row + delta) % num + self.items.setCurrentRow(row) + self.items.item(row).setSelected(True) + self.current_item_activated() + def current_item_activated(self, *args): i = self.items.currentItem() if i is not None: @@ -100,6 +109,7 @@ class Check(QWidget): self.items.item(0).setSelected(True) self.items.setCurrentRow(0) self.current_item_changed() + self.items.setFocus(Qt.OtherFocusReason) else: self.clear_help(_('No problems found')) @@ -111,6 +121,11 @@ class Check(QWidget): self.help.setText('') self.items.clear() + def keyPressEvent(self, ev): + if ev.key() in (Qt.Key_Enter, Qt.Key_Return): + self.current_item_activated() + return super(Check, self).keyPressEvent(ev) + def main(): from calibre.gui2 import Application from calibre.gui2.tweak_book.boss import get_container diff --git a/src/calibre/gui2/tweak_book/ui.py b/src/calibre/gui2/tweak_book/ui.py index e886999b7d..98d827df03 100644 --- a/src/calibre/gui2/tweak_book/ui.py +++ b/src/calibre/gui2/tweak_book/ui.py @@ -195,6 +195,7 @@ class Main(MainWindow): self.central = Central(self) self.setCentralWidget(self.central) + self.check_book = Check(self) self.create_actions() self.create_toolbars() @@ -282,7 +283,6 @@ class Main(MainWindow): _('Beautify current file')) self.action_pretty_all = reg('format-justify-fill.png', _('&Beautify all files'), partial(self.boss.pretty_print, False), 'pretty-all', (), _('Beautify all files')) - self.action_check_book = reg('debug.png', _('&Check Book'), self.boss.check_requested, 'check-book', ('F7'), _('Check book for errors')) # Polish actions group = _('Polish Book') @@ -329,6 +329,14 @@ class Main(MainWindow): self.action_mark = reg(None, _('&Mark selected text'), self.boss.mark_selected_text, 'mark-selected-text', ('Ctrl+Shift+M',), _('Mark selected text')) self.action_go_to_line = reg(None, _('Go to &line'), self.boss.go_to_line_number, 'go-to-line-number', ('Ctrl+.',), _('Go to line number')) + # Check Book actions + group = _('Check Book') + self.action_check_book = reg('debug.png', _('&Check Book'), self.boss.check_requested, 'check-book', ('F7'), _('Check book for errors')) + self.action_check_book_next = reg('forward.png', _('&Next error'), partial( + self.check_book.next_error, delta=1), 'check-book-next', ('Ctrl+F7'), _('Show next error')) + self.action_check_book_previous = reg('back.png', _('&Previous error'), partial( + self.check_book.next_error, delta=-1), 'check-book-previous', ('Ctrl+Shift+F7'), _('Show previous error')) + # Miscellaneous actions group = _('Miscellaneous') self.action_create_checkpoint = reg( @@ -463,7 +471,6 @@ class Main(MainWindow): d = create(_('Check Book'), 'check-book') d.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea | Qt.BottomDockWidgetArea | Qt.TopDockWidgetArea) - self.check_book = Check(self) d.setWidget(self.check_book) self.addDockWidget(Qt.TopDockWidgetArea, d) d.close() # By default the check window is closed