mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
type in answer support, accept ret from study options
This commit is contained in:
parent
9d7c65c735
commit
75fc98cdba
5 changed files with 78 additions and 13 deletions
|
@ -266,12 +266,9 @@ Please do not file a bug report with Anki.\n\n""")
|
||||||
|
|
||||||
def keyPressEvent(self, evt):
|
def keyPressEvent(self, evt):
|
||||||
"Show answer on RET or register answer."
|
"Show answer on RET or register answer."
|
||||||
|
|
||||||
if evt.key() in (Qt.Key_Up,Qt.Key_Down,Qt.Key_Left,Qt.Key_Right,
|
if evt.key() in (Qt.Key_Up,Qt.Key_Down,Qt.Key_Left,Qt.Key_Right,
|
||||||
Qt.Key_PageUp,Qt.Key_PageDown):
|
Qt.Key_PageUp,Qt.Key_PageDown):
|
||||||
|
|
||||||
mf = self.bodyView.body.page().currentFrame()
|
mf = self.bodyView.body.page().currentFrame()
|
||||||
|
|
||||||
if evt.key() == Qt.Key_Up:
|
if evt.key() == Qt.Key_Up:
|
||||||
mf.evaluateJavaScript("window.scrollBy(0,-20)")
|
mf.evaluateJavaScript("window.scrollBy(0,-20)")
|
||||||
elif evt.key() == Qt.Key_Down:
|
elif evt.key() == Qt.Key_Down:
|
||||||
|
@ -288,10 +285,8 @@ Please do not file a bug report with Anki.\n\n""")
|
||||||
mf.evaluateJavaScript("window.scrollBy(0,%d)" %
|
mf.evaluateJavaScript("window.scrollBy(0,%d)" %
|
||||||
int(0.9*self.bodyView.body.size().
|
int(0.9*self.bodyView.body.size().
|
||||||
height()))
|
height()))
|
||||||
|
|
||||||
evt.accept()
|
evt.accept()
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.state == "showQuestion":
|
if self.state == "showQuestion":
|
||||||
if evt.key() in (Qt.Key_Enter,
|
if evt.key() in (Qt.Key_Enter,
|
||||||
Qt.Key_Return):
|
Qt.Key_Return):
|
||||||
|
@ -304,6 +299,11 @@ Please do not file a bug report with Anki.\n\n""")
|
||||||
num=int(key)
|
num=int(key)
|
||||||
evt.accept()
|
evt.accept()
|
||||||
return self.cardAnswered(num)
|
return self.cardAnswered(num)
|
||||||
|
elif self.state == "studyScreen":
|
||||||
|
if evt.key() in (Qt.Key_Enter,
|
||||||
|
Qt.Key_Return):
|
||||||
|
evt.accept()
|
||||||
|
return self.onStartReview()
|
||||||
evt.ignore()
|
evt.ignore()
|
||||||
|
|
||||||
def cardAnswered(self, quality):
|
def cardAnswered(self, quality):
|
||||||
|
@ -436,9 +436,13 @@ new:
|
||||||
self.mainWin.buttonStack.hide()
|
self.mainWin.buttonStack.hide()
|
||||||
|
|
||||||
def showAnswerButton(self):
|
def showAnswerButton(self):
|
||||||
self.mainWin.buttonStack.setCurrentIndex(0)
|
if self.currentCard.cardModel.typeAnswer:
|
||||||
|
self.mainWin.buttonStack.setCurrentIndex(4)
|
||||||
|
self.mainWin.typeAnswerField.selectAll()
|
||||||
|
else:
|
||||||
|
self.mainWin.buttonStack.setCurrentIndex(0)
|
||||||
|
self.mainWin.showAnswerButton.setFocus()
|
||||||
self.mainWin.buttonStack.show()
|
self.mainWin.buttonStack.show()
|
||||||
self.mainWin.showAnswerButton.setFocus()
|
|
||||||
|
|
||||||
def showEaseButtons(self):
|
def showEaseButtons(self):
|
||||||
self.updateEaseButtons()
|
self.updateEaseButtons()
|
||||||
|
|
|
@ -293,6 +293,7 @@ class ModelProperties(QDialog):
|
||||||
self.dialog.cardAnswer.setPlainText(card.aformat.replace("<br>", "\n"))
|
self.dialog.cardAnswer.setPlainText(card.aformat.replace("<br>", "\n"))
|
||||||
self.dialog.questionInAnswer.setChecked(card.questionInAnswer)
|
self.dialog.questionInAnswer.setChecked(card.questionInAnswer)
|
||||||
self.dialog.allowEmptyAnswer.setChecked(card.allowEmptyAnswer)
|
self.dialog.allowEmptyAnswer.setChecked(card.allowEmptyAnswer)
|
||||||
|
self.dialog.typeAnswer.setChecked(card.typeAnswer)
|
||||||
self.updateToggleButtonText(card)
|
self.updateToggleButtonText(card)
|
||||||
|
|
||||||
def enableCardMoveButtons(self):
|
def enableCardMoveButtons(self):
|
||||||
|
@ -329,6 +330,7 @@ class ModelProperties(QDialog):
|
||||||
changed = changed or changed2
|
changed = changed or changed2
|
||||||
self.updateField(card, 'questionInAnswer', self.dialog.questionInAnswer.isChecked())
|
self.updateField(card, 'questionInAnswer', self.dialog.questionInAnswer.isChecked())
|
||||||
self.updateField(card, 'allowEmptyAnswer', self.dialog.allowEmptyAnswer.isChecked())
|
self.updateField(card, 'allowEmptyAnswer', self.dialog.allowEmptyAnswer.isChecked())
|
||||||
|
self.updateField(card, 'typeAnswer', self.dialog.typeAnswer.isChecked())
|
||||||
if changed:
|
if changed:
|
||||||
# need to generate all question/answers for this card
|
# need to generate all question/answers for this card
|
||||||
self.deck.updateCardsFromModel(self.m)
|
self.deck.updateCardsFromModel(self.m)
|
||||||
|
|
|
@ -124,11 +124,11 @@ class View(object):
|
||||||
|
|
||||||
def center(self, str, height=40):
|
def center(self, str, height=40):
|
||||||
if not self.main.config['splitQA']:
|
if not self.main.config['splitQA']:
|
||||||
return str
|
return "<center>" + str + "</center>"
|
||||||
return '''
|
return '''\
|
||||||
<div style="display: table; height: %s%%; width:100%%; overflow: hidden;">\
|
<center><div style="display: table; height: %s%%; width:100%%; overflow: hidden;">\
|
||||||
<div style="display: table-cell; vertical-align: middle;">\
|
<div style="display: table-cell; vertical-align: middle;">\
|
||||||
<div style="">%s</div></div></div>''' % (height, str)
|
<div style="">%s</div></div></div></center>''' % (height, str)
|
||||||
|
|
||||||
def drawQuestion(self, nosound=False):
|
def drawQuestion(self, nosound=False):
|
||||||
"Show the question."
|
"Show the question."
|
||||||
|
@ -146,6 +146,17 @@ class View(object):
|
||||||
def drawAnswer(self):
|
def drawAnswer(self):
|
||||||
"Show the answer."
|
"Show the answer."
|
||||||
a = self.main.currentCard.htmlAnswer()
|
a = self.main.currentCard.htmlAnswer()
|
||||||
|
if self.main.currentCard.cardModel.typeAnswer:
|
||||||
|
cor = stripHTML(self.main.currentCard.answer)
|
||||||
|
given = unicode(self.main.mainWin.typeAnswerField.text())
|
||||||
|
res = []
|
||||||
|
for (i, c) in enumerate(given):
|
||||||
|
if c == cor[i]:
|
||||||
|
res.append("<span style='color: #007700'>%s</span>" % c)
|
||||||
|
else:
|
||||||
|
res.append("<span style='color: #770000'>%s</span>" % c)
|
||||||
|
a += "<div>" + (_("You typed:<br><b>") +
|
||||||
|
"".join(res)) + "</b></div>"
|
||||||
self.write(self.center('<span id=answer />' +
|
self.write(self.center('<span id=answer />' +
|
||||||
self.mungeQA(self.main.deck, a)))
|
self.mungeQA(self.main.deck, a)))
|
||||||
if self.state != self.oldState:
|
if self.state != self.oldState:
|
||||||
|
|
|
@ -449,7 +449,7 @@
|
||||||
<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>4</number>
|
<number>5</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="page1" >
|
<widget class="QWidget" name="page1" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
|
@ -697,7 +697,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="startReviewingButton" >
|
<widget class="QPushButton" name="startReviewingButton" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>PushButton</string>
|
<string>Review</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -712,6 +712,46 @@
|
||||||
<height>49</height>
|
<height>49</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_7" >
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_6" >
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType" >
|
||||||
|
<enum>QSizePolicy::Minimum</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0" >
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>2</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="typeAnswerField" >
|
||||||
|
<property name="font" >
|
||||||
|
<font>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Type answer and hit enter</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="page" >
|
||||||
|
<property name="geometry" >
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>542</width>
|
||||||
|
<height>49</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -490,6 +490,13 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="5" column="1" >
|
||||||
|
<widget class="QCheckBox" name="typeAnswer" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Ask me to type in the answer</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -539,6 +546,7 @@
|
||||||
<tabstop>cardAnswer</tabstop>
|
<tabstop>cardAnswer</tabstop>
|
||||||
<tabstop>questionInAnswer</tabstop>
|
<tabstop>questionInAnswer</tabstop>
|
||||||
<tabstop>allowEmptyAnswer</tabstop>
|
<tabstop>allowEmptyAnswer</tabstop>
|
||||||
|
<tabstop>typeAnswer</tabstop>
|
||||||
<tabstop>buttonBox</tabstop>
|
<tabstop>buttonBox</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
Loading…
Reference in a new issue