From 2e4b0e83a213dd5c30cd690864de2e766f405f6b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 7 Oct 2025 13:34:07 +1100 Subject: [PATCH] Add feature to have work schedule columns for total inputs, outputs, and elements (inputs + outputs) --- src/bonsai/bonsai/bim/module/sequence/data.py | 3 +++ src/bonsai/bonsai/bim/module/sequence/prop.py | 3 +++ src/bonsai/bonsai/bim/module/sequence/ui.py | 18 +++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/sequence/data.py b/src/bonsai/bonsai/bim/module/sequence/data.py index b011d48e15..94df71eacd 100644 --- a/src/bonsai/bonsai/bim/module/sequence/data.py +++ b/src/bonsai/bonsai/bim/module/sequence/data.py @@ -243,6 +243,9 @@ class SequenceData: data["NestingIndex"] = None for rel in task.Nests or []: data["NestingIndex"] = rel.RelatedObjects.index(task) + data["TotalInputs"] = len(tool.Sequence.get_task_inputs(task)) + data["TotalOutputs"] = len(tool.Sequence.get_task_outputs(task)) + data["TotalElements"] = data["TotalInputs"] + data["TotalOutputs"] cls.data["tasks"][task.id()] = data @classmethod diff --git a/src/bonsai/bonsai/bim/module/sequence/prop.py b/src/bonsai/bonsai/bim/module/sequence/prop.py index 1e5671e65c..0506f1bc6b 100644 --- a/src/bonsai/bonsai/bim/module/sequence/prop.py +++ b/src/bonsai/bonsai/bim/module/sequence/prop.py @@ -487,6 +487,9 @@ class BIMWorkScheduleProperties(PropertyGroup): other_columns: EnumProperty( items=[ ("Controls.Calendar", "Calendar", ""), + ("Controls.TotalElements", "Total Elements", "The total number of assigned elements to this task"), + ("Controls.TotalInputs", "Total Inputs", "The total number of input elements to this task"), + ("Controls.TotalOutputs", "Total Outputs", "The total number of input elements to this task"), ], name="Special Columns", ) diff --git a/src/bonsai/bonsai/bim/module/sequence/ui.py b/src/bonsai/bonsai/bim/module/sequence/ui.py index c16545171f..9178268c3a 100644 --- a/src/bonsai/bonsai/bim/module/sequence/ui.py +++ b/src/bonsai/bonsai/bim/module/sequence/ui.py @@ -899,7 +899,7 @@ class BIM_UL_tasks(UIList): split2 = split1.split(factor=0.9 - min(0.5, 0.15 * len(self.props.columns))) split2.prop(item, "name", emboss=False, text="") - BIM_UL_tasks.draw_custom_columns(self.props, split2, item, task) + BIM_UL_tasks.draw_custom_columns(self.props, split2, item, task, item.ifc_definition_id) if self.props.active_task_id and self.props.editing_task_type == "ATTRIBUTES": row.prop( @@ -966,6 +966,7 @@ class BIM_UL_tasks(UIList): row: bpy.types.UILayout, item: Optional[bpy.types.PropertyGroup] = None, task: Optional[dict[str, Any]] = None, + ifc_definition_id: int = 0, *, header: bool = False, ) -> None: @@ -1005,6 +1006,21 @@ class BIM_UL_tasks(UIList): row.label(text=item.derived_calendar + "*") else: row.label(text=item.calendar or "-") + elif column.name == "Controls.TotalInputs": + if header: + row.label(text="# Inputs") + else: + row.label(text=str(SequenceData.data["tasks"][ifc_definition_id]["TotalInputs"])) + elif column.name == "Controls.TotalOutputs": + if header: + row.label(text="# Outputs") + else: + row.label(text=str(SequenceData.data["tasks"][ifc_definition_id]["TotalOutputs"])) + elif column.name == "Controls.TotalElements": + if header: + row.label(text="# Elements") + else: + row.label(text=str(SequenceData.data["tasks"][ifc_definition_id]["TotalElements"])) else: ifc_class, name = column.name.split(".") if header: