mirror of
https://github.com/ankitects/anki.git
synced 2025-11-09 06:07:11 -05:00
card dialog improvements
- clone current card instead of making empty one - option to flip current card - if opened from add screen, fill blank fields
This commit is contained in:
parent
b5c562d552
commit
1cf1efa852
2 changed files with 46 additions and 6 deletions
|
|
@ -208,7 +208,7 @@ class DataModel(QAbstractTableModel):
|
||||||
elif type == "template":
|
elif type == "template":
|
||||||
t = c.template()['name']
|
t = c.template()['name']
|
||||||
if c.model()['type'] == MODEL_CLOZE:
|
if c.model()['type'] == MODEL_CLOZE:
|
||||||
t += " (%d)" % (c.ord+1)
|
t += " %d" % (c.ord+1)
|
||||||
return t
|
return t
|
||||||
elif type == "cardDue":
|
elif type == "cardDue":
|
||||||
return self.nextDue(c, index)
|
return self.nextDue(c, index)
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,12 @@ class CardLayout(QDialog):
|
||||||
self.addMode = addMode
|
self.addMode = addMode
|
||||||
if addMode:
|
if addMode:
|
||||||
# save it to DB temporarily
|
# save it to DB temporarily
|
||||||
|
self.emptyFields = []
|
||||||
|
for name, val in note.items():
|
||||||
|
if val.strip():
|
||||||
|
continue
|
||||||
|
self.emptyFields.append(name)
|
||||||
|
note[name] = "(%s)" % name
|
||||||
note.flush()
|
note.flush()
|
||||||
self.setupTabs()
|
self.setupTabs()
|
||||||
self.setupButtons()
|
self.setupButtons()
|
||||||
|
|
@ -133,6 +139,11 @@ Please create a new card type first."""))
|
||||||
l.addWidget(help)
|
l.addWidget(help)
|
||||||
c(help, SIGNAL("clicked()"), self.onHelp)
|
c(help, SIGNAL("clicked()"), self.onHelp)
|
||||||
l.addStretch()
|
l.addStretch()
|
||||||
|
if self.model['type'] != MODEL_CLOZE:
|
||||||
|
flip = QPushButton(_("Flip Front/Back"))
|
||||||
|
flip.setAutoDefault(False)
|
||||||
|
l.addWidget(flip)
|
||||||
|
c(flip, SIGNAL("clicked()"), self.onFlip)
|
||||||
rename = QPushButton(_("Rename..."))
|
rename = QPushButton(_("Rename..."))
|
||||||
rename.setAutoDefault(False)
|
rename.setAutoDefault(False)
|
||||||
l.addWidget(rename)
|
l.addWidget(rename)
|
||||||
|
|
@ -249,15 +260,41 @@ Please create a new card type first."""))
|
||||||
self.ord = pos
|
self.ord = pos
|
||||||
self.redraw()
|
self.redraw()
|
||||||
|
|
||||||
|
def _newCardName(self):
|
||||||
|
n = len(self.cards) + 1
|
||||||
|
while 1:
|
||||||
|
name = _("Card %d") % n
|
||||||
|
if name not in [c.template()['name'] for c in self.cards]:
|
||||||
|
break
|
||||||
|
n += 1
|
||||||
|
return name
|
||||||
|
|
||||||
def onAddCard(self):
|
def onAddCard(self):
|
||||||
name = getOnlyText(_("Name:"))
|
name = self._newCardName()
|
||||||
if not name:
|
|
||||||
return
|
|
||||||
if name in [c.template()['name'] for c in self.cards]:
|
|
||||||
return showWarning(_("That name is already used."))
|
|
||||||
t = self.mm.newTemplate(name)
|
t = self.mm.newTemplate(name)
|
||||||
|
old = self.card.template()
|
||||||
|
t['qfmt'] = "%s<br>\n%s" % (_("Edit to customize"), old['qfmt'])
|
||||||
|
t['afmt'] = old['afmt']
|
||||||
self.mm.addTemplate(self.model, t)
|
self.mm.addTemplate(self.model, t)
|
||||||
self.redraw()
|
self.redraw()
|
||||||
|
self.selectCard(t['ord'])
|
||||||
|
|
||||||
|
def onFlip(self):
|
||||||
|
old = self.card.template()
|
||||||
|
self._flipQA(old, old)
|
||||||
|
self.redraw()
|
||||||
|
|
||||||
|
def _flipQA(self, src, dst):
|
||||||
|
m = re.match("(?s)(.+)<hr id=answer>(.+)", src['afmt'])
|
||||||
|
if not m:
|
||||||
|
showInfo(_("""\
|
||||||
|
Anki couldn't find the line between the question and answer. Please \
|
||||||
|
adjust the template manually to switch the question and answer."""))
|
||||||
|
return
|
||||||
|
dst['qfmt'] = m.group(2).strip()
|
||||||
|
dst['afmt'] = "%s\n\n<hr id=answer>\n\n%s" % (m.group(2).strip(),
|
||||||
|
m.group(1).strip())
|
||||||
|
return True
|
||||||
|
|
||||||
def onTargetDeck(self):
|
def onTargetDeck(self):
|
||||||
from aqt.tagedit import TagEdit
|
from aqt.tagedit import TagEdit
|
||||||
|
|
@ -296,6 +333,9 @@ Enter deck to place new %s cards in, or leave blank:""") %
|
||||||
def reject(self):
|
def reject(self):
|
||||||
clearAudioQueue()
|
clearAudioQueue()
|
||||||
if self.addMode:
|
if self.addMode:
|
||||||
|
# remove the filler fields we added
|
||||||
|
for name in self.emptyFields:
|
||||||
|
self.note[name] = ""
|
||||||
self.mw.col.db.execute("delete from notes where id = ?",
|
self.mw.col.db.execute("delete from notes where id = ?",
|
||||||
self.note.id)
|
self.note.id)
|
||||||
self.mm.save(self.model, templates=True)
|
self.mm.save(self.model, templates=True)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue