mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-29 06:44:00 -06:00
ui/curses: add focus to character stats view
This commit is contained in:
@@ -4,8 +4,9 @@ import typing as T
|
|||||||
from pqcli.config import PRIME_STATS
|
from pqcli.config import PRIME_STATS
|
||||||
from pqcli.mechanic import StatsBuilder
|
from pqcli.mechanic import StatsBuilder
|
||||||
from pqcli.ui.curses.event_handler import EventHandler
|
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.views.base_view import BaseView
|
||||||
|
from pqcli.ui.curses.widgets.focusable import focus_standout
|
||||||
|
|
||||||
|
|
||||||
class ChooseCharacterStatsView(BaseView):
|
class ChooseCharacterStatsView(BaseView):
|
||||||
@@ -15,6 +16,7 @@ class ChooseCharacterStatsView(BaseView):
|
|||||||
self.on_cancel = EventHandler()
|
self.on_cancel = EventHandler()
|
||||||
self.on_confirm = EventHandler()
|
self.on_confirm = EventHandler()
|
||||||
|
|
||||||
|
self._active_widget = 0
|
||||||
self._win: T.Optional[T.Any] = None
|
self._win: T.Optional[T.Any] = None
|
||||||
self._stats_win: T.Optional[T.Any] = None
|
self._stats_win: T.Optional[T.Any] = None
|
||||||
|
|
||||||
@@ -48,7 +50,16 @@ class ChooseCharacterStatsView(BaseView):
|
|||||||
self.on_cancel()
|
self.on_cancel()
|
||||||
|
|
||||||
elif key == curses.ascii.NL:
|
elif key == curses.ascii.NL:
|
||||||
|
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)
|
self.on_confirm(self._stats)
|
||||||
|
elif self._active_widget == 3:
|
||||||
|
self.on_cancel()
|
||||||
|
else:
|
||||||
|
assert False
|
||||||
|
|
||||||
elif key == curses.KEY_F5:
|
elif key == curses.KEY_F5:
|
||||||
self._stats = self._stats_builder.roll()
|
self._stats = self._stats_builder.roll()
|
||||||
@@ -56,6 +67,15 @@ class ChooseCharacterStatsView(BaseView):
|
|||||||
elif key == curses.KEY_F6:
|
elif key == curses.KEY_F6:
|
||||||
self._stats = self._stats_builder.unroll()
|
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()
|
self._render()
|
||||||
|
|
||||||
def _render(self) -> None:
|
def _render(self) -> None:
|
||||||
@@ -67,10 +87,14 @@ class ChooseCharacterStatsView(BaseView):
|
|||||||
|
|
||||||
self._win.erase()
|
self._win.erase()
|
||||||
self._win.addstr(0, 0, "Roll character stats:")
|
self._win.addstr(0, 0, "Roll character stats:")
|
||||||
|
with focus_standout(self._active_widget == 0, self._win):
|
||||||
self._win.addstr(3 + stats_h + 0, 0, "[F5 ] roll")
|
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")
|
self._win.addstr(3 + stats_h + 1, 0, "[F6 ] unroll")
|
||||||
self._win.addstr(3 + stats_h + 2, 0, "[Esc ] cancel")
|
with focus_standout(self._active_widget == 2, self._win):
|
||||||
self._win.addstr(3 + stats_h + 3, 0, "[Enter] confirm")
|
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._win.noutrefresh()
|
||||||
|
|
||||||
self._stats_win.erase()
|
self._stats_win.erase()
|
||||||
|
|||||||
Reference in New Issue
Block a user