Source code for hamil_clever_sim.main_display
from textual import on
from textual.app import App, ComposeResult
from textual.containers import Horizontal, Vertical
from textual.widgets import ContentSwitcher, Footer, Header, Tab, Tabs
from hamil_clever_sim.hamil_runner import SimulationRunner
from hamil_clever_sim.inputs import InputForm
from hamil_clever_sim.simulation_result import SimulationDisplay
[docs]
class MainView(App):
CSS_PATH = "./main.tcss"
BINDINGS = [
(
"ctrl+q",
"action_quit",
"Quit simulator",
)
]
def compose(self) -> ComposeResult:
yield Header()
with Horizontal(id="app-main"):
with Vertical(id="app-main-input"):
yield InputForm()
with Vertical(id="app-main-display"):
yield Tabs(id="app-main-display-tabs")
yield ContentSwitcher(id="app-main-display-switcher")
yield Footer()
@on(InputForm.FormSubmitted)
async def handle_simulation_run(self, event: InputForm.FormSubmitted) -> None:
switcher = self.query_one("#app-main-display-switcher", ContentSwitcher)
tabber = self.query_one("#app-main-display-tabs", Tabs)
id = f"simulation-{len(switcher.children)}"
tab = Tab(id, id=id)
runner = SimulationRunner(event.pauli, event.time, event.n, event.kind)
displayer = SimulationDisplay(id=id)
displayer.loading = True
await switcher.mount(displayer)
tabber.add_tab(tab)
tabber.active = id
tabber.show(id)
displayer.runner = runner
@on(Tabs.TabActivated)
def handle_tab_active(self, event: Tabs.TabActivated) -> None:
switcher = self.query_one("#app-main-display-switcher", ContentSwitcher)
switcher.current = event.tab.id