copy models, remove 'current model' & 'add model'

This commit is contained in:
Damien Elmes 2009-01-14 16:58:23 +09:00
parent cea6770da5
commit 324226fff2
6 changed files with 41 additions and 66 deletions

View file

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

View file

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

View file

@ -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(_("<b>Model</b>:"))
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):

View file

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

View file

@ -10,22 +10,9 @@
</rect>
</property>
<property name="windowTitle" >
<string>Anki</string>
<string>Add Model</string>
</property>
<layout class="QVBoxLayout" >
<item>
<widget class="QLabel" name="label" >
<property name="text" >
<string>&lt;h1>Add Model&lt;/h1></string>
</property>
<property name="alignment" >
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap" >
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox" >
<property name="title" >

View file

@ -1167,7 +1167,6 @@
<addaction name="separator" />
<addaction name="actionStudyOptions" />
<addaction name="actionDisplayProperties" />
<addaction name="actionModelProperties" />
<addaction name="actionDeckProperties" />
<addaction name="separator" />
<addaction name="menuPlugins" />