[Bf-blender-cvs] [dd452a314a0] functions: improve group node ui

Jacques Lucke noreply at git.blender.org
Thu Dec 5 13:14:32 CET 2019


Commit: dd452a314a09017027dcb4db8865f0a02238c729
Author: Jacques Lucke
Date:   Thu Dec 5 11:21:24 2019 +0100
Branches: functions
https://developer.blender.org/rBdd452a314a09017027dcb4db8865f0a02238c729

improve group node ui

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

M	release/scripts/startup/nodes/base.py
M	release/scripts/startup/nodes/function_nodes/groups.py

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

diff --git a/release/scripts/startup/nodes/base.py b/release/scripts/startup/nodes/base.py
index fa6c871462f..2f9fe7ee02c 100644
--- a/release/scripts/startup/nodes/base.py
+++ b/release/scripts/startup/nodes/base.py
@@ -119,6 +119,18 @@ class BaseNode:
     def draw_advanced(self, layout):
         pass
 
+    def draw_socket(self, layout, socket, text, decl, index):
+        decl.draw_socket(layout, socket, index)
+
+    def draw_label(self):
+        if self.hide:
+            return self.draw_closed_label()
+        else:
+            return self.bl_label
+
+    def draw_closed_label(self):
+        return self.bl_label
+
     def iter_directly_used_trees(self):
         return
         yield
@@ -211,7 +223,7 @@ class BaseSocket:
 
     def draw(self, context, layout, node, text):
         decl, index = self.get_decl_with_index(node)
-        decl.draw_socket(layout, self, index)
+        node.draw_socket(layout, self, text, decl, index)
 
     def draw_self(self, layout, node, text):
         layout.label(text=text)
diff --git a/release/scripts/startup/nodes/function_nodes/groups.py b/release/scripts/startup/nodes/function_nodes/groups.py
index db306aeff87..2e8f3ec62ad 100644
--- a/release/scripts/startup/nodes/function_nodes/groups.py
+++ b/release/scripts/startup/nodes/function_nodes/groups.py
@@ -23,6 +23,11 @@ class GroupInputNode(bpy.types.Node, BaseNode):
 
     sort_index: IntProperty()
 
+    display_settings: BoolProperty(
+        name="Display Settings",
+        default=False,
+    )
+
     interface_type: EnumProperty(
         items=interface_type_items,
         default="DATA",
@@ -35,8 +40,6 @@ class GroupInputNode(bpy.types.Node, BaseNode):
     )
 
     def declaration(self, builder: NodeBuilder):
-        builder.background_color((0.8, 0.8, 0.8))
-
         if self.interface_type == "DATA":
             builder.fixed_output("value", "Value", self.data_type)
         elif self.interface_type == "EXECUTE":
@@ -47,17 +50,24 @@ class GroupInputNode(bpy.types.Node, BaseNode):
             assert False
 
     def draw(self, layout):
-        col = layout.column()
-        col.prop(self, "input_name", text="")
+        if not self.display_settings:
+            return
+
+        layout.prop(self, "interface_type", text="")
 
         if self.interface_type == "DATA":
             if hasattr(self.outputs[0], "draw_property"):
-                self.outputs[0].draw_property(col, self, "Default")
+                self.outputs[0].draw_property(layout, self, "Default")
 
-            self.invoke_type_selection(col, "set_data_type", "Select Type")
+            self.invoke_type_selection(layout, "set_data_type", "Select Type")
 
-    def draw_advanced(self, layout):
-        layout.prop(self, "interface_type", text="")
+    def draw_socket(self, layout, socket, text, decl, index):
+        row = layout.row()
+        row.prop(self, "display_settings", text="", icon="SETTINGS", emboss=False)
+        row.prop(self, "input_name", text="")
+
+    def draw_closed_label(self):
+        return self.input_name + " (Input)"
 
     def set_data_type(self, data_type):
         self.data_type = data_type
@@ -69,6 +79,11 @@ class GroupOutputNode(bpy.types.Node, BaseNode):
 
     sort_index: IntProperty()
 
+    display_settings: BoolProperty(
+        name="Display Settings",
+        default=False,
+    )
+
     output_name: StringProperty(
         default="Name",
         update=BaseNode.sync_tree,
@@ -86,8 +101,6 @@ class GroupOutputNode(bpy.types.Node, BaseNode):
     )
 
     def declaration(self, builder: NodeBuilder):
-        builder.background_color((0.8, 0.8, 0.8))
-
         if self.interface_type == "DATA":
             builder.fixed_input("value", "Value", self.data_type)
         elif self.interface_type == "EXECUTE":
@@ -96,14 +109,21 @@ class GroupOutputNode(bpy.types.Node, BaseNode):
             builder.influences_input("influences", "Influences")
 
     def draw(self, layout):
-        col = layout.column()
-        col.prop(self, "output_name", text="")
+        if not self.display_settings:
+            return
+
+        layout.prop(self, "interface_type", text="")
 
         if self.interface_type == "DATA":
-            self.invoke_type_selection(col, "set_type_type", "Select Type")
+            self.invoke_type_selection(layout, "set_type_type", "Select Type")
 
-    def draw_advanced(self, layout):
-        layout.prop(self, "interface_type", text="")
+    def draw_socket(self, layout, socket, text, decl, index):
+        row = layout.row()
+        row.prop(self, "display_settings", text="", icon="SETTINGS", emboss=False)
+        row.prop(self, "output_name", text="")
+
+    def draw_closed_label(self):
+        return self.output_name + " (Output)"
 
     def set_type_type(self, data_type):
         self.data_type = data_type
@@ -153,6 +173,9 @@ class GroupNode(bpy.types.Node, FunctionNode):
         layout.scale_y = 1.3
         self.invoke_group_selector(layout, "set_group", text, icon="NODETREE")
 
+    def draw_closed_label(self):
+        return self.node_group.name
+
     def set_group(self, group):
         self.node_group = group



More information about the Bf-blender-cvs mailing list