Satelliten-Dialoge: embedded-Mode + GeschossDialog auch als echtes Fenster
Zwei Dinge: 1. embedded-Mode in den Dialog-Komponenten — wenn TRUE, kein Backdrop + keine MaxWidth-Constraint, das Dialog fuellt das ganze WebView statt wie ein kleines zentriertes Fenster IN dem WebView gerendert zu werden (= "Fenster im Fenster"-Effekt). Betroffen: - GeschossSettingsDialog - EbenenSettingsDialog - GeschossDialog Satelliten-Apps (GeschossSettingsApp, EbenenSettingsApp, GeschossDialogApp) passen jetzt `embedded` durch. 2. GeschossDialog (= der grosse Mehrfach-Editor hinter dem Pencil-Button) laeuft jetzt auch als Satelliten-Fenster — selbe Architektur wie die Settings-Dialoge. Backend hat neuen Handler _open_geschoss_dialog und neuen Message OPEN_GESCHOSS_DIALOG. Auf Save: ganze z-Liste replace + _apply(save_z=True). GeschossManager braucht den inline-Dialog-State nicht mehr; Pencil-Button ruft openGeschossDialog(zeichnungsebenen). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -221,6 +221,8 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
elif t == "OPEN_EBENEN_SETTINGS":
|
||||
self._open_ebenen_settings(p.get("ebene") or {},
|
||||
p.get("hatchPatterns") or [])
|
||||
elif t == "OPEN_GESCHOSS_DIALOG":
|
||||
self._open_geschoss_dialog(p.get("zeichnungsebenen") or [])
|
||||
|
||||
# ---- Helpers ----
|
||||
|
||||
@@ -299,6 +301,27 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
size=(420, 600),
|
||||
on_save=on_save)
|
||||
|
||||
def _open_geschoss_dialog(self, zeichnungsebenen):
|
||||
"""Oeffnet den vollen GeschossDialog (Mehrfach-Editor) als
|
||||
Satelliten-Fenster. Save schreibt die ganze z-Liste neu."""
|
||||
if not isinstance(zeichnungsebenen, list):
|
||||
print("[EBENEN] open_geschoss_dialog: keine Liste"); return
|
||||
def on_save(payload):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
if doc is None: return
|
||||
new_z = payload.get("zeichnungsebenen") or []
|
||||
if not new_z: return
|
||||
e_raw = doc.Strings.GetValue("dossier_ebenen")
|
||||
try: e_list = json.loads(e_raw) if e_raw else []
|
||||
except Exception: e_list = []
|
||||
self._apply(new_z, e_list, save_z=True, save_e=False)
|
||||
panel_base.open_satellite_window(
|
||||
"geschoss_dialog",
|
||||
params={"zeichnungsebenen": zeichnungsebenen},
|
||||
title="Zeichnungsebenen bearbeiten",
|
||||
size=(560, 620),
|
||||
on_save=on_save)
|
||||
|
||||
def _apply(self, zeichnungsebenen, ebenen, save_z=True, save_e=True):
|
||||
print("[EBENEN] _apply START z={} e={} (save_z={} save_e={})".format(
|
||||
len(zeichnungsebenen) if zeichnungsebenen else 0,
|
||||
|
||||
Reference in New Issue
Block a user