From 5828081475541e35f004dc158fdf639faab56b6b Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 16 Apr 2011 01:14:28 +0900 Subject: [PATCH] delay reset of main window after edits --- aqt/addcards.py | 2 ++ aqt/browser.py | 27 ++++++++------------------- aqt/main.py | 33 +++++++++++++++++++++++++++++++-- aqt/overview.py | 2 +- aqt/unsaved.py | 16 ---------------- 5 files changed, 42 insertions(+), 38 deletions(-) delete mode 100644 aqt/unsaved.py diff --git a/aqt/addcards.py b/aqt/addcards.py index 4ddfc3ff1..ff0223607 100644 --- a/aqt/addcards.py +++ b/aqt/addcards.py @@ -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") diff --git a/aqt/browser.py b/aqt/browser.py index bbcf5cb5b..f4dc6c383 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -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 "" in txt: # matches = re.findall("(?s)(.*?)", 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) diff --git a/aqt/main.py b/aqt/main.py index 9fba5d236..39fed42f6 100755 --- a/aqt/main.py +++ b/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(""" +
+
+%s
+%s
+""" % (_("Close the editing window to resume."), + self.button("refresh", _("Return"))), css=self.sharedCSS) + # HTML helpers ########################################################################## diff --git a/aqt/overview.py b/aqt/overview.py index 76a1bdff0..012606692 100644 --- a/aqt/overview.py +++ b/aqt/overview.py @@ -25,7 +25,7 @@ class Overview(object): def refresh(self): self._renderPage() - # Handlers + # Handlers ############################################################ def _keyHandler(self, evt): diff --git a/aqt/unsaved.py b/aqt/unsaved.py deleted file mode 100644 index 08d813e1d..000000000 --- a/aqt/unsaved.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright: Damien Elmes -# 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", - _("""

Unsaved changes

There are unsaved - changes. Would you like to save them, discard your - changes, or cancel?"""), - save | discard | cancel)