Bevel: Make modal keymap instead of hardcoded.
[blender.git] / release / scripts / modules / bl_keymap_utils / keymap_hierarchy.py
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
19 # <pep8 compliant>
20
21 __all__ = (
22     "generate",
23 )
24
25 def _km_expand_from_toolsystem(space_type, context_mode):
26     def _fn():
27         from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
28         for cls in ToolSelectPanelHelper.__subclasses__():
29             if cls.bl_space_type == space_type:
30                 return cls.keymap_ui_hierarchy(context_mode)
31         raise Exception("keymap not found")
32     return _fn
33
34
35 def _km_hierarchy_iter_recursive(items):
36     for sub in items:
37         if callable(sub):
38             yield from sub()
39         else:
40             yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3])))
41
42
43 def generate():
44     return list(_km_hierarchy_iter_recursive(_km_hierarchy))
45
46
47 # bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...])
48
49 #    ('Script', 'EMPTY', 'WINDOW', []),
50
51
52 # Access via 'km_hierarchy'.
53 _km_hierarchy = [
54     ('Window', 'EMPTY', 'WINDOW', []),  # file save, window change, exit
55     ('Screen', 'EMPTY', 'WINDOW', [     # full screen, undo, screenshot
56         ('Screen Editing', 'EMPTY', 'WINDOW', []),    # re-sizing, action corners
57         ('Header', 'EMPTY', 'WINDOW', []),            # header stuff (per region)
58     ]),
59
60     ('View2D', 'EMPTY', 'WINDOW', []),    # view 2d navigation (per region)
61     ('View2D Buttons List', 'EMPTY', 'WINDOW', []),  # view 2d with buttons navigation
62
63     ('User Interface', 'EMPTY', 'WINDOW', []),
64
65     ('3D View', 'VIEW_3D', 'WINDOW', [  # view 3d navigation and generic stuff (select, transform)
66         ('Object Mode', 'EMPTY', 'WINDOW', [
67             _km_expand_from_toolsystem('VIEW_3D', 'OBJECT'),
68         ]),
69         ('Mesh', 'EMPTY', 'WINDOW', [
70             _km_expand_from_toolsystem('VIEW_3D', 'EDIT_MESH'),
71         ]),
72         ('Curve', 'EMPTY', 'WINDOW', [
73             _km_expand_from_toolsystem('VIEW_3D', 'EDIT_CURVE'),
74         ]),
75         ('Armature', 'EMPTY', 'WINDOW', [
76             _km_expand_from_toolsystem('VIEW_3D', 'EDIT_ARMATURE'),
77         ]),
78         ('Metaball', 'EMPTY', 'WINDOW', [
79             _km_expand_from_toolsystem('VIEW_3D', 'EDIT_METABALL'),
80         ]),
81         ('Lattice', 'EMPTY', 'WINDOW', [
82             _km_expand_from_toolsystem('VIEW_3D', 'EDIT_LATTICE'),
83         ]),
84         ('Font', 'EMPTY', 'WINDOW', [
85             _km_expand_from_toolsystem('VIEW_3D', 'EDIT_TEXT'),
86         ]),
87
88         ('Pose', 'EMPTY', 'WINDOW', [
89             _km_expand_from_toolsystem('VIEW_3D', 'POSE'),
90         ]),
91
92         ('Vertex Paint', 'EMPTY', 'WINDOW', [
93             _km_expand_from_toolsystem('VIEW_3D', 'PAINT_VERTEX'),
94         ]),
95         ('Weight Paint', 'EMPTY', 'WINDOW', [
96             _km_expand_from_toolsystem('VIEW_3D', 'PAINT_WEIGHT'),
97         ]),
98         ('Weight Paint Vertex Selection', 'EMPTY', 'WINDOW', []),
99         ('Face Mask', 'EMPTY', 'WINDOW', []),
100         # image and view3d
101         ('Image Paint', 'EMPTY', 'WINDOW', [
102             _km_expand_from_toolsystem('VIEW_3D', 'PAINT_TEXTURE'),
103         ]),
104         ('Sculpt', 'EMPTY', 'WINDOW', [
105             _km_expand_from_toolsystem('VIEW_3D', 'SCULPT'),
106         ]),
107
108         ('Particle', 'EMPTY', 'WINDOW', [
109             _km_expand_from_toolsystem('VIEW_3D', 'PARTICLE'),
110         ]),
111
112         ('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []),
113         ('Custom Normals Modal Map', 'EMPTY', 'WINDOW', []),
114         ('Bevel Modal Map', 'EMPTY', 'WINDOW', []),
115         ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []),
116         ('Paint Curve', 'EMPTY', 'WINDOW', []),
117
118         ('Object Non-modal', 'EMPTY', 'WINDOW', []),  # mode change
119
120         ('View3D Walk Modal', 'EMPTY', 'WINDOW', []),
121         ('View3D Fly Modal', 'EMPTY', 'WINDOW', []),
122         ('View3D Rotate Modal', 'EMPTY', 'WINDOW', []),
123         ('View3D Move Modal', 'EMPTY', 'WINDOW', []),
124         ('View3D Zoom Modal', 'EMPTY', 'WINDOW', []),
125         ('View3D Dolly Modal', 'EMPTY', 'WINDOW', []),
126
127         # toolbar and properties
128         ('3D View Generic', 'VIEW_3D', 'WINDOW', [
129             _km_expand_from_toolsystem('VIEW_3D', None),
130         ]),
131     ]),
132
133     ('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [
134         ('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []),
135     ]),
136     ('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', [
137         ('Dopesheet Generic', 'DOPESHEET_EDITOR', 'WINDOW', []),
138     ]),
139     ('NLA Editor', 'NLA_EDITOR', 'WINDOW', [
140         ('NLA Channels', 'NLA_EDITOR', 'WINDOW', []),
141         ('NLA Generic', 'NLA_EDITOR', 'WINDOW', []),
142     ]),
143     ('Timeline', 'TIMELINE', 'WINDOW', []),
144
145     ('Image', 'IMAGE_EDITOR', 'WINDOW', [
146         ('UV Editor', 'EMPTY', 'WINDOW', []),  # image (reverse order, UVEdit before Image)
147         ('Image Paint', 'EMPTY', 'WINDOW', []),  # image and view3d
148         ('UV Sculpt', 'EMPTY', 'WINDOW', []),
149         ('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [
150             _km_expand_from_toolsystem('IMAGE_EDITOR', None),
151         ]),
152     ]),
153
154     ('Outliner', 'OUTLINER', 'WINDOW', []),
155
156     ('Node Editor', 'NODE_EDITOR', 'WINDOW', [
157         ('Node Generic', 'NODE_EDITOR', 'WINDOW', []),
158     ]),
159     ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [
160         ('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []),
161         ('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []),
162     ]),
163
164     ('File Browser', 'FILE_BROWSER', 'WINDOW', [
165         ('File Browser Main', 'FILE_BROWSER', 'WINDOW', []),
166         ('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', []),
167     ]),
168
169     ('Info', 'INFO', 'WINDOW', []),
170
171     ('Property Editor', 'PROPERTIES', 'WINDOW', []),  # align context menu
172
173     ('Text', 'TEXT_EDITOR', 'WINDOW', [
174         ('Text Generic', 'TEXT_EDITOR', 'WINDOW', []),
175     ]),
176     ('Console', 'CONSOLE', 'WINDOW', []),
177     ('Clip', 'CLIP_EDITOR', 'WINDOW', [
178         ('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []),
179         ('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []),
180         ('Clip Dopesheet Editor', 'CLIP_EDITOR', 'WINDOW', []),
181     ]),
182
183     ('Grease Pencil', 'EMPTY', 'WINDOW', [  # grease pencil stuff (per region)
184         ('Grease Pencil Stroke Edit Mode', 'EMPTY', 'WINDOW', []),
185         ('Grease Pencil Stroke Paint (Draw brush)', 'EMPTY', 'WINDOW', []),
186         ('Grease Pencil Stroke Paint (Fill)', 'EMPTY', 'WINDOW', []),
187         ('Grease Pencil Stroke Paint (Erase)', 'EMPTY', 'WINDOW', []),
188         ('Grease Pencil Stroke Paint Mode', 'EMPTY', 'WINDOW', []),
189         ('Grease Pencil Stroke Sculpt Mode', 'EMPTY', 'WINDOW', []),
190         ('Grease Pencil Stroke Weight Mode', 'EMPTY', 'WINDOW', []),
191     ]),
192     ('Mask Editing', 'EMPTY', 'WINDOW', []),
193     ('Frames', 'EMPTY', 'WINDOW', []),    # frame navigation (per region)
194     ('Markers', 'EMPTY', 'WINDOW', []),    # markers (per region)
195     ('Animation', 'EMPTY', 'WINDOW', []),    # frame change on click, preview range (per region)
196     ('Animation Channels', 'EMPTY', 'WINDOW', []),
197
198     ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []),
199     ('Gesture Straight Line', 'EMPTY', 'WINDOW', []),
200     ('Gesture Zoom Border', 'EMPTY', 'WINDOW', []),
201     ('Gesture Box', 'EMPTY', 'WINDOW', []),
202
203     ('Standard Modal Map', 'EMPTY', 'WINDOW', []),
204     ('Transform Modal Map', 'EMPTY', 'WINDOW', []),
205     ('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []),
206     ('Eyedropper ColorBand PointSampling Map', 'EMPTY', 'WINDOW', []),
207 ]