mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
reorganize, and remove placeholder which isn't available on older qt
This commit is contained in:
parent
8ed0c6ffea
commit
ae43b78faa
2 changed files with 148 additions and 260 deletions
405
aqt/browser.py
405
aqt/browser.py
|
@ -18,6 +18,8 @@ from anki.db import *
|
||||||
from anki.stats import CardStats
|
from anki.stats import CardStats
|
||||||
from anki.hooks import runHook, addHook, removeHook
|
from anki.hooks import runHook, addHook, removeHook
|
||||||
|
|
||||||
|
# fixme: notice added tags?
|
||||||
|
|
||||||
COLOUR_SUSPENDED1 = "#ffffcc"
|
COLOUR_SUSPENDED1 = "#ffffcc"
|
||||||
COLOUR_SUSPENDED2 = "#ffffaa"
|
COLOUR_SUSPENDED2 = "#ffffaa"
|
||||||
COLOUR_INACTIVE1 = "#ffcccc"
|
COLOUR_INACTIVE1 = "#ffcccc"
|
||||||
|
@ -288,60 +290,30 @@ class Browser(QMainWindow):
|
||||||
self.updateSortOrder()
|
self.updateSortOrder()
|
||||||
self.updateFont()
|
self.updateFont()
|
||||||
self.form.searchEdit.setFocus()
|
self.form.searchEdit.setFocus()
|
||||||
self.drawTags()
|
|
||||||
self.updateFilterLabel()
|
self.updateFilterLabel()
|
||||||
self.show()
|
self.show()
|
||||||
self.form.searchEdit.setText("is:recent")
|
self.form.searchEdit.setText("is:recent")
|
||||||
self.form.searchEdit.selectAll()
|
self.form.searchEdit.selectAll()
|
||||||
self.updateSearch()
|
self.onSearch()
|
||||||
# if self.parent.card:
|
# if self.parent.card:
|
||||||
# self.card = self.parent.card
|
# self.card = self.parent.card
|
||||||
#self.updateSearch()
|
#self.updateSearch()
|
||||||
|
|
||||||
def setupTable(self):
|
|
||||||
self.model = DeckModel(self)
|
|
||||||
self.form.tableView.setSortingEnabled(False)
|
|
||||||
self.form.tableView.setShowGrid(False)
|
|
||||||
self.form.tableView.setModel(self.model)
|
|
||||||
self.form.tableView.selectionModel()
|
|
||||||
self.connect(self.form.tableView.selectionModel(),
|
|
||||||
SIGNAL("selectionChanged(QItemSelection,QItemSelection)"),
|
|
||||||
self.updateFilterLabel)
|
|
||||||
self.form.tableView.setItemDelegate(StatusDelegate(self, self.model))
|
|
||||||
|
|
||||||
def setupToolbar(self):
|
def setupToolbar(self):
|
||||||
self.form.toolBar.setIconSize(QSize(self.mw.config['iconSize'],
|
self.form.toolBar.setIconSize(QSize(self.mw.config['iconSize'],
|
||||||
self.mw.config['iconSize']))
|
self.mw.config['iconSize']))
|
||||||
self.form.toolBar.toggleViewAction().setText(_("Toggle Toolbar"))
|
self.form.toolBar.toggleViewAction().setText(_("Toggle Toolbar"))
|
||||||
|
|
||||||
def setupSearch(self):
|
|
||||||
self.filterTimer = None
|
|
||||||
self.connect(self.form.searchButton,
|
|
||||||
SIGNAL("clicked()"),
|
|
||||||
self.updateSearch)
|
|
||||||
self.connect(self.form.searchEdit,
|
|
||||||
SIGNAL("returnPressed()"),
|
|
||||||
self.updateSearch)
|
|
||||||
self.setTabOrder(self.form.searchEdit, self.form.tableView)
|
|
||||||
|
|
||||||
def setupSort(self):
|
|
||||||
self.form.sortBox.setMaxVisibleItems(30)
|
|
||||||
self.sortIndex = int(self.deck.conf.get("sortIdx", "0"))
|
|
||||||
self.drawSort()
|
|
||||||
self.connect(self.form.sortBox, SIGNAL("activated(int)"),
|
|
||||||
self.sortChanged)
|
|
||||||
self.sortChanged(self.sortIndex, refresh=False)
|
|
||||||
self.connect(self.form.sortOrder, SIGNAL("clicked()"),
|
|
||||||
self.reverseOrder)
|
|
||||||
|
|
||||||
def setupHeaders(self):
|
def setupHeaders(self):
|
||||||
|
vh = self.form.tableView.verticalHeader()
|
||||||
|
hh = self.form.tableView.horizontalHeader()
|
||||||
if not sys.platform.startswith("win32"):
|
if not sys.platform.startswith("win32"):
|
||||||
self.form.tableView.verticalHeader().hide()
|
vh.hide()
|
||||||
self.form.tableView.horizontalHeader().show()
|
hh.show()
|
||||||
restoreHeader(self.form.tableView.horizontalHeader(), "editor")
|
restoreHeader(hh, "editor")
|
||||||
for i in range(2):
|
for i in range(2):
|
||||||
self.form.tableView.horizontalHeader().setResizeMode(i, QHeaderView.Stretch)
|
hh.setResizeMode(i, QHeaderView.Stretch)
|
||||||
self.form.tableView.horizontalHeader().setResizeMode(2, QHeaderView.Interactive)
|
hh.setResizeMode(2, QHeaderView.Interactive)
|
||||||
|
|
||||||
def setupMenus(self):
|
def setupMenus(self):
|
||||||
# actions
|
# actions
|
||||||
|
@ -377,12 +349,6 @@ class Browser(QMainWindow):
|
||||||
c(f.actionGuide, s, self.onHelp)
|
c(f.actionGuide, s, self.onHelp)
|
||||||
runHook('browser.setupMenus', self)
|
runHook('browser.setupMenus', self)
|
||||||
|
|
||||||
def cardRow(self):
|
|
||||||
try:
|
|
||||||
return self.model.cards.index(self.card.id)
|
|
||||||
except:
|
|
||||||
return -1
|
|
||||||
|
|
||||||
def updateFont(self):
|
def updateFont(self):
|
||||||
self.form.tableView.setFont(QFont(
|
self.form.tableView.setFont(QFont(
|
||||||
self.mw.config['editFontFamily'],
|
self.mw.config['editFontFamily'],
|
||||||
|
@ -391,61 +357,138 @@ class Browser(QMainWindow):
|
||||||
self.mw.config['editLineSize'])
|
self.mw.config['editLineSize'])
|
||||||
self.model.reset()
|
self.model.reset()
|
||||||
|
|
||||||
def drawTags(self):
|
def closeEvent(self, evt):
|
||||||
return
|
saveSplitter(self.form.splitter, "editor1")
|
||||||
self.form.tagList.setMaxVisibleItems(30)
|
saveSplitter(self.form.splitter_2, "editor2")
|
||||||
self.form.tagList.view().setMinimumWidth(200)
|
saveSplitter(self.form.splitter_3, "editor3")
|
||||||
self.form.tagList.setFixedWidth(170)
|
self.editor.saveNow()
|
||||||
self.form.tagList.clear()
|
self.editor.setFact(None)
|
||||||
alltags = [None, "Marked", None, None, "Leech", None, None]
|
saveGeom(self, "editor")
|
||||||
# system tags
|
saveState(self, "editor")
|
||||||
self.form.tagList.addItem(_("Show All Cards"))
|
saveHeader(self.form.tableView.horizontalHeader(), "editor")
|
||||||
self.form.tagList.addItem(QIcon(":/icons/rating.png"),
|
self.hide()
|
||||||
_('Marked'))
|
aqt.dialogs.close("Browser")
|
||||||
self.form.tagList.addItem(QIcon(":/icons/media-playback-pause.png"),
|
self.teardownHooks()
|
||||||
_('Suspended'))
|
evt.accept()
|
||||||
self.form.tagList.addItem(QIcon(":/icons/chronometer.png"),
|
|
||||||
_('Due'))
|
def keyPressEvent(self, evt):
|
||||||
self.form.tagList.addItem(QIcon(":/icons/emblem-important.png"),
|
"Show answer on RET or register answer."
|
||||||
_('Leech'))
|
if evt.key() in (Qt.Key_Escape,):
|
||||||
self.form.tagList.addItem(QIcon(":/icons/editclear.png"),
|
self.close()
|
||||||
_('No fact tags'))
|
|
||||||
self.form.tagList.insertSeparator(
|
# Searching
|
||||||
self.form.tagList.count())
|
######################################################################
|
||||||
# model and card templates
|
|
||||||
tplates = set()
|
def setupSearch(self):
|
||||||
for m in self.deck.models().values():
|
self.filterTimer = None
|
||||||
tplates.update([t['name'] for t in m.templates])
|
self.connect(self.form.searchButton,
|
||||||
for (type, sql, icon) in (
|
SIGNAL("clicked()"),
|
||||||
("models", "select name from models", "contents.png"),
|
self.onSearch)
|
||||||
("cms", list(tplates), "Anki_Card.png")):
|
self.connect(self.form.searchEdit,
|
||||||
d = {}
|
SIGNAL("returnPressed()"),
|
||||||
tagss = self.deck.db.column0(sql)
|
self.onSearch)
|
||||||
for tags in tagss:
|
self.setTabOrder(self.form.searchEdit, self.form.tableView)
|
||||||
for tag in parseTags(tags):
|
|
||||||
d[tag] = 1
|
def reverseOrder(self):
|
||||||
sortedtags = sorted(d.keys())
|
self.deck.setVar("reverseOrder", not self.deck.getInt("reverseOrder"))
|
||||||
alltags.extend(sortedtags)
|
self.model.cards.reverse()
|
||||||
icon = QIcon(":/icons/" + icon)
|
self.model.reset()
|
||||||
for t in sortedtags:
|
self.focusCard()
|
||||||
self.form.tagList.addItem(icon, t.replace("_", " "))
|
self.updateSortOrder()
|
||||||
if sortedtags:
|
|
||||||
self.form.tagList.insertSeparator(
|
def onSearch(self, force=True):
|
||||||
self.form.tagList.count())
|
# fixme:
|
||||||
alltags.append(None)
|
# if self.mw.inDbHandler:
|
||||||
# fact tags
|
# return
|
||||||
alluser = sorted(self.deck.allTags())
|
self.model.searchStr = unicode(self.form.searchEdit.text())
|
||||||
for tag in alltags:
|
self.model.showMatching(force)
|
||||||
|
self.updateFilterLabel()
|
||||||
|
self.filterTimer = None
|
||||||
|
if self.model.cards:
|
||||||
|
self.form.cardInfoGroup.show()
|
||||||
|
self.form.fieldsArea.show()
|
||||||
|
else:
|
||||||
|
self.form.cardInfoGroup.hide()
|
||||||
|
self.form.fieldsArea.hide()
|
||||||
|
if not self.focusCard():
|
||||||
|
if self.model.cards:
|
||||||
|
self.form.tableView.selectRow(0)
|
||||||
|
if not self.model.cards:
|
||||||
|
self.editor.setFact(None)
|
||||||
|
|
||||||
|
def updateFilterLabel(self):
|
||||||
|
selected = len(self.form.tableView.selectionModel().selectedRows())
|
||||||
|
self.setWindowTitle(ngettext("Browser (%(cur)d "
|
||||||
|
"of %(tot)d card shown; %(sel)s)", "Browser (%(cur)d "
|
||||||
|
"of %(tot)d cards shown; %(sel)s)", self.deck.cardCount) %
|
||||||
|
{
|
||||||
|
"cur": len(self.model.cards),
|
||||||
|
"tot": self.deck.cardCount(),
|
||||||
|
"sel": ngettext("%d selected", "%d selected", selected) % selected
|
||||||
|
} + " - " + self.deck.name())
|
||||||
|
|
||||||
|
# Table view
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
def setupTable(self):
|
||||||
|
self.model = DeckModel(self)
|
||||||
|
self.form.tableView.setSortingEnabled(False)
|
||||||
|
self.form.tableView.setShowGrid(False)
|
||||||
|
self.form.tableView.setModel(self.model)
|
||||||
|
self.form.tableView.selectionModel()
|
||||||
|
self.connect(self.form.tableView.selectionModel(),
|
||||||
|
SIGNAL("selectionChanged(QItemSelection,QItemSelection)"),
|
||||||
|
self.updateFilterLabel)
|
||||||
|
self.form.tableView.setItemDelegate(StatusDelegate(self, self.model))
|
||||||
|
|
||||||
|
def rowChanged(self, current, previous):
|
||||||
|
self.currentRow = current
|
||||||
|
self.card = self.model.getCard(current)
|
||||||
|
if not self.card:
|
||||||
|
self.editor.setFact(None, True)
|
||||||
|
return
|
||||||
|
fact = self.card.fact()
|
||||||
|
self.editor.setFact(fact)
|
||||||
|
self.editor.card = self.card
|
||||||
|
self.showCardInfo(self.card)
|
||||||
|
self.updateToggles()
|
||||||
|
|
||||||
|
def cardRow(self):
|
||||||
|
try:
|
||||||
|
return self.model.cards.index(self.card.id)
|
||||||
|
except:
|
||||||
|
return -1
|
||||||
|
|
||||||
|
def focusCard(self):
|
||||||
|
print "focus"
|
||||||
|
if self.card:
|
||||||
try:
|
try:
|
||||||
alluser.remove(tag)
|
self.card.id
|
||||||
except:
|
except:
|
||||||
pass
|
return False
|
||||||
icon = QIcon(":/icons/Anki_Fact.png")
|
row = self.cardRow()
|
||||||
for t in alluser:
|
if row >= 0:
|
||||||
t = t.replace("_", " ")
|
sm = self.form.tableView.selectionModel()
|
||||||
self.form.tagList.addItem(icon, t)
|
sm.clear()
|
||||||
alltags.extend(alluser)
|
self.form.tableView.selectRow(row)
|
||||||
self.alltags = alltags
|
self.form.tableView.scrollTo(
|
||||||
|
self.model.index(row,0),
|
||||||
|
self.form.tableView.PositionAtCenter)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Sorting
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
def setupSort(self):
|
||||||
|
self.form.sortBox.setMaxVisibleItems(30)
|
||||||
|
self.sortIndex = int(self.deck.conf.get("sortIdx", "0"))
|
||||||
|
self.drawSort()
|
||||||
|
self.connect(self.form.sortBox, SIGNAL("activated(int)"),
|
||||||
|
self.sortChanged)
|
||||||
|
self.sortChanged(self.sortIndex, refresh=False)
|
||||||
|
self.connect(self.form.sortOrder, SIGNAL("clicked()"),
|
||||||
|
self.reverseOrder)
|
||||||
|
|
||||||
def drawSort(self):
|
def drawSort(self):
|
||||||
self.sortList = [
|
self.sortList = [
|
||||||
|
@ -506,140 +549,8 @@ class Browser(QMainWindow):
|
||||||
if refresh:
|
if refresh:
|
||||||
self.model.showMatching()
|
self.model.showMatching()
|
||||||
self.updateFilterLabel()
|
self.updateFilterLabel()
|
||||||
self.onEvent()
|
|
||||||
self.focusCard()
|
self.focusCard()
|
||||||
|
|
||||||
def rebuildSortIndex(self, key):
|
|
||||||
if key not in (
|
|
||||||
"question", "answer", "created", "modified", "due", "interval",
|
|
||||||
"reps", "factor", "noCount", "firstAnswered"):
|
|
||||||
return
|
|
||||||
old = self.deck.db.scalar("select sql from sqlite_master where name = :k",
|
|
||||||
k="ix_cards_sort")
|
|
||||||
if old and key in old:
|
|
||||||
return
|
|
||||||
self.deck.startProgress(2)
|
|
||||||
self.deck.updateProgress(_("Building Index..."))
|
|
||||||
self.deck.db.statement("drop index if exists ix_cards_sort")
|
|
||||||
self.deck.updateProgress()
|
|
||||||
if key in ("question", "answer"):
|
|
||||||
key = key + " collate nocase"
|
|
||||||
self.deck.db.statement(
|
|
||||||
"create index ix_cards_sort on cards (%s)" % key)
|
|
||||||
self.deck.db.statement("analyze")
|
|
||||||
self.deck.finishProgress()
|
|
||||||
|
|
||||||
def tagChanged(self, idx):
|
|
||||||
if idx == 0:
|
|
||||||
filter = ""
|
|
||||||
elif idx == 1:
|
|
||||||
filter = "tag:marked"
|
|
||||||
elif idx == 2:
|
|
||||||
filter = "is:suspended"
|
|
||||||
elif idx == 3:
|
|
||||||
filter = "is:due"
|
|
||||||
elif idx == 4:
|
|
||||||
filter = "tag:leech"
|
|
||||||
elif idx == 5:
|
|
||||||
filter = "tag:none"
|
|
||||||
else:
|
|
||||||
filter = "tag:" + self.alltags[idx]
|
|
||||||
self.lastFilter = filter
|
|
||||||
self.form.searchEdit.setText(filter)
|
|
||||||
self.updateSearch()
|
|
||||||
|
|
||||||
def updateFilterLabel(self):
|
|
||||||
selected = len(self.form.tableView.selectionModel().selectedRows())
|
|
||||||
self.setWindowTitle(ngettext("Browser (%(cur)d "
|
|
||||||
"of %(tot)d card shown; %(sel)s)", "Browser (%(cur)d "
|
|
||||||
"of %(tot)d cards shown; %(sel)s)", self.deck.cardCount) %
|
|
||||||
{
|
|
||||||
"cur": len(self.model.cards),
|
|
||||||
"tot": self.deck.cardCount(),
|
|
||||||
"sel": ngettext("%d selected", "%d selected", selected) % selected
|
|
||||||
} + " - " + self.deck.name())
|
|
||||||
|
|
||||||
def onEvent(self, type='field'):
|
|
||||||
if self.deck.undoName():
|
|
||||||
self.form.actionUndo.setText(_("Undo %s") %
|
|
||||||
self.deck.undoName())
|
|
||||||
self.form.actionUndo.setEnabled(True)
|
|
||||||
else:
|
|
||||||
self.form.actionUndo.setEnabled(False)
|
|
||||||
if type=="all":
|
|
||||||
self.updateAfterCardChange()
|
|
||||||
else:
|
|
||||||
# update list
|
|
||||||
# if self.currentRow and self.model.cards:
|
|
||||||
# self.model.updateCard(self.currentRow)
|
|
||||||
if type == "tag":
|
|
||||||
self.drawTags()
|
|
||||||
|
|
||||||
def updateSearch(self, force=True):
|
|
||||||
# fixme:
|
|
||||||
# if self.mw.inDbHandler:
|
|
||||||
# return
|
|
||||||
self.model.searchStr = unicode(self.form.searchEdit.text())
|
|
||||||
self.model.showMatching(force)
|
|
||||||
self.updateFilterLabel()
|
|
||||||
self.onEvent()
|
|
||||||
self.filterTimer = None
|
|
||||||
if self.model.cards:
|
|
||||||
self.form.cardInfoGroup.show()
|
|
||||||
self.form.fieldsArea.show()
|
|
||||||
else:
|
|
||||||
self.form.cardInfoGroup.hide()
|
|
||||||
self.form.fieldsArea.hide()
|
|
||||||
if not self.focusCard():
|
|
||||||
if self.model.cards:
|
|
||||||
self.form.tableView.selectRow(0)
|
|
||||||
if not self.model.cards:
|
|
||||||
self.editor.setFact(None)
|
|
||||||
|
|
||||||
def focusCard(self):
|
|
||||||
print "focus"
|
|
||||||
if self.card:
|
|
||||||
try:
|
|
||||||
self.card.id
|
|
||||||
except:
|
|
||||||
return False
|
|
||||||
row = self.cardRow()
|
|
||||||
if row >= 0:
|
|
||||||
sm = self.form.tableView.selectionModel()
|
|
||||||
sm.clear()
|
|
||||||
self.form.tableView.selectRow(row)
|
|
||||||
self.form.tableView.scrollTo(
|
|
||||||
self.model.index(row,0),
|
|
||||||
self.form.tableView.PositionAtCenter)
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def onClose(self):
|
|
||||||
saveSplitter(self.form.splitter, "editor1")
|
|
||||||
saveSplitter(self.form.splitter_2, "editor2")
|
|
||||||
saveSplitter(self.form.splitter_3, "editor3")
|
|
||||||
self.editor.saveNow()
|
|
||||||
self.editor.setFact(None)
|
|
||||||
saveGeom(self, "editor")
|
|
||||||
saveState(self, "editor")
|
|
||||||
saveHeader(self.form.tableView.horizontalHeader(), "editor")
|
|
||||||
self.hide()
|
|
||||||
aqt.dialogs.close("Browser")
|
|
||||||
self.teardownHooks()
|
|
||||||
return True
|
|
||||||
|
|
||||||
def closeEvent(self, evt):
|
|
||||||
if self.onClose():
|
|
||||||
evt.accept()
|
|
||||||
else:
|
|
||||||
evt.ignore()
|
|
||||||
|
|
||||||
def keyPressEvent(self, evt):
|
|
||||||
"Show answer on RET or register answer."
|
|
||||||
if evt.key() in (Qt.Key_Escape,):
|
|
||||||
self.close()
|
|
||||||
|
|
||||||
|
|
||||||
# Filter tree
|
# Filter tree
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
@ -680,7 +591,7 @@ class Browser(QMainWindow):
|
||||||
txt = ""
|
txt = ""
|
||||||
txt = " ".join(items)
|
txt = " ".join(items)
|
||||||
self.form.searchEdit.setText(txt)
|
self.form.searchEdit.setText(txt)
|
||||||
self.updateSearch()
|
self.onSearch()
|
||||||
|
|
||||||
def _modelTree(self):
|
def _modelTree(self):
|
||||||
root = QTreeWidgetItem([_("Models")])
|
root = QTreeWidgetItem([_("Models")])
|
||||||
|
@ -747,24 +658,12 @@ class Browser(QMainWindow):
|
||||||
self.editor = aqt.editor.Editor(self.mw,
|
self.editor = aqt.editor.Editor(self.mw,
|
||||||
self.form.fieldsArea)
|
self.form.fieldsArea)
|
||||||
self.editor.stealFocus = False
|
self.editor.stealFocus = False
|
||||||
# fixme:
|
|
||||||
#self.editor.onChange = self.onEvent
|
|
||||||
self.connect(self.form.tableView.selectionModel(),
|
self.connect(self.form.tableView.selectionModel(),
|
||||||
SIGNAL("currentRowChanged(QModelIndex, QModelIndex)"),
|
SIGNAL("currentRowChanged(QModelIndex, QModelIndex)"),
|
||||||
self.rowChanged)
|
self.rowChanged)
|
||||||
|
|
||||||
def rowChanged(self, current, previous):
|
# Card info
|
||||||
self.currentRow = current
|
######################################################################
|
||||||
self.card = self.model.getCard(current)
|
|
||||||
if not self.card:
|
|
||||||
self.editor.setFact(None, True)
|
|
||||||
return
|
|
||||||
fact = self.card.fact()
|
|
||||||
self.editor.setFact(fact)
|
|
||||||
self.editor.card = self.card
|
|
||||||
self.showCardInfo(self.card)
|
|
||||||
self.onEvent()
|
|
||||||
self.updateToggles()
|
|
||||||
|
|
||||||
def setupCardInfo(self):
|
def setupCardInfo(self):
|
||||||
self.card = None
|
self.card = None
|
||||||
|
@ -799,7 +698,6 @@ where id in (%s)""" % ",".join([
|
||||||
self.currentRow = self.form.tableView.currentIndex()
|
self.currentRow = self.form.tableView.currentIndex()
|
||||||
self.rowChanged(self.currentRow, None)
|
self.rowChanged(self.currentRow, None)
|
||||||
self.model.refresh()
|
self.model.refresh()
|
||||||
self.drawTags()
|
|
||||||
self.mw.reset()
|
self.mw.reset()
|
||||||
|
|
||||||
# Menu options
|
# Menu options
|
||||||
|
@ -822,7 +720,7 @@ where id in (%s)""" % ",".join([
|
||||||
self.deck.setUndoEnd(n)
|
self.deck.setUndoEnd(n)
|
||||||
new = min(max(0, new), len(self.model.cards) - 1)
|
new = min(max(0, new), len(self.model.cards) - 1)
|
||||||
self.form.tableView.selectRow(new)
|
self.form.tableView.selectRow(new)
|
||||||
self.updateSearch()
|
self.onSearch()
|
||||||
self.updateAfterCardChange()
|
self.updateAfterCardChange()
|
||||||
|
|
||||||
def addTags(self, tags=None, label=None):
|
def addTags(self, tags=None, label=None):
|
||||||
|
@ -962,7 +860,7 @@ where id in %s""" % ids2str(sf))
|
||||||
self.deck.flushMod()
|
self.deck.flushMod()
|
||||||
self.deck.finishProgress()
|
self.deck.finishProgress()
|
||||||
self.deck.setUndoEnd(n)
|
self.deck.setUndoEnd(n)
|
||||||
self.updateSearch()
|
self.onSearch()
|
||||||
self.updateAfterCardChange()
|
self.updateAfterCardChange()
|
||||||
|
|
||||||
def cram(self):
|
def cram(self):
|
||||||
|
@ -987,7 +885,7 @@ where id in %s""" % ids2str(sf))
|
||||||
self.deck.setUndoStart(n)
|
self.deck.setUndoStart(n)
|
||||||
self.deck.changeModel(sf, *d.ret)
|
self.deck.changeModel(sf, *d.ret)
|
||||||
self.deck.setUndoEnd(n)
|
self.deck.setUndoEnd(n)
|
||||||
self.updateSearch()
|
self.onSearch()
|
||||||
self.updateAfterCardChange()
|
self.updateAfterCardChange()
|
||||||
|
|
||||||
# Edit: selection
|
# Edit: selection
|
||||||
|
@ -1015,13 +913,6 @@ where id in %s""" % ids2str(sf))
|
||||||
self.form.tableView.selectAll()
|
self.form.tableView.selectAll()
|
||||||
sm.select(items, QItemSelectionModel.Deselect | QItemSelectionModel.Rows)
|
sm.select(items, QItemSelectionModel.Deselect | QItemSelectionModel.Rows)
|
||||||
|
|
||||||
def reverseOrder(self):
|
|
||||||
self.deck.setVar("reverseOrder", not self.deck.getInt("reverseOrder"))
|
|
||||||
self.model.cards.reverse()
|
|
||||||
self.model.reset()
|
|
||||||
self.focusCard()
|
|
||||||
self.updateSortOrder()
|
|
||||||
|
|
||||||
# Edit: undo
|
# Edit: undo
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
@ -1105,7 +996,7 @@ where id in %s""" % ids2str(sf))
|
||||||
self.deck.setUndoEnd(n)
|
self.deck.setUndoEnd(n)
|
||||||
self.deck.finishProgress()
|
self.deck.finishProgress()
|
||||||
self.mw.reset()
|
self.mw.reset()
|
||||||
self.updateSearch()
|
self.onSearch()
|
||||||
self.updateAfterCardChange()
|
self.updateAfterCardChange()
|
||||||
if changed is not None:
|
if changed is not None:
|
||||||
ui.utils.showInfo(ngettext("%(a)d of %(b)d fact updated", "%(a)d of %(b)d facts updated", len(sf)) % {
|
ui.utils.showInfo(ngettext("%(a)d of %(b)d fact updated", "%(a)d of %(b)d facts updated", len(sf)) % {
|
||||||
|
@ -1189,7 +1080,7 @@ select fm.id, fm.name from fieldmodels fm""")
|
||||||
|
|
||||||
def dupeLinkClicked(self, link):
|
def dupeLinkClicked(self, link):
|
||||||
self.form.searchEdit.setText(str(link.toString()))
|
self.form.searchEdit.setText(str(link.toString()))
|
||||||
self.updateSearch()
|
self.onSearch()
|
||||||
self.onFact()
|
self.onFact()
|
||||||
|
|
||||||
# Jumping
|
# Jumping
|
||||||
|
|
|
@ -79,9 +79,6 @@
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<property name="placeholderText">
|
|
||||||
<string>Type here to search</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
|
|
Loading…
Reference in a new issue