move the key handler into the webview instead of the main window

This commit is contained in:
Damien Elmes 2011-03-24 07:35:14 +09:00
parent 7b2ff671e8
commit f561bd1473
5 changed files with 19 additions and 27 deletions

View file

@ -24,7 +24,7 @@ class DeckBrowser(object):
def show(self, _init=True):
if _init:
self.web.setLinkHandler(self._linkHandler)
self.mw.setKeyHandler(self._keyHandler)
self.web.setKeyHandler(self._keyHandler)
self._setupToolbar()
# refresh or reorder
if (time.time() - self._browserLastRefreshed >
@ -103,8 +103,7 @@ class DeckBrowser(object):
if ((txt >= "0" and txt <= "9") or
(txt >= "a" and txt <= "z")):
self._openAccel(txt)
evt.accept()
evt.ignore()
return True
def _openAccel(self, txt):
for d in self._decks:

View file

@ -339,16 +339,6 @@ Please do not file a bug report with Anki.<br>""")
def closeAllDeckWindows(self):
aqt.dialogs.closeAll()
def setKeyHandler(self, fn):
self._keyHandler = fn
def keyPressEvent(self, evt):
"Show answer on RET or register answer."
if self._keyHandler:
self._keyHandler(evt)
else:
evt.ignore()
# to port
# elif self.state == "studyScreen":
# if evt.key() in (Qt.Key_Enter,

View file

@ -16,7 +16,7 @@ class Overview(object):
def show(self):
self._setupToolbar()
self.mw.setKeyHandler(self._keyHandler)
self.web.setKeyHandler(self._keyHandler)
self.web.setLinkHandler(self._linkHandler)
self._renderPage()
@ -38,9 +38,8 @@ class Overview(object):
elif txt == "d":
self._linkHandler("list")
else:
evt.ignore()
return
evt.accept()
return True
def _linkHandler(self, url):
print "link", url

View file

@ -12,8 +12,6 @@ from anki.sound import playFromText, clearAudioQueue
from aqt.utils import mungeQA, getBase
import aqt
# fixme: space is scrolling instead of showing the current answer
class Reviewer(object):
"Manage reviews. Maintains a separate state."
@ -26,7 +24,7 @@ class Reviewer(object):
self._setupStatus()
def show(self):
self.mw.setKeyHandler(self._keyHandler)
self.web.setKeyHandler(self._keyHandler)
self.web.setLinkHandler(self._linkHandler)
self._getCard()
@ -199,29 +197,27 @@ $(".ansbut").focus();
show = False
if evt.key() in (Qt.Key_Enter,
Qt.Key_Return):
evt.accept()
show = True
elif evt.key() == Qt.Key_Space and not self.typeAns():
evt.accept()
show = True
if show:
self._showAnswer()
return self.web.eval("showans();")
self.web.eval("showans();")
return True
elif self.state == "answer":
if evt.key() in (Qt.Key_Enter,
Qt.Key_Return,
Qt.Key_Space):
self._answerCard(self._defaultEase())
evt.accept()
return
return True
else:
key = unicode(evt.text())
if key and key >= "1" and key <= "4":
key=int(key)
if self.card.queue == 2 or key < 4:
evt.accept()
return self._answerCard(key)
evt.ignore()
self._answerCard(key)
return True
def _linkHandler(self, url):
print "link", url

View file

@ -44,12 +44,17 @@ class AnkiWebView(QWebView):
self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
self.page().mainFrame().addToJavaScriptWindowObject("py", self._bridge)
self.setLinkHandler()
self.setKeyHandler()
self.connect(self, SIGNAL("linkClicked(QUrl)"), self._linkHandler)
self.connect(self, SIGNAL("loadFinished(bool)"), self._loadFinished)
def keyPressEvent(self, evt):
if evt.matches(QKeySequence.Copy):
self.triggerPageAction(QWebPage.Copy)
evt.accept()
if self._keyHandler:
if self._keyHandler(evt):
evt.accept()
return
QWebView.keyPressEvent(self, evt)
def contextMenuEvent(self, evt):
QWebView.contextMenuEvent(self, evt)
@ -60,6 +65,9 @@ class AnkiWebView(QWebView):
self.linkHandler = handler
else:
self.linkHandler = self._openLinksExternally
def setKeyHandler(self, handler=None):
# handler should return true if event should be swallowed
self._keyHandler = handler
def setHtml(self, html, loadCB=None):
if loadCB:
self._loadFinishedCB = loadCB