mirror of
https://github.com/ankitects/anki.git
synced 2025-09-25 01:06:35 -04:00
timeboxing, save fix, pref tweaks
This commit is contained in:
parent
914fc45666
commit
bcfb876664
7 changed files with 494 additions and 38 deletions
|
@ -69,8 +69,10 @@ class Config(dict):
|
||||||
'qaDivider': True,
|
'qaDivider': True,
|
||||||
'splitQA': True,
|
'splitQA': True,
|
||||||
'sortIndex': 0,
|
'sortIndex': 0,
|
||||||
'addZeroSpace': True,
|
'addZeroSpace': False,
|
||||||
'alternativeTheme': False,
|
'alternativeTheme': False,
|
||||||
|
'showStudyScreen': True,
|
||||||
|
'showStudyOptions': False,
|
||||||
}
|
}
|
||||||
for (k,v) in fields.items():
|
for (k,v) in fields.items():
|
||||||
if not self.has_key(k):
|
if not self.has_key(k):
|
||||||
|
|
|
@ -19,6 +19,8 @@ from anki.media import rebuildMediaDir
|
||||||
from anki.db import OperationalError
|
from anki.db import OperationalError
|
||||||
from anki.stdmodels import BasicModel
|
from anki.stdmodels import BasicModel
|
||||||
from anki.hooks import runHook, addHook, removeHook, _hooks
|
from anki.hooks import runHook, addHook, removeHook, _hooks
|
||||||
|
from anki.deck import newCardOrderLabels, newCardSchedulingLabels
|
||||||
|
from anki.deck import revCardOrderLabels
|
||||||
import anki.latex
|
import anki.latex
|
||||||
import anki.lang
|
import anki.lang
|
||||||
import anki.deck
|
import anki.deck
|
||||||
|
@ -50,6 +52,7 @@ class AnkiQt(QMainWindow):
|
||||||
self.restoreGeometry(self.config['mainWindowGeom'])
|
self.restoreGeometry(self.config['mainWindowGeom'])
|
||||||
self.setupViews()
|
self.setupViews()
|
||||||
self.setupEditor()
|
self.setupEditor()
|
||||||
|
self.setupStudyScreen()
|
||||||
self.setupButtons()
|
self.setupButtons()
|
||||||
self.setupAnchors()
|
self.setupAnchors()
|
||||||
self.setupToolbar()
|
self.setupToolbar()
|
||||||
|
@ -195,9 +198,9 @@ Please do not file a bug report with Anki.\n\n""")
|
||||||
self.state = state
|
self.state = state
|
||||||
self.updateTitleBar()
|
self.updateTitleBar()
|
||||||
if 'state' != 'noDeck' and state != 'editCurrentFact':
|
if 'state' != 'noDeck' and state != 'editCurrentFact':
|
||||||
self.showReviewScreen()
|
self.switchToReviewScreen()
|
||||||
if state == "noDeck":
|
if state == "noDeck":
|
||||||
self.showWelcomeScreen()
|
self.switchToWelcomeScreen()
|
||||||
self.help.hide()
|
self.help.hide()
|
||||||
self.currentCard = None
|
self.currentCard = None
|
||||||
self.lastCard = None
|
self.lastCard = None
|
||||||
|
@ -218,12 +221,17 @@ Please do not file a bug report with Anki.\n\n""")
|
||||||
# if the same card is being shown and it's not
|
# if the same card is being shown and it's not
|
||||||
# due yet, give up
|
# due yet, give up
|
||||||
return self.moveToState("deckFinished")
|
return self.moveToState("deckFinished")
|
||||||
|
if (self.config['showStudyScreen'] and
|
||||||
|
not self.deck.sessionStartTime):
|
||||||
|
return self.moveToState("studyScreen")
|
||||||
|
if self.deck.sessionLimitReached():
|
||||||
|
return self.moveToState("studyScreen")
|
||||||
self.enableCardMenuItems()
|
self.enableCardMenuItems()
|
||||||
return self.moveToState("showQuestion")
|
return self.moveToState("showQuestion")
|
||||||
else:
|
else:
|
||||||
return self.moveToState("deckFinished")
|
return self.moveToState("deckFinished")
|
||||||
elif state == "deckEmpty":
|
elif state == "deckEmpty":
|
||||||
self.showWelcomeScreen()
|
self.switchToWelcomeScreen()
|
||||||
self.disableCardMenuItems()
|
self.disableCardMenuItems()
|
||||||
elif state == "deckFinished":
|
elif state == "deckFinished":
|
||||||
self.deck.s.flush()
|
self.deck.s.flush()
|
||||||
|
@ -250,6 +258,10 @@ Please do not file a bug report with Anki.\n\n""")
|
||||||
self.deck.s.flush()
|
self.deck.s.flush()
|
||||||
self.deck.refresh()
|
self.deck.refresh()
|
||||||
return self.moveToState("auto")
|
return self.moveToState("auto")
|
||||||
|
elif state == "studyScreen":
|
||||||
|
self.currentCard = None
|
||||||
|
self.disableCardMenuItems()
|
||||||
|
self.showStudyScreen()
|
||||||
self.updateViews(state)
|
self.updateViews(state)
|
||||||
|
|
||||||
def keyPressEvent(self, evt):
|
def keyPressEvent(self, evt):
|
||||||
|
@ -379,16 +391,19 @@ new:
|
||||||
# Main stack
|
# Main stack
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
def showWelcomeScreen(self):
|
def switchToWelcomeScreen(self):
|
||||||
self.mainWin.mainStack.setCurrentIndex(1)
|
self.mainWin.mainStack.setCurrentIndex(1)
|
||||||
self.hideButtons()
|
self.hideButtons()
|
||||||
|
|
||||||
def showEditScreen(self):
|
def switchToEditScreen(self):
|
||||||
self.mainWin.mainStack.setCurrentIndex(2)
|
self.mainWin.mainStack.setCurrentIndex(2)
|
||||||
|
|
||||||
def showReviewScreen(self):
|
def switchToStudyScreen(self):
|
||||||
self.mainWin.mainStack.setCurrentIndex(3)
|
self.mainWin.mainStack.setCurrentIndex(3)
|
||||||
|
|
||||||
|
def switchToReviewScreen(self):
|
||||||
|
self.mainWin.mainStack.setCurrentIndex(4)
|
||||||
|
|
||||||
# Buttons
|
# Buttons
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
@ -772,9 +787,10 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
|
||||||
return self.onSaveAs()
|
return self.onSaveAs()
|
||||||
return
|
return
|
||||||
if not self.deck.modifiedSinceSave():
|
if not self.deck.modifiedSinceSave():
|
||||||
return
|
return True
|
||||||
self.deck.save()
|
self.deck.save()
|
||||||
self.updateTitleBar()
|
self.updateTitleBar()
|
||||||
|
return True
|
||||||
|
|
||||||
def onSaveAs(self):
|
def onSaveAs(self):
|
||||||
"Prompt for a file name, then save."
|
"Prompt for a file name, then save."
|
||||||
|
@ -892,7 +908,7 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
|
||||||
|
|
||||||
def showEditor(self):
|
def showEditor(self):
|
||||||
self.showSaveEditorButton()
|
self.showSaveEditorButton()
|
||||||
self.showEditScreen()
|
self.switchToEditScreen()
|
||||||
self.editor.setFact(self.currentCard.fact)
|
self.editor.setFact(self.currentCard.fact)
|
||||||
|
|
||||||
def onFactValid(self, fact):
|
def onFactValid(self, fact):
|
||||||
|
@ -901,6 +917,108 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
|
||||||
def onFactInvalid(self, fact):
|
def onFactInvalid(self, fact):
|
||||||
self.mainWin.saveEditorButton.setEnabled(False)
|
self.mainWin.saveEditorButton.setEnabled(False)
|
||||||
|
|
||||||
|
# Study screen
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
def setupStudyScreen(self):
|
||||||
|
self.mainWin.newCardOrder.insertItems(
|
||||||
|
0, QStringList(newCardOrderLabels().values()))
|
||||||
|
self.mainWin.newCardScheduling.insertItems(
|
||||||
|
0, QStringList(newCardSchedulingLabels().values()))
|
||||||
|
self.mainWin.revCardOrder.insertItems(
|
||||||
|
0, QStringList(revCardOrderLabels().values()))
|
||||||
|
self.connect(self.mainWin.optionsHelpButton,
|
||||||
|
SIGNAL("clicked()"),
|
||||||
|
lambda: QDesktopServices.openUrl(QUrl(
|
||||||
|
ankiqt.appWiki + "StudyOptions")))
|
||||||
|
|
||||||
|
def showStudyScreen(self):
|
||||||
|
self.switchToStudyScreen()
|
||||||
|
self.mainWin.optionsButton.setChecked(self.config['showStudyOptions'])
|
||||||
|
self.mainWin.optionsBox.setShown(self.config['showStudyOptions'])
|
||||||
|
initial = self.deck.sessionStartTime == 0
|
||||||
|
if initial or not self.deck.sessionLimitReached():
|
||||||
|
# deck just opened, or screen triggered manually
|
||||||
|
top = _("<h1>Welcome back!</h1>")
|
||||||
|
else:
|
||||||
|
top = _("<h1>Well done!</h1>")
|
||||||
|
# top label
|
||||||
|
h = {}
|
||||||
|
s = self.deck.getStats()
|
||||||
|
h['lapsed'] = '<font color=#990000>%s</font>' % s['failed']
|
||||||
|
h['ret'] = s['rev']
|
||||||
|
h['new'] = '<font color=#0000ff>%s</font>' % s['new']
|
||||||
|
h['repsToday'] = '<font color=#007700>%s</font>' % s['dTotal']
|
||||||
|
h['repsIn5'] = '<font color=#007700>%s</font>' % self.deck.s.scalar(
|
||||||
|
"select count(*) from reviewHistory where time > :t",
|
||||||
|
t = time.time() - 300)
|
||||||
|
h['timeToday'] = '<font color=#007700>%s</font>' % (
|
||||||
|
anki.utils.fmtTimeSpan(s['dReviewTime'], short=True))
|
||||||
|
self.mainWin.optionsLabel.setText(top + _("""\
|
||||||
|
<p>
|
||||||
|
<table width=300>
|
||||||
|
<tr><td>
|
||||||
|
<table>
|
||||||
|
<tr><td>Reps done today:</td><td align=right><b>%(repsToday)s</b></td></tr>
|
||||||
|
<tr><td>Reps in last 5 mins:</td><td align=right><b>%(repsIn5)s</b></td></tr>
|
||||||
|
<tr><td>Total time today:</td><td align=right><b>%(timeToday)s</b></td></tr>
|
||||||
|
</table></td>
|
||||||
|
<td><table>
|
||||||
|
<tr><td>Lapsed due:</td><td align=right><b>%(lapsed)s</b></td></tr>
|
||||||
|
<tr><td>Retained due:</td><td align=right><b>%(ret)s</b></td></tr>
|
||||||
|
<tr><td>New due:</td><td align=right><b>%(new)s</b></td></tr>
|
||||||
|
</table></td></tr></table>""") % h)
|
||||||
|
# start reviewing button
|
||||||
|
self.mainWin.buttonStack.setCurrentIndex(3)
|
||||||
|
self.mainWin.buttonStack.show()
|
||||||
|
if initial:
|
||||||
|
self.mainWin.startReviewingButton.setText(_("Start &Reviewing"))
|
||||||
|
else:
|
||||||
|
self.mainWin.startReviewingButton.setText(_("Continue &Reviewing"))
|
||||||
|
self.mainWin.startReviewingButton.setFocus()
|
||||||
|
self.connect(self.mainWin.startReviewingButton,
|
||||||
|
SIGNAL("clicked()"),
|
||||||
|
self.onStartReview)
|
||||||
|
self.setupStudyOptions()
|
||||||
|
|
||||||
|
def setupStudyOptions(self):
|
||||||
|
self.mainWin.newPerDay.setText(str(self.deck.newCardsPerDay))
|
||||||
|
self.mainWin.minuteLimit.setText(str(self.deck.sessionTimeLimit/60.0))
|
||||||
|
self.mainWin.questionLimit.setText(str(self.deck.sessionRepLimit))
|
||||||
|
self.mainWin.newCardOrder.setCurrentIndex(self.deck.newCardOrder)
|
||||||
|
self.mainWin.newCardScheduling.setCurrentIndex(self.deck.newCardSpacing)
|
||||||
|
self.mainWin.revCardOrder.setCurrentIndex(self.deck.revCardOrder)
|
||||||
|
self.mainWin.delayLapsedCards.setChecked(not self.deck.delay0)
|
||||||
|
|
||||||
|
def onStartReview(self):
|
||||||
|
self.config['showStudyOptions'] = self.mainWin.optionsButton.isChecked()
|
||||||
|
try:
|
||||||
|
self.deck.newCardsPerDay = int(self.mainWin.newPerDay.text())
|
||||||
|
self.deck.sessionTimeLimit = float(
|
||||||
|
self.mainWin.minuteLimit.text()) * 60
|
||||||
|
self.deck.sessionRepLimit = int(self.mainWin.questionLimit.text())
|
||||||
|
except (ValueError, OverflowError):
|
||||||
|
pass
|
||||||
|
self.deck.newCardOrder = self.mainWin.newCardOrder.currentIndex()
|
||||||
|
self.deck.newCardSpacing = self.mainWin.newCardScheduling.currentIndex()
|
||||||
|
self.deck.revCardOrder = self.mainWin.revCardOrder.currentIndex()
|
||||||
|
# avoid clobbering the user's settings if they haven't changed
|
||||||
|
if self.deck.delay0 and self.mainWin.delayLapsedCards.isChecked():
|
||||||
|
self.deck.delay0 = 0
|
||||||
|
elif (not self.deck.delay0 and
|
||||||
|
not self.mainWin.delayLapsedCards.isChecked()):
|
||||||
|
self.deck.delay0 = 600
|
||||||
|
if not self.deck.sessionStartTime or self.deck.sessionLimitReached():
|
||||||
|
self.deck.startSession()
|
||||||
|
self.deck.flushMod()
|
||||||
|
self.moveToState("getQuestion")
|
||||||
|
|
||||||
|
def onStudyOptions(self):
|
||||||
|
if self.state == "studyScreen":
|
||||||
|
self.onStartReview()
|
||||||
|
else:
|
||||||
|
self.moveToState("studyScreen")
|
||||||
|
|
||||||
# Toolbar
|
# Toolbar
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
@ -917,8 +1035,9 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
|
||||||
mw.toolBar.addAction(mw.actionAddcards)
|
mw.toolBar.addAction(mw.actionAddcards)
|
||||||
mw.toolBar.addAction(mw.actionEditCurrent)
|
mw.toolBar.addAction(mw.actionEditCurrent)
|
||||||
mw.toolBar.addAction(mw.actionEditdeck)
|
mw.toolBar.addAction(mw.actionEditdeck)
|
||||||
mw.toolBar.addAction(mw.actionMarkCard)
|
|
||||||
mw.toolBar.addAction(mw.actionGraphs)
|
mw.toolBar.addAction(mw.actionGraphs)
|
||||||
|
mw.toolBar.addAction(mw.actionStudyOptions)
|
||||||
|
mw.toolBar.addAction(mw.actionMarkCard)
|
||||||
mw.toolBar.addAction(mw.actionRepeatAudio)
|
mw.toolBar.addAction(mw.actionRepeatAudio)
|
||||||
self.addToolBar(Qt.TopToolBarArea, mw.toolBar)
|
self.addToolBar(Qt.TopToolBarArea, mw.toolBar)
|
||||||
mw.toolBar.setIconSize(QSize(self.config['iconSize'],
|
mw.toolBar.setIconSize(QSize(self.config['iconSize'],
|
||||||
|
@ -1248,7 +1367,7 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
|
||||||
self.connect(self.syncThread, SIGNAL("updateSyncProgress"), self.updateSyncProgress)
|
self.connect(self.syncThread, SIGNAL("updateSyncProgress"), self.updateSyncProgress)
|
||||||
self.connect(self.syncThread, SIGNAL("bulkSyncFailed"), self.bulkSyncFailed)
|
self.connect(self.syncThread, SIGNAL("bulkSyncFailed"), self.bulkSyncFailed)
|
||||||
self.syncThread.start()
|
self.syncThread.start()
|
||||||
self.showWelcomeScreen()
|
self.switchToWelcomeScreen()
|
||||||
self.setEnabled(False)
|
self.setEnabled(False)
|
||||||
while not self.syncThread.isFinished():
|
while not self.syncThread.isFinished():
|
||||||
self.app.processEvents()
|
self.app.processEvents()
|
||||||
|
@ -1353,6 +1472,7 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
|
||||||
"Kstats",
|
"Kstats",
|
||||||
"Cstats",
|
"Cstats",
|
||||||
"ActiveTags",
|
"ActiveTags",
|
||||||
|
"StudyOptions",
|
||||||
)
|
)
|
||||||
|
|
||||||
deckRelatedMenus = (
|
deckRelatedMenus = (
|
||||||
|
@ -1413,6 +1533,7 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
|
||||||
self.connect(m.actionGetMoreDecks, s, self.onGetMoreDecks)
|
self.connect(m.actionGetMoreDecks, s, self.onGetMoreDecks)
|
||||||
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)
|
||||||
|
self.connect(m.actionStudyOptions, s, self.onStudyOptions)
|
||||||
|
|
||||||
def enableDeckMenuItems(self, enabled=True):
|
def enableDeckMenuItems(self, enabled=True):
|
||||||
"setEnabled deck-related items."
|
"setEnabled deck-related items."
|
||||||
|
|
|
@ -165,7 +165,8 @@ class Preferences(QDialog):
|
||||||
self.dialog.showToolbar.setChecked(self.config['showToolbar'])
|
self.dialog.showToolbar.setChecked(self.config['showToolbar'])
|
||||||
self.dialog.tallButtons.setChecked(
|
self.dialog.tallButtons.setChecked(
|
||||||
self.config['easeButtonHeight'] != 'standard')
|
self.config['easeButtonHeight'] != 'standard')
|
||||||
self.dialog.suppressEstimates.setChecked(self.config['suppressEstimates'])
|
self.dialog.showEstimates.setChecked(not self.config['suppressEstimates'])
|
||||||
|
self.dialog.showStudyOptions.setChecked(self.config['showStudyScreen'])
|
||||||
self.dialog.showLastCardInterval.setChecked(self.config['showLastCardInterval'])
|
self.dialog.showLastCardInterval.setChecked(self.config['showLastCardInterval'])
|
||||||
self.dialog.showLastCardContent.setChecked(self.config['showLastCardContent'])
|
self.dialog.showLastCardContent.setChecked(self.config['showLastCardContent'])
|
||||||
self.dialog.showTray.setChecked(self.config['showTrayIcon'])
|
self.dialog.showTray.setChecked(self.config['showTrayIcon'])
|
||||||
|
@ -188,7 +189,8 @@ class Preferences(QDialog):
|
||||||
self.config['showLastCardContent'] = self.dialog.showLastCardContent.isChecked()
|
self.config['showLastCardContent'] = self.dialog.showLastCardContent.isChecked()
|
||||||
self.config['showTrayIcon'] = self.dialog.showTray.isChecked()
|
self.config['showTrayIcon'] = self.dialog.showTray.isChecked()
|
||||||
self.config['showTimer'] = self.dialog.showTimer.isChecked()
|
self.config['showTimer'] = self.dialog.showTimer.isChecked()
|
||||||
self.config['suppressEstimates'] = self.dialog.suppressEstimates.isChecked()
|
self.config['suppressEstimates'] = not self.dialog.showEstimates.isChecked()
|
||||||
|
self.config['showStudyScreen'] = self.dialog.showStudyOptions.isChecked()
|
||||||
self.config['simpleToolbar'] = self.dialog.simpleToolbar.isChecked()
|
self.config['simpleToolbar'] = self.dialog.simpleToolbar.isChecked()
|
||||||
self.config['scrollToAnswer'] = self.dialog.scrollToAnswer.isChecked()
|
self.config['scrollToAnswer'] = self.dialog.scrollToAnswer.isChecked()
|
||||||
self.config['qaDivider'] = self.dialog.showDivider.isChecked()
|
self.config['qaDivider'] = self.dialog.showDivider.isChecked()
|
||||||
|
|
366
designer/main.ui
366
designer/main.ui
|
@ -5,8 +5,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>655</width>
|
<width>827</width>
|
||||||
<height>487</height>
|
<height>648</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy" >
|
<property name="sizePolicy" >
|
||||||
|
@ -27,8 +27,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>69</y>
|
<y>69</y>
|
||||||
<width>655</width>
|
<width>827</width>
|
||||||
<height>398</height>
|
<height>559</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy" >
|
<property name="sizePolicy" >
|
||||||
|
@ -154,8 +154,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>370</width>
|
<width>542</width>
|
||||||
<height>343</height>
|
<height>504</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -164,8 +164,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>550</width>
|
||||||
<height>30</height>
|
<height>413</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_5" >
|
<layout class="QVBoxLayout" name="verticalLayout_5" >
|
||||||
|
@ -186,8 +186,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>550</width>
|
||||||
<height>30</height>
|
<height>413</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2" >
|
<layout class="QVBoxLayout" name="verticalLayout_2" >
|
||||||
|
@ -202,19 +202,261 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QWidget" name="optionsPage" >
|
||||||
|
<property name="geometry" >
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>542</width>
|
||||||
|
<height>504</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_5" >
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4" >
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_11" >
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="optionsLabel" >
|
||||||
|
<property name="text" >
|
||||||
|
<string><h1>Welcome!</h1></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_4" >
|
||||||
|
<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="QVBoxLayout" name="verticalLayout_12" >
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2" >
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="optionsButton" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Review &Options>></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>
|
||||||
|
<widget class="QPushButton" name="optionsHelpButton" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Help</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<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>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="optionsBox" >
|
||||||
|
<property name="title" >
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_8" >
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_13" >
|
||||||
|
<property name="leftMargin" >
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<property name="spacing" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="1" column="0" >
|
||||||
|
<widget class="QLabel" name="label_20" >
|
||||||
|
<property name="minimumSize" >
|
||||||
|
<size>
|
||||||
|
<width>90</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Time limit (mins):</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" >
|
||||||
|
<widget class="QLineEdit" name="minuteLimit" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize" >
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" >
|
||||||
|
<widget class="QLabel" name="label_21" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Question limit:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1" >
|
||||||
|
<widget class="QLineEdit" name="questionLimit" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
|
||||||
|
<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="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="0" >
|
||||||
|
<widget class="QLabel" name="label_22" >
|
||||||
|
<property name="minimumSize" >
|
||||||
|
<size>
|
||||||
|
<width>90</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>New per day</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" >
|
||||||
|
<widget class="QLineEdit" name="newPerDay" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
|
||||||
|
<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>
|
||||||
|
<widget class="QComboBox" name="newCardOrder" />
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="newCardScheduling" />
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="revCardOrder" />
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="delayLapsedCards" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Delay lapsed cards until after reviews</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_3" >
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0" >
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_4" >
|
||||||
|
<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>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0" >
|
<item row="1" column="0" >
|
||||||
<widget class="QStackedWidget" name="buttonStack" >
|
<widget class="QStackedWidget" name="buttonStack" >
|
||||||
<property name="currentIndex" >
|
<property name="currentIndex" >
|
||||||
<number>3</number>
|
<number>4</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="page1" >
|
<widget class="QWidget" name="page1" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>370</width>
|
<width>542</width>
|
||||||
<height>49</height>
|
<height>49</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -249,7 +491,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>370</width>
|
<width>542</width>
|
||||||
<height>49</height>
|
<height>49</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -399,8 +641,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>542</width>
|
||||||
<height>30</height>
|
<height>49</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_4" >
|
<layout class="QVBoxLayout" name="verticalLayout_4" >
|
||||||
|
@ -434,7 +676,39 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>370</width>
|
<width>542</width>
|
||||||
|
<height>49</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_6" >
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_5" >
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0" >
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>13</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="startReviewingButton" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="page5" >
|
||||||
|
<property name="geometry" >
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>542</width>
|
||||||
<height>49</height>
|
<height>49</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -632,7 +906,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>655</width>
|
<width>827</width>
|
||||||
<height>23</height>
|
<height>23</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -761,6 +1035,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="actionActiveTags" />
|
<addaction name="actionActiveTags" />
|
||||||
<addaction name="separator" />
|
<addaction name="separator" />
|
||||||
|
<addaction name="actionStudyOptions" />
|
||||||
<addaction name="actionDisplayProperties" />
|
<addaction name="actionDisplayProperties" />
|
||||||
<addaction name="actionModelProperties" />
|
<addaction name="actionModelProperties" />
|
||||||
<addaction name="actionDeckProperties" />
|
<addaction name="actionDeckProperties" />
|
||||||
|
@ -778,8 +1053,8 @@
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>467</y>
|
<y>628</y>
|
||||||
<width>655</width>
|
<width>827</width>
|
||||||
<height>20</height>
|
<height>20</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -792,7 +1067,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>23</y>
|
<y>23</y>
|
||||||
<width>655</width>
|
<width>827</width>
|
||||||
<height>46</height>
|
<height>46</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -827,6 +1102,7 @@
|
||||||
<addaction name="separator" />
|
<addaction name="separator" />
|
||||||
<addaction name="actionRepeatAudio" />
|
<addaction name="actionRepeatAudio" />
|
||||||
<addaction name="actionMarkCard" />
|
<addaction name="actionMarkCard" />
|
||||||
|
<addaction name="actionStudyOptions" />
|
||||||
</widget>
|
</widget>
|
||||||
<action name="actionExit" >
|
<action name="actionExit" >
|
||||||
<property name="icon" >
|
<property name="icon" >
|
||||||
|
@ -1243,7 +1519,7 @@
|
||||||
<action name="actionCram" >
|
<action name="actionCram" >
|
||||||
<property name="icon" >
|
<property name="icon" >
|
||||||
<iconset resource="../icons.qrc" >
|
<iconset resource="../icons.qrc" >
|
||||||
<normaloff>:/icons/chronometer.png</normaloff>:/icons/chronometer.png</iconset>
|
<normaloff>:/icons/view-pim-calendar.png</normaloff>:/icons/view-pim-calendar.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>C&ram...</string>
|
<string>C&ram...</string>
|
||||||
|
@ -1351,9 +1627,55 @@
|
||||||
<string>Uncache LaTeX</string>
|
<string>Uncache LaTeX</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionStudyOptions" >
|
||||||
|
<property name="icon" >
|
||||||
|
<iconset resource="../icons.qrc" >
|
||||||
|
<normaloff>:/icons/chronometer.png</normaloff>:/icons/chronometer.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>&Study Options</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>optionsButton</tabstop>
|
||||||
|
<tabstop>optionsHelpButton</tabstop>
|
||||||
|
<tabstop>newPerDay</tabstop>
|
||||||
|
<tabstop>minuteLimit</tabstop>
|
||||||
|
<tabstop>questionLimit</tabstop>
|
||||||
|
<tabstop>newCardOrder</tabstop>
|
||||||
|
<tabstop>newCardScheduling</tabstop>
|
||||||
|
<tabstop>revCardOrder</tabstop>
|
||||||
|
<tabstop>delayLapsedCards</tabstop>
|
||||||
|
<tabstop>easeButton2</tabstop>
|
||||||
|
<tabstop>easeButton3</tabstop>
|
||||||
|
<tabstop>easeButton1</tabstop>
|
||||||
|
<tabstop>easeButton4</tabstop>
|
||||||
|
<tabstop>saveEditorButton</tabstop>
|
||||||
|
<tabstop>help</tabstop>
|
||||||
|
<tabstop>welcomeText</tabstop>
|
||||||
|
<tabstop>startReviewingButton</tabstop>
|
||||||
|
<tabstop>showAnswerButton</tabstop>
|
||||||
|
</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>98</x>
|
||||||
|
<y>134</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel" >
|
||||||
|
<x>219</x>
|
||||||
|
<y>190</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
</ui>
|
</ui>
|
||||||
|
|
|
@ -177,9 +177,16 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="suppressEstimates" >
|
<widget class="QCheckBox" name="showEstimates" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>Don't show next time before answer</string>
|
<string>Show next time before answer</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="showStudyOptions" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Show study options on startup</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -546,7 +553,8 @@
|
||||||
<tabstop>backgroundColour</tabstop>
|
<tabstop>backgroundColour</tabstop>
|
||||||
<tabstop>showDivider</tabstop>
|
<tabstop>showDivider</tabstop>
|
||||||
<tabstop>splitQA</tabstop>
|
<tabstop>splitQA</tabstop>
|
||||||
<tabstop>suppressEstimates</tabstop>
|
<tabstop>showEstimates</tabstop>
|
||||||
|
<tabstop>showStudyOptions</tabstop>
|
||||||
<tabstop>saveWhenClosing</tabstop>
|
<tabstop>saveWhenClosing</tabstop>
|
||||||
<tabstop>saveAfterEvery</tabstop>
|
<tabstop>saveAfterEvery</tabstop>
|
||||||
<tabstop>saveAfterEveryNum</tabstop>
|
<tabstop>saveAfterEveryNum</tabstop>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/" >
|
<qresource prefix="/" >
|
||||||
|
<file>icons/view-pim-calendar.png</file>
|
||||||
<file>icons/anki-tag.png</file>
|
<file>icons/anki-tag.png</file>
|
||||||
<file>icons/edit-redo.png</file>
|
<file>icons/edit-redo.png</file>
|
||||||
<file>icons/text-xml.png</file>
|
<file>icons/text-xml.png</file>
|
||||||
|
|
BIN
icons/view-pim-calendar.png
Normal file
BIN
icons/view-pim-calendar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
Loading…
Reference in a new issue