Fix Texture-Picker: Custom-Bridge fuer Project-Settings Satellite

open_satellite_window ohne bridge=-Param verwendet eine Inline-Bridge die
nur READY/SAVE/CANCEL kennt — PICK_TEXTURE_FILE-Messages wurden stumm
verworfen.

Fix: _ProjectSettingsBridge als BaseBridge-Subclass mit eigener
PICK_TEXTURE_FILE-Handler-Logik. Sendet TEXTURE_PICKED direkt zurueck an
die selbe WebView.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-24 18:14:13 +02:00
parent c63bdd5bc1
commit ad56d9e930
+52 -2
View File
@@ -749,12 +749,62 @@ class EbenenBridge(panel_base.BaseBridge):
print("[PROJECT-SETTINGS] {} Waende regenert".format(len(wall_ids))) print("[PROJECT-SETTINGS] {} Waende regenert".format(len(wall_ids)))
except Exception as ex: except Exception as ex:
print("[PROJECT-SETTINGS] wall regen:", ex) print("[PROJECT-SETTINGS] wall regen:", ex)
panel_base.open_satellite_window( # Custom-Bridge fuer Project-Settings: handelt SAVE/CANCEL +
# PICK_TEXTURE_FILE direkt in dieser Satellite-WebView. Inline-Bridge
# konnte nur READY/SAVE/CANCEL → Texture-Picker-Messages gingen
# verloren.
bridge_holder = {"form": None}
class _ProjectSettingsBridge(panel_base.BaseBridge):
def __init__(self):
panel_base.BaseBridge.__init__(self, "project_settings")
def handle(self, data):
if not isinstance(data, dict): return
t = data.get("type", "")
p = data.get("payload") or {}
if t == "READY":
pass
elif t == "SAVE":
try: on_save(p)
except Exception as ex:
print("[PROJECT-SETTINGS] on_save:", ex)
try:
f = bridge_holder.get("form")
if f is not None: f.Close()
except Exception: pass
elif t == "CANCEL":
try:
f = bridge_holder.get("form")
if f is not None: f.Close()
except Exception: pass
elif t == "PICK_TEXTURE_FILE":
self._pick_texture(p)
def _pick_texture(self, payload):
slot = payload.get("slot") or "diffuse"
try:
import Eto.Forms as forms
dlg = forms.OpenFileDialog()
dlg.Title = "Textur waehlen ({})".format(slot)
dlg.MultiSelect = False
dlg.Filters.Add(forms.FileFilter("Bilder",
".jpg", ".jpeg", ".png", ".tif", ".tiff", ".bmp", ".tga"))
dlg.Filters.Add(forms.FileFilter("Alle", ".*"))
parent = bridge_holder.get("form")
res = dlg.ShowDialog(parent) if parent else dlg.ShowDialog(None)
if str(res) != "Ok":
self.send("TEXTURE_PICKED", {"slot": slot, "path": None})
return
self.send("TEXTURE_PICKED",
{"slot": slot, "path": dlg.FileName or ""})
except Exception as ex:
print("[PROJECT-SETTINGS] pick_texture:", ex)
self.send("TEXTURE_PICKED", {"slot": slot, "path": None})
b = _ProjectSettingsBridge()
bridge_holder["form"] = panel_base.open_satellite_window(
"project_settings", "project_settings",
params=params, params=params,
title="Projekt-Einstellungen", title="Projekt-Einstellungen",
size=(440, 540), size=(440, 540),
on_save=on_save) bridge=b)
def _pick_texture_file(self, payload): def _pick_texture_file(self, payload):
"""Oeffnet macOS-File-Picker (via Eto.Forms.OpenFileDialog) und """Oeffnet macOS-File-Picker (via Eto.Forms.OpenFileDialog) und