[Bf-blender-cvs] [cae00bde2a7] builtin-simulation-nodes: simple search to select node group to import

Jacques Lucke noreply at git.blender.org
Sat Mar 21 13:48:33 CET 2020


Commit: cae00bde2a767a2d6db76f24320177abfc07af3d
Author: Jacques Lucke
Date:   Sat Mar 21 12:58:10 2020 +0100
Branches: builtin-simulation-nodes
https://developer.blender.org/rBcae00bde2a767a2d6db76f24320177abfc07af3d

simple search to select node group to import

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

M	release/scripts/startup/bl_operators/node.py

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

diff --git a/release/scripts/startup/bl_operators/node.py b/release/scripts/startup/bl_operators/node.py
index 183089f2889..9dd8206d467 100644
--- a/release/scripts/startup/bl_operators/node.py
+++ b/release/scripts/startup/bl_operators/node.py
@@ -399,11 +399,22 @@ def node_group_to_json_data(group):
 def save_group_as_json(group, file_path):
     json_data = node_group_to_json_data(group)
     json_str = json.dumps(json_data, indent=1)
+    os.makedirs(os.path.dirname(file_path))
     with open(file_path, "w") as f:
         f.write(json_str)
 
 
-group_template_directory = "/home/jacques/Documents/node_groups"
+node_group_template_directory = os.path.join(bpy.utils.resource_path("LOCAL"), "datafiles", "node_groups")
+
+def group_name_to_file_name(group_name):
+    return group_name.replace(" ", "_") + ".json"
+
+def file_name_to_group_name(file_name):
+    return file_name.replace("_", " ")[:-len(".json")]
+
+def group_name_to_file_path(group_name):
+    file_name = group_name_to_file_name(group_name)
+    return os.path.join(node_group_template_directory, file_name)
 
 class NODE_OT_export_group_template(Operator):
     bl_idname = "node.export_group_template"
@@ -416,7 +427,7 @@ class NODE_OT_export_group_template(Operator):
 
     def execute(self, context):
         group = context.space_data.edit_tree
-        file_path = os.path.join(group_template_directory, group.name + ".json")
+        file_path = group_name_to_file_path(group.name)
         save_group_as_json(group, file_path)
         return {'FINISHED'}
 
@@ -490,10 +501,9 @@ def group_matches_json_data(group, json_data):
 
     return True
 
-def get_or_create_node_group(directory, group_name):
-    main_file_path = os.path.join(directory, group_name + ".json")
-
-    with open(main_file_path, "r") as f:
+def get_or_create_node_group(group_name):
+    file_path = group_name_to_file_path(group_name)
+    with open(file_path, "r") as f:
         json_str = f.read()
     json_data = json.loads(json_str)
 
@@ -505,7 +515,7 @@ def get_or_create_node_group(directory, group_name):
 
     dependencies = {}
     for dependency_name in json_data["dependencies"]:
-        dependencies[dependency_name] = get_or_create_node_group(directory, dependency_name)
+        dependencies[dependency_name] = get_or_create_node_group(dependency_name)
 
     for node_data in json_data["nodes"]:
         node = group.nodes.new(node_data["bl_idname"])
@@ -541,18 +551,46 @@ def get_or_create_node_group(directory, group_name):
 class NODE_OT_import_group_template(Operator):
     bl_idname = "node.import_group_template"
     bl_label = "Import Node Group Template"
+    bl_options = {'INTERNAL'}
+
+    group_name: StringProperty()
+
+    def execute(self, context):
+        get_or_create_node_group(self.group_name)
+        return {'FINISHED'}
+
+class NODE_OT_import_group_template_search(bpy.types.Operator):
+    bl_idname = "node.import_group_template_search"
+    bl_label = "Import Node Group Template Search"
+    bl_property = "item"
 
-    directory: StringProperty()
-    filename: StringProperty()
+    def get_group_name_items(self, context):
+        if not os.path.exists(node_group_template_directory):
+            return [('NONE', "None", "")]
+        items = []
+        for file_name in os.listdir(node_group_template_directory):
+            if not file_name.endswith(".json"):
+                continue
+            group_name = file_name_to_group_name(file_name)
+            items.append((file_name, group_name, ""))
+        if len(items) == 0:
+            items.append(('NONE', "None", ""))
+        return items
+
+
+    item: EnumProperty(items=get_group_name_items)
 
     def invoke(self, context, event):
-        context.window_manager.fileselect_add(self)
-        return {'RUNNING_MODAL'}
+        context.window_manager.invoke_search_popup(self)
+        return {'CANCELLED'}
 
     def execute(self, context):
-        assert self.filename.endswith(".json")
-        get_or_create_node_group(self.directory, self.filename[:-len(".json")])
-        return {'FINISHED'}
+        if self.item == "NONE":
+            return {'CANCELLED'}
+        else:
+            group_name = file_name_to_group_name(self.item)
+            bpy.ops.node.import_group_template(group_name=group_name)
+            return {'FINISHED'}
 
 classes = (
     NodeSetting,
@@ -563,5 +601,6 @@ classes = (
     NODE_OT_collapse_hide_unused_toggle,
     NODE_OT_tree_path_parent,
     NODE_OT_export_group_template,
-    NODE_OT_import_group_template
+    NODE_OT_import_group_template,
+    NODE_OT_import_group_template_search,
 )



More information about the Bf-blender-cvs mailing list