Files
alro65 42b2eec2e1 feat: AR Display Manager — multi-monitor floating app switcher
Adds the AR Display Manager daemon (Task #9):

- display_manager/ package with 8 modules:
  - app_registry.py   : static metadata for the 4 bridge apps
  - config.py         : JSON-persisted config + per-screen layout store
  - win32_utils.py    : ctypes wrappers (EnumWindows, SetWindowPos, ShowWindow)
  - process_manager.py: launch + track app processes, HWND lookup
  - floating_button.py: always-on-top 52×52 px AR button per monitor
                        with draggable placement + custom-painted popup
  - display_manager.py: orchestrator (QScreens → buttons → app placement
                        + system tray with Settings/Launch/Quit)
  - settings_dialog.py: modal dialog for exe paths, button position,
                        and Windows autostart toggle
  - autostart.py      : HKCU Run registry read/write helpers
- display_manager_main.py at repo root: launcher script
- Studio Overview tab: "Lanzar Display Manager" button
- pyproject.toml: display-manager optional dependency group (PySide6)

Layout persistence: ~/.ar-autopilot/display_manager/layout.json
Config:            ~/.ar-autopilot/display_manager/config.json
Supports up to 4 monitors (2 HDMI native + 2 USB DisplayLink).
Double-click tray icon to toggle button visibility.

AR_electronics — AR-Autopilot Project
2026-05-24 21:48:27 -04:00

46 lines
1.1 KiB
Python

"""Static metadata for the four AR Bridge applications."""
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class AppMeta:
id: str
name: str
icon: str # emoji used in the button popup
color: str # hex accent colour for the card
description: str
# Ordered list — shown in this order in the popup
APPS: list[AppMeta] = [
AppMeta(
id="autopilot",
name="AR-Autopilot",
icon="⛵",
color="#2563EB",
description="Autopilot control display",
),
AppMeta(
id="ecdis",
name="AR-ECDIS",
icon="🗺",
color="#22C55E",
description="Electronic chart display",
),
AppMeta(
id="compass",
name="Compass",
icon="🧭",
color="#F59E0B",
description="Ship motion & compass",
),
AppMeta(
id="gps",
name="GPS Navigator",
icon="📍",
color="#8B5CF6",
description="GPS navigation display",
),
]
APP_BY_ID: dict[str, AppMeta] = {a.id: a for a in APPS}