ai-station/.venv/lib/python3.12/site-packages/textual/demo/demo_app.py

106 lines
2.9 KiB
Python

from __future__ import annotations
from textual.app import App
from textual.binding import Binding
from textual.demo.game import GameScreen
from textual.demo.home import HomeScreen
from textual.demo.projects import ProjectsScreen
from textual.demo.widgets import WidgetsScreen
class DemoApp(App):
"""The demo app defines the modes and sets a few bindings."""
CSS = """
.column {
align: center top;
&>*{ max-width: 100; }
}
Screen .-maximized {
margin: 1 2;
max-width: 100%;
&.column { margin: 1 2; padding: 1 2; }
&.column > * {
max-width: 100%;
}
}
"""
MODES = {
"game": GameScreen,
"home": HomeScreen,
"projects": ProjectsScreen,
"widgets": WidgetsScreen,
}
DEFAULT_MODE = "home"
BINDINGS = [
Binding(
"h",
"app.switch_mode('home')",
"Home",
tooltip="Show the home screen",
),
Binding(
"g",
"app.switch_mode('game')",
"Game",
tooltip="Unwind with a Textual game",
),
Binding(
"p",
"app.switch_mode('projects')",
"Projects",
tooltip="A selection of Textual projects",
),
Binding(
"w",
"app.switch_mode('widgets')",
"Widgets",
tooltip="Test the builtin widgets",
),
Binding(
"ctrl+s",
"app.screenshot",
"Screenshot",
tooltip="Save an SVG 'screenshot' of the current screen",
),
Binding(
"ctrl+a",
"app.maximize",
"Maximize",
tooltip="Maximize the focused widget (if possible)",
),
]
def action_maximize(self) -> None:
if self.screen.is_maximized:
return
if self.screen.focused is None:
self.notify(
"Nothing to be maximized (try pressing [b]tab[/b])",
title="Maximize",
severity="warning",
)
else:
if self.screen.maximize(self.screen.focused):
self.notify(
"You are now in the maximized view. Press [b]escape[/b] to return.",
title="Maximize",
)
else:
self.notify(
"This widget may not be maximized.",
title="Maximize",
severity="warning",
)
def check_action(self, action: str, parameters: tuple[object, ...]) -> bool | None:
"""Disable switching to a mode we are already on."""
if (
action == "switch_mode"
and parameters
and self.current_mode == parameters[0]
):
return None
return True