mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-28 22:33:59 -06:00
ui: improve new game view
This commit is contained in:
+71
-44
@@ -10,7 +10,7 @@ from pqcli.ui.button import MenuButton
|
|||||||
from pqcli.ui.line_box import LineBox
|
from pqcli.ui.line_box import LineBox
|
||||||
|
|
||||||
|
|
||||||
class StatsGroupBox(urwid.Pile):
|
class StatsBox(urwid.Filler):
|
||||||
def __init__(self, player: Player, stats_builder: StatsBuilder) -> None:
|
def __init__(self, player: Player, stats_builder: StatsBuilder) -> None:
|
||||||
self.player = player
|
self.player = player
|
||||||
self.stats_builder = stats_builder
|
self.stats_builder = stats_builder
|
||||||
@@ -21,22 +21,41 @@ class StatsGroupBox(urwid.Pile):
|
|||||||
roll_button = MenuButton("Roll", on_press=self.on_roll_press)
|
roll_button = MenuButton("Roll", on_press=self.on_roll_press)
|
||||||
unroll_button = MenuButton("Unroll", on_press=self.on_unroll_press)
|
unroll_button = MenuButton("Unroll", on_press=self.on_unroll_press)
|
||||||
|
|
||||||
value_texts = list(self.stat_labels.values()) + [self.total_label]
|
value_texts = list(self.stat_labels.values())
|
||||||
label_texts = [
|
label_texts = [urwid.Text(f"{stat.value}: ") for stat in PRIME_STATS]
|
||||||
urwid.Text(f"{stat.value}: ") for stat in PRIME_STATS
|
|
||||||
] + [urwid.Text("Total: ")]
|
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
[
|
urwid.Pile(
|
||||||
urwid.Columns(
|
[
|
||||||
[
|
(
|
||||||
urwid.Filler(urwid.Pile(label_texts)),
|
13,
|
||||||
urwid.Filler(urwid.Pile(value_texts)),
|
LineBox(
|
||||||
]
|
urwid.ListBox(
|
||||||
),
|
[
|
||||||
urwid.Filler(roll_button),
|
urwid.Columns(
|
||||||
urwid.Filler(unroll_button),
|
[
|
||||||
]
|
urwid.Pile(label_texts),
|
||||||
|
urwid.Pile(value_texts),
|
||||||
|
]
|
||||||
|
),
|
||||||
|
urwid.Divider(),
|
||||||
|
urwid.Columns(
|
||||||
|
[
|
||||||
|
urwid.Text("Total: "),
|
||||||
|
self.total_label,
|
||||||
|
]
|
||||||
|
),
|
||||||
|
urwid.Divider(),
|
||||||
|
roll_button,
|
||||||
|
unroll_button,
|
||||||
|
]
|
||||||
|
),
|
||||||
|
title="Stats",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
valign="top",
|
||||||
)
|
)
|
||||||
|
|
||||||
def on_roll_press(self, _user_data: T.Any) -> None:
|
def on_roll_press(self, _user_data: T.Any) -> None:
|
||||||
@@ -62,6 +81,30 @@ class StatsGroupBox(urwid.Pile):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class RaceBox(LineBox):
|
||||||
|
def __init__(self, player: Player) -> None:
|
||||||
|
race_checkboxes = []
|
||||||
|
for race in RACES:
|
||||||
|
urwid.RadioButton(
|
||||||
|
group=race_checkboxes,
|
||||||
|
label=race.name,
|
||||||
|
state=race.name == player.race.name,
|
||||||
|
)
|
||||||
|
super().__init__(urwid.ListBox(race_checkboxes), title="Race")
|
||||||
|
|
||||||
|
|
||||||
|
class ClassBox(LineBox):
|
||||||
|
def __init__(self, player: Player) -> None:
|
||||||
|
class_checkboxes = []
|
||||||
|
for class_ in CLASSES:
|
||||||
|
urwid.RadioButton(
|
||||||
|
group=class_checkboxes,
|
||||||
|
label=class_.name,
|
||||||
|
state=class_.name == player.class_.name,
|
||||||
|
)
|
||||||
|
super().__init__(urwid.ListBox(class_checkboxes), title="Class")
|
||||||
|
|
||||||
|
|
||||||
class NewGameView(urwid.Pile):
|
class NewGameView(urwid.Pile):
|
||||||
def __init__(self, on_confirm: T.Callable, on_cancel: T.Callable) -> None:
|
def __init__(self, on_confirm: T.Callable, on_cancel: T.Callable) -> None:
|
||||||
self.on_confirm = on_confirm
|
self.on_confirm = on_confirm
|
||||||
@@ -70,27 +113,15 @@ class NewGameView(urwid.Pile):
|
|||||||
stats_builder = StatsBuilder()
|
stats_builder = StatsBuilder()
|
||||||
self.player = create_player(stats_builder)
|
self.player = create_player(stats_builder)
|
||||||
|
|
||||||
race_checkboxes = []
|
race_box = RaceBox(self.player)
|
||||||
for race in RACES:
|
class_box = ClassBox(self.player)
|
||||||
urwid.RadioButton(
|
stats_box = StatsBox(self.player, stats_builder)
|
||||||
group=race_checkboxes,
|
|
||||||
label=race.name,
|
|
||||||
state=race.name == self.player.race.name,
|
|
||||||
)
|
|
||||||
|
|
||||||
class_checkboxes = []
|
|
||||||
for class_ in CLASSES:
|
|
||||||
urwid.RadioButton(
|
|
||||||
group=class_checkboxes,
|
|
||||||
label=class_.name,
|
|
||||||
state=class_.name == self.player.class_.name,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.char_name_edit = urwid_readline.ReadlineEdit(
|
self.char_name_edit = urwid_readline.ReadlineEdit(
|
||||||
"Name: ", self.player.name
|
"Name: ", self.player.name
|
||||||
)
|
)
|
||||||
generate_char_name_btn = MenuButton(
|
generate_char_name_btn = MenuButton(
|
||||||
"Generate", on_press=self.on_generate_char_name_press
|
"Generate random name", on_press=self.on_generate_char_name_press
|
||||||
)
|
)
|
||||||
|
|
||||||
urwid.connect_signal(
|
urwid.connect_signal(
|
||||||
@@ -99,25 +130,21 @@ class NewGameView(urwid.Pile):
|
|||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
[
|
[
|
||||||
|
(1, urwid.Filler(self.char_name_edit)),
|
||||||
(
|
(
|
||||||
1,
|
1,
|
||||||
urwid.Columns(
|
urwid.Filler(
|
||||||
[
|
urwid.Padding(
|
||||||
urwid.Filler(self.char_name_edit),
|
generate_char_name_btn,
|
||||||
urwid.Filler(generate_char_name_btn),
|
left=len(self.char_name_edit.caption),
|
||||||
]
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
urwid.Columns(
|
urwid.Columns(
|
||||||
[
|
[
|
||||||
LineBox(urwid.ListBox(race_checkboxes), title="Race"),
|
("weight", 2, race_box),
|
||||||
LineBox(
|
("weight", 2, class_box),
|
||||||
urwid.ListBox(class_checkboxes), title="Class"
|
stats_box,
|
||||||
),
|
|
||||||
LineBox(
|
|
||||||
StatsGroupBox(self.player, stats_builder),
|
|
||||||
title="Stats",
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user