Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Toenne <lukas.toenne@googlemail.com>2012-08-10 11:22:36 +0400
committerLukas Toenne <lukas.toenne@googlemail.com>2012-08-10 11:22:36 +0400
commitb465039ee725ae9c1f656a4b3b8c1d00aa7e0281 (patch)
tree31b186ceabc8bd4f0acea0c5e639d215d7ec6a6a /release/scripts/startup/bl_operators/node.py
parent1eb611ea55cd9fdf23c8e5b712a144d291d4f0ed (diff)
Extended the search operator for nodes to also support node groups. The basic node group type is not included in the node items list, instead all existing node groups are added to the items list in the callback. A prefix is used to distinguish base node types from node groups.
Diffstat (limited to 'release/scripts/startup/bl_operators/node.py')
-rw-r--r--release/scripts/startup/bl_operators/node.py42
1 files changed, 34 insertions, 8 deletions
diff --git a/release/scripts/startup/bl_operators/node.py b/release/scripts/startup/bl_operators/node.py
index f9ecc1b9802..2f7fc359864 100644
--- a/release/scripts/startup/bl_operators/node.py
+++ b/release/scripts/startup/bl_operators/node.py
@@ -32,6 +32,24 @@ from bpy.props import EnumProperty
# lazy init
node_type_items_dict = {}
+# Prefixes used to distinguish base node types and node groups
+node_type_prefix = 'NODE_'
+node_group_prefix = 'GROUP_'
+
+# Generate a list of enum items for a given node class
+# Copy existing type enum, adding a prefix to distinguish from node groups
+# Skip the base node group type, node groups will be added below for all existing group trees
+def node_type_items(node_class):
+ return [(node_type_prefix + item.identifier, item.name, item.description)
+ for item in node_class.bl_rna.properties['type'].enum_items if item.identifier != 'GROUP']
+
+# Generate items for node group types
+# Filter by the given tree_type
+# Node group trees don't have a description property yet (could add this as a custom property though)
+def node_group_items(tree_type):
+ return [(node_group_prefix + group.name, group.name, '')
+ for group in bpy.data.node_groups if group.type == tree_type]
+
# Returns the enum item list for the edited tree in the context
def node_type_items_cb(self, context):
snode = context.space_data
@@ -41,21 +59,19 @@ def node_type_items_cb(self, context):
if not tree:
return []
+ # Lists of basic node types for each
if not node_type_items_dict:
node_type_items_dict.update({
- 'SHADER': [(item.identifier, item.name, item.description, item.value)
- for item in bpy.types.ShaderNode.bl_rna.properties['type'].enum_items],
- 'COMPOSITING': [(item.identifier, item.name, item.description, item.value)
- for item in bpy.types.CompositorNode.bl_rna.properties['type'].enum_items],
- 'TEXTURE': [(item.identifier, item.name, item.description, item.value)
- for item in bpy.types.TextureNode.bl_rna.properties['type'].enum_items],
+ 'SHADER': node_type_items(bpy.types.ShaderNode),
+ 'COMPOSITING': node_type_items(bpy.types.CompositorNode),
+ 'TEXTURE': node_type_items(bpy.types.TextureNode),
})
# XXX Does not work correctly, see comment above
#return [(item.identifier, item.name, item.description, item.value) for item in tree.nodes.bl_rna.functions['new'].parameters['type'].enum_items]
if tree.type in node_type_items_dict:
- return node_type_items_dict[tree.type]
+ return node_type_items_dict[tree.type] + node_group_items(tree.type)
else:
return []
@@ -79,7 +95,17 @@ class NODE_OT_add_search(Operator):
space = context.space_data
tree = space.edit_tree
- node = tree.nodes.new(type=self.type)
+ # Enum item identifier has an additional prefix to distinguish base node types from node groups
+ item = self.type
+ if (item.startswith(node_type_prefix)):
+ # item means base node type
+ node = tree.nodes.new(type=item[len(node_type_prefix):])
+ elif (item.startswith(node_group_prefix)):
+ # item means node group type
+ node = tree.nodes.new(type='GROUP', group=bpy.data.node_groups[item[len(node_group_prefix):]])
+ else:
+ return None
+
for n in tree.nodes:
if n == node:
node.select = True