mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
template load/add/delete implemented
This commit is contained in:
parent
9fd4003251
commit
01e6470c2a
3 changed files with 40 additions and 152 deletions
188
aqt/models.py
188
aqt/models.py
|
@ -19,7 +19,7 @@ class Models(QDialog):
|
|||
self.connect(self.form.buttonBox, SIGNAL("helpRequested()"),
|
||||
lambda: openHelp("Models"))
|
||||
self.setupModels()
|
||||
#self.setupCards()
|
||||
self.setupCards()
|
||||
self.exec_()
|
||||
|
||||
# Models
|
||||
|
@ -54,6 +54,7 @@ class Models(QDialog):
|
|||
self.saveModel()
|
||||
idx = self.form.modelsList.currentRow()
|
||||
self.model = self.models[idx]
|
||||
self.updateCards()
|
||||
|
||||
def onAdd(self):
|
||||
m = aqt.modelchooser.AddModel(self.mw, self).get()
|
||||
|
@ -101,176 +102,67 @@ class Models(QDialog):
|
|||
##########################################################################
|
||||
|
||||
def setupCards(self):
|
||||
self.ignoreCardUpdate = False
|
||||
self.currentCard = None
|
||||
self.updateCards()
|
||||
self.readCurrentCard()
|
||||
self.connect(self.form.cardList, SIGNAL("currentRowChanged(int)"),
|
||||
f = self.form; c = self.connect; s = SIGNAL("clicked()")
|
||||
c(f.cardList, SIGNAL("currentRowChanged(int)"),
|
||||
self.cardRowChanged)
|
||||
self.connect(self.form.cardAdd, SIGNAL("clicked()"),
|
||||
self.addCard)
|
||||
self.connect(self.form.cardDelete, SIGNAL("clicked()"),
|
||||
self.deleteCard)
|
||||
self.connect(self.form.cardToggle, SIGNAL("clicked()"),
|
||||
self.toggleCard)
|
||||
self.connect(self.form.cardUp, SIGNAL("clicked()"),
|
||||
self.moveCardUp)
|
||||
self.connect(self.form.cardDown, SIGNAL("clicked()"),
|
||||
self.moveCardDown)
|
||||
self.connect(self.form.cardRename, SIGNAL("clicked()"),
|
||||
c(f.cardList, SIGNAL("itemDoubleClicked(QListWidgetItem*)"),
|
||||
self.renameCard)
|
||||
self.connect(self.form.cardLayout, SIGNAL("clicked()"),
|
||||
self.cardLayout)
|
||||
c(f.cardAdd, s, self.addCard)
|
||||
c(f.cardDelete, s, self.deleteCard)
|
||||
c(f.cardUp, s, self.moveCardUp)
|
||||
c(f.cardDown, s, self.moveCardDown)
|
||||
self.updateCards()
|
||||
|
||||
def renameCard(self):
|
||||
def renameCard(self, item):
|
||||
txt = ui.utils.getText(_("New name?"), parent=self)
|
||||
if txt[0]:
|
||||
self.currentCard.name = txt[0]
|
||||
self.needRebuild = True
|
||||
self.deck.updateCardTags(self.deck.db.column0(
|
||||
"select id from cards where cardModelId = :id",
|
||||
id=self.currentCard.id))
|
||||
self.updateCards()
|
||||
self.template['name'] = txt[0]
|
||||
|
||||
def updateCards(self, row = None):
|
||||
oldRow = self.form.cardList.currentRow()
|
||||
if oldRow == -1:
|
||||
oldRow = 0
|
||||
row = self.form.cardList.currentRow() or 0
|
||||
if row == -1:
|
||||
row = 0
|
||||
self.form.cardList.clear()
|
||||
n = 1
|
||||
for card in self.model.cardModels:
|
||||
if card.active:
|
||||
status=""
|
||||
else:
|
||||
status=_("; disabled")
|
||||
cards = self.deck.cardModelUseCount(card)
|
||||
label = "%(name)s [%(cards)s%(status)s]" % {
|
||||
'num': n,
|
||||
'name': card.name,
|
||||
'status': status,
|
||||
'cards': ngettext("%d fact", "%d facts", cards) % cards
|
||||
}
|
||||
item = QListWidgetItem(label)
|
||||
for card in self.model.templates:
|
||||
item = QListWidgetItem(card['name'])
|
||||
self.form.cardList.addItem(item)
|
||||
n += 1
|
||||
count = self.form.cardList.count()
|
||||
if row != None:
|
||||
self.form.cardList.setCurrentRow(row)
|
||||
else:
|
||||
while (count > 0 and oldRow > (count - 1)):
|
||||
oldRow -= 1
|
||||
self.form.cardList.setCurrentRow(oldRow)
|
||||
self.enableCardMoveButtons()
|
||||
self.form.cardList.setCurrentRow(row)
|
||||
|
||||
def cardRowChanged(self):
|
||||
if self.ignoreCardUpdate:
|
||||
return
|
||||
self.saveCurrentCard()
|
||||
self.readCurrentCard()
|
||||
|
||||
def readCurrentCard(self):
|
||||
if not len(self.model.cardModels):
|
||||
self.form.cardToggle.setEnabled(False)
|
||||
self.form.cardDelete.setEnabled(False)
|
||||
self.form.cardUp.setEnabled(False)
|
||||
self.form.cardDown.setEnabled(False)
|
||||
return
|
||||
else:
|
||||
self.form.cardToggle.setEnabled(True)
|
||||
self.form.cardDelete.setEnabled(True)
|
||||
self.currentCard = self.model.cardModels[self.form.cardList.currentRow()]
|
||||
card = self.currentCard
|
||||
self.updateToggleButtonText(card)
|
||||
self.template = self.model.templates[self.form.cardList.currentRow()]
|
||||
self.enableCardMoveButtons()
|
||||
|
||||
def enableCardMoveButtons(self):
|
||||
row = self.form.cardList.currentRow()
|
||||
if row < 1:
|
||||
self.form.cardUp.setEnabled(False)
|
||||
else:
|
||||
self.form.cardUp.setEnabled(True)
|
||||
if row == -1 or row >= (self.form.cardList.count() - 1):
|
||||
self.form.cardDown.setEnabled(False)
|
||||
else:
|
||||
self.form.cardDown.setEnabled(True)
|
||||
|
||||
def updateToggleButtonText(self, card):
|
||||
if card.active:
|
||||
self.form.cardToggle.setText(_("Disa&ble"))
|
||||
else:
|
||||
self.form.cardToggle.setText(_("Ena&ble"))
|
||||
|
||||
def saveCurrentCard(self):
|
||||
if not self.currentCard:
|
||||
return
|
||||
card = self.currentCard
|
||||
self.ignoreCardUpdate = True
|
||||
self.updateCards()
|
||||
self.ignoreCardUpdate = False
|
||||
|
||||
def updateField(self, obj, field, value):
|
||||
if getattr(obj, field) != value:
|
||||
setattr(obj, field, value)
|
||||
self.model.setModified()
|
||||
self.deck.setModified()
|
||||
return True
|
||||
return False
|
||||
f = self.form
|
||||
row = f.cardList.currentRow()
|
||||
f.cardUp.setEnabled(row >= 1)
|
||||
f.cardDown.setEnabled(row < (f.cardList.count() - 1))
|
||||
|
||||
def addCard(self):
|
||||
cards = len(self.model.cardModels)
|
||||
name = _("Template_%d") % (cards+1)
|
||||
fields = self.model.fieldModels
|
||||
qformat = "{{%s}}" % fields[0].name
|
||||
cards = len(self.model.templates)
|
||||
t = self.model.newTemplate()
|
||||
t['name'] = _("Template %d") % (cards+1)
|
||||
fields = self.model.fields
|
||||
t['qfmt'] = "{{%s}}" % fields[0]['name']
|
||||
if len(fields) > 1:
|
||||
aformat = "{{%s}}" % fields[1].name
|
||||
t['afmt'] = "{{%s}}" % fields[1]['name']
|
||||
else:
|
||||
aformat = ""
|
||||
cm = CardModel(name, qformat, aformat)
|
||||
self.deck.addCardModel(m, cm)
|
||||
t['afmt'] = ""
|
||||
self.model.addTemplate(t)
|
||||
self.updateCards()
|
||||
self.form.cardList.setCurrentRow(len(self.model.cardModels)-1)
|
||||
|
||||
def deleteCard(self):
|
||||
row = self.form.cardList.currentRow()
|
||||
if row == -1:
|
||||
return
|
||||
if len (self.model.cardModels) < 2:
|
||||
if len (self.model.templates) < 2:
|
||||
ui.utils.showWarning(
|
||||
_("Please add a new template first."),
|
||||
parent=self)
|
||||
return
|
||||
card = self.model.cardModels[row]
|
||||
count = self.deck.cardModelUseCount(card)
|
||||
if count:
|
||||
if not ui.utils.askUser(
|
||||
_("This template is used by %d cards. If you delete it,\n"
|
||||
"all the cards will be deleted too. If you just\n"
|
||||
"want to prevent the creation of future cards with\n"
|
||||
"this template, please use the 'disable' button\n"
|
||||
"instead.\n\nReally delete these cards?") % count,
|
||||
parent=self):
|
||||
return
|
||||
self.deck.deleteCardModel(self.m, card)
|
||||
self.updateCards()
|
||||
|
||||
def toggleCard(self):
|
||||
row = self.form.cardList.currentRow()
|
||||
if row == -1:
|
||||
if not askUser(
|
||||
_("Delete this template and all cards that use it?")):
|
||||
return
|
||||
card = self.model.cardModels[row]
|
||||
active = 0
|
||||
for c in self.model.cardModels:
|
||||
if c.active:
|
||||
active += 1
|
||||
if active < 2 and card.active:
|
||||
ui.utils.showWarning(
|
||||
_("Please enable a different template first."),
|
||||
parent=self)
|
||||
return
|
||||
card.active = not card.active
|
||||
self.updateToggleButtonText(card)
|
||||
self.model.delTemplate(self.template)
|
||||
self.updateCards()
|
||||
self.model.setModified()
|
||||
self.deck.setModified()
|
||||
|
||||
def moveCardUp(self):
|
||||
row = self.form.cardList.currentRow()
|
||||
|
@ -281,9 +173,7 @@ class Models(QDialog):
|
|||
self.mw.progress.start()
|
||||
self.model.moveTemplate(self.template, row-1)
|
||||
self.mw.progress.finish()
|
||||
self.ignoreCardUpdate = True
|
||||
self.updateCards(row-1)
|
||||
self.ignoreCardUpdate = False
|
||||
self.updateCards()
|
||||
|
||||
def moveCardDown(self):
|
||||
row = self.form.cardList.currentRow()
|
||||
|
@ -293,9 +183,7 @@ class Models(QDialog):
|
|||
return
|
||||
self.model.moveTemplate(self.template, row+1)
|
||||
self.mw.progress.finish()
|
||||
self.ignoreCardUpdate = True
|
||||
self.updateCards(row+1)
|
||||
self.ignoreCardUpdate = False
|
||||
self.updateCards()
|
||||
|
||||
# Cleanup
|
||||
##########################################################################
|
||||
|
|
|
@ -59,7 +59,7 @@ def showText(txt, parent=None, type="text"):
|
|||
def askUser(text, parent=None, help="", defaultno=False):
|
||||
"Show a yes/no question. Return true if yes."
|
||||
if not parent:
|
||||
parent = aqt.mw
|
||||
parent = aqt.mw.app.activeWindow()
|
||||
sb = QMessageBox.Yes | QMessageBox.No
|
||||
if help:
|
||||
sb |= QMessageBox.Help
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
|
|
Loading…
Reference in a new issue