template load/add/delete implemented

This commit is contained in:
Damien Elmes 2011-03-31 22:20:15 +09:00
parent 9fd4003251
commit 01e6470c2a
3 changed files with 40 additions and 152 deletions

View file

@ -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
##########################################################################

View file

@ -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

View file

@ -33,7 +33,7 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>1</number>
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">