mirror of
https://github.com/ankitects/anki.git
synced 2025-09-25 09:16:38 -04:00
group conf startup
This commit is contained in:
parent
b6ff15b062
commit
5899b60b59
5 changed files with 261 additions and 129 deletions
122
aqt/groupconf.py
122
aqt/groupconf.py
|
@ -4,36 +4,136 @@
|
|||
|
||||
from PyQt4.QtCore import *
|
||||
from PyQt4.QtGui import *
|
||||
import aqt
|
||||
import aqt, simplejson
|
||||
from aqt.utils import showInfo
|
||||
|
||||
class GroupConf(QDialog):
|
||||
def __init__(self, mw):
|
||||
QDialog.__init__(self, mw)
|
||||
def __init__(self, mw, gcid, parent=None):
|
||||
QDialog.__init__(self, parent or mw)
|
||||
self.mw = mw
|
||||
self.gcid = gcid
|
||||
self.form = aqt.forms.groupconf.Ui_Dialog()
|
||||
self.form.setupUi(self)
|
||||
(self.name, self.conf) = self.mw.deck.db.first(
|
||||
"select name, conf from gconf where id = ?", self.gcid)
|
||||
self.conf = simplejson.loads(self.conf)
|
||||
self.setWindowTitle(self.name)
|
||||
self.setupNew()
|
||||
self.setupLapse()
|
||||
self.setupRev()
|
||||
self.setupCram()
|
||||
self.setupGeneral()
|
||||
self.connect(self.form.optionsHelpButton,
|
||||
SIGNAL("clicked()"),
|
||||
self.connect(self.form.buttonBox,
|
||||
SIGNAL("helpRequested()"),
|
||||
lambda: QDesktopServices.openUrl(QUrl(
|
||||
aqt.appWiki + "StudyOptions")))
|
||||
aqt.appWiki + "GroupOptions")))
|
||||
self.exec_()
|
||||
|
||||
def listToUser(self, l):
|
||||
return " ".join([str(x) for x in l])
|
||||
|
||||
def setupNew(self):
|
||||
pass
|
||||
c = self.conf['new']
|
||||
f = self.form
|
||||
f.lrnSteps.setText(self.listToUser(c['delays']))
|
||||
f.lrnGradInt.setValue(c['ints'][0])
|
||||
f.lrnEasyInt.setValue(c['ints'][2])
|
||||
f.lrnFirstInt.setValue(c['ints'][1])
|
||||
f.lrnFactor.setValue(c['initialFactor'])
|
||||
|
||||
def setupLapse(self):
|
||||
pass
|
||||
c = self.conf['lapse']
|
||||
f = self.form
|
||||
f.lapSteps.setText(self.listToUser(c['delays']))
|
||||
f.lapMult.setValue(c['mult'])
|
||||
f.lapMinInt.setValue(c['minInt'])
|
||||
f.leechThreshold.setValue(c['leechFails'])
|
||||
f.leechAction.setCurrentIndex(c['leechAction'][0])
|
||||
f.lapRelearn.setChecked(c['relearn'])
|
||||
|
||||
def setupRev(self):
|
||||
pass
|
||||
c = self.conf['rev']
|
||||
f = self.form
|
||||
f.revSpace.setValue(c['fuzz']*100)
|
||||
f.revMinSpace.setValue(c['minSpace'])
|
||||
f.easyBonus.setValue(c['ease4']*100)
|
||||
|
||||
def setupCram(self):
|
||||
pass
|
||||
c = self.conf['cram']
|
||||
f = self.form
|
||||
f.cramSteps.setText(self.listToUser(c['delays']))
|
||||
f.cramBoost.setChecked(c['resched'])
|
||||
f.cramReset.setChecked(c['reset'])
|
||||
f.cramMult.setValue(c['mult'])
|
||||
f.cramMinInt.setValue(c['minInt'])
|
||||
|
||||
def setupGeneral(self):
|
||||
pass
|
||||
c = self.conf
|
||||
f = self.form
|
||||
f.maxTaken.setValue(c['maxTaken'])
|
||||
|
||||
class GroupConfSelector(QDialog):
|
||||
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.reload()
|
||||
self.addButtons()
|
||||
self.exec_()
|
||||
|
||||
def reload(self):
|
||||
self.confs = self.mw.deck.groupConfs()
|
||||
self.form.list.clear()
|
||||
item1 = None
|
||||
for c in self.confs:
|
||||
item = QListWidgetItem(c[0])
|
||||
item.setFlags(item.flags() | Qt.ItemIsEditable)
|
||||
self.form.list.addItem(item)
|
||||
if not item1:
|
||||
item1 = item
|
||||
self.form.list.setCurrentItem(item1)
|
||||
|
||||
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.deck.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.deck.db.first("select * from gconf where id = ?", gcid))
|
||||
gc[0] = self.mw.deck.nextID("gcid")
|
||||
gc[2] = _("%s copy")%gc[2]
|
||||
self.mw.deck.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.deck.save(_("Delete Group Config"))
|
||||
self.mw.deck.db.execute(
|
||||
"update groups set gcid = 1 where gcid = ?", gcid)
|
||||
self.mw.deck.db.execute(
|
||||
"delete from gconf where id = ?", gcid)
|
||||
self.reload()
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
# 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
|
||||
from aqt.utils import showInfo
|
||||
|
||||
class GroupConfSelector(QDialog):
|
||||
def __init__(self, mw, gids):
|
||||
QDialog.__init__(self, mw)
|
||||
self.mw = mw
|
||||
self.gids = gids
|
||||
self.form = aqt.forms.groupconfsel.Ui_Dialog()
|
||||
self.form.setupUi(self)
|
||||
self.load()
|
||||
self.addButtons()
|
||||
self.exec_()
|
||||
|
||||
def load(self):
|
||||
self.confs = self.mw.deck.groupConfs()
|
||||
for c in self.confs:
|
||||
item = QListWidgetItem(c[0])
|
||||
item.setFlags(item.flags() | Qt.ItemIsEditable)
|
||||
self.form.list.addItem(item)
|
||||
self.connect(self.form.list, SIGNAL("itemChanged(QListWidgetItem*)"),
|
||||
self.onRename)
|
||||
|
||||
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)
|
||||
button(_("Copy"), self.onCopy)
|
||||
button(_("Delete"), self.onDelete)
|
||||
|
||||
def idx(self):
|
||||
return self.form.list.currentRow()
|
||||
|
||||
def onRename(self, item):
|
||||
idx = self.idx()
|
||||
id = self.confs[idx][1]
|
||||
self.mw.deck.db.execute("update gconf set name = ? where id = ?",
|
||||
unicode(item.text()), id)
|
||||
|
||||
def onEdit(self):
|
||||
pass
|
||||
|
||||
def onCopy(self):
|
||||
pass
|
||||
|
||||
def onDelete(self):
|
||||
idx = self.form.list.currentRow()
|
||||
if self.confs[idx][1] == 1:
|
||||
showInfo(_("The default configuration can't be removed."))
|
||||
return
|
||||
|
|
@ -54,13 +54,13 @@ class GroupManager(QDialog):
|
|||
b.connect(b, SIGNAL("clicked()"), func)
|
||||
return b
|
||||
# exits
|
||||
button(_("&Study"), self.onStudy, QDialogButtonBox.AcceptRole)
|
||||
b = button(_("&Study"), self.onStudy, QDialogButtonBox.AcceptRole)
|
||||
button(_("&Cram"), self.onCram, QDialogButtonBox.AcceptRole)
|
||||
# selection
|
||||
button(_("Select &All"), self.onSelectAll)
|
||||
button(_("Select &None"), self.onSelectNone)
|
||||
button(_("&Rename..."), self.onRename)
|
||||
button(_("&Config..."), self.onEdit)
|
||||
button(_("Select &All"), self.onSelectAll).setShortcut("a")
|
||||
button(_("Select &None"), self.onSelectNone).setShortcut("n")
|
||||
button(_("&Rename..."), self.onRename).setShortcut("r")
|
||||
b = button(_("&Options..."), self.onEdit).setShortcut("o")
|
||||
self.connect(box,
|
||||
SIGNAL("helpRequested()"),
|
||||
lambda: QDesktopServices.openUrl(QUrl(
|
||||
|
@ -115,8 +115,8 @@ class GroupManager(QDialog):
|
|||
if gid:
|
||||
gids.append(gid)
|
||||
if gids:
|
||||
from aqt.groupconfsel import GroupConfSelector
|
||||
GroupConfSelector(self.mw, gids)
|
||||
from aqt.groupconf import GroupConfSelector
|
||||
GroupConfSelector(self.mw, gids, self)
|
||||
else:
|
||||
showInfo(_("None of the selected items are a group."))
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
<number>4</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
|
@ -87,9 +87,6 @@
|
|||
</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">
|
||||
|
@ -100,6 +97,26 @@
|
|||
<item row="0" column="1" colspan="2">
|
||||
<widget class="QLineEdit" name="lrnSteps"/>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QSpinBox" name="lrnFactor">
|
||||
<property name="minimum">
|
||||
<number>130</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1000</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QLabel" name="label_27">
|
||||
<property name="text">
|
||||
<string>%</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -137,17 +154,7 @@
|
|||
<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>
|
||||
<string>New interval</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -243,6 +250,23 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLabel" name="label_28">
|
||||
<property name="text">
|
||||
<string>%</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="lapMult">
|
||||
<property name="maximum">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -275,7 +299,14 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="revSpace"/>
|
||||
<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">
|
||||
|
@ -314,20 +345,26 @@
|
|||
<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>
|
||||
<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>
|
||||
|
@ -365,17 +402,7 @@
|
|||
<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>
|
||||
<string>New interval</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -388,6 +415,9 @@
|
|||
</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>
|
||||
|
@ -407,18 +437,38 @@
|
|||
</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">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<widget class="QLabel" name="label_30">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
<property name="text">
|
||||
<string>%</string>
|
||||
</property>
|
||||
</spacer>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
|
@ -452,7 +502,17 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="maxTaken"/>
|
||||
<widget class="QSpinBox" name="maxTaken">
|
||||
<property name="minimum">
|
||||
<number>30</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>3600</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>10</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="label_26">
|
||||
|
@ -525,8 +585,8 @@
|
|||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
<x>254</x>
|
||||
<y>320</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
|
@ -541,8 +601,8 @@
|
|||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
<x>322</x>
|
||||
<y>320</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
|
@ -550,5 +610,37 @@
|
|||
</hint>
|
||||
</hints>
|
||||
</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>
|
||||
</ui>
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>573</width>
|
||||
<height>377</height>
|
||||
<width>421</width>
|
||||
<height>188</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
|
Loading…
Reference in a new issue