From df4b74f7bb710614ca5fc54cfb377db4a4064e70 Mon Sep 17 00:00:00 2001 From: Glutanimate Date: Sun, 10 Apr 2016 13:11:25 +0200 Subject: [PATCH] Preserve identical fields when switching note types --- aqt/addcards.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/aqt/addcards.py b/aqt/addcards.py index 48dcec35f..40064b6da 100644 --- a/aqt/addcards.py +++ b/aqt/addcards.py @@ -30,7 +30,7 @@ class AddCards(QDialog): self.forceClose = False restoreGeom(self, "add") addHook('reset', self.onReset) - addHook('currentModelChanged', self.onReset) + addHook('currentModelChanged', self.onModelChange) addCloseShortcut(self) self.show() self.setupNewNote() @@ -86,6 +86,30 @@ class AddCards(QDialog): self.editor.setNote(f, focus=True) return f + def onModelChange(self): + oldNote = self.editor.note + note = self.setupNewNote(set=False) + if oldNote: + oldFields = oldNote.keys() + newFields = note.keys() + for n, f in enumerate(note.model()['flds']): + fieldName = f['name'] + try: + oldFieldName = oldNote.model()['flds'][n]['name'] + except IndexError: + oldFieldName = None + # copy identical fields + if fieldName in oldFields: + note[fieldName] = oldNote[fieldName] + # set non-identical fields by field index + elif oldFieldName and oldFieldName not in newFields: + try: + note.fields[n] = oldNote.fields[n] + except IndexError: + pass + self.editor.currentField = 0 + self.editor.setNote(note, focus=True) + def onReset(self, model=None, keep=False): oldNote = self.editor.note note = self.setupNewNote(set=False) @@ -180,7 +204,7 @@ question on all cards."""), help="AddItems") if not self.canClose(): return remHook('reset', self.onReset) - remHook('currentModelChanged', self.onReset) + remHook('currentModelChanged', self.onModelChange) clearAudioQueue() self.removeTempNote(self.editor.note) self.editor.setNote(None)