ui: create data table widget

This commit is contained in:
rr-
2018-11-08 18:22:41 +01:00
parent 066fc692e4
commit 6bd12797f0
2 changed files with 60 additions and 31 deletions
+42
View File
@@ -0,0 +1,42 @@
import typing as T
import urwid
class DataTable(urwid.Pile):
def __init__(self, columns: T.Any) -> None:
self.column_count = len(columns)
self._columns = columns
self._rows: T.List[T.List[urwid.Widget]] = []
super().__init__([])
@property
def row_count(self) -> int:
return len(self._rows)
@property
def data_rows(self) -> T.Iterable[T.List[urwid.Widget]]:
# "rows" was already used by urwid
return self._rows
def add_row(self, *widgets: T.List[urwid.Widget]) -> None:
if len(widgets) != self.column_count:
raise VauleError(f"Expected {self.column_count} widgets")
self.contents.append(
(
urwid.Columns(
list((*x, y) for x, y in zip(self._columns, widgets))
),
("pack", 1),
)
)
self._rows.append(widgets)
def delete_row(self, idx: int) -> None:
del self.contents[idx]
del self._rows[idx]
def delete_rows(self, start_idx: int, end_idx: int) -> None:
del self.contents[start_idx:end_idx]
del self._rows[start_idx:end_idx]