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
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
"""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}
|
||||
Reference in New Issue
Block a user