mirror of
https://github.com/ankitects/anki.git
synced 2025-11-09 14:17:13 -05:00
update deck configuration dialog
This commit is contained in:
parent
82fb30aa4a
commit
f8d39ca210
9 changed files with 742 additions and 805 deletions
17
aqt/cram.py
17
aqt/cram.py
|
|
@ -44,3 +44,20 @@
|
||||||
self.moveToState("initial")
|
self.moveToState("initial")
|
||||||
if not self.deck.finishScheduler:
|
if not self.deck.finishScheduler:
|
||||||
showInfo(_("No cards matched the provided tags."))
|
showInfo(_("No cards matched the provided tags."))
|
||||||
|
|
||||||
|
|
||||||
|
# cram options
|
||||||
|
|
||||||
|
c = self.conf['cram']
|
||||||
|
f.cramSteps.setText(self.listToUser(c['delays']))
|
||||||
|
f.cramBoost.setChecked(c['resched'])
|
||||||
|
f.cramReset.setChecked(c['reset'])
|
||||||
|
f.cramMult.setValue(c['mult']*100)
|
||||||
|
f.cramMinInt.setValue(c['minInt'])
|
||||||
|
|
||||||
|
c = self.conf['cram']
|
||||||
|
self.updateList(c, 'delays', f.cramSteps)
|
||||||
|
c['resched'] = f.cramBoost.isChecked()
|
||||||
|
c['reset'] = f.cramReset.isChecked()
|
||||||
|
c['mult'] = f.cramMult.value()/100.0
|
||||||
|
c['minInt'] = f.cramMinInt.value()
|
||||||
|
|
|
||||||
306
aqt/deckconf.py
306
aqt/deckconf.py
|
|
@ -5,34 +5,137 @@
|
||||||
from aqt.qt import *
|
from aqt.qt import *
|
||||||
import aqt, simplejson
|
import aqt, simplejson
|
||||||
from anki.utils import ids2str
|
from anki.utils import ids2str
|
||||||
from aqt.utils import showInfo, showWarning, openHelp
|
from aqt.utils import showInfo, showWarning, openHelp, getOnlyText
|
||||||
|
from operator import itemgetter
|
||||||
|
import datetime, time
|
||||||
|
|
||||||
# Configuration editing
|
class DeckConf(QDialog):
|
||||||
##########################################################################
|
def __init__(self, mw):
|
||||||
|
QDialog.__init__(self, mw)
|
||||||
class GroupConf(QDialog):
|
|
||||||
def __init__(self, mw, gcid, parent=None):
|
|
||||||
QDialog.__init__(self, parent or mw)
|
|
||||||
self.mw = mw
|
self.mw = mw
|
||||||
self.gcid = gcid
|
self.deck = self.mw.col.decks.current()
|
||||||
self.form = aqt.forms.groupconf.Ui_Dialog()
|
self.form = aqt.forms.dconf.Ui_Dialog()
|
||||||
self.form.setupUi(self)
|
self.form.setupUi(self)
|
||||||
(self.name, self.conf) = self.mw.col.db.first(
|
self.mw.checkpoint(_("Options"))
|
||||||
"select name, conf from gconf where id = ?", self.gcid)
|
self.setupConfs()
|
||||||
self.conf = simplejson.loads(self.conf)
|
|
||||||
self.setWindowTitle(self.name)
|
|
||||||
self.setup()
|
|
||||||
self.connect(self.form.buttonBox,
|
self.connect(self.form.buttonBox,
|
||||||
SIGNAL("helpRequested()"),
|
SIGNAL("helpRequested()"),
|
||||||
lambda: openHelp("GroupOptions"))
|
lambda: openHelp("StudyOptions"))
|
||||||
|
self.connect(self.form.confOpts, SIGNAL("clicked()"), self.confOpts)
|
||||||
|
self.form.confOpts.setText(u"▾")
|
||||||
self.connect(self.form.buttonBox.button(QDialogButtonBox.RestoreDefaults),
|
self.connect(self.form.buttonBox.button(QDialogButtonBox.RestoreDefaults),
|
||||||
SIGNAL("clicked()"),
|
SIGNAL("clicked()"),
|
||||||
self.onRestore)
|
self.onRestore)
|
||||||
|
self.setupCombos()
|
||||||
|
self.setupCollection()
|
||||||
|
self.setWindowTitle(_("Options for %s") % self.deck['name'])
|
||||||
self.exec_()
|
self.exec_()
|
||||||
|
|
||||||
def accept(self):
|
def setupCombos(self):
|
||||||
self.save()
|
import anki.consts as cs
|
||||||
QDialog.accept(self)
|
f = self.form
|
||||||
|
f.newOrder.addItems(cs.newCardOrderLabels().values())
|
||||||
|
f.revOrder.addItems(cs.revCardOrderLabels().values())
|
||||||
|
f.newSpread.addItems(cs.newCardSchedulingLabels().values())
|
||||||
|
self.connect(f.newOrder, SIGNAL("currentIndexChanged(int)"),
|
||||||
|
self.onNewOrderChanged)
|
||||||
|
|
||||||
|
# Conf list
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
def setupConfs(self):
|
||||||
|
self.connect(self.form.dconf, SIGNAL("currentIndexChanged(int)"),
|
||||||
|
self.onConfChange)
|
||||||
|
self.conf = None
|
||||||
|
self.loadConfs()
|
||||||
|
|
||||||
|
def loadConfs(self):
|
||||||
|
current = self.deck['conf']
|
||||||
|
self.confList = self.mw.col.decks.allConf()
|
||||||
|
self.confList.sort(key=itemgetter('name'))
|
||||||
|
startOn = None
|
||||||
|
self.ignoreConfChange = True
|
||||||
|
self.form.dconf.clear()
|
||||||
|
for idx, conf in enumerate(self.confList):
|
||||||
|
self.form.dconf.addItem(conf['name'])
|
||||||
|
if conf['id'] == current:
|
||||||
|
startOn = idx
|
||||||
|
self.ignoreConfChange = False
|
||||||
|
self.form.dconf.setCurrentIndex(startOn)
|
||||||
|
self.onConfChange(startOn)
|
||||||
|
|
||||||
|
def confOpts(self):
|
||||||
|
m = QMenu(self.mw)
|
||||||
|
a = m.addAction(_("Add"))
|
||||||
|
a.connect(a, SIGNAL("triggered()"), self.addGroup)
|
||||||
|
a = m.addAction(_("Delete"))
|
||||||
|
a.connect(a, SIGNAL("triggered()"), self.remGroup)
|
||||||
|
a = m.addAction(_("Rename"))
|
||||||
|
a.connect(a, SIGNAL("triggered()"), self.renameGroup)
|
||||||
|
m.exec_(QCursor.pos())
|
||||||
|
|
||||||
|
def onConfChange(self, idx):
|
||||||
|
if self.ignoreConfChange:
|
||||||
|
return
|
||||||
|
if self.conf:
|
||||||
|
self.saveConf()
|
||||||
|
conf = self.confList[idx]
|
||||||
|
self.deck['conf'] = conf['id']
|
||||||
|
self.loadConf()
|
||||||
|
|
||||||
|
def addGroup(self):
|
||||||
|
name = getOnlyText(_("New options group name:"))
|
||||||
|
if not name:
|
||||||
|
return
|
||||||
|
# first, save currently entered data to current conf
|
||||||
|
self.saveConf()
|
||||||
|
# then clone the conf
|
||||||
|
id = self.mw.col.decks.confId(name, cloneFrom=self.conf)
|
||||||
|
# set the deck to the new conf
|
||||||
|
self.deck['conf'] = id
|
||||||
|
# then reload the conf list
|
||||||
|
self.loadConfs()
|
||||||
|
|
||||||
|
def remGroup(self):
|
||||||
|
if self.conf['id'] == 1:
|
||||||
|
showInfo(_("The default configuration can't be removed."), self)
|
||||||
|
else:
|
||||||
|
self.mw.col.decks.remConf(self.conf['id'])
|
||||||
|
self.deck['conf'] = 1
|
||||||
|
self.loadConfs()
|
||||||
|
|
||||||
|
def renameGroup(self):
|
||||||
|
name = getOnlyText(_("New name:"))
|
||||||
|
if not name:
|
||||||
|
return
|
||||||
|
self.conf['name'] = name
|
||||||
|
self.loadConfs()
|
||||||
|
|
||||||
|
# Collection options
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
def setupCollection(self):
|
||||||
|
import anki.consts as c
|
||||||
|
f = self.form
|
||||||
|
qc = self.mw.col.conf
|
||||||
|
self.startDate = datetime.datetime.fromtimestamp(self.mw.col.crt)
|
||||||
|
f.dayOffset.setValue(self.startDate.hour)
|
||||||
|
f.lrnCutoff.setValue(qc['collapseTime']/60.0)
|
||||||
|
f.newSpread.setCurrentIndex(qc['newSpread'])
|
||||||
|
f.timeLimit.setValue(qc['timeLim']/60.0)
|
||||||
|
|
||||||
|
def saveCollection(self):
|
||||||
|
f = self.form
|
||||||
|
d = self.mw.col
|
||||||
|
qc = d.conf
|
||||||
|
qc['newSpread'] = f.newSpread.currentIndex()
|
||||||
|
qc['timeLim'] = f.timeLimit.value()*60
|
||||||
|
qc['collapseTime'] = f.lrnCutoff.value()*60
|
||||||
|
hrs = f.dayOffset.value()
|
||||||
|
old = self.startDate
|
||||||
|
date = datetime.datetime(
|
||||||
|
old.year, old.month, old.day, hrs)
|
||||||
|
d.crt = int(time.mktime(date.timetuple()))
|
||||||
|
|
||||||
# Loading
|
# Loading
|
||||||
##################################################
|
##################################################
|
||||||
|
|
@ -40,15 +143,26 @@ class GroupConf(QDialog):
|
||||||
def listToUser(self, l):
|
def listToUser(self, l):
|
||||||
return " ".join([str(x) for x in l])
|
return " ".join([str(x) for x in l])
|
||||||
|
|
||||||
def setup(self):
|
def loadConf(self):
|
||||||
|
self.conf = self.mw.col.decks.conf(self.deck['id'])
|
||||||
# new
|
# new
|
||||||
c = self.conf['new']
|
c = self.conf['new']
|
||||||
f = self.form
|
f = self.form
|
||||||
f.lrnSteps.setText(self.listToUser(c['delays']))
|
f.lrnSteps.setText(self.listToUser(c['delays']))
|
||||||
f.lrnGradInt.setValue(c['ints'][0])
|
f.lrnGradInt.setValue(c['ints'][0])
|
||||||
f.lrnEasyInt.setValue(c['ints'][2])
|
f.lrnEasyInt.setValue(c['ints'][1])
|
||||||
f.lrnFirstInt.setValue(c['ints'][1])
|
|
||||||
f.lrnFactor.setValue(c['initialFactor']/10.0)
|
f.lrnFactor.setValue(c['initialFactor']/10.0)
|
||||||
|
f.newOrder.setCurrentIndex(c['order'])
|
||||||
|
f.newPerDay.setValue(c['perDay'])
|
||||||
|
# rev
|
||||||
|
c = self.conf['rev']
|
||||||
|
f.revPerDay.setValue(c['perDay'])
|
||||||
|
f.revOrder.setCurrentIndex(c['order'])
|
||||||
|
f.revSpace.setValue(c['fuzz']*100)
|
||||||
|
f.revMinSpace.setValue(c['minSpace'])
|
||||||
|
f.easyBonus.setValue(c['ease4']*100)
|
||||||
|
f.fi1.setValue(c['fi'][0])
|
||||||
|
f.fi2.setValue(c['fi'][1])
|
||||||
# lapse
|
# lapse
|
||||||
c = self.conf['lapse']
|
c = self.conf['lapse']
|
||||||
f.lapSteps.setText(self.listToUser(c['delays']))
|
f.lapSteps.setText(self.listToUser(c['delays']))
|
||||||
|
|
@ -56,27 +170,30 @@ class GroupConf(QDialog):
|
||||||
f.lapMinInt.setValue(c['minInt'])
|
f.lapMinInt.setValue(c['minInt'])
|
||||||
f.leechThreshold.setValue(c['leechFails'])
|
f.leechThreshold.setValue(c['leechFails'])
|
||||||
f.leechAction.setCurrentIndex(c['leechAction'])
|
f.leechAction.setCurrentIndex(c['leechAction'])
|
||||||
f.lapRelearn.setChecked(c['relearn'])
|
|
||||||
# rev
|
|
||||||
c = self.conf['rev']
|
|
||||||
f.revSpace.setValue(c['fuzz']*100)
|
|
||||||
f.revMinSpace.setValue(c['minSpace'])
|
|
||||||
f.easyBonus.setValue(c['ease4']*100)
|
|
||||||
# cram
|
|
||||||
c = self.conf['cram']
|
|
||||||
f.cramSteps.setText(self.listToUser(c['delays']))
|
|
||||||
f.cramBoost.setChecked(c['resched'])
|
|
||||||
f.cramReset.setChecked(c['reset'])
|
|
||||||
f.cramMult.setValue(c['mult']*100)
|
|
||||||
f.cramMinInt.setValue(c['minInt'])
|
|
||||||
# general
|
# general
|
||||||
c = self.conf
|
c = self.conf
|
||||||
f.maxTaken.setValue(c['maxTaken'])
|
f.maxTaken.setValue(c['maxTaken'])
|
||||||
|
|
||||||
def onRestore(self):
|
def onRestore(self):
|
||||||
from anki.groups import defaultConf
|
self.mw.col.decks.restoreToDefault(self.conf)
|
||||||
self.conf = defaultConf.copy()
|
self.loadConf()
|
||||||
self.setup()
|
f = self.form
|
||||||
|
f.dayOffset.setValue(4)
|
||||||
|
f.lrnCutoff.setValue(20)
|
||||||
|
f.newSpread.setCurrentIndex(0)
|
||||||
|
f.timeLimit.setValue(0)
|
||||||
|
|
||||||
|
# New order
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
def onNewOrderChanged(self, new):
|
||||||
|
old = self.conf['new']['order']
|
||||||
|
if old == new:
|
||||||
|
return
|
||||||
|
self.conf['new']['order'] = new
|
||||||
|
self.mw.progress.start()
|
||||||
|
self.mw.col.sched.resortConf(self.conf)
|
||||||
|
self.mw.progress.finish()
|
||||||
|
|
||||||
# Saving
|
# Saving
|
||||||
##################################################
|
##################################################
|
||||||
|
|
@ -97,15 +214,24 @@ class GroupConf(QDialog):
|
||||||
return
|
return
|
||||||
conf[key] = ret
|
conf[key] = ret
|
||||||
|
|
||||||
def save(self):
|
def saveConf(self):
|
||||||
# new
|
# new
|
||||||
c = self.conf['new']
|
c = self.conf['new']
|
||||||
f = self.form
|
f = self.form
|
||||||
self.updateList(c, 'delays', f.lrnSteps)
|
self.updateList(c, 'delays', f.lrnSteps)
|
||||||
c['ints'][0] = f.lrnGradInt.value()
|
c['ints'][0] = f.lrnGradInt.value()
|
||||||
c['ints'][2] = f.lrnEasyInt.value()
|
c['ints'][1] = f.lrnEasyInt.value()
|
||||||
c['ints'][1] = f.lrnFirstInt.value()
|
|
||||||
c['initialFactor'] = f.lrnFactor.value()*10
|
c['initialFactor'] = f.lrnFactor.value()*10
|
||||||
|
c['order'] = f.newOrder.currentIndex()
|
||||||
|
c['perDay'] = f.newPerDay.value()
|
||||||
|
# rev
|
||||||
|
c = self.conf['rev']
|
||||||
|
c['perDay'] = f.revPerDay.value()
|
||||||
|
c['fuzz'] = f.revSpace.value()/100.0
|
||||||
|
c['minSpace'] = f.revMinSpace.value()
|
||||||
|
c['ease4'] = f.easyBonus.value()/100.0
|
||||||
|
c['order'] = f.revOrder.currentIndex()
|
||||||
|
c['fi'] = [f.fi1.value(), f.fi2.value()]
|
||||||
# lapse
|
# lapse
|
||||||
c = self.conf['lapse']
|
c = self.conf['lapse']
|
||||||
self.updateList(c, 'delays', f.lapSteps)
|
self.updateList(c, 'delays', f.lapSteps)
|
||||||
|
|
@ -113,105 +239,19 @@ class GroupConf(QDialog):
|
||||||
c['minInt'] = f.lapMinInt.value()
|
c['minInt'] = f.lapMinInt.value()
|
||||||
c['leechFails'] = f.leechThreshold.value()
|
c['leechFails'] = f.leechThreshold.value()
|
||||||
c['leechAction'] = f.leechAction.currentIndex()
|
c['leechAction'] = f.leechAction.currentIndex()
|
||||||
c['relearn'] = f.lapRelearn.isChecked()
|
|
||||||
# rev
|
|
||||||
c = self.conf['rev']
|
|
||||||
c['fuzz'] = f.revSpace.value()/100.0
|
|
||||||
c['minSpace'] = f.revMinSpace.value()
|
|
||||||
c['ease4'] = f.easyBonus.value()/100.0
|
|
||||||
# cram
|
|
||||||
c = self.conf['cram']
|
|
||||||
self.updateList(c, 'delays', f.cramSteps)
|
|
||||||
c['resched'] = f.cramBoost.isChecked()
|
|
||||||
c['reset'] = f.cramReset.isChecked()
|
|
||||||
c['mult'] = f.cramMult.value()/100.0
|
|
||||||
c['minInt'] = f.cramMinInt.value()
|
|
||||||
# general
|
# general
|
||||||
c = self.conf
|
c = self.conf
|
||||||
c['maxTaken'] = f.maxTaken.value()
|
c['maxTaken'] = f.maxTaken.value()
|
||||||
# update db
|
self.mw.col.decks.save(self.conf)
|
||||||
self.mw.checkpoint(_("Group Options"))
|
|
||||||
self.mw.col.db.execute(
|
|
||||||
"update gconf set conf = ? where id = ?",
|
|
||||||
simplejson.dumps(self.conf), self.gcid)
|
|
||||||
|
|
||||||
# Managing configurations
|
|
||||||
##########################################################################
|
|
||||||
|
|
||||||
class GroupConfSelector(QDialog):
|
#make sure to save() deck and conf (on saveConf())
|
||||||
def __init__(self, mw, gids, parent=None):
|
|
||||||
QDialog.__init__(self, parent or mw)
|
|
||||||
self.mw = mw
|
|
||||||
self.gids = gids
|
|
||||||
self.form = aqt.forms.groupconfsel.Ui_Dialog()
|
|
||||||
self.form.setupUi(self)
|
|
||||||
self.connect(self.form.list, SIGNAL("itemChanged(QListWidgetItem*)"),
|
|
||||||
self.onRename)
|
|
||||||
self.defaultId = self.mw.col.db.scalar(
|
|
||||||
"select gcid from groups where id = ?", self.gids[0])
|
|
||||||
self.reload()
|
|
||||||
self.addButtons()
|
|
||||||
self.exec_()
|
|
||||||
|
|
||||||
def accept(self):
|
|
||||||
# save
|
|
||||||
self.mw.col.db.execute(
|
|
||||||
"update groups set gcid = ? where id in "+ids2str(self.gids),
|
|
||||||
self.gcid())
|
|
||||||
QDialog.accept(self)
|
|
||||||
|
|
||||||
def reject(self):
|
def reject(self):
|
||||||
self.accept()
|
self.accept()
|
||||||
|
|
||||||
def reload(self):
|
def accept(self):
|
||||||
self.confs = self.mw.col.groupConfs()
|
self.saveCollection()
|
||||||
self.form.list.clear()
|
self.saveConf()
|
||||||
deflt = None
|
self.mw.reset()
|
||||||
for c in self.confs:
|
QDialog.accept(self)
|
||||||
item = QListWidgetItem(c[0])
|
|
||||||
item.setFlags(item.flags() | Qt.ItemIsEditable)
|
|
||||||
self.form.list.addItem(item)
|
|
||||||
if c[1] == self.defaultId:
|
|
||||||
deflt = item
|
|
||||||
self.form.list.setCurrentItem(deflt)
|
|
||||||
|
|
||||||
def addButtons(self):
|
|
||||||
box = self.form.buttonBox
|
|
||||||
def button(name, func, type=QDialogButtonBox.ActionRole):
|
|
||||||
b = box.addButton(name, type)
|
|
||||||
b.connect(b, SIGNAL("clicked()"), func)
|
|
||||||
return b
|
|
||||||
button(_("Edit..."), self.onEdit).setShortcut("e")
|
|
||||||
button(_("Copy"), self.onCopy).setShortcut("c")
|
|
||||||
button(_("Delete"), self.onDelete)
|
|
||||||
|
|
||||||
def gcid(self):
|
|
||||||
return self.confs[self.form.list.currentRow()][1]
|
|
||||||
|
|
||||||
def onRename(self, item):
|
|
||||||
gcid = self.gcid()
|
|
||||||
self.mw.col.db.execute("update gconf set name = ? where id = ?",
|
|
||||||
unicode(item.text()), gcid)
|
|
||||||
|
|
||||||
def onEdit(self):
|
|
||||||
GroupConf(self.mw, self.gcid(), self)
|
|
||||||
|
|
||||||
def onCopy(self):
|
|
||||||
gcid = self.gcid()
|
|
||||||
gc = list(self.mw.col.db.first("select * from gconf where id = ?", gcid))
|
|
||||||
gc[0] = self.mw.col.nextID("gcid")
|
|
||||||
gc[2] = _("%s copy")%gc[2]
|
|
||||||
self.mw.col.db.execute("insert into gconf values (?,?,?,?)", *gc)
|
|
||||||
self.reload()
|
|
||||||
|
|
||||||
def onDelete(self):
|
|
||||||
gcid = self.gcid()
|
|
||||||
if gcid == 1:
|
|
||||||
showInfo(_("The default configuration can't be removed."), self)
|
|
||||||
else:
|
|
||||||
self.mw.checkpoint(_("Delete Group Config"))
|
|
||||||
self.mw.col.db.execute(
|
|
||||||
"update groups set gcid = 1 where gcid = ?", gcid)
|
|
||||||
self.mw.col.db.execute(
|
|
||||||
"delete from gconf where id = ?", gcid)
|
|
||||||
self.reload()
|
|
||||||
|
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
# Copyright: Damien Elmes <anki@ichi2.net>
|
|
||||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
||||||
|
|
||||||
from aqt.qt import *
|
|
||||||
import sys, re
|
|
||||||
import aqt
|
|
||||||
from aqt.utils import maybeHideClose, openHelp
|
|
||||||
|
|
||||||
class ColOptions(QDialog):
|
|
||||||
|
|
||||||
def __init__(self, mw):
|
|
||||||
QDialog.__init__(self, mw, Qt.Window)
|
|
||||||
self.mw = mw
|
|
||||||
self.d = mw.col
|
|
||||||
self.form = aqt.forms.colopts.Ui_Dialog()
|
|
||||||
self.form.setupUi(self)
|
|
||||||
self.setup()
|
|
||||||
self.exec_()
|
|
||||||
|
|
||||||
def setup(self):
|
|
||||||
self.form.buttonBox.button(QDialogButtonBox.Help).setAutoDefault(False)
|
|
||||||
self.form.buttonBox.button(QDialogButtonBox.Close).setAutoDefault(False)
|
|
||||||
self.connect(self.form.buttonBox, SIGNAL("helpRequested()"),
|
|
||||||
self.helpRequested)
|
|
||||||
maybeHideClose(self.form.buttonBox)
|
|
||||||
# syncing
|
|
||||||
self.form.doSync.setChecked(self.d.syncingEnabled())
|
|
||||||
self.form.mediaURL.setText(self.d.conf['mediaURL'])
|
|
||||||
|
|
||||||
def helpRequested(self):
|
|
||||||
openHelp("ColOptions")
|
|
||||||
|
|
||||||
def reject(self):
|
|
||||||
needSync = False
|
|
||||||
# syncing
|
|
||||||
if self.form.doSync.isChecked():
|
|
||||||
old = self.d.syncName
|
|
||||||
self.d.enableSyncing()
|
|
||||||
if self.d.syncName != old:
|
|
||||||
needSync = True
|
|
||||||
else:
|
|
||||||
self.d.disableSyncing()
|
|
||||||
url = unicode(self.form.mediaURL.text())
|
|
||||||
if url:
|
|
||||||
if not re.match("^(http|https|ftp)://", url, re.I):
|
|
||||||
url = "http://" + url
|
|
||||||
if not url.endswith("/"):
|
|
||||||
url += "/"
|
|
||||||
self.d.conf['mediaURL'] = url
|
|
||||||
QDialog.reject(self)
|
|
||||||
if needSync:
|
|
||||||
aqt.mw.syncCol(interactive=-1)
|
|
||||||
10
aqt/main.py
10
aqt/main.py
|
|
@ -48,10 +48,12 @@ class AnkiQt(QMainWindow):
|
||||||
try:
|
try:
|
||||||
self.setupUI()
|
self.setupUI()
|
||||||
self.setupAddons()
|
self.setupAddons()
|
||||||
self.setupProfile()
|
|
||||||
except:
|
except:
|
||||||
showInfo("Error during startup:\n%s" % traceback.format_exc())
|
showInfo("Error during startup:\n%s" % traceback.format_exc())
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
# Load profile in a timer so we can let the window finish init and not
|
||||||
|
# close on profile load error.
|
||||||
|
self.progress.timer(10, self.setupProfile, False)
|
||||||
|
|
||||||
def setupUI(self):
|
def setupUI(self):
|
||||||
self.col = None
|
self.col = None
|
||||||
|
|
@ -661,9 +663,9 @@ Debug info:\n%s""") % traceback.format_exc(), help="DeckErrors")
|
||||||
import aqt.stats
|
import aqt.stats
|
||||||
self.cardStats = aqt.stats.CardStats(self)
|
self.cardStats = aqt.stats.CardStats(self)
|
||||||
|
|
||||||
def onStudyOptions(self):
|
def onDeckConf(self):
|
||||||
import aqt.studyopts
|
import aqt.deckconf
|
||||||
aqt.studyopts.StudyOptions(self)
|
aqt.deckconf.DeckConf(self)
|
||||||
|
|
||||||
def onOverview(self):
|
def onOverview(self):
|
||||||
self.col.reset()
|
self.col.reset()
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ class Overview(object):
|
||||||
#self.mw.col.cramGroups()
|
#self.mw.col.cramGroups()
|
||||||
#self.mw.moveToState("review")
|
#self.mw.moveToState("review")
|
||||||
elif url == "opts":
|
elif url == "opts":
|
||||||
self.mw.onStudyOptions()
|
self.mw.onDeckConf()
|
||||||
elif url == "decks":
|
elif url == "decks":
|
||||||
self.mw.moveToState("deckBrowser")
|
self.mw.moveToState("deckBrowser")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,77 +0,0 @@
|
||||||
# Copyright: Damien Elmes <anki@ichi2.net>
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
||||||
|
|
||||||
from aqt.qt import *
|
|
||||||
import datetime, time, aqt
|
|
||||||
|
|
||||||
class StudyOptions(QDialog):
|
|
||||||
def __init__(self, mw):
|
|
||||||
QDialog.__init__(self, mw)
|
|
||||||
self.mw = mw
|
|
||||||
self.form = aqt.forms.studyopts.Ui_Dialog()
|
|
||||||
self.form.setupUi(self)
|
|
||||||
self.setWindowModality(Qt.WindowModal)
|
|
||||||
self.setup()
|
|
||||||
self.load()
|
|
||||||
self.exec_()
|
|
||||||
|
|
||||||
def setup(self):
|
|
||||||
import anki.consts as c
|
|
||||||
self.form.newOrder.insertItems(
|
|
||||||
0, c.newCardOrderLabels().values())
|
|
||||||
self.form.newSpread.insertItems(
|
|
||||||
0, c.newCardSchedulingLabels().values())
|
|
||||||
self.form.revOrder.insertItems(
|
|
||||||
0, c.revCardOrderLabels().values())
|
|
||||||
self.connect(self.form.buttonBox,
|
|
||||||
SIGNAL("helpRequested()"),
|
|
||||||
lambda: openHelp("StudyOptions"))
|
|
||||||
|
|
||||||
def load(self):
|
|
||||||
f = self.form
|
|
||||||
d = self.mw.col
|
|
||||||
qc = d.conf
|
|
||||||
f.newPerDay.setValue(qc['newPerDay'])
|
|
||||||
f.newOrder.setCurrentIndex(qc['newOrder'])
|
|
||||||
f.newSpread.setCurrentIndex(qc['newSpread'])
|
|
||||||
f.revOrder.setCurrentIndex(qc['revOrder'])
|
|
||||||
f.timeLimit.setValue(qc['timeLim']/60.0)
|
|
||||||
f.questionLimit.setValue(qc['repLim'])
|
|
||||||
self.startDate = datetime.datetime.fromtimestamp(d.crt)
|
|
||||||
f.dayOffset.setValue(self.startDate.hour)
|
|
||||||
f.lrnCutoff.setValue(qc['collapseTime']/60.0)
|
|
||||||
|
|
||||||
def reject(self):
|
|
||||||
self.accept()
|
|
||||||
|
|
||||||
def accept(self):
|
|
||||||
f = self.form
|
|
||||||
d = self.mw.col
|
|
||||||
qc = d.conf
|
|
||||||
old = qc['newOrder']
|
|
||||||
qc['newOrder'] = f.newOrder.currentIndex()
|
|
||||||
self.updateNewOrder(old, qc['newOrder'])
|
|
||||||
qc['newSpread'] = f.newSpread.currentIndex()
|
|
||||||
qc['revOrder'] = f.revOrder.currentIndex()
|
|
||||||
qc['newPerDay'] = f.newPerDay.value()
|
|
||||||
qc['timeLim'] = f.timeLimit.value()*60
|
|
||||||
qc['repLim'] = f.questionLimit.value()
|
|
||||||
qc['collapseTime'] = f.lrnCutoff.value()*60
|
|
||||||
hrs = f.dayOffset.value()
|
|
||||||
old = self.startDate
|
|
||||||
date = datetime.datetime(
|
|
||||||
old.year, old.month, old.day, hrs)
|
|
||||||
d.crt = int(time.mktime(date.timetuple()))
|
|
||||||
self.mw.reset()
|
|
||||||
QDialog.accept(self)
|
|
||||||
|
|
||||||
def updateNewOrder(self, old, new):
|
|
||||||
if old == new:
|
|
||||||
return
|
|
||||||
self.mw.progress.start()
|
|
||||||
if new == 1:
|
|
||||||
self.mw.col.sched.orderCards()
|
|
||||||
else:
|
|
||||||
self.mw.col.sched.randomizeCards()
|
|
||||||
self.mw.progress.finish()
|
|
||||||
149
designer/cram.ui
Normal file
149
designer/cram.ui
Normal file
|
|
@ -0,0 +1,149 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_22">
|
||||||
|
<property name="text">
|
||||||
|
<string>Steps (in minutes)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="cramSteps"/>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_23">
|
||||||
|
<property name="text">
|
||||||
|
<string>New interval</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="3">
|
||||||
|
<widget class="QCheckBox" name="cramReset">
|
||||||
|
<property name="text">
|
||||||
|
<string>Reset interval of cards failed during cram</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QSpinBox" name="cramMinInt">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_24">
|
||||||
|
<property name="text">
|
||||||
|
<string>Minimal interval</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="3">
|
||||||
|
<widget class="QCheckBox" name="cramBoost">
|
||||||
|
<property name="text">
|
||||||
|
<string>Boost regular interval</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QSpinBox" name="cramMult">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QLabel" name="label_29">
|
||||||
|
<property name="text">
|
||||||
|
<string>days</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLabel" name="label_30">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>%</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
|
|
@ -6,11 +6,55 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>453</width>
|
<width>500</width>
|
||||||
<height>325</height>
|
<height>437</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_31">
|
||||||
|
<property name="text">
|
||||||
|
<string>Options group:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="dconf">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>3</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="confOpts">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="icons.qrc">
|
||||||
|
<normaloff>:/icons/gears.png</normaloff>:/icons/gears.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="toolButtonStyle">
|
||||||
|
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||||
|
</property>
|
||||||
|
<property name="arrowType">
|
||||||
|
<enum>Qt::NoArrow</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
|
|
@ -24,68 +68,14 @@
|
||||||
<item>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
|
||||||
<property name="text">
|
|
||||||
<string>Graduating interval</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QSpinBox" name="lrnGradInt"/>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2">
|
|
||||||
<widget class="QLabel" name="label_7">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>days</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_5">
|
|
||||||
<property name="text">
|
|
||||||
<string>Easy</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QSpinBox" name="lrnEasyInt"/>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="2">
|
|
||||||
<widget class="QLabel" name="label_9">
|
|
||||||
<property name="text">
|
|
||||||
<string>days</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QLabel" name="label_6">
|
|
||||||
<property name="text">
|
|
||||||
<string>Easy on first sight</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
|
||||||
<widget class="QSpinBox" name="lrnFirstInt"/>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="2">
|
|
||||||
<widget class="QLabel" name="label_8">
|
<widget class="QLabel" name="label_8">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>days</string>
|
<string>Order</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="1" column="1" colspan="2">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QComboBox" name="newOrder"/>
|
||||||
<property name="text">
|
|
||||||
<string>Starting factor</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
|
|
@ -97,7 +87,56 @@
|
||||||
<item row="0" column="1" colspan="2">
|
<item row="0" column="1" colspan="2">
|
||||||
<widget class="QLineEdit" name="lrnSteps"/>
|
<widget class="QLineEdit" name="lrnSteps"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>New cards/day</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QSpinBox" name="newPerDay">
|
||||||
|
<property name="maximum">
|
||||||
|
<number>9999</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Graduating interval</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Easy</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Starting factor</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QSpinBox" name="lrnGradInt">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="4" column="1">
|
||||||
|
<widget class="QSpinBox" name="lrnEasyInt">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
<widget class="QSpinBox" name="lrnFactor">
|
<widget class="QSpinBox" name="lrnFactor">
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>130</number>
|
<number>130</number>
|
||||||
|
|
@ -110,7 +149,27 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>days</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="4" column="2">
|
<item row="4" column="2">
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
|
<property name="text">
|
||||||
|
<string>days</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="2">
|
||||||
<widget class="QLabel" name="label_27">
|
<widget class="QLabel" name="label_27">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>%</string>
|
<string>%</string>
|
||||||
|
|
@ -134,6 +193,176 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_3">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Reviews</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_15">
|
||||||
|
<property name="text">
|
||||||
|
<string>Space siblings by up to</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QSpinBox" name="revSpace">
|
||||||
|
<property name="maximum">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QLabel" name="label_18">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>%</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_16">
|
||||||
|
<property name="text">
|
||||||
|
<string>Minimum sibling range</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLabel" name="label_19">
|
||||||
|
<property name="text">
|
||||||
|
<string>days</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_20">
|
||||||
|
<property name="text">
|
||||||
|
<string>Easy bonus</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QLabel" name="label_21">
|
||||||
|
<property name="text">
|
||||||
|
<string>%</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QSpinBox" name="revMinSpace"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QSpinBox" name="easyBonus">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>1000</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" colspan="2">
|
||||||
|
<widget class="QComboBox" name="revOrder"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_32">
|
||||||
|
<property name="text">
|
||||||
|
<string>Order</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label_33">
|
||||||
|
<property name="text">
|
||||||
|
<string>Desired forgetting index</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QSpinBox" name="fi1">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>50</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="2">
|
||||||
|
<widget class="QLabel" name="label_34">
|
||||||
|
<property name="text">
|
||||||
|
<string>%</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QLabel" name="label_35">
|
||||||
|
<property name="text">
|
||||||
|
<string>Assumed forgetting index</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_37">
|
||||||
|
<property name="text">
|
||||||
|
<string>Maximum reviews/day</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QSpinBox" name="revPerDay">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>25</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>9999</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="2">
|
||||||
|
<widget class="QLabel" name="label_36">
|
||||||
|
<property name="text">
|
||||||
|
<string>%</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1">
|
||||||
|
<widget class="QSpinBox" name="fi2">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>152</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
<widget class="QWidget" name="tab_2">
|
<widget class="QWidget" name="tab_2">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Lapses</string>
|
<string>Lapses</string>
|
||||||
|
|
@ -154,14 +383,14 @@
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>New interval</string>
|
<string>New Interval</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_10">
|
<widget class="QLabel" name="label_10">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Leech threshold</string>
|
<string>Leech Threshold</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -184,14 +413,7 @@
|
||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="label_12">
|
<widget class="QLabel" name="label_12">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Leech action</string>
|
<string>Leech Action</string>
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0" colspan="3">
|
|
||||||
<widget class="QCheckBox" name="lapRelearn">
|
|
||||||
<property name="text">
|
|
||||||
<string>Automatically relearn lapsed cards</string>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -208,7 +430,7 @@
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_13">
|
<widget class="QLabel" name="label_13">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Minimum interval</string>
|
<string>Minimum Interval</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -289,209 +511,6 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="tab_3">
|
|
||||||
<attribute name="title">
|
|
||||||
<string>Reviews</string>
|
|
||||||
</attribute>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
|
||||||
<item>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label_15">
|
|
||||||
<property name="text">
|
|
||||||
<string>Space siblings by up to</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QSpinBox" name="revSpace">
|
|
||||||
<property name="maximum">
|
|
||||||
<number>100</number>
|
|
||||||
</property>
|
|
||||||
<property name="singleStep">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="2">
|
|
||||||
<widget class="QLabel" name="label_18">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>%</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLabel" name="label_16">
|
|
||||||
<property name="text">
|
|
||||||
<string>Minimum sibling range</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2">
|
|
||||||
<widget class="QLabel" name="label_19">
|
|
||||||
<property name="text">
|
|
||||||
<string>days</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_20">
|
|
||||||
<property name="text">
|
|
||||||
<string>Easy bonus</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="2">
|
|
||||||
<widget class="QLabel" name="label_21">
|
|
||||||
<property name="text">
|
|
||||||
<string>%</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QSpinBox" name="revMinSpace"/>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QSpinBox" name="easyBonus">
|
|
||||||
<property name="minimum">
|
|
||||||
<number>100</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>1000</number>
|
|
||||||
</property>
|
|
||||||
<property name="singleStep">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer_3">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>152</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="tab_4">
|
|
||||||
<attribute name="title">
|
|
||||||
<string>Cramming</string>
|
|
||||||
</attribute>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
|
||||||
<item>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label_22">
|
|
||||||
<property name="text">
|
|
||||||
<string>Steps (in minutes)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1" colspan="2">
|
|
||||||
<widget class="QLineEdit" name="cramSteps"/>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QLabel" name="label_23">
|
|
||||||
<property name="text">
|
|
||||||
<string>New interval</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0" colspan="3">
|
|
||||||
<widget class="QCheckBox" name="cramReset">
|
|
||||||
<property name="text">
|
|
||||||
<string>Reset interval of cards failed during cram</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="1">
|
|
||||||
<widget class="QSpinBox" name="cramMinInt">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="label_24">
|
|
||||||
<property name="text">
|
|
||||||
<string>Minimal interval</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="3">
|
|
||||||
<widget class="QCheckBox" name="cramBoost">
|
|
||||||
<property name="text">
|
|
||||||
<string>Boost regular interval</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
|
||||||
<widget class="QSpinBox" name="cramMult">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>100</number>
|
|
||||||
</property>
|
|
||||||
<property name="singleStep">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="2">
|
|
||||||
<widget class="QLabel" name="label_29">
|
|
||||||
<property name="text">
|
|
||||||
<string>days</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="2">
|
|
||||||
<widget class="QLabel" name="label_30">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>%</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer_4">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>93</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="tab_5">
|
<widget class="QWidget" name="tab_5">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>General</string>
|
<string>General</string>
|
||||||
|
|
@ -528,6 +547,92 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_22">
|
||||||
|
<property name="text">
|
||||||
|
<string><b>Collection Options</b><br>The settings below are shared between all decks.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="newSpread"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_23">
|
||||||
|
<property name="text">
|
||||||
|
<string>Next day starts at</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QSpinBox" name="dayOffset">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>60</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>23</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_24">
|
||||||
|
<property name="text">
|
||||||
|
<string>Learn ahead limit</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QSpinBox" name="lrnCutoff">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>60</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QLabel" name="label_29">
|
||||||
|
<property name="text">
|
||||||
|
<string>mins</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_30">
|
||||||
|
<property name="text">
|
||||||
|
<string>Timebox time limit</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QSpinBox" name="timeLimit">
|
||||||
|
<property name="maximum">
|
||||||
|
<number>9999</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QLabel" name="label_39">
|
||||||
|
<property name="text">
|
||||||
|
<string>mins</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QLabel" name="label_40">
|
||||||
|
<property name="text">
|
||||||
|
<string>hours past midnight</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer_5">
|
<spacer name="verticalSpacer_5">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
|
@ -558,30 +663,37 @@
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
|
<tabstop>dconf</tabstop>
|
||||||
|
<tabstop>confOpts</tabstop>
|
||||||
<tabstop>tabWidget</tabstop>
|
<tabstop>tabWidget</tabstop>
|
||||||
<tabstop>lrnSteps</tabstop>
|
<tabstop>lrnSteps</tabstop>
|
||||||
|
<tabstop>newOrder</tabstop>
|
||||||
|
<tabstop>newPerDay</tabstop>
|
||||||
<tabstop>lrnGradInt</tabstop>
|
<tabstop>lrnGradInt</tabstop>
|
||||||
<tabstop>lrnEasyInt</tabstop>
|
<tabstop>lrnEasyInt</tabstop>
|
||||||
<tabstop>lrnFirstInt</tabstop>
|
|
||||||
<tabstop>lrnFactor</tabstop>
|
<tabstop>lrnFactor</tabstop>
|
||||||
|
<tabstop>revOrder</tabstop>
|
||||||
|
<tabstop>revPerDay</tabstop>
|
||||||
|
<tabstop>revSpace</tabstop>
|
||||||
|
<tabstop>revMinSpace</tabstop>
|
||||||
|
<tabstop>easyBonus</tabstop>
|
||||||
|
<tabstop>fi1</tabstop>
|
||||||
|
<tabstop>fi2</tabstop>
|
||||||
<tabstop>lapSteps</tabstop>
|
<tabstop>lapSteps</tabstop>
|
||||||
<tabstop>lapMult</tabstop>
|
<tabstop>lapMult</tabstop>
|
||||||
<tabstop>lapMinInt</tabstop>
|
<tabstop>lapMinInt</tabstop>
|
||||||
<tabstop>leechThreshold</tabstop>
|
<tabstop>leechThreshold</tabstop>
|
||||||
<tabstop>leechAction</tabstop>
|
<tabstop>leechAction</tabstop>
|
||||||
<tabstop>lapRelearn</tabstop>
|
|
||||||
<tabstop>revSpace</tabstop>
|
|
||||||
<tabstop>revMinSpace</tabstop>
|
|
||||||
<tabstop>easyBonus</tabstop>
|
|
||||||
<tabstop>cramSteps</tabstop>
|
|
||||||
<tabstop>cramBoost</tabstop>
|
|
||||||
<tabstop>cramReset</tabstop>
|
|
||||||
<tabstop>cramMult</tabstop>
|
|
||||||
<tabstop>cramMinInt</tabstop>
|
|
||||||
<tabstop>maxTaken</tabstop>
|
<tabstop>maxTaken</tabstop>
|
||||||
|
<tabstop>newSpread</tabstop>
|
||||||
|
<tabstop>dayOffset</tabstop>
|
||||||
|
<tabstop>lrnCutoff</tabstop>
|
||||||
|
<tabstop>timeLimit</tabstop>
|
||||||
<tabstop>buttonBox</tabstop>
|
<tabstop>buttonBox</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources/>
|
<resources>
|
||||||
|
<include location="icons.qrc"/>
|
||||||
|
</resources>
|
||||||
<connections>
|
<connections>
|
||||||
<connection>
|
<connection>
|
||||||
<sender>buttonBox</sender>
|
<sender>buttonBox</sender>
|
||||||
|
|
@ -615,37 +727,5 @@
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
<connection>
|
|
||||||
<sender>cramReset</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>cramMult</receiver>
|
|
||||||
<slot>setEnabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>96</x>
|
|
||||||
<y>103</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>187</x>
|
|
||||||
<y>133</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>cramReset</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>cramMinInt</receiver>
|
|
||||||
<slot>setEnabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>138</x>
|
|
||||||
<y>103</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>187</x>
|
|
||||||
<y>168</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
</connections>
|
||||||
</ui>
|
</ui>
|
||||||
|
|
|
||||||
|
|
@ -1,222 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>Dialog</class>
|
|
||||||
<widget class="QDialog" name="Dialog">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>382</width>
|
|
||||||
<height>319</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Study Options</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
||||||
<item>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Next day starts at</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="1">
|
|
||||||
<widget class="QSpinBox" name="dayOffset">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>60</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>23</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0">
|
|
||||||
<widget class="QLabel" name="label_4">
|
|
||||||
<property name="text">
|
|
||||||
<string>Learn ahead limit</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="1">
|
|
||||||
<widget class="QSpinBox" name="lrnCutoff">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>60</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="2">
|
|
||||||
<widget class="QLabel" name="label_5">
|
|
||||||
<property name="text">
|
|
||||||
<string>mins</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>New cards/day</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QSpinBox" name="newPerDay">
|
|
||||||
<property name="maximum">
|
|
||||||
<number>999</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="3">
|
|
||||||
<widget class="QComboBox" name="newOrder"/>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0" colspan="3">
|
|
||||||
<widget class="QComboBox" name="newSpread"/>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0" colspan="3">
|
|
||||||
<widget class="QComboBox" name="revOrder"/>
|
|
||||||
</item>
|
|
||||||
<item row="6" column="0">
|
|
||||||
<widget class="QLabel" name="label_6">
|
|
||||||
<property name="text">
|
|
||||||
<string>Timebox question limit</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="0">
|
|
||||||
<widget class="QLabel" name="label_7">
|
|
||||||
<property name="text">
|
|
||||||
<string>Timebox time limit</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="6" column="1">
|
|
||||||
<widget class="QSpinBox" name="questionLimit">
|
|
||||||
<property name="maximum">
|
|
||||||
<number>9999</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="1">
|
|
||||||
<widget class="QSpinBox" name="timeLimit">
|
|
||||||
<property name="maximum">
|
|
||||||
<number>9999</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="2">
|
|
||||||
<widget class="QLabel" name="label_8">
|
|
||||||
<property name="text">
|
|
||||||
<string>mins</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="8" column="0">
|
|
||||||
<spacer name="verticalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,5">
|
|
||||||
<item>
|
|
||||||
<widget class="QDialogButtonBox" name="buttonBox">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="standardButtons">
|
|
||||||
<set>QDialogButtonBox::Close|QDialogButtonBox::Help</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer_2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>More study options are available in the group settings.</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<tabstops>
|
|
||||||
<tabstop>newPerDay</tabstop>
|
|
||||||
<tabstop>newOrder</tabstop>
|
|
||||||
<tabstop>newSpread</tabstop>
|
|
||||||
<tabstop>revOrder</tabstop>
|
|
||||||
<tabstop>dayOffset</tabstop>
|
|
||||||
<tabstop>lrnCutoff</tabstop>
|
|
||||||
<tabstop>questionLimit</tabstop>
|
|
||||||
<tabstop>timeLimit</tabstop>
|
|
||||||
<tabstop>buttonBox</tabstop>
|
|
||||||
</tabstops>
|
|
||||||
<resources/>
|
|
||||||
<connections>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>accepted()</signal>
|
|
||||||
<receiver>Dialog</receiver>
|
|
||||||
<slot>accept()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>248</x>
|
|
||||||
<y>254</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>157</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>rejected()</signal>
|
|
||||||
<receiver>Dialog</receiver>
|
|
||||||
<slot>reject()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>316</x>
|
|
||||||
<y>260</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>286</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
|
||||||
</ui>
|
|
||||||
Loading…
Reference in a new issue