diff --git a/aqt/deckconf.py b/aqt/deckconf.py index 6a5244f15..44c268b88 100644 --- a/aqt/deckconf.py +++ b/aqt/deckconf.py @@ -7,7 +7,6 @@ import aqt, simplejson from anki.utils import ids2str from aqt.utils import showInfo, showWarning, openHelp, getOnlyText from operator import itemgetter -import datetime, time class DeckConf(QDialog): def __init__(self, mw): @@ -27,7 +26,6 @@ class DeckConf(QDialog): SIGNAL("clicked()"), self.onRestore) self.setupCombos() - self.setupCollection() self.setWindowTitle(_("Options for %s") % self.deck['name']) self.exec_() @@ -36,7 +34,6 @@ class DeckConf(QDialog): 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) @@ -111,32 +108,6 @@ class DeckConf(QDialog): 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 ################################################## @@ -174,6 +145,7 @@ class DeckConf(QDialog): # general c = self.conf f.maxTaken.setValue(c['maxTaken']) + f.autoplaySounds.setChecked(c['autoplay']) def onRestore(self): self.mw.col.decks.restoreToDefault(self.conf) @@ -181,7 +153,6 @@ class DeckConf(QDialog): f = self.form f.dayOffset.setValue(4) f.lrnCutoff.setValue(20) - f.newSpread.setCurrentIndex(0) f.timeLimit.setValue(0) # New order @@ -244,16 +215,13 @@ class DeckConf(QDialog): # general c = self.conf c['maxTaken'] = f.maxTaken.value() + c['autoplay'] = f.autoplaySounds.isChecked() self.mw.col.decks.save(self.conf) - -#make sure to save() deck and conf (on saveConf()) - def reject(self): self.accept() def accept(self): - self.saveCollection() self.saveConf() self.mw.reset() QDialog.accept(self) diff --git a/aqt/overview.py b/aqt/overview.py index 493b45a09..4af330cf5 100644 --- a/aqt/overview.py +++ b/aqt/overview.py @@ -125,7 +125,7 @@ button { font-weight: bold; } def _renderBottom(self): links = [ - ["opts", _("Options")], + ["opts", _("Study Options")], ["cram", _("Cram")], ] buf = "" diff --git a/aqt/preferences.py b/aqt/preferences.py index 9de85d9e9..822e3b2c9 100644 --- a/aqt/preferences.py +++ b/aqt/preferences.py @@ -2,7 +2,7 @@ # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -import os +import datetime, time, os from aqt.qt import * from anki.lang import langs from aqt.utils import openFolder, showWarning, getText @@ -18,6 +18,7 @@ class Preferences(QDialog): self.form.setupUi(self) self.connect(self.form.buttonBox, SIGNAL("helpRequested()"), lambda: openHelp("Preferences")) + self.setupCollection() self.setupLang() self.setupNetwork() self.setupBackup() @@ -25,6 +26,7 @@ class Preferences(QDialog): self.show() def accept(self): + self.updateCollection() self.updateNetwork() self.updateBackup() self.updateOptions() @@ -35,6 +37,38 @@ class Preferences(QDialog): def reject(self): self.accept() + # 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.timeLimit.setValue(qc['timeLim']/60.0) + f.showEstimates.setChecked(qc['estTimes']) + f.showProgress.setChecked(qc['dueCounts']) + f.newSpread.addItems(c.newCardSchedulingLabels().values()) + f.newSpread.setCurrentIndex(qc['newSpread']) + + def updateCollection(self): + f = self.form + d = self.mw.col + qc = d.conf + qc['dueCounts'] = f.showProgress.isChecked() + qc['estTimes'] = f.showEstimates.isChecked() + 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())) + d.setMod() + # Language handling ###################################################################### @@ -74,6 +108,9 @@ class Preferences(QDialog): self.prof['syncMedia']) if not self.prof['syncKey']: self.form.syncDeauth.setShown(False) + self.form.syncLabel.setText(_("""\ +Synchronization
+Not currently enabled; click the sync button in the main window to enable.""")) else: self.connect(self.form.syncDeauth, SIGNAL("clicked()"), self.onSyncDeauth) @@ -112,21 +149,14 @@ class Preferences(QDialog): ###################################################################### def setupOptions(self): - self.form.showEstimates.setChecked(self.prof['showDueTimes']) - self.form.showProgress.setChecked(self.prof['showProgress']) self.form.deleteMedia.setChecked(self.prof['deleteMedia']) self.form.stripHTML.setChecked(self.prof['stripHTML']) - self.form.autoplaySounds.setChecked(self.prof['autoplay']) self.connect( self.form.profilePass, SIGNAL("clicked()"), self.onProfilePass) def updateOptions(self): - self.prof['showDueTimes'] = self.form.showEstimates.isChecked() - self.prof['showProgress'] = self.form.showProgress.isChecked() self.prof['stripHTML'] = self.form.stripHTML.isChecked() - self.prof['autoplay'] = self.form.autoplaySounds.isChecked() - self.prof['deleteMedia'] = self.form.deleteMedia.isChecked() self.prof['deleteMedia'] = self.form.deleteMedia.isChecked() def onProfilePass(self): diff --git a/aqt/profiles.py b/aqt/profiles.py index a09ba7cd3..aad19c6ae 100644 --- a/aqt/profiles.py +++ b/aqt/profiles.py @@ -46,11 +46,6 @@ profileConf = dict( deleteMedia=False, preserveKeyboard=True, - # reviewing - autoplay=True, - showDueTimes=True, - showProgress=True, - # syncing syncKey=None, syncMedia=True, diff --git a/aqt/reviewer.py b/aqt/reviewer.py index 90370beae..bf4050981 100644 --- a/aqt/reviewer.py +++ b/aqt/reviewer.py @@ -124,7 +124,7 @@ function _typeAnsPress() { c = self.card # grab the question and play audio q = c.q() - if self.mw.pm.profile['autoplay']: + if self.mw.col.decks.conf(self.card.did)['autoplay']: playFromText(q) # render & update bottom q = self._mungeQA(q) @@ -144,7 +144,7 @@ function _typeAnsPress() { c = self.card a = c.a() # play audio? - if self.mw.pm.profile['autoplay']: + if self.mw.col.decks.conf(self.card.did)['autoplay']: playFromText(a) # render and update bottom a = self._mungeQA(a) @@ -408,6 +408,8 @@ var updateTime = function () { self.bottom._css + self._bottomCSS) def _remaining(self): + if not self.mw.col.conf['dueCounts']: + return "" counts = list(self.mw.col.sched.counts(self.card)) idx = self.mw.col.sched.countIdx(self.card) counts[idx] = "%s" % (counts[idx]) @@ -449,7 +451,7 @@ var updateTime = function () { return buf + script def _buttonTime(self, i, green): - if not self.mw.pm.profile['showDueTimes']: + if not self.mw.col.conf['estTimes']: return "
" txt = self.mw.col.sched.nextIvlStr(self.card, i+1, True) return '%s
' % txt diff --git a/aqt/upgrade.py b/aqt/upgrade.py index 5e72155c8..617f5633a 100644 --- a/aqt/upgrade.py +++ b/aqt/upgrade.py @@ -46,11 +46,8 @@ class Upgrader(object): for k in ( "recentColours", "stripHTML", "editFontFamily", "editFontSize", "editLineSize", "deleteMedia", "preserveKeyboard", "numBackups", - "proxyHost", "proxyPass", "proxyPort", "proxyUser", - "showProgress"): + "proxyHost", "proxyPass", "proxyPort", "proxyUser"): p[k] = self.conf[k] - p['autoplay'] = self.conf['autoplaySounds'] - p['showDueTimes'] = not self.conf['suppressEstimates'] self.mw.pm.save() # Wizard diff --git a/designer/dconf.ui b/designer/dconf.ui index 47ee4c390..9de22f4e1 100644 --- a/designer/dconf.ui +++ b/designer/dconf.ui @@ -7,7 +7,7 @@ 0 0 500 - 437 + 438 @@ -555,91 +555,12 @@ - + - <b>Collection Options</b><br>The settings below are shared between all decks. + Automatically play audio - - - - - - - - - Next day starts at - - - - - - - - 60 - 16777215 - - - - 23 - - - - - - - Learn ahead limit - - - - - - - - 60 - 16777215 - - - - - - - - mins - - - - - - - Timebox time limit - - - - - - - 9999 - - - - - - - mins - - - - - - - hours past midnight - - - - - @@ -693,10 +614,7 @@ leechThreshold leechAction maxTaken - newSpread - dayOffset - lrnCutoff - timeLimit + autoplaySounds buttonBox diff --git a/designer/preferences.ui b/designer/preferences.ui index e5a9b480f..900554b6e 100644 --- a/designer/preferences.ui +++ b/designer/preferences.ui @@ -6,8 +6,8 @@ 0 0 - 461 - 442 + 439 + 420 @@ -28,47 +28,28 @@ - 6 + 12 - - - <b>Language</b> - - - false - - - - - - - - 300 - 0 - - - - - - - - - 0 - 0 - - - - <b>Reviewing</b> - - - - - - - Automatically play audio - - + + + + + Language: + + + + + + + + 300 + 0 + + + + + @@ -85,25 +66,121 @@ - + + + Strip HTML when pasting text + + + + + + + When adding media, move instead of copying + + + + + + + + + + + + Next day starts at + + + + + + + + 60 + 16777215 + + + + 23 + + + + + + + Learn ahead limit + + + + + + + + 60 + 16777215 + + + + + + + + mins + + + + + + + Timebox time limit + + + + + + + 9999 + + + + + + + mins + + + + + + + hours past midnight + + + + + + + Qt::Vertical + + QSizePolicy::Preferred + 20 - 0 + 20 - + - Some settings will take effect after you restart Anki. + Profile Password... - - Qt::AlignCenter + + false @@ -125,7 +202,7 @@ - + <b>Synchronisation</b> @@ -388,61 +465,6 @@ - - - Advanced - - - - - - - - Strip HTML when pasting text - - - - - - - Move instead of copying media when adding - - - - - - - - - Profile Password... - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Some settings will take effect after you restart Anki. - - - Qt::AlignCenter - - - - - @@ -458,12 +480,16 @@ - buttonBox interfaceLang - autoplaySounds showEstimates showProgress - tabWidget + stripHTML + deleteMedia + newSpread + dayOffset + lrnCutoff + timeLimit + profilePass syncMedia syncOnProgramOpen syncDeauth @@ -472,9 +498,8 @@ proxyUser proxyPass numBackups - stripHTML - deleteMedia - profilePass + buttonBox + tabWidget