type in answer support, accept ret from study options

This commit is contained in:
Damien Elmes 2009-01-05 15:37:43 +09:00
parent 9d7c65c735
commit 75fc98cdba
5 changed files with 78 additions and 13 deletions

View file

@ -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):
if self.currentCard.cardModel.typeAnswer:
self.mainWin.buttonStack.setCurrentIndex(4)
self.mainWin.typeAnswerField.selectAll()
else:
self.mainWin.buttonStack.setCurrentIndex(0) self.mainWin.buttonStack.setCurrentIndex(0)
self.mainWin.buttonStack.show()
self.mainWin.showAnswerButton.setFocus() self.mainWin.showAnswerButton.setFocus()
self.mainWin.buttonStack.show()
def showEaseButtons(self): def showEaseButtons(self):
self.updateEaseButtons() self.updateEaseButtons()

View file

@ -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)

View file

@ -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:

View file

@ -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>

View file

@ -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/>