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