Overrides als Satelliten-Fenster vom Oberleiste-Gear öffnen
OVERRIDES war als gedocktes Panel zu schmal. Jetzt: kein Panel mehr, sondern ein echtes Rhino-Fenster (Eto.Form + WebView, frei verschieb- und resizable), das vom Oberleiste-Gear-Button geoeffnet wird. panel_base.open_satellite_window: - Akzeptiert jetzt optional einen `bridge`-Parameter. Wenn gegeben, wird die Custom-Bridge (z.B. OverridesBridge) statt der einfachen inline SAVE/CANCEL-Bridge benutzt. So koennen vollwertige Panels (mit bidirektionalem Mess-Verkehr) als Satellite-Fenster laufen. overrides_panel.py: - register_and_open entfaellt — Overrides wird nicht mehr als Panel registriert. - Neue Funktion open_as_window(): erstellt OverridesBridge, registriert sie in sticky["overrides_bridge"] und oeffnet als Satellite-Window. Listener werden lazy beim ersten Aufruf installiert (_ensure_listeners_once). oberleiste.py: - OPEN_OVERRIDES_PANEL ruft jetzt overrides_panel.open_as_window() statt RhinoUI.Panels.OpenPanel(). OberleisteApp.jsx: - Settings-Gear (ToolButton mit icon="settings") nach dem Preset- Dropdown im Overrides-Bereich. Click ruft openOverridesPanel() → oeffnet das Satelliten-Fenster. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -211,16 +211,37 @@ class OverridesBridge(panel_base.BaseBridge):
|
||||
self._send_state()
|
||||
|
||||
|
||||
def _bridge_factory():
|
||||
def _ensure_listeners_once():
|
||||
"""Overrides-Listener nur EINMAL global installieren (statt bei jedem
|
||||
open_as_window)."""
|
||||
if sc.sticky.get("overrides_listeners_installed"):
|
||||
return
|
||||
try:
|
||||
overrides.install_listeners()
|
||||
sc.sticky["overrides_listeners_installed"] = True
|
||||
except Exception as ex:
|
||||
print("[OVERRIDES] install_listeners:", ex)
|
||||
|
||||
|
||||
def open_as_window():
|
||||
"""Oeffnet OVERRIDES als echtes Rhino-Fenster (Eto.Form + WebView).
|
||||
Wird vom Oberleiste-Bridge bei OPEN_OVERRIDES_PANEL gerufen.
|
||||
|
||||
Pro Fenster eine eigene OverridesBridge-Instanz. Die letzte Instanz
|
||||
landet in sticky["overrides_bridge"] — andere Panels (Oberleiste) die
|
||||
Cross-Updates an Overrides senden, treffen das aktive Fenster."""
|
||||
_ensure_listeners_once()
|
||||
b = OverridesBridge()
|
||||
try: overrides.install_listeners()
|
||||
except Exception as ex: print("[OVERRIDES] install_listeners:", ex)
|
||||
# Bridge im sticky ablegen, damit andere Panels (z.B. Oberleiste) sie
|
||||
# bei Cross-Panel-Updates erreichen koennen.
|
||||
sc.sticky["overrides_bridge"] = b
|
||||
return b
|
||||
panel_base.open_satellite_window(
|
||||
"overrides",
|
||||
title="OVERRIDES",
|
||||
size=(760, 580),
|
||||
bridge=b)
|
||||
|
||||
|
||||
panel_base.register_and_open("overrides", "OVERRIDES", PANEL_GUID_STR, _bridge_factory,
|
||||
icon_spec=("tune", "#b5621e"),
|
||||
min_size=(720, 560))
|
||||
# OVERRIDES laeuft jetzt als Satelliten-Fenster (geoeffnet vom Oberleiste-
|
||||
# Gear-Button), nicht mehr als gedocktes Panel. Listener werden lazy beim
|
||||
# ersten open_as_window installiert. Falls jemand das alte Panel via
|
||||
# Workspace-Layout noch geoeffnet hat, wird es nicht mehr registriert →
|
||||
# Rhino zeigt es leer / nicht mehr an.
|
||||
|
||||
Reference in New Issue
Block a user