mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-29 06:44:00 -06:00
ui: create data table widget
This commit is contained in:
@@ -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]
|
||||
Reference in New Issue
Block a user