Implement j/k navigation, clearing DataTable and getting current cell value

master
VikingKong 3 years ago
parent 7fd487058d
commit c72f35a27a

@ -1,19 +1,46 @@
from textual.containers import Container, Vertical from textual.containers import Container, Vertical
from textual.app import ComposeResult, App from textual.app import ComposeResult, App
from textual.widgets import Static, Header, DataTable from textual.widgets import Static, Header, DataTable
from textual.widget import Widget
class FeedPane(Vertical): class FeedPane(Widget):
def __init__(self, content): def __init__(self):
super().__init__() super().__init__()
self.content = content
self.id = "feed-pane" self.id = "feed-pane"
def add(self, e): def add(self, content):
self.content.append(e) table = self.query_one(DataTable)
table.add_rows([[item] for item in content])
def addColumn(self, title):
table = self.query_one(DataTable)
table.add_column(title, width=60)
def clear(self):
table = self.query_one(DataTable)
table.data = {}
table.rows = {}
table.row_count = 0
table._line_no = 0
table._y_offsets = []
table._new_rows = set()
table._clear_caches()
table._require_update_dimensions = True
table.check_idle()
def currentValue(self):
table = self.query_one(DataTable)
row_num = table.cursor_cell.row
column_num = table.cursor_cell.column
return table.data[row_num][column_num]
def focus(self):
table = self.query_one(DataTable)
table.focus()
def compose(self): def compose(self):
yield Vertical(*self.content, id="left-container") yield DataTable(id="feeds_table")
class FeedItem(Static): class FeedItem(Static):
@ -34,36 +61,30 @@ class GUI(App):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.i = 0
def on_key(self, event): def on_key(self, event):
# item = self.query(FeedItem)[self.i]
# item.set_styles("color: auto;")
if event.key == "j": if event.key == "j":
self.i += 1 pane = self.query_one(DataTable)
pane.key_down(event)
elif event.key == "k": elif event.key == "k":
self.i -= 1
elif event.key == "r":
pane = self.query_one(DataTable) pane = self.query_one(DataTable)
pane.data = {} pane.key_up(event)
pane.row_count = 0
pane._line_no = 0
pane._y_offsets = []
pane._require_update_dimensions = True
pane.check_idle()
elif event.key == "a": elif event.key == "a":
pane = self.query_one(DataTable) pane = self.query_one(FeedPane)
pane.add_rows([["XXX"]]) pane.add(["XXX"])
elif event.key == "r":
pane = self.query_one(FeedPane)
pane.clear()
elif event.key == "space":
pane = self.query_one(FeedPane)
pane.add([pane.currentValue()])
else: else:
pass pass
# item = self.query(FeedItem)[self.i]
# item.set_styles("color: blue;")
def compose(self) -> ComposeResult: def compose(self) -> ComposeResult:
yield Header() yield Header()
yield Container( yield Container(
# FeedPane([FeedItem(f"Feed# {number}", number) for number in range(15)]), FeedPane(),
DataTable(),
Vertical( Vertical(
*[Static("Horizontally"), *[Static("Horizontally"),
Static("Positioned"), Static("Positioned"),
@ -75,11 +96,12 @@ class GUI(App):
) )
def on_mount(self): def on_mount(self):
dt = self.query_one(DataTable) fp = self.query_one(FeedPane)
dt.add_column("Feeds", width = 60) fp.addColumn("Feeds")
# dt.add_rows([[FeedItem(f"Feed# {number}", number)] for number in range(15)]) fp.add(["Feed#" + str(number) for number in range(15)])
dt.add_rows([[str(number)] for number in range(15)]) # fp.add_rows([[FeedItem(f"Feed# {number}", number)] for number in range(15)])
dt.focus() fp.focus()
if __name__ == "__main__": if __name__ == "__main__":
app = GUI() app = GUI()

Loading…
Cancel
Save