diff --git a/ankiqt/ui/__init__.py b/ankiqt/ui/__init__.py index 274e47160..585f049e5 100644 --- a/ankiqt/ui/__init__.py +++ b/ankiqt/ui/__init__.py @@ -5,27 +5,27 @@ def importAll(): # a hack import main import about - import unsaved - import help - import preferences + import activetags import addcards - import lookup - import sync - import view import cardlist - import update - import importing - import exporting - import status import deckproperties - import modelproperties - import modelchooser import displayproperties - import utils + import exporting import facteditor + import help + import importing + import lookup + import modelchooser + import modelproperties + import preferences + import status + import sync import tagedit import tray - import activetags + import unsaved + import update + import utils + import view class DialogManager(object): diff --git a/ankiqt/ui/cardlist.py b/ankiqt/ui/cardlist.py index d0b05eaff..e59f1a7f9 100644 --- a/ankiqt/ui/cardlist.py +++ b/ankiqt/ui/cardlist.py @@ -511,10 +511,19 @@ where id in (%s)""" % ",".join([ self.updateAfterCardChange(reset=True) def addCards(self): - raise -# for id in self.selectedFacts(): -# self.deck.addMissingCards(self.deck.s.query(Fact).get(id)) -# self.updateSearch() + sf = self.selectedFacts() + if not sf: + return + cms = [x.id for x in self.deck.s.query(Fact).get(sf[0]).\ + model.cardModels] + d = AddCardChooser(self, cms) + if not d.exec_(): + return + for id in sf: + self.deck.addCards(self.deck.s.query(Fact).get(id), + d.selectedCms) + self.deck.flushMod() + self.updateSearch() def selectFacts(self): sm = self.dialog.tableView.selectionModel() @@ -523,3 +532,47 @@ where id in (%s)""" % ",".join([ if card.id in cardIds: sm.select(self.model.index(i, 0), QItemSelectionModel.Select | QItemSelectionModel.Rows) + +class AddCardChooser(QDialog): + + def __init__(self, parent, cms): + QDialog.__init__(self, parent) + self.parent = parent + self.cms = cms + self.dialog = ankiqt.forms.addcardmodels.Ui_Dialog() + self.dialog.setupUi(self) + self.connect(self.dialog.buttonBox, SIGNAL("helpRequested()"), + self.onHelp) + self.displayCards() + restoreGeom(self, "addCardModels") + + def displayCards(self): + self.cms = self.parent.deck.s.all(""" +select id, name, active 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) + idx = self.dialog.list.indexFromItem(item) + if cm[2]: + mode = QItemSelectionModel.Select + else: + mode = QItemSelectionModel.Deselect + self.dialog.list.selectionModel().select(idx, mode) + + def accept(self): + self.selectedCms = [] + for i, item in enumerate(self.items): + idx = self.dialog.list.indexFromItem(item) + if self.dialog.list.selectionModel().isSelected(idx): + self.selectedCms.append(self.cms[i][0]) + saveGeom(self, "addCardModels") + QDialog.accept(self) + + def onHelp(self): + QDesktopServices.openUrl(QUrl(ankiqt.appWiki + + "Editor#AddCards")) + diff --git a/designer/infodialog.ui b/designer/addcardmodels.ui similarity index 67% rename from designer/infodialog.ui rename to designer/addcardmodels.ui index 1ac2a5a36..0ccc4f47b 100644 --- a/designer/infodialog.ui +++ b/designer/addcardmodels.ui @@ -1,28 +1,22 @@ - InfoDialog - + Dialog + 0 0 - 409 - 284 + 248 + 268 - Dialog + Add Cards - - - 9 - - - 6 - + - - - true + + + QAbstractItemView::MultiSelection @@ -32,7 +26,7 @@ Qt::Horizontal - QDialogButtonBox::Close + QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok @@ -43,7 +37,7 @@ buttonBox accepted() - InfoDialog + Dialog accept() @@ -59,7 +53,7 @@ buttonBox rejected() - InfoDialog + Dialog reject() diff --git a/designer/cardlist.ui b/designer/cardlist.ui index 9d07bedd3..c751fe374 100644 --- a/designer/cardlist.ui +++ b/designer/cardlist.ui @@ -241,7 +241,7 @@ :/icons/Anki_Add_Tag.png:/icons/Anki_Add_Tag.png - Add Tag... + &Add Tag... @@ -250,7 +250,7 @@ :/icons/Anki_Del_Tag.png:/icons/Anki_Del_Tag.png - Delete Tag... + &Delete Tag... @@ -259,7 +259,7 @@ :/icons/Anki_Card.png:/icons/Anki_Card.png - Add Cards... + Add &Cards... @@ -277,7 +277,7 @@ :/icons/fileclose.png:/icons/fileclose.png - &Close + Close diff --git a/designer/sort.ui b/designer/sort.ui deleted file mode 100644 index efdedb7b4..000000000 --- a/designer/sort.ui +++ /dev/null @@ -1,97 +0,0 @@ - - Sort - - - - 0 - 0 - 425 - 358 - - - - Anki - - - - 9 - - - 20 - - - - - Please choose a field to sort by. - - - Qt::AlignCenter - - - true - - - - - - - - 12 - - - - QAbstractItemView::NoEditTriggers - - - true - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - Sort - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - Sort - reject() - - - 316 - 260 - - - 286 - 274 - - - - -