mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 14:32:22 -04:00
167 lines
6.1 KiB
Python
167 lines
6.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright: Damien Elmes <anki@ichi2.net>
|
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
import os
|
|
from PyQt4.QtGui import *
|
|
from PyQt4.QtCore import *
|
|
from anki.lang import langs
|
|
from aqt.utils import openFolder
|
|
import aqt
|
|
|
|
class Preferences(QDialog):
|
|
|
|
def __init__(self, mw):
|
|
QDialog.__init__(self, mw, Qt.Window)
|
|
self.mw = mw
|
|
self.config = mw.config
|
|
self.form = aqt.forms.preferences.Ui_Preferences()
|
|
self.form.setupUi(self)
|
|
self.needDeckClose = False
|
|
self.connect(self.form.buttonBox, SIGNAL("helpRequested()"),
|
|
lambda: aqt.openHelp("Preferences"))
|
|
self.setupLang()
|
|
self.setupNetwork()
|
|
self.setupBackup()
|
|
self.setupOptions()
|
|
self.setupMedia()
|
|
self.show()
|
|
|
|
def accept(self):
|
|
self.updateNetwork()
|
|
self.updateBackup()
|
|
self.updateOptions()
|
|
self.updateMedia()
|
|
self.config.save()
|
|
self.mw.setupLang()
|
|
if self.needDeckClose:
|
|
self.mw.close()
|
|
else:
|
|
self.mw.reset()
|
|
self.done(0)
|
|
|
|
def reject(self):
|
|
self.accept()
|
|
|
|
def setupLang(self):
|
|
# interface lang
|
|
for (lang, code) in langs:
|
|
self.form.interfaceLang.addItem(lang)
|
|
self.form.interfaceLang.setCurrentIndex(
|
|
self.codeToIndex(self.config['interfaceLang']))
|
|
self.connect(self.form.interfaceLang,
|
|
SIGNAL("currentIndexChanged(QString)"),
|
|
self.interfaceLangChanged)
|
|
|
|
def interfaceLangChanged(self):
|
|
self.config['interfaceLang'] = (
|
|
langs[self.form.interfaceLang.currentIndex()])[1]
|
|
self.mw.setupLang()
|
|
self.form.retranslateUi(self)
|
|
|
|
def setupMedia(self):
|
|
self.form.mediaChoice.addItems(
|
|
QStringList([
|
|
_("Keep media next to deck"),
|
|
_("Keep media in DropBox"),
|
|
_("Keep media in custom folder"),
|
|
]))
|
|
if not self.config['mediaLocation']:
|
|
idx = 0
|
|
elif self.config['mediaLocation'] == "dropbox":
|
|
idx = 1
|
|
else:
|
|
idx = 2
|
|
self.form.mediaChoice.setCurrentIndex(idx)
|
|
self.mediaChoiceChanged(idx)
|
|
self.connect(self.form.mediaChoice,
|
|
SIGNAL("currentIndexChanged(int)"),
|
|
self.mediaChoiceChanged)
|
|
self.origMediaChoice = idx
|
|
|
|
def mediaChoiceChanged(self, idx):
|
|
mp = self.form.mediaPath
|
|
mpl = self.form.mediaPrefix
|
|
if idx == 2:
|
|
mp.setText(self.config['mediaLocation'])
|
|
mp.setShown(True)
|
|
mpl.setShown(True)
|
|
else:
|
|
mp.setShown(False)
|
|
mpl.setShown(False)
|
|
|
|
def setupNetwork(self):
|
|
self.form.syncOnProgramOpen.setChecked(self.config['syncOnProgramOpen'])
|
|
self.form.disableWhenMoved.setChecked(self.config['syncDisableWhenMoved'])
|
|
self.form.syncUser.setText(self.config['syncUsername'])
|
|
self.form.syncPass.setText(self.config['syncPassword'])
|
|
self.form.proxyHost.setText(self.config['proxyHost'])
|
|
self.form.proxyPort.setValue(self.config['proxyPort'])
|
|
self.form.proxyUser.setText(self.config['proxyUser'])
|
|
self.form.proxyPass.setText(self.config['proxyPass'])
|
|
|
|
def updateNetwork(self):
|
|
self.config['syncOnProgramOpen'] = self.form.syncOnProgramOpen.isChecked()
|
|
self.config['syncDisableWhenMoved'] = self.form.disableWhenMoved.isChecked()
|
|
self.config['syncUsername'] = unicode(self.form.syncUser.text())
|
|
self.config['syncPassword'] = unicode(self.form.syncPass.text())
|
|
self.config['proxyHost'] = unicode(self.form.proxyHost.text())
|
|
self.config['proxyPort'] = int(self.form.proxyPort.value())
|
|
self.config['proxyUser'] = unicode(self.form.proxyUser.text())
|
|
self.config['proxyPass'] = unicode(self.form.proxyPass.text())
|
|
|
|
def setupBackup(self):
|
|
self.form.numBackups.setValue(self.config['numBackups'])
|
|
self.connect(self.form.openBackupFolder,
|
|
SIGNAL("linkActivated(QString)"),
|
|
self.onOpenBackup)
|
|
|
|
def onOpenBackup(self):
|
|
path = os.path.join(self.config.confDir, "backups")
|
|
openFolder(path)
|
|
|
|
def updateMedia(self):
|
|
orig = self.origMediaChoice
|
|
new = self.form.mediaChoice.currentIndex()
|
|
if orig == new and orig != 2:
|
|
return
|
|
if new == 0:
|
|
p = ""
|
|
elif new == 1:
|
|
p = "dropbox"
|
|
# reset public folder location
|
|
self.config['dropboxPublicFolder'] = ""
|
|
else:
|
|
p = unicode(self.form.mediaPath.text())
|
|
self.config['mediaLocation'] = p
|
|
self.needDeckClose = True
|
|
|
|
def updateBackup(self):
|
|
self.config['numBackups'] = self.form.numBackups.value()
|
|
|
|
def setupOptions(self):
|
|
self.form.showEstimates.setChecked(not self.config['suppressEstimates'])
|
|
self.form.centerQA.setChecked(self.config['centerQA'])
|
|
self.form.showProgress.setChecked(self.config['showProgress'])
|
|
self.form.openLastDeck.setChecked(self.config['loadLastDeck'])
|
|
self.form.deleteMedia.setChecked(self.config['deleteMedia'])
|
|
self.form.stripHTML.setChecked(self.config['stripHTML'])
|
|
self.form.autoplaySounds.setChecked(self.config['autoplaySounds'])
|
|
|
|
def updateOptions(self):
|
|
self.config['suppressEstimates'] = not self.form.showEstimates.isChecked()
|
|
self.config['centerQA'] = self.form.centerQA.isChecked()
|
|
self.config['showProgress'] = self.form.showProgress.isChecked()
|
|
self.config['stripHTML'] = self.form.stripHTML.isChecked()
|
|
self.config['autoplaySounds'] = self.form.autoplaySounds.isChecked()
|
|
self.config['loadLastDeck'] = self.form.openLastDeck.isChecked()
|
|
self.config['deleteMedia'] = self.form.deleteMedia.isChecked()
|
|
|
|
def codeToIndex(self, code):
|
|
n = 0
|
|
for (lang, type) in langs:
|
|
if code == type:
|
|
return n
|
|
n += 1
|
|
# default to english
|
|
return self.codeToIndex("en")
|