mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
delay reset of main window after edits
This commit is contained in:
parent
a1db3e56a7
commit
5828081475
5 changed files with 42 additions and 38 deletions
|
@ -150,6 +150,7 @@ question or answer on all cards."""), help="AddItems")
|
|||
# stop anything playing
|
||||
clearAudioQueue()
|
||||
self.setupNewFact()
|
||||
self.mw.requireReset()
|
||||
self.mw.deck.autosave()
|
||||
|
||||
def keyPressEvent(self, evt):
|
||||
|
@ -167,6 +168,7 @@ question or answer on all cards."""), help="AddItems")
|
|||
self.removeTempFact(self.editor.fact)
|
||||
self.editor.setFact(None)
|
||||
self.modelChooser.cleanup()
|
||||
self.mw.maybeReset()
|
||||
removeHook('reset', self.onReset)
|
||||
saveGeom(self, "add")
|
||||
aqt.dialogs.close("AddCards")
|
||||
|
|
|
@ -218,10 +218,6 @@ class DeckModel(QAbstractTableModel):
|
|||
return _("(new)")
|
||||
return "%d%%" % (c.factor/10)
|
||||
|
||||
# def intervalColumn(self, index):
|
||||
# return fmtTimeSpan(
|
||||
# self.cards[index.row()][CARD_INTERVAL]*86400)
|
||||
|
||||
# def limitContent(self, txt):
|
||||
# if "<c>" in txt:
|
||||
# matches = re.findall("(?s)<c>(.*?)</c>", txt)
|
||||
|
@ -318,9 +314,6 @@ class Browser(QMainWindow):
|
|||
self.form.searchEdit.setText("is:recent")
|
||||
self.form.searchEdit.selectAll()
|
||||
self.onSearch()
|
||||
# if self.parent.card:
|
||||
# self.card = self.parent.card
|
||||
#self.updateSearch()
|
||||
|
||||
def setupToolbar(self):
|
||||
self.form.toolBar.setIconSize(QSize(self.mw.config['iconSize'],
|
||||
|
@ -380,6 +373,7 @@ class Browser(QMainWindow):
|
|||
self.hide()
|
||||
aqt.dialogs.close("Browser")
|
||||
self.teardownHooks()
|
||||
self.mw.maybeReset()
|
||||
evt.accept()
|
||||
|
||||
def keyPressEvent(self, evt):
|
||||
|
@ -721,12 +715,6 @@ where id in %s""" % ids2str(sf))
|
|||
return
|
||||
return sf
|
||||
|
||||
def resetDeck(self):
|
||||
"Signal the queue needs rebuilding."
|
||||
# for operations that change models we'll need to reset immediately,
|
||||
# but otherwise we can put it off until the user starts studying again
|
||||
print "fixme: resetDeck()"
|
||||
|
||||
def onHelp(self):
|
||||
aqt.openHelp("Browser")
|
||||
|
||||
|
@ -761,7 +749,7 @@ where id in %s""" % ids2str(sf))
|
|||
new = min(oldRow, len(self.model.cards) - 1)
|
||||
self.model.focusedCard = self.model.cards[new]
|
||||
self.model.endReset()
|
||||
self.resetDeck()
|
||||
self.mw.requireReset()
|
||||
|
||||
# Tags
|
||||
######################################################################
|
||||
|
@ -784,7 +772,7 @@ where id in %s""" % ids2str(sf))
|
|||
self.mw.checkpoint(label)
|
||||
func(self.selectedFacts(), tags)
|
||||
self.onSearch(reset=False)
|
||||
self.resetDeck()
|
||||
self.mw.requireReset()
|
||||
self.model.endReset()
|
||||
|
||||
def deleteTags(self, tags=None, label=None):
|
||||
|
@ -812,7 +800,7 @@ where id in %s""" % ids2str(sf))
|
|||
else:
|
||||
self.deck.sched.unsuspendCards(c)
|
||||
self.model.reset()
|
||||
self.resetDeck()
|
||||
self.mw.requireReset()
|
||||
|
||||
def isMarked(self):
|
||||
return self.card and self.card.fact().hasTag("Marked")
|
||||
|
@ -851,7 +839,7 @@ where id in %s""" % ids2str(sf))
|
|||
finally:
|
||||
self.deck.reset()
|
||||
self.deck.setUndoEnd(n)
|
||||
self.resetDeck()
|
||||
self.mw.requireReset()
|
||||
|
||||
# Edit: selection
|
||||
######################################################################
|
||||
|
@ -947,7 +935,7 @@ where id in %s""" % ids2str(sf))
|
|||
return
|
||||
else:
|
||||
self.onSearch()
|
||||
self.resetDeck()
|
||||
self.mw.requireReset()
|
||||
finally:
|
||||
self.model.endReset()
|
||||
self.mw.progress.finish()
|
||||
|
@ -1144,6 +1132,7 @@ class GenCards(QDialog):
|
|||
if c % 100 == 0:
|
||||
mw.progress.update()
|
||||
mw.progress.finish()
|
||||
mw.requireReset()
|
||||
self.browser.onSearch()
|
||||
|
||||
def onHelp(self):
|
||||
|
@ -1306,7 +1295,7 @@ Are you sure you want to continue?""")):
|
|||
b.onSearch(reset=False)
|
||||
b.model.endReset()
|
||||
b.mw.progress.finish()
|
||||
b.resetDeck()
|
||||
b.requireReset()
|
||||
self.cleanup()
|
||||
return QDialog.accept(self)
|
||||
|
||||
|
|
33
aqt/main.py
33
aqt/main.py
|
@ -88,8 +88,9 @@ class AnkiQt(QMainWindow):
|
|||
|
||||
def moveToState(self, state, *args):
|
||||
print "-> move from", self.state, "to", state
|
||||
oldState = self.state
|
||||
self.state = state
|
||||
getattr(self, "_"+state+"State")(self.state, *args)
|
||||
getattr(self, "_"+state+"State")(oldState, *args)
|
||||
|
||||
def _deckBrowserState(self, oldState):
|
||||
# shouldn't call this directly; call close
|
||||
|
@ -119,11 +120,39 @@ class AnkiQt(QMainWindow):
|
|||
"Called when a card or fact is edited (but not deleted)."
|
||||
runHook("factChanged", fid)
|
||||
|
||||
# Resetting state
|
||||
##########################################################################
|
||||
|
||||
def reset(self, type="all", *args):
|
||||
"Called for non-trivial edits. Rebuilds queue."
|
||||
"Called for non-trivial edits. Rebuilds queue and updates UI."
|
||||
self.deck.reset()
|
||||
runHook("reset")
|
||||
|
||||
def requireReset(self):
|
||||
"Signal queue needs to be rebuilt when edits are finished or by user."
|
||||
if self.state in ("overview", "review"):
|
||||
self.moveToState("resetRequired")
|
||||
elif self.state == "editCurrent":
|
||||
# reload current card
|
||||
pass
|
||||
|
||||
def maybeReset(self):
|
||||
if self.state == "resetRequired":
|
||||
self.reset()
|
||||
self.moveToState(self.returnState)
|
||||
|
||||
def _resetRequiredState(self, oldState):
|
||||
self.returnState = oldState
|
||||
self.web.setKeyHandler(None)
|
||||
self.web.setLinkHandler(lambda url: self.maybeReset())
|
||||
self.web.stdHtml("""
|
||||
<center><div style="height: 100%%">
|
||||
<div style="position:relative; vertical-align: middle;">
|
||||
%s<br>
|
||||
%s</div></div></center>
|
||||
""" % (_("Close the editing window to resume."),
|
||||
self.button("refresh", _("Return"))), css=self.sharedCSS)
|
||||
|
||||
# HTML helpers
|
||||
##########################################################################
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ class Overview(object):
|
|||
def refresh(self):
|
||||
self._renderPage()
|
||||
|
||||
# Handlers
|
||||
# Handlers
|
||||
############################################################
|
||||
|
||||
def _keyHandler(self, evt):
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
# Copyright: Damien Elmes <anki@ichi2.net>
|
||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
|
||||
from PyQt4.QtGui import *
|
||||
import aqt.forms
|
||||
|
||||
save = QMessageBox.Save
|
||||
discard = QMessageBox.Discard
|
||||
cancel = QMessageBox.Cancel
|
||||
def ask(parent):
|
||||
return QMessageBox.question(
|
||||
parent, "Anki",
|
||||
_("""<h1>Unsaved changes</h1>There are unsaved
|
||||
changes. Would you like to save them, discard your
|
||||
changes, or cancel?"""),
|
||||
save | discard | cancel)
|
Loading…
Reference in a new issue