mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-29 06:44:00 -06:00
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import typing as T
|
|
|
|
from pqcli.mechanic import EquipmentType, Player
|
|
from pqcli.ui.curses.widgets import DataTable, WindowWrapper
|
|
|
|
from .focusable import Focusable
|
|
|
|
|
|
class EquipmentWindow(Focusable, WindowWrapper):
|
|
def __init__(
|
|
self, player: Player, parent: T.Any, h: int, w: int, y: int, x: int
|
|
) -> None:
|
|
super().__init__(parent, h, w, y, x)
|
|
self._on_focus_change += self._render
|
|
|
|
self._data_table = DataTable(
|
|
self._win, h - 2, w - 2, 1, 1, align_right=False
|
|
)
|
|
|
|
self._player = player
|
|
self._player.equipment.connect("change", self.sync_equipment_change)
|
|
|
|
self._sync()
|
|
|
|
def stop(self) -> None:
|
|
super().stop()
|
|
self._data_table.stop()
|
|
|
|
self._player.equipment.disconnect("change", self.sync_equipment_change)
|
|
|
|
def _sync(self) -> None:
|
|
self._data_table.clear()
|
|
for equipment_type in EquipmentType:
|
|
self._data_table.add(
|
|
equipment_type.value.ljust(15),
|
|
self._player.equipment[equipment_type] or "",
|
|
)
|
|
self._render()
|
|
|
|
def sync_equipment_change(
|
|
self, equipment_type: EquipmentType, item_name: T.Optional[str]
|
|
) -> None:
|
|
self._data_table.set(equipment_type.value, item_name or "")
|
|
self._render()
|
|
|
|
def _render(self) -> None:
|
|
if not self._win:
|
|
return
|
|
|
|
with self._focus_standout(self._win):
|
|
self._win.box()
|
|
text = " Equipment "
|
|
x = max(0, (self.getmaxyx()[1] - len(text)) // 2)
|
|
self._win.addnstr(0, x, text, min(len(text), self.getmaxyx()[1]))
|
|
|
|
self._win.refresh()
|
|
self._data_table.render()
|