42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
import curses
|
|
|
|
from babi.margin import Margin
|
|
from babi.prompt import PromptResult
|
|
|
|
|
|
class Status:
|
|
def __init__(self) -> None:
|
|
self._status = ''
|
|
self._action_counter = -1
|
|
|
|
def update(self, status: str) -> None:
|
|
self._status = status
|
|
self._action_counter = 25
|
|
|
|
def clear(self) -> None:
|
|
self._status = ''
|
|
|
|
def draw(self, stdscr: 'curses._CursesWindow', margin: Margin) -> None:
|
|
if margin.footer or self._status:
|
|
stdscr.insstr(curses.LINES - 1, 0, ' ' * curses.COLS)
|
|
if self._status:
|
|
status = f' {self._status} '
|
|
x = (curses.COLS - len(status)) // 2
|
|
if x < 0:
|
|
x = 0
|
|
status = status.strip()
|
|
stdscr.insstr(curses.LINES - 1, x, status, curses.A_REVERSE)
|
|
|
|
def tick(self, margin: Margin) -> None:
|
|
# when the window is only 1-tall, hide the status quicker
|
|
if margin.footer:
|
|
self._action_counter -= 1
|
|
else:
|
|
self._action_counter -= 24
|
|
if self._action_counter < 0:
|
|
self.clear()
|
|
|
|
def cancelled(self) -> PromptResult:
|
|
self.update('cancelled')
|
|
return PromptResult.CANCELLED
|