workaround for search menu enum using freed python scripts (py api limitation).
This commit is contained in:
@@ -163,10 +163,15 @@ class NODE_OT_add_search(NodeAddOperator, Operator):
|
||||
bl_idname = "node.add_search"
|
||||
bl_label = "Search and Add Node"
|
||||
bl_options = {'REGISTER', 'UNDO'}
|
||||
bl_property = "node_item"
|
||||
|
||||
_enum_item_hack = []
|
||||
|
||||
# Create an enum list from node items
|
||||
def node_enum_items(self, context):
|
||||
enum_items = []
|
||||
enum_items = NODE_OT_add_search._enum_item_hack
|
||||
enum_items.clear()
|
||||
|
||||
for index, item in enumerate(nodeitems_utils.node_items_iter(context)):
|
||||
nodetype = getattr(bpy.types, item.nodetype, None)
|
||||
if nodetype:
|
||||
@@ -175,14 +180,13 @@ class NODE_OT_add_search(NodeAddOperator, Operator):
|
||||
|
||||
# Look up the item based on index
|
||||
def find_node_item(self, context):
|
||||
node_item = int(self.node_item)
|
||||
for index, item in enumerate(nodeitems_utils.node_items_iter(context)):
|
||||
if str(index) == self.type:
|
||||
if index == node_item:
|
||||
return item
|
||||
return None
|
||||
|
||||
# XXX this should be called 'node_item' but the operator search
|
||||
# property is hardcoded to 'type' by a hack in bpy_operator_wrap.c ...
|
||||
type = EnumProperty(
|
||||
node_item = EnumProperty(
|
||||
name="Node Type",
|
||||
description="Node type",
|
||||
items=node_enum_items,
|
||||
@@ -190,6 +194,10 @@ class NODE_OT_add_search(NodeAddOperator, Operator):
|
||||
|
||||
def execute(self, context):
|
||||
item = self.find_node_item(context)
|
||||
|
||||
# no need to keep
|
||||
self._enum_item_hack.clear()
|
||||
|
||||
if item:
|
||||
# apply settings from the node item
|
||||
for setting in item.settings.items():
|
||||
|
||||
Reference in New Issue
Block a user