From 01e6470c2a6b7bfc071270cf03e304c1ecc240e5 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 31 Mar 2011 22:20:15 +0900 Subject: [PATCH] template load/add/delete implemented --- aqt/models.py | 188 +++++++++----------------------------------- aqt/utils.py | 2 +- designer/clayout.ui | 2 +- 3 files changed, 40 insertions(+), 152 deletions(-) diff --git a/aqt/models.py b/aqt/models.py index de57b1536..23a2a15ac 100644 --- a/aqt/models.py +++ b/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 ########################################################################## diff --git a/aqt/utils.py b/aqt/utils.py index 84f685956..3239c1778 100644 --- a/aqt/utils.py +++ b/aqt/utils.py @@ -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 diff --git a/designer/clayout.ui b/designer/clayout.ui index 2b626f061..51be4eece 100644 --- a/designer/clayout.ui +++ b/designer/clayout.ui @@ -33,7 +33,7 @@ - 1 + 0