From 324226fff2501ebd08b0a8fdd3383bba279aeb97 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Wed, 14 Jan 2009 16:58:23 +0900 Subject: [PATCH] copy models, remove 'current model' & 'add model' --- ankiqt/ui/deckproperties.py | 20 ++++++++------- ankiqt/ui/main.py | 11 +-------- ankiqt/ui/modelchooser.py | 48 +++++++++++++++++------------------- ankiqt/ui/modelproperties.py | 12 ++++----- designer/addmodel.ui | 15 +---------- designer/main.ui | 1 - 6 files changed, 41 insertions(+), 66 deletions(-) diff --git a/ankiqt/ui/deckproperties.py b/ankiqt/ui/deckproperties.py index 77c9b7bd4..ad3062875 100644 --- a/ankiqt/ui/deckproperties.py +++ b/ankiqt/ui/deckproperties.py @@ -19,10 +19,11 @@ tabs = ("ModelsAndPriorities", class DeckProperties(QDialog): - def __init__(self, parent): + def __init__(self, parent, deck, onFinish=None): QDialog.__init__(self, parent, Qt.Window) self.parent = parent - self.d = parent.deck + self.d = deck + self.onFinish = onFinish self.origMod = self.d.modified self.dialog = ankiqt.forms.deckproperties.Ui_DeckProperties() self.dialog.setupUi(self) @@ -33,7 +34,6 @@ class DeckProperties(QDialog): self.connect(self.dialog.buttonBox, SIGNAL("helpRequested()"), self.helpRequested) self.connect(self.dialog.addSource, SIGNAL("clicked()"), self.onAddSource) self.connect(self.dialog.deleteSource, SIGNAL("clicked()"), self.onDeleteSource) - self.show() def readData(self): @@ -115,7 +115,7 @@ class DeckProperties(QDialog): self.dialog.modelsList.setCurrentItem(item) def onAdd(self): - m = ui.modelchooser.AddModel(self, self.parent).getModel() + m = ui.modelchooser.AddModel(self, self.parent, self.d).getModel() if m: self.d.addModel(m) self.updateModelsList() @@ -126,8 +126,8 @@ class DeckProperties(QDialog): return # set to current self.d.currentModel = model - ui.modelproperties.ModelProperties(self, model, self.parent, onFinish= - self.updateModelsList) + ui.modelproperties.ModelProperties(self, self.d, model, self.parent, + onFinish=self.updateModelsList) def onDelete(self): model = self.selectedModel() @@ -198,7 +198,7 @@ class DeckProperties(QDialog): def reject(self): n = _("Deck Properties") - self.parent.deck.setUndoStart(n) + self.d.setUndoStart(n) # syncing if self.dialog.doSync.checkState() == Qt.Checked: self.updateField(self.d, 'syncName', @@ -284,6 +284,8 @@ insert into sources values self.d.setModified() # mark deck dirty and close if self.origMod != self.d.modified: - self.parent.reset() - self.parent.deck.setUndoEnd(n) + ankiqt.mw.reset() + self.d.setUndoEnd(n) + if self.onFinish: + self.onFinish() QDialog.reject(self) diff --git a/ankiqt/ui/main.py b/ankiqt/ui/main.py index 246af7034..81f497c49 100644 --- a/ankiqt/ui/main.py +++ b/ankiqt/ui/main.py @@ -1283,14 +1283,7 @@ day = :d""", d=yesterday) self.moveToState("editCurrentFact") def onDeckProperties(self): - self.deckProperties = ui.deckproperties.DeckProperties(self) - - def onModelProperties(self): - if self.currentCard: - model = self.currentCard.fact.model - else: - model = self.deck.currentModel - ui.modelproperties.ModelProperties(self, model) + self.deckProperties = ui.deckproperties.DeckProperties(self, self.deck) def onDisplayProperties(self): ui.dialogs.get("DisplayProperties", self) @@ -1558,7 +1551,6 @@ day = :d""", d=yesterday) "Syncdeck", "DisplayProperties", "DeckProperties", - "ModelProperties", "Undo", "Redo", "Export", @@ -1610,7 +1602,6 @@ day = :d""", d=yesterday) self.connect(m.actionMarkCard, SIGNAL("toggled(bool)"), self.onMark) self.connect(m.actionSuspendCard, s, self.onSuspend) self.connect(m.actionDelete, s, self.onDelete) - self.connect(m.actionModelProperties, s, self.onModelProperties) self.connect(m.actionRepeatAudio, s, self.onRepeatAudio) self.connect(m.actionUndo, s, self.onUndo) self.connect(m.actionRedo, s, self.onRedo) diff --git a/ankiqt/ui/modelchooser.py b/ankiqt/ui/modelchooser.py index f1bce4635..7467420a2 100644 --- a/ankiqt/ui/modelchooser.py +++ b/ankiqt/ui/modelchooser.py @@ -3,6 +3,7 @@ from PyQt4.QtGui import * from PyQt4.QtCore import * +from operator import attrgetter import anki from anki import stdmodels from anki.models import * @@ -18,7 +19,7 @@ class ModelChooser(QHBoxLayout): self.deck = deck self.onChangeFunc = onChangeFunc self.setMargin(0) - self.setSpacing(6) + self.setSpacing(4) self.shortcuts = [] label = QLabel(_("Model:")) self.addWidget(label) @@ -32,16 +33,11 @@ class ModelChooser(QHBoxLayout): QSizePolicy.Policy(0)) self.models.setSizePolicy(sizePolicy) self.addWidget(self.models) - self.add = QPushButton() - self.add.setIcon(QIcon(":/icons/list-add.png")) - self.add.setToolTip(_("Add a new model")) - self.add.setAutoDefault(False) - self.addWidget(self.add) - self.connect(self.add, SIGNAL("clicked()"), self.onAdd) self.edit = QPushButton() - self.edit.setIcon(QIcon(":/icons/edit.png")) + self.edit.setFixedWidth(32) + self.edit.setIcon(QIcon(":/icons/configure.png")) self.edit.setShortcut(_("Shift+Alt+e")) - self.edit.setToolTip(_("Edit the current model")) + self.edit.setToolTip(_("Customize Models")) self.edit.setAutoDefault(False) self.addWidget(self.edit) self.connect(self.edit, SIGNAL("clicked()"), self.onEdit) @@ -68,7 +64,7 @@ class ModelChooser(QHBoxLayout): def onEdit(self): idx = self.models.currentIndex() model = self.deck.models[idx] - ui.modelproperties.ModelProperties(self.parent, model, self.main, + ui.deckproperties.DeckProperties(self.parent, self.deck, onFinish=self.onModelEdited) self.drawModels() self.changed(model) @@ -76,16 +72,6 @@ class ModelChooser(QHBoxLayout): def onModelEdited(self): self.drawModels() - def onAdd(self): - model = AddModel(self.parent, self.main).getModel() - if model: - self.deck.addModel(model) - self.drawModels() - self.changed(model) - self.deck.setModified() - # check again - self.deck.haveJapanese = None - def onChange(self, idx): model = self.deck.models[idx] self.deck.currentModel = model @@ -166,23 +152,30 @@ class ModelChooser(QHBoxLayout): class AddModel(QDialog): - def __init__(self, parent, main=None): + def __init__(self, parent, main, deck): QDialog.__init__(self, parent, Qt.Window) self.parent = parent if not main: main = parent self.main = main self.model = None + self.deck = deck self.dialog = ankiqt.forms.addmodel.Ui_AddModel() self.dialog.setupUi(self) - self.models = {} + self.models = [] names = stdmodels.models.keys() names.sort() for name in names: m = stdmodels.byName(name) - item = QListWidgetItem(m.name) + item = QListWidgetItem(_("Add: %s") % m.name) self.dialog.models.addItem(item) - self.models[m.name] = m + self.models.append((True, m)) + # add local decks + models = sorted(deck.models, key=attrgetter("name")) + for m in models: + item = QListWidgetItem(_("Copy: %s") % m.name) + self.dialog.models.addItem(item) + self.models.append((False, m)) self.dialog.models.setCurrentRow(0) # the list widget will swallow the enter key s = QShortcut(QKeySequence("Return"), self) @@ -195,8 +188,11 @@ class AddModel(QDialog): return self.model def accept(self): - self.model = self.models[ - unicode(self.dialog.models.currentItem().text())] + (isStd, self.model) = self.models[ + self.dialog.models.currentRow()] + if not isStd: + # not a standard model, so duplicate + self.model = self.deck.copyModel(self.model) QDialog.accept(self) def onHelp(self): diff --git a/ankiqt/ui/modelproperties.py b/ankiqt/ui/modelproperties.py index 31b34a11d..a99793ebd 100644 --- a/ankiqt/ui/modelproperties.py +++ b/ankiqt/ui/modelproperties.py @@ -15,12 +15,12 @@ tabs = ("General", class ModelProperties(QDialog): - def __init__(self, parent, model, main=None, onFinish=None): + def __init__(self, parent, deck, model, main=None, onFinish=None): QDialog.__init__(self, parent, Qt.Window) if not main: main = parent self.parent = main - self.deck = main.deck + self.deck = deck self.origModTime = self.deck.modified self.m = model self.onFinish = onFinish @@ -33,7 +33,7 @@ class ModelProperties(QDialog): self.readData() self.show() self.undoName = _("Model Properties") - self.parent.deck.setUndoStart(self.undoName) + self.deck.setUndoStart(self.undoName) self.exec_() def readData(self): @@ -474,10 +474,10 @@ class ModelProperties(QDialog): self.deck.setModified() # if changed, reset deck if self.origModTime != self.deck.modified: - self.parent.reset() + ankiqt.mw.reset() if self.onFinish: self.onFinish() - self.parent.deck.setUndoEnd(self.undoName) + self.deck.setUndoEnd(self.undoName) # check again - self.parent.deck.haveJapanese = None + self.deck.haveJapanese = None QDialog.reject(self) diff --git a/designer/addmodel.ui b/designer/addmodel.ui index f463b7789..8c87acb4d 100644 --- a/designer/addmodel.ui +++ b/designer/addmodel.ui @@ -10,22 +10,9 @@ - Anki + Add Model - - - - <h1>Add Model</h1> - - - Qt::AlignCenter - - - true - - - diff --git a/designer/main.ui b/designer/main.ui index 665e5719f..2eeca07d5 100644 --- a/designer/main.ui +++ b/designer/main.ui @@ -1167,7 +1167,6 @@ -