enable undo/redo support

This commit is contained in:
Damien Elmes 2008-11-30 04:12:19 +09:00
parent ae93e54013
commit 30e106b4e6
5 changed files with 45 additions and 14 deletions

View file

@ -493,7 +493,10 @@ where id in (%s)""" % ",".join([
def deleteCards(self): def deleteCards(self):
cards = self.selectedCards() cards = self.selectedCards()
n = _("Delete Cards")
self.deck.setUndoStart(n)
self.deck.deleteCards(cards) self.deck.deleteCards(cards)
self.deck.setUndoEnd(n)
self.updateSearch() self.updateSearch()
def addTags(self): def addTags(self):

View file

@ -144,10 +144,11 @@ An error occurred. Please copy the following message into a bug report.\n\n""" +
self.views = self.viewsBackup self.views = self.viewsBackup
self.viewsBackup = None self.viewsBackup = None
def reset(self): def reset(self, count=True):
ui.dialogs.closeAll() ui.dialogs.closeAll()
if self.deck: if self.deck:
self.deck.refresh() self.deck.refresh()
if count:
self.deck.updateAllPriorities() self.deck.updateAllPriorities()
self.deck.rebuildCounts() self.deck.rebuildCounts()
self.deck.rebuildQueue() self.deck.rebuildQueue()
@ -971,12 +972,12 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
self.reset() self.reset()
def onUndo(self): def onUndo(self):
# quick and dirty undo for now self.deck.undo()
self.currentCard = None self.reset(count=False)
self.deck.s.flush()
self.lastCardBackup.toDB(self.deck.s) def onRedo(self):
self.deck.rebuildCounts() self.deck.redo()
self.reset() self.reset(count=False)
# Other menu operations # Other menu operations
########################################################################## ##########################################################################
@ -1243,6 +1244,7 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
"DeckProperties", "DeckProperties",
"ModelProperties", "ModelProperties",
"Undo", "Undo",
"Redo",
"Export", "Export",
"MarkCard", "MarkCard",
"Graphs", "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.actionRepeatAnswerAudio, s, self.onRepeatAnswer)
self.connect(m.actionRepeatAudio, s, self.onRepeatAudio) self.connect(m.actionRepeatAudio, s, self.onRepeatAudio)
self.connect(m.actionUndo, s, self.onUndo) self.connect(m.actionUndo, s, self.onUndo)
self.connect(m.actionRedo, s, self.onRedo)
self.connect(m.actionCheckDatabaseIntegrity, s, self.onCheckDB) self.connect(m.actionCheckDatabaseIntegrity, s, self.onCheckDB)
self.connect(m.actionOptimizeDatabase, s, self.onOptimizeDB) self.connect(m.actionOptimizeDatabase, s, self.onOptimizeDB)
self.connect(m.actionMergeModels, s, self.onMergeModels) 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) self.mainWin.actionMarkCard.blockSignals(False)
def disableCardMenuItems(self): def disableCardMenuItems(self):
self.mainWin.actionUndo.setEnabled(not not self.lastCard) self.maybeEnableUndo()
self.mainWin.actionMarkCard.setEnabled(False) self.mainWin.actionMarkCard.setEnabled(False)
self.mainWin.actionSuspendCard.setEnabled(False) self.mainWin.actionSuspendCard.setEnabled(False)
self.mainWin.actionRepeatQuestionAudio.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) self.mainWin.actionEditCurrent.setEnabled(False)
def enableCardMenuItems(self): def enableCardMenuItems(self):
self.mainWin.actionUndo.setEnabled(not not self.lastCard) self.maybeEnableUndo()
self.mainWin.actionMarkCard.setEnabled(True) self.mainWin.actionMarkCard.setEnabled(True)
self.mainWin.actionSuspendCard.setEnabled(True) self.mainWin.actionSuspendCard.setEnabled(True)
self.mainWin.actionRepeatQuestionAudio.setEnabled( 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.actionRepeatAnswerAudio.isEnabled())
self.mainWin.actionEditCurrent.setEnabled(True) 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 # Auto update
########################################################################## ##########################################################################

View file

@ -619,7 +619,8 @@
<property name="title" > <property name="title" >
<string>&amp;Edit</string> <string>&amp;Edit</string>
</property> </property>
<addaction name="actionUndoAnswer" /> <addaction name="actionUndo" />
<addaction name="actionRedo" />
<addaction name="separator" /> <addaction name="separator" />
<addaction name="actionAddcards" /> <addaction name="actionAddcards" />
<addaction name="actionEditCurrent" /> <addaction name="actionEditCurrent" />
@ -1115,7 +1116,7 @@
<string>F5</string> <string>F5</string>
</property> </property>
</action> </action>
<action name="actionUndoAnswer" > <action name="actionUndo" >
<property name="enabled" > <property name="enabled" >
<bool>false</bool> <bool>false</bool>
</property> </property>
@ -1124,7 +1125,7 @@
<normaloff>:/icons/edit-undo.png</normaloff>:/icons/edit-undo.png</iconset> <normaloff>:/icons/edit-undo.png</normaloff>:/icons/edit-undo.png</iconset>
</property> </property>
<property name="text" > <property name="text" >
<string>&amp;Undo last answer</string> <string>&amp;Undo</string>
</property> </property>
<property name="shortcut" > <property name="shortcut" >
<string>Ctrl+Z</string> <string>Ctrl+Z</string>
@ -1262,6 +1263,15 @@
<string>Ctrl+E</string> <string>Ctrl+E</string>
</property> </property>
</action> </action>
<action name="actionRedo" >
<property name="icon" >
<iconset resource="../icons.qrc" >
<normaloff>:/icons/edit-redo.png</normaloff>:/icons/edit-redo.png</iconset>
</property>
<property name="text" >
<string>&amp;Redo</string>
</property>
</action>
</widget> </widget>
<resources> <resources>
<include location="../icons.qrc" /> <include location="../icons.qrc" />

View file

@ -1,5 +1,6 @@
<RCC> <RCC>
<qresource prefix="/" > <qresource prefix="/" >
<file>icons/edit-redo.png</file>
<file>icons/text-xml.png</file> <file>icons/text-xml.png</file>
<file>icons/document-preview.png</file> <file>icons/document-preview.png</file>
<file>icons/media-record.png</file> <file>icons/media-record.png</file>

BIN
icons/edit-redo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB