mirror of
https://github.com/ankitects/anki.git
synced 2025-11-09 06:07:11 -05: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()"),
|
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
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue