extends VBoxContainer class_name EditorPanel ## Basis-Klasse aller Registry-Panels (Karte t_eaccbfed). Jedes Modul baut ## seinen eigenen Inhalt in setup(main) und wird von main.gd NUR über die ## Registry (core/ui/panels/registry.gd) in den Baum gehängt — main.gd kennt ## keine Panel-Interna mehr. ## ## Datenfluss (bewusst 1:1 wie vorher): Module greifen über `main` auf das ## Dokument/History/Werkzeuge zu und rufen die Koordinator-Helfer über ## main.call(...) — der Aufruf-Vertrag zu den Tools (interaction.gd etc.) ## bleibt unverändert, die Methoden wohnen jetzt nur in den Modulen. var main # core/ui/main.gd (script-erweitert → untypisiert) func setup(p_main) -> void: main = p_main # U7-Abstands-Raster (4/8 px, über ui_scale skaliert): Panel-Grundabstand. add_theme_constant_override("separation", UIScale.px(8)) ## Titel der Sektions-Überschrift (Registry-Titel als Default). func panel_title() -> String: return "Panel" ## Lange Tabs (Map, Bauen): den ganzen Inhalt in einen senkrechten Scroll-Bereich ## legen, damit die rechte Spalte nicht mit dem Inhalt wächst. Rückgabe = die ## innere Box (dort hängen spätere Abschnitte an). func wrap_in_scroll() -> VBoxContainer: var scroll := ScrollContainer.new() scroll.name = "%sScroll" % name scroll.size_flags_vertical = Control.SIZE_EXPAND_FILL scroll.size_flags_horizontal = Control.SIZE_EXPAND_FILL scroll.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED var inner := VBoxContainer.new() inner.name = "%sInhalt" % name inner.size_flags_horizontal = Control.SIZE_EXPAND_FILL inner.add_theme_constant_override("separation", UIScale.px(8)) for child in get_children(): remove_child(child) inner.add_child(child) scroll.add_child(inner) add_child(scroll) return inner # --- Farb-Zugriff NUR über das Theme (Karte t_2336c58e/U7) ------------------ ## Farben kommen ausschließlich aus theme/editor_theme.tres (Abschnitt ## Editor/colors/…) — keine Farbwerte mehr im Panel-Code. Der Wert liest ## sich vom angeschlossenen Theme-Baum (main hängt theme auf das Fenster). func theme_color(cname: String) -> Color: # Befund 25.10. („Texte kaum lesbar“): Panels werden gebaut, BEVOR sie im # Baum hängen — get_theme_color liefert dort Schwarz statt der Theme-Farbe. # Darum direkt aus dem Theme des Hauptfensters lesen. if main != null and main.theme != null and main.theme.has_color(cname, "Editor"): return main.theme.get_color(cname, "Editor") return get_theme_color(cname, "Editor") # --- Gemeinsame Bau-Helfer (aus main.gd übernommen, Logik identisch) -------- func _header_label(text: String) -> Label: var label := Label.new() label.text = text label.add_theme_font_size_override("font_size", UIScale.heading_font_size()) label.add_theme_color_override("font_color", theme_color("accent")) return label func _field_label(text: String) -> Label: var label := Label.new() label.text = text label.add_theme_color_override("font_color", theme_color("field")) return label func _muted_label(text: String) -> Label: var label := Label.new() label.text = text label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART label.add_theme_color_override("font_color", theme_color("muted")) return label func _separator() -> HSeparator: return HSeparator.new()