[Bf-blender-cvs] [916446e83f6] blender2.8: Cleanup: move keymap hierarchy into own file
Campbell Barton
noreply at git.blender.org
Tue Nov 20 01:38:38 CET 2018
Commit: 916446e83f63e0789fc1f5db4e6535340ef0be16
Author: Campbell Barton
Date: Tue Nov 20 11:36:44 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB916446e83f63e0789fc1f5db4e6535340ef0be16
Cleanup: move keymap hierarchy into own file
===================================================================
M release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
M release/scripts/modules/bl_keymap_utils/__init__.py
A release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
M release/scripts/modules/bpy_extras/keyconfig_utils.py
M release/scripts/modules/rna_keymap_ui.py
M tests/python/bl_keymap_completeness.py
===================================================================
diff --git a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
index fada1255e8b..f22675b481f 100644
--- a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
+++ b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
@@ -437,8 +437,8 @@ def dump_rna_messages(msgs, reports, settings, verbose=False):
reports, check_ctxt_rna, settings)
# And parse keymaps!
- from bpy_extras.keyconfig_utils import km_hierarchy
- walk_keymap_hierarchy(km_hierarchy(), "KM_HIERARCHY")
+ from bl_keymap_utils import keymap_hierarchy
+ walk_keymap_hierarchy(keymap_hierarchy.generate(), "KM_HIERARCHY")
##### Python source code #####
diff --git a/release/scripts/modules/bl_keymap_utils/__init__.py b/release/scripts/modules/bl_keymap_utils/__init__.py
index 6c1a7d2cd50..1c4a64081f8 100644
--- a/release/scripts/modules/bl_keymap_utils/__init__.py
+++ b/release/scripts/modules/bl_keymap_utils/__init__.py
@@ -21,4 +21,5 @@
__all__ = (
"io",
"keymap_from_toolbar",
+ "keymap_hierarchy",
)
diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
similarity index 60%
copy from release/scripts/modules/bpy_extras/keyconfig_utils.py
copy to release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
index 1c5671d737e..a769bb34d1e 100644
--- a/release/scripts/modules/bpy_extras/keyconfig_utils.py
+++ b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
@@ -18,6 +18,9 @@
# <pep8 compliant>
+__all__ = (
+ "generate",
+)
def _km_expand_from_toolsystem(space_type, context_mode):
def _fn():
@@ -37,7 +40,7 @@ def _km_hierarchy_iter_recursive(items):
yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3])))
-def km_hierarchy():
+def generate():
return list(_km_hierarchy_iter_recursive(_km_hierarchy))
@@ -201,137 +204,3 @@ _km_hierarchy = [
('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []),
('Eyedropper ColorBand PointSampling Map', 'EMPTY', 'WINDOW', []),
]
-
-
-# -----------------------------------------------------------------------------
-# Add-on helpers to properly (un)register their own keymaps.
-
-# Example of keymaps_description:
-keymaps_description_doc = """
-keymaps_description is a tuple (((keymap_description), (tuple of keymap_item_descriptions))).
-keymap_description is a tuple (name, space_type, region_type, is_modal).
-keymap_item_description is a tuple ({kw_args_for_keymap_new}, (tuple of properties)).
-kw_args_for_keymap_new is a mapping which keywords match parameters of keymap.new() function.
-tuple of properties is a tuple of pairs (prop_name, prop_value) (properties being those of called operator).
-
-Example:
-
-KEYMAPS = (
- # First, keymap identifiers (last bool is True for modal km).
- (('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', False), (
- # Then a tuple of keymap items, defined by a dict of kwargs for the km new func, and a tuple of tuples (name, val)
- # for ops properties, if needing non-default values.
- ({"idname": export_strips.SEQExportStrip.bl_idname, "type": 'P', "value": 'PRESS', "shift": True, "ctrl": True},
- ()),
- )),
-)
-"""
-
-
-def addon_keymap_register(wm, keymaps_description):
- """
- Register a set of keymaps for addons.
-
- """ + keymaps_description_doc
- kconf = wm.keyconfigs.addon
- if not kconf:
- return # happens in background mode...
- for km_info, km_items in keymaps_description:
- km_name, km_sptype, km_regtype, km_ismodal = km_info
- kmap = [k for k in kconf.keymaps
- if k.name == km_name and k.region_type == km_regtype and
- k.space_type == km_sptype and k.is_modal == km_ismodal]
- if kmap:
- kmap = kmap[0]
- else:
- kmap = kconf.keymaps.new(km_name, region_type=km_regtype, space_type=km_sptype, modal=km_ismodal)
- for kmi_kwargs, props in km_items:
- kmi = kmap.keymap_items.new(**kmi_kwargs)
- kmi.active = True
- for prop, val in props:
- setattr(kmi.properties, prop, val)
-
-
-def addon_keymap_unregister(wm, keymaps_description):
- """
- Unregister a set of keymaps for addons.
-
- """ + keymaps_description_doc
- # NOTE: We must also clean up user keyconfig, else, if user has customized one of add-on's shortcut, this
- # customization remains in memory, and comes back when re-enabling the addon, causing a segfault... :/
- kconfs = wm.keyconfigs
- for kconf in (kconfs.user, kconfs.addon):
- for km_info, km_items in keymaps_description:
- km_name, km_sptype, km_regtype, km_ismodal = km_info
- kmaps = (k for k in kconf.keymaps
- if k.name == km_name and k.region_type == km_regtype and
- k.space_type == km_sptype and k.is_modal == km_ismodal)
- for kmap in kmaps:
- for kmi_kwargs, props in km_items:
- idname = kmi_kwargs["idname"]
- for kmi in kmap.keymap_items:
- if kmi.idname == idname:
- kmap.keymap_items.remove(kmi)
- # NOTE: We won't remove addons keymaps themselves, other addons might also use them!
-
-
-# -----------------------------------------------------------------------------
-# Utility Functions
-
-def keyconfig_test(kc):
-
- def testEntry(kc, entry, src=None, parent=None):
- result = False
-
- idname, spaceid, regionid, children = entry
-
- km = kc.keymaps.find(idname, space_type=spaceid, region_type=regionid)
-
- if km:
- km = km.active()
- is_modal = km.is_modal
-
- if src:
- for item in km.keymap_items:
- if src.compare(item):
- print("===========")
- print(parent.name)
- print(_kmistr(src, is_modal).strip())
- print(km.name)
- print(_kmistr(item, is_modal).strip())
- result = True
-
- for child in children:
- if testEntry(kc, child, src, parent):
- result = True
- else:
- for i in range(len(km.keymap_items)):
- src = km.keymap_items[i]
-
- for child in children:
- if testEntry(kc, child, src, km):
- result = True
-
- for j in range(len(km.keymap_items) - i - 1):
- item = km.keymap_items[j + i + 1]
- if src.compare(item):
- print("===========")
- print(km.name)
- print(_kmistr(src, is_modal).strip())
- print(_kmistr(item, is_modal).strip())
- result = True
-
- for child in children:
- if testEntry(kc, child):
- result = True
-
- return result
-
- # -------------------------------------------------------------------------
- # Function body
-
- result = False
- for entry in km_hierarchy():
- if testEntry(kc, entry):
- result = True
- return result
diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py
index 1c5671d737e..b7342adcee7 100644
--- a/release/scripts/modules/bpy_extras/keyconfig_utils.py
+++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py
@@ -19,190 +19,6 @@
# <pep8 compliant>
-def _km_expand_from_toolsystem(space_type, context_mode):
- def _fn():
- from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
- for cls in ToolSelectPanelHelper.__subclasses__():
- if cls.bl_space_type == space_type:
- return cls.keymap_ui_hierarchy(context_mode)
- raise Exception("keymap not found")
- return _fn
-
-
-def _km_hierarchy_iter_recursive(items):
- for sub in items:
- if callable(sub):
- yield from sub()
- else:
- yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3])))
-
-
-def km_hierarchy():
- return list(_km_hierarchy_iter_recursive(_km_hierarchy))
-
-
-# bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...])
-
-# ('Script', 'EMPTY', 'WINDOW', []),
-
-
-# Access via 'km_hierarchy'.
-_km_hierarchy = [
- ('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit
- ('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot
- ('Screen Editing', 'EMPTY', 'WINDOW', []), # re-sizing, action corners
- ('Header', 'EMPTY', 'WINDOW', []), # header stuff (per region)
- ]),
-
- ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region)
- ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation
-
- ('User Interface', 'EMPTY', 'WINDOW', []),
-
- ('3D View', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform)
- ('Object Mode', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'OBJECT'),
- ]),
- ('Mesh', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_MESH'),
- ]),
- ('Curve', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_CURVE'),
- ]),
- ('Armature', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_ARMATURE'),
- ]),
- ('Metaball', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_METABALL'),
- ]),
- ('Lattice', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_LATTICE'),
- ]),
- ('Font', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_TEXT'),
- ]),
-
- ('Pose', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D'
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list