From 8ed9c3240469ba1db965f3ecc06051038e5c54d5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Mar 2025 17:10:58 +0500 Subject: [PATCH] Rename systems and zones from UIList example - https://imgur.com/a/8yTzmy3 --- .../bonsai/bim/module/system/operator.py | 2 +- src/bonsai/bonsai/bim/module/system/prop.py | 19 ++++++++++++++++++- src/bonsai/bonsai/bim/module/system/ui.py | 4 ++-- src/bonsai/bonsai/tool/system.py | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index 8a1535193f..df098fa04b 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -374,7 +374,7 @@ class LoadZones(bpy.types.Operator): for zone in tool.Ifc.get().by_type("IfcZone"): new = props.zones.add() new.ifc_definition_id = zone.id() - new.name = zone.Name or "Unnamed" + new["name"] = zone.Name or "Unnamed" props.is_loaded = True props.is_editing = 0 return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/system/prop.py b/src/bonsai/bonsai/bim/module/system/prop.py index 0325a74997..a984b62bb2 100644 --- a/src/bonsai/bonsai/bim/module/system/prop.py +++ b/src/bonsai/bonsai/bim/module/system/prop.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . import bpy +import bonsai.bim.handler import bonsai.tool as tool from bonsai.bim.module.system.data import SystemData import bonsai.bim.module.system.decorator as decorator @@ -41,8 +42,16 @@ def get_system_class(self: "BIMSystemProperties", context: bpy.types.Context) -> return SystemData.data["system_class"] +def update_system_name(self: "System", context: bpy.types.Context) -> None: + system = tool.Ifc.get().by_id(self.ifc_definition_id) + if system.Name == self.name: + return + system.Name = self.name + bonsai.bim.handler.refresh_ui_data() + + class System(PropertyGroup): - name: StringProperty(name="Name") + name: StringProperty(name="Name", update=update_system_name) ifc_class: StringProperty(name="IFC Class") ifc_definition_id: IntProperty(name="IFC Definition ID") @@ -51,6 +60,14 @@ class System(PropertyGroup): ifc_definition_id: int +def update_zone_name(self: "Zone", context: bpy.types.Context) -> None: + zone = tool.Ifc.get().by_id(self.ifc_definition_id) + if zone.Name == self.name: + return + zone.Name = self.name + bonsai.bim.handler.refresh_ui_data() + + class Zone(PropertyGroup): name: StringProperty(name="Name") ifc_definition_id: IntProperty(name="IFC Definition ID") diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index ff894c97e7..0cae9e9a54 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -440,7 +440,7 @@ class BIM_UL_systems(UIList): system_id = item.ifc_definition_id if data.edited_system_id == system_id: row.label(text="", icon="GREASEPENCIL") - row.label(text=item.name, icon=SYSTEM_ICONS[item.ifc_class]) + row.prop(item, "name", text="", icon=SYSTEM_ICONS[item.ifc_class], emboss=False) class BIM_UL_zones(UIList): @@ -456,4 +456,4 @@ class BIM_UL_zones(UIList): ): if item: row = layout.row(align=True) - row.label(text=item.name) + row.prop(item, "name", text="", emboss=False) diff --git a/src/bonsai/bonsai/tool/system.py b/src/bonsai/bonsai/tool/system.py index e167ffca3a..2a891b8136 100644 --- a/src/bonsai/bonsai/tool/system.py +++ b/src/bonsai/bonsai/tool/system.py @@ -164,7 +164,7 @@ class System(bonsai.core.tool.System): continue new = props.systems.add() new.ifc_definition_id = system.id() - new.name = system.Name or "Unnamed" + new["name"] = system.Name or "Unnamed" new.ifc_class = system.is_a() @classmethod