diff --git a/agentm/assets/game_titles.bak/kof98umh.txt b/agentm/assets/game_titles.bak/kof98umh.txt deleted file mode 100644 index f6b8d66..0000000 --- a/agentm/assets/game_titles.bak/kof98umh.txt +++ /dev/null @@ -1,3 +0,0 @@ - +-+-+-+-+ +-+-+ +-+-+-+-+-+-+-+-+ - |K|i|n|g| |o|f| |F|i|g|h|t|e|r|s| - +-+-+-+-+ +-+-+ +-+-+-+-+-+-+-+-+ \ No newline at end of file diff --git a/agentm/assets/game_titles.bak/mvsc.txt b/agentm/assets/game_titles.bak/mvsc.txt deleted file mode 100644 index 2dc7fbb..0000000 --- a/agentm/assets/game_titles.bak/mvsc.txt +++ /dev/null @@ -1,3 +0,0 @@ - +-+-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+ - |M|a|r|v|e|l| |v|s| |C|a|p|c|o|m| - +-+-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+ \ No newline at end of file diff --git a/agentm/assets/game_titles.bak/samsh5sp.txt b/agentm/assets/game_titles.bak/samsh5sp.txt deleted file mode 100644 index 7e6b642..0000000 --- a/agentm/assets/game_titles.bak/samsh5sp.txt +++ /dev/null @@ -1,3 +0,0 @@ - +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ - |S|a|m|u|r|a|i| |S|h|o|w|d|o|w|n| - +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ \ No newline at end of file diff --git a/agentm/assets/game_titles.bak/sfiii3n.txt b/agentm/assets/game_titles.bak/sfiii3n.txt deleted file mode 100644 index c1e45dd..0000000 --- a/agentm/assets/game_titles.bak/sfiii3n.txt +++ /dev/null @@ -1,3 +0,0 @@ - +-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+ - |S|t|r|e|e|t| |F|i|g|h|t|e|r| |I|I|I| - +-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+ \ No newline at end of file diff --git a/agentm/assets/game_titles.bak/soulclbr.txt b/agentm/assets/game_titles.bak/soulclbr.txt deleted file mode 100644 index 87d6212..0000000 --- a/agentm/assets/game_titles.bak/soulclbr.txt +++ /dev/null @@ -1,3 +0,0 @@ - +-+-+-+-+ +-+-+-+-+-+-+-+ - |S|o|u|l| |C|a|l|i|b|u|r| - +-+-+-+-+ +-+-+-+-+-+-+-+ \ No newline at end of file diff --git a/agentm/assets/game_titles.bak/umk3.txt b/agentm/assets/game_titles.bak/umk3.txt deleted file mode 100644 index 4c044c1..0000000 --- a/agentm/assets/game_titles.bak/umk3.txt +++ /dev/null @@ -1,3 +0,0 @@ - +-+-+-+-+-+-+ +-+-+-+-+-+-+ +-+ - |M|o|r|t|a|l| |K|o|m|b|a|t| |3| - +-+-+-+-+-+-+ +-+-+-+-+-+-+ +-+ \ No newline at end of file diff --git a/agentm/assets/game_titles.bak/xmvsf.txt b/agentm/assets/game_titles.bak/xmvsf.txt deleted file mode 100644 index 4c044c1..0000000 --- a/agentm/assets/game_titles.bak/xmvsf.txt +++ /dev/null @@ -1,3 +0,0 @@ - +-+-+-+-+-+-+ +-+-+-+-+-+-+ +-+ - |M|o|r|t|a|l| |K|o|m|b|a|t| |3| - +-+-+-+-+-+-+ +-+-+-+-+-+-+ +-+ \ No newline at end of file diff --git a/agentm/assets/game_titles.bak/doapp.txt b/agentm/assets/game_titles/doapp.txt similarity index 66% rename from agentm/assets/game_titles.bak/doapp.txt rename to agentm/assets/game_titles/doapp.txt index 7f0d09e..70d0b8e 100644 --- a/agentm/assets/game_titles.bak/doapp.txt +++ b/agentm/assets/game_titles/doapp.txt @@ -1,3 +1,4 @@ +-+-+-+-+ +-+-+ +-+-+-+-+-+ +-+-+ |D|E|A|D| |O|R| |A|L|I|V|E| |+|+| - +-+-+-+-+ +-+-+ +-+-+-+-+-+ +-+-+ \ No newline at end of file + +-+-+-+-+ +-+-+ +-+-+-+-+-+ +-+-+ + \ No newline at end of file diff --git a/agentm/assets/game_titles/kof98umh.txt b/agentm/assets/game_titles/kof98umh.txt new file mode 100644 index 0000000..ec337ed --- /dev/null +++ b/agentm/assets/game_titles/kof98umh.txt @@ -0,0 +1,3 @@ + +-+-+-+-+ +-+-+ +-+-+-+-+-+-+-+-+ + |K|I|N|G| |O|F| |F|I|G|H|T|E|R|S| + +-+-+-+-+ +-+-+ +-+-+-+-+-+-+-+-+ diff --git a/agentm/assets/game_titles/mvsc.txt b/agentm/assets/game_titles/mvsc.txt new file mode 100644 index 0000000..c0e63c6 --- /dev/null +++ b/agentm/assets/game_titles/mvsc.txt @@ -0,0 +1,4 @@ + +-+-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+ + |M|A|R|V|E|L| |V|S| |C|A|P|C|O|M| + +-+-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+ + \ No newline at end of file diff --git a/agentm/assets/game_titles/samsh5sp.txt b/agentm/assets/game_titles/samsh5sp.txt new file mode 100644 index 0000000..7f59872 --- /dev/null +++ b/agentm/assets/game_titles/samsh5sp.txt @@ -0,0 +1,3 @@ + +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+ + |S|A|M|U|R|A|I| |S|H|O|D|O|W|N| |V| + +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+ diff --git a/agentm/assets/game_titles/sfiii3n.txt b/agentm/assets/game_titles/sfiii3n.txt new file mode 100644 index 0000000..0117b50 --- /dev/null +++ b/agentm/assets/game_titles/sfiii3n.txt @@ -0,0 +1,4 @@ + +-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+ + |S|T|R|E|E|T| |F|I|G|H|T|E|R| |I|I|I| + +-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+ + \ No newline at end of file diff --git a/agentm/assets/game_titles/soulclbr.txt b/agentm/assets/game_titles/soulclbr.txt new file mode 100644 index 0000000..aaa3d72 --- /dev/null +++ b/agentm/assets/game_titles/soulclbr.txt @@ -0,0 +1,4 @@ + +-+-+-+-+ +-+-+-+-+-+-+-+ + |S|O|U|L| |C|A|L|I|B|U|R| + +-+-+-+-+ +-+-+-+-+-+-+-+ + \ No newline at end of file diff --git a/agentm/assets/game_titles.bak/tektagt.txt b/agentm/assets/game_titles/tektagt.txt similarity index 66% rename from agentm/assets/game_titles.bak/tektagt.txt rename to agentm/assets/game_titles/tektagt.txt index fae2775..a382a6c 100644 --- a/agentm/assets/game_titles.bak/tektagt.txt +++ b/agentm/assets/game_titles/tektagt.txt @@ -1,3 +1,3 @@ +-+-+-+-+-+-+ +-+-+-+ - |T|e|k|k|e|n| |T|a|g| + |T|E|K|K|E|N| |T|A|G| +-+-+-+-+-+-+ +-+-+-+ \ No newline at end of file diff --git a/agentm/assets/game_titles/umk3.txt b/agentm/assets/game_titles/umk3.txt new file mode 100644 index 0000000..612246f --- /dev/null +++ b/agentm/assets/game_titles/umk3.txt @@ -0,0 +1,4 @@ + +-+-+-+-+-+-+ +-+-+-+-+-+-+ +-+ + |M|O|R|T|A|L| |K|O|M|B|A|T| |3| + +-+-+-+-+-+-+ +-+-+-+-+-+-+ +-+ + \ No newline at end of file diff --git a/agentm/assets/game_titles/xmvsf.txt b/agentm/assets/game_titles/xmvsf.txt new file mode 100644 index 0000000..1d52796 --- /dev/null +++ b/agentm/assets/game_titles/xmvsf.txt @@ -0,0 +1,4 @@ + +-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+ + |X|-|M|E|N| |V|S| |S|T|R|E|E|T| |F|I|G|H|T|E|R| + +-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+ + diff --git a/agentm/components/footer.py b/agentm/components/footer.py new file mode 100644 index 0000000..797bf8f --- /dev/null +++ b/agentm/components/footer.py @@ -0,0 +1,42 @@ +# agentm/components/footer.py + +from textual.widgets import Footer +from textual.reactive import reactive +from textual.binding import Binding +from textual.app import RenderResult +from rich.text import Text + + +class AgentMFooter(Footer): + compact: reactive[bool] = reactive(False) + show_command_palette: reactive[bool] = reactive(True) + view_label: reactive[str] = reactive("Simple View") + + BINDINGS = [ + Binding("s", "toggle_simple_view", description="Toggle View"), + ] + + def __init__( + self, + *children, # ← Accept children to prevent positional arg errors + compact: bool = False, + show_command_palette: bool = True, + view_label: str = "Simple View", + id: str | None = None, + classes: str | None = None, + name: str | None = None, + disabled: bool = False, + ) -> None: + super().__init__( + *children, + id=id, + classes=classes, + name=name, + disabled=disabled + ) + self.compact = compact + self.show_command_palette = show_command_palette + self.view_label = view_label + + def render_right(self) -> RenderResult: + return Text(f"{self.view_label} • Agent M (dev)", style="dim italic") diff --git a/agentm/views/home.py b/agentm/views/home.py index c69d3f6..2d7db24 100644 --- a/agentm/views/home.py +++ b/agentm/views/home.py @@ -18,6 +18,7 @@ from rich_pixels._renderer import HalfcellRenderer from agentm.utils.logger import log_with_caller from agentm.logic.roms import get_verified_roms, GAME_FILES from agentm.theme.palette import get_theme +from agentm.components.footer import AgentMFooter palette = get_theme() @@ -46,19 +47,16 @@ class GameAccordion(Static): image_path = os.path.abspath(self.metadata.get("image_path", "")) self.image_renderable = self.load_image_scaled(image_path) - self.ascii_title = self.load_ascii_art() + + # Title + self.title_label = Static( + f"[b {palette.ACCENT}]{escape(self.title.upper())}[/]\n", + classes="game_title", + markup=True + ) super().__init__(id=f"accordion_{self.safe_id}", classes="game_card") - def load_ascii_art(self) -> Static: - game_id = self.metadata.get("game_id", "").lower() - ascii_path = os.path.join("agentm", "assets", "game_titles", f"{game_id}.txt") - try: - with open(ascii_path, "r", encoding="utf-8") as f: - return Static(f"[bold {palette.ACCENT}]{f.read()}[/]", markup=True) - except FileNotFoundError: - return Static(f"[bold {palette.ACCENT}]{self.title.upper()}[/]", markup=True) - def load_image_scaled(self, path: str): try: with Image.open(path) as img: @@ -84,8 +82,8 @@ class GameAccordion(Static): return f"[red]Failed to load image[/red]\n[dim]{e}]" def compose(self): + yield self.title_label yield Static(self.image_renderable) - yield self.ascii_title async def on_click(self): await self.display_info() @@ -156,6 +154,7 @@ class HomeView(Screen): self.logo, self.welcome_text, self.dynamic_container, + AgentMFooter(compact=True), id="home_screen_container", classes="centered_layout" )