| 21 | |
| 22 | |
| 23 | class RecoverpyApp(App[None]): |
| 24 | screens: Dict[str, Screen[None]] |
| 25 | CSS_PATH = get_css() # type: ignore[assignment] |
| 26 | BINDINGS = [ |
| 27 | Binding( |
| 28 | "question_mark", |
| 29 | "show_keyboard_help", |
| 30 | "Help", |
| 31 | key_display="?", |
| 32 | priority=True, |
| 33 | ), |
| 34 | Binding("ctrl+q", "quit", "Quit"), |
| 35 | ] |
| 36 | |
| 37 | def __init__(self, *args, **kwargs) -> None: # type: ignore |
| 38 | super().__init__(*args, **kwargs) |
| 39 | self._is_user_root = False |
| 40 | self._initialize_screens() |
| 41 | log.debug("Recoverpy app initialized") |
| 42 | |
| 43 | def _initialize_screens(self) -> None: |
| 44 | self.screens = { |
| 45 | "params": ParamsScreen(name="params"), |
| 46 | "search": SearchScreen(name="search"), |
| 47 | "result": ResultScreen(name="result"), |
| 48 | "save": SaveScreen(name="save"), |
| 49 | "path_edit": PathEditScreen(name="path_edit"), |
| 50 | } |
| 51 | for screen_name, screen_instance in self.screens.items(): |
| 52 | self.install_screen(screen_instance, screen_name) |
| 53 | log.debug(f"Installed screen {screen_name}") |
| 54 | |
| 55 | def compose(self) -> ComposeResult: |
| 56 | yield Footer() |
| 57 | |
| 58 | async def on_mount(self) -> None: |
| 59 | self.theme = "atom-one-dark" |
| 60 | await self.push_screen("params") |
| 61 | await verify_app_environment(self) |
| 62 | self.notify("Press ? for keyboard help", title="Tip", timeout=5) |
| 63 | |
| 64 | def _get_keyboard_help_message(self) -> str: |
| 65 | hidden_keys = {"left", "right", "up", "down"} |
| 66 | lines: list[str] = [] |
| 67 | for active_binding in self.active_bindings.values(): |
| 68 | binding = active_binding.binding |
| 69 | if not binding.show or not binding.description: |
| 70 | continue |
| 71 | if binding.key in hidden_keys: |
| 72 | continue |
| 73 | key = binding.key_display or binding.key |
| 74 | lines.append(f"{key}: {binding.description}") |
| 75 | |
| 76 | if not lines: |
| 77 | return "No keyboard shortcuts available." |
| 78 | |
| 79 | ordered = sorted(set(lines), key=str.lower) |
| 80 | return "Available shortcuts:\n" + "\n".join(ordered) |