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 @@
-