Add vim like shortcuts to ebook-viewer for scrolling. Fixes #2083 (Add Keyboard shorcuts to Viewer)

This commit is contained in:
Kovid Goyal 2009-03-15 13:46:58 -07:00
parent fad3f7a7d0
commit f785c76883
2 changed files with 29 additions and 1 deletions

View File

@ -450,7 +450,9 @@ class DocumentView(QWebView):
self.manager.scrolled(self.scroll_fraction) self.manager.scrolled(self.scroll_fraction)
def wheel_event(self, down=True): def wheel_event(self, down=True):
QWebView.wheelEvent(self, QWheelEvent(QPoint(100, 100), (-120 if down else 120), Qt.NoButton, Qt.NoModifier)) QWebView.wheelEvent(self,
QWheelEvent(QPoint(100, 100), (-120 if down else 120),
Qt.NoButton, Qt.NoModifier))
def next_page(self): def next_page(self):
if self.document.at_bottom: if self.document.at_bottom:
@ -538,6 +540,26 @@ class DocumentView(QWebView):
self.next_page() self.next_page()
elif key in [Qt.Key_PageUp, Qt.Key_Backspace, Qt.Key_Up]: elif key in [Qt.Key_PageUp, Qt.Key_Backspace, Qt.Key_Up]:
self.previous_page() self.previous_page()
elif key in [Qt.Key_Home]:
if event.modifiers() & Qt.ControlModifier:
if self.manager is not None:
self.manager.goto_start()
else:
self.scroll_to(0)
elif key in [Qt.Key_End]:
if event.modifiers() & Qt.ControlModifier:
if self.manager is not None:
self.manager.goto_end()
else:
self.scroll_to(1)
elif key in [Qt.Key_J]:
self.wheel_event()
elif key in [Qt.Key_K]:
self.wheel_event(down=False)
elif key in [Qt.Key_H]:
self.scroll_by(x=-15)
elif key in [Qt.Key_L]:
self.scroll_by(x=15)
else: else:
return QWebView.keyPressEvent(self, event) return QWebView.keyPressEvent(self, event)

View File

@ -325,6 +325,12 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
pos = self.history.forward() pos = self.history.forward()
if pos is not None: if pos is not None:
self.goto_page(pos) self.goto_page(pos)
def goto_start(self):
self.goto_page(1)
def goto_end(self):
self.goto_page(self.pos.maximum())
def goto_page(self, new_page): def goto_page(self, new_page):
if self.current_page is not None: if self.current_page is not None: