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()"), self.connect(self.form.buttonBox, SIGNAL("helpRequested()"),
lambda: openHelp("Models")) lambda: openHelp("Models"))
self.setupModels() self.setupModels()
#self.setupCards() self.setupCards()
self.exec_() self.exec_()
# Models # Models
@ -54,6 +54,7 @@ class Models(QDialog):
self.saveModel() self.saveModel()
idx = self.form.modelsList.currentRow() idx = self.form.modelsList.currentRow()
self.model = self.models[idx] self.model = self.models[idx]
self.updateCards()
def onAdd(self): def onAdd(self):
m = aqt.modelchooser.AddModel(self.mw, self).get() m = aqt.modelchooser.AddModel(self.mw, self).get()
@ -101,176 +102,67 @@ class Models(QDialog):
########################################################################## ##########################################################################
def setupCards(self): def setupCards(self):
self.ignoreCardUpdate = False f = self.form; c = self.connect; s = SIGNAL("clicked()")
self.currentCard = None c(f.cardList, SIGNAL("currentRowChanged(int)"),
self.updateCards()
self.readCurrentCard()
self.connect(self.form.cardList, SIGNAL("currentRowChanged(int)"),
self.cardRowChanged) self.cardRowChanged)
self.connect(self.form.cardAdd, SIGNAL("clicked()"), c(f.cardList, SIGNAL("itemDoubleClicked(QListWidgetItem*)"),
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()"),
self.renameCard) self.renameCard)
self.connect(self.form.cardLayout, SIGNAL("clicked()"), c(f.cardAdd, s, self.addCard)
self.cardLayout) 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) txt = ui.utils.getText(_("New name?"), parent=self)
if txt[0]: if txt[0]:
self.currentCard.name = txt[0] self.template['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()
def updateCards(self, row = None): def updateCards(self, row = None):
oldRow = self.form.cardList.currentRow() row = self.form.cardList.currentRow() or 0
if oldRow == -1: if row == -1:
oldRow = 0 row = 0
self.form.cardList.clear() self.form.cardList.clear()
n = 1 for card in self.model.templates:
for card in self.model.cardModels: item = QListWidgetItem(card['name'])
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)
self.form.cardList.addItem(item) self.form.cardList.addItem(item)
n += 1
count = self.form.cardList.count() count = self.form.cardList.count()
if row != None: self.form.cardList.setCurrentRow(row)
self.form.cardList.setCurrentRow(row)
else:
while (count > 0 and oldRow > (count - 1)):
oldRow -= 1
self.form.cardList.setCurrentRow(oldRow)
self.enableCardMoveButtons()
def cardRowChanged(self): def cardRowChanged(self):
if self.ignoreCardUpdate: self.template = self.model.templates[self.form.cardList.currentRow()]
return self.enableCardMoveButtons()
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)
def enableCardMoveButtons(self): def enableCardMoveButtons(self):
row = self.form.cardList.currentRow() f = self.form
if row < 1: row = f.cardList.currentRow()
self.form.cardUp.setEnabled(False) f.cardUp.setEnabled(row >= 1)
else: f.cardDown.setEnabled(row < (f.cardList.count() - 1))
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
def addCard(self): def addCard(self):
cards = len(self.model.cardModels) cards = len(self.model.templates)
name = _("Template_%d") % (cards+1) t = self.model.newTemplate()
fields = self.model.fieldModels t['name'] = _("Template %d") % (cards+1)
qformat = "{{%s}}" % fields[0].name fields = self.model.fields
t['qfmt'] = "{{%s}}" % fields[0]['name']
if len(fields) > 1: if len(fields) > 1:
aformat = "{{%s}}" % fields[1].name t['afmt'] = "{{%s}}" % fields[1]['name']
else: else:
aformat = "" t['afmt'] = ""
cm = CardModel(name, qformat, aformat) self.model.addTemplate(t)
self.deck.addCardModel(m, cm)
self.updateCards() self.updateCards()
self.form.cardList.setCurrentRow(len(self.model.cardModels)-1)
def deleteCard(self): def deleteCard(self):
row = self.form.cardList.currentRow() if len (self.model.templates) < 2:
if row == -1:
return
if len (self.model.cardModels) < 2:
ui.utils.showWarning( ui.utils.showWarning(
_("Please add a new template first."), _("Please add a new template first."),
parent=self) parent=self)
return return
card = self.model.cardModels[row] if not askUser(
count = self.deck.cardModelUseCount(card) _("Delete this template and all cards that use it?")):
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:
return return
card = self.model.cardModels[row] self.model.delTemplate(self.template)
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.updateCards() self.updateCards()
self.model.setModified()
self.deck.setModified()
def moveCardUp(self): def moveCardUp(self):
row = self.form.cardList.currentRow() row = self.form.cardList.currentRow()
@ -281,9 +173,7 @@ class Models(QDialog):
self.mw.progress.start() self.mw.progress.start()
self.model.moveTemplate(self.template, row-1) self.model.moveTemplate(self.template, row-1)
self.mw.progress.finish() self.mw.progress.finish()
self.ignoreCardUpdate = True self.updateCards()
self.updateCards(row-1)
self.ignoreCardUpdate = False
def moveCardDown(self): def moveCardDown(self):
row = self.form.cardList.currentRow() row = self.form.cardList.currentRow()
@ -293,9 +183,7 @@ class Models(QDialog):
return return
self.model.moveTemplate(self.template, row+1) self.model.moveTemplate(self.template, row+1)
self.mw.progress.finish() self.mw.progress.finish()
self.ignoreCardUpdate = True self.updateCards()
self.updateCards(row+1)
self.ignoreCardUpdate = False
# Cleanup # Cleanup
########################################################################## ##########################################################################

View file

@ -59,7 +59,7 @@ def showText(txt, parent=None, type="text"):
def askUser(text, parent=None, help="", defaultno=False): def askUser(text, parent=None, help="", defaultno=False):
"Show a yes/no question. Return true if yes." "Show a yes/no question. Return true if yes."
if not parent: if not parent:
parent = aqt.mw parent = aqt.mw.app.activeWindow()
sb = QMessageBox.Yes | QMessageBox.No sb = QMessageBox.Yes | QMessageBox.No
if help: if help:
sb |= QMessageBox.Help sb |= QMessageBox.Help

View file

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