diff --git a/ankiqt/ui/cardlist.py b/ankiqt/ui/cardlist.py
index 0bddbbb00..5f8c34392 100644
--- a/ankiqt/ui/cardlist.py
+++ b/ankiqt/ui/cardlist.py
@@ -323,15 +323,6 @@ class StatusDelegate(QItemDelegate):
painter.save()
painter.fillRect(option.rect, brush)
painter.restore()
- if row[CARD_PRIORITY] == 0:
- # custom render
- if index.row() % 2 == 0:
- brush = QBrush(QColor(COLOUR_INACTIVE1))
- else:
- brush = QBrush(QColor(COLOUR_INACTIVE2))
- painter.save()
- painter.fillRect(option.rect, brush)
- painter.restore()
elif "Marked" in row[CARD_TAGS]:
if index.row() % 2 == 0:
brush = QBrush(QColor(COLOUR_MARKED1))
@@ -968,12 +959,8 @@ where id in %s""" % ids2str(sf))
self.updateAfterCardChange()
def cram(self):
- if ui.utils.askUser(
- _("Cram selected cards in new deck?"),
- help="CramMode",
- parent=self):
- self.close()
- self.parent.onCram(self.selectedCards())
+ self.close()
+ self.parent.onCram(self.selectedCards())
def onChangeModel(self):
sf = self.selectedFacts()
diff --git a/ankiqt/ui/main.py b/ankiqt/ui/main.py
index e5b348609..2006f09e0 100755
--- a/ankiqt/ui/main.py
+++ b/ankiqt/ui/main.py
@@ -329,6 +329,7 @@ Please do not file a bug report with Anki.
""")
if self.deck.isEmpty():
return self.moveToState("deckEmpty")
else:
+ # timeboxing only supported using the standard scheduler
if not self.deck.finishScheduler:
if (self.config['showStudyScreen'] and
not self.deck.sessionStartTime):
@@ -828,10 +829,7 @@ Debug info:\n%s""") % traceback.format_exc(), help="DeckErrors")
def onClose(self):
# allow focusOut to save
if self.inMainWindow() or not self.app.activeWindow():
- isCram = self.isCramming()
- self.saveAndClose(hideWelcome=isCram)
- if isCram:
- self.loadDeck(self.config['recentDeckPaths'][0])
+ self.saveAndClose()
else:
self.app.activeWindow().close()
@@ -1739,7 +1737,8 @@ learnt today")
self.mainWin.failedCardsOption.currentIndex())
self.deck.flushMod()
self.deck.reset()
- self.deck.startSession()
+ if not self.deck.finishScheduler:
+ self.deck.startSession()
self.config['studyOptionsScreen'] = self.mainWin.tabWidget.currentIndex()
self.moveToState("getQuestion")
@@ -1890,26 +1889,12 @@ learnt today")
##########################################################################
def onAddCard(self):
- if self.isCramming():
- ui.utils.showInfo(_("""\
-You are currently cramming. Please close this deck first."""))
- return
ui.dialogs.get("AddCards", self)
- def cramEditWarning(self):
- self.showToolTip(_("""\
-
Cramming
-You are currently cramming. Any edits you make to this deck
-will be lost when you close the deck."""))
-
def onEditDeck(self):
ui.dialogs.get("CardList", self)
- if self.isCramming():
- self.cramEditWarning()
def onEditCurrent(self):
- if self.isCramming():
- self.cramEditWarning()
self.moveToState("editCurrentFact")
def onDeckProperties(self):
@@ -1940,10 +1925,6 @@ will be lost when you close the deck."""))
##########################################################################
def onImport(self):
- if self.isCramming():
- ui.utils.showInfo(_("""\
-You are currently cramming. Please close this deck first."""))
- return
if self.deck is None:
self.onNew()
if not self.deck.path:
@@ -1974,59 +1955,48 @@ window will open."""))
e.exportInto(path)
return (e, path)
- def isCramming(self):
- return self.deck is not None and self.deck.name() == "cram"
-
def onCram(self, cardIds=[]):
- if self.isCramming():
- ui.utils.showInfo(
- _("Already cramming. Please close this deck first."))
- return
- if not self.save(required=True):
- return
- if not cardIds:
- (s, ret) = ui.utils.getTag(self, self.deck, _("Tags to cram:"),
- help="CramMode", tags="all")
- if not ret:
- return
- s = unicode(s)
- # open tmp deck
- (e, path) = self._copyToTmpDeck(tags=s)
- else:
- (e, path) = self._copyToTmpDeck(ids=cardIds)
- if not e.exportedCards:
- ui.utils.showInfo(_("No cards matched the provided tags."))
- return
- if self.config['randomizeOnCram']:
- n = 3
- else:
- n = 2
- p = ui.utils.ProgressWin(self, n, 0, _("Cram"))
- p.update(_("Loading deck..."))
- oldMedia = self.deck.mediaDir()
- self.deck.close()
- self.deck = None
- self.loadDeck(path, media=oldMedia)
- self.config['recentDeckPaths'].pop(0)
- self.deck.newCardsPerDay = 99999
- self.deck.delay0 = 300
- self.deck.delay1 = 600
- self.deck.hardIntervalMin = 0.01388
- self.deck.hardIntervalMax = 0.02083
- self.deck.midIntervalMin = 0.0416
- self.deck.midIntervalMax = 0.0486
- self.deck.easyIntervalMin = 0.2083
- self.deck.easyIntervalMax = 0.25
- self.deck.newCardOrder = 0
- self.deck.syncName = None
- self.deck.collapseTime = 1
- p.update()
- self.deck.updateDynamicIndices()
- if self.config['randomizeOnCram']:
- p.update(_("Randomizing..."))
- self.deck.randomizeNewCards()
- self.reset()
- p.finish()
+ te = ui.tagedit.TagEdit(self)
+ te.setDeck(self.deck, "all")
+ diag = ui.utils.GetTextDialog(
+ self, _("Tags to cram:"), help="CramMode", edit=te)
+ l = diag.layout()
+ g = QGroupBox(_("Review Mode"))
+ l.insertWidget(2, g)
+ box = QVBoxLayout()
+ g.setLayout(box)
+ keep = QRadioButton(_("Show oldest modified first"))
+ box.addWidget(keep)
+ keep.setChecked(True)
+ diag.setTabOrder(diag.l, keep)
+ order = QRadioButton(_("Show in order added"))
+ box.addWidget(order)
+ random = QRadioButton(_("Show in random order"))
+ box.addWidget(random)
+ # hide tag list if we have ids
+ if cardIds:
+ diag.l.hide()
+ diag.qlabel.hide()
+ if diag.exec_():
+ if keep.isChecked():
+ order = "modified"
+ elif order.isChecked():
+ order = "created"
+ else:
+ order = "random()"
+ if cardIds:
+ active = cardIds
+ else:
+ active = unicode(diag.l.text())
+ self.deck.setupCramScheduler(active, order)
+ if self.state == "studyScreen":
+ self.onStartReview()
+ else:
+ self.deck.reset()
+ self.deck.getCard() # so scheduler will reset if empty
+ self.moveToState("initial")
+ if not self.deck.finishScheduler:
+ ui.utils.showInfo(_("No cards matched the provided tags."))
def onShare(self, tags):
pwd = os.getcwd()
@@ -2888,10 +2858,6 @@ Proceed?""")):
ui.utils.showInfo(_("Database optimized.\nShrunk by %dKB") % (size/1024.0))
def onCheckMediaDB(self):
- if self.isCramming():
- ui.utils.showInfo(_("""\
-You are currently cramming. Please close this deck first."""))
- return
mb = QMessageBox(self)
mb.setWindowTitle(_("Anki"))
mb.setIcon(QMessageBox.Warning)
diff --git a/ankiqt/ui/status.py b/ankiqt/ui/status.py
index e97d8d078..a627c052e 100644
--- a/ankiqt/ui/status.py
+++ b/ankiqt/ui/status.py
@@ -173,11 +173,11 @@ class StatusView(object):
if not self.main.currentCard:
remStr += "%(failed1)s" + s + "%(rev1)s" + s + "%(new1)s"
else:
- q = self.main.deck.queueForCard(self.main.currentCard)
- if q == "failed":
+ t = self.main.deck.cardType(self.main.currentCard)
+ if t == 0:
remStr += ("%(failed1)s" + s +
"%(rev1)s" + s + "%(new1)s")
- elif q == "rev":
+ elif t == 1:
remStr += ("%(failed1)s" + s + "%(rev1)s" + s +
"%(new1)s")
else:
diff --git a/ankiqt/ui/utils.py b/ankiqt/ui/utils.py
index 58611fafd..a6cdebfc7 100644
--- a/ankiqt/ui/utils.py
+++ b/ankiqt/ui/utils.py
@@ -120,8 +120,9 @@ class GetTextDialog(QDialog):
self.setWindowTitle("Anki")
self.question = question
self.help = help
+ self.qlabel = QLabel(question)
v = QVBoxLayout()
- v.addWidget(QLabel(question))
+ v.addWidget(self.qlabel)
if not edit:
edit = QLineEdit()
self.l = edit
diff --git a/designer/main.ui b/designer/main.ui
index 77a02599d..b2d60301a 100644
--- a/designer/main.ui
+++ b/designer/main.ui
@@ -7,7 +7,7 @@
0
0
605
- 563
+ 565
@@ -791,6 +791,16 @@
0
+ -
+
+
+ <h1>Study Options</h1>
+
+
+ Qt::AlignCenter
+
+
+
-
@@ -802,7 +812,7 @@
20
- 6
+ 12
@@ -1324,7 +1334,7 @@
- Review
+ &Review