797a7ea229
this fixes a bug where navigating to the next/previous card using shortcut keys resulted in the first field being clobbered - get rid of the stealFocus option in favour of explicitly passing focusTo to setNote() - setFields() is no longer responsible for setting focus - add focusTo var to the browser so that the row changed hook can restore focus when navigating to next/previous card - fix the row changed hook being called twice - the blur event now includes the field number instead of relying on the editor to have the correct currentField - the current field is set to null on blur - use deferred js and a callback rather than keeping track of when we were loaded - add shift+tab shortcut to go to previous field
71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
# Copyright: Damien Elmes <anki@ichi2.net>
|
|
# -*- coding: utf-8 -*-
|
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
from aqt.qt import *
|
|
import aqt.editor
|
|
from aqt.utils import saveGeom, restoreGeom
|
|
from anki.hooks import addHook, remHook
|
|
from anki.utils import isMac
|
|
|
|
class EditCurrent(QDialog):
|
|
|
|
def __init__(self, mw):
|
|
if isMac:
|
|
# use a separate window on os x so we can have a clean menu
|
|
QDialog.__init__(self, None, Qt.Window)
|
|
else:
|
|
QDialog.__init__(self, mw)
|
|
self.mw = mw
|
|
self.form = aqt.forms.editcurrent.Ui_Dialog()
|
|
self.form.setupUi(self)
|
|
self.setWindowTitle(_("Edit Current"))
|
|
self.setMinimumHeight(400)
|
|
self.setMinimumWidth(500)
|
|
self.rejected.connect(self.onSave)
|
|
self.form.buttonBox.button(QDialogButtonBox.Close).setShortcut(
|
|
QKeySequence("Ctrl+Return"))
|
|
self.editor = aqt.editor.Editor(self.mw, self.form.fieldsArea, self)
|
|
self.editor.setNote(self.mw.reviewer.card.note(), focusTo=0)
|
|
restoreGeom(self, "editcurrent")
|
|
addHook("reset", self.onReset)
|
|
self.mw.requireReset()
|
|
self.show()
|
|
# reset focus after open
|
|
self.editor.web.setFocus()
|
|
|
|
def onReset(self):
|
|
# lazy approach for now: throw away edits
|
|
try:
|
|
n = self.mw.reviewer.card.note()
|
|
n.load()
|
|
except:
|
|
# card's been deleted
|
|
remHook("reset", self.onReset)
|
|
self.editor.setNote(None)
|
|
self.mw.reset()
|
|
aqt.dialogs.close("EditCurrent")
|
|
self.close()
|
|
return
|
|
self.editor.setNote(n)
|
|
|
|
def onSave(self):
|
|
self.editor.saveNow(self._onSave)
|
|
|
|
def _onSave(self):
|
|
remHook("reset", self.onReset)
|
|
r = self.mw.reviewer
|
|
try:
|
|
r.card.load()
|
|
except:
|
|
# card was removed by clayout
|
|
pass
|
|
else:
|
|
self.mw.reviewer.cardQueue.append(self.mw.reviewer.card)
|
|
self.mw.moveToState("review")
|
|
saveGeom(self, "editcurrent")
|
|
aqt.dialogs.close("EditCurrent")
|
|
|
|
def canClose(self):
|
|
return True
|