| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- from typing import List, Optional
- from textual.app import ComposeResult
- from textual.containers import Horizontal, Vertical
- from textual.screen import ModalScreen
- from textual.widgets import Button, Label
- class OverwriteConfirmScreen(ModalScreen[bool]):
- """Dialog confirming an overwrite of protected (hard-to-regenerate) outputs."""
- def __init__(self, directory: str, conflicts: Optional[List[str]] = None):
- super().__init__()
- self.directory = directory
- # Human-readable descriptions of the protected artifacts at risk. When
- # empty, falls back to a generic non-empty-directory warning.
- self.conflicts = conflicts or []
- def compose(self) -> ComposeResult:
- if self.conflicts:
- items = "\n".join(f" • {c}" for c in self.conflicts)
- body = (
- f"This scenario will overwrite existing, hard-to-regenerate "
- f"outputs in:\n[dim]{self.directory}[/dim]\n\n{items}\n\nProceed?"
- )
- else:
- body = (
- f"The output directory is not empty:\n[dim]{self.directory}[/dim]"
- "\n\nProceeding will likely overwrite existing experiment data."
- )
- with Vertical(id="dialog"):
- yield Label("[bold red]WARNING[/bold red]")
- yield Label(body, id="warning_label")
- with Horizontal(id="dialog_buttons"):
- yield Button("Cancel", variant="primary", id="btn_cancel")
- yield Button("Overwrite", variant="error", id="btn_proceed")
- def on_button_pressed(self, event: Button.Pressed) -> None:
- if event.button.id == "btn_proceed":
- self.dismiss(True)
- else:
- self.dismiss(False)
|