From ac7602675a1da5fed45829fc42ed36626a6d0de2 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Fri, 2 Dec 2011 17:19:57 +0900 Subject: [PATCH] tooltips --- aqt/browser.py | 6 ++--- aqt/editor.py | 9 ++++--- aqt/main.py | 8 +++++- aqt/reviewer.py | 70 ++++++++++++++++++++++++++++++------------------- aqt/toolbar.py | 26 ++++++++++-------- 5 files changed, 73 insertions(+), 46 deletions(-) diff --git a/aqt/browser.py b/aqt/browser.py index 9709e07e1..ce72edebd 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -1422,9 +1422,9 @@ class BrowserToolbar(Toolbar): def _centerLinks(self): links = [ - ["setDeck", _("Move to Deck")], - ["addTags", _("Add Tags")], - ["remTags", _("Remove Tags")], + ["setDeck", _("Move to Deck"), ""], + ["addTags", _("Add Tags"), ""], + ["remTags", _("Remove Tags"), ""], ] return self._linkHTML(links) diff --git a/aqt/editor.py b/aqt/editor.py index cc63b666f..3aff095aa 100644 --- a/aqt/editor.py +++ b/aqt/editor.py @@ -234,7 +234,7 @@ class Editor(object): ###################################################################### def _addButton(self, name, func, key=None, tip=None, size=True, text="", - check=False, native=False): + check=False, native=False, canDisable=True): b = QPushButton(text) if check: b.connect(b, SIGNAL("clicked(bool)"), func) @@ -255,7 +255,8 @@ class Editor(object): if check: b.setCheckable(True) self.iconsBox.addWidget(b) - self._buttons[name] = b + if canDisable: + self._buttons[name] = b return b def setupButtons(self): @@ -271,10 +272,10 @@ class Editor(object): b = self._addButton b("fields", self.onFields, "", shortcut(_("Customize Fields")), size=False, text=_("Fields..."), - native=True) + native=True, canDisable=False) b("layout", self.onCardLayout, "Ctrl+l", shortcut(_("Customize Card Layout (Ctrl+l)")), - size=False, text=_("Layout..."), native=True) + size=False, text=_("Layout..."), native=True, canDisable=False) # align to right self.iconsBox.addItem(QSpacerItem(20,1, QSizePolicy.Expanding)) b("text_bold", self.toggleBold, "Ctrl+b", _("Bold text (Ctrl+b)"), diff --git a/aqt/main.py b/aqt/main.py index 06ae57727..cfcdbac86 100755 --- a/aqt/main.py +++ b/aqt/main.py @@ -18,7 +18,8 @@ import anki.consts import aqt, aqt.progress, aqt.webview, aqt.toolbar from aqt.utils import saveGeom, restoreGeom, showInfo, showWarning, \ saveState, restoreState, getOnlyText, askUser, GetTextDialog, \ - askUserDialog, applyStyles, getText, showText, showCritical, getFile + askUserDialog, applyStyles, getText, showText, showCritical, getFile, \ + tooltip ## fixme: open plugin folder broken on win32? @@ -565,8 +566,10 @@ Debug info:\n%s""") % traceback.format_exc(), help="DeckErrors") f = self.reviewer.card.note() if f.hasTag("marked"): f.delTag("marked") + tooltip("Mark Removed.") else: f.addTag("marked") + tooltip("Mark Added.") f.flush() def onSuspend(self): @@ -574,16 +577,19 @@ Debug info:\n%s""") % traceback.format_exc(), help="DeckErrors") self.col.sched.suspendCards( [c.id for c in self.reviewer.card.note().cards()]) self.reviewer.nextCard() + tooltip("Note suspended.") def onDelete(self): self.checkpoint(_("Delete")) self.col.remNotes([self.reviewer.card.note().id]) self.reviewer.nextCard() + tooltip("Note and its cards deleted.") def onBuryNote(self): self.checkpoint(_("Bury")) self.col.sched.buryNote(self.reviewer.card.nid) self.reviewer.nextCard() + tooltip("Note buried.") # Undo & autosave ########################################################################## diff --git a/aqt/reviewer.py b/aqt/reviewer.py index d08ff7553..05ce802e0 100644 --- a/aqt/reviewer.py +++ b/aqt/reviewer.py @@ -195,27 +195,42 @@ function _typeAnsPress() { return True def _keyHandler(self, evt): - print "rev event", evt.key() - if self.state == "question": - show = False - if evt.key() == Qt.Key_Space and self.typeAns() is None: - show = True - elif evt.key() == Qt.Key_Escape: - self.web.eval("$('#typeans').blur();") - if show: - self._showAnswer() - self.web.eval("_showans();") - return True - elif self.state == "answer": - if evt.key() == Qt.Key_Space: - self.web.eval("_onSpace();") - else: - key = unicode(evt.text()) - if key and key >= "1" and key <= "4": - key=int(key) - if self.card.queue == 2 or key < 4: - self._answerCard(key) - return True + key = unicode(evt.text()) + if key == "e": + self.mw.onEditCurrent() + elif key == " " and self.state == "question": + self._showAnswer() + elif key == "r": + self.replayAudio() + elif key == "*": + self.mw.onMark() + elif key == "-": + self.mw.onBuryNote() + elif key == "=": + self.mw.onSuspend() + elif evt.key() == Qt.Key_Delete: + self.mw.onDelete() + print "key", evt.key() + # if self.state == "question": + # show = False + # if evt.key() == Qt.Key_Space and self.typeAns() is None: + # show = True + # elif evt.key() == Qt.Key_Escape: + # self.web.eval("$('#typeans').blur();") + # if show: + # self._showAnswer() + # self.web.eval("_showans();") + # return True + # elif self.state == "answer": + # if evt.key() == Qt.Key_Space: + # self.web.eval("_onSpace();") + # else: + # key = unicode(evt.text()) + # if key and key >= "1" and key <= "4": + # key=int(key) + # if self.card.queue == 2 or key < 4: + # self._answerCard(key) + # return True def _linkHandler(self, url): if url == "ans": @@ -492,14 +507,15 @@ Card was a leech.""") % link) def showContextMenu(self): opts = [ - [_("Replay Audio (r)"), self.replayAudio], - [_("Mark Note (m)"), self.mw.onMark], - [_("Bury Note (b)"), self.mw.onBuryNote], - [_("Suspend Note (!)"), self.mw.onSuspend], - [shortcut(_("Delete Note (Ctrl+delete)")), self.mw.onDelete] + [_("Replay Audio"), "r", self.replayAudio], + [_("Mark Note"), "*", self.mw.onMark], + [_("Bury Note"), "-", self.mw.onBuryNote], + [_("Suspend Note"), "=", self.mw.onSuspend], + [_("Delete Note"), "Delete", self.mw.onDelete] ] m = QMenu(self.mw) - for label, func in opts: + for label, scut, func in opts: a = m.addAction(label) + a.setShortcut(QKeySequence(scut)) a.connect(a, SIGNAL("triggered()"), func) m.exec_(QCursor.pos()) diff --git a/aqt/toolbar.py b/aqt/toolbar.py index d8ceff041..9aa8c0e7b 100644 --- a/aqt/toolbar.py +++ b/aqt/toolbar.py @@ -4,6 +4,7 @@ from aqt.qt import * from aqt.webview import AnkiWebView +from anki.lang import _ class Toolbar(object): @@ -26,31 +27,34 @@ class Toolbar(object): ###################################################################### rightIcons = [ - ["stats", "qrc:/icons/view-statistics.png"], - ["sync", "qrc:/icons/view-refresh.png"], + ["stats", "qrc:/icons/view-statistics.png", + _("Show statistics. Shortcut key: %s") % "S"], + ["sync", "qrc:/icons/view-refresh.png", + _("Synchronize with AnkiWeb. Shortcut key: %s") % "y"], ] def _centerLinks(self): links = [ - ["decks", _("Decks")], - ["study", _("Study")], - ["add", _("Add")], - ["browse", _("Browse")], + ["decks", _("Decks"), _("Shortcut key: %s") % "d"], + ["study", _("Study"), _("Shortcut key: %s") % "s"], + ["add", _("Add"), _("Shortcut key: %s") % "a"], + ["browse", _("Browse"), _("Shortcut key: %s") % "b"], ] return self._linkHTML(links) def _linkHTML(self, links): buf = "" - for ln, name in links: - buf += '%s' % (ln, name) + for ln, name, title in links: + buf += '%s' % ( + title, ln, name) buf += " "*3 return buf def _rightIcons(self): buf = "" - for ln, icon in self.rightIcons: - buf += '' % ( - ln, icon) + for ln, icon, title in self.rightIcons: + buf += '' % ( + title, ln, icon) return buf # Link handling