X-Git-Url: https://git.armaanb.net/?p=lightcards.git;a=blobdiff_plain;f=lightcards%2Fdisplay.py;h=ecdc0704ad99a9f33820f6c00bdfbcabe17f0389;hp=2aa891e0e232affb704901ce10dbf2966788ad00;hb=7fc79f3415682ddda1e33d229aaac4db2f36e012;hpb=5a85502cda29f64f4f045817c9a99490ba64f1b8 diff --git a/lightcards/display.py b/lightcards/display.py index 2aa891e..ecdc070 100644 --- a/lightcards/display.py +++ b/lightcards/display.py @@ -10,7 +10,7 @@ import textwrap from . import lightcards, progress -class Display(): +class Display: def __init__(self, stack, headers, obj): self.stack = stack self.headers = headers @@ -52,7 +52,7 @@ class Display(): def ntotal(self): """Get toal number of starred cards""" - return([card for card in self.stack if card.getStar()]) + return [card for card in self.stack if card.getStar()] def disp_bar(self): """ @@ -65,8 +65,9 @@ class Display(): if len(self.stack) <= 1: percent = "100" else: - percent = str(round(self.obj.getIdx() / - len(self.stack) * 100)).zfill(2) + percent = str( + round(self.obj.getIdx() / len(self.stack) * 100) + ).zfill(2) # Print yellow if starred if self.stack[self.obj.getIdx()].getStar(): @@ -77,18 +78,24 @@ class Display(): # Create bar component bar_start = "[" bar_middle = self.stack[self.obj.getIdx()].printStar() - bar_end = f"] [{len(self.ntotal())}/{str(len(self.stack))} starred] " + \ - f"[{percent}% (" + \ - str(self.obj.getIdx() + 1).zfill(len(str(len(self.stack)))) + \ - f"/{str(len(self.stack))})] [" + \ - f"{self.headers[self.obj.getSide()]} (" + \ - f"{str(self.obj.getSide() + 1)})] " + bar_end = ( + f"] [{len(self.ntotal())}/{str(len(self.stack))} starred] " + + f"[{percent}% (" + + str(self.obj.getIdx() + 1).zfill(len(str(len(self.stack)))) + + f"/{str(len(self.stack))})] [" + + f"{self.headers[self.obj.getSide()]} (" + + f"{str(self.obj.getSide() + 1)})] " + ) # Put it all togethor self.win.addstr(mlines - 1, 0, bar_start, curses.color_pair(1)) self.win.addstr(mlines - 1, len(bar_start), bar_middle, star_color) - self.win.addstr(mlines - 1, len(bar_start + bar_middle), - bar_end, curses.color_pair(1)) + self.win.addstr( + mlines - 1, + len(bar_start + bar_middle), + bar_end, + curses.color_pair(1), + ) def menu_print(self, string, err=False): """Print messages on the menu screen""" @@ -98,7 +105,7 @@ class Display(): color = curses.color_pair(1) for i in range(42): - self.menu_win.addch(15, i+1, " ") + self.menu_win.addch(15, i + 1, " ") self.menu_win.addstr(15, 1, string, color) self.panel_up() @@ -131,16 +138,17 @@ class Display(): self.menu_print("All starred!") elif key == "t": self.stack.reverse() - self.menu_print( - "Stack reversed!") + self.menu_print("Stack reversed!") elif key == "z": shuffle(self.stack) self.menu_print("Stack shuffled!") elif key == "f": for x in self.stack: x[0], x[1] = x[1], x[0] - (self.headers[0], self.headers[1]) = (self.headers[1], - self.headers[0]) + (self.headers[0], self.headers[1]) = ( + self.headers[1], + self.headers[0], + ) self.menu_print("Cards flipped!") elif key == "s": # Check if there are any starred cards before proceeding, and @@ -172,17 +180,20 @@ class Display(): if quit: quit_text = "[q]: quit" - self.menu_win.addstr(1, 1, "LIGHTCARDS MENU", curses.color_pair(1) + - curses.A_BOLD) + self.menu_win.addstr( + 1, 1, "LIGHTCARDS MENU", curses.color_pair(1) + curses.A_BOLD + ) self.menu_win.hline(2, 1, curses.ACS_HLINE, 15) - text = ["[y]: reset stack to original state", - "[a]: alphabetize stack", - "[z]: shuffle stack", - "[f]: flip all cards in stack", - "[t]: reverse stack order", - "[u]: unstar all", - "[d]: star all", - "[s]: update stack to include starred only"] + text = [ + "[y]: reset stack to original state", + "[a]: alphabetize stack", + "[z]: shuffle stack", + "[f]: flip all cards in stack", + "[t]: reverse stack order", + "[u]: unstar all", + "[d]: star all", + "[s]: update stack to include starred only", + ] for t in enumerate(text): self.menu_win.addstr(t[0] + 3, 1, t[1]) @@ -198,7 +209,7 @@ class Display(): multiple options on how to continue. """ (mlines, mcols) = self.win.getmaxyx() - self.menu_win.mvwin(int(mlines/2) - 9, int(mcols/2) - 22) + self.menu_win.mvwin(int(mlines / 2) - 9, int(mcols / 2) - 22) self.menu_panel.show() self.panel_up() @@ -227,19 +238,30 @@ class Display(): self.main_win.clear() # If on the back of the card, show the content of the front side in # the header - num_done = str(self.obj.getIdx() + - 1).zfill(len(str(len(self.stack)))) + num_done = str(self.obj.getIdx() + 1).zfill( + len(str(len(self.stack))) + ) if self.obj.getSide() == 0: top = num_done + " | " + self.headers[self.obj.getSide()] else: - top = num_done + " | " + self.headers[self.obj.getSide()] + \ - " | \"" + str(self.stack[self.obj.getIdx()][0]) + "\"" + top = ( + num_done + + " | " + + self.headers[self.obj.getSide()] + + ' | "' + + str(self.stack[self.obj.getIdx()][0]) + + '"' + ) header_width = mcols if mcols > 80: header_width = 80 - self.main_win.addstr(0, 0, textwrap.shorten(top, width=header_width, - placeholder="…"), curses.A_BOLD) + self.main_win.addstr( + 0, + 0, + textwrap.shorten(top, width=header_width, placeholder="…"), + curses.A_BOLD, + ) # Add horizontal line lin_width = header_width @@ -248,9 +270,14 @@ class Display(): self.main_win.hline(1, 0, curses.ACS_HLINE, lin_width) # Show current side - self.main_win.addstr(2, 0, textwrap.fill( - self.stack[self.obj.getIdx()][self.obj.getSide()], - width=self.wrap_width())) + self.main_win.addstr( + 2, + 0, + textwrap.fill( + self.stack[self.obj.getIdx()][self.obj.getSide()], + width=self.wrap_width(), + ), + ) self.panel_up() self.disp_bar() self.disp_sidebar() @@ -262,26 +289,29 @@ class Display(): self.help_panel.top() self.help_panel.hide() self.help_win.clear() - self.help_win.addstr(1, 1, "LIGHTCARDS HELP", curses.color_pair(1) + - curses.A_BOLD) + self.help_win.addstr( + 1, 1, "LIGHTCARDS HELP", curses.color_pair(1) + curses.A_BOLD + ) self.help_win.hline(2, 1, curses.ACS_HLINE, 15) - text = ["Welcome to lightcards. Here are some keybindings", - "to get you started:", - "", - "h, left previous card", - "l, right next card", - "j, k, up, down flip card", - "i, / star card", - "0, ^, home go to the start of the deck", - "$, end go to the end of the deck", - "H, ? open this screen", - "e open the input file in $EDITOR", - "m open the control menu", - "", - "More information can be found in the man page, or", - "by running `lightcards --help`.", - "", - "Press [q], [H], or [?] to go back."] + text = [ + "Welcome to lightcards. Here are some keybindings", + "to get you started:", + "", + "h, left previous card", + "l, right next card", + "j, k, up, down flip card", + "i, / star card", + "0, ^, home go to the start of the deck", + "$, end go to the end of the deck", + "H, ? open this screen", + "e open the input file in $EDITOR", + "m open the control menu", + "", + "More information can be found in the man page, or", + "by running `lightcards --help`.", + "", + "Press [q], [H], or [?] to go back.", + ] for t in enumerate(text): self.help_win.addstr(t[0] + 3, 1, t[1]) @@ -290,7 +320,7 @@ class Display(): def disp_help(self): (mlines, mcols) = self.win.getmaxyx() - self.help_win.mvwin(int(mlines/2) - 10, int(mcols/2) - 26) + self.help_win.mvwin(int(mlines / 2) - 10, int(mcols / 2) - 26) self.panel_up() self.help_panel.show() while True: @@ -310,6 +340,10 @@ class Display(): key = self.win.getkey() if key == "q": self.leave() + elif key in ["h", "KEY_LEFT"]: + self.obj.back() + self.obj.setSide(0) + self.disp_card() elif key in ["l", "KEY_RIGHT"]: self.obj.forward(self.stack) self.obj.setSide(0) @@ -341,8 +375,12 @@ class Display(): (mlines, mcols) = self.win.getmaxyx() left = mcols - 19 - self.win.addstr(0, mcols - 16, "STARRED CARDS", - curses.color_pair(3) + curses.A_BOLD) + self.win.addstr( + 0, + mcols - 16, + "STARRED CARDS", + curses.color_pair(3) + curses.A_BOLD, + ) self.win.vline(0, mcols - 20, 0, mlines - 2) self.win.hline(1, left, 0, mlines) @@ -350,9 +388,9 @@ class Display(): # TODO: Fix this, some off by one error newntotal = self.ntotal() if mlines - 5 < len(self.ntotal()): - newntotal = self.ntotal()[:mlines - 4] + newntotal = self.ntotal()[: mlines - 4] elif mlines - 5 == len(self.ntotal()): - newntotal = self.ntotal()[:mlines - 3] + newntotal = self.ntotal()[: mlines - 3] for card in newntotal: for i in enumerate(newntotal): @@ -361,7 +399,11 @@ class Display(): term = i[1][0][:18] + "…" self.win.addstr(2 + i[0], left, term) if not newntotal == self.ntotal(): - self.win.addstr(mlines - 3, left, f"({len(self.ntotal()) - len(newntotal)} more)") + self.win.addstr( + mlines - 3, + left, + f"({len(self.ntotal()) - len(newntotal)} more)", + ) break if len(self.ntotal()) == 0: