|
1 | 1 | import time |
2 | 2 | from enum import Enum |
3 | | -from typing import Optional |
| 3 | +from typing import Literal, Optional |
4 | 4 |
|
5 | 5 | from textual.containers import Horizontal, Vertical, VerticalScroll |
6 | 6 | from textual.message import Message |
|
13 | 13 | class CustomFooter(Horizontal): |
14 | 14 | """A custom footer with keyboard shortcuts and render ID.""" |
15 | 15 |
|
16 | | - FOOTER_TEXT = "ctrl+c: copy * ctrl+d: quit * ctrl+l: toggle logs * ctrl+p: pause" |
| 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" |
17 | 20 | RENDER_FINISHED_TEXT = "enter: exit * ctrl+c: copy * ctrl+l: toggle logs" |
18 | 21 |
|
19 | 22 | def __init__(self, render_id: str = "", **kwargs): |
20 | 23 | super().__init__(**kwargs) |
21 | 24 | self.render_id = render_id |
22 | 25 |
|
23 | 26 | def compose(self): |
24 | | - self._footer_text_widget = Static(self.FOOTER_TEXT, classes="custom-footer-text") |
| 27 | + self._footer_text_widget = Static(self.FOOTER_RENDERING_TEXT, classes="custom-footer-text") |
25 | 28 | yield self._footer_text_widget |
26 | 29 | if self.render_id: |
27 | 30 | yield Static(f"render id: {self.render_id} ", classes="custom-footer-render-id") |
28 | 31 |
|
29 | | - def show_render_finished(self) -> None: |
30 | | - """Update footer text to show render-finished keybindings.""" |
| 32 | + def update_footer_state(self, state: Literal["rendering", "pausing", "paused", "finished"]) -> None: |
| 33 | + self.remove_class("footer-state-default") |
| 34 | + self.remove_class("footer-state-paused") |
| 35 | + |
31 | 36 | if self._footer_text_widget is not None: |
32 | | - self._footer_text_widget.update(self.RENDER_FINISHED_TEXT) |
| 37 | + if state == "rendering": |
| 38 | + self._footer_text_widget.update(self.FOOTER_RENDERING_TEXT) |
| 39 | + self.add_class("footer-state-default") |
| 40 | + elif state == "pausing": |
| 41 | + self._footer_text_widget.update(self.RENDER_PAUSING_TEXT) |
| 42 | + self.add_class("footer-state-paused") |
| 43 | + elif state == "paused": |
| 44 | + self._footer_text_widget.update(self.RENDER_PAUSED_TEXT) |
| 45 | + self.add_class("footer-state-paused") |
| 46 | + elif state == "finished": |
| 47 | + self._footer_text_widget.update(self.RENDER_FINISHED_TEXT) |
| 48 | + self.add_class("footer-state-default") |
33 | 49 |
|
34 | 50 |
|
35 | 51 | class ScriptOutputType(str, Enum): |
|
0 commit comments