keymap_hierarchy.py 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. # ##### BEGIN GPL LICENSE BLOCK #####
  2. #
  3. # This program is free software; you can redistribute it and/or
  4. # modify it under the terms of the GNU General Public License
  5. # as published by the Free Software Foundation; either version 2
  6. # of the License, or (at your option) any later version.
  7. #
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with this program; if not, write to the Free Software Foundation,
  15. # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  16. #
  17. # ##### END GPL LICENSE BLOCK #####
  18. # <pep8 compliant>
  19. __all__ = (
  20. "generate",
  21. )
  22. def _km_expand_from_toolsystem(space_type, context_mode):
  23. def _fn():
  24. from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
  25. for cls in ToolSelectPanelHelper.__subclasses__():
  26. if cls.bl_space_type == space_type:
  27. return cls.keymap_ui_hierarchy(context_mode)
  28. raise Exception("keymap not found")
  29. return _fn
  30. def _km_hierarchy_iter_recursive(items):
  31. for sub in items:
  32. if callable(sub):
  33. yield from sub()
  34. else:
  35. yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3])))
  36. def generate():
  37. return list(_km_hierarchy_iter_recursive(_km_hierarchy))
  38. # bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...])
  39. # ('Script', 'EMPTY', 'WINDOW', []),
  40. # Access via 'km_hierarchy'.
  41. _km_hierarchy = [
  42. ('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit
  43. ('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot
  44. ('Screen Editing', 'EMPTY', 'WINDOW', []), # re-sizing, action corners
  45. ('Region Context Menu', 'EMPTY', 'WINDOW', []), # header/footer/navigation_bar stuff (per region)
  46. ]),
  47. ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region)
  48. ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation
  49. ('User Interface', 'EMPTY', 'WINDOW', []),
  50. ('3D View', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform)
  51. ('Object Mode', 'EMPTY', 'WINDOW', [
  52. _km_expand_from_toolsystem('VIEW_3D', 'OBJECT'),
  53. ]),
  54. ('Mesh', 'EMPTY', 'WINDOW', [
  55. _km_expand_from_toolsystem('VIEW_3D', 'EDIT_MESH'),
  56. ]),
  57. ('Curve', 'EMPTY', 'WINDOW', [
  58. _km_expand_from_toolsystem('VIEW_3D', 'EDIT_CURVE'),
  59. ]),
  60. ('Armature', 'EMPTY', 'WINDOW', [
  61. _km_expand_from_toolsystem('VIEW_3D', 'EDIT_ARMATURE'),
  62. ]),
  63. ('Metaball', 'EMPTY', 'WINDOW', [
  64. _km_expand_from_toolsystem('VIEW_3D', 'EDIT_METABALL'),
  65. ]),
  66. ('Lattice', 'EMPTY', 'WINDOW', [
  67. _km_expand_from_toolsystem('VIEW_3D', 'EDIT_LATTICE'),
  68. ]),
  69. ('Font', 'EMPTY', 'WINDOW', [
  70. _km_expand_from_toolsystem('VIEW_3D', 'EDIT_TEXT'),
  71. ]),
  72. ('Pose', 'EMPTY', 'WINDOW', [
  73. _km_expand_from_toolsystem('VIEW_3D', 'POSE'),
  74. ]),
  75. ('Vertex Paint', 'EMPTY', 'WINDOW', [
  76. _km_expand_from_toolsystem('VIEW_3D', 'PAINT_VERTEX'),
  77. ]),
  78. ('Weight Paint', 'EMPTY', 'WINDOW', [
  79. _km_expand_from_toolsystem('VIEW_3D', 'PAINT_WEIGHT'),
  80. ]),
  81. ('Weight Paint Vertex Selection', 'EMPTY', 'WINDOW', []),
  82. ('Face Mask', 'EMPTY', 'WINDOW', []),
  83. # image and view3d
  84. ('Image Paint', 'EMPTY', 'WINDOW', [
  85. _km_expand_from_toolsystem('VIEW_3D', 'PAINT_TEXTURE'),
  86. ]),
  87. ('Sculpt', 'EMPTY', 'WINDOW', [
  88. _km_expand_from_toolsystem('VIEW_3D', 'SCULPT'),
  89. ]),
  90. ('Particle', 'EMPTY', 'WINDOW', [
  91. _km_expand_from_toolsystem('VIEW_3D', 'PARTICLE'),
  92. ]),
  93. ('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []),
  94. ('Custom Normals Modal Map', 'EMPTY', 'WINDOW', []),
  95. ('Bevel Modal Map', 'EMPTY', 'WINDOW', []),
  96. ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []),
  97. ('Paint Curve', 'EMPTY', 'WINDOW', []),
  98. ('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change
  99. ('View3D Walk Modal', 'EMPTY', 'WINDOW', []),
  100. ('View3D Fly Modal', 'EMPTY', 'WINDOW', []),
  101. ('View3D Rotate Modal', 'EMPTY', 'WINDOW', []),
  102. ('View3D Move Modal', 'EMPTY', 'WINDOW', []),
  103. ('View3D Zoom Modal', 'EMPTY', 'WINDOW', []),
  104. ('View3D Dolly Modal', 'EMPTY', 'WINDOW', []),
  105. # toolbar and properties
  106. ('3D View Generic', 'VIEW_3D', 'WINDOW', [
  107. _km_expand_from_toolsystem('VIEW_3D', None),
  108. ]),
  109. ]),
  110. ('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [
  111. ('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []),
  112. ]),
  113. ('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', [
  114. ('Dopesheet Generic', 'DOPESHEET_EDITOR', 'WINDOW', []),
  115. ]),
  116. ('NLA Editor', 'NLA_EDITOR', 'WINDOW', [
  117. ('NLA Channels', 'NLA_EDITOR', 'WINDOW', []),
  118. ('NLA Generic', 'NLA_EDITOR', 'WINDOW', []),
  119. ]),
  120. ('Timeline', 'TIMELINE', 'WINDOW', []),
  121. ('Image', 'IMAGE_EDITOR', 'WINDOW', [
  122. # Image (reverse order, UVEdit before Image).
  123. ('UV Editor', 'EMPTY', 'WINDOW', [
  124. _km_expand_from_toolsystem('IMAGE_EDITOR', 'UV'),
  125. ]),
  126. ('UV Sculpt', 'EMPTY', 'WINDOW', []),
  127. # Image and view3d.
  128. ('Image Paint', 'EMPTY', 'WINDOW', [
  129. _km_expand_from_toolsystem('IMAGE_EDITOR', 'PAINT'),
  130. ]),
  131. ('Image View', 'IMAGE_EDITOR', 'WINDOW', [
  132. _km_expand_from_toolsystem('IMAGE_EDITOR', 'VIEW'),
  133. ]),
  134. ('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [
  135. _km_expand_from_toolsystem('IMAGE_EDITOR', None),
  136. ]),
  137. ]),
  138. ('Outliner', 'OUTLINER', 'WINDOW', []),
  139. ('Node Editor', 'NODE_EDITOR', 'WINDOW', [
  140. ('Node Generic', 'NODE_EDITOR', 'WINDOW', []),
  141. ]),
  142. ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [
  143. ('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []),
  144. ('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []),
  145. ]),
  146. ('File Browser', 'FILE_BROWSER', 'WINDOW', [
  147. ('File Browser Main', 'FILE_BROWSER', 'WINDOW', []),
  148. ('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', []),
  149. ]),
  150. ('Info', 'INFO', 'WINDOW', []),
  151. ('Property Editor', 'PROPERTIES', 'WINDOW', []), # align context menu
  152. ('Text', 'TEXT_EDITOR', 'WINDOW', [
  153. ('Text Generic', 'TEXT_EDITOR', 'WINDOW', []),
  154. ]),
  155. ('Console', 'CONSOLE', 'WINDOW', []),
  156. ('Clip', 'CLIP_EDITOR', 'WINDOW', [
  157. ('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []),
  158. ('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []),
  159. ('Clip Dopesheet Editor', 'CLIP_EDITOR', 'WINDOW', []),
  160. ]),
  161. ('Grease Pencil', 'EMPTY', 'WINDOW', [ # grease pencil stuff (per region)
  162. ('Grease Pencil Stroke Edit Mode', 'EMPTY', 'WINDOW', []),
  163. ('Grease Pencil Stroke Paint (Draw brush)', 'EMPTY', 'WINDOW', []),
  164. ('Grease Pencil Stroke Paint (Fill)', 'EMPTY', 'WINDOW', []),
  165. ('Grease Pencil Stroke Paint (Erase)', 'EMPTY', 'WINDOW', []),
  166. ('Grease Pencil Stroke Paint Mode', 'EMPTY', 'WINDOW', []),
  167. ('Grease Pencil Stroke Sculpt Mode', 'EMPTY', 'WINDOW', []),
  168. ('Grease Pencil Stroke Weight Mode', 'EMPTY', 'WINDOW', []),
  169. ]),
  170. ('Mask Editing', 'EMPTY', 'WINDOW', []),
  171. ('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region)
  172. ('Markers', 'EMPTY', 'WINDOW', []), # markers (per region)
  173. ('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region)
  174. ('Animation Channels', 'EMPTY', 'WINDOW', []),
  175. ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []),
  176. ('Gesture Straight Line', 'EMPTY', 'WINDOW', []),
  177. ('Gesture Zoom Border', 'EMPTY', 'WINDOW', []),
  178. ('Gesture Box', 'EMPTY', 'WINDOW', []),
  179. ('Standard Modal Map', 'EMPTY', 'WINDOW', []),
  180. ('Transform Modal Map', 'EMPTY', 'WINDOW', []),
  181. ('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []),
  182. ('Eyedropper ColorRamp PointSampling Map', 'EMPTY', 'WINDOW', []),
  183. ]