update preferences

This commit is contained in:
Damien Elmes 2011-03-29 20:16:45 +09:00
parent 6bab81c180
commit 37d04c1831
4 changed files with 104 additions and 390 deletions

View file

@ -52,7 +52,7 @@ defaultConf = {
'showProgress': True, 'showProgress': True,
'showTimer': True, 'showTimer': True,
'showToolbar': True, 'showToolbar': True,
'splitQA': True, 'centerQA': True,
'stripHTML': True, 'stripHTML': True,
'studyOptionsTab': 0, 'studyOptionsTab': 0,
'suppressEstimates': False, 'suppressEstimates': False,

View file

@ -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, aqt.studyopts import aqt, aqt.progress, aqt.webview
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
@ -634,9 +634,11 @@ Debug info:\n%s""") % traceback.format_exc(), help="DeckErrors")
self.moveToState("editCurrentFact") self.moveToState("editCurrentFact")
def setupCardStats(self): def setupCardStats(self):
import aqt.stats
self.cardStats = aqt.stats.CardStats(self) self.cardStats = aqt.stats.CardStats(self)
def onStudyOptions(self): def onStudyOptions(self):
import aqt.studyopts
aqt.studyopts.StudyOptions(self) aqt.studyopts.StudyOptions(self)
def onOverview(self): def onOverview(self):
@ -663,7 +665,8 @@ Debug info:\n%s""") % traceback.format_exc(), help="DeckErrors")
self.deckProperties = aqt.deckproperties.DeckProperties(self, self.deck) self.deckProperties = aqt.deckproperties.DeckProperties(self, self.deck)
def onPrefs(self): def onPrefs(self):
aqt.preferences.Preferences(self, self.config) import aqt.preferences
aqt.preferences.Preferences(self)
def onAbout(self): def onAbout(self):
aqt.about.show(self) aqt.about.show(self)

View file

@ -2,70 +2,25 @@
# Copyright: Damien Elmes <anki@ichi2.net> # Copyright: Damien Elmes <anki@ichi2.net>
# License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html # License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html
import copy, sys, os import os
from PyQt4.QtGui import * from PyQt4.QtGui import *
from PyQt4.QtCore import * from PyQt4.QtCore import *
import anki, anki.utils from anki.lang import langs
from anki.facts import Fact from aqt.utils import openFolder
from aqt import ui import aqt
import aqt.forms
tabs = ("Display",
"Network",
"Saving",
"Advanced")
class Preferences(QDialog): class Preferences(QDialog):
def __init__(self, parent, config): def __init__(self, mw):
QDialog.__init__(self, parent, Qt.Window) QDialog.__init__(self, mw, Qt.Window)
self.origConfig = config self.mw = mw
self.parent = parent self.config = mw.config
self.config = copy.copy(self.origConfig)
self.origInterfaceLang = self.config['interfaceLang'] self.origInterfaceLang = self.config['interfaceLang']
self.dialog = aqt.forms.preferences.Ui_Preferences() self.dialog = aqt.forms.preferences.Ui_Preferences()
self.dialog.setupUi(self) self.dialog.setupUi(self)
self.needDeckClose = False self.needDeckClose = False
self.supportedLanguages = [ self.connect(self.dialog.buttonBox, SIGNAL("helpRequested()"),
(u"Bahasa Melayu", "ms"), lambda: aqt.openHelp("Preferences"))
(u"Dansk", "da"),
(u"Deutsch", "de"),
(u"Eesti", "et"),
(u"English", "en"),
(u"Español", "es"),
(u"Esperanto", "eo"),
(u"Français", "fr"),
(u"Italiano", "it"),
(u"Latviešu Valoda", "lv"),
(u"Magyar", "hu"),
(u"Nederlands","nl"),
(u"Norsk","nb"),
(u"Occitan","oc"),
(u"Polski", "pl"),
(u"Português Brasileiro", "pt_BR"),
(u"Português", "pt"),
(u"Româneşte", "ro"),
(u"Slovenščina", "sl"),
(u"Suomi", "fi"),
(u"Svenska", "sv"),
(u"Tiếng Việt", "vi"),
(u"Türkçe", "tr"),
(u"Čeština", "cs"),
(u"Ελληνικά", "el"),
(u"Български", "bg"),
(u"Монгол хэл","mn"),
(u"русский язык", "ru"),
(u"українська мова", "uk"),
(u"עִבְרִית", "he"),
(u"العربية", "ar"),
(u"فارسی", "fa"),
(u"日本語", "ja"),
(u"简体中文", "zh_CN"),
(u"繁體中文", "zh_TW"),
(u"한국어", "ko"),
]
self.supportedLanguages.sort()
self.connect(self.dialog.buttonBox, SIGNAL("helpRequested()"), self.helpRequested)
self.setupLang() self.setupLang()
self.setupNetwork() self.setupNetwork()
self.setupSave() self.setupSave()
@ -78,14 +33,12 @@ class Preferences(QDialog):
self.updateSave() self.updateSave()
self.updateAdvanced() self.updateAdvanced()
self.updateMedia() self.updateMedia()
self.config['interfaceLang'] = self.origConfig['interfaceLang'] self.config.save()
self.origConfig.update(self.config) self.mw.setupLang()
self.origConfig.save()
self.parent.setLang()
if self.needDeckClose: if self.needDeckClose:
self.parent.close(parent=self) self.mw.close()
else: else:
self.parent.reset() self.mw.reset()
self.done(0) self.done(0)
def reject(self): def reject(self):
@ -93,17 +46,18 @@ class Preferences(QDialog):
def setupLang(self): def setupLang(self):
# interface lang # interface lang
for (lang, code) in self.supportedLanguages: for (lang, code) in langs:
self.dialog.interfaceLang.addItem(lang) self.dialog.interfaceLang.addItem(lang)
self.dialog.interfaceLang.setCurrentIndex(
self.codeToIndex(self.config['interfaceLang']))
self.connect(self.dialog.interfaceLang, self.connect(self.dialog.interfaceLang,
SIGNAL("currentIndexChanged(QString)"), SIGNAL("currentIndexChanged(QString)"),
self.interfaceLangChanged) self.interfaceLangChanged)
self.dialog.interfaceLang.setCurrentIndex(self.codeToIndex(self.config['interfaceLang']))
def interfaceLangChanged(self): def interfaceLangChanged(self):
self.origConfig['interfaceLang'] = ( self.config['interfaceLang'] = (
self.supportedLanguages[self.dialog.interfaceLang.currentIndex()])[1] langs[self.dialog.interfaceLang.currentIndex()])[1]
self.parent.setLang() self.mw.setupLang()
self.dialog.retranslateUi(self) self.dialog.retranslateUi(self)
def setupMedia(self): def setupMedia(self):
@ -138,20 +92,16 @@ class Preferences(QDialog):
mpl.setShown(False) mpl.setShown(False)
def setupNetwork(self): def setupNetwork(self):
self.dialog.syncOnOpen.setChecked(self.config['syncOnLoad'])
self.dialog.syncOnProgramOpen.setChecked(self.config['syncOnProgramOpen']) self.dialog.syncOnProgramOpen.setChecked(self.config['syncOnProgramOpen'])
self.dialog.disableWhenMoved.setChecked(self.config['syncDisableWhenMoved']) self.dialog.disableWhenMoved.setChecked(self.config['syncDisableWhenMoved'])
self.dialog.syncUser.setText(self.config['syncUsername']) self.dialog.syncUser.setText(self.config['syncUsername'])
self.dialog.syncPass.setText(self.config['syncPassword']) self.dialog.syncPass.setText(self.config['syncPassword'])
self.dialog.proxyHost.setText(self.config['proxyHost']) self.dialog.proxyHost.setText(self.config['proxyHost'])
self.dialog.proxyPort.setMinimum(1)
self.dialog.proxyPort.setMaximum(65535)
self.dialog.proxyPort.setValue(self.config['proxyPort']) self.dialog.proxyPort.setValue(self.config['proxyPort'])
self.dialog.proxyUser.setText(self.config['proxyUser']) self.dialog.proxyUser.setText(self.config['proxyUser'])
self.dialog.proxyPass.setText(self.config['proxyPass']) self.dialog.proxyPass.setText(self.config['proxyPass'])
def updateNetwork(self): def updateNetwork(self):
self.config['syncOnLoad'] = self.dialog.syncOnOpen.isChecked()
self.config['syncOnProgramOpen'] = self.dialog.syncOnProgramOpen.isChecked() self.config['syncOnProgramOpen'] = self.dialog.syncOnProgramOpen.isChecked()
self.config['syncDisableWhenMoved'] = self.dialog.disableWhenMoved.isChecked() self.config['syncDisableWhenMoved'] = self.dialog.disableWhenMoved.isChecked()
self.config['syncUsername'] = unicode(self.dialog.syncUser.text()) self.config['syncUsername'] = unicode(self.dialog.syncUser.text())
@ -162,11 +112,6 @@ class Preferences(QDialog):
self.config['proxyPass'] = unicode(self.dialog.proxyPass.text()) self.config['proxyPass'] = unicode(self.dialog.proxyPass.text())
def setupSave(self): def setupSave(self):
self.dialog.saveAfterEveryNum.setValue(self.config['saveAfterAnswerNum'])
self.dialog.saveAfterEvery.setChecked(self.config['saveAfterAnswer'])
self.dialog.saveAfterAdding.setChecked(self.config['saveAfterAdding'])
self.dialog.saveAfterAddingNum.setValue(self.config['saveAfterAddingNum'])
self.dialog.saveWhenClosing.setChecked(self.config['saveOnClose'])
self.dialog.numBackups.setValue(self.config['numBackups']) self.dialog.numBackups.setValue(self.config['numBackups'])
self.connect(self.dialog.openBackupFolder, self.connect(self.dialog.openBackupFolder,
SIGNAL("linkActivated(QString)"), SIGNAL("linkActivated(QString)"),
@ -174,12 +119,7 @@ class Preferences(QDialog):
def onOpenBackup(self): def onOpenBackup(self):
path = os.path.join(self.config.confDir, "backups") path = os.path.join(self.config.confDir, "backups")
if sys.platform == "win32": openFolder(path)
anki.utils.call(["explorer", path.encode(
sys.getfilesystemencoding())],
wait=False)
else:
QDesktopServices.openUrl(QUrl("file://" + path))
def updateMedia(self): def updateMedia(self):
orig = self.origMediaChoice orig = self.origMediaChoice
@ -198,54 +138,31 @@ class Preferences(QDialog):
self.needDeckClose = True self.needDeckClose = True
def updateSave(self): def updateSave(self):
self.config['saveAfterAnswer'] = self.dialog.saveAfterEvery.isChecked()
self.config['saveAfterAnswerNum'] = self.dialog.saveAfterEveryNum.value()
self.config['saveAfterAdding'] = self.dialog.saveAfterAdding.isChecked()
self.config['saveAfterAddingNum'] = self.dialog.saveAfterAddingNum.value()
self.config['saveOnClose'] = self.dialog.saveWhenClosing.isChecked()
self.config['numBackups'] = self.dialog.numBackups.value() self.config['numBackups'] = self.dialog.numBackups.value()
def setupAdvanced(self): def setupAdvanced(self):
self.dialog.colourTimes.setChecked(self.config['colourTimes'])
self.dialog.showEstimates.setChecked(not self.config['suppressEstimates']) self.dialog.showEstimates.setChecked(not self.config['suppressEstimates'])
self.dialog.showStudyOptions.setChecked(self.config['showStudyScreen']) self.dialog.centerQA.setChecked(self.config['centerQA'])
self.dialog.showTimer.setChecked(self.config['showTimer'])
self.dialog.showDivider.setChecked(self.config['qaDivider'])
self.dialog.splitQA.setChecked(self.config['splitQA'])
self.dialog.showProgress.setChecked(self.config['showProgress']) self.dialog.showProgress.setChecked(self.config['showProgress'])
self.dialog.openLastDeck.setChecked(self.config['loadLastDeck']) self.dialog.openLastDeck.setChecked(self.config['loadLastDeck'])
self.dialog.deckBrowserOrder.setChecked(self.config['deckBrowserOrder'])
self.dialog.deleteMedia.setChecked(self.config['deleteMedia']) self.dialog.deleteMedia.setChecked(self.config['deleteMedia'])
self.dialog.stripHTML.setChecked(self.config['stripHTML']) self.dialog.stripHTML.setChecked(self.config['stripHTML'])
self.dialog.autoplaySounds.setChecked(self.config['autoplaySounds']) self.dialog.autoplaySounds.setChecked(self.config['autoplaySounds'])
self.dialog.deckBrowserLen.setValue(self.config['deckBrowserNameLength'])
def updateAdvanced(self): def updateAdvanced(self):
self.config['colourTimes'] = self.dialog.colourTimes.isChecked()
self.config['showTimer'] = self.dialog.showTimer.isChecked()
self.config['suppressEstimates'] = not self.dialog.showEstimates.isChecked() self.config['suppressEstimates'] = not self.dialog.showEstimates.isChecked()
self.config['showStudyScreen'] = self.dialog.showStudyOptions.isChecked() self.config['centerQA'] = self.dialog.centerQA.isChecked()
self.config['qaDivider'] = self.dialog.showDivider.isChecked()
self.config['splitQA'] = self.dialog.splitQA.isChecked()
self.config['showProgress'] = self.dialog.showProgress.isChecked() self.config['showProgress'] = self.dialog.showProgress.isChecked()
self.config['stripHTML'] = self.dialog.stripHTML.isChecked() self.config['stripHTML'] = self.dialog.stripHTML.isChecked()
self.config['autoplaySounds'] = self.dialog.autoplaySounds.isChecked() self.config['autoplaySounds'] = self.dialog.autoplaySounds.isChecked()
self.config['loadLastDeck'] = self.dialog.openLastDeck.isChecked() self.config['loadLastDeck'] = self.dialog.openLastDeck.isChecked()
if self.dialog.deckBrowserOrder.isChecked():
self.config['deckBrowserOrder'] = 1
else:
self.config['deckBrowserOrder'] = 0
self.config['deleteMedia'] = self.dialog.deleteMedia.isChecked() self.config['deleteMedia'] = self.dialog.deleteMedia.isChecked()
self.config['deckBrowserNameLength'] = self.dialog.deckBrowserLen.value()
def codeToIndex(self, code): def codeToIndex(self, code):
n = 0 n = 0
for (lang, type) in self.supportedLanguages: for (lang, type) in langs:
if code == type: if code == type:
return n return n
n += 1 n += 1
# default to english # default to english
return self.codeToIndex("en") return self.codeToIndex("en")
def helpRequested(self):
aqt.openHelp("Preferences")

View file

@ -20,7 +20,7 @@
<enum>Qt::StrongFocus</enum> <enum>Qt::StrongFocus</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>1</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="tab_1"> <widget class="QWidget" name="tab_1">
<attribute name="title"> <attribute name="title">
@ -58,50 +58,9 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="focusPolicy">
<enum>Qt::TabFocus</enum>
</property>
<property name="text"> <property name="text">
<string>&lt;b&gt;Reviewing&lt;/b&gt;</string> <string>&lt;b&gt;Reviewing&lt;/b&gt;</string>
</property> </property>
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showDivider">
<property name="text">
<string>Show divider between question and answer</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="splitQA">
<property name="text">
<string>Put space between question and answer</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showEstimates">
<property name="text">
<string>Show next time before answer</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showProgress">
<property name="text">
<string>Show due count and progress during review</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="preventEdits">
<property name="text">
<string>Prevent edits until answer shown</string>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -111,6 +70,27 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="centerQA">
<property name="text">
<string>Center question and answer</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showEstimates">
<property name="text">
<string>Show next times</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showProgress">
<property name="text">
<string>Show due count and progress</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QLabel" name="label_6"> <widget class="QLabel" name="label_6">
<property name="text"> <property name="text">
@ -218,23 +198,13 @@
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="2"> <item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="syncOnOpen">
<property name="text">
<string>Sync on deck open/close</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="syncOnProgramOpen"> <widget class="QCheckBox" name="syncOnProgramOpen">
<property name="text"> <property name="text">
<string>Sync on program open/close</string> <string>Sync on program open/close</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0" colspan="2"> <item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="disableWhenMoved"> <widget class="QCheckBox" name="disableWhenMoved">
<property name="text"> <property name="text">
<string>Disable sync when deck moved</string> <string>Disable sync when deck moved</string>
@ -269,30 +239,6 @@
<item row="0" column="1"> <item row="0" column="1">
<widget class="QLineEdit" name="proxyHost"/> <widget class="QLineEdit" name="proxyHost"/>
</item> </item>
<item row="2" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Username</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="proxyUser"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Password</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="proxyPass">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="0" column="2"> <item row="0" column="2">
<widget class="QLabel" name="label_15"> <widget class="QLabel" name="label_15">
<property name="text"> <property name="text">
@ -308,6 +254,39 @@
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>8080</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Username</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="proxyUser"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Password</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="proxyPass">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@ -339,90 +318,12 @@
</widget> </widget>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
<string>Saving</string> <string>Backups</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout_3"> <layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing"> <property name="spacing">
<number>10</number> <number>10</number>
</property> </property>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>&lt;b&gt;Autosaving&lt;/b&gt;</string>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QCheckBox" name="saveAfterEvery">
<property name="text">
<string>Save after answering</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="saveAfterEveryNum">
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="saveAfterAdding">
<property name="text">
<string>Save after adding</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="saveAfterAddingNum">
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="saveWhenClosing">
<property name="text">
<string>Save when closing</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_5">
<property name="text">
<string>cards</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_7">
<property name="text">
<string>facts</string>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
<property name="text"> <property name="text">
@ -487,6 +388,16 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>Note that your media folders are &lt;b&gt;not&lt;/b&gt; backed up. It's recommended you keep your media in DropBox to avoid data loss.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item> <item>
<spacer name="verticalSpacer_4"> <spacer name="verticalSpacer_4">
<property name="orientation"> <property name="orientation">
@ -519,128 +430,29 @@
<layout class="QVBoxLayout"> <layout class="QVBoxLayout">
<item> <item>
<layout class="QGridLayout"> <layout class="QGridLayout">
<item row="4" column="0"> <item row="1" column="0">
<widget class="QCheckBox" name="showTimer">
<property name="text">
<string>Show timer</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="alternativeTheme">
<property name="text">
<string>Alternative theme</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QCheckBox" name="showStudyOptions">
<property name="text">
<string>Show study options on deck load</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="showTray">
<property name="text">
<string>Show tray icon</string>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QCheckBox" name="addZeroSpace">
<property name="text">
<string>Add hidden char to text (fixes Thai on OSX)</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QCheckBox" name="openLastDeck"> <widget class="QCheckBox" name="openLastDeck">
<property name="text"> <property name="text">
<string>Always open last deck on startup</string> <string>Always open last deck on startup</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="0"> <item row="0" column="0">
<widget class="QCheckBox" name="deckBrowserOrder">
<property name="text">
<string>Show decks with cards due first in browser</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QCheckBox" name="deleteMedia">
<property name="text">
<string>Delete original media on add</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="colourTimes">
<property name="text">
<string>Colour next times</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QCheckBox" name="stripHTML"> <widget class="QCheckBox" name="stripHTML">
<property name="text"> <property name="text">
<string>Strip HTML when pasting text</string> <string>Strip HTML when pasting text</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="0"> <item row="2" column="0">
<widget class="QCheckBox" name="optimizeSmall"> <widget class="QCheckBox" name="deleteMedia">
<property name="text"> <property name="text">
<string>Optimize for small screens</string> <string>Delete original media on add</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</item> </item>
<item>
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_22">
<property name="text">
<string>Max deck name length in deck browser:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="deckBrowserLen"/>
</item>
<item>
<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> <item>
<spacer> <spacer>
<property name="orientation"> <property name="orientation">
@ -683,42 +495,24 @@
<tabstops> <tabstops>
<tabstop>tabWidget</tabstop> <tabstop>tabWidget</tabstop>
<tabstop>interfaceLang</tabstop> <tabstop>interfaceLang</tabstop>
<tabstop>label_2</tabstop> <tabstop>autoplaySounds</tabstop>
<tabstop>showDivider</tabstop> <tabstop>centerQA</tabstop>
<tabstop>splitQA</tabstop>
<tabstop>showEstimates</tabstop> <tabstop>showEstimates</tabstop>
<tabstop>showProgress</tabstop> <tabstop>showProgress</tabstop>
<tabstop>preventEdits</tabstop>
<tabstop>autoplaySounds</tabstop>
<tabstop>mediaChoice</tabstop> <tabstop>mediaChoice</tabstop>
<tabstop>mediaPath</tabstop> <tabstop>mediaPath</tabstop>
<tabstop>syncUser</tabstop> <tabstop>syncUser</tabstop>
<tabstop>syncPass</tabstop> <tabstop>syncPass</tabstop>
<tabstop>syncOnOpen</tabstop>
<tabstop>syncOnProgramOpen</tabstop> <tabstop>syncOnProgramOpen</tabstop>
<tabstop>disableWhenMoved</tabstop> <tabstop>disableWhenMoved</tabstop>
<tabstop>proxyHost</tabstop> <tabstop>proxyHost</tabstop>
<tabstop>proxyPort</tabstop> <tabstop>proxyPort</tabstop>
<tabstop>proxyUser</tabstop> <tabstop>proxyUser</tabstop>
<tabstop>proxyPass</tabstop> <tabstop>proxyPass</tabstop>
<tabstop>saveAfterEvery</tabstop>
<tabstop>saveAfterEveryNum</tabstop>
<tabstop>saveAfterAdding</tabstop>
<tabstop>saveAfterAddingNum</tabstop>
<tabstop>saveWhenClosing</tabstop>
<tabstop>numBackups</tabstop> <tabstop>numBackups</tabstop>
<tabstop>alternativeTheme</tabstop>
<tabstop>colourTimes</tabstop>
<tabstop>showTimer</tabstop>
<tabstop>showTray</tabstop>
<tabstop>stripHTML</tabstop> <tabstop>stripHTML</tabstop>
<tabstop>showStudyOptions</tabstop>
<tabstop>openLastDeck</tabstop> <tabstop>openLastDeck</tabstop>
<tabstop>deckBrowserOrder</tabstop>
<tabstop>optimizeSmall</tabstop>
<tabstop>deleteMedia</tabstop> <tabstop>deleteMedia</tabstop>
<tabstop>addZeroSpace</tabstop>
<tabstop>deckBrowserLen</tabstop>
<tabstop>buttonBox</tabstop> <tabstop>buttonBox</tabstop>
</tabstops> </tabstops>
<resources/> <resources/>