new active/inactive tag handling, new study options screen

- break study options into multiple tabs
- inactive tags removed from menus and accessible via study options now
- save various study options immediately instead of requiring review button to
  be pressed
This commit is contained in:
Damien Elmes 2010-10-19 19:15:21 +09:00
parent d698c3d310
commit 1abb47d973
7 changed files with 726 additions and 402 deletions

View file

@ -86,7 +86,6 @@ class Config(dict):
'showLastCardContent': False, 'showLastCardContent': False,
'showLastCardInterval': False, 'showLastCardInterval': False,
'showProgress': True, 'showProgress': True,
'showStudyOptions': False,
'showStudyScreen': True, 'showStudyScreen': True,
'showStudyStats': True, 'showStudyStats': True,
'showTimer': True, 'showTimer': True,

View file

@ -9,53 +9,33 @@ from ankiqt.ui.utils import saveGeom, restoreGeom
class ActiveTagsChooser(QDialog): class ActiveTagsChooser(QDialog):
def __init__(self, parent): def __init__(self, parent, active, inactive):
QDialog.__init__(self, parent, Qt.Window) QDialog.__init__(self, parent, Qt.Window)
self.parent = parent self.parent = parent
self.deck = self.parent.deck self.deck = self.parent.deck
self.active = active
self.inactive = inactive
self.dialog = ankiqt.forms.activetags.Ui_Dialog() self.dialog = ankiqt.forms.activetags.Ui_Dialog()
self.dialog.setupUi(self) self.dialog.setupUi(self)
self.selectAll = QPushButton(_("Select All"))
self.connect(self.selectAll, SIGNAL("clicked()"), self.onSelectAll)
self.dialog.buttonBox.addButton(self.selectAll,
QDialogButtonBox.ActionRole)
self.selectNone = QPushButton(_("Select None"))
self.connect(self.selectNone, SIGNAL("clicked()"), self.onSelectNone)
self.dialog.buttonBox.addButton(self.selectNone,
QDialogButtonBox.ActionRole)
self.invert = QPushButton(_("Invert"))
self.connect(self.invert, SIGNAL("clicked()"), self.onInvert)
self.dialog.buttonBox.addButton(self.invert,
QDialogButtonBox.ActionRole)
self.connect(self.dialog.buttonBox, SIGNAL("helpRequested()"), self.connect(self.dialog.buttonBox, SIGNAL("helpRequested()"),
self.onHelp) self.onHelp)
self.rebuildTagList() self.rebuildTagList()
restoreGeom(self, "activeTags") restoreGeom(self, "activeTags")
def onSelectAll(self):
self.dialog.list.selectAll()
def onSelectNone(self):
self.dialog.list.clearSelection()
def onInvert(self):
sm = self.dialog.list.selectionModel()
sel = sm.selection()
self.dialog.list.selectAll()
sm.select(sel, QItemSelectionModel.Deselect)
def rebuildTagList(self): def rebuildTagList(self):
self.tags = self.deck.allTags() usertags = self.deck.allTags()
self.items = [] self.items = []
self.suspended = {} self.suspended = {}
alltags = [] yes = parseTags(self.deck.getVar(self.active))
# get list of currently suspended no = parseTags(self.deck.getVar(self.inactive))
for t in parseTags(self.deck.suspended): yesHash = {}
self.suspended[t] = 1 noHash = {}
if t not in self.tags: for y in yes:
self.tags.append(t) yesHash[y] = True
# sort and remove special 'Suspended' tag for n in no:
self.tags.sort() noHash[n] = True
groupedTags = []
usertags.sort()
# render models and templates # render models and templates
for (type, sql, icon) in ( for (type, sql, icon) in (
("models", "select tags from models", "contents.png"), ("models", "select tags from models", "contents.png"),
@ -66,60 +46,74 @@ class ActiveTagsChooser(QDialog):
for tag in parseTags(tags): for tag in parseTags(tags):
d[tag] = 1 d[tag] = 1
sortedtags = sorted(d.keys()) sortedtags = sorted(d.keys())
alltags.extend(sortedtags)
icon = QIcon(":/icons/" + icon) icon = QIcon(":/icons/" + icon)
for t in sortedtags: groupedTags.append([icon, sortedtags])
item = QListWidgetItem(icon, t.replace("_", " "))
self.dialog.list.addItem(item)
self.items.append(item)
idx = self.dialog.list.indexFromItem(item)
if t in self.suspended:
mode = QItemSelectionModel.Select
else:
mode = QItemSelectionModel.Deselect
self.dialog.list.selectionModel().select(idx, mode)
# remove from user tags # remove from user tags
for tag in alltags: for tag in groupedTags[0][1] + groupedTags[1][1]:
try: try:
self.tags.remove(tag) usertags.remove(tag)
except: except:
pass pass
# user tags # user tags
icon = QIcon(":/icons/Anki_Fact.png") icon = QIcon(":/icons/Anki_Fact.png")
for t in self.tags: groupedTags.append([icon, usertags])
item = QListWidgetItem(icon, t.replace("_", " ")) self.tags = []
self.dialog.list.addItem(item) for (icon, tags) in groupedTags:
self.items.append(item) for t in tags:
idx = self.dialog.list.indexFromItem(item) self.tags.append(t)
if t in self.suspended: item = QListWidgetItem(icon, t.replace("_", " "))
mode = QItemSelectionModel.Select self.dialog.activeList.addItem(item)
else: if t in yesHash:
mode = QItemSelectionModel.Deselect mode = QItemSelectionModel.Select
self.dialog.list.selectionModel().select(idx, mode) self.dialog.activeCheck.setChecked(True)
self.tags = alltags + self.tags else:
mode = QItemSelectionModel.Deselect
idx = self.dialog.activeList.indexFromItem(item)
self.dialog.activeList.selectionModel().select(idx, mode)
# inactive
item = QListWidgetItem(icon, t.replace("_", " "))
self.dialog.inactiveList.addItem(item)
if t in noHash:
mode = QItemSelectionModel.Select
self.dialog.inactiveCheck.setChecked(True)
else:
mode = QItemSelectionModel.Deselect
idx = self.dialog.inactiveList.indexFromItem(item)
self.dialog.inactiveList.selectionModel().select(idx, mode)
def accept(self): def accept(self):
self.hide() self.hide()
self.deck.startProgress()
n = 0 n = 0
suspended = [] yes = []
for item in self.items: no = []
idx = self.dialog.list.indexFromItem(item) for c in range(self.dialog.activeList.count()):
if self.dialog.list.selectionModel().isSelected(idx): # active
suspended.append(self.tags[n]) item = self.dialog.activeList.item(c)
n += 1 idx = self.dialog.activeList.indexFromItem(item)
self.deck.suspended = canonifyTags(joinTags(suspended)) if self.dialog.activeList.selectionModel().isSelected(idx):
self.deck.setModified() yes.append(self.tags[c])
self.deck.updateAllPriorities(partial=True, dirty=False) # inactive
item = self.dialog.inactiveList.item(c)
idx = self.dialog.inactiveList.indexFromItem(item)
if self.dialog.inactiveList.selectionModel().isSelected(idx):
no.append(self.tags[c])
if self.dialog.activeCheck.isChecked():
self.deck.setVar(self.active, joinTags(yes))
else:
self.deck.setVar(self.active, "")
if self.dialog.inactiveCheck.isChecked():
self.deck.setVar(self.inactive, joinTags(no))
else:
self.deck.setVar(self.inactive, "")
self.parent.reset() self.parent.reset()
saveGeom(self, "activeTags") saveGeom(self, "activeTags")
self.deck.finishProgress()
QDialog.accept(self) QDialog.accept(self)
def onHelp(self): def onHelp(self):
QDesktopServices.openUrl(QUrl(ankiqt.appWiki + QDesktopServices.openUrl(QUrl(ankiqt.appWiki +
"ActiveTags")) "ActiveTags"))
def show(parent): def show(parent, active, inactive):
at = ActiveTagsChooser(parent) at = ActiveTagsChooser(parent, active, inactive)
at.exec_() at.exec_()

View file

@ -62,7 +62,6 @@ class DeckProperties(QDialog):
self.dialog.delay2.setText(unicode(self.d.delay2)) self.dialog.delay2.setText(unicode(self.d.delay2))
self.dialog.collapse.setCheckState(self.d.collapseTime self.dialog.collapse.setCheckState(self.d.collapseTime
and Qt.Checked or Qt.Unchecked) and Qt.Checked or Qt.Unchecked)
self.dialog.failedCardMax.setText(unicode(self.d.failedCardMax))
self.dialog.perDay.setCheckState(self.d.getBool("perDay") self.dialog.perDay.setCheckState(self.d.getBool("perDay")
and Qt.Checked or Qt.Unchecked) and Qt.Checked or Qt.Unchecked)
# sources # sources
@ -245,10 +244,6 @@ class DeckProperties(QDialog):
self.updateField(self.d, 'delay1', v2) self.updateField(self.d, 'delay1', v2)
v = float(self.dialog.delay2.text()) v = float(self.dialog.delay2.text())
self.updateField(self.d, 'delay2', min(v, 1)) self.updateField(self.d, 'delay2', min(v, 1))
v = int(self.dialog.failedCardMax.text())
if v == 1 or v < 0:
v = 2
self.updateField(self.d, 'failedCardMax', v)
except ValueError: except ValueError:
pass pass
try: try:

View file

@ -826,6 +826,7 @@ Debug info:\n%s""") % traceback.format_exc(), help="DeckErrors")
########################################################################## ##########################################################################
def onClose(self): def onClose(self):
# allow focusOut to save
if self.inMainWindow() or not self.app.activeWindow(): if self.inMainWindow() or not self.app.activeWindow():
isCram = self.isCramming() isCram = self.isCramming()
self.saveAndClose(hideWelcome=isCram) self.saveAndClose(hideWelcome=isCram)
@ -836,6 +837,8 @@ Debug info:\n%s""") % traceback.format_exc(), help="DeckErrors")
def saveAndClose(self, hideWelcome=False, parent=None): def saveAndClose(self, hideWelcome=False, parent=None):
"(Auto)save and close. Prompt if necessary. True if okay to proceed." "(Auto)save and close. Prompt if necessary. True if okay to proceed."
# allow any focusOut()s to run first
self.setFocus()
if not parent: if not parent:
parent = self parent = self
self.hideWelcome = hideWelcome self.hideWelcome = hideWelcome
@ -1465,6 +1468,7 @@ later by using File>Close.
########################################################################## ##########################################################################
def setupStudyScreen(self): def setupStudyScreen(self):
self.mainWin.buttonStack.hide()
self.mainWin.newCardOrder.insertItems( self.mainWin.newCardOrder.insertItems(
0, QStringList(newCardOrderLabels().values())) 0, QStringList(newCardOrderLabels().values()))
self.mainWin.newCardScheduling.insertItems( self.mainWin.newCardScheduling.insertItems(
@ -1475,9 +1479,10 @@ later by using File>Close.
SIGNAL("clicked()"), SIGNAL("clicked()"),
lambda: QDesktopServices.openUrl(QUrl( lambda: QDesktopServices.openUrl(QUrl(
ankiqt.appWiki + "StudyOptions"))) ankiqt.appWiki + "StudyOptions")))
self.mainWin.optionsBox.setShown(False)
self.connect(self.mainWin.minuteLimit, self.connect(self.mainWin.minuteLimit,
SIGNAL("textChanged(QString)"), self.onMinuteLimitChanged) SIGNAL("textChanged(QString)"), self.onMinuteLimitChanged)
self.connect(self.mainWin.questionLimit,
SIGNAL("textChanged(QString)"), self.onQuestionLimitChanged)
self.connect(self.mainWin.newPerDay, self.connect(self.mainWin.newPerDay,
SIGNAL("textChanged(QString)"), self.onNewLimitChanged) SIGNAL("textChanged(QString)"), self.onNewLimitChanged)
self.connect(self.mainWin.startReviewingButton, self.connect(self.mainWin.startReviewingButton,
@ -1485,6 +1490,37 @@ later by using File>Close.
self.onStartReview) self.onStartReview)
self.connect(self.mainWin.newCardOrder, self.connect(self.mainWin.newCardOrder,
SIGNAL("activated(int)"), self.onNewCardOrderChanged) SIGNAL("activated(int)"), self.onNewCardOrderChanged)
self.connect(self.mainWin.advancedOptions,
SIGNAL("clicked()"),
self.onAdvancedOptions)
self.connect(self.mainWin.failedCardMax,
SIGNAL("editingFinished()"),
self.onFailedMaxChanged)
self.connect(self.mainWin.newCategories,
SIGNAL("clicked()"), self.onNewCategoriesClicked)
self.connect(self.mainWin.revCategories,
SIGNAL("clicked()"), self.onRevCategoriesClicked)
def onNewCategoriesClicked(self):
ui.activetags.show(self, "newActive", "newInactive")
def onRevCategoriesClicked(self):
ui.activetags.show(self, "revActive", "revInactive")
def onFailedMaxChanged(self):
try:
v = int(self.mainWin.failedCardMax.text())
if v == 1 or v < 0:
v = 2
self.deck.failedCardMax = v
except ValueError:
pass
self.mainWin.failedCardMax.setText(str(self.deck.failedCardMax))
self.deck.flushMod()
def onAdvancedOptions(self):
self.onDeckProperties()
self.deckProperties.dialog.qtabwidget.setCurrentIndex(2)
def onMinuteLimitChanged(self, qstr): def onMinuteLimitChanged(self, qstr):
try: try:
@ -1497,6 +1533,17 @@ later by using File>Close.
self.deck.flushMod() self.deck.flushMod()
self.updateStudyStats() self.updateStudyStats()
def onQuestionLimitChanged(self, qstr):
try:
val = int(self.mainWin.questionLimit.text())
if self.deck.sessionRepLimit == val:
return
self.deck.sessionRepLimit = val
except ValueError:
pass
self.deck.flushMod()
self.updateStudyStats()
def onNewLimitChanged(self, qstr): def onNewLimitChanged(self, qstr):
try: try:
val = int(self.mainWin.newPerDay.text()) val = int(self.mainWin.newPerDay.text())
@ -1531,15 +1578,28 @@ later by using File>Close.
self.deck.finishProgress() self.deck.finishProgress()
uf(self.deck, 'newCardOrder', ncOrd) uf(self.deck, 'newCardOrder', ncOrd)
def updateActives(self):
labels = [
u"Show All Due Cards",
u"Show Chosen Categories"
]
if self.deck.getVar("newActive") or self.deck.getVar("newInactive"):
new = labels[1]
else:
new = labels[0]
self.mainWin.newCategoryLabel.setText(new)
if self.deck.getVar("revActive") or self.deck.getVar("revInactive"):
rev = labels[1]
else:
rev = labels[0]
self.mainWin.revCategoryLabel.setText(rev)
def updateStudyStats(self): def updateStudyStats(self):
self.deck.reset() self.deck.reset()
self.updateActives()
wasReached = self.deck.sessionLimitReached() wasReached = self.deck.sessionLimitReached()
sessionColour = '<font color=#0000ff>%s</font>' sessionColour = '<font color=#0000ff>%s</font>'
cardColour = '<font color=#0000ff>%s</font>' cardColour = '<font color=#0000ff>%s</font>'
if not wasReached:
top = _("<h1>Study Options</h1>")
else:
top = _("<h1>Well done!</h1>")
# top label # top label
h = {} h = {}
s = self.deck.getStats() s = self.deck.getStats()
@ -1574,15 +1634,15 @@ day = :d""", d=yesterday)
anki.utils.fmtTimeSpan(ttoday, short=True, point=1)) anki.utils.fmtTimeSpan(ttoday, short=True, point=1))
h['timeTodayChg'] = str(anki.utils.fmtTimeSpan( h['timeTodayChg'] = str(anki.utils.fmtTimeSpan(
tyest, short=True, point=1)) tyest, short=True, point=1))
h['cs_header'] = _("Cards/session:") h['cs_header'] = "<b>" + _("Cards/session:") + "</b>"
h['cd_header'] = _("Cards/day:") h['cd_header'] = "<b>" + _("Cards/day:") + "</b>"
h['td_header'] = _("Time/day:") h['td_header'] = "<b>" + _("Time/day:") + "</b>"
h['rd_header'] = _("Reviews due:") h['rd_header'] = "<b>" + _("Reviews due:") + "</b>"
h['ntod_header'] = _("New today:") h['ntod_header'] = "<b>" + _("New today:") + "</b>"
h['ntot_header'] = _("New total:") h['ntot_header'] = "<b>" + _("New total:") + "</b>"
stats1 = ("""\ stats1 = ("""\
<table> <table>
<tr><td width=80>%(cs_header)s</td><td width=50><b>%(repsInSesChg)s</b></td> <tr><td width=190>%(cs_header)s</td><td width=50><b>%(repsInSesChg)s</b></td>
<td><b>%(repsInSes)s</b></td></tr> <td><b>%(repsInSes)s</b></td></tr>
<tr><td>%(cd_header)s</td><td><b>%(repsTodayChg)s</b></td> <tr><td>%(cd_header)s</td><td><b>%(repsTodayChg)s</b></td>
<td><b>%(repsToday)s</b></td></tr> <td><b>%(repsToday)s</b></td></tr>
@ -1592,7 +1652,7 @@ day = :d""", d=yesterday)
stats2 = ("""\ stats2 = ("""\
<table> <table>
<tr><td width=100>%(rd_header)s</td><td align=right><b>%(ret)s</b></td></tr> <tr><td width=220>%(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>%(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> <tr><td>%(ntot_header)s</td><td align=right>%(newof)s</td></tr>
</table>""") % h </table>""") % h
@ -1603,10 +1663,11 @@ day = :d""", d=yesterday)
self.haveYesterday = True self.haveYesterday = True
stats1 = ( stats1 = (
"<td>%s</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>" % stats1) "<td>%s</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>" % stats1)
self.mainWin.optionsLabel.setText(top + """\ self.mainWin.optionsLabel.setText("""\
<p><table><tr> <p><table><tr>
%s %s
<td>%s</td></tr></table>""" % (stats1, stats2)) </tr><tr>
<td><hr>%s<hr></td></tr></table>""" % (stats1, stats2))
h['tt_header'] = _("Session Statistics") h['tt_header'] = _("Session Statistics")
h['cs_tip'] = _("The number of cards you studied in the current \ h['cs_tip'] = _("The number of cards you studied in the current \
session (blue) and previous session (black)") session (blue) and previous session (black)")
@ -1632,22 +1693,12 @@ learnt today")
def showStudyScreen(self): def showStudyScreen(self):
# forget last card # forget last card
self.lastCard = None self.lastCard = None
self.mainWin.optionsButton.setChecked(self.config['showStudyOptions'])
self.mainWin.optionsBox.setShown(self.config['showStudyOptions'])
self.switchToStudyScreen() self.switchToStudyScreen()
self.updateStudyStats() self.updateStudyStats()
# start reviewing button
self.mainWin.buttonStack.hide()
if self.reviewingStarted:
self.mainWin.startReviewingButton.setText(_("Continue &Reviewing"))
else:
self.mainWin.startReviewingButton.setText(_("Start &Reviewing"))
self.mainWin.startReviewingButton.setFocus() self.mainWin.startReviewingButton.setFocus()
self.setupStudyOptions() self.setupStudyOptions()
self.mainWin.studyOptionsFrame.setFixedWidth(300)
self.mainWin.studyOptionsFrame.show() self.mainWin.studyOptionsFrame.show()
if self.haveYesterday:
size = self.mainWin.optionsLabel.sizeHint().width() + 50
self.mainWin.studyOptionsFrame.setFixedWidth(size)
def setupStudyOptions(self): def setupStudyOptions(self):
self.mainWin.newPerDay.setText(str(self.deck.newCardsPerDay)) self.mainWin.newPerDay.setText(str(self.deck.newCardsPerDay))
@ -1666,6 +1717,7 @@ learnt today")
labels = failedCardOptionLabels().values()[0:-1] labels = failedCardOptionLabels().values()[0:-1]
self.mainWin.failedCardsOption.insertItems(0, labels) self.mainWin.failedCardsOption.insertItems(0, labels)
self.mainWin.failedCardsOption.setCurrentIndex(self.deck.getFailedCardPolicy()) self.mainWin.failedCardsOption.setCurrentIndex(self.deck.getFailedCardPolicy())
self.mainWin.failedCardMax.setText(unicode(self.deck.failedCardMax))
def onStartReview(self): def onStartReview(self):
def uf(obj, field, value): def uf(obj, field, value):
@ -1675,15 +1727,6 @@ learnt today")
self.mainWin.studyOptionsFrame.hide() self.mainWin.studyOptionsFrame.hide()
# make sure the size is updated before button stack shown # make sure the size is updated before button stack shown
self.app.processEvents() self.app.processEvents()
self.config['showStudyOptions'] = self.mainWin.optionsButton.isChecked()
try:
uf(self.deck, 'newCardsPerDay', int(self.mainWin.newPerDay.text()))
uf(self.deck, 'sessionTimeLimit', min(float(
self.mainWin.minuteLimit.text()), 3600) * 60)
uf(self.deck, 'sessionRepLimit',
int(self.mainWin.questionLimit.text()))
except (ValueError, OverflowError):
pass
uf(self.deck, 'newCardSpacing', uf(self.deck, 'newCardSpacing',
self.mainWin.newCardScheduling.currentIndex()) self.mainWin.newCardScheduling.currentIndex())
uf(self.deck, 'revCardOrder', uf(self.deck, 'revCardOrder',
@ -1890,9 +1933,6 @@ will be lost when you close the deck."""))
def onDonate(self): def onDonate(self):
QDesktopServices.openUrl(QUrl(ankiqt.appDonate)) QDesktopServices.openUrl(QUrl(ankiqt.appDonate))
def onActiveTags(self):
ui.activetags.show(self)
# Importing & exporting # Importing & exporting
########################################################################## ##########################################################################
@ -2374,7 +2414,6 @@ Are you sure?""" % deckName),
"Graphs", "Graphs",
"Dstats", "Dstats",
"Cstats", "Cstats",
"ActiveTags",
"StudyOptions", "StudyOptions",
) )
@ -2426,7 +2465,6 @@ Are you sure?""" % deckName),
self.connect(m.actionOpenPluginFolder, s, self.onOpenPluginFolder) self.connect(m.actionOpenPluginFolder, s, self.onOpenPluginFolder)
self.connect(m.actionEnableAllPlugins, s, self.onEnableAllPlugins) self.connect(m.actionEnableAllPlugins, s, self.onEnableAllPlugins)
self.connect(m.actionDisableAllPlugins, s, self.onDisableAllPlugins) self.connect(m.actionDisableAllPlugins, s, self.onDisableAllPlugins)
self.connect(m.actionActiveTags, s, self.onActiveTags)
self.connect(m.actionReleaseNotes, s, self.onReleaseNotes) self.connect(m.actionReleaseNotes, s, self.onReleaseNotes)
self.connect(m.actionCacheLatex, s, self.onCacheLatex) self.connect(m.actionCacheLatex, s, self.onCacheLatex)
self.connect(m.actionUncacheLatex, s, self.onUncacheLatex) self.connect(m.actionUncacheLatex, s, self.onUncacheLatex)
@ -2980,8 +3018,6 @@ Consider backing up your media directory first."""))
def changeLayoutSpacing(self): def changeLayoutSpacing(self):
if sys.platform.startswith("darwin"): if sys.platform.startswith("darwin"):
self.mainWin.studyOptionsReviewBar.setContentsMargins(0, 20, 0, 0) self.mainWin.studyOptionsReviewBar.setContentsMargins(0, 20, 0, 0)
self.mainWin.optionsBox.layout().setSpacing(10)
self.mainWin.optionsBox.layout().setContentsMargins(4, 10, 4, 4)
# Proxy support # Proxy support
########################################################################## ##########################################################################

View file

@ -11,27 +11,48 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Inactive Tags</string> <string>Selective Study</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Cards with any of the selected tags below will not be shown.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_2"> <layout class="QHBoxLayout" name="horizontalLayout_2">
<item> <item>
<widget class="QListWidget" name="list"> <layout class="QVBoxLayout" name="verticalLayout_2">
<property name="selectionMode"> <item>
<enum>QAbstractItemView::MultiSelection</enum> <widget class="QCheckBox" name="activeCheck">
</property> <property name="text">
</widget> <string>Show only cards with these tags:</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="activeList">
<property name="enabled">
<bool>false</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::MultiSelection</enum>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="inactiveCheck">
<property name="text">
<string>Hide cards with these tags:</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="inactiveList">
<property name="enabled">
<bool>false</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::MultiSelection</enum>
</property>
</widget>
</item>
</layout>
</item> </item>
<item> <item>
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
@ -56,8 +77,8 @@
<slot>accept()</slot> <slot>accept()</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
<x>248</x> <x>358</x>
<y>254</y> <y>264</y>
</hint> </hint>
<hint type="destinationlabel"> <hint type="destinationlabel">
<x>157</x> <x>157</x>
@ -81,5 +102,37 @@
</hint> </hint>
</hints> </hints>
</connection> </connection>
<connection>
<sender>activeCheck</sender>
<signal>toggled(bool)</signal>
<receiver>activeList</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>133</x>
<y>18</y>
</hint>
<hint type="destinationlabel">
<x>133</x>
<y>85</y>
</hint>
</hints>
</connection>
<connection>
<sender>inactiveCheck</sender>
<signal>toggled(bool)</signal>
<receiver>inactiveList</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>146</x>
<y>213</y>
</hint>
<hint type="destinationlabel">
<x>68</x>
<y>276</y>
</hint>
</hints>
</connection>
</connections> </connections>
</ui> </ui>

View file

@ -486,40 +486,14 @@
</item> </item>
<item> <item>
<layout class="QGridLayout" name="gridLayout_5"> <layout class="QGridLayout" name="gridLayout_5">
<item row="1" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>&lt;b&gt;Maximum failed cards&lt;/b&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<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>
<item row="1" column="2">
<widget class="QLineEdit" name="failedCardMax"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_29"> <widget class="QLabel" name="label_29">
<property name="text"> <property name="text">
<string>&lt;b&gt;New day starts at&lt;/b&gt;</string> <string>&lt;b&gt;New day starts at&lt;/b&gt;</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="2" column="1">
<spacer name="horizontalSpacer_3"> <spacer name="horizontalSpacer_3">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -532,7 +506,7 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="3" column="2"> <item row="2" column="2">
<widget class="QLineEdit" name="timeOffset"/> <widget class="QLineEdit" name="timeOffset"/>
</item> </item>
<item row="0" column="0"> <item row="0" column="0">
@ -565,38 +539,38 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_11"> <widget class="QLabel" name="label_11">
<property name="text"> <property name="text">
<string>&lt;b&gt;Suspend leeches&lt;/b&gt;</string> <string>&lt;b&gt;Suspend leeches&lt;/b&gt;</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="2"> <item row="3" column="2">
<widget class="QCheckBox" name="suspendLeeches"> <widget class="QCheckBox" name="suspendLeeches">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_15"> <widget class="QLabel" name="label_15">
<property name="text"> <property name="text">
<string>&lt;b&gt;Leech failure threshold&lt;/b&gt;</string> <string>&lt;b&gt;Leech failure threshold&lt;/b&gt;</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="2"> <item row="4" column="2">
<widget class="QSpinBox" name="leechFails"/> <widget class="QSpinBox" name="leechFails"/>
</item> </item>
<item row="6" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_23"> <widget class="QLabel" name="label_23">
<property name="text"> <property name="text">
<string>&lt;b&gt;Per-day scheduling&lt;/b&gt;</string> <string>&lt;b&gt;Per-day scheduling&lt;/b&gt;</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="2"> <item row="1" column="2">
<widget class="QCheckBox" name="perDay"> <widget class="QCheckBox" name="perDay">
<property name="text"> <property name="text">
<string/> <string/>
@ -658,11 +632,10 @@
<tabstop>easyMin</tabstop> <tabstop>easyMin</tabstop>
<tabstop>easyMax</tabstop> <tabstop>easyMax</tabstop>
<tabstop>collapse</tabstop> <tabstop>collapse</tabstop>
<tabstop>failedCardMax</tabstop> <tabstop>perDay</tabstop>
<tabstop>timeOffset</tabstop> <tabstop>timeOffset</tabstop>
<tabstop>suspendLeeches</tabstop> <tabstop>suspendLeeches</tabstop>
<tabstop>leechFails</tabstop> <tabstop>leechFails</tabstop>
<tabstop>perDay</tabstop>
<tabstop>buttonBox</tabstop> <tabstop>buttonBox</tabstop>
</tabstops> </tabstops>
<resources/> <resources/>

View file

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>617</width> <width>605</width>
<height>563</height> <height>563</height>
</rect> </rect>
</property> </property>
@ -774,30 +774,23 @@
<item> <item>
<widget class="QFrame" name="studyOptionsFrame"> <widget class="QFrame" name="studyOptionsFrame">
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::StyledPanel</enum> <enum>QFrame::NoFrame</enum>
</property> </property>
<property name="frameShadow"> <property name="frameShadow">
<enum>QFrame::Raised</enum> <enum>QFrame::Raised</enum>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_6"> <layout class="QVBoxLayout" name="verticalLayout_6">
<property name="margin">
<number>0</number>
</property>
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_11"> <layout class="QVBoxLayout" name="verticalLayout_11">
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
</property> </property>
<property name="margin"> <property name="margin">
<number>10</number> <number>0</number>
</property> </property>
<item>
<widget class="QLabel" name="optionsLabel">
<property name="text">
<string/>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item> <item>
<spacer name="verticalSpacer_4"> <spacer name="verticalSpacer_4">
<property name="orientation"> <property name="orientation">
@ -815,185 +808,503 @@
</spacer> </spacer>
</item> </item>
<item> <item>
<widget class="Line" name="line_2"> <widget class="QTabWidget" name="tabWidget">
<property name="maximumSize"> <property name="tabShape">
<size> <enum>QTabWidget::Rounded</enum>
<width>400</width>
<height>16777215</height>
</size>
</property> </property>
<property name="orientation"> <property name="currentIndex">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="studyOptionsLayout1">
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="horizontalSpacing">
<number>0</number> <number>0</number>
</property> </property>
<property name="verticalSpacing"> <widget class="QWidget" name="tab">
<number>6</number> <attribute name="title">
</property> <string>New Cards</string>
<item row="1" column="0"> </attribute>
<widget class="QLabel" name="label_20"> <layout class="QVBoxLayout" name="verticalLayout_19">
<property name="minimumSize"> <property name="leftMargin">
<size> <number>15</number>
<width>140</width>
<height>0</height>
</size>
</property> </property>
<property name="toolTip"> <property name="topMargin">
<string>The &lt;b&gt;number of minutes in a session&lt;/b&gt;. When a session is finished, this screen will be shown again, allowing you to start another session. Choose 0 for no limit.</string> <number>15</number>
</property> </property>
<property name="text"> <property name="rightMargin">
<string>&lt;b&gt;Session limit (minutes):&lt;/b&gt;</string> <number>15</number>
</property> </property>
<property name="margin"> <property name="bottomMargin">
<number>4</number> <number>0</number>
</property> </property>
</widget> <item>
</item> <layout class="QGridLayout" name="studyOptionsLayout1">
<item row="1" column="1"> <property name="leftMargin">
<widget class="QLineEdit" name="minuteLimit"> <number>2</number>
<property name="sizePolicy"> </property>
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <property name="topMargin">
<horstretch>0</horstretch> <number>0</number>
<verstretch>0</verstretch> </property>
</sizepolicy> <property name="horizontalSpacing">
<number>0</number>
</property>
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_22">
<property name="minimumSize">
<size>
<width>140</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>The maximum number of &lt;b&gt;new cards shown per day&lt;/b&gt;. The default is 20, to ensure you don't get overwhelmed with reviews after a few days.</string>
</property>
<property name="text">
<string>&lt;b&gt;New Cards/Day:&lt;/b&gt;</string>
</property>
<property name="margin">
<number>0</number>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="3">
<widget class="QLineEdit" name="newPerDay">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_12">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>&lt;b&gt;Display Order:&lt;/b&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="newCardOrder"/>
</item>
<item>
<widget class="QComboBox" name="newCardScheduling"/>
</item>
<item>
<spacer name="verticalSpacer_14">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>&lt;b&gt;Selective Study:&lt;/b&gt;</string>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="2">
<widget class="QPushButton" name="newCategories">
<property name="text">
<string>&amp;Change</string>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0">
<widget class="QLabel" name="newCategoryLabel">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</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>15</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Reviews</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
<property name="leftMargin">
<number>15</number>
</property> </property>
<property name="maximumSize"> <property name="topMargin">
<size> <number>15</number>
<width>50</width>
<height>16777215</height>
</size>
</property> </property>
</widget> <property name="rightMargin">
</item> <number>15</number>
<item row="0" column="0">
<widget class="QLabel" name="label_22">
<property name="minimumSize">
<size>
<width>140</width>
<height>0</height>
</size>
</property> </property>
<property name="toolTip"> <property name="bottomMargin">
<string>The maximum number of &lt;b&gt;new cards shown per day&lt;/b&gt;. The default is 20, to ensure you don't get overwhelmed with reviews after a few days.</string> <number>8</number>
</property> </property>
<property name="text"> <item>
<string>&lt;b&gt;New cards per day:&lt;/b&gt;</string> <layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>&lt;b&gt;Max Failed Cards:&lt;/b&gt;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2">
<widget class="QLineEdit" name="failedCardMax">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_15">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>&lt;b&gt;Display Order:&lt;/b&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="revCardOrder"/>
</item>
<item>
<widget class="QComboBox" name="failedCardsOption"/>
</item>
<item>
<spacer name="verticalSpacer_16">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>&lt;b&gt;Selective Study:&lt;/b&gt;</string>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_7">
<item row="1" column="2">
<widget class="QPushButton" name="revCategories">
<property name="text">
<string>&amp;Change</string>
</property>
</widget>
</item>
<item row="1" column="1">
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QLabel" name="revCategoryLabel">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_11">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>15</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QPushButton" name="advancedOptions">
<property name="text">
<string>&amp;Advanced</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Timeboxing</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_20">
<property name="leftMargin">
<number>15</number>
</property> </property>
<property name="margin"> <property name="topMargin">
<number>4</number> <number>5</number>
</property> </property>
</widget> <property name="rightMargin">
</item> <number>15</number>
<item row="0" column="1">
<widget class="QLineEdit" name="newPerDay">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<property name="maximumSize"> <property name="bottomMargin">
<size> <number>0</number>
<width>50</width>
<height>16777215</height>
</size>
</property> </property>
</widget> <item>
</item> <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="2"> <item row="0" column="0">
<spacer name="horizontalSpacer_3"> <spacer name="horizontalSpacer_4">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>40</width> <width>40</width>
<height>20</height> <height>20</height>
</size> </size>
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="2" column="1"> <item row="0" column="1">
<widget class="QLineEdit" name="questionLimit"> <widget class="QLabel" name="optionsLabel">
<property name="sizePolicy"> <property name="text">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <string/>
<horstretch>0</horstretch> </property>
<verstretch>0</verstretch> <property name="textInteractionFlags">
</sizepolicy> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property> </property>
<property name="maximumSize"> </widget>
<size> </item>
<width>50</width> <item row="0" column="2">
<height>16777215</height> <spacer name="horizontalSpacer_5">
</size> <property name="orientation">
</property> <enum>Qt::Horizontal</enum>
</widget> </property>
</item> <property name="sizeHint" stdset="0">
<item row="2" column="0"> <size>
<widget class="QLabel" name="label"> <width>40</width>
<property name="toolTip"> <height>20</height>
<string>The &lt;b&gt;number of questions in a session&lt;/b&gt;. When a session is finished, this screen will be shown again, allowing you to start another session. Choose 0 for no limit.</string> </size>
</property> </property>
<property name="text"> </spacer>
<string>&lt;b&gt;Session limit (questions):&lt;/b&gt;</string> </item>
</property> </layout>
<property name="margin"> </item>
<number>4</number> <item>
</property> <layout class="QGridLayout" name="gridLayout_2">
</widget> <item row="0" column="0">
</item> <widget class="QLabel" name="label_20">
</layout> <property name="minimumSize">
<size>
<width>140</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>The &lt;b&gt;number of minutes in a session&lt;/b&gt;. When a session is finished, this screen will be shown again, allowing you to start another session. Choose 0 for no limit.</string>
</property>
<property name="text">
<string>&lt;b&gt;Session limit (minutes):&lt;/b&gt;</string>
</property>
<property name="margin">
<number>4</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="minuteLimit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="toolTip">
<string>The &lt;b&gt;number of questions in a session&lt;/b&gt;. When a session is finished, this screen will be shown again, allowing you to start another session. Choose 0 for no limit.</string>
</property>
<property name="text">
<string>&lt;b&gt;Session limit (questions):&lt;/b&gt;</string>
</property>
<property name="margin">
<number>4</number>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="questionLimit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_13">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>15</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item> </item>
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_12"> <layout class="QVBoxLayout" name="verticalLayout_12">
<item>
<widget class="QWidget" name="optionsBox" native="true">
<layout class="QVBoxLayout" name="verticalLayout_7">
<property name="spacing">
<number>10</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QComboBox" name="newCardOrder"/>
</item>
<item>
<widget class="QComboBox" name="newCardScheduling"/>
</item>
<item>
<widget class="QComboBox" name="revCardOrder"/>
</item>
<item>
<widget class="QComboBox" name="failedCardsOption"/>
</item>
</layout>
</widget>
</item>
<item> <item>
<layout class="QGridLayout" name="studyOptionsReviewBar"> <layout class="QGridLayout" name="studyOptionsReviewBar">
<property name="topMargin"> <property name="topMargin">
<number>20</number> <number>10</number>
</property> </property>
<property name="horizontalSpacing"> <property name="horizontalSpacing">
<number>10</number> <number>10</number>
@ -1028,28 +1339,6 @@
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QPushButton" name="optionsButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>26</height>
</size>
</property>
<property name="text">
<string>More</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="optionsHelpButton"> <widget class="QPushButton" name="optionsHelpButton">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@ -2715,7 +3004,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>617</width> <width>605</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>
@ -2835,8 +3124,6 @@
<addaction name="menuStartup"/> <addaction name="menuStartup"/>
<addaction name="separator"/> <addaction name="separator"/>
</widget> </widget>
<addaction name="actionActiveTags"/>
<addaction name="separator"/>
<addaction name="actionStudyOptions"/> <addaction name="actionStudyOptions"/>
<addaction name="actionDisplayProperties"/> <addaction name="actionDisplayProperties"/>
<addaction name="actionDeckProperties"/> <addaction name="actionDeckProperties"/>
@ -3476,51 +3763,38 @@
</action> </action>
</widget> </widget>
<tabstops> <tabstops>
<tabstop>newPerDay</tabstop> <tabstop>easeButton3</tabstop>
<tabstop>minuteLimit</tabstop> <tabstop>easeButton4</tabstop>
<tabstop>questionLimit</tabstop>
<tabstop>newCardOrder</tabstop>
<tabstop>newCardScheduling</tabstop>
<tabstop>revCardOrder</tabstop>
<tabstop>failedCardsOption</tabstop>
<tabstop>startReviewingButton</tabstop>
<tabstop>optionsButton</tabstop>
<tabstop>optionsHelpButton</tabstop>
<tabstop>learnMoreButton</tabstop> <tabstop>learnMoreButton</tabstop>
<tabstop>reviewEarlyButton</tabstop> <tabstop>reviewEarlyButton</tabstop>
<tabstop>finishButton</tabstop> <tabstop>finishButton</tabstop>
<tabstop>downloadDeckButton</tabstop> <tabstop>downloadDeckButton</tabstop>
<tabstop>newDeckButton</tabstop> <tabstop>newDeckButton</tabstop>
<tabstop>importDeckButton</tabstop> <tabstop>importDeckButton</tabstop>
<tabstop>newPerDay</tabstop>
<tabstop>newCardOrder</tabstop>
<tabstop>newCardScheduling</tabstop>
<tabstop>newCategories</tabstop>
<tabstop>startReviewingButton</tabstop>
<tabstop>optionsHelpButton</tabstop>
<tabstop>failedCardMax</tabstop>
<tabstop>revCardOrder</tabstop>
<tabstop>failedCardsOption</tabstop>
<tabstop>revCategories</tabstop>
<tabstop>advancedOptions</tabstop>
<tabstop>minuteLimit</tabstop>
<tabstop>questionLimit</tabstop>
<tabstop>welcomeText</tabstop>
<tabstop>saveEditorButton</tabstop>
<tabstop>easeButton1</tabstop> <tabstop>easeButton1</tabstop>
<tabstop>easeButton2</tabstop> <tabstop>easeButton2</tabstop>
<tabstop>easeButton3</tabstop>
<tabstop>easeButton4</tabstop>
<tabstop>saveEditorButton</tabstop>
<tabstop>showAnswerButton</tabstop> <tabstop>showAnswerButton</tabstop>
<tabstop>help</tabstop> <tabstop>help</tabstop>
<tabstop>noticeButton</tabstop> <tabstop>noticeButton</tabstop>
<tabstop>welcomeText</tabstop> <tabstop>tabWidget</tabstop>
</tabstops> </tabstops>
<resources> <resources>
<include location="../icons.qrc"/> <include location="../icons.qrc"/>
</resources> </resources>
<connections> <connections/>
<connection>
<sender>optionsButton</sender>
<signal>toggled(bool)</signal>
<receiver>optionsBox</receiver>
<slot>setShown(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>218</x>
<y>250</y>
</hint>
<hint type="destinationlabel">
<x>222</x>
<y>300</y>
</hint>
</hints>
</connection>
</connections>
</ui> </ui>