mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
add new study options
This commit is contained in:
parent
6b0e51dc74
commit
a036b97a68
7 changed files with 807 additions and 369 deletions
39
aqt/groupconf.py
Normal file
39
aqt/groupconf.py
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# Copyright: Damien Elmes <anki@ichi2.net>
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html
|
||||||
|
|
||||||
|
from PyQt4.QtCore import *
|
||||||
|
from PyQt4.QtGui import *
|
||||||
|
import aqt
|
||||||
|
|
||||||
|
class GroupConf(QDialog):
|
||||||
|
def __init__(self, mw):
|
||||||
|
QDialog.__init__(self, mw)
|
||||||
|
self.mw = mw
|
||||||
|
self.form = aqt.forms.groupconf.Ui_Dialog()
|
||||||
|
self.form.setupUi(self)
|
||||||
|
self.setupNew()
|
||||||
|
self.setupLapse()
|
||||||
|
self.setupRev()
|
||||||
|
self.setupCram()
|
||||||
|
self.setupGeneral()
|
||||||
|
self.connect(self.form.optionsHelpButton,
|
||||||
|
SIGNAL("clicked()"),
|
||||||
|
lambda: QDesktopServices.openUrl(QUrl(
|
||||||
|
aqt.appWiki + "StudyOptions")))
|
||||||
|
self.exec_()
|
||||||
|
|
||||||
|
def setupNew(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def setupLapse(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def setupRev(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def setupCram(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def setupGeneral(self):
|
||||||
|
pass
|
|
@ -17,7 +17,7 @@ from anki.utils import addTags, parseTags, canonifyTags, stripHTML, checksum
|
||||||
from anki.hooks import runHook, addHook, removeHook
|
from anki.hooks import runHook, addHook, removeHook
|
||||||
import anki.consts
|
import anki.consts
|
||||||
|
|
||||||
import aqt, aqt.facteditor, aqt.progress, aqt.webview, aqt.stats
|
import aqt, aqt.facteditor, aqt.progress, aqt.webview, aqt.stats, aqt.studyopts
|
||||||
from aqt.utils import saveGeom, restoreGeom, showInfo, showWarning, \
|
from aqt.utils import saveGeom, restoreGeom, showInfo, showWarning, \
|
||||||
saveState, restoreState, getOnlyText, askUser, GetTextDialog, \
|
saveState, restoreState, getOnlyText, askUser, GetTextDialog, \
|
||||||
askUserDialog, applyStyles, getText, showText, showCritical
|
askUserDialog, applyStyles, getText, showText, showCritical
|
||||||
|
@ -647,6 +647,9 @@ Debug info:\n%s""") % traceback.format_exc(), help="DeckErrors")
|
||||||
def setupCardStats(self):
|
def setupCardStats(self):
|
||||||
self.cardStats = aqt.stats.CardStats(self)
|
self.cardStats = aqt.stats.CardStats(self)
|
||||||
|
|
||||||
|
def onStudyOptions(self):
|
||||||
|
aqt.studyopts.StudyOptions(self)
|
||||||
|
|
||||||
def onCardStats(self):
|
def onCardStats(self):
|
||||||
self.cardStats.show()
|
self.cardStats.show()
|
||||||
|
|
||||||
|
@ -783,7 +786,7 @@ Please give your deck a name:"""))
|
||||||
self.connect(m.actionCheckMediaDatabase, s, self.onCheckMediaDB)
|
self.connect(m.actionCheckMediaDatabase, s, self.onCheckMediaDB)
|
||||||
self.connect(m.actionDownloadMissingMedia, s, self.onDownloadMissingMedia)
|
self.connect(m.actionDownloadMissingMedia, s, self.onDownloadMissingMedia)
|
||||||
self.connect(m.actionLocalizeMedia, s, self.onLocalizeMedia)
|
self.connect(m.actionLocalizeMedia, s, self.onLocalizeMedia)
|
||||||
#self.connect(m.actionStudyOptions, s, self.onStudyOptions)
|
self.connect(m.actionStudyOptions, s, self.onStudyOptions)
|
||||||
self.connect(m.actionDonate, s, self.onDonate)
|
self.connect(m.actionDonate, s, self.onDonate)
|
||||||
self.connect(m.actionBuryFact, s, self.onBuryFact)
|
self.connect(m.actionBuryFact, s, self.onBuryFact)
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ class Overview(object):
|
||||||
self.mw.deck.cramGroups(self.mw.deck.qconf['revGroups'])
|
self.mw.deck.cramGroups(self.mw.deck.qconf['revGroups'])
|
||||||
self.mw.moveToState("review")
|
self.mw.moveToState("review")
|
||||||
elif url == "opts":
|
elif url == "opts":
|
||||||
print "study options"
|
self.mw.onStudyOptions()
|
||||||
elif url == "list":
|
elif url == "list":
|
||||||
self.mw.close()
|
self.mw.close()
|
||||||
elif url == "chgrp":
|
elif url == "chgrp":
|
||||||
|
|
343
aqt/studyopts.py
343
aqt/studyopts.py
|
@ -1,284 +1,75 @@
|
||||||
|
# Copyright: Damien Elmes <anki@ichi2.net>
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html
|
||||||
|
|
||||||
def _studyScreenState(self, oldState):
|
from PyQt4.QtCore import *
|
||||||
self.currentCard = None
|
from PyQt4.QtGui import *
|
||||||
# if self.deck.finishScheduler:
|
import datetime, time, aqt
|
||||||
# self.deck.finishScheduler()
|
|
||||||
self.disableCardMenuItems()
|
|
||||||
self.showStudyScreen()
|
|
||||||
|
|
||||||
# Study screen
|
class StudyOptions(QDialog):
|
||||||
##########################################################################
|
def __init__(self, mw):
|
||||||
|
QDialog.__init__(self, mw)
|
||||||
def setupStudyScreen(self):
|
self.mw = mw
|
||||||
return
|
self.form = aqt.forms.studyopts.Ui_Dialog()
|
||||||
self.form.buttonStack.hide()
|
self.form.setupUi(self)
|
||||||
self.form.newCardOrder.insertItems(
|
self.setup()
|
||||||
0, QStringList(anki.consts.newCardOrderLabels().values()))
|
self.load()
|
||||||
self.form.newCardScheduling.insertItems(
|
self.connect(self.form.buttonBox,
|
||||||
0, QStringList(anki.consts.newCardSchedulingLabels().values()))
|
SIGNAL("helpRequested()"),
|
||||||
self.form.revCardOrder.insertItems(
|
|
||||||
0, QStringList(anki.consts.revCardOrderLabels().values()))
|
|
||||||
self.connect(self.form.optionsHelpButton,
|
|
||||||
SIGNAL("clicked()"),
|
|
||||||
lambda: QDesktopServices.openUrl(QUrl(
|
lambda: QDesktopServices.openUrl(QUrl(
|
||||||
aqt.appWiki + "StudyOptions")))
|
aqt.appWiki + "StudyOptions")))
|
||||||
self.connect(self.form.minuteLimit,
|
self.exec_()
|
||||||
SIGNAL("textChanged(QString)"), self.onMinuteLimitChanged)
|
|
||||||
self.connect(self.form.questionLimit,
|
|
||||||
SIGNAL("textChanged(QString)"), self.onQuestionLimitChanged)
|
|
||||||
self.connect(self.form.newPerDay,
|
|
||||||
SIGNAL("textChanged(QString)"), self.onNewLimitChanged)
|
|
||||||
self.connect(self.form.startReviewingButton,
|
|
||||||
SIGNAL("clicked()"),
|
|
||||||
self.onStartReview)
|
|
||||||
self.connect(self.form.newCardOrder,
|
|
||||||
SIGNAL("activated(int)"), self.onNewCardOrderChanged)
|
|
||||||
self.connect(self.form.failedCardMax,
|
|
||||||
SIGNAL("editingFinished()"),
|
|
||||||
self.onFailedMaxChanged)
|
|
||||||
self.connect(self.form.newCategories,
|
|
||||||
SIGNAL("clicked()"), self.onNewCategoriesClicked)
|
|
||||||
self.connect(self.form.revCategories,
|
|
||||||
SIGNAL("clicked()"), self.onRevCategoriesClicked)
|
|
||||||
self.form.tabWidget.setCurrentIndex(self.config['studyOptionsTab'])
|
|
||||||
|
|
||||||
def onNewCategoriesClicked(self):
|
def setup(self):
|
||||||
aqt.activetags.show(self, "new")
|
import anki.consts as c
|
||||||
|
self.form.newOrder.insertItems(
|
||||||
|
0, QStringList(c.newCardOrderLabels().values()))
|
||||||
|
self.form.newSpread.insertItems(
|
||||||
|
0, QStringList(c.newCardSchedulingLabels().values()))
|
||||||
|
self.form.revOrder.insertItems(
|
||||||
|
0, QStringList(c.revCardOrderLabels().values()))
|
||||||
|
|
||||||
def onRevCategoriesClicked(self):
|
def load(self):
|
||||||
aqt.activetags.show(self, "rev")
|
f = self.form
|
||||||
|
d = self.mw.deck
|
||||||
|
qc = d.qconf
|
||||||
|
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 onFailedMaxChanged(self):
|
def accept(self):
|
||||||
try:
|
f = self.form
|
||||||
v = int(self.form.failedCardMax.text())
|
d = self.mw.deck
|
||||||
if v == 1 or v < 0:
|
qc = d.qconf
|
||||||
v = 2
|
old = qc['newOrder']
|
||||||
self.deck.failedCardMax = v
|
qc['newOrder'] = f.newOrder.currentIndex()
|
||||||
except ValueError:
|
self.updateNewOrder(old, qc['newOrder'])
|
||||||
pass
|
qc['newSpread'] = f.newSpread.currentIndex()
|
||||||
self.form.failedCardMax.setText(str(self.deck.failedCardMax))
|
qc['revOrder'] = f.revOrder.currentIndex()
|
||||||
self.deck.flushMod()
|
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 onMinuteLimitChanged(self, qstr):
|
def updateNewOrder(self, old, new):
|
||||||
try:
|
if old == new:
|
||||||
val = float(self.form.minuteLimit.text()) * 60
|
return
|
||||||
if self.deck.sessionTimeLimit == val:
|
self.mw.progress.start()
|
||||||
return
|
if new == 1:
|
||||||
self.deck.sessionTimeLimit = val
|
self.deck.orderNewCards()
|
||||||
except ValueError:
|
else:
|
||||||
pass
|
|
||||||
self.deck.flushMod()
|
|
||||||
self.updateStudyStats()
|
|
||||||
|
|
||||||
def onQuestionLimitChanged(self, qstr):
|
|
||||||
try:
|
|
||||||
val = int(self.form.questionLimit.text())
|
|
||||||
if self.deck.sessionRepLimit == val:
|
|
||||||
return
|
|
||||||
self.deck.sessionRepLimit = val
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
self.deck.flushMod()
|
|
||||||
self.updateStudyStats()
|
|
||||||
|
|
||||||
def onNewLimitChanged(self, qstr):
|
|
||||||
try:
|
|
||||||
val = int(self.form.newPerDay.text())
|
|
||||||
if self.deck.newCardsPerDay == val:
|
|
||||||
return
|
|
||||||
self.deck.newCardsPerDay = val
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
self.deck.flushMod()
|
|
||||||
self.deck.reset()
|
|
||||||
self.statusView.redraw()
|
|
||||||
self.updateStudyStats()
|
|
||||||
|
|
||||||
def onNewCardOrderChanged(self, ncOrd):
|
|
||||||
def uf(obj, field, value):
|
|
||||||
if getattr(obj, field) != value:
|
|
||||||
setattr(obj, field, value)
|
|
||||||
self.deck.flushMod()
|
|
||||||
if ncOrd != 0:
|
|
||||||
if self.deck.newCardOrder == 0:
|
|
||||||
# need to put back in order
|
|
||||||
self.mw.startProgress()
|
|
||||||
self.mw.updateProgress(_("Ordering..."))
|
|
||||||
self.deck.orderNewCards()
|
|
||||||
self.deck.finishProgress()
|
|
||||||
uf(self.deck, 'newCardOrder', ncOrd)
|
|
||||||
elif ncOrd == 0:
|
|
||||||
# (re-)randomize
|
|
||||||
self.deck.startProgress()
|
|
||||||
self.deck.updateProgress(_("Randomizing..."))
|
|
||||||
self.deck.randomizeNewCards()
|
self.deck.randomizeNewCards()
|
||||||
self.deck.finishProgress()
|
self.mw.progress.finish()
|
||||||
uf(self.deck, 'newCardOrder', ncOrd)
|
|
||||||
|
|
||||||
def updateActives(self):
|
|
||||||
labels = [
|
|
||||||
_("Show All Due Cards"),
|
|
||||||
_("Show Chosen Categories")
|
|
||||||
]
|
|
||||||
if self.deck.getVar("newActive") or self.deck.getVar("newInactive"):
|
|
||||||
new = labels[1]
|
|
||||||
else:
|
|
||||||
new = labels[0]
|
|
||||||
self.form.newCategoryLabel.setText(new)
|
|
||||||
if self.deck.getVar("revActive") or self.deck.getVar("revInactive"):
|
|
||||||
rev = labels[1]
|
|
||||||
else:
|
|
||||||
rev = labels[0]
|
|
||||||
self.form.revCategoryLabel.setText(rev)
|
|
||||||
|
|
||||||
def updateStudyStats(self):
|
|
||||||
self.form.buttonStack.hide()
|
|
||||||
self.deck.reset()
|
|
||||||
self.updateActives()
|
|
||||||
wasReached = self.deck.timeboxReached()
|
|
||||||
sessionColour = '<font color=#0000ff>%s</font>'
|
|
||||||
cardColour = '<font color=#0000ff>%s</font>'
|
|
||||||
# top label
|
|
||||||
h = {}
|
|
||||||
h['ret'] = cardColour % (self.deck.revCount+self.deck.failedSoonCount)
|
|
||||||
h['new'] = cardColour % self.deck.newCount
|
|
||||||
h['newof'] = str(self.deck.newCountAll())
|
|
||||||
# counts & time for today
|
|
||||||
todayStart = self.deck.failedCutoff - 86400
|
|
||||||
sql = "select count(), sum(userTime) from revlog"
|
|
||||||
(reps, time_) = self.deck.db.first(
|
|
||||||
sql + " where time > :start", start=todayStart)
|
|
||||||
h['timeToday'] = sessionColour % (
|
|
||||||
anki.utils.fmtTimeSpan(time_ or 0, short=True, point=1))
|
|
||||||
h['repsToday'] = sessionColour % reps
|
|
||||||
# and yesterday
|
|
||||||
yestStart = todayStart - 86400
|
|
||||||
(reps, time_) = self.deck.db.first(
|
|
||||||
sql + " where time > :start and time <= :end",
|
|
||||||
start=yestStart, end=todayStart)
|
|
||||||
h['timeTodayChg'] = str(
|
|
||||||
anki.utils.fmtTimeSpan(time_ or 0, short=True, point=1))
|
|
||||||
h['repsTodayChg'] = str(reps)
|
|
||||||
# session counts
|
|
||||||
limit = self.deck.sessionTimeLimit
|
|
||||||
start = self.deck.sessionStartTime or time.time() - limit
|
|
||||||
start2 = self.deck.lastSessionStart or start - limit
|
|
||||||
last10 = self.deck.db.scalar(
|
|
||||||
"select count(*) from revlog where time >= :t",
|
|
||||||
t=start)
|
|
||||||
last20 = self.deck.db.scalar(
|
|
||||||
"select count(*) from revlog where "
|
|
||||||
"time >= :t and time < :t2",
|
|
||||||
t=start2, t2=start)
|
|
||||||
h['repsInSes'] = sessionColour % last10
|
|
||||||
h['repsInSesChg'] = str(last20)
|
|
||||||
h['cs_header'] = "<b>" + _("Cards/session:") + "</b>"
|
|
||||||
h['cd_header'] = "<b>" + _("Cards/day:") + "</b>"
|
|
||||||
h['td_header'] = "<b>" + _("Time/day:") + "</b>"
|
|
||||||
h['rd_header'] = "<b>" + _("Reviews due:") + "</b>"
|
|
||||||
h['ntod_header'] = "<b>" + _("New today:") + "</b>"
|
|
||||||
h['ntot_header'] = "<b>" + _("New total:") + "</b>"
|
|
||||||
stats1 = ("""\
|
|
||||||
<table>
|
|
||||||
<tr><td width=150>%(cs_header)s</td><td width=50><b>%(repsInSesChg)s</b></td>
|
|
||||||
<td><b>%(repsInSes)s</b></td></tr></table>
|
|
||||||
<hr>
|
|
||||||
<table>
|
|
||||||
<tr><td width=150>
|
|
||||||
%(cd_header)s</td><td width=50><b>%(repsTodayChg)s</b></td>
|
|
||||||
<td><b>%(repsToday)s</b></td></tr>
|
|
||||||
<tr><td>%(td_header)s</td><td><b>%(timeTodayChg)s</b></td>
|
|
||||||
<td><b>%(timeToday)s</b></td></tr>
|
|
||||||
</table>""") % h
|
|
||||||
|
|
||||||
stats2 = ("""\
|
|
||||||
<table>
|
|
||||||
<tr><td width=180>%(rd_header)s</td><td align=right><b>%(ret)s</b></td></tr>
|
|
||||||
<tr><td>%(ntod_header)s</td><td align=right><b>%(new)s</b></td></tr>
|
|
||||||
<tr><td>%(ntot_header)s</td><td align=right>%(newof)s</td></tr>
|
|
||||||
</table>""") % h
|
|
||||||
self.form.optionsLabel.setText("""\
|
|
||||||
<p><table><tr>
|
|
||||||
%s
|
|
||||||
</tr><tr>
|
|
||||||
<td><hr>%s<hr></td></tr></table>""" % (stats1, stats2))
|
|
||||||
h['tt_header'] = _("Session Statistics")
|
|
||||||
h['cs_tip'] = _("The number of cards you studied in the current \
|
|
||||||
session (blue) and previous session (black)")
|
|
||||||
h['cd_tip'] = _("The number of cards you studied today (blue) and \
|
|
||||||
yesterday (black)")
|
|
||||||
h['td_tip'] = _("The number of minutes you studied today (blue) and \
|
|
||||||
yesterday (black)")
|
|
||||||
h['rd_tip'] = _("The number of cards that are waiting to be reviewed \
|
|
||||||
today")
|
|
||||||
h['ntod_tip'] = _("The number of new cards that are waiting to be \
|
|
||||||
learnt today")
|
|
||||||
h['ntot_tip'] = _("The total number of new cards in the deck")
|
|
||||||
statToolTip = ("""<h1>%(tt_header)s</h1>
|
|
||||||
<dl><dt><b>%(cs_header)s</b></dt><dd>%(cs_tip)s</dd></dl>
|
|
||||||
<dl><dt><b>%(cd_header)s</b></dt><dd>%(cd_tip)s</dd></dl>
|
|
||||||
<dl><dt><b>%(td_header)s</b></dt><dd>%(td_tip)s</dd></dl>
|
|
||||||
<dl><dt><b>%(rd_header)s</b></dt><dd>%(rd_tip)s</dd></dl>
|
|
||||||
<dl><dt><b>%(ntod_header)s</b></dt><dd>%(ntod_tip)s</dd></dl>
|
|
||||||
<dl><dt><b>%(ntot_header)s</b></dt><dd>%(ntot_tip)s<</dd></dl>""") % h
|
|
||||||
|
|
||||||
self.form.optionsLabel.setToolTip(statToolTip)
|
|
||||||
|
|
||||||
def showStudyScreen(self):
|
|
||||||
# forget last card
|
|
||||||
self.lastCard = None
|
|
||||||
self.switchToStudyScreen()
|
|
||||||
self.updateStudyStats()
|
|
||||||
self.form.startReviewingButton.setFocus()
|
|
||||||
self.setupStudyOptions()
|
|
||||||
self.form.studyOptionsFrame.setMaximumWidth(500)
|
|
||||||
self.form.studyOptionsFrame.show()
|
|
||||||
|
|
||||||
def setupStudyOptions(self):
|
|
||||||
self.form.newPerDay.setText(str(self.deck.newCardsPerDay))
|
|
||||||
lim = self.deck.sessionTimeLimit/60
|
|
||||||
if int(lim) == lim:
|
|
||||||
lim = int(lim)
|
|
||||||
self.form.minuteLimit.setText(str(lim))
|
|
||||||
self.form.questionLimit.setText(str(self.deck.sessionRepLimit))
|
|
||||||
self.form.newCardOrder.setCurrentIndex(self.deck.newCardOrder)
|
|
||||||
self.form.newCardScheduling.setCurrentIndex(self.deck.newCardSpacing)
|
|
||||||
self.form.revCardOrder.setCurrentIndex(self.deck.revCardOrder)
|
|
||||||
self.form.failedCardsOption.clear()
|
|
||||||
if self.deck.getFailedCardPolicy() == 5:
|
|
||||||
labels = failedCardOptionLabels().values()
|
|
||||||
else:
|
|
||||||
labels = failedCardOptionLabels().values()[0:-1]
|
|
||||||
self.form.failedCardsOption.insertItems(0, labels)
|
|
||||||
self.form.failedCardsOption.setCurrentIndex(self.deck.getFailedCardPolicy())
|
|
||||||
self.form.failedCardMax.setText(unicode(self.deck.failedCardMax))
|
|
||||||
|
|
||||||
def onStartReview(self):
|
|
||||||
def uf(obj, field, value):
|
|
||||||
if getattr(obj, field) != value:
|
|
||||||
setattr(obj, field, value)
|
|
||||||
self.deck.flushMod()
|
|
||||||
self.form.studyOptionsFrame.hide()
|
|
||||||
# make sure the size is updated before button stack shown
|
|
||||||
self.app.processEvents()
|
|
||||||
uf(self.deck, 'newCardSpacing',
|
|
||||||
self.form.newCardScheduling.currentIndex())
|
|
||||||
uf(self.deck, 'revCardOrder',
|
|
||||||
self.form.revCardOrder.currentIndex())
|
|
||||||
pol = self.deck.getFailedCardPolicy()
|
|
||||||
if (pol != 5 and pol !=
|
|
||||||
self.form.failedCardsOption.currentIndex()):
|
|
||||||
self.deck.setFailedCardPolicy(
|
|
||||||
self.form.failedCardsOption.currentIndex())
|
|
||||||
self.deck.flushMod()
|
|
||||||
self.deck.reset()
|
|
||||||
if not self.deck.finishScheduler:
|
|
||||||
self.deck.startTimebox()
|
|
||||||
self.config['studyOptionsTab'] = self.form.tabWidget.currentIndex()
|
|
||||||
self.moveToState("getQuestion")
|
|
||||||
|
|
||||||
def onStudyOptions(self):
|
|
||||||
if self.state == "studyScreen":
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
self.moveToState("studyScreen")
|
|
||||||
|
|
554
designer/groupconf.ui
Normal file
554
designer/groupconf.ui
Normal file
|
@ -0,0 +1,554 @@
|
||||||
|
<?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>453</width>
|
||||||
|
<height>325</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="tab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>New Cards</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<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">
|
||||||
|
<property name="text">
|
||||||
|
<string>days</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Starting factor</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="lrnFactor"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Steps (in minutes)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="lrnSteps"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<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>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_2">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Lapses</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_17">
|
||||||
|
<property name="text">
|
||||||
|
<string>Steps (in minutes)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="lapSteps"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Interval multiplier</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="lapMult">
|
||||||
|
<property name="maximum">
|
||||||
|
<double>1.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.050000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_10">
|
||||||
|
<property name="text">
|
||||||
|
<string>Leech threshold</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QSpinBox" name="leechThreshold"/>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLabel" name="label_11">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>lapses</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_12">
|
||||||
|
<property name="text">
|
||||||
|
<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>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QSpinBox" name="lapMinInt">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>99</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_13">
|
||||||
|
<property name="text">
|
||||||
|
<string>Minimum interval</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QLabel" name="label_14">
|
||||||
|
<property name="text">
|
||||||
|
<string>days</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1" colspan="2">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="leechAction">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Suspend Card</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Tag Only</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>72</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</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"/>
|
||||||
|
</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>x</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QSpinBox" name="easyBonus">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QSpinBox" name="revMinSpace"/>
|
||||||
|
</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>Lapse interval multiplier</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="cramMult">
|
||||||
|
<property name="maximum">
|
||||||
|
<double>1.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.050000000000000</double>
|
||||||
|
</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="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="2">
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</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">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>General</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_25">
|
||||||
|
<property name="text">
|
||||||
|
<string>Ignore answer times longer than</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QSpinBox" name="maxTaken"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QLabel" name="label_26">
|
||||||
|
<property name="text">
|
||||||
|
<string>seconds</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_5">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>199</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</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>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>tabWidget</tabstop>
|
||||||
|
<tabstop>lrnSteps</tabstop>
|
||||||
|
<tabstop>lrnGradInt</tabstop>
|
||||||
|
<tabstop>lrnEasyInt</tabstop>
|
||||||
|
<tabstop>lrnFirstInt</tabstop>
|
||||||
|
<tabstop>lrnFactor</tabstop>
|
||||||
|
<tabstop>lapSteps</tabstop>
|
||||||
|
<tabstop>lapMult</tabstop>
|
||||||
|
<tabstop>lapMinInt</tabstop>
|
||||||
|
<tabstop>leechThreshold</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>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>
|
|
@ -6,117 +6,168 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>279</width>
|
<width>435</width>
|
||||||
<height>271</height>
|
<height>334</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Dialog</string>
|
<string>Dialog</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item row="4" column="0">
|
<item>
|
||||||
<widget class="QLabel" name="label_2">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<property name="text">
|
<item row="4" column="0">
|
||||||
<string>Next day starts at</string>
|
<widget class="QLabel" name="label_2">
|
||||||
</property>
|
<property name="text">
|
||||||
</widget>
|
<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>
|
||||||
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item>
|
||||||
<widget class="QSpinBox" name="dayOffset">
|
<spacer name="verticalSpacer">
|
||||||
<property name="maximumSize">
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
<width>60</width>
|
<width>20</width>
|
||||||
<height>16777215</height>
|
<height>40</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="2">
|
<item>
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QPushButton" name="groupSettings">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>AM</string>
|
<string>Group Settings...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
|
||||||
<widget class="QLabel" name="label_4">
|
|
||||||
<property name="text">
|
|
||||||
<string>Collapse learning by up to</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"/>
|
|
||||||
</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>
|
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="groupSettings">
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
<property name="text">
|
|
||||||
<string>Group Settings...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer">
|
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QDialogButtonBox" name="buttonBox">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="standardButtons">
|
<property name="standardButtons">
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</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>groupSettings</tabstop>
|
||||||
|
<tabstop>buttonBox</tabstop>
|
||||||
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections>
|
||||||
<connection>
|
<connection>
|
||||||
|
|
|
@ -17,14 +17,14 @@ pyrcc=`which pyrcc4`
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
if [ xDarwin = x$(uname) ]
|
if [ xDarwin = x$(uname) ]
|
||||||
then
|
then
|
||||||
if [ -e /Library/Frameworks/Python.framework/Versions/2.5/bin/pyuic4 ]
|
if [ -e /Library/Frameworks/Python.framework/Versions/2.7/bin/pyuic4 ]
|
||||||
then
|
then
|
||||||
pyuic=/Library/Frameworks/Python.framework/Versions/2.5/bin/pyuic4
|
pyuic=/Library/Frameworks/Python.framework/Versions/2.7/bin/pyuic4
|
||||||
pyrcc=/Library/Frameworks/Python.framework/Versions/2.5/bin/pyrcc4
|
pyrcc=/Library/Frameworks/Python.framework/Versions/2.7/bin/pyrcc4
|
||||||
elif [ -e /opt/local/Library/Frameworks/Python.framework/Versions/2.5/bin/pyuic4 ]
|
elif [ -e /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pyuic4 ]
|
||||||
then
|
then
|
||||||
pyuic=/opt/local/Library/Frameworks/Python.framework/Versions/2.5/bin/pyuic4
|
pyuic=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pyuic4
|
||||||
pyrcc=/opt/local/Library/Frameworks/Python.framework/Versions/2.5/bin/pyrcc4
|
pyrcc=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pyrcc4
|
||||||
elif [ -e /System/Library/Frameworks/Python.framework/Versions/2.6/bin/pyuic4 ]
|
elif [ -e /System/Library/Frameworks/Python.framework/Versions/2.6/bin/pyuic4 ]
|
||||||
then
|
then
|
||||||
pyuic=/System/Library/Frameworks/Python.framework/Versions/2.6/bin/pyuic4
|
pyuic=/System/Library/Frameworks/Python.framework/Versions/2.6/bin/pyuic4
|
||||||
|
|
Loading…
Reference in a new issue