[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