Preserve identical fields when switching note types

This commit is contained in:
Glutanimate 2016-04-10 13:11:25 +02:00
parent 1b0750ba9b
commit df4b74f7bb

View file

@ -30,7 +30,7 @@ class AddCards(QDialog):
self.forceClose = False self.forceClose = False
restoreGeom(self, "add") restoreGeom(self, "add")
addHook('reset', self.onReset) addHook('reset', self.onReset)
addHook('currentModelChanged', self.onReset) addHook('currentModelChanged', self.onModelChange)
addCloseShortcut(self) addCloseShortcut(self)
self.show() self.show()
self.setupNewNote() self.setupNewNote()
@ -86,6 +86,30 @@ class AddCards(QDialog):
self.editor.setNote(f, focus=True) self.editor.setNote(f, focus=True)
return f 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): def onReset(self, model=None, keep=False):
oldNote = self.editor.note oldNote = self.editor.note
note = self.setupNewNote(set=False) note = self.setupNewNote(set=False)
@ -180,7 +204,7 @@ question on all cards."""), help="AddItems")
if not self.canClose(): if not self.canClose():
return return
remHook('reset', self.onReset) remHook('reset', self.onReset)
remHook('currentModelChanged', self.onReset) remHook('currentModelChanged', self.onModelChange)
clearAudioQueue() clearAudioQueue()
self.removeTempNote(self.editor.note) self.removeTempNote(self.editor.note)
self.editor.setNote(None) self.editor.setNote(None)