| 13 | |
| 14 | |
| 15 | class PlainModuleRenderChoiceTUI(App): |
| 16 | BINDINGS = [ |
| 17 | Binding("ctrl+o", "toggle_expand", "Expand/Collapse", show=False), |
| 18 | Binding("ctrl+c", "copy_selection", "Copy", show=False), |
| 19 | Binding("ctrl+d", "quit", "Quit", show=False), |
| 20 | ] |
| 21 | |
| 22 | def __init__( |
| 23 | self, |
| 24 | plain_module: PlainModule, |
| 25 | plain_module_render_state: PlainModuleRenderState, |
| 26 | render_choices: dict[str, RenderChoice], |
| 27 | state_machine_version: str, |
| 28 | render_id: str, |
| 29 | on_cancel: Optional[Callable[[], None]] = None, |
| 30 | **kwargs, |
| 31 | ): |
| 32 | super().__init__(**kwargs) |
| 33 | self.plain_module = plain_module |
| 34 | self.plain_module_render_state = plain_module_render_state |
| 35 | self.state_machine_version = state_machine_version |
| 36 | self.render_id = render_id |
| 37 | self._expandable_labels: list[dict] = [] |
| 38 | self.render_choices = render_choices |
| 39 | self._on_cancel = on_cancel |
| 40 | |
| 41 | def get_msg_from_choice(self, render_choice: RenderChoice) -> str: |
| 42 | if render_choice.choice_type == "module_start": |
| 43 | if render_choice.module.module_name == self.plain_module.module_name: |
| 44 | if render_choice.module.is_module_fully_rendered(): |
| 45 | return f"Re-render the current module ([#5593FF]{render_choice.module.module_name}[/])" |
| 46 | else: |
| 47 | return f"Start rendering the current module ([#5593FF]{render_choice.module.module_name}[/])" |
| 48 | else: |
| 49 | return f"Start from module [#5593FF]{render_choice.module.module_name}[/]" |
| 50 | elif render_choice.choice_type == "render_from_change": |
| 51 | assert render_choice.module is not None |
| 52 | assert render_choice.render_range is not None |
| 53 | start_frid = render_choice.render_range[0] |
| 54 | quote = self._short_functionality_quote(render_choice.module, start_frid) |
| 55 | return ( |
| 56 | f"Render from changed functionality [#5593FF]{start_frid}[/]" |
| 57 | f" in module [#5593FF]{render_choice.module.module_name}[/]" |
| 58 | f": [#888]{quote}[/]" |
| 59 | ) |
| 60 | elif render_choice.choice_type == "rerender_affected" and self.plain_module_render_state.change is not None: |
| 61 | all_affected_modules = get_all_affected_modules_from_change( |
| 62 | self.plain_module, self.plain_module_render_state |
| 63 | ) |
| 64 | |
| 65 | module_names = ", ".join([m.module_name for m in all_affected_modules]) |
| 66 | if len(all_affected_modules) == 1: |
| 67 | return f"Re-render module [#5593FF]{module_names}[/] from scratch" |
| 68 | return f"Re-render affected modules ([#5593FF]{module_names}[/]) from scratch" |
| 69 | |
| 70 | elif render_choice.choice_type == "rerender_from_first": |
| 71 | return f"Re-render from first module ([#5593FF]{render_choice.module.module_name}[/])" |
| 72 | elif render_choice.choice_type == "continue_from_frid": |