diff --git a/pqcli/ui/curses/views/create_character_view/choose_character_stats_view.py b/pqcli/ui/curses/views/create_character_view/choose_character_stats_view.py index 8d8fd98..7ded58d 100644 --- a/pqcli/ui/curses/views/create_character_view/choose_character_stats_view.py +++ b/pqcli/ui/curses/views/create_character_view/choose_character_stats_view.py @@ -4,8 +4,9 @@ import typing as T from pqcli.config import PRIME_STATS from pqcli.mechanic import StatsBuilder from pqcli.ui.curses.event_handler import EventHandler -from pqcli.ui.curses.util import KEYS_CANCEL +from pqcli.ui.curses.util import KEYS_CANCEL, KEYS_DOWN, KEYS_UP from pqcli.ui.curses.views.base_view import BaseView +from pqcli.ui.curses.widgets.focusable import focus_standout class ChooseCharacterStatsView(BaseView): @@ -15,6 +16,7 @@ class ChooseCharacterStatsView(BaseView): self.on_cancel = EventHandler() self.on_confirm = EventHandler() + self._active_widget = 0 self._win: T.Optional[T.Any] = None self._stats_win: T.Optional[T.Any] = None @@ -48,7 +50,16 @@ class ChooseCharacterStatsView(BaseView): self.on_cancel() elif key == curses.ascii.NL: - self.on_confirm(self._stats) + if self._active_widget == 0: + self._stats = self._stats_builder.roll() + elif self._active_widget == 1: + self._stats = self._stats_builder.unroll() + elif self._active_widget == 2: + self.on_confirm(self._stats) + elif self._active_widget == 3: + self.on_cancel() + else: + assert False elif key == curses.KEY_F5: self._stats = self._stats_builder.roll() @@ -56,6 +67,15 @@ class ChooseCharacterStatsView(BaseView): elif key == curses.KEY_F6: self._stats = self._stats_builder.unroll() + elif key == curses.KEY_F10: + self.on_confirm(self._stats) + + elif key in KEYS_DOWN and self._active_widget < 3: + self._active_widget += 1 + + elif key in KEYS_UP and self._active_widget > 0: + self._active_widget -= 1 + self._render() def _render(self) -> None: @@ -67,10 +87,14 @@ class ChooseCharacterStatsView(BaseView): self._win.erase() self._win.addstr(0, 0, "Roll character stats:") - self._win.addstr(3 + stats_h + 0, 0, "[F5 ] roll") - self._win.addstr(3 + stats_h + 1, 0, "[F6 ] unroll") - self._win.addstr(3 + stats_h + 2, 0, "[Esc ] cancel") - self._win.addstr(3 + stats_h + 3, 0, "[Enter] confirm") + with focus_standout(self._active_widget == 0, self._win): + self._win.addstr(3 + stats_h + 0, 0, "[F5 ] roll") + with focus_standout(self._active_widget == 1, self._win): + self._win.addstr(3 + stats_h + 1, 0, "[F6 ] unroll") + with focus_standout(self._active_widget == 2, self._win): + self._win.addstr(3 + stats_h + 2, 0, "[F10 ] continue") + with focus_standout(self._active_widget == 3, self._win): + self._win.addstr(3 + stats_h + 3, 0, "[Esc ] cancel") self._win.noutrefresh() self._stats_win.erase()