diff --git a/rhino/rhinopanel.py b/rhino/rhinopanel.py index e809971..9c58854 100644 --- a/rhino/rhinopanel.py +++ b/rhino/rhinopanel.py @@ -749,12 +749,62 @@ class EbenenBridge(panel_base.BaseBridge): print("[PROJECT-SETTINGS] {} Waende regenert".format(len(wall_ids))) except Exception as 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", params=params, title="Projekt-Einstellungen", size=(440, 540), - on_save=on_save) + bridge=b) def _pick_texture_file(self, payload): """Oeffnet macOS-File-Picker (via Eto.Forms.OpenFileDialog) und