From 7d19f6ae8d17c1e1c163ae89da13892254a7c56a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20T=C3=B6nne?= Date: Mon, 18 Sep 2023 15:46:03 +0200 Subject: [PATCH 1/2] Fix #112523: Renamed the `ui_items` property to `items_tree`. --- .../intern/rna_node_tree_interface.cc | 4 +-- tests/python/bl_node_group_compat.py | 2 +- tests/python/bl_node_group_interface.py | 32 +++++++++---------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/source/blender/makesrna/intern/rna_node_tree_interface.cc b/source/blender/makesrna/intern/rna_node_tree_interface.cc index 6b39366e0e0..16778dda32c 100644 --- a/source/blender/makesrna/intern/rna_node_tree_interface.cc +++ b/source/blender/makesrna/intern/rna_node_tree_interface.cc @@ -88,7 +88,7 @@ static char *rna_NodeTreeInterfaceItem_path(const PointerRNA *ptr) ntree->ensure_interface_cache(); for (const int index : ntree->interface_items().index_range()) { if (ntree->interface_items()[index] == item) { - return BLI_sprintfN("interface.ui_items[%d]", index); + return BLI_sprintfN("interface.items_tree[%d]", index); } } return nullptr; @@ -1143,7 +1143,7 @@ static void rna_def_node_tree_interface(BlenderRNA *brna) srna, "Node Tree Interface", "Declaration of sockets and ui panels of a node group"); RNA_def_struct_sdna(srna, "bNodeTreeInterface"); - prop = RNA_def_property(srna, "ui_items", PROP_COLLECTION, PROP_NONE); + prop = RNA_def_property(srna, "items_tree", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_funcs(prop, "rna_NodeTreeInterface_items_begin", "rna_iterator_array_next", diff --git a/tests/python/bl_node_group_compat.py b/tests/python/bl_node_group_compat.py index a8c02cb7c58..68b18e8dd9e 100644 --- a/tests/python/bl_node_group_compat.py +++ b/tests/python/bl_node_group_compat.py @@ -181,7 +181,7 @@ class AbstractNodeGroupInterfaceTest(unittest.TestCase): # Test node group items and associated node sockets with spec data. def compare_group_to_specs(self, group, node, specs, test_links=True): for index, spec in enumerate(specs): - self.compare_group_socket_to_spec(group.interface.ui_items[index], node, spec, test_links=test_links) + self.compare_group_socket_to_spec(group.interface.items_tree[index], node, spec, test_links=test_links) class NodeGroupVersioning36Test(AbstractNodeGroupInterfaceTest): diff --git a/tests/python/bl_node_group_interface.py b/tests/python/bl_node_group_interface.py index c1870b70d84..85fbdc7c6d1 100644 --- a/tests/python/bl_node_group_interface.py +++ b/tests/python/bl_node_group_interface.py @@ -103,7 +103,7 @@ class NodeGroupInterfaceTests: def test_empty_nodegroup(self): tree, group_node = self.make_group_and_instance() - self.assertFalse(tree.interface.ui_items, "Interface not empty") + self.assertFalse(tree.interface.items_tree, "Interface not empty") self.assertFalse(group_node.inputs) self.assertFalse(group_node.outputs) @@ -195,7 +195,7 @@ class NodeGroupInterfaceTests: tree.interface.new_socket("Output 0", socket_type=socket_type, in_out={'OUTPUT'}) tree.interface.new_socket("Input 0", socket_type=socket_type, in_out={'INPUT'}) - self.assertSequenceEqual([(s.name, s.item_type) for s in tree.interface.ui_items], [ + self.assertSequenceEqual([(s.name, s.item_type) for s in tree.interface.items_tree], [ ("Output 0", 'SOCKET'), ("Input 0", 'SOCKET'), ]) @@ -222,7 +222,7 @@ class NodeGroupInterfaceTests: tree.interface.new_panel("Panel 3") # Panels after sockets - self.assertSequenceEqual([(s.name, s.item_type) for s in tree.interface.ui_items], [ + self.assertSequenceEqual([(s.name, s.item_type) for s in tree.interface.items_tree], [ ("Input 0", 'SOCKET'), ("Output 0", 'SOCKET'), ("Input 1", 'SOCKET'), @@ -252,35 +252,35 @@ class NodeGroupInterfaceTests: tree, group_node = self.make_group_and_instance() in0 = tree.interface.new_socket("Input 0", socket_type=socket_type, in_out={'INPUT'}) - self.assertSequenceEqual(tree.interface.ui_items, [in0]) + self.assertSequenceEqual(tree.interface.items_tree, [in0]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 0"]) self.assertSequenceEqual([s.name for s in group_node.outputs], []) out0 = tree.interface.new_socket("Output 0", socket_type=socket_type, in_out={'OUTPUT'}) - self.assertSequenceEqual(tree.interface.ui_items, [in0, out0]) + self.assertSequenceEqual(tree.interface.items_tree, [in0, out0]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 0"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 0"]) panel0 = tree.interface.new_panel("Panel 0") - self.assertSequenceEqual(tree.interface.ui_items, [in0, out0, panel0]) + self.assertSequenceEqual(tree.interface.items_tree, [in0, out0, panel0]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 0"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 0"]) # Add items to the panel. in1 = tree.interface.new_socket("Input 1", socket_type=socket_type, in_out={'INPUT'}, parent=panel0) - self.assertSequenceEqual(tree.interface.ui_items, [in0, out0, panel0, in1]) + self.assertSequenceEqual(tree.interface.items_tree, [in0, out0, panel0, in1]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 0", "Input 1"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 0"]) out1 = tree.interface.new_socket("Output 1", socket_type=socket_type, in_out={'OUTPUT'}, parent=panel0) - self.assertSequenceEqual(tree.interface.ui_items, [in0, out0, panel0, in1, out1]) + self.assertSequenceEqual(tree.interface.items_tree, [in0, out0, panel0, in1, out1]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 0", "Input 1"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 0", "Output 1"]) # Nested panel is not allowed and should return None. panel1 = tree.interface.new_panel("Panel 1", parent=panel0) self.assertIsNone(panel1) - self.assertSequenceEqual(tree.interface.ui_items, [in0, out0, panel0, in1, out1]) + self.assertSequenceEqual(tree.interface.items_tree, [in0, out0, panel0, in1, out1]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 0", "Input 1"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 0", "Output 1"]) @@ -297,42 +297,42 @@ class NodeGroupInterfaceTests: out2 = tree.interface.new_socket("Output 2", socket_type=socket_type, in_out={'OUTPUT'}, parent=panel1) panel2 = tree.interface.new_panel("Panel 2") - self.assertSequenceEqual(tree.interface.ui_items, [in0, out0, panel0, in1, out1, panel1, in2, out2, panel2]) + self.assertSequenceEqual(tree.interface.items_tree, [in0, out0, panel0, in1, out1, panel1, in2, out2, panel2]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 0", "Input 1", "Input 2"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 0", "Output 1", "Output 2"]) # Remove from root panel. tree.interface.remove(in0) - self.assertSequenceEqual(tree.interface.ui_items, [out0, panel0, in1, out1, panel1, in2, out2, panel2]) + self.assertSequenceEqual(tree.interface.items_tree, [out0, panel0, in1, out1, panel1, in2, out2, panel2]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 1", "Input 2"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 0", "Output 1", "Output 2"]) # Removing a panel should move content to the parent. tree.interface.remove(panel0) - self.assertSequenceEqual(tree.interface.ui_items, [out0, in1, out1, panel1, in2, out2, panel2]) + self.assertSequenceEqual(tree.interface.items_tree, [out0, in1, out1, panel1, in2, out2, panel2]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 1", "Input 2"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 0", "Output 1", "Output 2"]) tree.interface.remove(out0) - self.assertSequenceEqual(tree.interface.ui_items, [in1, out1, panel1, in2, out2, panel2]) + self.assertSequenceEqual(tree.interface.items_tree, [in1, out1, panel1, in2, out2, panel2]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 1", "Input 2"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 1", "Output 2"]) # Remove content from panel tree.interface.remove(out2) - self.assertSequenceEqual(tree.interface.ui_items, [in1, out1, panel1, in2, panel2]) + self.assertSequenceEqual(tree.interface.items_tree, [in1, out1, panel1, in2, panel2]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 1", "Input 2"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 1"]) # Remove a panel and its content tree.interface.remove(panel1, move_content_to_parent=False) - self.assertSequenceEqual(tree.interface.ui_items, [in1, out1, panel2]) + self.assertSequenceEqual(tree.interface.items_tree, [in1, out1, panel2]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 1"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 1"]) # Remove empty panel tree.interface.remove(panel2) - self.assertSequenceEqual(tree.interface.ui_items, [in1, out1]) + self.assertSequenceEqual(tree.interface.items_tree, [in1, out1]) self.assertSequenceEqual([s.name for s in group_node.inputs], ["Input 1"]) self.assertSequenceEqual([s.name for s in group_node.outputs], ["Output 1"]) -- 2.30.2 From 9aeabfbe95450b1e04edc1f9e20475f30dc4abe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20T=C3=B6nne?= Date: Mon, 18 Sep 2023 16:23:31 +0200 Subject: [PATCH 2/2] Replace uses of `ui_items` in scripts. --- scripts/startup/bl_operators/geometry_nodes.py | 4 ++-- scripts/startup/bl_operators/node.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/startup/bl_operators/geometry_nodes.py b/scripts/startup/bl_operators/geometry_nodes.py index 3b1758b14b1..f7da482818f 100644 --- a/scripts/startup/bl_operators/geometry_nodes.py +++ b/scripts/startup/bl_operators/geometry_nodes.py @@ -158,7 +158,7 @@ class MoveModifierToNodes(Operator): # Copy default values for inputs and create named attribute input nodes. input_nodes = [] first_geometry_input = None - for input_socket in old_group.interface.ui_items: + for input_socket in old_group.interface.items_tree: if input_socket.item_type != 'SOCKET' or (input_socket.in_out not in {'INPUT', 'BOTH'}): continue identifier = input_socket.identifier @@ -192,7 +192,7 @@ class MoveModifierToNodes(Operator): # Connect outputs to store named attribute nodes to replace modifier attribute outputs. store_nodes = [] first_geometry_output = None - for output_socket in old_group.interface.ui_items: + for output_socket in old_group.interface.items_tree: if output_socket.item_type != 'SOCKET' or (output_socket.in_out not in {'OUTPUT', 'BOTH'}): continue identifier = output_socket.identifier diff --git a/scripts/startup/bl_operators/node.py b/scripts/startup/bl_operators/node.py index 4c7f15e96db..1a8efc5a529 100644 --- a/scripts/startup/bl_operators/node.py +++ b/scripts/startup/bl_operators/node.py @@ -361,7 +361,7 @@ class NODE_OT_interface_item_remove(NodeInterfaceOperator, Operator): if item: interface.remove(item) - interface.active_index = min(interface.active_index, len(interface.ui_items) - 1) + interface.active_index = min(interface.active_index, len(interface.items_tree) - 1) return {'FINISHED'} -- 2.30.2