X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=lightcards%2Fdisplay.py;h=8f050a214ae02c50717248ab1ace9835f11f6368;hb=9b01110a4cc0d2a9149e62e5a2d6c0fcce462348;hp=133b7194d5d31a91f1ca36543077df66d87ad9fe;hpb=65cb608a985f5168edfa6e2833f37bc812274a2f;p=lightcards.git diff --git a/lightcards/display.py b/lightcards/display.py index 133b719..8f050a2 100644 --- a/lightcards/display.py +++ b/lightcards/display.py @@ -10,6 +10,14 @@ import textwrap from . import runner, progress +def panel_create(x, y): + """Create popup panels to a certain scale""" + win = curses.newwin(x, y) + panel = curses.panel.new_panel(win) + win.erase() + return (win, panel) + + class Display: def __init__(self, stack, headers, obj): self.stack = stack @@ -21,23 +29,17 @@ class Display: self.win = stdscr (mlines, mcols) = self.win.getmaxyx() curses.curs_set(0) # Hide cursor - curses.init_pair(1, curses.COLOR_CYAN, 0) - curses.init_pair(2, curses.COLOR_RED, 0) - curses.init_pair(3, curses.COLOR_YELLOW, 0) + curses.use_default_colors() # Allow transparency + curses.init_pair(1, curses.COLOR_CYAN, -1) + curses.init_pair(2, curses.COLOR_RED, -1) + curses.init_pair(3, curses.COLOR_YELLOW, -1) - (self.main_win, self.main_panel) = self.panel_create(mlines, mcols) + (self.main_win, self.main_panel) = panel_create(mlines, mcols) self.menu_init() self.help_init() self.get_key() - def panel_create(self, x, y): - """Create popup panels to a certain scale""" - win = curses.newwin(x, y) - panel = curses.panel.new_panel(win) - win.erase() - return (win, panel) - def panel_up(self): """Update panel and window contents""" curses.panel.update_panels() @@ -48,10 +50,10 @@ class Display: if self.obj.getIdx() + 1 == len(self.stack): self.obj.setIdx(0) - progress.dump(self.stack, runner.get_orig()) + progress.dump(self.stack, runner.get_orig()[1]) sys.exit(0) - def ntotal(self): + def nstarred(self): """Get total number of starred cards""" return [card for card in self.stack if card.getStar()] @@ -60,14 +62,14 @@ class Display: Display the statusbar at the bottom of the screen with progress, star status, and card side. """ - (mlines, mcols) = self.win.getmaxyx() + (mlines, _) = self.win.getmaxyx() # Calculate percent done if len(self.stack) <= 1: percent = "100" else: percent = str( - round(self.obj.getIdx() / len(self.stack) * 100) + round(self.obj.getIdx() / (len(self.stack) - 1) * 100) ).zfill(2) # Print yellow if starred @@ -80,12 +82,12 @@ class Display: bar_start = "[" bar_middle = self.current_card().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.current_card().getSide()]} (" - + f"{str(int(self.current_card().getSide()) + 1)})] " + f"] [{len(self.nstarred())}/{str(len(self.stack))} starred] " + f"[{percent}% (" + f"{str(self.obj.getIdx()).zfill(len(str(len(self.stack))))}" + f"/{str(len(self.stack))})] [" + f"{self.headers[self.current_card().getSide()]} (" + f"{str(int(self.current_card().getSide()) + 1)})]" ) # Put it all togethor @@ -116,15 +118,12 @@ class Display: """Grab keypresses on the menu screen""" while True: key = self.win.getkey() - if key in ["r", "q", "m"]: + if key in ["r", "m"]: self.menu_panel.hide() self.panel_up() - if key in ["q", "m"]: - if len(self.stack) == self.obj.getIdx() + 1: - self.leave() - elif len(self.stack) < self.obj.getIdx() + 1: - self.obj.setIdx(0) self.get_key() + elif key == "q": + self.leave() elif key == "y": self.stack = runner.get_orig()[1] self.menu_print("Stack reset!") @@ -172,15 +171,11 @@ class Display: self.obj.setIdx(0) self.get_key() - def menu_init(self, quit=True): + def menu_init(self): """Initialize the menu with content""" - (self.menu_win, self.menu_panel) = self.panel_create(17, 44) + (self.menu_win, self.menu_panel) = panel_create(17, 44) self.menu_panel.top() self.menu_panel.hide() - # TODO: fix this - quit_text = "[q]: back" - if quit: - quit_text = "[q]: quit" self.menu_win.addstr( 1, 1, "LIGHTCARDS MENU", curses.color_pair(1) + curses.A_BOLD @@ -195,12 +190,13 @@ class Display: "[u]: unstar all", "[d]: star all", "[s]: update stack to include starred only", + "", + "[r]: restart", + "[m]: close menu", ] for t in enumerate(text): self.menu_win.addstr(t[0] + 3, 1, t[1]) - self.menu_win.addstr(len(text) + 4, 1, "[r]: restart") - self.menu_win.addstr(len(text) + 5, 1, quit_text) self.menu_win.box() self.panel_up() @@ -284,7 +280,7 @@ class Display: def help_init(self): """Initialize help screen""" - (self.help_win, self.help_panel) = self.panel_create(20, 52) + (self.help_win, self.help_panel) = panel_create(20, 52) self.help_panel.top() self.help_panel.hide() self.help_win.clear() @@ -309,7 +305,7 @@ class Display: "More information can be found in the man page, or", "by running `lightcards --help`.", "", - "Press [q], [H], or [?] to go back.", + "Press [H], or [?] to go back.", ] for t in enumerate(text): @@ -325,7 +321,9 @@ class Display: self.help_panel.show() while True: key = self.help_win.getkey() - if key in ["q", "H", "?"]: + if key == "q": + self.leave() + elif key in ["H", "?"]: self.help_panel.hide() self.get_key() @@ -390,27 +388,25 @@ class Display: self.win.vline(0, mcols - 20, 0, mlines - 2) self.win.hline(1, left, 0, mlines) - i = 0 - # TODO: Fix this, some off by one error - newntotal = self.ntotal() - if mlines - 5 < len(self.ntotal()): - newntotal = self.ntotal()[: mlines - 4] - elif mlines - 5 == len(self.ntotal()): - newntotal = self.ntotal()[: mlines - 3] + nstarred = self.nstarred() + if mlines - 5 < len(self.nstarred()): + nstarred = self.nstarred()[: mlines - 4] + elif mlines - 5 == len(self.nstarred()): + nstarred = self.nstarred()[: mlines - 3] - for _ in newntotal: - for i, card in enumerate(newntotal): + for _ in nstarred: + for i, card in enumerate(nstarred): term = card.getFront() if len(term) > 18: term = term + "…" self.win.addstr(2 + i, left, term) - if not newntotal == self.ntotal(): + if not nstarred == self.nstarred(): self.win.addstr( mlines - 3, left, - f"({len(self.ntotal()) - len(newntotal)} more)", + f"({len(self.nstarred()) - len(nstarred)} more)", ) break - if len(self.ntotal()) == 0: + if len(self.nstarred()) == 0: self.win.addstr(2, left, "None starred")