]> git.armaanb.net Git - lightcards.git/blobdiff - lightcards/display.py
Move percent done from right to left
[lightcards.git] / lightcards / display.py
index 0b755698f9fc50cd291dca9b55af0053c5fbda60..50b741808b14dc0ed18ed417c528322ac83cb2f1 100644 (file)
@@ -27,6 +27,39 @@ class CursesError(BaseException):
         sys.exit(3)
 
 
+class Quit:
+    def __init__(self, outer, mlines=5, mcols=20):
+        self.outer = outer
+        (self.win, self.panel) = panel_create(mlines, mcols)
+        self.panel.top()
+        self.panel.hide()
+
+        self.win.addstr(
+            1,
+            2,
+            "QUIT LIGHTCARDS?",
+            curses.color_pair(1) + curses.A_BOLD,
+        )
+        self.win.hline(2, 1, curses.ACS_HLINE, mcols)
+        self.win.addstr(3, 1, "Quit? [y/n]")
+
+        self.win.box()
+
+    def disp(self):
+        """Display quit confirmation screen"""
+        (mlines, mcols) = self.outer.win.getmaxyx()
+        self.win.mvwin(int(mlines / 2) - 3, int(mcols / 2) - 10)
+        self.panel.show()
+
+        while True:
+            key = self.win.getkey()
+            if key == "y":
+                break
+            elif key == "n":
+                self.panel.hide()
+                self.outer.get_key()
+
+
 class Help:
     def __init__(self, outer, mlines=20, mcols=52):
         """Initialize help screen"""
@@ -216,6 +249,7 @@ class Display:
         self.main_panel = curses.panel.new_panel(self.win)
         self.menu_obj = Menu(self)
         self.help_obj = Help(self)
+        self.quit_obj = Quit(self)
 
         self.get_key()
 
@@ -238,7 +272,8 @@ class Display:
             self.disp_card()
 
     def leave(self):
-        """Pickle stack before quitting"""
+        """Pickle stack and confirm before quitting"""
+        self.quit_obj.disp()
         if self.obj.index + 1 == len(self.stack):
             self.obj.index = 0
 
@@ -271,11 +306,6 @@ class Display:
         else:
             star_color = curses.color_pair(1)
 
-        progress = (
-            f"[{percent}% ("
-            f"{str(self.obj.index).zfill(len(str(len(self.stack))))})]"
-        )
-
         # Compose bar text
         bar_start = "["
         bar_middle = self.current_card().printStar()
@@ -298,9 +328,15 @@ class Display:
             curses.color_pair(1),
         )
 
+        progress = (
+            f"[{percent}% ("
+            f"{str(self.obj.index + 1).zfill(len(str(len(self.stack))))}"
+            f"/{str(len(self.stack))})] "
+        )
+
         self.win.addstr(
             height + 1,
-            mcols - len(progress) - 1,
+            0,
             progress,
             curses.color_pair(1),
         )
@@ -310,12 +346,14 @@ class Display:
                 self.obj.index
                 / (len(self.stack) - 1)
                 * (mcols - len(progress))
-                - 2
+                - 1
             )
         ):
             # TODO: Use the variying width unicode block characters to make a
             # super accurate bar
-            self.win.addch(height + 1, i, "»", curses.color_pair(1))
+            self.win.addch(
+                height + 1, i + len(progress), "»", curses.color_pair(1)
+            )
 
     def wrap_width(self):
         """Calculate the width at which the body text should wrap"""