mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-29 06:44:00 -06:00
ui/curses: make escape work in game view
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import curses
|
import curses
|
||||||
|
import curses.ascii
|
||||||
import typing as T
|
import typing as T
|
||||||
from dataclasses import dataclass
|
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_LEFT = set(map(ord, "hH")) | {curses.KEY_LEFT}
|
||||||
KEYS_RIGHT = set(map(ord, "lL")) | {curses.KEY_RIGHT}
|
KEYS_RIGHT = set(map(ord, "lL")) | {curses.KEY_RIGHT}
|
||||||
KEYS_UP = set(map(ord, "kK")) | {curses.KEY_UP}
|
KEYS_UP = set(map(ord, "kK")) | {curses.KEY_UP}
|
||||||
|
KEYS_CANCEL = set(map(ord, "qQ")) | {curses.ascii.ESC}
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import typing as T
|
|||||||
from pqcli.lingo import act_name, to_roman
|
from pqcli.lingo import act_name, to_roman
|
||||||
from pqcli.roster import Roster
|
from pqcli.roster import Roster
|
||||||
from pqcli.ui.curses.event_handler import EventHandler
|
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.views.menu_view import MenuView
|
||||||
from pqcli.ui.curses.widgets import Menu
|
from pqcli.ui.curses.widgets import Menu
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ class ChooseCharacterView(MenuView):
|
|||||||
|
|
||||||
self._choices.append(
|
self._choices.append(
|
||||||
Choice(
|
Choice(
|
||||||
keys=list(map(ord, "qQ\N{ESC}")),
|
keys=list(KEYS_CANCEL),
|
||||||
desc="[Q] Cancel",
|
desc="[Q] Cancel",
|
||||||
callback=self.on_cancel,
|
callback=self.on_cancel,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import typing as T
|
|||||||
from pqcli.config import CLASSES, PRIME_STATS, RACES, Class, Race
|
from pqcli.config import CLASSES, PRIME_STATS, RACES, Class, Race
|
||||||
from pqcli.mechanic import StatsBuilder, generate_name
|
from pqcli.mechanic import StatsBuilder, generate_name
|
||||||
from pqcli.ui.curses.event_handler import EventHandler
|
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.base_view import BaseView
|
||||||
from pqcli.ui.curses.views.menu_view import MenuView
|
from pqcli.ui.curses.views.menu_view import MenuView
|
||||||
|
|
||||||
@@ -101,7 +101,7 @@ class ChooseCharacterRaceView(MenuView):
|
|||||||
|
|
||||||
self._choices.append(
|
self._choices.append(
|
||||||
Choice(
|
Choice(
|
||||||
keys=list(map(ord, "qQ\N{ESC}")),
|
keys=list(KEYS_CANCEL),
|
||||||
desc="[Q] Cancel",
|
desc="[Q] Cancel",
|
||||||
callback=self.on_cancel,
|
callback=self.on_cancel,
|
||||||
)
|
)
|
||||||
@@ -130,7 +130,7 @@ class ChooseCharacterClassView(MenuView):
|
|||||||
|
|
||||||
self._choices.append(
|
self._choices.append(
|
||||||
Choice(
|
Choice(
|
||||||
keys=list(map(ord, "qQ\N{ESC}")),
|
keys=list(KEYS_CANCEL),
|
||||||
desc="[Q] Cancel",
|
desc="[Q] Cancel",
|
||||||
callback=self.on_cancel,
|
callback=self.on_cancel,
|
||||||
)
|
)
|
||||||
@@ -173,7 +173,7 @@ class ChooseCharacterStatsView(BaseView):
|
|||||||
self._stats_win = None
|
self._stats_win = None
|
||||||
|
|
||||||
def keypress(self, key: int) -> 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()
|
self.on_cancel()
|
||||||
|
|
||||||
elif key == curses.ascii.NL:
|
elif key == curses.ascii.NL:
|
||||||
|
|||||||
@@ -6,7 +6,13 @@ import typing as T
|
|||||||
from pqcli.mechanic import Player, SignalMixin, Simulation
|
from pqcli.mechanic import Player, SignalMixin, Simulation
|
||||||
from pqcli.roster import Roster
|
from pqcli.roster import Roster
|
||||||
from pqcli.ui.curses.event_handler import EventHandler
|
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.views.base_view import BaseView
|
||||||
from pqcli.ui.curses.widgets import Focusable, Scrollable, Widget
|
from pqcli.ui.curses.widgets import Focusable, Scrollable, Widget
|
||||||
|
|
||||||
@@ -40,7 +46,7 @@ class GameView(BaseView):
|
|||||||
def keypress(self, key: int) -> None:
|
def keypress(self, key: int) -> None:
|
||||||
focused = self.focused
|
focused = self.focused
|
||||||
|
|
||||||
if key in map(ord, "qQ"):
|
if key in KEYS_CANCEL:
|
||||||
self.on_exit()
|
self.on_exit()
|
||||||
|
|
||||||
elif key in {curses.KEY_PPAGE}:
|
elif key in {curses.KEY_PPAGE}:
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import typing as T
|
|||||||
|
|
||||||
from pqcli.ui.curses.colors import COLOR_LOGO, has_colors
|
from pqcli.ui.curses.colors import COLOR_LOGO, has_colors
|
||||||
from pqcli.ui.curses.event_handler import EventHandler
|
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 pqcli.ui.curses.widgets import Menu
|
||||||
|
|
||||||
from .base_view import BaseView
|
from .base_view import BaseView
|
||||||
@@ -58,7 +58,7 @@ class RosterView(BaseView):
|
|||||||
callback=self.on_delete,
|
callback=self.on_delete,
|
||||||
),
|
),
|
||||||
Choice(
|
Choice(
|
||||||
keys=list(map(ord, "qQ\N{ESC}")),
|
keys=list(KEYS_CANCEL),
|
||||||
desc="[Q] Quit",
|
desc="[Q] Quit",
|
||||||
callback=self.on_quit,
|
callback=self.on_quit,
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user