[Bf-blender-cvs] [e7ee9cfd9e5] blender2.8: Tool System: tools are now set by name

Campbell Barton noreply at git.blender.org
Sun May 13 10:04:37 CEST 2018


Commit: e7ee9cfd9e510561d87d2fd974a9f336e7eb32eb
Author: Campbell Barton
Date:   Sun May 13 10:01:56 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBe7ee9cfd9e510561d87d2fd974a9f336e7eb32eb

Tool System: tools are now set by name

This avoids having to store the tool definition in the operator
properties (on redraw).

Now just set the name, note this means we can't show the keymap in the
tool-tip anymore. This will eventually be shown in the status bar.

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

M	release/scripts/startup/bl_ui/space_toolsystem_common.py
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/interface_region_tooltip.c

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

diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index ee2f11c46d0..84c9b57f590 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -295,16 +295,8 @@ class ToolSelectPanelHelper:
         )
 
     @staticmethod
-    def _tool_vars_from_button_with_index(context):
-        props = context.button_operator
-        return (
-            (
-                props.keymap or None or None,
-                props.manipulator_group or None,
-                props.data_block or None,
-            ),
-            props.index,
-        )
+    def _tool_text_from_button(context):
+        return context.button_operator.name
 
     @classmethod
     def _km_action_simple(cls, kc, context_mode, text, keymap_fn):
@@ -500,24 +492,20 @@ class ToolSelectPanelHelper:
             sub = ui_gen.send(False)
 
             if use_menu:
-                props = sub.operator_menu_hold(
-                    "wm.tool_set",
+                sub.operator_menu_hold(
+                    "wm.tool_set_by_name",
                     text=item.text if show_text else "",
                     depress=is_active,
                     menu="WM_MT_toolsystem_submenu",
                     icon_value=icon_value,
-                )
+                ).name = item.text
             else:
-                props = sub.operator(
-                    "wm.tool_set",
+                sub.operator(
+                    "wm.tool_set_by_name",
                     text=item.text if show_text else "",
                     depress=is_active,
                     icon_value=icon_value,
-                )
-            props.keymap = tool_def[0] or ""
-            props.manipulator_group = tool_def[1] or ""
-            props.data_block = tool_def[2] or ""
-            props.index = index
+                ).name = item.text
         # Signal to finish any remaining layout edits.
         ui_gen.send(None)
 
@@ -544,29 +532,25 @@ class WM_MT_toolsystem_submenu(Menu):
         # Lookup the tool definitions based on the space-type.
         cls = ToolSelectPanelHelper._tool_class_from_space_type(context.space_data.type)
         if cls is not None:
-            tool_def_button, index_button = ToolSelectPanelHelper._tool_vars_from_button_with_index(context)
+            button_text = ToolSelectPanelHelper._tool_text_from_button(context)
             for item_group in cls.tools_from_context(context):
                 if type(item_group) is tuple:
-                    if index_button < len(item_group):
-                        item = item_group[index_button]
-                        tool_def, icon_name = ToolSelectPanelHelper._tool_vars_from_def(item, context_mode)
-                        is_active = (tool_def == tool_def_button)
-                        if is_active:
-                            return cls, item_group, index_button
-        return None, None, -1
+                    for sub_item in item_group:
+                        if sub_item.text == button_text:
+                            return cls, item_group
+        return None, None
 
     def draw(self, context):
         context_mode = context.mode
         layout = self.layout
         layout.scale_y = 2.0
 
-        cls, item_group, index_active = self._tool_group_from_button(context)
+        cls, item_group = self._tool_group_from_button(context)
         if item_group is None:
             # Should never happen, just in case
             layout.label("Unable to find toolbar group")
             return
 
-        index = 0
         for item in item_group:
             if item is None:
                 layout.separator()
@@ -574,15 +558,10 @@ class WM_MT_toolsystem_submenu(Menu):
             tool_def, icon_name = ToolSelectPanelHelper._tool_vars_from_def(item, context_mode)
             icon_value = ToolSelectPanelHelper._icon_value_from_icon_handle(icon_name)
             props = layout.operator(
-                "wm.tool_set",
+                "wm.tool_set_by_name",
                 text=item.text,
                 icon_value=icon_value,
-            )
-            props.keymap = tool_def[0] or ""
-            props.manipulator_group = tool_def[1] or ""
-            props.data_block = tool_def[2] or ""
-            props.index = index
-            index += 1
+            ).name = item.text
 
 
 def activate_by_name(context, text):
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 64df1bb06e6..1687562d3e0 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -10332,7 +10332,7 @@ bool UI_but_is_tool(const uiBut *but)
 	if (but->optype != NULL) {
 		static wmOperatorType *ot = NULL;
 		if (ot == NULL) {
-			ot = WM_operatortype_find("WM_OT_tool_set", false);
+			ot = WM_operatortype_find("WM_OT_tool_set_by_name", false);
 		}
 		if (but->optype == ot) {
 			return true;
diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c
index d016deb26cb..3a1c0e7c06e 100644
--- a/source/blender/editors/interface/interface_region_tooltip.c
+++ b/source/blender/editors/interface/interface_region_tooltip.c
@@ -896,7 +896,8 @@ ARegion *UI_tooltip_create_from_button(bContext *C, ARegion *butregion, uiBut *b
 
 	/* custom tips for pre-defined operators */
 	if (but->optype) {
-		if (STREQ(but->optype->idname, "WM_OT_tool_set")) {
+		/* TODO(campbell): we now use 'WM_OT_tool_set_by_name', this logic will be moved into the status bar. */
+		if (false && STREQ(but->optype->idname, "WM_OT_tool_set")) {
 			char keymap[64] = "";
 			RNA_string_get(but->opptr, "keymap", keymap);
 			if (keymap[0]) {



More information about the Bf-blender-cvs mailing list