diff --git a/ankiqt/ui/cardlist.py b/ankiqt/ui/cardlist.py index c585d8ce6..6f8557f81 100644 --- a/ankiqt/ui/cardlist.py +++ b/ankiqt/ui/cardlist.py @@ -493,7 +493,10 @@ where id in (%s)""" % ",".join([ def deleteCards(self): cards = self.selectedCards() + n = _("Delete Cards") + self.deck.setUndoStart(n) self.deck.deleteCards(cards) + self.deck.setUndoEnd(n) self.updateSearch() def addTags(self): diff --git a/ankiqt/ui/main.py b/ankiqt/ui/main.py index b67dc6438..f1d8a8b63 100644 --- a/ankiqt/ui/main.py +++ b/ankiqt/ui/main.py @@ -144,12 +144,13 @@ An error occurred. Please copy the following message into a bug report.\n\n""" + self.views = self.viewsBackup self.viewsBackup = None - def reset(self): + def reset(self, count=True): ui.dialogs.closeAll() if self.deck: self.deck.refresh() - self.deck.updateAllPriorities() - self.deck.rebuildCounts() + if count: + self.deck.updateAllPriorities() + self.deck.rebuildCounts() self.deck.rebuildQueue() self.moveToState("initial") @@ -971,12 +972,12 @@ To upgrade an old deck, download Anki 0.9.8.7.""")) self.reset() def onUndo(self): - # quick and dirty undo for now - self.currentCard = None - self.deck.s.flush() - self.lastCardBackup.toDB(self.deck.s) - self.deck.rebuildCounts() - self.reset() + self.deck.undo() + self.reset(count=False) + + def onRedo(self): + self.deck.redo() + self.reset(count=False) # Other menu operations ########################################################################## @@ -1243,6 +1244,7 @@ To upgrade an old deck, download Anki 0.9.8.7.""")) "DeckProperties", "ModelProperties", "Undo", + "Redo", "Export", "MarkCard", "Graphs", @@ -1297,6 +1299,7 @@ To upgrade an old deck, download Anki 0.9.8.7.""")) self.connect(m.actionRepeatAnswerAudio, s, self.onRepeatAnswer) self.connect(m.actionRepeatAudio, s, self.onRepeatAudio) self.connect(m.actionUndo, s, self.onUndo) + self.connect(m.actionRedo, s, self.onRedo) self.connect(m.actionCheckDatabaseIntegrity, s, self.onCheckDB) self.connect(m.actionOptimizeDatabase, s, self.onOptimizeDB) self.connect(m.actionMergeModels, s, self.onMergeModels) @@ -1357,7 +1360,7 @@ To upgrade an old deck, download Anki 0.9.8.7.""")) self.mainWin.actionMarkCard.blockSignals(False) def disableCardMenuItems(self): - self.mainWin.actionUndo.setEnabled(not not self.lastCard) + self.maybeEnableUndo() self.mainWin.actionMarkCard.setEnabled(False) self.mainWin.actionSuspendCard.setEnabled(False) self.mainWin.actionRepeatQuestionAudio.setEnabled(False) @@ -1366,7 +1369,7 @@ To upgrade an old deck, download Anki 0.9.8.7.""")) self.mainWin.actionEditCurrent.setEnabled(False) def enableCardMenuItems(self): - self.mainWin.actionUndo.setEnabled(not not self.lastCard) + self.maybeEnableUndo() self.mainWin.actionMarkCard.setEnabled(True) self.mainWin.actionSuspendCard.setEnabled(True) self.mainWin.actionRepeatQuestionAudio.setEnabled( @@ -1378,6 +1381,20 @@ To upgrade an old deck, download Anki 0.9.8.7.""")) self.mainWin.actionRepeatAnswerAudio.isEnabled()) self.mainWin.actionEditCurrent.setEnabled(True) + def maybeEnableUndo(self): + if self.deck and self.deck.undoStack: + self.mainWin.actionUndo.setText(_("Undo %s") % + self.deck.undoStack[-1][0]) + self.mainWin.actionUndo.setEnabled(True) + else: + self.mainWin.actionUndo.setEnabled(False) + if self.deck and self.deck.redoStack: + self.mainWin.actionRedo.setText(_("Redo %s") % + self.deck.redoStack[-1][0]) + self.mainWin.actionRedo.setEnabled(True) + else: + self.mainWin.actionRedo.setEnabled(False) + # Auto update ########################################################################## diff --git a/designer/main.ui b/designer/main.ui index c182eb809..400270320 100644 --- a/designer/main.ui +++ b/designer/main.ui @@ -619,7 +619,8 @@ &Edit - + + @@ -1115,7 +1116,7 @@ F5 - + false @@ -1124,7 +1125,7 @@ :/icons/edit-undo.png:/icons/edit-undo.png - &Undo last answer + &Undo Ctrl+Z @@ -1262,6 +1263,15 @@ Ctrl+E + + + + :/icons/edit-redo.png:/icons/edit-redo.png + + + &Redo + + diff --git a/icons.qrc b/icons.qrc index 45add1611..24f96c201 100644 --- a/icons.qrc +++ b/icons.qrc @@ -1,5 +1,6 @@ + icons/edit-redo.png icons/text-xml.png icons/document-preview.png icons/media-record.png diff --git a/icons/edit-redo.png b/icons/edit-redo.png new file mode 100644 index 000000000..d759f1367 Binary files /dev/null and b/icons/edit-redo.png differ