Skip to content

[Feature Request] ProgressBarCode #17

Open
@khonkhortisan

Description

@khonkhortisan

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

imagen
Control+Shift+;

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

imagen

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions