[Bf-blender-cvs] [1944bca49a2] blender2.8: Tool System: use tools for node editor

Campbell Barton noreply at git.blender.org
Tue Nov 27 08:44:09 CET 2018


Commit: 1944bca49a22c18b059d84daf56908b6e15591ad
Author: Campbell Barton
Date:   Tue Nov 27 18:39:29 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB1944bca49a22c18b059d84daf56908b6e15591ad

Tool System: use tools for node editor

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_ui/space_node.py
M	release/scripts/startup/bl_ui/space_toolsystem_common.py
M	release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M	source/blender/editors/space_node/space_node.c
M	source/blender/makesrna/intern/rna_workspace.c
M	source/blender/windowmanager/WM_toolsystem.h
M	source/blender/windowmanager/intern/wm_toolsystem.c

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 6b8e459d16b..706eade89f1 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -5050,6 +5050,46 @@ def km_image_editor_tool_uv_select_lasso(params):
     )
 
 
+def km_node_editor_tool_select(params):
+    return (
+        "Node Tool: Select",
+        {"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'},
+        {"items": (
+            ("node.select", {"type": params.select_mouse, "value": 'PRESS'},
+             {"properties": [("extend", False)]}),
+        ),
+        },
+    )
+
+
+def km_node_editor_tool_select_box(params):
+    return (
+        "Node Tool: Select Box",
+        {"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'},
+        {"items": (
+            ("node.select_box", {"type": params.tool_mouse, "value": 'PRESS'},
+              {"properties": [("deselect", False), ("tweak", True)]}),
+            ("node.select_box", {"type": params.tool_mouse, "value": 'PRESS', "ctrl": True},
+              {"properties": [("deselect", True), ("tweak", True)]}),
+        ),
+        },
+    )
+
+
+def km_node_editor_tool_select_lasso(params):
+    return (
+        "Node Tool: Select Lasso",
+        {"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'},
+        {"items": (
+            ("node.select_lasso", {"type": params.tool_mouse, "value": 'PRESS'},
+              {"properties": [("deselect", False)]}),
+            ("node.select_lasso", {"type": params.tool_mouse, "value": 'PRESS', "ctrl": True},
+              {"properties": [("deselect", True)]}),
+        ),
+        },
+    )
+
+
 def km_3d_view_tool_object_cursor(params):
     return (
         "3D View Tool: Object, Cursor",
@@ -5902,6 +5942,9 @@ def generate_keymaps(params=None):
         km_image_editor_tool_uv_select_box(params),
         km_image_editor_tool_uv_select_circle(params),
         km_image_editor_tool_uv_select_lasso(params),
+        km_node_editor_tool_select(params),
+        km_node_editor_tool_select_box(params),
+        km_node_editor_tool_select_lasso(params),
         km_3d_view_tool_object_cursor(params),
         km_3d_view_tool_object_select(params),
         km_3d_view_tool_object_select_box(params),
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 789fc1b0a31..6ec264ff699 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -553,18 +553,6 @@ class NODE_PT_grease_pencil_tools(GreasePencilToolsPanel, Panel):
     # toolbar, but which may not necessarily be open
 
 
-# Tool Shelf ------------------
-
-
-# Grease Pencil drawing tools
-class NODE_PT_tools_grease_pencil_draw(AnnotationDrawingToolsPanel, Panel):
-    bl_space_type = 'NODE_EDITOR'
-    bl_region_type = 'TOOLS'
-
-
-# -----------------------------
-
-
 def node_draw_tree_view(layout, context):
     pass
 
@@ -587,7 +575,6 @@ classes = (
     NODE_UL_interface_sockets,
     NODE_PT_grease_pencil,
     NODE_PT_grease_pencil_tools,
-    NODE_PT_tools_grease_pencil_draw,
 )
 
 
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index 2ff5c9692ec..9349f776c99 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -293,6 +293,12 @@ class ToolSelectPanelHelper:
             if tool is not None:
                 tool.refresh_from_context()
                 return tool
+        elif space_type == 'NODE_EDITOR':
+            space_data = context.space_data
+            tool = context.workspace.tools.from_space_node(create=create)
+            if tool is not None:
+                tool.refresh_from_context()
+                return tool
         return None
 
     @staticmethod
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 1f2b4ca47ee..cefc900b8b3 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -1164,6 +1164,49 @@ class _defs_gpencil_weight:
         )
 
 
+class _defs_node_select:
+
+    @ToolDef.from_fn
+    def select():
+        def draw_settings(context, layout, tool):
+            pass
+        return dict(
+            text="Select",
+            icon="ops.generic.select",
+            widget=None,
+            keymap="Node Tool: Select",
+            draw_settings=draw_settings,
+        )
+
+    @ToolDef.from_fn
+    def box():
+        def draw_settings(context, layout, tool):
+            props = tool.operator_properties("node.select_box")
+            layout.prop(props, "deselect")
+            pass
+        return dict(
+            text="Select Box",
+            icon="ops.generic.select_box",
+            widget=None,
+            keymap="Node Tool: Select Box",
+            draw_settings=draw_settings,
+        )
+
+    @ToolDef.from_fn
+    def lasso():
+        def draw_settings(context, layout, tool):
+            props = tool.operator_properties("node.select_lasso")
+            layout.prop(props, "deselect")
+            pass
+        return dict(
+            text="Select Lasso",
+            icon="ops.generic.select_lasso",
+            widget=None,
+            keymap="Node Tool: Select Lasso",
+            draw_settings=draw_settings,
+        )
+
+
 class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel):
     bl_space_type = 'IMAGE_EDITOR'
     bl_region_type = 'TOOLS'
@@ -1243,6 +1286,59 @@ class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel):
     }
 
 
+class NODE_PT_tools_active(ToolSelectPanelHelper, Panel):
+    bl_space_type = 'NODE_EDITOR'
+    bl_region_type = 'TOOLS'
+    bl_label = "Tools"  # not visible
+    bl_options = {'HIDE_HEADER'}
+
+    # Satisfy the 'ToolSelectPanelHelper' API.
+    keymap_prefix = "Node Editor Tool:"
+
+    @classmethod
+    def tools_from_context(cls, context, mode=None):
+        if mode is None:
+            if context.space_data is None:
+                mode = None
+            else:
+                mode = context.space_data.tree_type
+        for tools in (cls._tools[None], cls._tools.get(mode, ())):
+            for item in tools:
+                if not (type(item) is ToolDef) and callable(item):
+                    yield from item(context)
+                else:
+                    yield item
+
+    @classmethod
+    def tools_all(cls):
+        yield from cls._tools.items()
+
+    _tools_select = (
+        (
+            _defs_node_select.select,
+            _defs_node_select.box,
+            _defs_node_select.lasso,
+        ),
+    )
+
+    _tools_annotate = (
+        (
+            _defs_annotate.scribble,
+            _defs_annotate.line,
+            _defs_annotate.poly,
+            _defs_annotate.eraser,
+        ),
+    )
+
+    _tools = {
+        None: [
+            *_tools_select,
+            None,
+            *_tools_annotate,
+        ],
+    }
+
+
 class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
     bl_space_type = 'VIEW_3D'
     bl_region_type = 'TOOLS'
@@ -1507,6 +1603,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
 
 classes = (
     IMAGE_PT_tools_active,
+    NODE_PT_tools_active,
     VIEW3D_PT_tools_active,
 )
 
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 85820ec3e13..8af5fe1b3a1 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -1014,10 +1014,12 @@ void ED_spacetype_node(void)
 	/* regions: toolbar */
 	art = MEM_callocN(sizeof(ARegionType), "spacetype view3d tools region");
 	art->regionid = RGN_TYPE_TOOLS;
-	art->prefsizex = 160; /* XXX */
+	art->prefsizex = 58; /* XXX */
 	art->prefsizey = 50; /* XXX */
 	art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_FRAMES;
 	art->listener = node_region_listener;
+	art->message_subscribe = ED_region_generic_tools_region_message_subscribe;
+	art->snap_size = ED_region_generic_tools_region_snap_size;
 	art->init = node_toolbar_region_init;
 	art->draw = node_toolbar_region_draw;
 	BLI_addhead(&st->regiontypes, art);
diff --git a/source/blender/makesrna/intern/rna_workspace.c b/source/blender/makesrna/intern/rna_workspace.c
index 59b1086e17e..a79dc05e09b 100644
--- a/source/blender/makesrna/intern/rna_workspace.c
+++ b/source/blender/makesrna/intern/rna_workspace.c
@@ -132,6 +132,12 @@ static bToolRef *rna_WorkSpace_tools_from_space_image_mode(
 	return rna_WorkSpace_tools_from_tkey(workspace, &(bToolKey){ .space_type = SPACE_IMAGE, .mode = mode}, create);
 }
 
+static bToolRef *rna_WorkSpace_tools_from_space_node(
+        WorkSpace *workspace, bool create)
+{
+	return rna_WorkSpace_tools_from_tkey(workspace, &(bToolKey){ .space_type = SPACE_NODE, .mode = 0}, create);
+}
+
 const EnumPropertyItem *rna_WorkSpace_tools_mode_itemf(
         bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *UNUSED(r_free))
 {
@@ -301,6 +307,13 @@ static void rna_def_workspace_tools(BlenderRNA *brna, PropertyRNA *cprop)
 	/* return type */
 	parm = RNA_def_pointer(func, "result", "WorkspaceTool", "", "");
 	RNA_def_function_return(func, parm);
+
+	func = RNA_def_function(srna, "from_space_node", "rna_WorkSpace_tools_from_space_node");
+	RNA_def_function_ui_description(func, "");
+	RNA_def_boolean(func, "create", false, "Create", "");
+	/* return type */
+	parm = RNA_def_pointer(func, "result", "WorkspaceTool", "", "");
+	RNA_def_function_return(func, parm);
 }
 
 static void rna_def_workspace(BlenderRNA *brna)
diff --git a/source/blender/windowmanager/WM_toolsystem.h b/source/blender/windowmanager/WM_toolsystem.h
index 7410bf4ab09..9b056ddcae6 100644
--- a/source/blender/windowmanager/WM_toolsystem.h
+++ b/source/blender/windowmanager/WM_toolsystem.h
@@ -46,9 +46,9 @@ struct WorkSpace;
 /* wm_toolsystem.c  */
 
 #define WM_TOOLSYSTEM_SPACE_MASK ( \
-	(1 << SPACE_VIEW3D) | \
-	(1 << SPACE_I

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list