ui: add shortcuts

This commit is contained in:
rr-
2018-11-05 21:04:39 +01:00
parent b66b3fca18
commit a265dc6d9d
4 changed files with 80 additions and 19 deletions
+13 -2
View File
@@ -4,10 +4,21 @@ import urwid
class MenuButton(urwid.Button): class MenuButton(urwid.Button):
def __init__(self, label: str, *args: T.Any, **kwargs: T.Any) -> None: def __init__(
self,
label: str,
*args: T.Any,
hint: T.Optional[str] = None,
**kwargs: T.Any
) -> None:
super().__init__("", *args, **kwargs) super().__init__("", *args, **kwargs)
self._w = urwid.AttrMap( self._w = urwid.AttrMap(
urwid.SelectableIcon(["\N{BULLET} ", label], 2), urwid.Columns(
[
urwid.SelectableIcon(["\N{BULLET} ", label], 2),
("pack", urwid.Text(hint or "", align="right")),
]
),
"button", "button",
"button-focus", "button-focus",
) )
+6 -2
View File
@@ -10,8 +10,12 @@ class ExitView(urwid.Overlay):
def __init__(self, parent: urwid.Widget) -> None: def __init__(self, parent: urwid.Widget) -> None:
question = urwid.Text(("bold", "Really quit?"), "center") question = urwid.Text(("bold", "Really quit?"), "center")
yes_btn = MenuButton("Yes", lambda _user_data: self.exit()) yes_btn = MenuButton(
no_btn = MenuButton("No", lambda _user_data: self.cancel()) "Yes", hint="Y", on_press=lambda _user_data: self.exit()
)
no_btn = MenuButton(
"No", hint="N", on_press=lambda _user_data: self.cancel()
)
line_box = urwid.LineBox( line_box = urwid.LineBox(
urwid.ListBox( urwid.ListBox(
+51 -13
View File
@@ -18,8 +18,12 @@ class StatsBox(LineBox):
self.total_label = urwid.Text("0") self.total_label = urwid.Text("0")
self.update_values() self.update_values()
roll_button = MenuButton("Roll", on_press=self.on_roll_press) roll_button = MenuButton(
unroll_button = MenuButton("Unroll", on_press=self.on_unroll_press) "Roll", hint="F5", on_press=self.on_roll_press
)
unroll_button = MenuButton(
"Unroll", hint="F6", on_press=self.on_unroll_press
)
value_texts = list(self.stat_labels.values()) value_texts = list(self.stat_labels.values())
label_texts = [urwid.Text(f"{stat.value}: ") for stat in PRIME_STATS] label_texts = [urwid.Text(f"{stat.value}: ") for stat in PRIME_STATS]
@@ -40,17 +44,23 @@ class StatsBox(LineBox):
title="Stats", title="Stats",
) )
def on_roll_press(self, _user_data: T.Any) -> None: def roll(self) -> None:
self.stats = self.stats_builder.roll() self.stats = self.stats_builder.roll()
self.update_values() self.update_values()
def on_unroll_press(self, _user_data: T.Any) -> None: def unroll(self) -> None:
try: try:
self.stats = self.stats_builder.unroll() self.stats = self.stats_builder.unroll()
except IndexError: except IndexError:
return return
self.update_values() self.update_values()
def on_roll_press(self, _user_data: T.Any) -> None:
self.roll()
def on_unroll_press(self, _user_data: T.Any) -> None:
self.unroll()
def update_values(self) -> None: def update_values(self) -> None:
for stat, edit in self.stat_labels.items(): for stat, edit in self.stat_labels.items():
edit.set_text(str(self.stats[stat])) edit.set_text(str(self.stats[stat]))
@@ -117,15 +127,21 @@ class NewGameView(urwid.Pile):
"Name: ", generate_name() "Name: ", generate_name()
) )
generate_char_name_btn = MenuButton( generate_char_name_btn = MenuButton(
"Generate random name", on_press=self.on_generate_char_name_press "Generate random name",
hint="F7",
on_press=self.on_generate_char_name_press,
) )
buttons_box = urwid.Filler( buttons_box = urwid.Filler(
urwid.Padding( urwid.Padding(
urwid.Pile( urwid.Pile(
[ [
MenuButton("Sold!", self.on_confirm_press), MenuButton(
MenuButton("Cancel", self.on_cancel_press), "Sold!", hint="F10", on_press=self.on_confirm_press
),
MenuButton(
"Cancel", hint="Esc", on_press=self.on_cancel_press
),
] ]
), ),
width=20, width=20,
@@ -159,10 +175,7 @@ class NewGameView(urwid.Pile):
self.char_name_edit.edit_text = generate_name() self.char_name_edit.edit_text = generate_name()
self.char_name_edit.edit_pos = len(self.char_name_edit.edit_text) self.char_name_edit.edit_pos = len(self.char_name_edit.edit_text)
def on_generate_char_name_press(self, _user_data: T.Any) -> None: def confirm(self) -> None:
self.generate_random_char_name()
def on_confirm_press(self, _user_data: T.Any) -> None:
player = create_player( player = create_player(
name=self.char_name_edit.edit_text, name=self.char_name_edit.edit_text,
race=self.race_box.race, race=self.race_box.race,
@@ -171,12 +184,37 @@ class NewGameView(urwid.Pile):
) )
self._emit("confirm", player) self._emit("confirm", player)
def on_cancel_press(self, _user_data: T.Any) -> None: def cancel(self) -> None:
self._emit("cancel") self._emit("cancel")
def on_generate_char_name_press(self, _user_data: T.Any) -> None:
self.generate_random_char_name()
def on_confirm_press(self, _user_data: T.Any) -> None:
self.confirm()
def on_cancel_press(self, _user_data: T.Any) -> None:
self.cancel()
def unhandled_input(self, key: str) -> bool: def unhandled_input(self, key: str) -> bool:
if key == "esc": if key == "esc":
self._emit("cancel") self.cancel()
return True
if key == "f7":
self.generate_random_char_name()
return True
if key == "f5":
self.stats_box.roll()
return True
if key == "f6":
self.stats_box.unroll()
return True
if key == "f10":
self.confirm()
return True return True
return False return False
+10 -2
View File
@@ -26,11 +26,15 @@ class RosterView(urwid.Filler):
buttons.append( buttons.append(
MenuButton( MenuButton(
label="Create a new character", on_press=self.on_new_game_press label="Create a new character",
hint="F1",
on_press=self.on_new_game_press,
) )
) )
buttons.append(MenuButton(label="Exit", on_press=self.on_exit_press)) buttons.append(
MenuButton(label="Exit", hint="Esc", on_press=self.on_exit_press)
)
super().__init__( super().__init__(
urwid.Padding( urwid.Padding(
@@ -62,4 +66,8 @@ class RosterView(urwid.Filler):
self._emit("exit") self._emit("exit")
return True return True
if key == "f1":
self._emit("new_game")
return True
return False return False