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 _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs