From d2c06b08bb3d69ceb72026a650996573370ec552 Mon Sep 17 00:00:00 2001 From: rr- Date: Sun, 13 Jan 2019 21:38:03 +0100 Subject: [PATCH] ui/curses: cycle widgets on tab --- pqcli/ui/curses/util.py | 1 + .../choose_character_name_view.py | 5 ++++- .../choose_character_stats_view.py | 5 ++++- pqcli/ui/curses/views/game_view/__init__.py | 15 +++++++++++++++ pqcli/ui/curses/widgets/menu.py | 16 ++++++++-------- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/pqcli/ui/curses/util.py b/pqcli/ui/curses/util.py index 5a7fcda..095bdc4 100644 --- a/pqcli/ui/curses/util.py +++ b/pqcli/ui/curses/util.py @@ -3,6 +3,7 @@ import curses.ascii import typing as T from dataclasses import dataclass +KEYS_CYCLE = {curses.ascii.TAB} KEYS_DOWN = set(map(ord, "jJ")) | {curses.KEY_DOWN} KEYS_LEFT = set(map(ord, "hH")) | {curses.KEY_LEFT} KEYS_RIGHT = set(map(ord, "lL")) | {curses.KEY_RIGHT} diff --git a/pqcli/ui/curses/views/create_character_view/choose_character_name_view.py b/pqcli/ui/curses/views/create_character_view/choose_character_name_view.py index cfd3af4..502a34a 100644 --- a/pqcli/ui/curses/views/create_character_view/choose_character_name_view.py +++ b/pqcli/ui/curses/views/create_character_view/choose_character_name_view.py @@ -4,7 +4,7 @@ import typing as T from pqcli.mechanic import generate_name from pqcli.ui.curses.event_handler import EventHandler -from pqcli.ui.curses.util import KEYS_CANCEL, KEYS_DOWN, KEYS_UP +from pqcli.ui.curses.util import KEYS_CANCEL, KEYS_CYCLE, KEYS_DOWN, KEYS_UP from pqcli.ui.curses.views.base_view import BaseView from pqcli.ui.curses.widgets.focusable import focus_standout @@ -51,6 +51,9 @@ class ChooseCharacterNameView(BaseView): elif key == curses.KEY_F10: self._finish() + elif key in KEYS_CYCLE: + self._active_widget = (self._active_widget + 1) % 4 + elif self._active_widget == 0: if key == curses.ascii.ESC: self.on_cancel() 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 7ded58d..822e06b 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,7 +4,7 @@ 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, KEYS_DOWN, KEYS_UP +from pqcli.ui.curses.util import KEYS_CANCEL, KEYS_CYCLE, KEYS_DOWN, KEYS_UP from pqcli.ui.curses.views.base_view import BaseView from pqcli.ui.curses.widgets.focusable import focus_standout @@ -70,6 +70,9 @@ class ChooseCharacterStatsView(BaseView): elif key == curses.KEY_F10: self.on_confirm(self._stats) + elif key in KEYS_CYCLE: + self._active_widget = (self._active_widget + 1) % 4 + elif key in KEYS_DOWN and self._active_widget < 3: self._active_widget += 1 diff --git a/pqcli/ui/curses/views/game_view/__init__.py b/pqcli/ui/curses/views/game_view/__init__.py index 896ec10..86f4379 100644 --- a/pqcli/ui/curses/views/game_view/__init__.py +++ b/pqcli/ui/curses/views/game_view/__init__.py @@ -8,6 +8,7 @@ from pqcli.roster import Roster from pqcli.ui.curses.event_handler import EventHandler from pqcli.ui.curses.util import ( KEYS_CANCEL, + KEYS_CYCLE, KEYS_DOWN, KEYS_LEFT, KEYS_RIGHT, @@ -57,6 +58,20 @@ class GameView(BaseView): if hasattr(focused, "scroll_page_down"): focused.scroll_page_down() + elif key in KEYS_CYCLE: + if focused == self._char_sheet_win: + self.focus(self._spell_book_win) + elif focused == self._spell_book_win: + self.focus(self._equipment_win) + elif focused == self._equipment_win: + self.focus(self._inventory_win) + elif focused == self._inventory_win: + self.focus(self._plot_win) + elif focused == self._plot_win: + self.focus(self._quest_book_win) + elif focused == self._quest_book_win: + self.focus(self._char_sheet_win) + elif key in KEYS_DOWN: if focused == self._char_sheet_win: self.focus(self._spell_book_win) diff --git a/pqcli/ui/curses/widgets/menu.py b/pqcli/ui/curses/widgets/menu.py index bf65497..d0fcfb5 100644 --- a/pqcli/ui/curses/widgets/menu.py +++ b/pqcli/ui/curses/widgets/menu.py @@ -2,7 +2,7 @@ import curses import curses.ascii import typing as T -from pqcli.ui.curses.util import KEYS_DOWN, KEYS_UP +from pqcli.ui.curses.util import KEYS_CYCLE, KEYS_DOWN, KEYS_UP from pqcli.ui.curses.widgets.focusable import focus_standout from ..util import Choice @@ -54,6 +54,9 @@ class Menu(Widget): def prev(self) -> None: self._active_choice = max(0, self._active_choice - 1) + def cycle(self) -> None: + self._active_choice = (self._active_choice + 1) % len(self._choices) + def keypress(self, key: int) -> None: for choice in self._choices: if key in choice.keys: @@ -62,15 +65,12 @@ class Menu(Widget): if key == curses.ascii.NL: self._choices[self._active_choice].callback() - return - - if key in KEYS_DOWN: + elif key in KEYS_DOWN: self.next() - return - - if key in KEYS_UP: + elif key in KEYS_UP: self.prev() - return + elif key in KEYS_CYCLE: + self.cycle() def render(self) -> None: if not self._pad: