mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-29 14:54:00 -06:00
94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
import typing as T
|
|
|
|
import urwid
|
|
|
|
from pqcli.roster import Roster
|
|
from pqcli.ui.custom_button import CustomButton
|
|
|
|
|
|
class RosterView(urwid.Filler):
|
|
signals = ["load_game", "new_game", "delete_game", "exit"]
|
|
|
|
def __init__(self, roster: Roster) -> None:
|
|
self.roster = roster
|
|
|
|
logo = urwid.BigText("ProgressQuest", urwid.HalfBlock5x4Font())
|
|
|
|
buttons = []
|
|
for player_idx, player in enumerate(self.roster.players):
|
|
buttons.append(
|
|
urwid.Columns(
|
|
[
|
|
CustomButton(
|
|
label=player.name,
|
|
on_press=self.on_resume_game_press,
|
|
user_data=player_idx,
|
|
),
|
|
(
|
|
10,
|
|
CustomButton(
|
|
label="Delete",
|
|
on_press=self.on_delete_game_press,
|
|
user_data=player_idx,
|
|
),
|
|
),
|
|
]
|
|
)
|
|
)
|
|
|
|
buttons.append(
|
|
CustomButton(
|
|
label="Create a new character",
|
|
hint="F1",
|
|
on_press=self.on_new_game_press,
|
|
)
|
|
)
|
|
|
|
buttons.append(
|
|
CustomButton(label="Exit", hint="Esc", on_press=self.on_exit_press)
|
|
)
|
|
|
|
super().__init__(
|
|
urwid.Padding(
|
|
urwid.Pile(
|
|
[urwid.Padding(logo, width="clip"), urwid.Divider()]
|
|
+ buttons
|
|
+ [
|
|
urwid.Divider(),
|
|
urwid.Text("Use arrow keys to move around."),
|
|
]
|
|
),
|
|
align="center",
|
|
width=logo.pack()[0],
|
|
)
|
|
)
|
|
|
|
def on_resume_game_press(
|
|
self, _widget: urwid.Widget, user_data: T.Any
|
|
) -> None:
|
|
player_idx = T.cast(int, user_data)
|
|
self._emit("load_game", player_idx)
|
|
|
|
def on_delete_game_press(
|
|
self, _widget: urwid.Widget, user_data: T.Any
|
|
) -> None:
|
|
player_idx = T.cast(int, user_data)
|
|
self._emit("delete_game", player_idx)
|
|
|
|
def on_new_game_press(self, _user_data: T.Any) -> None:
|
|
self._emit("new_game")
|
|
|
|
def on_exit_press(self, _user_data: T.Any) -> None:
|
|
self._emit("exit")
|
|
|
|
def unhandled_input(self, key: str) -> bool:
|
|
if key == "esc":
|
|
self._emit("exit")
|
|
return True
|
|
|
|
if key == "f1":
|
|
self._emit("new_game")
|
|
return True
|
|
|
|
return False
|