Skip to content

Commit f1812f8

Browse files
committed
Updating footer of PartialRenderTUI
1 parent 63598ca commit f1812f8

2 files changed

Lines changed: 70 additions & 12 deletions

File tree

tui/components.py

Lines changed: 69 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,59 @@
1313
class CustomFooter(Horizontal):
1414
"""A custom footer with keyboard shortcuts and render ID."""
1515

16-
FOOTER_BASE_TEXT = "ctrl+c: copy * ctrl+d: quit * ctrl+l: toggle logs"
17-
FOOTER_RENDERING_TEXT = FOOTER_BASE_TEXT + " * ctrl+p: pause"
18-
RENDER_PAUSING_TEXT = FOOTER_BASE_TEXT + " * pausing ..."
19-
RENDER_PAUSED_TEXT = FOOTER_BASE_TEXT + " * ctrl+p: resume"
20-
RENDER_FINISHED_TEXT = "enter: exit * ctrl+c: copy * ctrl+l: toggle logs"
16+
KEYBOARD_SHORTCUTS = ["ctrl+c", "ctrl+d", "ctrl+l", "ctrl+p", "enter"]
17+
18+
KEYBOARD_SHORTCUTS_EFFECTS = {
19+
"default": {
20+
"ctrl+c": "copy",
21+
"ctrl+d": "quit",
22+
"ctrl+l": "toggle logs",
23+
"ctrl+p": "pause",
24+
},
25+
"pausing": {
26+
"ctrl+c": "copy",
27+
"ctrl+d": "quit",
28+
"ctrl+l": "toggle logs",
29+
},
30+
"paused": {
31+
"ctrl+c": "copy",
32+
"ctrl+d": "quit",
33+
"ctrl+l": "toggle logs",
34+
"ctrl+p": "resume",
35+
},
36+
"finished": {
37+
"enter": "exit",
38+
"ctrl+c": "copy",
39+
"ctrl+l": "toggle logs",
40+
},
41+
}
42+
43+
APPENDING_TEXT = {
44+
"pausing": "pausing ...",
45+
}
2146

22-
def __init__(self, render_id: str = "", **kwargs):
47+
DELIMITER = " * "
48+
49+
def __init__(self, render_id: str = "", use_logs_shortcut: bool = True, use_pause_shortcut: bool = True, **kwargs):
2350
super().__init__(**kwargs)
2451
self.render_id = render_id
52+
self.use_logs_shortcut = use_logs_shortcut
53+
self.use_pause_shortcut = use_pause_shortcut
54+
self.available_keyboard_shortcuts = self.KEYBOARD_SHORTCUTS[:]
55+
if not self.use_logs_shortcut:
56+
self.available_keyboard_shortcuts.remove("ctrl+l")
57+
if not self.use_pause_shortcut:
58+
self.available_keyboard_shortcuts.remove("ctrl+p")
2559

2660
def compose(self):
27-
self._footer_text_widget = Static(self.FOOTER_RENDERING_TEXT, classes="custom-footer-text")
61+
footer_rendering_text = self.DELIMITER.join(
62+
[
63+
f"{shortcut}: {effect}"
64+
for shortcut, effect in self.KEYBOARD_SHORTCUTS_EFFECTS["default"].items()
65+
if shortcut in self.available_keyboard_shortcuts
66+
]
67+
)
68+
self._footer_text_widget = Static(footer_rendering_text, classes="custom-footer-text")
2869
yield self._footer_text_widget
2970
if self.render_id:
3071
yield Static(f"render id: {self.render_id} ", classes="custom-footer-render-id")
@@ -33,18 +74,35 @@ def update_footer_state(self, state: Literal["rendering", "pausing", "paused", "
3374
self.remove_class("footer-state-default")
3475
self.remove_class("footer-state-paused")
3576

77+
if state in self.KEYBOARD_SHORTCUTS_EFFECTS:
78+
state_dict = self.KEYBOARD_SHORTCUTS_EFFECTS[state]
79+
else:
80+
state_dict = self.KEYBOARD_SHORTCUTS_EFFECTS["default"]
81+
82+
footer_rendering_text = self.DELIMITER.join(
83+
[
84+
f"{shortcut}: {effect}"
85+
for shortcut, effect in state_dict.items()
86+
if shortcut in self.available_keyboard_shortcuts
87+
]
88+
)
89+
90+
appending_text = self.APPENDING_TEXT.get(state, "")
91+
if not appending_text.strip() == "":
92+
footer_rendering_text = f"{footer_rendering_text} * {appending_text}"
93+
3694
if self._footer_text_widget is not None:
3795
if state == "rendering":
38-
self._footer_text_widget.update(self.FOOTER_RENDERING_TEXT)
96+
self._footer_text_widget.update(footer_rendering_text)
3997
self.add_class("footer-state-default")
4098
elif state == "pausing":
41-
self._footer_text_widget.update(self.RENDER_PAUSING_TEXT)
99+
self._footer_text_widget.update(footer_rendering_text)
42100
self.add_class("footer-state-paused")
43101
elif state == "paused":
44-
self._footer_text_widget.update(self.RENDER_PAUSED_TEXT)
102+
self._footer_text_widget.update(footer_rendering_text)
45103
self.add_class("footer-state-paused")
46104
elif state == "finished":
47-
self._footer_text_widget.update(self.RENDER_FINISHED_TEXT)
105+
self._footer_text_widget.update(footer_rendering_text)
48106
self.add_class("footer-state-default")
49107

50108

tui/partial_render_tui.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def compose(self) -> ComposeResult:
4444
)
4545
yield Vertical(id="info-panel")
4646
yield ListView(id="choice-list")
47-
yield CustomFooter(render_id=self.render_id)
47+
yield CustomFooter(render_id=self.render_id, use_logs_shortcut=False, use_pause_shortcut=False)
4848

4949
def on_mount(self) -> None:
5050
pr = self.partial_render

0 commit comments

Comments
 (0)