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:
+52
-2
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user