congrats screen; add temporary hack for space bar and pass links through bridge

This commit is contained in:
Damien Elmes 2011-03-24 18:13:58 +09:00
parent b5f393c7fe
commit b699226cfd
2 changed files with 30 additions and 14 deletions

View file

@ -244,8 +244,8 @@ $(".ansbut").focus();
self._answerCard(key) self._answerCard(key)
return True return True
def _linkHandler(self, url): def _linkHandler(self, url):
print url
if url == "ans": if url == "ans":
self._showAnswer() self._showAnswer()
elif url.startswith("ease"): elif url.startswith("ease"):
@ -254,6 +254,8 @@ $(".ansbut").focus();
self.mw.onAddCard() self.mw.onAddCard()
elif url == "dlist": elif url == "dlist":
self.mw.close() self.mw.close()
elif url == "ov":
self.mw.moveToState("overview")
# CSS # CSS
########################################################################## ##########################################################################
@ -439,22 +441,22 @@ div#filler {
def _showCongrats(self): def _showCongrats(self):
self.state = "congrats" self.state = "congrats"
self.card = None self.card = None
self.deck.db.flush() self.mw.deck.save()
self.hideButtons() buf = """
self.disableCardMenuItems() <center>
self.switchToCongratsScreen() %s
self.form.learnMoreButton.setEnabled( <p>
not not self.deck.newAvail) <a class=but id=ov href=ov>%s</a>
self.startRefreshTimer() <a class=but href=dlist>%s</a>
self.bodyView.setState(state) <script>$("#ov").focus();</script>
# focus finish button </center>""" % (self.mw.deck.sched.finishedMsg(),
self.form.finishButton.setFocus() _("Overview"),
_("Deck List"))
self.web.stdHtml(buf, css=self.mw.sharedCSS)
runHook('deckFinished') runHook('deckFinished')
def drawDeckFinishedMessage(self): def drawDeckFinishedMessage(self):
"Tell the user the deck is finished." "Tell the user the deck is finished."
self.main.mainWin.congratsLabel.setText(
self.main.deck.deckFinishedMsg())
# Deck empty case # Deck empty case
########################################################################## ##########################################################################

View file

@ -16,8 +16,14 @@ class Bridge(QObject):
@pyqtSlot(str, result=str) @pyqtSlot(str, result=str)
def run(self, str): def run(self, str):
return unicode(self._bridge(unicode(str))) return unicode(self._bridge(unicode(str)))
@pyqtSlot(str)
def link(self, str):
print "link", str
self._linkHandler(unicode(str))
def setBridge(self, func): def setBridge(self, func):
self._bridge = func self._bridge = func
def setLinkHandler(self, func):
self._linkHandler = func
# Page for debug messages # Page for debug messages
########################################################################## ##########################################################################
@ -42,7 +48,6 @@ class AnkiWebView(QWebView):
self._loadFinishedCB = None self._loadFinishedCB = None
self.setPage(self._page) self.setPage(self._page)
self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
self.page().mainFrame().addToJavaScriptWindowObject("py", self._bridge)
self.setLinkHandler() self.setLinkHandler()
self.setKeyHandler() self.setKeyHandler()
self.connect(self, SIGNAL("linkClicked(QUrl)"), self._linkHandler) self.connect(self, SIGNAL("linkClicked(QUrl)"), self._linkHandler)
@ -65,6 +70,7 @@ class AnkiWebView(QWebView):
self.linkHandler = handler self.linkHandler = handler
else: else:
self.linkHandler = self._openLinksExternally self.linkHandler = self._openLinksExternally
self._bridge.setLinkHandler(self.linkHandler)
def setKeyHandler(self, handler=None): def setKeyHandler(self, handler=None):
# handler should return true if event should be swallowed # handler should return true if event should be swallowed
self._keyHandler = handler self._keyHandler = handler
@ -72,11 +78,19 @@ class AnkiWebView(QWebView):
if loadCB: if loadCB:
self._loadFinishedCB = loadCB self._loadFinishedCB = loadCB
QWebView.setHtml(self, html) QWebView.setHtml(self, html)
self.page().mainFrame().addToJavaScriptWindowObject("py", self._bridge)
def stdHtml(self, body, css="", bodyClass="", loadCB=None): def stdHtml(self, body, css="", bodyClass="", loadCB=None):
self.setHtml(""" self.setHtml("""
<html><head><style>%s</style> <html><head><style>%s</style>
<script src="qrc:/jquery.min.js"></script> <script src="qrc:/jquery.min.js"></script>
<script src="qrc:/jquery.flot.min.js"></script> <script src="qrc:/jquery.flot.min.js"></script>
<script>
$(document).keydown(function(e) {
if(e.which==32 && document.activeElement.nodeName == "A") {
py.link(document.activeElement.href);
}
});
</script>
</head> </head>
<body class="%s">%s</body></html>""" % (css, bodyClass, body), loadCB) <body class="%s">%s</body></html>""" % (css, bodyClass, body), loadCB)
# ensure we're focused # ensure we're focused