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): class DeckProperties(QDialog):
def __init__(self, parent): def __init__(self, parent, deck, onFinish=None):
QDialog.__init__(self, parent, Qt.Window) QDialog.__init__(self, parent, Qt.Window)
self.parent = parent self.parent = parent
self.d = parent.deck self.d = deck
self.onFinish = onFinish
self.origMod = self.d.modified self.origMod = self.d.modified
self.dialog = ankiqt.forms.deckproperties.Ui_DeckProperties() self.dialog = ankiqt.forms.deckproperties.Ui_DeckProperties()
self.dialog.setupUi(self) self.dialog.setupUi(self)
@ -33,7 +34,6 @@ class DeckProperties(QDialog):
self.connect(self.dialog.buttonBox, SIGNAL("helpRequested()"), self.helpRequested) self.connect(self.dialog.buttonBox, SIGNAL("helpRequested()"), self.helpRequested)
self.connect(self.dialog.addSource, SIGNAL("clicked()"), self.onAddSource) self.connect(self.dialog.addSource, SIGNAL("clicked()"), self.onAddSource)
self.connect(self.dialog.deleteSource, SIGNAL("clicked()"), self.onDeleteSource) self.connect(self.dialog.deleteSource, SIGNAL("clicked()"), self.onDeleteSource)
self.show() self.show()
def readData(self): def readData(self):
@ -115,7 +115,7 @@ class DeckProperties(QDialog):
self.dialog.modelsList.setCurrentItem(item) self.dialog.modelsList.setCurrentItem(item)
def onAdd(self): def onAdd(self):
m = ui.modelchooser.AddModel(self, self.parent).getModel() m = ui.modelchooser.AddModel(self, self.parent, self.d).getModel()
if m: if m:
self.d.addModel(m) self.d.addModel(m)
self.updateModelsList() self.updateModelsList()
@ -126,8 +126,8 @@ class DeckProperties(QDialog):
return return
# set to current # set to current
self.d.currentModel = model self.d.currentModel = model
ui.modelproperties.ModelProperties(self, model, self.parent, onFinish= ui.modelproperties.ModelProperties(self, self.d, model, self.parent,
self.updateModelsList) onFinish=self.updateModelsList)
def onDelete(self): def onDelete(self):
model = self.selectedModel() model = self.selectedModel()
@ -198,7 +198,7 @@ class DeckProperties(QDialog):
def reject(self): def reject(self):
n = _("Deck Properties") n = _("Deck Properties")
self.parent.deck.setUndoStart(n) self.d.setUndoStart(n)
# syncing # syncing
if self.dialog.doSync.checkState() == Qt.Checked: if self.dialog.doSync.checkState() == Qt.Checked:
self.updateField(self.d, 'syncName', self.updateField(self.d, 'syncName',
@ -284,6 +284,8 @@ insert into sources values
self.d.setModified() self.d.setModified()
# mark deck dirty and close # mark deck dirty and close
if self.origMod != self.d.modified: if self.origMod != self.d.modified:
self.parent.reset() ankiqt.mw.reset()
self.parent.deck.setUndoEnd(n) self.d.setUndoEnd(n)
if self.onFinish:
self.onFinish()
QDialog.reject(self) QDialog.reject(self)

View file

@ -1283,14 +1283,7 @@ day = :d""", d=yesterday)
self.moveToState("editCurrentFact") self.moveToState("editCurrentFact")
def onDeckProperties(self): def onDeckProperties(self):
self.deckProperties = ui.deckproperties.DeckProperties(self) self.deckProperties = ui.deckproperties.DeckProperties(self, self.deck)
def onModelProperties(self):
if self.currentCard:
model = self.currentCard.fact.model
else:
model = self.deck.currentModel
ui.modelproperties.ModelProperties(self, model)
def onDisplayProperties(self): def onDisplayProperties(self):
ui.dialogs.get("DisplayProperties", self) ui.dialogs.get("DisplayProperties", self)
@ -1558,7 +1551,6 @@ day = :d""", d=yesterday)
"Syncdeck", "Syncdeck",
"DisplayProperties", "DisplayProperties",
"DeckProperties", "DeckProperties",
"ModelProperties",
"Undo", "Undo",
"Redo", "Redo",
"Export", "Export",
@ -1610,7 +1602,6 @@ day = :d""", d=yesterday)
self.connect(m.actionMarkCard, SIGNAL("toggled(bool)"), self.onMark) self.connect(m.actionMarkCard, SIGNAL("toggled(bool)"), self.onMark)
self.connect(m.actionSuspendCard, s, self.onSuspend) self.connect(m.actionSuspendCard, s, self.onSuspend)
self.connect(m.actionDelete, s, self.onDelete) self.connect(m.actionDelete, s, self.onDelete)
self.connect(m.actionModelProperties, s, self.onModelProperties)
self.connect(m.actionRepeatAudio, s, self.onRepeatAudio) self.connect(m.actionRepeatAudio, s, self.onRepeatAudio)
self.connect(m.actionUndo, s, self.onUndo) self.connect(m.actionUndo, s, self.onUndo)
self.connect(m.actionRedo, s, self.onRedo) self.connect(m.actionRedo, s, self.onRedo)

View file

@ -3,6 +3,7 @@
from PyQt4.QtGui import * from PyQt4.QtGui import *
from PyQt4.QtCore import * from PyQt4.QtCore import *
from operator import attrgetter
import anki import anki
from anki import stdmodels from anki import stdmodels
from anki.models import * from anki.models import *
@ -18,7 +19,7 @@ class ModelChooser(QHBoxLayout):
self.deck = deck self.deck = deck
self.onChangeFunc = onChangeFunc self.onChangeFunc = onChangeFunc
self.setMargin(0) self.setMargin(0)
self.setSpacing(6) self.setSpacing(4)
self.shortcuts = [] self.shortcuts = []
label = QLabel(_("<b>Model</b>:")) label = QLabel(_("<b>Model</b>:"))
self.addWidget(label) self.addWidget(label)
@ -32,16 +33,11 @@ class ModelChooser(QHBoxLayout):
QSizePolicy.Policy(0)) QSizePolicy.Policy(0))
self.models.setSizePolicy(sizePolicy) self.models.setSizePolicy(sizePolicy)
self.addWidget(self.models) 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 = 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.setShortcut(_("Shift+Alt+e"))
self.edit.setToolTip(_("Edit the current model")) self.edit.setToolTip(_("Customize Models"))
self.edit.setAutoDefault(False) self.edit.setAutoDefault(False)
self.addWidget(self.edit) self.addWidget(self.edit)
self.connect(self.edit, SIGNAL("clicked()"), self.onEdit) self.connect(self.edit, SIGNAL("clicked()"), self.onEdit)
@ -68,7 +64,7 @@ class ModelChooser(QHBoxLayout):
def onEdit(self): def onEdit(self):
idx = self.models.currentIndex() idx = self.models.currentIndex()
model = self.deck.models[idx] model = self.deck.models[idx]
ui.modelproperties.ModelProperties(self.parent, model, self.main, ui.deckproperties.DeckProperties(self.parent, self.deck,
onFinish=self.onModelEdited) onFinish=self.onModelEdited)
self.drawModels() self.drawModels()
self.changed(model) self.changed(model)
@ -76,16 +72,6 @@ class ModelChooser(QHBoxLayout):
def onModelEdited(self): def onModelEdited(self):
self.drawModels() 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): def onChange(self, idx):
model = self.deck.models[idx] model = self.deck.models[idx]
self.deck.currentModel = model self.deck.currentModel = model
@ -166,23 +152,30 @@ class ModelChooser(QHBoxLayout):
class AddModel(QDialog): class AddModel(QDialog):
def __init__(self, parent, main=None): def __init__(self, parent, main, deck):
QDialog.__init__(self, parent, Qt.Window) QDialog.__init__(self, parent, Qt.Window)
self.parent = parent self.parent = parent
if not main: if not main:
main = parent main = parent
self.main = main self.main = main
self.model = None self.model = None
self.deck = deck
self.dialog = ankiqt.forms.addmodel.Ui_AddModel() self.dialog = ankiqt.forms.addmodel.Ui_AddModel()
self.dialog.setupUi(self) self.dialog.setupUi(self)
self.models = {} self.models = []
names = stdmodels.models.keys() names = stdmodels.models.keys()
names.sort() names.sort()
for name in names: for name in names:
m = stdmodels.byName(name) m = stdmodels.byName(name)
item = QListWidgetItem(m.name) item = QListWidgetItem(_("Add: %s") % m.name)
self.dialog.models.addItem(item) 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) self.dialog.models.setCurrentRow(0)
# the list widget will swallow the enter key # the list widget will swallow the enter key
s = QShortcut(QKeySequence("Return"), self) s = QShortcut(QKeySequence("Return"), self)
@ -195,8 +188,11 @@ class AddModel(QDialog):
return self.model return self.model
def accept(self): def accept(self):
self.model = self.models[ (isStd, self.model) = self.models[
unicode(self.dialog.models.currentItem().text())] self.dialog.models.currentRow()]
if not isStd:
# not a standard model, so duplicate
self.model = self.deck.copyModel(self.model)
QDialog.accept(self) QDialog.accept(self)
def onHelp(self): def onHelp(self):

View file

@ -15,12 +15,12 @@ tabs = ("General",
class ModelProperties(QDialog): 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) QDialog.__init__(self, parent, Qt.Window)
if not main: if not main:
main = parent main = parent
self.parent = main self.parent = main
self.deck = main.deck self.deck = deck
self.origModTime = self.deck.modified self.origModTime = self.deck.modified
self.m = model self.m = model
self.onFinish = onFinish self.onFinish = onFinish
@ -33,7 +33,7 @@ class ModelProperties(QDialog):
self.readData() self.readData()
self.show() self.show()
self.undoName = _("Model Properties") self.undoName = _("Model Properties")
self.parent.deck.setUndoStart(self.undoName) self.deck.setUndoStart(self.undoName)
self.exec_() self.exec_()
def readData(self): def readData(self):
@ -474,10 +474,10 @@ class ModelProperties(QDialog):
self.deck.setModified() self.deck.setModified()
# if changed, reset deck # if changed, reset deck
if self.origModTime != self.deck.modified: if self.origModTime != self.deck.modified:
self.parent.reset() ankiqt.mw.reset()
if self.onFinish: if self.onFinish:
self.onFinish() self.onFinish()
self.parent.deck.setUndoEnd(self.undoName) self.deck.setUndoEnd(self.undoName)
# check again # check again
self.parent.deck.haveJapanese = None self.deck.haveJapanese = None
QDialog.reject(self) QDialog.reject(self)

View file

@ -10,22 +10,9 @@
</rect> </rect>
</property> </property>
<property name="windowTitle" > <property name="windowTitle" >
<string>Anki</string> <string>Add Model</string>
</property> </property>
<layout class="QVBoxLayout" > <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> <item>
<widget class="QGroupBox" name="groupBox" > <widget class="QGroupBox" name="groupBox" >
<property name="title" > <property name="title" >

View file

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