mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-28 22:33:59 -06:00
66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
import typing as T
|
|
|
|
import urwid
|
|
|
|
from pqcli.game_state import Roster
|
|
|
|
|
|
class RosterView(urwid.ListBox):
|
|
def __init__(
|
|
self,
|
|
roster: Roster,
|
|
loop: urwid.MainLoop,
|
|
on_new_game: T.Callable,
|
|
on_resume_game: T.Callable,
|
|
on_exit: T.Callable,
|
|
) -> None:
|
|
self.roster = roster
|
|
self.on_new_game = on_new_game
|
|
self.on_resume_game = on_resume_game
|
|
self.on_exit = on_exit
|
|
|
|
logo = urwid.BigText("ProgressQuest", urwid.HalfBlock5x4Font())
|
|
|
|
buttons = []
|
|
for player in self.roster.players:
|
|
buttons.append(
|
|
urwid.Button(
|
|
label=player.name,
|
|
on_press=self.on_resume_game_press,
|
|
user_data=player.name,
|
|
)
|
|
)
|
|
|
|
buttons.append(
|
|
urwid.Button(
|
|
label="Create a new character", on_press=self.on_new_game_press
|
|
)
|
|
)
|
|
|
|
buttons.append(urwid.Button(label="Exit", on_press=self.on_exit_press))
|
|
|
|
super().__init__(
|
|
[
|
|
urwid.Padding(logo, width="clip"),
|
|
urwid.Divider(),
|
|
urwid.Pile(buttons),
|
|
]
|
|
)
|
|
|
|
def on_resume_game_press(self, user_data: T.Any) -> None:
|
|
player_name = T.cast(str, user_data)
|
|
self.on_resume_game(player_name)
|
|
|
|
def on_new_game_press(self, _user_data: T.Any) -> None:
|
|
self.on_new_game()
|
|
|
|
def on_exit_press(self, _user_data: T.Any) -> None:
|
|
self.on_exit()
|
|
|
|
def unhandled_input(self, key: str) -> bool:
|
|
if key == "esc":
|
|
self.on_exit()
|
|
return True
|
|
|
|
return False
|