diff --git a/aqt/clayout.py b/aqt/clayout.py index 84f67f178..aee2f1c4d 100644 --- a/aqt/clayout.py +++ b/aqt/clayout.py @@ -9,7 +9,7 @@ from anki.consts import * import aqt from anki.sound import playFromText, clearAudioQueue from aqt.utils import saveGeom, restoreGeom, getBase, mungeQA, \ - saveSplitter, restoreSplitter, showInfo, isMac, isWin + saveSplitter, restoreSplitter, showInfo, isMac, isWin, askUser from anki.hooks import runFilter class ResizingTextEdit(QTextEdit): @@ -22,6 +22,7 @@ class CardLayout(QDialog): def __init__(self, mw, fact, type=0, ord=0, parent=None): QDialog.__init__(self, parent or mw, Qt.Window) self.mw = aqt.mw + self.parent = parent or mw self.fact = fact self.type = type self.ord = ord @@ -43,7 +44,7 @@ class CardLayout(QDialog): self.reload() if not self.cards: showInfo(_("Please enter some text first."), - parent=parent or mw) + parent=self.parent) return self.exec_() @@ -51,7 +52,7 @@ class CardLayout(QDialog): self.cards = self.deck.previewCards(self.fact, self.type) self.fillCardList() self.fillFieldList() - self.fieldChanged(0) + self.fieldChanged() self.readField() # Cards & Preview @@ -293,8 +294,6 @@ class CardLayout(QDialog): self.saveField) self.connect(self.form.fieldRequired, SIGNAL("stateChanged(int)"), self.saveField) - self.connect(self.form.numeric, SIGNAL("stateChanged(int)"), - self.saveField) w = self.form.fontColour if self.plastiqueStyle: w.setStyle(self.plastiqueStyle) @@ -304,10 +303,11 @@ class CardLayout(QDialog): SIGNAL("stateChanged(int)"), self.saveField) - def fieldChanged(self, idx): - if self.updatingFields: - return - self.field = self.model.fields[idx] + def fieldChanged(self): + row = self.form.fieldList.currentRow() + if row == -1: + row = 0 + self.field = self.model.fields[row] self.readField() self.enableFieldMoveButtons() @@ -387,53 +387,33 @@ class CardLayout(QDialog): self.form.fieldDown.setEnabled(True) def addField(self): - f = FieldModel(required=False, unique=False) - f.name = _("Field %d") % (len(self.model.fieldModels) + 1) - self.deck.addFieldModel(self.model, f) - try: - self.deck.db.refresh(self.fact) - except: - # not yet added - self.updateFact() - self.fillFieldList() - self.form.fieldList.setCurrentRow(len(self.model.fieldModels)-1) + f = self.model.newField() + l = len(self.model.fields) + f['name'] = _("Field %d") % l + self.mw.progress.start() + self.model.addField(f) + self.mw.progress.finish() + self.reload() + self.form.fieldList.setCurrentRow(l) self.form.fieldName.setFocus() self.form.fieldName.selectAll() - def updateFact(self): - oldFact = self.fact - model = self.deck.db.query(Model).get(oldFact.model.id) - fact = self.deck.newFact(model) - for field in fact.fields: - try: - fact[field.name] = oldFact[field.name] - except KeyError: - fact[field.name] = u"" - fact.tags = oldFact.tags - self.fact = fact - def deleteField(self): row = self.form.fieldList.currentRow() if row == -1: return - if len(self.model.fieldModels) < 2: - ui.utils.showInfo( + if len(self.model.fields) < 2: + showInfo( _("Please add a new field first."), parent=self) return - field = self.model.fieldModels[row] - count = self.deck.fieldModelUseCount(field) - if count: - if not ui.utils.askUser( - _("This field is used by %d cards. If you delete it,\n" - "all information in this field will be lost.\n" - "\nReally delete this field?") % count, - parent=self): - return - self.deck.deleteFieldModel(self.model, field) - self.fillFieldList() + if askUser(_("Delete this field and its data from all facts?"), + self.parent): + self.mw.progress.start() + self.model.delField(self.field) + self.mw.progress.finish() # need to update q/a format - self.readCard() + self.reload() def moveFieldUp(self): row = self.form.fieldList.currentRow() @@ -441,28 +421,20 @@ class CardLayout(QDialog): return if row == 0: return - field = self.model.fieldModels[row] - tField = self.model.fieldModels[row - 1] - self.model.fieldModels.remove(field) - self.model.fieldModels.insert(row - 1, field) - if field.id not in self.fieldOrdinalUpdatedIds: - self.fieldOrdinalUpdatedIds.append(field.id) - if tField.id not in self.fieldOrdinalUpdatedIds: - self.fieldOrdinalUpdatedIds.append(tField.id) - self.fillFieldList(row - 1) + self.mw.progress.start() + self.model.moveField(self.field, row-1) + self.mw.progress.finish() + self.form.fieldList.setCurrentRow(row-1) + self.reload() def moveFieldDown(self): row = self.form.fieldList.currentRow() if row == -1: return - if row == len(self.model.fieldModels) - 1: + if row == len(self.model.fields) - 1: return - field = self.model.fieldModels[row] - tField = self.model.fieldModels[row + 1] - self.model.fieldModels.remove(field) - self.model.fieldModels.insert(row + 1, field) - if field.id not in self.fieldOrdinalUpdatedIds: - self.fieldOrdinalUpdatedIds.append(field.id) - if tField.id not in self.fieldOrdinalUpdatedIds: - self.fieldOrdinalUpdatedIds.append(tField.id) - self.fillFieldList(row + 1) + self.mw.progress.start() + self.model.moveField(self.field, row+1) + self.mw.progress.finish() + self.form.fieldList.setCurrentRow(row+1) + self.reload() diff --git a/designer/clayout.ui b/designer/clayout.ui index 6d2bf0b60..2b626f061 100644 --- a/designer/clayout.ui +++ b/designer/clayout.ui @@ -6,8 +6,8 @@ 0 0 - 407 - 482 + 472 + 531 @@ -33,7 +33,7 @@ - 0 + 1 @@ -42,12 +42,6 @@ - - 0 - - - 6 - @@ -137,7 +131,7 @@ Flip - + :/icons/multisynk.png:/icons/multisynk.png @@ -212,7 +206,7 @@ - Allow the answer to be blank + Add cards even if answer is blank @@ -321,12 +315,6 @@ - - 0 - - - 6 - @@ -442,24 +430,17 @@ - + Reverse text direction (RTL) - - - - Sort as numbers in browser - - - - Prevent empty entries + Require text in field @@ -519,9 +500,6 @@ Preview - - 6 - 6 @@ -582,11 +560,10 @@ fieldUnique fieldRequired preserveWhitespace - numeric rtl - +