Merge systems UI into one

We had two very similar systems panels that were part of the old UI.
This commit is contained in:
Andrej730
2023-10-20 11:59:31 +05:00
parent f3b541f00a
commit b318509cba
4 changed files with 30 additions and 95 deletions
@@ -50,13 +50,11 @@ classes = (
prop.BIMSystemProperties,
prop.BIMZoneProperties,
ui.BIM_PT_systems,
ui.BIM_PT_object_systems,
ui.BIM_PT_zones,
ui.BIM_PT_active_object_zones,
ui.BIM_PT_ports,
ui.BIM_PT_port,
ui.BIM_UL_systems,
ui.BIM_UL_object_systems,
ui.BIM_UL_zones,
)
@@ -70,7 +70,6 @@ class ObjectSystemData:
def load(cls):
cls.data = {
"systems": cls.systems(),
"total_systems": cls.total_systems(),
# AFTER SYSTEMS
"connected_elements": cls.connected_elements(),
}
@@ -86,10 +85,6 @@ class ObjectSystemData:
results.append({"id": system.id(), "name": system.Name or "Unnamed", "ifc_class": system.is_a()})
return results
@classmethod
def total_systems(cls):
return len(tool.System.get_systems())
@classmethod
def connected_elements(cls):
if not cls.element:
@@ -64,7 +64,7 @@ class BIMSystemProperties(PropertyGroup):
is_adding: BoolProperty(name="Is Adding", default=False)
systems: CollectionProperty(name="Systems", type=System)
active_system_index: IntProperty(name="Active System Index")
active_system_id: IntProperty(name="Active System Id")
active_system_id: IntProperty(name="Active System Id", description="Id of the currrently edited system")
system_class: EnumProperty(items=get_system_class, name="Class")
should_draw_decorations: BoolProperty(
name="Should Draw Decorations", description="Toggle system decorations", update=toggle_decorations
@@ -30,6 +30,15 @@ FLOW_DIRECTION_TO_ICON = {
"NOTDEFINED": "CHECKBOX_DEHLT",
}
SYSTEM_ICONS = {
"IfcSystem": "EXTERNAL_DRIVE",
"IfcDistributionSystem": "NETWORK_DRIVE",
"IfcDistributionCircuit": "DRIVER",
"IfcBuildingSystem": "MOD_BUILD",
"IfcBuiltSystem": "MOD_BUILD",
"IfcZone": "CUBE",
}
class BIM_PT_systems(Panel):
bl_label = "Systems"
@@ -47,10 +56,27 @@ class BIM_PT_systems(Panel):
def draw(self, context):
if not SystemData.is_loaded:
SystemData.load()
if not ObjectSystemData.is_loaded:
ObjectSystemData.load()
self.props = context.scene.BIMSystemProperties
row = self.layout.row(align=True)
row.label(text="{} Systems Found".format(SystemData.data["total_systems"]), icon="OUTLINER")
row.prop(self.props, "should_draw_decorations")
for system in ObjectSystemData.data["systems"]:
row = self.layout.row(align=True)
row.label(text=system["name"], icon=SYSTEM_ICONS[system["ifc_class"]])
op = row.operator("bim.select_system_products", text="", icon="RESTRICT_SELECT_OFF")
op.system = system["id"]
op = row.operator("bim.unassign_system", text="", icon="X")
op.system = system["id"]
if not ObjectSystemData.data["systems"]:
self.layout.label(text="No System associated with Active Object")
row = self.layout.row(align=True)
row.label(text="{} Systems Found in Project".format(SystemData.data["total_systems"]), icon="OUTLINER")
if self.props.is_editing:
row.operator("bim.disable_system_editing_ui", text="", icon="CANCEL")
@@ -81,67 +107,6 @@ class BIM_PT_systems(Panel):
row.prop(attribute, "is_null", icon="RADIOBUT_OFF" if attribute.is_null else "RADIOBUT_ON", text="")
class BIM_PT_object_systems(Panel):
bl_label = "Systems"
bl_idname = "BIM_PT_object_systems"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "object"
bl_order = 1
bl_parent_id = "BIM_PT_tab_services_object"
@classmethod
def poll(cls, context):
if not context.active_object:
return False
return tool.Ifc.get() and context.active_object.BIMObjectProperties.ifc_definition_id
def draw(self, context):
if not ObjectSystemData.is_loaded:
ObjectSystemData.load()
self.props = context.scene.BIMSystemProperties
row = self.layout.row(align=True)
row.prop(self.props, "should_draw_decorations")
if self.props.is_editing:
row = self.layout.row()
row.alignment = "RIGHT"
row.operator("bim.disable_system_editing_ui", text="", icon="CANCEL")
self.layout.template_list(
"BIM_UL_object_systems",
"",
self.props,
"systems",
self.props,
"active_system_index",
)
else:
row = self.layout.row(align=True)
row.label(text=f"{ObjectSystemData.data['total_systems']} Systems in IFC Project", icon="OUTLINER")
row.operator("bim.load_systems", text="", icon="GREASEPENCIL")
system_icons = {
"IfcSystem": "EXTERNAL_DRIVE",
"IfcDistributionSystem": "NETWORK_DRIVE",
"IfcDistributionCircuit": "DRIVER",
"IfcBuildingSystem": "MOD_BUILD",
"IfcBuiltSystem": "MOD_BUILD",
"IfcZone": "CUBE",
}
for system in ObjectSystemData.data["systems"]:
row = self.layout.row(align=True)
row.label(text=system["name"], icon=system_icons[system["ifc_class"]])
op = row.operator("bim.select_system_products", text="", icon="RESTRICT_SELECT_OFF")
op.system = system["id"]
op = row.operator("bim.unassign_system", text="", icon="X")
op.system = system["id"]
if not ObjectSystemData.data["systems"]:
self.layout.label(text="No System associated with Active Object")
class BIM_PT_ports(Panel):
bl_label = "Ports"
bl_idname = "BIM_PT_ports"
@@ -368,18 +333,11 @@ class BIM_PT_active_object_zones(Panel):
class BIM_UL_systems(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
system_icons = {
"IfcSystem": "EXTERNAL_DRIVE",
"IfcDistributionSystem": "NETWORK_DRIVE",
"IfcDistributionCircuit": "DRIVER",
"IfcBuildingSystem": "MOD_BUILD",
"IfcBuiltSystem": "MOD_BUILD",
"IfcZone": "CUBE",
}
if item:
row = layout.row(align=True)
row.label(text=item.name, icon=system_icons[item.ifc_class])
row.label(text=item.name, icon=SYSTEM_ICONS[item.ifc_class])
system_id = item.ifc_definition_id
row.operator("bim.assign_system", text="", icon="ADD").system = item.ifc_definition_id
if context.scene.BIMSystemProperties.active_system_id == system_id:
op = row.operator("bim.select_system_products", text="", icon="RESTRICT_SELECT_OFF")
op.system = system_id
@@ -399,22 +357,6 @@ class BIM_UL_systems(UIList):
op.system = system_id
class BIM_UL_object_systems(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
system_icons = {
"IfcSystem": "EXTERNAL_DRIVE",
"IfcDistributionSystem": "NETWORK_DRIVE",
"IfcDistributionCircuit": "DRIVER",
"IfcBuildingSystem": "MOD_BUILD",
"IfcBuiltSystem": "MOD_BUILD",
"IfcZone": "CUBE",
}
if item:
row = layout.row(align=True)
row.label(text=item.name, icon=system_icons[item.ifc_class])
row.operator("bim.assign_system", text="", icon="ADD").system = item.ifc_definition_id
class BIM_UL_zones(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
if item: