2019-02-05 04:59:03 +01:00
|
|
|
# Copyright: Ankitects Pty Ltd and contributors
|
2012-12-21 08:51:59 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
|
2019-12-20 10:19:03 +01:00
|
|
|
import time
|
|
|
|
|
2012-12-21 08:51:59 +01:00
|
|
|
import aqt
|
2019-03-04 02:58:34 +01:00
|
|
|
from anki.lang import _
|
2019-12-20 10:19:03 +01:00
|
|
|
from aqt.qt import *
|
2020-02-02 04:07:24 +01:00
|
|
|
from aqt.theme import theme_manager
|
2019-12-23 01:34:10 +01:00
|
|
|
from aqt.utils import (
|
|
|
|
addCloseShortcut,
|
|
|
|
getSaveFile,
|
|
|
|
maybeHideClose,
|
|
|
|
restoreGeom,
|
|
|
|
saveGeom,
|
|
|
|
tooltip,
|
|
|
|
)
|
2012-12-21 08:51:59 +01:00
|
|
|
|
|
|
|
# Deck Stats
|
|
|
|
######################################################################
|
|
|
|
|
|
|
|
|
2019-12-23 01:34:10 +01:00
|
|
|
class DeckStats(QDialog):
|
2012-12-21 08:51:59 +01:00
|
|
|
def __init__(self, mw):
|
|
|
|
QDialog.__init__(self, mw, Qt.Window)
|
2016-07-04 05:22:35 +02:00
|
|
|
mw.setupDialogGC(self)
|
2012-12-21 08:51:59 +01:00
|
|
|
self.mw = mw
|
|
|
|
self.name = "deckStats"
|
|
|
|
self.period = 0
|
|
|
|
self.form = aqt.forms.stats.Ui_Dialog()
|
|
|
|
self.oldPos = None
|
|
|
|
self.wholeCollection = False
|
|
|
|
self.setMinimumWidth(700)
|
|
|
|
f = self.form
|
2020-02-02 04:07:24 +01:00
|
|
|
if theme_manager.night_mode and not theme_manager.macos_dark_mode():
|
|
|
|
self.setStyleSheet("QGroupBox { padding-top: 0; }")
|
2012-12-21 08:51:59 +01:00
|
|
|
f.setupUi(self)
|
|
|
|
restoreGeom(self, self.name)
|
2019-12-23 01:34:10 +01:00
|
|
|
b = f.buttonBox.addButton(_("Save PDF"), QDialogButtonBox.ActionRole)
|
2017-01-13 08:36:26 +01:00
|
|
|
b.clicked.connect(self.saveImage)
|
2012-12-21 08:51:59 +01:00
|
|
|
b.setAutoDefault(False)
|
2016-05-31 10:51:40 +02:00
|
|
|
f.groups.clicked.connect(lambda: self.changeScope("deck"))
|
2012-12-21 08:51:59 +01:00
|
|
|
f.groups.setShortcut("g")
|
2016-05-31 10:51:40 +02:00
|
|
|
f.all.clicked.connect(lambda: self.changeScope("collection"))
|
|
|
|
f.month.clicked.connect(lambda: self.changePeriod(0))
|
|
|
|
f.year.clicked.connect(lambda: self.changePeriod(1))
|
|
|
|
f.life.clicked.connect(lambda: self.changePeriod(2))
|
2012-12-21 08:51:59 +01:00
|
|
|
maybeHideClose(self.form.buttonBox)
|
2012-12-22 01:11:29 +01:00
|
|
|
addCloseShortcut(self)
|
2016-05-31 10:51:40 +02:00
|
|
|
self.show()
|
2018-10-23 09:09:16 +02:00
|
|
|
self.refresh()
|
2017-06-06 08:16:00 +02:00
|
|
|
self.activateWindow()
|
2012-12-21 08:51:59 +01:00
|
|
|
|
|
|
|
def reject(self):
|
2019-09-16 07:16:41 +02:00
|
|
|
self.form.web = None
|
2012-12-21 08:51:59 +01:00
|
|
|
saveGeom(self, self.name)
|
2017-08-16 04:45:33 +02:00
|
|
|
aqt.dialogs.markClosed("DeckStats")
|
2012-12-21 08:51:59 +01:00
|
|
|
QDialog.reject(self)
|
|
|
|
|
2017-08-16 04:45:33 +02:00
|
|
|
def closeWithCallback(self, callback):
|
|
|
|
self.reject()
|
|
|
|
callback()
|
|
|
|
|
2017-01-13 08:36:26 +01:00
|
|
|
def _imagePath(self):
|
2019-12-23 01:34:10 +01:00
|
|
|
name = time.strftime("-%Y-%m-%d@%H-%M-%S.pdf", time.localtime(time.time()))
|
|
|
|
name = "anki-" + _("stats") + name
|
|
|
|
file = getSaveFile(
|
|
|
|
self,
|
|
|
|
title=_("Save PDF"),
|
|
|
|
dir_description="stats",
|
|
|
|
key="stats",
|
|
|
|
ext=".pdf",
|
|
|
|
fname=name,
|
|
|
|
)
|
2017-09-10 07:50:34 +02:00
|
|
|
return file
|
2017-01-13 08:36:26 +01:00
|
|
|
|
|
|
|
def saveImage(self):
|
|
|
|
path = self._imagePath()
|
2017-09-10 07:50:34 +02:00
|
|
|
if not path:
|
|
|
|
return
|
2017-01-13 08:36:26 +01:00
|
|
|
self.form.web.page().printToPdf(path)
|
2017-09-10 07:50:34 +02:00
|
|
|
tooltip(_("Saved."))
|
2012-12-21 08:51:59 +01:00
|
|
|
|
|
|
|
def changePeriod(self, n):
|
|
|
|
self.period = n
|
|
|
|
self.refresh()
|
|
|
|
|
|
|
|
def changeScope(self, type):
|
|
|
|
self.wholeCollection = type == "collection"
|
|
|
|
self.refresh()
|
|
|
|
|
|
|
|
def refresh(self):
|
2018-10-23 09:09:16 +02:00
|
|
|
self.mw.progress.start(immediate=True, parent=self)
|
2012-12-21 08:51:59 +01:00
|
|
|
stats = self.mw.col.stats()
|
|
|
|
stats.wholeCollection = self.wholeCollection
|
|
|
|
self.report = stats.report(type=self.period)
|
2020-02-12 21:03:11 +01:00
|
|
|
self.form.web.title = "deck stats"
|
2019-12-23 01:34:10 +01:00
|
|
|
self.form.web.stdHtml(
|
2020-02-12 22:00:13 +01:00
|
|
|
"<html><body>" + self.report + "</body></html>",
|
2020-02-15 15:03:43 +01:00
|
|
|
js=["jquery.js", "plot.js"],
|
2020-02-12 22:00:13 +01:00
|
|
|
context=self,
|
2019-12-23 01:34:10 +01:00
|
|
|
)
|
2012-12-21 08:51:59 +01:00
|
|
|
self.mw.progress.finish()
|