[Bf-blender-cvs] [e81c3527464] blender2.8: Tool System: hide paint options for non brush tools

Campbell Barton noreply at git.blender.org
Wed Aug 29 15:53:41 CEST 2018


Commit: e81c352746483acb50fbeddbba4249cdcb51d952
Author: Campbell Barton
Date:   Wed Aug 29 23:58:44 2018 +1000
Branches: blender2.8
https://developer.blender.org/rBe81c352746483acb50fbeddbba4249cdcb51d952

Tool System: hide paint options for non brush tools

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

M	release/scripts/startup/bl_ui/space_toolsystem_common.py
M	release/scripts/startup/bl_ui/space_topbar.py
M	source/blender/makesrna/intern/rna_workspace.c

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

diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index 727b0fd85b4..e03b3eb585d 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -526,6 +526,7 @@ class ToolSelectPanelHelper:
         draw_settings = item.draw_settings
         if draw_settings is not None:
             draw_settings(context, layout, tool)
+        return tool
 
 
 # The purpose of this menu is to be a generic popup to select between tools
diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py
index 5003f6c0bb9..cc3d92547e3 100644
--- a/release/scripts/startup/bl_ui/space_topbar.py
+++ b/release/scripts/startup/bl_ui/space_topbar.py
@@ -96,7 +96,7 @@ class TOPBAR_HT_lower_bar(Header):
         # Active Tool
         # -----------
         from .space_toolsystem_common import ToolSelectPanelHelper
-        ToolSelectPanelHelper.draw_active_tool_header(context, layout)
+        tool = ToolSelectPanelHelper.draw_active_tool_header(context, layout)
 
         # Object Mode Options
         # -------------------
@@ -107,17 +107,21 @@ class TOPBAR_HT_lower_bar(Header):
         # (obviously separated for from the users POV)
         draw_fn = getattr(_draw_left_context_mode, mode, None)
         if draw_fn is not None:
-            draw_fn(context, layout)
+            draw_fn(context, layout, tool)
 
         # Note: general mode options should be added to 'draw_right'.
         if mode == 'SCULPT':
-            layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
+            if tool.has_datablock:
+                layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
         elif mode == 'PAINT_VERTEX':
-            layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
+            if tool.has_datablock:
+                layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
         elif mode == 'PAINT_WEIGHT':
-            layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
+            if tool.has_datablock:
+                layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
         elif mode == 'PAINT_TEXTURE':
-            layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
+            if tool.has_datablock:
+                layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
         elif mode == 'EDIT_ARMATURE':
             pass
         elif mode == 'EDIT_CURVE':
@@ -128,7 +132,8 @@ class TOPBAR_HT_lower_bar(Header):
             pass
         elif mode == 'PARTICLE':
             # Disable, only shows "Brush" panel, which is already in the top-bar.
-            # layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
+            # if tool.has_datablock:
+            #     layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".paint_common", category="")
             pass
         elif mode == 'GPENCIL_PAINT':
             layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".greasepencil_paint", category="")
@@ -182,7 +187,9 @@ class TOPBAR_HT_lower_bar(Header):
 
 class _draw_left_context_mode:
     @staticmethod
-    def SCULPT(context, layout):
+    def SCULPT(context, layout, tool):
+        if not tool.has_datablock:
+            return
         brush = context.tool_settings.sculpt.brush
         if brush is None:
             return
@@ -193,7 +200,9 @@ class _draw_left_context_mode:
         UnifiedPaintPanel.prop_unified_strength(layout, context, brush, "strength", slider=True, text="Strength")
         layout.prop(brush, "direction", text="", expand=True)
 
-    def PAINT_TEXTURE(context, layout):
+    def PAINT_TEXTURE(context, layout, tool):
+        if not tool.has_datablock:
+            return
         brush = context.tool_settings.vertex_paint.brush
         if brush is None:
             return
@@ -204,7 +213,9 @@ class _draw_left_context_mode:
         UnifiedPaintPanel.prop_unified_size(layout, context, brush, "size", slider=True, text="Radius")
         UnifiedPaintPanel.prop_unified_strength(layout, context, brush, "strength", slider=True, text="Strength")
 
-    def PAINT_VERTEX(context, layout):
+    def PAINT_VERTEX(context, layout, tool):
+        if not tool.has_datablock:
+            return
         brush = context.tool_settings.vertex_paint.brush
         if brush is None:
             return
@@ -215,7 +226,9 @@ class _draw_left_context_mode:
         UnifiedPaintPanel.prop_unified_size(layout, context, brush, "size", slider=True, text="Radius")
         UnifiedPaintPanel.prop_unified_strength(layout, context, brush, "strength", slider=True, text="Strength")
 
-    def PAINT_WEIGHT(context, layout):
+    def PAINT_WEIGHT(context, layout, tool):
+        if not tool.has_datablock:
+            return
         brush = context.tool_settings.weight_paint.brush
         if brush is None:
             return
@@ -226,7 +239,7 @@ class _draw_left_context_mode:
         UnifiedPaintPanel.prop_unified_size(layout, context, brush, "size", slider=True, text="Radius")
         UnifiedPaintPanel.prop_unified_strength(layout, context, brush, "strength", slider=True, text="Strength")
 
-    def PARTICLE(context, layout):
+    def PARTICLE(context, layout, tool):
         # See: 'VIEW3D_PT_tools_brush', basically a duplicate
         settings = context.tool_settings.particle_edit
         brush = settings.brush
diff --git a/source/blender/makesrna/intern/rna_workspace.c b/source/blender/makesrna/intern/rna_workspace.c
index 88b79e8ee32..db6a58fa85e 100644
--- a/source/blender/makesrna/intern/rna_workspace.c
+++ b/source/blender/makesrna/intern/rna_workspace.c
@@ -152,6 +152,12 @@ static int rna_WorkspaceTool_index_get(PointerRNA *ptr)
 	return (tref->runtime) ? tref->runtime->index : 0;
 }
 
+static int rna_WorkspaceTool_has_datablock_get(PointerRNA *ptr)
+{
+	bToolRef *tref = ptr->data;
+	return (tref->runtime) ? (tref->runtime->data_block[0] != '\0') : false;
+}
+
 #else /* RNA_RUNTIME */
 
 static void rna_def_workspace_owner(BlenderRNA *brna)
@@ -230,6 +236,13 @@ static void rna_def_workspace_tool(BlenderRNA *brna)
 	RNA_def_property_enum_items(prop, rna_enum_space_type_items);
 	RNA_def_property_ui_text(prop, "Space Type", "");
 
+	RNA_define_verify_sdna(0);
+	prop = RNA_def_property(srna, "has_datablock", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Has Datablock", "");
+	RNA_def_property_boolean_funcs(prop, "rna_WorkspaceTool_has_datablock_get", NULL);
+	RNA_define_verify_sdna(1);
+
 	RNA_api_workspace_tool(srna);
 }



More information about the Bf-blender-cvs mailing list