Open
Description
Every card you do is another line in the progress bar, in red/grey/green/blue depending on whether you answered again/hard/good/easy.
Proof of concept
class QProgressBarCode(QProgressBar):
def __init__(self):
QProgressBar.__init__(self)
def setBarCodeColors(self, barcodecolors):
self.barcodecolors = barcodecolors
def paintEvent(self, e):
if hasattr(self, 'barcodecolors'):
dc = QPainter(self)
for i, color in enumerate(reversed(self.barcodecolors)):
dc.fillRect(0, 0, (self.value()-i) / self.maximum() * self.width(), 20, color)
dc.drawText(0,0, self.width(), self.height(), Qt.AlignCenter, self.text());
dc.end()
else:
QProgressBar.paintEvent(self, e)
self.progressBar = QProgressBarCode()
self.progressBar.setMinimumWidth(mw.size().width());
self.progressBar.setRange(0, 1000) #set to done+left
a = (mw.col.sched.day_cutoff - 86400) * 1000
reviews = mw.col.db.list("""select ease from revlog where id > ?""", a)
self.progressBar.setValue(len(reviews))
self.progressBar.setBarCodeColors([{1:QColor.fromRgbF(0.827,0.184,0.184,1), 2:QColor.fromRgbF(0.271,0.353,0.392,1), 3:QColor.fromRgbF(0.298,0.686,0.314,1), 4:QColor.fromRgbF(0.12,0.663,0.957,1)}[ease] for ease in reviews])
self.progressBar.setFormat("408 (9.47%) done | 3900 (90.53%) left | 12.00 (14.72) s/card | 43.38% (33.86%) AR | 58.16% (70.82%) TR | 50.00% (81.82%) SMTR | 01:21 spent | 12:59 more | ETA 02:24 AM")
self.progressBar.show()
Control+enter
In the addon
diff --git a/reviewer_progress_bar-orig.py b/reviewer_progress_bar.py
index 8abd4b0..e86810b 100644
--- a/reviewer_progress_bar-orig.py
+++ b/reviewer_progress_bar.py
@@ -199,11 +199,27 @@ def add_info():
gui_hooks.main_window_did_init.append(add_info)
+class QProgressBarCode(QProgressBar):
+ def __init__(self):
+ QProgressBar.__init__(self)
+
+ def setBarCodeColors(self, barcodecolors):
+ self.barcodecolors = barcodecolors
+
+ def paintEvent(self, e):
+ if hasattr(self, 'barcodecolors'):
+ dc = QPainter(self)
+ for i, color in enumerate(reversed(self.barcodecolors)):
+ dc.fillRect(0, 0, (self.value()-i) / self.maximum() * self.width(), self.height(), color)
+ dc.drawText(0,0, self.width(), self.height(), Qt.AlignCenter, self.text());
+ dc.end()
+ else:
+ QProgressBar.paintEvent(self, e)
def initPB() -> None:
"""Initialize and set parameters for progress bar, adding it to the dock."""
global progressBar
- progressBar = QProgressBar()
+ progressBar = QProgressBarCode()
progressBar.setTextVisible(show_percent or show_number)
progressBar.setInvertedAppearance(invertTF)
progressBar.setOrientation(orientationHV)
@@ -377,6 +393,10 @@ def updatePB():
else:
progressBar.setRange(0, progbarmax)
progressBar.setValue(cards)
+ if config['show_barcode']:
+ a = (mw.col.sched.day_cutoff - 86400) * 1000
+ reviews = mw.col.db.list("""select ease from revlog where id > ?""", a)
+ progressBar.setBarCodeColors([{1:QColor.fromRgbF(0.827,0.184,0.184,1), 2:QColor.fromRgbF(0.271,0.353,0.392,1), 3:QColor.fromRgbF(0.298,0.686,0.314,1), 4:QColor.fromRgbF(0.12,0.663,0.957,1), 0:QColor.fromRgbF(0,0,0,1)}[ease] for ease in reviews])
if show_number:
if show_debug:
- it's hidden behind a setting because I expect people to find it ugly
- it looks better when the progress bar maximum ≤ the screen width, so each slice is at least a pixel wide
- it's harder to read the text
- I don't know whether this is more or less motivating
- christmas tree theme
- colors taken from Large and Colorful Buttons
- text and background color are hopefully unchanged and still follow the settings
- it probably needs a more complicated select statement to account for new cards having different ease numbers for the same answer buttons
- 0 ease for when you forget a card in the browser
resources used
https://stackoverflow.com/questions/4838890/python-pyqt-popup-window
https://doc.qt.io/qt-6/qcolor.html#fromRgbF
https://doc.qt.io/qt-6/qprogressbar.html
https://stackoverflow.com/questions/48421589/qt-custom-progressbar-cant-refresh-paintevent
Metadata
Metadata
Assignees
Labels
No labels