Commit: 20f9248222b9f31e4eb4eb316b15a9af535ad20e
Author: Jacques Lucke
Date:   Sun Mar 10 14:16:59 2019 +0100
Branches: functions
https://developer.blender.org/rB20f9248222b9f31e4eb4eb316b15a9af535ad20e

simple node search

===================================================================

M       release/scripts/startup/function_nodes/base.py
A       release/scripts/startup/function_nodes/search.py
A       release/scripts/startup/function_nodes/utils/generic.py

===================================================================

diff --git a/release/scripts/startup/function_nodes/base.py 
b/release/scripts/startup/function_nodes/base.py
index 7e30d4ab903..c9cc9b8f94a 100644
--- a/release/scripts/startup/function_nodes/base.py
+++ b/release/scripts/startup/function_nodes/base.py
@@ -1,11 +1,11 @@
 import bpy
+from . utils.generic import iter_subclasses_recursive
 
 class FunctionNodeTree(bpy.types.NodeTree):
     bl_idname = "FunctionNodeTree"
     bl_icon = "MOD_DATA_TRANSFER"
     bl_label = "Function Nodes"
 
-bpy.utils.register_class(FunctionNodeTree)
 
 class BaseNode:
     def draw_buttons(self, context, layout):
@@ -27,6 +27,10 @@ class BaseNode:
     def draw_socket(self, socket, layout, text):
         socket.draw_self(layout, self, text)
 
+    @classmethod
+    def iter_final_subclasses(cls):
+        yield from filter(lambda x: issubclass(x, bpy.types.Node), 
iter_subclasses_recursive(cls))
+
 class BaseSocket:
     color = (0, 0, 0, 0)
 
diff --git a/release/scripts/startup/function_nodes/search.py 
b/release/scripts/startup/function_nodes/search.py
new file mode 100644
index 00000000000..0b108e8648d
--- /dev/null
+++ b/release/scripts/startup/function_nodes/search.py
@@ -0,0 +1,32 @@
+import bpy
+from bpy.props import *
+from . base import BaseNode
+
+class NodeSearch(bpy.types.Operator):
+    bl_idname = "fn.node_search"
+    bl_label = "Node Search"
+    bl_options = {'REGISTER', 'UNDO'}
+    bl_property = "item"
+
+    def get_search_items(self, context):
+        items = []
+        for cls in BaseNode.iter_final_subclasses():
+            item = (cls.bl_idname, cls.bl_label, "")
+            items.append(item)
+        return items
+
+    item: EnumProperty(items = get_search_items)
+
+    @classmethod
+    def poll(cls, context):
+        try: return context.space_data.node_tree.bl_idname == 
"FunctionNodeTree"
+        except: return False
+
+    def invoke(self, context, event):
+        context.window_manager.invoke_search_popup(self)
+        return {'CANCELLED'}
+
+    def execute(self, context):
+        idname = self.item
+        bpy.ops.node.add_node('INVOKE_DEFAULT', type=idname, 
use_transform=True)
+        return {'FINISHED'}
diff --git a/release/scripts/startup/function_nodes/utils/generic.py 
b/release/scripts/startup/function_nodes/utils/generic.py
new file mode 100644
index 00000000000..39468182b06
--- /dev/null
+++ b/release/scripts/startup/function_nodes/utils/generic.py
@@ -0,0 +1,4 @@
+def iter_subclasses_recursive(cls):
+    for sub in cls.__subclasses__():
+        yield sub
+        yield from iter_subclasses_recursive(sub)
\ No newline at end of file

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to