Style edit (mostly), use """ for docstrings (not ''').
[blender-addons-contrib.git] / presets / keyconfig / blender_2012_experimental.py
1 """ An experimental new keymap for Blender.
2     Work in progress!
3 """
4 import bpy
5
6 ######################
7 # Misc configuration
8 ######################
9 DEVELOPER_HOTKEYS = False  # Weird hotkeys that only developers use
10 MAYA_STYLE_MANIPULATORS = False  # Maya-style "QWER" hotkeys for manipulators
11 SUBSURF_RELATIVE = True  # Make subsurf hotkeys work by relative
12                          # shifting instead of absolute setting
13 # Left mouse-button select
14 bpy.context.user_preferences.inputs.select_mouse = 'LEFT'
15
16 # Basic transform keys
17 TRANSLATE_KEY = 'R'
18 ROTATE_KEY = 'E'
19 SCALE_KEY = 'W'
20
21 # Specials Menu Key
22 SPECIALS_MENU_KEY = 'ACCENT_GRAVE'
23
24
25 ################################
26 # Helper functions and classes
27 ################################
28 class SetManipulator(bpy.types.Operator):
29     """Set's the manipulator mode"""
30     bl_idname = "view3d.manipulator_set"
31     bl_label = "Set Manipulator"
32     mode = bpy.props.EnumProperty(items=[("NONE", "None", ""),
33                                          ("TRANSLATE", "Translate", ""),
34                                          ("ROTATE", "Rotate", ""),
35                                          ("SCALE", "Scale", "")],
36                                          default="NONE")
37
38     def execute(self, context):
39         if self.mode == "NONE":
40             context.space_data.show_manipulator = False
41         elif self.mode == "TRANSLATE":
42             context.space_data.show_manipulator = True
43             context.space_data.use_manipulator_translate = True
44             context.space_data.use_manipulator_rotate = False
45             context.space_data.use_manipulator_scale = False
46         elif self.mode == "ROTATE":
47             context.space_data.show_manipulator = True
48             context.space_data.use_manipulator_translate = False
49             context.space_data.use_manipulator_rotate = True
50             context.space_data.use_manipulator_scale = False
51         elif self.mode == "SCALE":
52             context.space_data.show_manipulator = True
53             context.space_data.use_manipulator_translate = False
54             context.space_data.use_manipulator_rotate = False
55             context.space_data.use_manipulator_scale = True
56
57         return {'FINISHED'}
58 bpy.utils.register_class(SetManipulator)
59
60
61 class ModeSwitchMenu(bpy.types.Menu):
62     """ A menu for switching between object modes.
63     """
64     bl_idname = "OBJECT_MT_mode_switch_menu"
65     bl_label = "Switch Mode"
66
67     def draw(self, context):
68         layout = self.layout
69         layout.operator_enum("object.mode_set", "mode")
70 bpy.utils.register_class(ModeSwitchMenu)
71
72 # Temporary work around: Blender does not properly limit the mode switch menu
73 # items until the first mode switch (e.g. mesh objects will show pose mode as
74 # an option).
75 # TODO: file a bug report for this behavior.
76 bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
77
78
79 class ObjectDeleteNoConfirm(bpy.types.Operator):
80     """Delete selected objects without the confirmation popup"""
81     bl_idname = "object.delete_no_confirm"
82     bl_label = "Delete Objects No Confirm"
83     bl_options = {'UNDO'}
84     
85     @classmethod
86     def poll(cls, context):
87         return context.active_object is not None
88
89     def execute(self, context):
90         bpy.ops.object.delete()
91
92         return {'FINISHED'}
93 bpy.utils.register_class(ObjectDeleteNoConfirm)
94
95
96 class ShiftSubsurfLevel(bpy.types.Operator):
97     """Shift the subsurf level of the selected objects up or """ \
98     """down by the given amount (has maximum limit, to avoid """ \
99     """going crazy and running out of RAM)"""
100     bl_idname = "object.shift_subsurf_level"
101     bl_label = "Shift Subsurf Level"
102
103     delta = bpy.props.IntProperty(name="Delta", description="Amount to increase/decrease the subsurf level.", default=1)
104     min = bpy.props.IntProperty(name="Minimum", description="The lowest subsurf level to shift to.", default=0)
105     max = bpy.props.IntProperty(name="Maximum", description="The highest subsurf level to shift to.", default=4)
106
107     @classmethod
108     def poll(cls, context):
109         return context.active_object is not None
110
111     def execute(self, context):
112         for obj in context.selected_objects:
113             # Find the last subsurf modifier in the stack
114             m = None
115             for mod in obj.modifiers:
116                 if mod.type == "SUBSURF":
117                     m = mod
118
119             # Add a subsurf modifier if necessary
120             if not m and self.delta > 0:
121                 m = obj.modifiers.new(name="Subsurf", type='SUBSURF')
122                 m.levels = 0
123
124             # Adjust it's subsurf level
125             if m:
126                 if self.delta > 0:
127                     if (m.levels + self.delta) <= self.max:
128                         m.levels += self.delta
129                 elif self.delta < 0:
130                     if (m.levels + self.delta) >= self.min:
131                         m.levels += self.delta
132         return {'FINISHED'}
133 bpy.utils.register_class(ShiftSubsurfLevel)
134
135
136 class SetEditMeshSelectMode(bpy.types.Operator):
137     """Set edit mesh select mode (vert, edge, face)"""
138     bl_idname = "view3d.set_edit_mesh_select_mode"
139     bl_label = "Set Edit Mesh Select Mode"
140     mode = bpy.props.EnumProperty(items=[("VERT", "Vertex", ""),
141                                          ("EDGE", "Edge", ""),
142                                          ("FACE", "Face", "")],
143                                          default="VERT")
144     toggle = bpy.props.BoolProperty(name="Toggle", default=False)
145     
146     @classmethod
147     def poll(cls, context):
148         return context.active_object is not None
149     
150     def execute(self, context):
151         if self.mode == "VERT":
152             mode = 0
153         elif self.mode == "EDGE":
154             mode = 1
155         else:  # self.mode == "FACE"
156             mode = 2
157         
158         select_mode = context.tool_settings.mesh_select_mode
159         if self.toggle:
160             select_mode[mode] = [True, False][select_mode[mode]]
161         else:
162             select_mode[mode] = True
163             for i in range(0,3):
164                 if i != mode:
165                     select_mode[i] = False
166             
167         return {'FINISHED'}
168 bpy.utils.register_class(SetEditMeshSelectMode)
169
170
171 ###########
172 # Keymaps
173 ###########
174
175 def clear_keymap(kc):
176     """ Clears all the keymaps, so we can start from scratch, building
177         things back up again one-by-one.
178     """
179     # Map Window
180     km = kc.keymaps.new('Window', space_type='EMPTY', region_type='WINDOW', modal=False)
181
182     # Map Screen
183     km = kc.keymaps.new('Screen', space_type='EMPTY', region_type='WINDOW', modal=False)
184
185     # Editing this part of the keymap seems
186     # to cause problems, so leaving alone.
187     # Map Screen Editing
188     #km = kc.keymaps.new('Screen Editing', space_type='EMPTY', region_type='WINDOW', modal=False)
189
190     # Map View2D
191     km = kc.keymaps.new('View2D', space_type='EMPTY', region_type='WINDOW', modal=False)
192
193     # Map Frames
194     km = kc.keymaps.new('Frames', space_type='EMPTY', region_type='WINDOW', modal=False)
195
196     # Map Header
197     km = kc.keymaps.new('Header', space_type='EMPTY', region_type='WINDOW', modal=False)
198
199     # Map View2D Buttons List
200     km = kc.keymaps.new('View2D Buttons List', space_type='EMPTY', region_type='WINDOW', modal=False)
201
202     # Map Property Editor
203     km = kc.keymaps.new('Property Editor', space_type='PROPERTIES', region_type='WINDOW', modal=False)
204
205     # Map Markers
206     km = kc.keymaps.new('Markers', space_type='EMPTY', region_type='WINDOW', modal=False)
207
208     # Map Animation
209     km = kc.keymaps.new('Animation', space_type='EMPTY', region_type='WINDOW', modal=False)
210
211     # Map Timeline
212     km = kc.keymaps.new('Timeline', space_type='TIMELINE', region_type='WINDOW', modal=False)
213
214     # Map Outliner
215     km = kc.keymaps.new('Outliner', space_type='OUTLINER', region_type='WINDOW', modal=False)
216
217     # Map 3D View Generic
218     km = kc.keymaps.new('3D View Generic', space_type='VIEW_3D', region_type='WINDOW', modal=False)
219
220     # Map Grease Pencil
221     km = kc.keymaps.new('Grease Pencil', space_type='EMPTY', region_type='WINDOW', modal=False)
222
223     # Map Face Mask
224     km = kc.keymaps.new('Face Mask', space_type='EMPTY', region_type='WINDOW', modal=False)
225
226     # Map Pose
227     km = kc.keymaps.new('Pose', space_type='EMPTY', region_type='WINDOW', modal=False)
228
229     # Map Object Mode
230     km = kc.keymaps.new('Object Mode', space_type='EMPTY', region_type='WINDOW', modal=False)
231
232     # Map Image Paint
233     km = kc.keymaps.new('Image Paint', space_type='EMPTY', region_type='WINDOW', modal=False)
234
235     # Map Vertex Paint
236     km = kc.keymaps.new('Vertex Paint', space_type='EMPTY', region_type='WINDOW', modal=False)
237
238     # Map Weight Paint
239     km = kc.keymaps.new('Weight Paint', space_type='EMPTY', region_type='WINDOW', modal=False)
240
241     # Map Sculpt
242     km = kc.keymaps.new('Sculpt', space_type='EMPTY', region_type='WINDOW', modal=False)
243
244     # Map Mesh
245     km = kc.keymaps.new('Mesh', space_type='EMPTY', region_type='WINDOW', modal=False)
246
247     # Map Curve
248     km = kc.keymaps.new('Curve', space_type='EMPTY', region_type='WINDOW', modal=False)
249
250     # Map Armature
251     km = kc.keymaps.new('Armature', space_type='EMPTY', region_type='WINDOW', modal=False)
252
253     # Map Metaball
254     km = kc.keymaps.new('Metaball', space_type='EMPTY', region_type='WINDOW', modal=False)
255
256     # Map Lattice
257     km = kc.keymaps.new('Lattice', space_type='EMPTY', region_type='WINDOW', modal=False)
258
259     # Map Particle
260     km = kc.keymaps.new('Particle', space_type='EMPTY', region_type='WINDOW', modal=False)
261
262     # Map Font
263     km = kc.keymaps.new('Font', space_type='EMPTY', region_type='WINDOW', modal=False)
264
265     # Map Object Non-modal
266     km = kc.keymaps.new('Object Non-modal', space_type='EMPTY', region_type='WINDOW', modal=False)
267
268     # Map 3D View
269     km = kc.keymaps.new('3D View', space_type='VIEW_3D', region_type='WINDOW', modal=False)
270
271     # Map View3D Gesture Circle
272     km = kc.keymaps.new('View3D Gesture Circle', space_type='EMPTY', region_type='WINDOW', modal=True)
273
274     # Map Gesture Border
275     km = kc.keymaps.new('Gesture Border', space_type='EMPTY', region_type='WINDOW', modal=True)
276
277     # Map Standard Modal Map
278     km = kc.keymaps.new('Standard Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True)
279
280     # Map Animation Channels
281     km = kc.keymaps.new('Animation Channels', space_type='EMPTY', region_type='WINDOW', modal=False)
282
283     # Map UV Editor
284     km = kc.keymaps.new('UV Editor', space_type='EMPTY', region_type='WINDOW', modal=False)
285
286     # Map Transform Modal Map
287     km = kc.keymaps.new('Transform Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True)
288
289     # Map UV Sculpt
290     km = kc.keymaps.new('UV Sculpt', space_type='EMPTY', region_type='WINDOW', modal=False)
291
292     # Map View3D Fly Modal
293     km = kc.keymaps.new('View3D Fly Modal', space_type='EMPTY', region_type='WINDOW', modal=True)
294
295     # Map View3D Rotate Modal
296     km = kc.keymaps.new('View3D Rotate Modal', space_type='EMPTY', region_type='WINDOW', modal=True)
297
298     # Map View3D Move Modal
299     km = kc.keymaps.new('View3D Move Modal', space_type='EMPTY', region_type='WINDOW', modal=True)
300
301     # Map View3D Zoom Modal
302     km = kc.keymaps.new('View3D Zoom Modal', space_type='EMPTY', region_type='WINDOW', modal=True)
303
304     # Map Graph Editor Generic
305     km = kc.keymaps.new('Graph Editor Generic', space_type='GRAPH_EDITOR', region_type='WINDOW', modal=False)
306
307     # Map Graph Editor
308     km = kc.keymaps.new('Graph Editor', space_type='GRAPH_EDITOR', region_type='WINDOW', modal=False)
309
310     # Map Image Generic
311     km = kc.keymaps.new('Image Generic', space_type='IMAGE_EDITOR', region_type='WINDOW', modal=False)
312
313     # Map Image
314     km = kc.keymaps.new('Image', space_type='IMAGE_EDITOR', region_type='WINDOW', modal=False)
315
316     # Map Node Generic
317     km = kc.keymaps.new('Node Generic', space_type='NODE_EDITOR', region_type='WINDOW', modal=False)
318
319     # Map Node Editor
320     km = kc.keymaps.new('Node Editor', space_type='NODE_EDITOR', region_type='WINDOW', modal=False)
321
322     # Map File Browser
323     km = kc.keymaps.new('File Browser', space_type='FILE_BROWSER', region_type='WINDOW', modal=False)
324
325     # Map File Browser Main
326     km = kc.keymaps.new('File Browser Main', space_type='FILE_BROWSER', region_type='WINDOW', modal=False)
327
328     # Map File Browser Buttons
329     km = kc.keymaps.new('File Browser Buttons', space_type='FILE_BROWSER', region_type='WINDOW', modal=False)
330
331     # Map Dopesheet
332     km = kc.keymaps.new('Dopesheet', space_type='DOPESHEET_EDITOR', region_type='WINDOW', modal=False)
333
334     # Map NLA Generic
335     km = kc.keymaps.new('NLA Generic', space_type='NLA_EDITOR', region_type='WINDOW', modal=False)
336
337     # Map NLA Channels
338     km = kc.keymaps.new('NLA Channels', space_type='NLA_EDITOR', region_type='WINDOW', modal=False)
339
340     # Map NLA Editor
341     km = kc.keymaps.new('NLA Editor', space_type='NLA_EDITOR', region_type='WINDOW', modal=False)
342
343     # Map Text
344     km = kc.keymaps.new('Text', space_type='TEXT_EDITOR', region_type='WINDOW', modal=False)
345
346     # Map Sequencer
347     km = kc.keymaps.new('Sequencer', space_type='SEQUENCE_EDITOR', region_type='WINDOW', modal=False)
348
349     # Map Logic Editor
350     km = kc.keymaps.new('Logic Editor', space_type='LOGIC_EDITOR', region_type='WINDOW', modal=False)
351
352     # Map Console
353     km = kc.keymaps.new('Console', space_type='CONSOLE', region_type='WINDOW', modal=False)
354
355     # Map Clip
356     km = kc.keymaps.new('Clip', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False)
357
358     # Map Clip Editor
359     km = kc.keymaps.new('Clip Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False)
360
361     # Map Clip Graph Editor
362     km = kc.keymaps.new('Clip Graph Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False)
363
364
365
366
367
368 def MapAdd_Window(kc):
369     """ Window Map
370     """
371     km = kc.keymaps.new('Window', space_type='EMPTY', region_type='WINDOW', modal=False)
372
373     # Quit
374     kmi = km.keymap_items.new('wm.quit_blender', 'Q', 'PRESS', ctrl=True)
375
376     # Operator search menu
377     kmi = km.keymap_items.new('wm.search_menu', 'TAB', 'CLICK')
378
379     # Open
380     kmi = km.keymap_items.new('wm.open_mainfile', 'O', 'CLICK', ctrl=True)
381     kmi = km.keymap_items.new('wm.link_append', 'O', 'CLICK', ctrl=True, alt=True)
382     kmi = km.keymap_items.new('wm.link_append', 'O', 'CLICK', ctrl=True, shift=True)
383     kmi.properties.link = False
384     kmi = km.keymap_items.new('wm.read_homefile', 'N', 'CLICK', ctrl=True)
385
386     # Save
387     kmi = km.keymap_items.new('wm.save_mainfile', 'S', 'CLICK', ctrl=True)
388     kmi = km.keymap_items.new('wm.save_as_mainfile', 'S', 'CLICK', shift=True, ctrl=True)
389     kmi = km.keymap_items.new('wm.save_homefile', 'U', 'CLICK', ctrl=True)
390
391     # NDof Device
392     kmi = km.keymap_items.new('wm.call_menu', 'NDOF_BUTTON_MENU', 'PRESS')
393     kmi.properties.name = 'USERPREF_MT_ndof_settings'
394     kmi = km.keymap_items.new('wm.ndof_sensitivity_change', 'NDOF_BUTTON_PLUS', 'PRESS')
395     kmi.properties.decrease = False
396     kmi.properties.fast = False
397     kmi = km.keymap_items.new('wm.ndof_sensitivity_change', 'NDOF_BUTTON_MINUS', 'PRESS')
398     kmi.properties.decrease = True
399     kmi.properties.fast = False
400     kmi = km.keymap_items.new('wm.ndof_sensitivity_change', 'NDOF_BUTTON_PLUS', 'PRESS', shift=True)
401     kmi.properties.decrease = False
402     kmi.properties.fast = True
403     kmi = km.keymap_items.new('wm.ndof_sensitivity_change', 'NDOF_BUTTON_MINUS', 'PRESS', shift=True)
404     kmi.properties.decrease = True
405     kmi.properties.fast = True
406
407     # Misc
408     kmi = km.keymap_items.new('wm.window_fullscreen_toggle', 'F11', 'CLICK', alt=True)
409
410     # Development/debugging
411     if DEVELOPER_HOTKEYS:
412         kmi = km.keymap_items.new('wm.redraw_timer', 'T', 'CLICK', ctrl=True, alt=True)
413         kmi = km.keymap_items.new('wm.debug_menu', 'D', 'CLICK', ctrl=True, alt=True)
414
415     # ???
416     kmi = km.keymap_items.new('info.reports_display_update', 'TIMER', 'ANY', any=True)
417
418
419 def MapAdd_Screen(kc):
420     """ Screen Map
421     """
422     km = kc.keymaps.new('Screen', space_type='EMPTY', region_type='WINDOW', modal=False)
423
424     kmi = km.keymap_items.new('screen.animation_step', 'TIMER0', 'ANY', any=True)
425     kmi = km.keymap_items.new('screen.screen_set', 'RIGHT_ARROW', 'PRESS', ctrl=True)
426     kmi.properties.delta = 1
427     kmi = km.keymap_items.new('screen.screen_set', 'LEFT_ARROW', 'PRESS', ctrl=True)
428     kmi.properties.delta = -1
429     kmi = km.keymap_items.new('screen.screen_full_area', 'UP_ARROW', 'PRESS', ctrl=True)
430     kmi = km.keymap_items.new('screen.screen_full_area', 'DOWN_ARROW', 'PRESS', ctrl=True)
431     kmi = km.keymap_items.new('screen.screen_full_area', 'SPACE', 'PRESS', shift=True)
432     kmi = km.keymap_items.new('screen.screenshot', 'F3', 'PRESS', ctrl=True)
433     kmi = km.keymap_items.new('screen.screencast', 'F3', 'PRESS', alt=True)
434     kmi = km.keymap_items.new('screen.region_quadview', 'Q', 'PRESS', ctrl=True, alt=True)
435     kmi = km.keymap_items.new('screen.repeat_history', 'F3', 'PRESS')
436     kmi = km.keymap_items.new('screen.repeat_last', 'R', 'PRESS', shift=True)
437     kmi = km.keymap_items.new('screen.region_flip', 'F5', 'PRESS')
438     kmi = km.keymap_items.new('screen.redo_last', 'F6', 'PRESS')
439     kmi = km.keymap_items.new('script.reload', 'F8', 'PRESS')
440     kmi = km.keymap_items.new('file.execute', 'RET', 'PRESS')
441     kmi = km.keymap_items.new('file.execute', 'NUMPAD_ENTER', 'PRESS')
442     kmi = km.keymap_items.new('file.cancel', 'ESC', 'PRESS')
443     kmi = km.keymap_items.new('ed.undo', 'Z', 'PRESS', ctrl=True)
444     kmi = km.keymap_items.new('ed.redo', 'Z', 'PRESS', shift=True, ctrl=True)
445     kmi = km.keymap_items.new('ed.undo_history', 'Z', 'PRESS', ctrl=True, alt=True)
446     kmi = km.keymap_items.new('render.render', 'F12', 'PRESS')
447     kmi = km.keymap_items.new('render.render', 'F12', 'PRESS', ctrl=True)
448     kmi.properties.animation = True
449     kmi = km.keymap_items.new('render.view_cancel', 'ESC', 'PRESS')
450     kmi = km.keymap_items.new('render.view_show', 'F11', 'PRESS')
451     kmi = km.keymap_items.new('render.play_rendered_anim', 'F11', 'PRESS', ctrl=True)
452     kmi = km.keymap_items.new('screen.userpref_show', 'U', 'PRESS', ctrl=True, alt=True)
453
454     # Editing this seems to cause problems.
455     # TODO: file bug report
456     # Screen Editing
457     #km = kc.keymaps.new('Screen Editing', space_type='EMPTY', region_type='WINDOW', modal=False)
458     #
459     #kmi = km.keymap_items.new('screen.actionzone', 'LEFTMOUSE', 'PRESS')
460     #kmi.properties.modifier = 0
461     #kmi = km.keymap_items.new('screen.actionzone', 'LEFTMOUSE', 'PRESS', shift=True)
462     #kmi.properties.modifier = 1
463     #kmi = km.keymap_items.new('screen.actionzone', 'LEFTMOUSE', 'PRESS', ctrl=True)
464     #kmi.properties.modifier = 2
465     #kmi = km.keymap_items.new('screen.area_split', 'NONE', 'ANY')
466     #kmi = km.keymap_items.new('screen.area_join', 'NONE', 'ANY')
467     #kmi = km.keymap_items.new('screen.area_dupli', 'NONE', 'ANY', shift=True)
468     #kmi = km.keymap_items.new('screen.area_swap', 'NONE', 'ANY', ctrl=True)
469     #kmi = km.keymap_items.new('screen.region_scale', 'NONE', 'ANY')
470     #kmi = km.keymap_items.new('screen.area_move', 'LEFTMOUSE', 'PRESS')
471     #kmi = km.keymap_items.new('screen.area_options', 'RIGHTMOUSE', 'PRESS')
472
473
474 def MapAdd_View2D(kc):
475     """ View 2D Map
476     """
477     km = kc.keymaps.new('View2D', space_type='EMPTY', region_type='WINDOW', modal=False)
478
479     kmi = km.keymap_items.new('view2d.scroller_activate', 'LEFTMOUSE', 'PRESS')
480     kmi = km.keymap_items.new('view2d.scroller_activate', 'MIDDLEMOUSE', 'PRESS')
481     kmi = km.keymap_items.new('view2d.pan', 'MIDDLEMOUSE', 'PRESS')
482     kmi = km.keymap_items.new('view2d.pan', 'MIDDLEMOUSE', 'PRESS', shift=True)
483     kmi = km.keymap_items.new('view2d.pan', 'TRACKPADPAN', 'ANY')
484     kmi = km.keymap_items.new('view2d.scroll_right', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True)
485     kmi = km.keymap_items.new('view2d.scroll_left', 'WHEELUPMOUSE', 'PRESS', ctrl=True)
486     kmi = km.keymap_items.new('view2d.scroll_down', 'WHEELDOWNMOUSE', 'PRESS', shift=True)
487     kmi = km.keymap_items.new('view2d.scroll_up', 'WHEELUPMOUSE', 'PRESS', shift=True)
488     kmi = km.keymap_items.new('view2d.zoom_out', 'WHEELOUTMOUSE', 'PRESS')
489     kmi = km.keymap_items.new('view2d.zoom_in', 'WHEELINMOUSE', 'PRESS')
490     kmi = km.keymap_items.new('view2d.zoom_out', 'NUMPAD_MINUS', 'PRESS')
491     kmi = km.keymap_items.new('view2d.zoom_in', 'NUMPAD_PLUS', 'PRESS')
492     kmi = km.keymap_items.new('view2d.scroll_down', 'WHEELDOWNMOUSE', 'PRESS')
493     kmi = km.keymap_items.new('view2d.scroll_up', 'WHEELUPMOUSE', 'PRESS')
494     kmi = km.keymap_items.new('view2d.scroll_right', 'WHEELDOWNMOUSE', 'PRESS')
495     kmi = km.keymap_items.new('view2d.scroll_left', 'WHEELUPMOUSE', 'PRESS')
496     kmi = km.keymap_items.new('view2d.zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True)
497     kmi = km.keymap_items.new('view2d.zoom', 'TRACKPADZOOM', 'ANY')
498     kmi = km.keymap_items.new('view2d.zoom_border', 'B', 'PRESS', shift=True)
499
500     # View2D Buttons List
501     km = kc.keymaps.new('View2D Buttons List', space_type='EMPTY', region_type='WINDOW', modal=False)
502
503     kmi = km.keymap_items.new('view2d.scroller_activate', 'LEFTMOUSE', 'PRESS')
504     kmi = km.keymap_items.new('view2d.scroller_activate', 'MIDDLEMOUSE', 'PRESS')
505     kmi = km.keymap_items.new('view2d.pan', 'MIDDLEMOUSE', 'PRESS')
506     kmi = km.keymap_items.new('view2d.pan', 'TRACKPADPAN', 'ANY')
507     kmi = km.keymap_items.new('view2d.scroll_down', 'WHEELDOWNMOUSE', 'PRESS')
508     kmi = km.keymap_items.new('view2d.scroll_up', 'WHEELUPMOUSE', 'PRESS')
509     kmi = km.keymap_items.new('view2d.scroll_down', 'PAGE_DOWN', 'PRESS')
510     kmi.properties.page = True
511     kmi = km.keymap_items.new('view2d.scroll_up', 'PAGE_UP', 'PRESS')
512     kmi.properties.page = True
513     kmi = km.keymap_items.new('view2d.zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True)
514     kmi = km.keymap_items.new('view2d.zoom', 'TRACKPADZOOM', 'ANY')
515     kmi = km.keymap_items.new('view2d.zoom_out', 'NUMPAD_MINUS', 'PRESS')
516     kmi = km.keymap_items.new('view2d.zoom_in', 'NUMPAD_PLUS', 'PRESS')
517     kmi = km.keymap_items.new('view2d.reset', 'HOME', 'PRESS')
518
519
520 def MapAdd_View3D_Global(kc):
521     """ View 3D Global Map
522     """
523     km = kc.keymaps.new('3D View', space_type='VIEW_3D', region_type='WINDOW', modal=False)
524
525     #-----------------
526     # View navigation
527     #-----------------
528
529     # ???
530     kmi = km.keymap_items.new('view3d.rotate', 'MOUSEROTATE', 'ANY')
531     kmi = km.keymap_items.new('view3d.smoothview', 'TIMER1', 'ANY', any=True)
532
533     
534
535     # Basics with mouse
536     kmi = km.keymap_items.new('view3d.move', 'MIDDLEMOUSE', 'PRESS')
537     kmi = km.keymap_items.new('view3d.zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True)
538     kmi = km.keymap_items.new('view3d.rotate', 'MIDDLEMOUSE', 'PRESS', shift=True)
539     #kmi = km.keymap_items.new('view3d.dolly', 'MIDDLEMOUSE', 'PRESS', shift=True, ctrl=True)
540
541     # Basics with mouse wheel
542     kmi = km.keymap_items.new('view3d.zoom', 'WHEELINMOUSE', 'PRESS')
543     kmi.properties.delta = 1
544     kmi = km.keymap_items.new('view3d.zoom', 'WHEELOUTMOUSE', 'PRESS')
545     kmi.properties.delta = -1
546     kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', ctrl=True)
547     kmi.properties.type = 'PANRIGHT'
548     kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True)
549     kmi.properties.type = 'PANLEFT'
550     kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', shift=True)
551     kmi.properties.type = 'PANUP'
552     kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', shift=True)
553     kmi.properties.type = 'PANDOWN'
554     kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', ctrl=True, alt=True)
555     kmi.properties.type = 'ORBITLEFT'
556     kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True, alt=True)
557     kmi.properties.type = 'ORBITRIGHT'
558     kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', shift=True, alt=True)
559     kmi.properties.type = 'ORBITUP'
560     kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', shift=True, alt=True)
561     kmi.properties.type = 'ORBITDOWN'
562
563     # Basics with trackpad
564     kmi = km.keymap_items.new('view3d.rotate', 'TRACKPADPAN', 'ANY', alt=True)
565     kmi = km.keymap_items.new('view3d.move', 'TRACKPADPAN', 'ANY')
566     kmi = km.keymap_items.new('view3d.zoom', 'TRACKPADZOOM', 'ANY')
567     
568     # Perspective/ortho
569     kmi = km.keymap_items.new('view3d.view_persportho', 'NUMPAD_5', 'CLICK')
570
571     # Camera view
572     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_0', 'CLICK')
573     kmi.properties.type = 'CAMERA'
574     
575     # Basics with numpad
576     kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_8', 'CLICK')
577     kmi.properties.type = 'ORBITUP'
578     kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_2', 'CLICK')
579     kmi.properties.type = 'ORBITDOWN'
580     kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_4', 'CLICK')
581     kmi.properties.type = 'ORBITLEFT'
582     kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_6', 'CLICK')
583     kmi.properties.type = 'ORBITRIGHT'
584     kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_8', 'CLICK', ctrl=True)
585     kmi.properties.type = 'PANUP'
586     kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_2', 'CLICK', ctrl=True)
587     kmi.properties.type = 'PANDOWN'
588     kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_4', 'CLICK', ctrl=True)
589     kmi.properties.type = 'PANLEFT'
590     kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_6', 'CLICK', ctrl=True)
591     kmi.properties.type = 'PANRIGHT'
592     kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_PLUS', 'CLICK')
593     kmi.properties.delta = 1
594     kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_MINUS', 'CLICK')
595     kmi.properties.delta = -1
596
597     # Zoom in/out alternatives
598     kmi = km.keymap_items.new('view3d.zoom', 'EQUAL', 'CLICK', ctrl=True)
599     kmi.properties.delta = 1
600     kmi = km.keymap_items.new('view3d.zoom', 'MINUS', 'CLICK', ctrl=True)
601     kmi.properties.delta = -1
602
603     # Front/Right/Top/Back/Left/Bottom
604     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'CLICK')
605     kmi.properties.type = 'FRONT'
606     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'CLICK')
607     kmi.properties.type = 'RIGHT'
608     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_7', 'CLICK')
609     kmi.properties.type = 'TOP'
610     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'CLICK', ctrl=True)
611     kmi.properties.type = 'BACK'
612     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'CLICK', ctrl=True)
613     kmi.properties.type = 'LEFT'
614     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_7', 'CLICK', ctrl=True)
615     kmi.properties.type = 'BOTTOM'
616
617     kmi = km.keymap_items.new('view3d.viewnumpad', 'MIDDLEMOUSE', 'CLICK', alt=True)
618     kmi.properties.type = 'FRONT'
619     kmi = km.keymap_items.new('view3d.viewnumpad', 'EVT_TWEAK_M', 'EAST', alt=True)
620     kmi.properties.type = 'RIGHT'
621     kmi = km.keymap_items.new('view3d.viewnumpad', 'EVT_TWEAK_M', 'NORTH', alt=True)
622     kmi.properties.type = 'TOP'
623     kmi = km.keymap_items.new('view3d.viewnumpad', 'MIDDLEMOUSE', 'DOUBLE_CLICK', alt=True)
624     kmi.properties.type = 'BACK'
625     kmi = km.keymap_items.new('view3d.viewnumpad', 'EVT_TWEAK_M', 'WEST', alt=True)
626     kmi.properties.type = 'LEFT'
627     kmi = km.keymap_items.new('view3d.viewnumpad', 'EVT_TWEAK_M', 'SOUTH', alt=True)
628     kmi.properties.type = 'BOTTOM'
629
630     # Selection-aligned Front/Right/Top/Back/Left/Bottom
631     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'CLICK', shift=True)
632     kmi.properties.type = 'FRONT'
633     kmi.properties.align_active = True
634     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'CLICK', shift=True)
635     kmi.properties.type = 'RIGHT'
636     kmi.properties.align_active = True
637     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_7', 'CLICK', shift=True)
638     kmi.properties.type = 'TOP'
639     kmi.properties.align_active = True
640     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'CLICK', shift=True, ctrl=True)
641     kmi.properties.type = 'BACK'
642     kmi.properties.align_active = True
643     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'CLICK', shift=True, ctrl=True)
644     kmi.properties.type = 'LEFT'
645     kmi.properties.align_active = True
646     kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_7', 'CLICK', shift=True, ctrl=True)
647     kmi.properties.type = 'BOTTOM'
648     kmi.properties.align_active = True
649
650     # NDOF Device
651     kmi = km.keymap_items.new('view3d.ndof_orbit', 'NDOF_BUTTON_MENU', 'ANY')
652     kmi = km.keymap_items.new('view3d.ndof_pan', 'NDOF_BUTTON_MENU', 'ANY', shift=True)
653     kmi = km.keymap_items.new('view3d.view_selected', 'NDOF_BUTTON_FIT', 'PRESS')
654     kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_FRONT', 'PRESS')
655     kmi.properties.type = 'FRONT'
656     kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_BACK', 'PRESS')
657     kmi.properties.type = 'BACK'
658     kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_LEFT', 'PRESS')
659     kmi.properties.type = 'LEFT'
660     kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_RIGHT', 'PRESS')
661     kmi.properties.type = 'RIGHT'
662     kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_TOP', 'PRESS')
663     kmi.properties.type = 'TOP'
664     kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_BOTTOM', 'PRESS')
665     kmi.properties.type = 'BOTTOM'
666     kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_FRONT', 'PRESS', shift=True)
667     kmi.properties.type = 'FRONT'
668     kmi.properties.align_active = True
669     kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_RIGHT', 'PRESS', shift=True)
670     kmi.properties.type = 'RIGHT'
671     kmi.properties.align_active = True
672     kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_TOP', 'PRESS', shift=True)
673     kmi.properties.type = 'TOP'
674     kmi.properties.align_active = True
675
676     # Fly mode
677     kmi = km.keymap_items.new('view3d.fly', 'F', 'CLICK', shift=True)
678
679     # Misc
680     kmi = km.keymap_items.new('view3d.view_selected', 'NUMPAD_PERIOD', 'CLICK')
681     kmi = km.keymap_items.new('view3d.view_center_cursor', 'NUMPAD_PERIOD', 'CLICK', ctrl=True)
682     kmi = km.keymap_items.new('view3d.zoom_camera_1_to_1', 'NUMPAD_ENTER', 'CLICK', shift=True)
683     kmi = km.keymap_items.new('view3d.view_center_camera', 'HOME', 'CLICK')
684     kmi = km.keymap_items.new('view3d.view_all', 'HOME', 'CLICK')
685     kmi.properties.center = False
686     kmi = km.keymap_items.new('view3d.view_all', 'C', 'CLICK', shift=True)
687     kmi.properties.center = True
688
689     #-------------
690     # Manipulator
691     #-------------
692     
693     kmi = km.keymap_items.new('view3d.manipulator', 'EVT_TWEAK_L', 'ANY', any=True)
694     kmi.properties.release_confirm = True
695
696     if MAYA_STYLE_MANIPULATORS:
697         kmi = km.keymap_items.new('view3d.manipulator_set', 'Q', 'CLICK')
698         kmi.properties.mode = 'NONE'
699         kmi = km.keymap_items.new('view3d.manipulator_set', TRANSLATE_KEY, 'CLICK')
700         kmi.properties.mode = 'TRANSLATE'
701         kmi = km.keymap_items.new('view3d.manipulator_set', ROTATE_KEY, 'CLICK')
702         kmi.properties.mode = 'ROTATE'
703         kmi = km.keymap_items.new('view3d.manipulator_set', SCALE_KEY, 'CLICK')
704         kmi.properties.mode = 'SCALE'
705     else:
706         kmi = km.keymap_items.new('wm.context_toggle', 'SPACE', 'CLICK', ctrl=True)
707         kmi.properties.data_path = 'space_data.show_manipulator'
708
709     #-----------
710     # Selection
711     #-----------
712     
713     # Click select
714     kmi = km.keymap_items.new('view3d.select', 'SELECTMOUSE', 'CLICK') # Replace
715     kmi.properties.extend = False
716     kmi.properties.deselect = False
717     kmi.properties.toggle = False
718     kmi.properties.center = False
719     kmi.properties.enumerate = False
720     kmi.properties.object = False
721     kmi = km.keymap_items.new('view3d.select', 'SELECTMOUSE', 'CLICK', shift=True) # Extend
722     kmi.properties.extend = True
723     kmi.properties.deselect = False
724     kmi.properties.toggle = False
725     kmi.properties.center = False
726     kmi.properties.enumerate = False
727     kmi.properties.object = False
728     kmi = km.keymap_items.new('view3d.select', 'SELECTMOUSE', 'CLICK', ctrl=True) # Deselect
729     kmi.properties.extend = False
730     kmi.properties.deselect = True
731     kmi.properties.toggle = False
732     kmi.properties.center = False
733     kmi.properties.enumerate = False
734     kmi.properties.object = False
735     
736     # Enumerate select
737     kmi = km.keymap_items.new('view3d.select', 'SELECTMOUSE', 'CLICK', alt=True) # Replace
738     kmi.properties.extend = False
739     kmi.properties.center = False
740     kmi.properties.enumerate = True
741     kmi.properties.object = False
742     kmi = km.keymap_items.new('view3d.select', 'SELECTMOUSE', 'CLICK', shift=True, alt=True) # Extend
743     kmi.properties.extend = True
744     kmi.properties.center = False
745     kmi.properties.enumerate = True
746     kmi.properties.object = False
747     kmi = km.keymap_items.new('view3d.select', 'SELECTMOUSE', 'CLICK', ctrl=True, alt=True) # Center (TODO: deselect)
748     kmi.properties.extend = False
749     kmi.properties.center = True
750     kmi.properties.enumerate = True
751     kmi.properties.object = False
752
753     # Border select
754     kmi = km.keymap_items.new('view3d.select_border', 'EVT_TWEAK_L', 'ANY') # Replace
755     kmi.properties.extend = False
756     kmi = km.keymap_items.new('view3d.select_border', 'EVT_TWEAK_L', 'ANY', shift=True) # Extend
757     kmi.properties.extend = True
758     kmi = km.keymap_items.new('view3d.select_border', 'EVT_TWEAK_L', 'ANY', ctrl=True) # Deselect (handled in modal)
759     kmi.properties.extend = False
760
761     # Lasso select
762     kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_L', 'ANY', alt=True) # Replace
763     kmi.properties.extend = False
764     kmi.properties.deselect = False
765     kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_L', 'ANY', alt=True, shift=True) # Extend
766     kmi.properties.extend = True
767     kmi.properties.deselect = False
768     kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_L', 'ANY', alt=True, ctrl=True) # Deselect
769     kmi.properties.extend = False
770     kmi.properties.deselect = True
771
772     # Paint select
773     #kmi = km.keymap_items.new('view3d.select_circle', 'C', 'CLICK')
774
775     #-----------------------
776     # Transforms via hotkey
777     #-----------------------
778     
779     # Grab, rotate scale
780     kmi = km.keymap_items.new('transform.translate', TRANSLATE_KEY, 'CLICK')
781     #kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY')
782     kmi = km.keymap_items.new('transform.rotate', ROTATE_KEY, 'CLICK')
783     kmi = km.keymap_items.new('transform.resize', SCALE_KEY, 'CLICK')
784
785     # Mirror, shear, warp, to-sphere
786     kmi = km.keymap_items.new('transform.mirror', 'M', 'CLICK', ctrl=True)
787     kmi = km.keymap_items.new('transform.shear', 'S', 'CLICK', shift=True, ctrl=True, alt=True)
788     kmi = km.keymap_items.new('transform.warp', 'W', 'CLICK', shift=True)
789     kmi = km.keymap_items.new('transform.tosphere', 'S', 'CLICK', shift=True, alt=True)
790
791     #-------------------------
792     # Transform texture space
793     #-------------------------
794     kmi = km.keymap_items.new('transform.translate', 'T', 'CLICK', shift=True)
795     kmi.properties.texture_space = True
796     kmi = km.keymap_items.new('transform.resize', 'T', 'CLICK', shift=True, alt=True)
797     kmi.properties.texture_space = True
798
799     #------------------
800     # Transform spaces
801     #------------------
802     kmi = km.keymap_items.new('transform.select_orientation', 'SPACE', 'CLICK', alt=True)
803     kmi = km.keymap_items.new('transform.create_orientation', 'SPACE', 'CLICK', ctrl=True, alt=True)
804     kmi.properties.use = True
805
806     #----------
807     # Snapping
808     #----------
809     kmi = km.keymap_items.new('wm.context_toggle', 'TAB', 'CLICK', shift=True)
810     kmi.properties.data_path = 'tool_settings.use_snap'
811     kmi = km.keymap_items.new('transform.snap_type', 'TAB', 'CLICK', shift=True, ctrl=True)
812
813     #---------------
814     # Snapping Menu
815     #---------------
816     kmi = km.keymap_items.new('wm.call_menu', 'S', 'CLICK', shift=True)
817     kmi.properties.name = 'VIEW3D_MT_snap'
818
819     #-----------
820     # 3d cursor
821     #-----------
822     kmi = km.keymap_items.new('view3d.cursor3d', 'ACTIONMOUSE', 'CLICK')
823
824     #-------------------
825     # Toggle local view
826     #-------------------
827     kmi = km.keymap_items.new('view3d.localview', 'NUMPAD_SLASH', 'CLICK')
828
829     #--------
830     # Layers
831     #--------
832     kmi = km.keymap_items.new('view3d.layers', 'ACCENT_GRAVE', 'CLICK')
833     kmi.properties.nr = 0
834     kmi = km.keymap_items.new('view3d.layers', 'ONE', 'CLICK', any=True)
835     kmi.properties.nr = 1
836     kmi = km.keymap_items.new('view3d.layers', 'TWO', 'CLICK', any=True)
837     kmi.properties.nr = 2
838     kmi = km.keymap_items.new('view3d.layers', 'THREE', 'CLICK', any=True)
839     kmi.properties.nr = 3
840     kmi = km.keymap_items.new('view3d.layers', 'FOUR', 'CLICK', any=True)
841     kmi.properties.nr = 4
842     kmi = km.keymap_items.new('view3d.layers', 'FIVE', 'CLICK', any=True)
843     kmi.properties.nr = 5
844     kmi = km.keymap_items.new('view3d.layers', 'SIX', 'CLICK', any=True)
845     kmi.properties.nr = 6
846     kmi = km.keymap_items.new('view3d.layers', 'SEVEN', 'CLICK', any=True)
847     kmi.properties.nr = 7
848     kmi = km.keymap_items.new('view3d.layers', 'EIGHT', 'CLICK', any=True)
849     kmi.properties.nr = 8
850     kmi = km.keymap_items.new('view3d.layers', 'NINE', 'CLICK', any=True)
851     kmi.properties.nr = 9
852     kmi = km.keymap_items.new('view3d.layers', 'ZERO', 'CLICK', any=True)
853     kmi.properties.nr = 10
854
855     #------------------
856     # Viewport drawing
857     #------------------
858     kmi = km.keymap_items.new('wm.context_toggle_enum', 'Z', 'CLICK')
859     kmi.properties.data_path = 'space_data.viewport_shade'
860     kmi.properties.value_1 = 'SOLID'
861     kmi.properties.value_2 = 'WIREFRAME'
862     kmi = km.keymap_items.new('wm.context_toggle_enum', 'Z', 'CLICK', alt=True)
863     kmi.properties.data_path = 'space_data.viewport_shade'
864     kmi.properties.value_1 = 'TEXTURED'
865     kmi.properties.value_2 = 'SOLID'
866
867     #-------------
868     # Pivot point
869     #-------------
870     kmi = km.keymap_items.new('wm.context_set_enum', 'COMMA', 'CLICK')
871     kmi.properties.data_path = 'space_data.pivot_point'
872     kmi.properties.value = 'BOUNDING_BOX_CENTER'
873     kmi = km.keymap_items.new('wm.context_set_enum', 'COMMA', 'CLICK', ctrl=True)
874     kmi.properties.data_path = 'space_data.pivot_point'
875     kmi.properties.value = 'MEDIAN_POINT'
876     kmi = km.keymap_items.new('wm.context_toggle', 'COMMA', 'CLICK', alt=True)
877     kmi.properties.data_path = 'space_data.use_pivot_point_align'
878     kmi = km.keymap_items.new('wm.context_set_enum', 'PERIOD', 'CLICK')
879     kmi.properties.data_path = 'space_data.pivot_point'
880     kmi.properties.value = 'CURSOR'
881     kmi = km.keymap_items.new('wm.context_set_enum', 'PERIOD', 'CLICK', ctrl=True)
882     kmi.properties.data_path = 'space_data.pivot_point'
883     kmi.properties.value = 'INDIVIDUAL_ORIGINS'
884     kmi = km.keymap_items.new('wm.context_set_enum', 'PERIOD', 'CLICK', alt=True)
885     kmi.properties.data_path = 'space_data.pivot_point'
886     kmi.properties.value = 'ACTIVE_ELEMENT'
887
888     #------
889     # Misc
890     #------
891     kmi = km.keymap_items.new('view3d.clip_border', 'B', 'CLICK', alt=True)
892     kmi = km.keymap_items.new('view3d.zoom_border', 'B', 'CLICK', shift=True)
893     kmi = km.keymap_items.new('view3d.render_border', 'B', 'CLICK', shift=True)
894     kmi = km.keymap_items.new('view3d.camera_to_view', 'NUMPAD_0', 'CLICK', ctrl=True, alt=True)
895     kmi = km.keymap_items.new('view3d.object_as_camera', 'NUMPAD_0', 'CLICK', ctrl=True)
896     
897
898 def MapAdd_View3D_Object_Nonmodal(kc):
899     """ Object Non-modal Map
900         This essentially applies globally within the 3d view.  But technically
901         only when objects are involved (but when are they not...?).
902     """
903     km = kc.keymaps.new('Object Non-modal', space_type='EMPTY', region_type='WINDOW', modal=False)
904     
905     # Mode switching
906     kmi = km.keymap_items.new('wm.call_menu', 'SPACE', 'PRESS')
907     kmi.properties.name = 'OBJECT_MT_mode_switch_menu'
908
909
910 def MapAdd_View3D_ObjectMode(kc):
911     """ Object Mode Map
912     """
913     km = kc.keymaps.new('Object Mode', space_type='EMPTY', region_type='WINDOW', modal=False)
914
915     # Delete
916     kmi = km.keymap_items.new('object.delete_no_confirm', 'X', 'CLICK')
917     kmi = km.keymap_items.new('object.delete_no_confirm', 'DEL', 'CLICK')
918
919     # Proportional editing
920     kmi = km.keymap_items.new('wm.context_toggle', 'O', 'PRESS')
921     kmi.properties.data_path = 'tool_settings.use_proportional_edit_objects'
922     kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
923     kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
924     
925     # Game engine start
926     kmi = km.keymap_items.new('view3d.game_start', 'P', 'PRESS')
927     
928     # Selection
929     kmi = km.keymap_items.new('object.select_all', 'A', 'PRESS')
930     kmi.properties.action = 'TOGGLE'
931     kmi = km.keymap_items.new('object.select_all', 'I', 'PRESS', ctrl=True)
932     kmi.properties.action = 'INVERT'
933     kmi = km.keymap_items.new('object.select_linked', 'L', 'PRESS', shift=True)
934     kmi = km.keymap_items.new('object.select_grouped', 'G', 'PRESS', shift=True)
935     kmi = km.keymap_items.new('object.select_mirror', 'M', 'PRESS', shift=True, ctrl=True)
936     kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS')
937     kmi.properties.direction = 'PARENT'
938     kmi.properties.extend = False
939     kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True)
940     kmi.properties.direction = 'PARENT'
941     kmi.properties.extend = True
942     kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS')
943     kmi.properties.direction = 'CHILD'
944     kmi.properties.extend = False
945     kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True)
946     kmi.properties.direction = 'CHILD'
947     kmi.properties.extend = True
948     
949     # Parenting
950     kmi = km.keymap_items.new('object.parent_set', 'P', 'PRESS', ctrl=True)
951     kmi = km.keymap_items.new('object.parent_no_inverse_set', 'P', 'PRESS', shift=True, ctrl=True)
952     kmi = km.keymap_items.new('object.parent_clear', 'P', 'PRESS', alt=True)
953
954     # Constraints
955     kmi = km.keymap_items.new('object.constraint_add_with_targets', 'C', 'PRESS', shift=True, ctrl=True)
956     kmi = km.keymap_items.new('object.constraints_clear', 'C', 'PRESS', ctrl=True, alt=True)
957     
958     # Transforms
959     kmi = km.keymap_items.new('object.location_clear', TRANSLATE_KEY, 'PRESS', alt=True)
960     kmi = km.keymap_items.new('object.rotation_clear', ROTATE_KEY, 'PRESS', alt=True)
961     kmi = km.keymap_items.new('object.scale_clear', SCALE_KEY, 'PRESS', alt=True)
962     kmi = km.keymap_items.new('object.origin_clear', 'O', 'PRESS', alt=True)
963     
964     # Hiding
965     kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS') # Hide selected
966     kmi.properties.unselected = False
967     kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', shift=True) # Hide unselected
968     kmi.properties.unselected = True
969     kmi = km.keymap_items.new('object.hide_view_clear', 'H', 'PRESS', alt=True) # Unhide
970     
971     #kmi = km.keymap_items.new('object.hide_render_set', 'H', 'PRESS', ctrl=True)
972     #kmi = km.keymap_items.new('object.hide_render_clear', 'H', 'PRESS', ctrl=True, alt=True)
973     
974     
975     # Layer management
976     kmi = km.keymap_items.new('object.move_to_layer', 'M', 'PRESS')
977
978     # Add menus
979     kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
980     kmi.properties.name = 'INFO_MT_add'
981     kmi = km.keymap_items.new('wm.call_menu', 'L', 'PRESS', ctrl=True)
982     kmi.properties.name = 'VIEW3D_MT_make_links'
983     
984     # Duplication
985     kmi = km.keymap_items.new('object.duplicate_move', 'D', 'PRESS', shift=True)
986     kmi = km.keymap_items.new('object.duplicate_move_linked', 'D', 'PRESS', alt=True)
987     kmi = km.keymap_items.new('object.duplicates_make_real', 'A', 'PRESS', shift=True, ctrl=True)
988     kmi = km.keymap_items.new('wm.call_menu', 'U', 'PRESS')
989     kmi.properties.name = 'VIEW3D_MT_make_single_user'
990     
991     # Apply menu
992     kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', ctrl=True)
993     kmi.properties.name = 'VIEW3D_MT_object_apply'
994     
995     # Groups
996     kmi = km.keymap_items.new('group.create', 'G', 'PRESS', ctrl=True)
997     kmi = km.keymap_items.new('group.objects_remove', 'G', 'PRESS', ctrl=True, alt=True)
998     kmi = km.keymap_items.new('group.objects_add_active', 'G', 'PRESS', shift=True, ctrl=True)
999     kmi = km.keymap_items.new('group.objects_remove_active', 'G', 'PRESS', shift=True, alt=True)
1000
1001     # Make proxy
1002     kmi = km.keymap_items.new('object.proxy_make', 'P', 'PRESS', ctrl=True, alt=True)
1003     
1004     # Keyframe insertion
1005     kmi = km.keymap_items.new('anim.keyframe_insert_menu', 'I', 'PRESS')
1006     kmi = km.keymap_items.new('anim.keyframe_delete_v3d', 'I', 'PRESS', alt=True)
1007     kmi = km.keymap_items.new('anim.keying_set_active_set', 'I', 'PRESS', shift=True, ctrl=True, alt=True)
1008     
1009     # Misc
1010     kmi = km.keymap_items.new('object.join', 'J', 'PRESS', ctrl=True)
1011     kmi = km.keymap_items.new('object.convert', 'C', 'PRESS', alt=True)
1012     kmi = km.keymap_items.new('object.make_local', 'L', 'PRESS')
1013     kmi = km.keymap_items.new('wm.call_menu', SPECIALS_MENU_KEY, 'PRESS')
1014     kmi.properties.name = 'VIEW3D_MT_object_specials'
1015     
1016     # Subdivision surface shortcuts
1017     kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS', ctrl=True)
1018     kmi.properties.level = 0
1019     kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS', ctrl=True)
1020     kmi.properties.level = 1
1021     kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS', ctrl=True)
1022     kmi.properties.level = 2
1023     kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS', ctrl=True)
1024     kmi.properties.level = 3
1025     kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'PRESS', ctrl=True)
1026     kmi.properties.level = 4
1027     kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'PRESS', ctrl=True)
1028     kmi.properties.level = 5
1029
1030
1031 def MapAdd_View3D_MeshEditMode(kc):
1032     """ Mesh Edit Mode Map
1033     """
1034     km = kc.keymaps.new('Mesh', space_type='EMPTY', region_type='WINDOW', modal=False)
1035
1036     #---------------------------------
1037     # Vertex/Edge/Face mode switching
1038     #---------------------------------
1039     kmi = km.keymap_items.new('view3d.set_edit_mesh_select_mode', 'ONE', 'PRESS')
1040     kmi.properties.mode = 'VERT'
1041     kmi.properties.toggle = False
1042     kmi = km.keymap_items.new('view3d.set_edit_mesh_select_mode', 'TWO', 'PRESS')
1043     kmi.properties.mode = 'EDGE'
1044     kmi.properties.toggle = False
1045     kmi = km.keymap_items.new('view3d.set_edit_mesh_select_mode', 'THREE', 'PRESS')
1046     kmi.properties.mode = 'FACE'
1047     kmi.properties.toggle = False
1048
1049     kmi = km.keymap_items.new('view3d.set_edit_mesh_select_mode', 'ONE', 'PRESS', shift=True)
1050     kmi.properties.mode = 'VERT'
1051     kmi.properties.toggle = True
1052     kmi = km.keymap_items.new('view3d.set_edit_mesh_select_mode', 'TWO', 'PRESS', shift=True)
1053     kmi.properties.mode = 'EDGE'
1054     kmi.properties.toggle = True
1055     kmi = km.keymap_items.new('view3d.set_edit_mesh_select_mode', 'THREE', 'PRESS', shift=True)
1056     kmi.properties.mode = 'FACE'
1057     kmi.properties.toggle = True
1058
1059     #-----------
1060     # Selection
1061     #-----------
1062     
1063     # Shortest path
1064     #kmi = km.keymap_items.new('mesh.select_shortest_path', 'RIGHTMOUSE', 'CLICK')
1065     
1066     # Edge loop
1067     kmi = km.keymap_items.new('mesh.loop_select', 'LEFTMOUSE', 'DOUBLE_CLICK') # Replace
1068     kmi.properties.extend = False
1069     kmi = km.keymap_items.new('mesh.loop_select', 'LEFTMOUSE', 'DOUBLE_CLICK', shift=True) # Extend (TODO: Add)
1070     kmi.properties.extend = True
1071     # TODO: Remove
1072     
1073     # Edge ring
1074     kmi = km.keymap_items.new('mesh.edgering_select', 'LEFTMOUSE', 'DOUBLE_CLICK', alt=True) # Replace
1075     kmi.properties.extend = False
1076     kmi = km.keymap_items.new('mesh.edgering_select', 'LEFTMOUSE', 'DOUBLE_CLICK', alt=True, shift=True) # Extend (TODO: Add)
1077     kmi.properties.extend = True
1078     # TODO: Remove
1079         
1080     
1081     
1082     kmi = km.keymap_items.new('mesh.select_all', 'A', 'CLICK')
1083     kmi.properties.action = 'TOGGLE'
1084     kmi = km.keymap_items.new('mesh.select_all', 'I', 'CLICK', ctrl=True)
1085     kmi.properties.action = 'INVERT'
1086     kmi = km.keymap_items.new('mesh.select_more', 'NUMPAD_PLUS', 'CLICK', ctrl=True)
1087     kmi = km.keymap_items.new('mesh.select_less', 'NUMPAD_MINUS', 'CLICK', ctrl=True)
1088     kmi = km.keymap_items.new('mesh.select_non_manifold', 'M', 'CLICK', shift=True, ctrl=True, alt=True)
1089     kmi = km.keymap_items.new('mesh.select_linked', 'L', 'CLICK', ctrl=True)
1090     kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'CLICK')
1091     kmi.properties.deselect = False
1092     kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'CLICK', shift=True)
1093     kmi.properties.deselect = True
1094     kmi = km.keymap_items.new('mesh.faces_select_linked_flat', 'F', 'CLICK', shift=True, ctrl=True, alt=True)
1095     kmi = km.keymap_items.new('mesh.select_similar', 'G', 'CLICK', shift=True)
1096
1097     # Proportional editing
1098     kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'CLICK')
1099     kmi.properties.data_path = 'tool_settings.proportional_edit'
1100     kmi.properties.value_1 = 'DISABLED'
1101     kmi.properties.value_2 = 'ENABLED'
1102     kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'CLICK', shift=True)
1103     kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
1104     kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'CLICK', alt=True)
1105     kmi.properties.data_path = 'tool_settings.proportional_edit'
1106     kmi.properties.value_1 = 'DISABLED'
1107     kmi.properties.value_2 = 'CONNECTED'
1108
1109     # Hiding
1110     kmi = km.keymap_items.new('mesh.hide', 'H', 'CLICK')
1111     kmi.properties.unselected = False
1112     kmi = km.keymap_items.new('mesh.hide', 'H', 'CLICK', shift=True)
1113     kmi.properties.unselected = True
1114     kmi = km.keymap_items.new('mesh.reveal', 'H', 'CLICK', alt=True)
1115
1116     # Create
1117     kmi = km.keymap_items.new('mesh.loopcut_slide', 'R', 'CLICK', ctrl=True)
1118     kmi = km.keymap_items.new('mesh.knifetool', 'K', 'CLICK')
1119     #kmi = km.keymap_items.new('view3d.edit_mesh_extrude_move_normal', 'E', 'CLICK')
1120     #kmi = km.keymap_items.new('wm.call_menu', 'E', 'CLICK', alt=True)
1121     #kmi.properties.name = 'VIEW3D_MT_edit_mesh_extrude'
1122     kmi = km.keymap_items.new('mesh.edge_face_add', 'F', 'CLICK')
1123     kmi = km.keymap_items.new('mesh.vert_connect', 'J', 'CLICK')
1124     kmi = km.keymap_items.new('mesh.spin', 'R', 'CLICK', alt=True)
1125     kmi = km.keymap_items.new('mesh.fill', 'F', 'CLICK', alt=True)
1126     kmi = km.keymap_items.new('mesh.beautify_fill', 'F', 'CLICK', shift=True, alt=True)
1127     kmi = km.keymap_items.new('mesh.duplicate_move', 'D', 'CLICK', shift=True)
1128     kmi = km.keymap_items.new('wm.call_menu', 'A', 'CLICK', shift=True)
1129     kmi.properties.name = 'INFO_MT_mesh_add'
1130     kmi = km.keymap_items.new('mesh.dupli_extrude_cursor', 'ACTIONMOUSE', 'CLICK', ctrl=True)
1131     kmi.properties.rotate_source = True
1132     kmi = km.keymap_items.new('mesh.dupli_extrude_cursor', 'ACTIONMOUSE', 'CLICK', shift=True, ctrl=True)
1133     kmi.properties.rotate_source = False
1134
1135     # Delete
1136     kmi = km.keymap_items.new('wm.call_menu', 'X', 'CLICK')
1137     kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete'
1138     kmi = km.keymap_items.new('wm.call_menu', 'DEL', 'CLICK')
1139     kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete'
1140
1141     # Separate
1142     kmi = km.keymap_items.new('mesh.rip_move', 'V', 'CLICK')
1143     kmi = km.keymap_items.new('mesh.split', 'Y', 'CLICK')
1144     kmi = km.keymap_items.new('mesh.separate', 'P', 'CLICK')
1145
1146     # Merge
1147     kmi = km.keymap_items.new('mesh.merge', 'M', 'CLICK', alt=True)
1148
1149     # Transform
1150     kmi = km.keymap_items.new('transform.shrink_fatten', 'S', 'CLICK', alt=True)
1151     #kmi = km.keymap_items.new('transform.edge_crease', 'E', 'CLICK', shift=True)
1152     kmi = km.keymap_items.new('mesh.quads_convert_to_tris', 'T', 'CLICK', ctrl=True)
1153     kmi = km.keymap_items.new('mesh.quads_convert_to_tris', 'T', 'CLICK', shift=True, ctrl=True)
1154     kmi.properties.use_beauty = False
1155     kmi = km.keymap_items.new('mesh.tris_convert_to_quads', 'J', 'CLICK', alt=True)
1156
1157     # Tool Menus
1158     kmi = km.keymap_items.new('wm.call_menu', SPECIALS_MENU_KEY, 'CLICK')
1159     kmi.properties.name = 'VIEW3D_MT_edit_mesh_specials'
1160     kmi = km.keymap_items.new('wm.call_menu', 'F', 'CLICK', ctrl=True)
1161     kmi.properties.name = 'VIEW3D_MT_edit_mesh_faces'
1162     #kmi = km.keymap_items.new('wm.call_menu', 'E', 'CLICK', ctrl=True)
1163     #kmi.properties.name = 'VIEW3D_MT_edit_mesh_edges'
1164     kmi = km.keymap_items.new('wm.call_menu', 'V', 'CLICK', ctrl=True)
1165     kmi.properties.name = 'VIEW3D_MT_edit_mesh_vertices'
1166
1167     # UV's
1168     kmi = km.keymap_items.new('wm.call_menu', 'U', 'CLICK')
1169     kmi.properties.name = 'VIEW3D_MT_uv_map'
1170
1171     # Calculate normals
1172     kmi = km.keymap_items.new('mesh.normals_make_consistent', 'N', 'CLICK', ctrl=True)
1173     kmi.properties.inside = False
1174     kmi = km.keymap_items.new('mesh.normals_make_consistent', 'N', 'CLICK', shift=True, ctrl=True)
1175     kmi.properties.inside = True
1176
1177     # Subsurf shortcuts
1178     if SUBSURF_RELATIVE:
1179         kmi = km.keymap_items.new('object.shift_subsurf_level', 'EQUAL', 'CLICK')
1180         kmi.properties.delta = 1
1181         kmi.properties.max = 4
1182         kmi = km.keymap_items.new('object.shift_subsurf_level', 'MINUS', 'CLICK')
1183         kmi.properties.delta = -1
1184         kmi.properties.min = 0
1185     else:
1186         kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'CLICK', ctrl=True)
1187         kmi.properties.level = 0
1188         kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'CLICK', ctrl=True)
1189         kmi.properties.level = 1
1190         kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'CLICK', ctrl=True)
1191         kmi.properties.level = 2
1192         kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'CLICK', ctrl=True)
1193         kmi.properties.level = 3
1194         kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'CLICK', ctrl=True)
1195         kmi.properties.level = 4
1196         kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'CLICK', ctrl=True)
1197         kmi.properties.level = 5
1198
1199     # Rigging
1200     kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'CLICK', ctrl=True)
1201     kmi = km.keymap_items.new('wm.call_menu', 'H', 'CLICK', ctrl=True)
1202     kmi.properties.name = 'VIEW3D_MT_hook'
1203     kmi = km.keymap_items.new('wm.call_menu', 'G', 'CLICK', ctrl=True)
1204     kmi.properties.name = 'VIEW3D_MT_vertex_group'
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228 def MapAdd_ModalStandard(kc):
1229     """ Standard Modal Map
1230         Super basic modal stuff that applies globally in Blender.
1231     """
1232     km = kc.keymaps.new('Standard Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True)
1233
1234     kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True)
1235     kmi = km.keymap_items.new_modal('APPLY', 'LEFTMOUSE', 'ANY', any=True)
1236     kmi = km.keymap_items.new_modal('APPLY', 'RET', 'PRESS', any=True)
1237     kmi = km.keymap_items.new_modal('APPLY', 'NUMPAD_ENTER', 'PRESS', any=True)
1238     kmi = km.keymap_items.new_modal('STEP10', 'LEFT_CTRL', 'PRESS', any=True)
1239     kmi = km.keymap_items.new_modal('STEP10_OFF', 'LEFT_CTRL', 'RELEASE', any=True)
1240
1241
1242 def MapAdd_ModalTransform(kc):
1243     """ Transform Modal Map
1244         Keys for when the user is in a transform mode, such as grab/rotate/scale.
1245     """
1246     km = kc.keymaps.new('Transform Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True)
1247
1248     # Cancel
1249     kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True)
1250
1251     # Confirm
1252     kmi = km.keymap_items.new_modal('CONFIRM', 'LEFTMOUSE', 'PRESS', any=True)
1253     kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'CLICK', any=True)
1254     kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'CLICK', any=True)
1255
1256     # Snapping
1257     kmi = km.keymap_items.new_modal('SNAP_TOGGLE', 'TAB', 'PRESS', shift=True)
1258     kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'LEFT_CTRL', 'PRESS', any=True)
1259     kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'LEFT_CTRL', 'RELEASE', any=True)
1260     kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'RIGHT_CTRL', 'PRESS', any=True)
1261     kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'RIGHT_CTRL', 'RELEASE', any=True)
1262     kmi = km.keymap_items.new_modal('ADD_SNAP', 'A', 'CLICK')
1263     kmi = km.keymap_items.new_modal('REMOVE_SNAP', 'A', 'CLICK', alt=True)
1264
1265     # Proportional edit adjusting
1266     kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'PAGE_UP', 'PRESS')
1267     kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'PAGE_DOWN', 'PRESS')
1268     kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'WHEELDOWNMOUSE', 'PRESS')
1269     kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'WHEELUPMOUSE', 'PRESS')
1270
1271     # Auto-ik adjusting
1272     kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'PAGE_UP', 'PRESS', shift=True)
1273     kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'PAGE_DOWN', 'PRESS', shift=True)
1274     kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'WHEELDOWNMOUSE', 'PRESS', shift=True)
1275     kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'WHEELUPMOUSE', 'PRESS', shift=True)
1276
1277     # Constraining to axes
1278     kmi = km.keymap_items.new_modal('AXIS_X', 'X', 'CLICK')
1279     kmi = km.keymap_items.new_modal('AXIS_Y', 'Y', 'CLICK')
1280     kmi = km.keymap_items.new_modal('AXIS_Z', 'Z', 'CLICK')
1281     kmi = km.keymap_items.new_modal('PLANE_X', 'X', 'CLICK', shift=True)
1282     kmi = km.keymap_items.new_modal('PLANE_Y', 'Y', 'CLICK', shift=True)
1283     kmi = km.keymap_items.new_modal('PLANE_Z', 'Z', 'CLICK', shift=True)
1284
1285     # ???
1286     #kmi = km.keymap_items.new_modal('TRANSLATE', TRANSLATE_KEY, 'CLICK')
1287     #kmi = km.keymap_items.new_modal('ROTATE', ROTATE_KEY, 'CLICK')
1288     #kmi = km.keymap_items.new_modal('RESIZE', SCALE_KEY, 'CLICK')
1289
1290
1291 def MapAdd_ModalBorderSelect(kc):
1292     """ Border Select Modal Map
1293         Determines behavior when in border select tool.
1294     """
1295     km = kc.keymaps.new('Gesture Border', space_type='EMPTY', region_type='WINDOW', modal=True)
1296
1297     kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True)
1298
1299     kmi = km.keymap_items.new_modal('BEGIN', 'LEFTMOUSE', 'PRESS')
1300     kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'RELEASE')
1301     kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'RELEASE', shift=True)
1302     kmi = km.keymap_items.new_modal('DESELECT', 'LEFTMOUSE', 'RELEASE', ctrl=True)
1303
1304
1305
1306
1307
1308
1309
1310 def MapAdd_FileBrowserGlobal(kc):
1311     # Map File Browser
1312     km = kc.keymaps.new('File Browser', space_type='FILE_BROWSER', region_type='WINDOW', modal=False)
1313
1314     kmi = km.keymap_items.new('file.bookmark_toggle', 'N', 'PRESS')
1315     kmi = km.keymap_items.new('file.parent', 'P', 'PRESS')
1316     kmi = km.keymap_items.new('file.bookmark_add', 'B', 'PRESS', ctrl=True)
1317     kmi = km.keymap_items.new('file.hidedot', 'H', 'PRESS')
1318     kmi = km.keymap_items.new('file.previous', 'BACK_SPACE', 'PRESS')
1319     kmi = km.keymap_items.new('file.next', 'BACK_SPACE', 'PRESS', shift=True)
1320     kmi = km.keymap_items.new('file.directory_new', 'I', 'PRESS')
1321     kmi = km.keymap_items.new('file.delete', 'X', 'PRESS')
1322     kmi = km.keymap_items.new('file.delete', 'DEL', 'PRESS')
1323     kmi = km.keymap_items.new('file.smoothscroll', 'TIMER1', 'ANY', any=True)
1324
1325 def MapAdd_FileBrowserMain(kc):
1326     # Map File Browser Main
1327     km = kc.keymaps.new('File Browser Main', space_type='FILE_BROWSER', region_type='WINDOW', modal=False)
1328
1329     kmi = km.keymap_items.new('file.execute', 'LEFTMOUSE', 'DOUBLE_CLICK')
1330     kmi.properties.need_active = True
1331     kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK')
1332     kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', shift=True)
1333     kmi.properties.extend = True
1334     kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', alt=True)
1335     kmi.properties.extend = True
1336     kmi.properties.fill = True
1337     kmi = km.keymap_items.new('file.select_all_toggle', 'A', 'PRESS')
1338     kmi = km.keymap_items.new('file.refresh', 'NUMPAD_PERIOD', 'PRESS')
1339     kmi = km.keymap_items.new('file.select_border', 'B', 'PRESS')
1340     kmi = km.keymap_items.new('file.select_border', 'EVT_TWEAK_L', 'ANY')
1341     kmi = km.keymap_items.new('file.rename', 'LEFTMOUSE', 'PRESS', ctrl=True)
1342     kmi = km.keymap_items.new('file.highlight', 'MOUSEMOVE', 'ANY', any=True)
1343     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS')
1344     kmi.properties.increment = 1
1345     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', shift=True)
1346     kmi.properties.increment = 10
1347     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
1348     kmi.properties.increment = 100
1349     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS')
1350     kmi.properties.increment = -1
1351     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', shift=True)
1352     kmi.properties.increment = -10
1353     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
1354     kmi.properties.increment = -100
1355
1356 def MapAdd_FileBrowserButtons(kc):
1357     # Map File Browser Buttons
1358     km = kc.keymaps.new('File Browser Buttons', space_type='FILE_BROWSER', region_type='WINDOW', modal=False)
1359
1360     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS')
1361     kmi.properties.increment = 1
1362     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', shift=True)
1363     kmi.properties.increment = 10
1364     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
1365     kmi.properties.increment = 100
1366     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS')
1367     kmi.properties.increment = -1
1368     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', shift=True)
1369     kmi.properties.increment = -10
1370     kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
1371     kmi.properties.increment = -100
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381 wm = bpy.context.window_manager
1382 kc = wm.keyconfigs.new('Blender 2012 (experimental!)')
1383
1384 clear_keymap(kc)
1385
1386 MapAdd_Window(kc)
1387 MapAdd_Screen(kc)
1388
1389 MapAdd_View2D(kc)
1390
1391 MapAdd_View3D_Global(kc)
1392 MapAdd_View3D_Object_Nonmodal(kc)
1393 MapAdd_View3D_ObjectMode(kc)
1394 MapAdd_View3D_MeshEditMode(kc)
1395
1396 MapAdd_ModalStandard(kc)
1397 MapAdd_ModalTransform(kc)
1398 MapAdd_ModalBorderSelect(kc)
1399
1400 MapAdd_FileBrowserGlobal(kc)
1401 MapAdd_FileBrowserMain(kc)
1402 MapAdd_FileBrowserButtons(kc)
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413