diff --git a/ankiqt/ui/cardlist.py b/ankiqt/ui/cardlist.py index 5e786e1bb..7c451cd08 100644 --- a/ankiqt/ui/cardlist.py +++ b/ankiqt/ui/cardlist.py @@ -412,6 +412,7 @@ class EditDeck(QMainWindow): self.connect(self.dialog.actionAddTag, SIGNAL("triggered()"), self.addTags) self.connect(self.dialog.actionDeleteTag, SIGNAL("triggered()"), self.deleteTags) self.connect(self.dialog.actionAddCards, SIGNAL("triggered()"), self.addCards) + self.connect(self.dialog.actionChangeTemplate, SIGNAL("triggered()"), self.onChangeTemplate) self.connect(self.dialog.actionResetProgress, SIGNAL("triggered()"), self.resetProgress) self.connect(self.dialog.actionSelectFacts, SIGNAL("triggered()"), self.selectFacts) self.connect(self.dialog.actionInvertSelection, SIGNAL("triggered()"), self.invertSelection) @@ -592,6 +593,25 @@ where id in (%s)""" % ",".join([ self.updateSearch() self.updateAfterCardChange() + def onChangeTemplate(self): + sc = self.selectedCards() + models = self.deck.s.column0(""" +select distinct modelId from cards, facts where +cards.id in %s and cards.factId = facts.id""" % ids2str(sc)) + if not len(models) == 1: + ui.utils.showInfo( + _("Can only change templates in a single model."), + parent=self) + return + cms = [x.id for x in + self.currentCard.fact.model.cardModels] + d = ChangeTemplateDialog(self, cms) + d.exec_() + if d.newId: + self.deck.changeCardModel(sc, d.newId) + self.updateAfterCardChange() + ### XXX: UNDO + def selectFacts(self): sm = self.dialog.tableView.selectionModel() cardIds = dict([(x, 1) for x in self.selectedFactsAsCards()]) @@ -700,3 +720,42 @@ order by ordinal""" % ids2str(self.cms)) def onHelp(self): QDesktopServices.openUrl(QUrl(ankiqt.appWiki + "Editor#AddCards")) + +class ChangeTemplateDialog(QDialog): + + def __init__(self, parent, cms): + QDialog.__init__(self, parent, Qt.Window) + self.parent = parent + self.cms = cms + self.newId = None + self.dialog = ankiqt.forms.addcardmodels.Ui_Dialog() + self.dialog.setupUi(self) + self.connect(self.dialog.buttonBox, SIGNAL("helpRequested()"), + self.onHelp) + self.setWindowTitle(_("Change Template")) + self.dialog.list.setSelectionMode(QAbstractItemView.SingleSelection) + self.displayCards() + restoreGeom(self, "changeTemplate") + + def displayCards(self): + self.cms = self.parent.deck.s.all(""" +select id, name from cardModels +where id in %s +order by ordinal""" % ids2str(self.cms)) + self.items = [] + for cm in self.cms: + item = QListWidgetItem(cm[1], self.dialog.list) + self.dialog.list.addItem(item) + self.items.append(item) + + def accept(self): + ret = None + r = self.dialog.list.selectionModel().selectedRows() + if r: + self.newId = self.cms[r[0].row()][0] + saveGeom(self, "changeTemplate") + QDialog.accept(self) + + def onHelp(self): + QDesktopServices.openUrl(QUrl(ankiqt.appWiki + + "Editor#ChangeTemplate")) diff --git a/designer/cardlist.ui b/designer/cardlist.ui index 303e4c910..6ab90049f 100644 --- a/designer/cardlist.ui +++ b/designer/cardlist.ui @@ -192,6 +192,7 @@ + @@ -365,6 +366,11 @@ Ctrl+End + + + Change &Template... + +