mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 14:32:22 -04:00
fix stats, start work on revamped overview
This commit is contained in:
parent
67c2ccc954
commit
5f1b762a15
9 changed files with 57 additions and 66 deletions
|
@ -25,8 +25,7 @@ class DeckBrowser(object):
|
||||||
else:
|
else:
|
||||||
cmd = url
|
cmd = url
|
||||||
if cmd == "open":
|
if cmd == "open":
|
||||||
deck = self._decks[int(arg)]
|
self._selDeck(arg)
|
||||||
self._selDeck(deck)
|
|
||||||
elif cmd == "opts":
|
elif cmd == "opts":
|
||||||
self._optsForRow(int(arg))
|
self._optsForRow(int(arg))
|
||||||
elif cmd == "download":
|
elif cmd == "download":
|
||||||
|
@ -42,8 +41,9 @@ class DeckBrowser(object):
|
||||||
elif cmd == "refresh":
|
elif cmd == "refresh":
|
||||||
self.refresh()
|
self.refresh()
|
||||||
|
|
||||||
def _selDeck(self, rec):
|
def _selDeck(self, did):
|
||||||
print rec
|
self.mw.col.decks.select(did)
|
||||||
|
self.mw.moveToState("overview")
|
||||||
|
|
||||||
# HTML generation
|
# HTML generation
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
|
@ -190,7 +190,7 @@ Are you sure?"""):
|
||||||
self.onSync()
|
self.onSync()
|
||||||
# then load collection and launch into the deck browser
|
# then load collection and launch into the deck browser
|
||||||
self.col = Collection(self.pm.collectionPath())
|
self.col = Collection(self.pm.collectionPath())
|
||||||
self.moveToState("deckBrowser")
|
self.moveToState("overview")
|
||||||
|
|
||||||
def unloadProfile(self):
|
def unloadProfile(self):
|
||||||
self.col = None
|
self.col = None
|
||||||
|
@ -227,6 +227,7 @@ Are you sure?"""):
|
||||||
self.reviewer.show()
|
self.reviewer.show()
|
||||||
|
|
||||||
def _reviewCleanup(self, newState):
|
def _reviewCleanup(self, newState):
|
||||||
|
print "rethink cleanup code?"
|
||||||
if newState != "resetRequired":
|
if newState != "resetRequired":
|
||||||
self.reviewer.cleanup()
|
self.reviewer.cleanup()
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ class ModelChooser(QHBoxLayout):
|
||||||
QHBoxLayout.__init__(self)
|
QHBoxLayout.__init__(self)
|
||||||
self.widget = widget
|
self.widget = widget
|
||||||
self.mw = mw
|
self.mw = mw
|
||||||
self.deck = mw.deck
|
self.deck = mw.col
|
||||||
self.handleCards = cards
|
self.handleCards = cards
|
||||||
self.label = label
|
self.label = label
|
||||||
self._ignoreReset = False
|
self._ignoreReset = False
|
||||||
|
@ -151,7 +151,7 @@ class AddModel(QDialog):
|
||||||
def __init__(self, mw, parent=None):
|
def __init__(self, mw, parent=None):
|
||||||
self.parent = parent or mw
|
self.parent = parent or mw
|
||||||
self.mw = mw
|
self.mw = mw
|
||||||
self.deck = mw.deck
|
self.deck = mw.col
|
||||||
QDialog.__init__(self, self.parent, Qt.Window)
|
QDialog.__init__(self, self.parent, Qt.Window)
|
||||||
self.model = None
|
self.model = None
|
||||||
self.dialog = aqt.forms.addmodel.Ui_Dialog()
|
self.dialog = aqt.forms.addmodel.Ui_Dialog()
|
||||||
|
@ -191,7 +191,7 @@ class AddModel(QDialog):
|
||||||
self.model = model(self.deck)
|
self.model = model(self.deck)
|
||||||
else:
|
else:
|
||||||
# add copy to deck
|
# add copy to deck
|
||||||
self.mw.deck.addModel(model)
|
self.mw.col.addModel(model)
|
||||||
self.model = model
|
self.model = model
|
||||||
QDialog.accept(self)
|
QDialog.accept(self)
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ class Models(QDialog):
|
||||||
self.mw = mw
|
self.mw = mw
|
||||||
self.parent = parent or mw
|
self.parent = parent or mw
|
||||||
QDialog.__init__(self, self.parent, Qt.Window)
|
QDialog.__init__(self, self.parent, Qt.Window)
|
||||||
self.deck = mw.deck
|
self.deck = mw.col
|
||||||
self.mw.checkpoint(_("Models"))
|
self.mw.checkpoint(_("Models"))
|
||||||
self.form = aqt.forms.models.Ui_Dialog()
|
self.form = aqt.forms.models.Ui_Dialog()
|
||||||
self.form.setupUi(self)
|
self.form.setupUi(self)
|
||||||
|
|
|
@ -17,7 +17,6 @@ class Overview(object):
|
||||||
addHook("reset", self.refresh)
|
addHook("reset", self.refresh)
|
||||||
|
|
||||||
def show(self):
|
def show(self):
|
||||||
self._setupToolbar()
|
|
||||||
self.web.setKeyHandler(self._keyHandler)
|
self.web.setKeyHandler(self._keyHandler)
|
||||||
self.web.setLinkHandler(self._linkHandler)
|
self.web.setLinkHandler(self._linkHandler)
|
||||||
self.refresh()
|
self.refresh()
|
||||||
|
@ -41,11 +40,11 @@ class Overview(object):
|
||||||
def _linkHandler(self, url):
|
def _linkHandler(self, url):
|
||||||
print "link", url
|
print "link", url
|
||||||
if url == "study":
|
if url == "study":
|
||||||
self.mw.deck.reset()
|
self.mw.col.reset()
|
||||||
self.mw.moveToState("review")
|
self.mw.moveToState("review")
|
||||||
elif url == "cram":
|
elif url == "cram":
|
||||||
return showInfo("not yet implemented")
|
return showInfo("not yet implemented")
|
||||||
#self.mw.deck.cramGroups()
|
#self.mw.col.cramGroups()
|
||||||
#self.mw.moveToState("review")
|
#self.mw.moveToState("review")
|
||||||
elif url == "opts":
|
elif url == "opts":
|
||||||
self.mw.onStudyOptions()
|
self.mw.onStudyOptions()
|
||||||
|
@ -60,18 +59,28 @@ class Overview(object):
|
||||||
fc = self._ovForecast()
|
fc = self._ovForecast()
|
||||||
tbl = self._overviewTable()
|
tbl = self._overviewTable()
|
||||||
but = self.mw.button
|
but = self.mw.button
|
||||||
|
deck = self.mw.col.decks.current()
|
||||||
|
dname = deck['name']
|
||||||
|
sid = deck.get("sharedFrom")
|
||||||
|
if True: # sid:
|
||||||
|
shareLink = '<a class=smallLink href="review">Reviews and Updates</a>'
|
||||||
|
else:
|
||||||
|
shareLink = ""
|
||||||
self.web.stdHtml(self._overviewBody % dict(
|
self.web.stdHtml(self._overviewBody % dict(
|
||||||
title=_("Overview"),
|
title=_("Overview"),
|
||||||
table=tbl,
|
table=tbl,
|
||||||
fcsub=_("Reviews over next two weeks"),
|
fcsub=_("Reviews over next two weeks"),
|
||||||
|
deck=deck['name'],
|
||||||
|
shareLink=shareLink,
|
||||||
|
desc="",
|
||||||
fcdata=fc,
|
fcdata=fc,
|
||||||
), css)
|
), css)
|
||||||
|
|
||||||
_overviewBody = """
|
_overviewBody = """
|
||||||
<center>
|
<center>
|
||||||
<h1>%(title)s</h1>
|
<h3>%(deck)s</h3>
|
||||||
<p>
|
%(shareLink)s
|
||||||
%(table)s
|
%(desc)s
|
||||||
<p>
|
<p>
|
||||||
<div id="placeholder" style="width:350px; height:100px;"></div>
|
<div id="placeholder" style="width:350px; height:100px;"></div>
|
||||||
<span class=sub>%(fcsub)s</span>
|
<span class=sub>%(fcsub)s</span>
|
||||||
|
@ -101,10 +110,12 @@ $(function () {
|
||||||
.due { text-align: right; }
|
.due { text-align: right; }
|
||||||
.new { text-align: right; }
|
.new { text-align: right; }
|
||||||
.sub { font-size: 80%; color: #555; }
|
.sub { font-size: 80%; color: #555; }
|
||||||
|
.smallLink { font-size: 12px; }
|
||||||
|
h3 { margin-bottom: 0; }
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def _overviewTable(self):
|
def _overviewTable(self):
|
||||||
counts = self._ovCounts()
|
return ""
|
||||||
but = self.mw.button
|
but = self.mw.button
|
||||||
buf = "<table cellspacing=0 cellpadding=3 width=400>"
|
buf = "<table cellspacing=0 cellpadding=3 width=400>"
|
||||||
buf += "<tr><th></th><th align=right>%s</th>" % _("Due")
|
buf += "<tr><th></th><th align=right>%s</th>" % _("Due")
|
||||||
|
@ -129,27 +140,8 @@ $(function () {
|
||||||
# Data
|
# Data
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
def _ovCounts(self):
|
|
||||||
# we have the limited count already
|
|
||||||
selcnt = [0,0,0] #self.mw.deck.sched.selCounts()
|
|
||||||
allcnt = [0,0,0] #self.mw.deck.sched.allCounts()
|
|
||||||
return [
|
|
||||||
limitedCount(selcnt[1] + selcnt[2]),
|
|
||||||
selcnt[0],
|
|
||||||
limitedCount(allcnt[1] + allcnt[2]),
|
|
||||||
allcnt[0],
|
|
||||||
]
|
|
||||||
|
|
||||||
def _ovForecast(self):
|
def _ovForecast(self):
|
||||||
fc = self.mw.deck.sched.dueForecast(14)
|
fc = self.mw.col.sched.dueForecast(14)
|
||||||
if not sum(fc):
|
if not sum(fc):
|
||||||
return "'%s'" % _('No cards due in next two weeks')
|
return "'%s'" % _('No cards due in next two weeks')
|
||||||
return simplejson.dumps(tuple(enumerate(fc)))
|
return simplejson.dumps(tuple(enumerate(fc)))
|
||||||
|
|
||||||
# Toolbar
|
|
||||||
##########################################################################
|
|
||||||
|
|
||||||
def _setupToolbar(self):
|
|
||||||
if not self.mw.config['showToolbar']:
|
|
||||||
return
|
|
||||||
self.mw.form.toolBar.show()
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ class Reviewer(object):
|
||||||
def lastCard(self):
|
def lastCard(self):
|
||||||
if self._answeredIds:
|
if self._answeredIds:
|
||||||
if not self.card or self._answeredIds[-1] != self.card.id:
|
if not self.card or self._answeredIds[-1] != self.card.id:
|
||||||
return self.mw.deck.getCard(self._answeredIds[-1])
|
return self.mw.col.getCard(self._answeredIds[-1])
|
||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
self._hideStatus()
|
self._hideStatus()
|
||||||
|
@ -52,7 +52,7 @@ class Reviewer(object):
|
||||||
# a card has been retrieved from undo
|
# a card has been retrieved from undo
|
||||||
c = self.cardQueue.pop()
|
c = self.cardQueue.pop()
|
||||||
else:
|
else:
|
||||||
c = self.mw.deck.sched.getCard()
|
c = self.mw.col.sched.getCard()
|
||||||
self.card = c
|
self.card = c
|
||||||
clearAudioQueue()
|
clearAudioQueue()
|
||||||
if c:
|
if c:
|
||||||
|
@ -65,7 +65,7 @@ class Reviewer(object):
|
||||||
else:
|
else:
|
||||||
self._hideStatus()
|
self._hideStatus()
|
||||||
self.mw.disableCardMenuItems()
|
self.mw.disableCardMenuItems()
|
||||||
if self.mw.deck.cardCount():
|
if self.mw.col.cardCount():
|
||||||
self._showCongrats()
|
self._showCongrats()
|
||||||
else:
|
else:
|
||||||
self._showEmpty()
|
self._showEmpty()
|
||||||
|
@ -184,7 +184,7 @@ $(".ansbut").focus();
|
||||||
if self.mw.config['autoplaySounds']:
|
if self.mw.config['autoplaySounds']:
|
||||||
playFromText(q)
|
playFromText(q)
|
||||||
# render
|
# render
|
||||||
esc = self.mw.deck.media.escapeImages
|
esc = self.mw.col.media.escapeImages
|
||||||
q=esc(mungeQA(q)) + self.typeAnsInput()
|
q=esc(mungeQA(q)) + self.typeAnsInput()
|
||||||
a=esc(mungeQA(a))
|
a=esc(mungeQA(a))
|
||||||
self.web.eval("_updateQA(%s);" % simplejson.dumps(
|
self.web.eval("_updateQA(%s);" % simplejson.dumps(
|
||||||
|
@ -208,13 +208,13 @@ $(".ansbut").focus();
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
def _defaultEase(self):
|
def _defaultEase(self):
|
||||||
if self.mw.deck.sched.answerButtons(self.card) == 4:
|
if self.mw.col.sched.answerButtons(self.card) == 4:
|
||||||
return 3
|
return 3
|
||||||
else:
|
else:
|
||||||
return 2
|
return 2
|
||||||
|
|
||||||
def _answerButtons(self):
|
def _answerButtons(self):
|
||||||
if self.mw.deck.sched.answerButtons(self.card) == 4:
|
if self.mw.col.sched.answerButtons(self.card) == 4:
|
||||||
labels = (_("Again"), _("Hard"), _("Good"), _("Easy"))
|
labels = (_("Again"), _("Hard"), _("Good"), _("Easy"))
|
||||||
else:
|
else:
|
||||||
labels = (_("Again"), _("Good"), _("Easy"))
|
labels = (_("Again"), _("Good"), _("Easy"))
|
||||||
|
@ -240,7 +240,7 @@ $(".ansbut").focus();
|
||||||
def _buttonTime(self, i, green):
|
def _buttonTime(self, i, green):
|
||||||
if self.mw.config['suppressEstimates']:
|
if self.mw.config['suppressEstimates']:
|
||||||
return ""
|
return ""
|
||||||
txt = self.mw.deck.sched.nextIvlStr(self.card, i+1, True)
|
txt = self.mw.col.sched.nextIvlStr(self.card, i+1, True)
|
||||||
if i == 0:
|
if i == 0:
|
||||||
txt = '<span style="color: #700">%s</span>' % txt
|
txt = '<span style="color: #700">%s</span>' % txt
|
||||||
elif i == green:
|
elif i == green:
|
||||||
|
@ -252,7 +252,7 @@ $(".ansbut").focus();
|
||||||
|
|
||||||
def _answerCard(self, ease):
|
def _answerCard(self, ease):
|
||||||
"Reschedule card and show next."
|
"Reschedule card and show next."
|
||||||
self.mw.deck.sched.answerCard(self.card, ease)
|
self.mw.col.sched.answerCard(self.card, ease)
|
||||||
self._answeredIds.append(self.card.id)
|
self._answeredIds.append(self.card.id)
|
||||||
self.mw.autosave()
|
self.mw.autosave()
|
||||||
self.nextCard()
|
self.nextCard()
|
||||||
|
@ -373,7 +373,7 @@ div#filler {
|
||||||
|
|
||||||
def _styles(self):
|
def _styles(self):
|
||||||
css = self.mw.sharedCSS
|
css = self.mw.sharedCSS
|
||||||
css += self.mw.deck.models.css()
|
css += self.mw.col.models.css()
|
||||||
css += self._css
|
css += self._css
|
||||||
return css
|
return css
|
||||||
|
|
||||||
|
@ -401,7 +401,7 @@ div#filler {
|
||||||
def processTypedAns(self, given):
|
def processTypedAns(self, given):
|
||||||
ord = self.typeAns()
|
ord = self.typeAns()
|
||||||
try:
|
try:
|
||||||
cor = self.mw.deck.media.strip(
|
cor = self.mw.col.media.strip(
|
||||||
stripHTML(self.card.note().fields[ord]))
|
stripHTML(self.card.note().fields[ord]))
|
||||||
except IndexError:
|
except IndexError:
|
||||||
self.card.template()['typeAns'] = None
|
self.card.template()['typeAns'] = None
|
||||||
|
@ -481,7 +481,7 @@ div#filler {
|
||||||
<p>
|
<p>
|
||||||
%s
|
%s
|
||||||
<script>$("#ov").focus();</script>
|
<script>$("#ov").focus();</script>
|
||||||
</center>""" % (self.mw.deck.sched.finishedMsg(),
|
</center>""" % (self.mw.col.sched.finishedMsg(),
|
||||||
self.mw.button(key="o", name=_("Overview"), link="ov", id='ov'))
|
self.mw.button(key="o", name=_("Overview"), link="ov", id='ov'))
|
||||||
self.web.stdHtml(buf, css=self.mw.sharedCSS)
|
self.web.stdHtml(buf, css=self.mw.sharedCSS)
|
||||||
runHook('deckFinished')
|
runHook('deckFinished')
|
||||||
|
@ -574,8 +574,8 @@ div#filler {
|
||||||
|
|
||||||
# fixme: only show progress for reviews, and only when revs due?
|
# fixme: only show progress for reviews, and only when revs due?
|
||||||
def _updateRemaining(self):
|
def _updateRemaining(self):
|
||||||
counts = list(self.mw.deck.sched.repCounts())
|
counts = list(self.mw.col.sched.repCounts())
|
||||||
idx = self.mw.deck.sched.countIdx(self.card)
|
idx = self.mw.col.sched.countIdx(self.card)
|
||||||
counts[idx] = "<u>%s</u>" % (counts[idx]+1)
|
counts[idx] = "<u>%s</u>" % (counts[idx]+1)
|
||||||
space = " " * 2
|
space = " " * 2
|
||||||
ctxt = '<font color="#000099">%s</font>' % counts[0]
|
ctxt = '<font color="#000099">%s</font>' % counts[0]
|
||||||
|
|
20
aqt/stats.py
20
aqt/stats.py
|
@ -45,7 +45,7 @@ class CardStats(object):
|
||||||
return
|
return
|
||||||
txt = ""
|
txt = ""
|
||||||
r = self.mw.reviewer
|
r = self.mw.reviewer
|
||||||
d = self.mw.deck
|
d = self.mw.col
|
||||||
if r.card:
|
if r.card:
|
||||||
txt += _("<h1>Current</h1>")
|
txt += _("<h1>Current</h1>")
|
||||||
txt += d.cardStats(r.card)
|
txt += d.cardStats(r.card)
|
||||||
|
@ -70,9 +70,9 @@ class DeckStats(QDialog):
|
||||||
self.mw = mw
|
self.mw = mw
|
||||||
self.name = "deckStats"
|
self.name = "deckStats"
|
||||||
self.period = 0
|
self.period = 0
|
||||||
self.sel = True
|
|
||||||
self.form = aqt.forms.stats.Ui_Dialog()
|
self.form = aqt.forms.stats.Ui_Dialog()
|
||||||
self.oldPos = None
|
self.oldPos = None
|
||||||
|
self.wholeCollection = False
|
||||||
f = self.form
|
f = self.form
|
||||||
f.setupUi(self)
|
f.setupUi(self)
|
||||||
restoreGeom(self, self.name)
|
restoreGeom(self, self.name)
|
||||||
|
@ -82,9 +82,9 @@ class DeckStats(QDialog):
|
||||||
b.setAutoDefault(False)
|
b.setAutoDefault(False)
|
||||||
c = self.connect
|
c = self.connect
|
||||||
s = SIGNAL("clicked()")
|
s = SIGNAL("clicked()")
|
||||||
c(f.groups, s, lambda: self.changeSel(True))
|
c(f.groups, s, lambda: self.changeScope("deck"))
|
||||||
f.groups.setShortcut("g")
|
f.groups.setShortcut("g")
|
||||||
c(f.all, s, lambda: self.changeSel(False))
|
c(f.all, s, lambda: self.changeScope("collection"))
|
||||||
c(f.month, s, lambda: self.changePeriod(0))
|
c(f.month, s, lambda: self.changePeriod(0))
|
||||||
c(f.year, s, lambda: self.changePeriod(1))
|
c(f.year, s, lambda: self.changePeriod(1))
|
||||||
c(f.life, s, lambda: self.changePeriod(2))
|
c(f.life, s, lambda: self.changePeriod(2))
|
||||||
|
@ -115,10 +115,8 @@ class DeckStats(QDialog):
|
||||||
self.period = n
|
self.period = n
|
||||||
self.refresh()
|
self.refresh()
|
||||||
|
|
||||||
def changeSel(self, sel):
|
def changeScope(self, type):
|
||||||
self.sel = sel
|
self.wholeCollection = type == "collection"
|
||||||
if sel:
|
|
||||||
self.mw.onGroups(self)
|
|
||||||
self.refresh()
|
self.refresh()
|
||||||
|
|
||||||
def loadFin(self, b):
|
def loadFin(self, b):
|
||||||
|
@ -127,8 +125,8 @@ class DeckStats(QDialog):
|
||||||
def refresh(self):
|
def refresh(self):
|
||||||
self.mw.progress.start(immediate=True)
|
self.mw.progress.start(immediate=True)
|
||||||
self.oldPos = self.form.web.page().mainFrame().scrollPosition()
|
self.oldPos = self.form.web.page().mainFrame().scrollPosition()
|
||||||
self.report = self.mw.deck.stats().report(
|
stats = self.mw.col.stats()
|
||||||
type=self.period)
|
stats.wholeCollection = self.wholeCollection
|
||||||
|
self.report = stats.report(type=self.period)
|
||||||
self.form.web.setHtml(self.report)
|
self.form.web.setHtml(self.report)
|
||||||
|
|
||||||
self.mw.progress.finish()
|
self.mw.progress.finish()
|
||||||
|
|
|
@ -30,7 +30,7 @@ class StudyOptions(QDialog):
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
f = self.form
|
f = self.form
|
||||||
d = self.mw.deck
|
d = self.mw.col
|
||||||
qc = d.conf
|
qc = d.conf
|
||||||
f.newPerDay.setValue(qc['newPerDay'])
|
f.newPerDay.setValue(qc['newPerDay'])
|
||||||
f.newOrder.setCurrentIndex(qc['newOrder'])
|
f.newOrder.setCurrentIndex(qc['newOrder'])
|
||||||
|
@ -47,7 +47,7 @@ class StudyOptions(QDialog):
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
f = self.form
|
f = self.form
|
||||||
d = self.mw.deck
|
d = self.mw.col
|
||||||
qc = d.conf
|
qc = d.conf
|
||||||
old = qc['newOrder']
|
old = qc['newOrder']
|
||||||
qc['newOrder'] = f.newOrder.currentIndex()
|
qc['newOrder'] = f.newOrder.currentIndex()
|
||||||
|
@ -71,7 +71,7 @@ class StudyOptions(QDialog):
|
||||||
return
|
return
|
||||||
self.mw.progress.start()
|
self.mw.progress.start()
|
||||||
if new == 1:
|
if new == 1:
|
||||||
self.mw.deck.sched.orderCards()
|
self.mw.col.sched.orderCards()
|
||||||
else:
|
else:
|
||||||
self.mw.deck.sched.randomizeCards()
|
self.mw.col.sched.randomizeCards()
|
||||||
self.mw.progress.finish()
|
self.mw.progress.finish()
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QRadioButton" name="groups">
|
<widget class="QRadioButton" name="groups">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>groups</string>
|
<string>deck</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="checked">
|
<property name="checked">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QRadioButton" name="all">
|
<widget class="QRadioButton" name="all">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>all</string>
|
<string>collection</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
Loading…
Reference in a new issue