[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