[Bf-blender-cvs] [8734a09379d] blender2.8: Tool System: use preset keymap loading logic

Campbell Barton noreply at git.blender.org
Thu Nov 15 03:38:46 CET 2018


Commit: 8734a09379dce6d2ca8d0fdd2083821233520e78
Author: Campbell Barton
Date:   Thu Nov 15 13:36:23 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB8734a09379dce6d2ca8d0fdd2083821233520e78

Tool System: use preset keymap loading logic

The data structures for tool keymaps and presets were different,
use the same structure and expose function publicly.

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

M	release/scripts/modules/bpy_extras/keyconfig_utils.py
M	release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py
M	release/scripts/startup/bl_ui/space_toolsystem_common.py

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

diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py
index 1cad1c965b0..0509c29ef19 100644
--- a/release/scripts/modules/bpy_extras/keyconfig_utils.py
+++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py
@@ -476,6 +476,7 @@ def keyconfig_test(kc):
 # so key configs are always data.
 from .keyconfig_utils_experimental import (
     keyconfig_export_as_data,
+    keymap_items_from_data,
     keyconfig_import_from_data,
     keyconfig_module_from_preset,
 )
diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py b/release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py
index b93da5ec6da..3077b2e2fbf 100644
--- a/release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py
+++ b/release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py
@@ -20,6 +20,7 @@
 
 __all__ = (
     "keyconfig_export_as_data",
+    "keymap_items_from_data",
     "keyconfig_import_from_data",
     "keyconfig_module_from_preset",
 )
@@ -205,44 +206,46 @@ def keyconfig_export_as_data(wm, kc, filepath, *, all_keymaps=False):
         fw("    keyconfig_import_from_data(os.path.splitext(os.path.basename(__file__))[0], keyconfig_data)\n")
 
 
+def _kmi_props_setattr(kmi_props, attr, value):
+    if type(value) is list:
+        kmi_subprop = getattr(kmi_props, attr)
+        for subattr, subvalue in value:
+            _kmi_props_setattr(kmi_subprop, subattr, subvalue)
+        return
+
+    try:
+        setattr(kmi_props, attr, value)
+    except AttributeError:
+        print(f"Warning: property '{attr}' not found in keymap item '{kmi_props.__class__.__name__}'")
+    except Exception as ex:
+        print(f"Warning: {ex!r}")
+
+
+def keymap_items_from_data(km, km_items, is_modal=False):
+    new_fn = getattr(km.keymap_items, "new_modal" if is_modal else "new")
+    for (kmi_idname, kmi_args, kmi_data) in km_items:
+        kmi = new_fn(kmi_idname, **kmi_args)
+        if kmi_data is not None:
+            if not kmi_data.get("active", True):
+                kmi.active = False
+            kmi_props_data = kmi_data.get("properties", None)
+            if kmi_props_data is not None:
+                kmi_props = kmi.properties
+                for attr, value in kmi_props_data:
+                    _kmi_props_setattr(kmi_props, attr, value)
+
+
 def keyconfig_import_from_data(name, keyconfig_data):
     # Load data in the format defined above.
     #
     # Runs at load time, keep this fast!
 
-    def kmi_props_setattr(kmi_props, attr, value):
-        if type(value) is list:
-            kmi_subprop = getattr(kmi_props, attr)
-            for subattr, subvalue in value:
-                kmi_props_setattr(kmi_subprop, subattr, subvalue)
-            return
-
-        try:
-            setattr(kmi_props, attr, value)
-        except AttributeError:
-            print(f"Warning: property '{attr}' not found in keymap item '{kmi_props.__class__.__name__}'")
-        except Exception as ex:
-            print(f"Warning: {ex!r}")
-
     import bpy
     wm = bpy.context.window_manager
     kc = wm.keyconfigs.new(name)
-    del name
-
     for (km_name, km_args, km_content) in keyconfig_data:
         km = kc.keymaps.new(km_name, **km_args)
-        is_modal = km_args.get("modal", False)
-        new_fn = getattr(km.keymap_items, "new_modal" if is_modal else "new")
-        for (kmi_idname, kmi_args, kmi_data) in km_content["items"]:
-            kmi = new_fn(kmi_idname, **kmi_args)
-            if kmi_data is not None:
-                if not kmi_data.get("active", True):
-                    kmi.active = False
-                kmi_props_data = kmi_data.get("properties", None)
-                if kmi_props_data is not None:
-                    kmi_props = kmi.properties
-                    for attr, value in kmi_props_data:
-                        kmi_props_setattr(kmi_props, attr, value)
+        keymap_items_from_data(km, km_content["items"], is_modal=km_args.get("modal", False))
 
 
 def keyconfig_module_from_preset(name, preset_reference_filename=None):
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index f3fa12f9ce4..31fe865ca41 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -47,20 +47,10 @@ _icon_cache = {}
 
 def _keymap_fn_from_seq(keymap_data):
 
-    # standalone
-    def _props_assign_recursive(rna_props, py_props):
-        for prop_id, value in py_props.items():
-            if isinstance(value, dict):
-                _props_assign_recursive(getattr(rna_props, prop_id), value)
-            else:
-                setattr(rna_props, prop_id, value)
-
     def keymap_fn(km):
-        for op_idname, op_props_dict, kmi_kwargs in keymap_fn.keymap_data:
-            kmi = km.keymap_items.new(op_idname, **kmi_kwargs)
-            kmi_props = kmi.properties
-            if op_props_dict:
-                _props_assign_recursive(kmi_props, op_props_dict)
+        if keymap_fn.keymap_data:
+            from bpy_extras.keyconfig_utils import keymap_items_from_data
+            keymap_items_from_data(km, keymap_fn.keymap_data)
     keymap_fn.keymap_data = keymap_data
     return keymap_fn



More information about the Bf-blender-cvs mailing list