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