diff --git a/pqcli/ui/curses/util.py b/pqcli/ui/curses/util.py index 75400b7..5a7fcda 100644 --- a/pqcli/ui/curses/util.py +++ b/pqcli/ui/curses/util.py @@ -1,4 +1,5 @@ import curses +import curses.ascii import typing as T from dataclasses import dataclass @@ -6,6 +7,7 @@ KEYS_DOWN = set(map(ord, "jJ")) | {curses.KEY_DOWN} KEYS_LEFT = set(map(ord, "hH")) | {curses.KEY_LEFT} KEYS_RIGHT = set(map(ord, "lL")) | {curses.KEY_RIGHT} KEYS_UP = set(map(ord, "kK")) | {curses.KEY_UP} +KEYS_CANCEL = set(map(ord, "qQ")) | {curses.ascii.ESC} @dataclass diff --git a/pqcli/ui/curses/views/choose_character_view.py b/pqcli/ui/curses/views/choose_character_view.py index dfdff70..6851188 100644 --- a/pqcli/ui/curses/views/choose_character_view.py +++ b/pqcli/ui/curses/views/choose_character_view.py @@ -4,7 +4,7 @@ import typing as T from pqcli.lingo import act_name, to_roman from pqcli.roster import Roster from pqcli.ui.curses.event_handler import EventHandler -from pqcli.ui.curses.util import Choice +from pqcli.ui.curses.util import KEYS_CANCEL, Choice from pqcli.ui.curses.views.menu_view import MenuView from pqcli.ui.curses.widgets import Menu @@ -48,7 +48,7 @@ class ChooseCharacterView(MenuView): self._choices.append( Choice( - keys=list(map(ord, "qQ\N{ESC}")), + keys=list(KEYS_CANCEL), desc="[Q] Cancel", callback=self.on_cancel, ) diff --git a/pqcli/ui/curses/views/create_character_view.py b/pqcli/ui/curses/views/create_character_view.py index 4fdef8b..dbbb594 100644 --- a/pqcli/ui/curses/views/create_character_view.py +++ b/pqcli/ui/curses/views/create_character_view.py @@ -6,7 +6,7 @@ import typing as T from pqcli.config import CLASSES, PRIME_STATS, RACES, Class, Race from pqcli.mechanic import StatsBuilder, generate_name from pqcli.ui.curses.event_handler import EventHandler -from pqcli.ui.curses.util import Choice +from pqcli.ui.curses.util import KEYS_CANCEL, Choice from pqcli.ui.curses.views.base_view import BaseView from pqcli.ui.curses.views.menu_view import MenuView @@ -101,7 +101,7 @@ class ChooseCharacterRaceView(MenuView): self._choices.append( Choice( - keys=list(map(ord, "qQ\N{ESC}")), + keys=list(KEYS_CANCEL), desc="[Q] Cancel", callback=self.on_cancel, ) @@ -130,7 +130,7 @@ class ChooseCharacterClassView(MenuView): self._choices.append( Choice( - keys=list(map(ord, "qQ\N{ESC}")), + keys=list(KEYS_CANCEL), desc="[Q] Cancel", callback=self.on_cancel, ) @@ -173,7 +173,7 @@ class ChooseCharacterStatsView(BaseView): self._stats_win = None def keypress(self, key: int) -> None: - if key == curses.ascii.ESC or key in map(ord, "qQ"): + if key in KEYS_CANCEL: self.on_cancel() elif key == curses.ascii.NL: diff --git a/pqcli/ui/curses/views/game_view/__init__.py b/pqcli/ui/curses/views/game_view/__init__.py index 1fa4fbe..896ec10 100644 --- a/pqcli/ui/curses/views/game_view/__init__.py +++ b/pqcli/ui/curses/views/game_view/__init__.py @@ -6,7 +6,13 @@ import typing as T from pqcli.mechanic import Player, SignalMixin, Simulation from pqcli.roster import Roster from pqcli.ui.curses.event_handler import EventHandler -from pqcli.ui.curses.util import KEYS_DOWN, KEYS_LEFT, KEYS_RIGHT, KEYS_UP +from pqcli.ui.curses.util import ( + KEYS_CANCEL, + KEYS_DOWN, + KEYS_LEFT, + KEYS_RIGHT, + KEYS_UP, +) from pqcli.ui.curses.views.base_view import BaseView from pqcli.ui.curses.widgets import Focusable, Scrollable, Widget @@ -40,7 +46,7 @@ class GameView(BaseView): def keypress(self, key: int) -> None: focused = self.focused - if key in map(ord, "qQ"): + if key in KEYS_CANCEL: self.on_exit() elif key in {curses.KEY_PPAGE}: diff --git a/pqcli/ui/curses/views/roster_view.py b/pqcli/ui/curses/views/roster_view.py index 757bde7..65cc2a6 100644 --- a/pqcli/ui/curses/views/roster_view.py +++ b/pqcli/ui/curses/views/roster_view.py @@ -3,7 +3,7 @@ import typing as T from pqcli.ui.curses.colors import COLOR_LOGO, has_colors from pqcli.ui.curses.event_handler import EventHandler -from pqcli.ui.curses.util import Choice +from pqcli.ui.curses.util import KEYS_CANCEL, Choice from pqcli.ui.curses.widgets import Menu from .base_view import BaseView @@ -58,7 +58,7 @@ class RosterView(BaseView): callback=self.on_delete, ), Choice( - keys=list(map(ord, "qQ\N{ESC}")), + keys=list(KEYS_CANCEL), desc="[Q] Quit", callback=self.on_quit, ),