From 2a8694729d5959090344b48bccbde45ac1fe4284 Mon Sep 17 00:00:00 2001
From: Lukas Toenne <lukas.toenne@googlemail.com>
Date: Wed, 29 May 2013 17:00:41 +0000
Subject: [PATCH] svn merge ^/trunk/blender -c57073

---
 release/scripts/modules/nodeitems_utils.py    |  9 +++++++--
 release/scripts/startup/nodeitems_builtins.py | 16 ++++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/release/scripts/modules/nodeitems_utils.py b/release/scripts/modules/nodeitems_utils.py
index 3fbafc3ae9b..259c119cc8e 100644
--- a/release/scripts/modules/nodeitems_utils.py
+++ b/release/scripts/modules/nodeitems_utils.py
@@ -36,13 +36,18 @@ class NodeCategory():
         elif callable(items):
             self.items = items
         else:
-            self.items = lambda context: items
+            def items_gen(context):
+                for item in items:
+                    if item.poll is None or item.poll(context):
+                        yield item
+            self.items = items_gen
 
 class NodeItem():
-    def __init__(self, nodetype, label=None, settings={}):
+    def __init__(self, nodetype, label=None, settings={}, poll=None):
         self.nodetype = nodetype
         self._label = label
         self.settings = settings
+        self.poll = poll
 
     @property
     def label(self):
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 22c07c3836f..bdc7a6fbdee 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -17,6 +17,7 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8 compliant>
+import bpy
 import nodeitems_utils
 from nodeitems_utils import NodeCategory, NodeItem
 
@@ -80,6 +81,13 @@ def node_group_items(context):
 
         yield NodeItem(node_tree_group_type[group.bl_idname], group.name, { "node_tree" : "bpy.data.node_groups[%r]" % group.name })
 
+# only show input/output nodes inside node groups
+def group_input_output_item_poll(context):
+    space = context.space_data
+    if space.edit_tree in bpy.data.node_groups.values():
+        return True
+    return False
+
 
 # All standard node categories currently used in nodes.
 
@@ -93,9 +101,11 @@ shader_node_categories = [
         NodeItem("ShaderNodeTexture"),
         NodeItem("ShaderNodeGeometry"),
         NodeItem("ShaderNodeExtendedMaterial"),
+        NodeItem("NodeGroupInput", poll=group_input_output_item_poll),
         ]),
     ShaderOldNodeCategory("SH_OUTPUT", "Output", items=[
         NodeItem("ShaderNodeOutput"),
+        NodeItem("NodeGroupOutput", poll=group_input_output_item_poll),
         ]),
     ShaderOldNodeCategory("SH_OP_COLOR", "Color", items=[
         NodeItem("ShaderNodeMixRGB"),
@@ -139,11 +149,13 @@ shader_node_categories = [
         NodeItem("ShaderNodeHairInfo"),
         NodeItem("ShaderNodeParticleInfo"),
         NodeItem("ShaderNodeCameraData"),
+        NodeItem("NodeGroupInput", poll=group_input_output_item_poll),
         ]),
     ShaderNewNodeCategory("SH_NEW_OUTPUT", "Output", items=[
         NodeItem("ShaderNodeOutputMaterial"),
         NodeItem("ShaderNodeOutputLamp"),
         NodeItem("ShaderNodeOutputWorld"),
+        NodeItem("NodeGroupOutput", poll=group_input_output_item_poll),
         ]),
     ShaderNewNodeCategory("SH_NEW_SHADER", "Shader", items=[
         NodeItem("ShaderNodeMixShader"),
@@ -221,6 +233,7 @@ compositor_node_categories = [
         NodeItem("CompositorNodeBokehImage"),
         NodeItem("CompositorNodeTime"),
         NodeItem("CompositorNodeTrackPos"),
+        NodeItem("NodeGroupInput", poll=group_input_output_item_poll),
         ]),
     CompositorNodeCategory("CMP_OUTPUT", "Output", items = [
         NodeItem("CompositorNodeComposite"),
@@ -228,6 +241,7 @@ compositor_node_categories = [
         NodeItem("CompositorNodeSplitViewer"),
         NodeItem("CompositorNodeOutputFile"),
         NodeItem("CompositorNodeLevels"),
+        NodeItem("NodeGroupOutput", poll=group_input_output_item_poll),
         ]),
     CompositorNodeCategory("CMP_OP_COLOR", "Color", items = [
         NodeItem("CompositorNodeMixRGB"),
@@ -321,10 +335,12 @@ texture_node_categories = [
         NodeItem("TextureNodeCoordinates"),
         NodeItem("TextureNodeTexture"),
         NodeItem("TextureNodeImage"),
+        NodeItem("NodeGroupInput", poll=group_input_output_item_poll),
         ]),
     TextureNodeCategory("TEX_OUTPUT", "Output", items = [
         NodeItem("TextureNodeOutput"),
         NodeItem("TextureNodeViewer"),
+        NodeItem("NodeGroupOutput", poll=group_input_output_item_poll),
         ]),
     TextureNodeCategory("TEX_OP_COLOR", "Color", items = [
         NodeItem("TextureNodeMixRGB"),
-- 
GitLab