diff options
Diffstat (limited to 'release/scripts/presets/keyconfig/keymap_data/blender_default.py')
-rw-r--r-- | release/scripts/presets/keyconfig/keymap_data/blender_default.py | 679 |
1 files changed, 425 insertions, 254 deletions
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 35eb6490265..a006cd787ea 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -71,10 +71,12 @@ class Params: # (derived from other settings). # # This case needs to be checked often, - # Shorthand for: `(params.use_fallback_tool if params.select_mouse == 'RIGHT' else False)`. + # Shorthand for: `(params.use_fallback_tool if params.select_mouse == 'RIGHTMOUSE' else False)`. "use_fallback_tool_rmb", # Shorthand for: `('CLICK' if params.use_fallback_tool_rmb else params.select_mouse_value)`. "select_mouse_value_fallback", + # Shorthand for: `{"type": params.select_tweak, "value": 'ANY'}`. + "select_tweak_event", # Shorthand for: `('CLICK_DRAG' if params.use_pie_click_drag else 'PRESS')` "pie_value", # Shorthand for: `{"type": params.tool_tweak, "value": 'ANY'}`. @@ -139,10 +141,11 @@ class Params: # Use the "cursor" functionality for RMB select. if use_alt_tool_or_cursor: self.cursor_set_event = {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True} + self.cursor_tweak_event = {"type": 'EVT_TWEAK_L', "value": 'ANY', "alt": True} else: self.cursor_set_event = {"type": 'LEFTMOUSE', "value": 'CLICK'} + self.cursor_tweak_event = None - self.cursor_tweak_event = None self.use_fallback_tool = use_fallback_tool self.tool_modifier = {} else: @@ -195,8 +198,9 @@ class Params: self.use_file_single_click = use_file_single_click # Convenience variables: - self.use_fallback_tool_rmb = self.use_fallback_tool if self.select_mouse == 'RIGHT' else False + self.use_fallback_tool_rmb = self.use_fallback_tool if select_mouse == 'RIGHT' else False self.select_mouse_value_fallback = 'CLICK' if self.use_fallback_tool_rmb else self.select_mouse_value + self.select_tweak_event = {"type": self.select_tweak, "value": 'ANY'} self.pie_value = 'CLICK_DRAG' if use_pie_click_drag else 'PRESS' self.tool_tweak_event = {"type": self.tool_tweak, "value": 'ANY'} self.tool_maybe_tweak_event = {"type": self.tool_maybe_tweak, "value": self.tool_maybe_tweak_value} @@ -205,7 +209,6 @@ class Params: # ------------------------------------------------------------------------------ # Constants - # Physical layout. NUMBERS_1 = ('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'ZERO') # Numeric order. @@ -624,6 +627,9 @@ def km_screen(params): ("file.execute", {"type": 'RET', "value": 'PRESS'}, None), ("file.execute", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None), ("file.cancel", {"type": 'ESC', "value": 'PRESS'}, None), + # Asset Catalog undo is only available in the asset browser, and should take priority over `ed.undo`. + ("asset.catalog_undo", {"type": 'Z', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("asset.catalog_redo", {"type": 'Z', "value": 'PRESS', "ctrl": True, "shift": True, "repeat": True}, None), # Undo ("ed.undo", {"type": 'Z', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("ed.redo", {"type": 'Z', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, None), @@ -840,8 +846,156 @@ def km_user_interface(_params): # ------------------------------------------------------------------------------ -# Editors +# Shared Between Editors (Mask, Time-Line) + +def km_mask_editing(params): + items = [] + keymap = ( + "Mask Editing", + {"space_type": 'EMPTY', "region_type": 'WINDOW'}, + {"items": items}, + ) + + if params.select_mouse == 'RIGHTMOUSE': + # mask.slide_point performs mostly the same function, so for the left + # click select keymap it's fine to have the context menu instead. + items.extend([ + ("mask.select", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, + {"properties": [("deselect_all", not params.legacy)]}), + ("transform.translate", {"type": 'EVT_TWEAK_R', "value": 'ANY'}, None), + ]) + + items.extend([ + ("mask.new", {"type": 'N', "value": 'PRESS', "alt": True}, None), + op_menu("MASK_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}), + *_template_items_proportional_editing( + params, connected=False, toggle_data_path='tool_settings.use_proportional_edit_mask'), + ("mask.add_vertex_slide", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, None), + ("mask.add_feather_vertex_slide", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, None), + ("mask.delete", {"type": 'X', "value": 'PRESS'}, None), + ("mask.delete", {"type": 'DEL', "value": 'PRESS'}, None), + ("mask.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True}, + {"properties": [("toggle", True)]}), + *_template_items_select_actions(params, "mask.select_all"), + ("mask.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), + ("mask.select_linked_pick", {"type": 'L', "value": 'PRESS'}, + {"properties": [("deselect", False)]}), + ("mask.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True}, + {"properties": [("deselect", True)]}), + ("mask.select_box", {"type": 'B', "value": 'PRESS'}, None), + ("mask.select_circle", {"type": 'C', "value": 'PRESS'}, None), + ("mask.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, + {"properties": [("mode", 'ADD')]}), + ("mask.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True}, + {"properties": [("mode", 'SUB')]}), + ("mask.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("mask.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + *_template_items_hide_reveal_actions("mask.hide_view_set", "mask.hide_view_clear"), + ("clip.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True}, None), + ("mask.cyclic_toggle", {"type": 'C', "value": 'PRESS', "alt": True}, None), + ("mask.slide_point", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), + ("mask.slide_spline_curvature", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), + ("mask.handle_type_set", {"type": 'V', "value": 'PRESS'}, None), + ("mask.normals_make_consistent", + {"type": 'N', "value": 'PRESS', "ctrl" if params.legacy else "shift": True}, None), + ("mask.parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None), + ("mask.parent_clear", {"type": 'P', "value": 'PRESS', "alt": True}, None), + ("mask.shape_key_insert", {"type": 'I', "value": 'PRESS'}, None), + ("mask.shape_key_clear", {"type": 'I', "value": 'PRESS', "alt": True}, None), + ("mask.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None), + ("mask.copy_splines", {"type": 'C', "value": 'PRESS', "ctrl": True}, None), + ("mask.paste_splines", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), + ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), + ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None), + ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None), + ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True}, + {"properties": [("mode", 'MASK_SHRINKFATTEN')]}), + ]) + + # 3D cursor + if params.cursor_tweak_event: + items.extend([ + ("uv.cursor_set", params.cursor_set_event, None), + ("transform.translate", params.cursor_tweak_event, + {"properties": [("release_confirm", True), ("cursor_transform", True)]}), + ]) + else: + items.extend([ + ("uv.cursor_set", params.cursor_set_event, None), + ]) + + return keymap + + +def km_markers(params): + items = [] + keymap = ( + "Markers", + {"space_type": 'EMPTY', "region_type": 'WINDOW'}, + {"items": items}, + ) + + items.extend([ + ("marker.add", {"type": 'M', "value": 'PRESS'}, None), + ("marker.move", {"type": params.select_tweak, "value": 'ANY'}, + {"properties": [("tweak", True)]}), + ("marker.duplicate", {"type": 'D', "value": 'PRESS', "shift": True}, None), + ("marker.select", {"type": params.select_mouse, "value": 'PRESS'}, None), + ("marker.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True}, + {"properties": [("extend", True)]}), + ("marker.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True}, + {"properties": [("camera", True)]}), + ("marker.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True, "ctrl": True}, + {"properties": [("extend", True), ("camera", True)]}), + ("marker.select_box", {"type": params.select_tweak, "value": 'ANY'}, + {"properties": [("tweak", True)]}), + ("marker.select_box", {"type": 'B', "value": 'PRESS'}, None), + *_template_items_select_actions(params, "marker.select_all"), + ("marker.delete", {"type": 'X', "value": 'PRESS'}, None), + ("marker.delete", {"type": 'DEL', "value": 'PRESS'}, None), + ("marker.rename", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), + ("marker.move", {"type": 'G', "value": 'PRESS'}, None), + ("marker.camera_bind", {"type": 'B', "value": 'PRESS', "ctrl": True}, None), + ]) + + return keymap + +def km_time_scrub(_params): + items = [] + keymap = ( + "Time Scrub", + {"space_type": 'EMPTY', "region_type": 'WINDOW'}, + {"items": items}, + ) + + items.extend([ + ("anim.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), + ]) + + return keymap + + +def km_time_scrub_clip(_params): + items = [] + keymap = ( + "Clip Time Scrub", + {"space_type": 'CLIP_EDITOR', "region_type": 'PREVIEW'}, + {"items": items}, + ) + + items.extend([ + ("clip.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), + ]) + + return keymap + + +# ------------------------------------------------------------------------------ +# Editor (Property Editor) def km_property_editor(_params): items = [] @@ -888,6 +1042,9 @@ def km_property_editor(_params): return keymap +# ------------------------------------------------------------------------------ +# Editor (Outliner) + def km_outliner(params): items = [] keymap = ( @@ -940,6 +1097,7 @@ def km_outliner(params): # Fall through to generic context menu if the item(s) selected have no type specific actions. ("outliner.operation", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None), op_menu("OUTLINER_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}), + op_menu_pie("OUTLINER_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), ("outliner.item_drag_drop", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None), ("outliner.item_drag_drop", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True}, None), ("outliner.show_hierarchy", {"type": 'HOME', "value": 'PRESS'}, None), @@ -977,6 +1135,9 @@ def km_outliner(params): return keymap +# ------------------------------------------------------------------------------ +# Editor (UV Editor) + def km_uv_editor(params): items = [] keymap = ( @@ -1108,6 +1269,9 @@ def km_uv_editor(params): return keymap +# ------------------------------------------------------------------------------ +# Editor (3D View) + # 3D View: all regions. def km_view3d_generic(_params): items = [] @@ -1472,151 +1636,8 @@ def km_view3d(params): return keymap -def km_mask_editing(params): - items = [] - keymap = ( - "Mask Editing", - {"space_type": 'EMPTY', "region_type": 'WINDOW'}, - {"items": items}, - ) - - if params.select_mouse == 'RIGHTMOUSE': - # mask.slide_point performs mostly the same function, so for the left - # click select keymap it's fine to have the context menu instead. - items.extend([ - ("mask.select", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, - {"properties": [("deselect_all", not params.legacy)]}), - ("transform.translate", {"type": 'EVT_TWEAK_R', "value": 'ANY'}, None), - ]) - - items.extend([ - ("mask.new", {"type": 'N', "value": 'PRESS', "alt": True}, None), - op_menu("MASK_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}), - *_template_items_proportional_editing( - params, connected=False, toggle_data_path='tool_settings.use_proportional_edit_mask'), - ("mask.add_vertex_slide", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, None), - ("mask.add_feather_vertex_slide", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, None), - ("mask.delete", {"type": 'X', "value": 'PRESS'}, None), - ("mask.delete", {"type": 'DEL', "value": 'PRESS'}, None), - ("mask.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True}, - {"properties": [("toggle", True)]}), - *_template_items_select_actions(params, "mask.select_all"), - ("mask.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), - ("mask.select_linked_pick", {"type": 'L', "value": 'PRESS'}, - {"properties": [("deselect", False)]}), - ("mask.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True}, - {"properties": [("deselect", True)]}), - ("mask.select_box", {"type": 'B', "value": 'PRESS'}, None), - ("mask.select_circle", {"type": 'C', "value": 'PRESS'}, None), - ("mask.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, - {"properties": [("mode", 'ADD')]}), - ("mask.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True}, - {"properties": [("mode", 'SUB')]}), - ("mask.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), - ("mask.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), - *_template_items_hide_reveal_actions("mask.hide_view_set", "mask.hide_view_clear"), - ("clip.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True}, None), - ("mask.cyclic_toggle", {"type": 'C', "value": 'PRESS', "alt": True}, None), - ("mask.slide_point", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), - ("mask.slide_spline_curvature", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), - ("mask.handle_type_set", {"type": 'V', "value": 'PRESS'}, None), - ("mask.normals_make_consistent", - {"type": 'N', "value": 'PRESS', "ctrl" if params.legacy else "shift": True}, None), - ("mask.parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None), - ("mask.parent_clear", {"type": 'P', "value": 'PRESS', "alt": True}, None), - ("mask.shape_key_insert", {"type": 'I', "value": 'PRESS'}, None), - ("mask.shape_key_clear", {"type": 'I', "value": 'PRESS', "alt": True}, None), - ("mask.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None), - ("mask.copy_splines", {"type": 'C', "value": 'PRESS', "ctrl": True}, None), - ("mask.paste_splines", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), - ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), - ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), - ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None), - ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None), - ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True}, - {"properties": [("mode", 'MASK_SHRINKFATTEN')]}), - ]) - - # 3D cursor - if params.cursor_tweak_event: - items.extend([ - ("uv.cursor_set", params.cursor_set_event, None), - ("transform.translate", params.cursor_tweak_event, - {"properties": [("release_confirm", True), ("cursor_transform", True)]}), - ]) - else: - items.extend([ - ("uv.cursor_set", params.cursor_set_event, None), - ]) - - return keymap - - -def km_markers(params): - items = [] - keymap = ( - "Markers", - {"space_type": 'EMPTY', "region_type": 'WINDOW'}, - {"items": items}, - ) - - items.extend([ - ("marker.add", {"type": 'M', "value": 'PRESS'}, None), - ("marker.move", {"type": params.select_tweak, "value": 'ANY'}, - {"properties": [("tweak", True)]}), - ("marker.duplicate", {"type": 'D', "value": 'PRESS', "shift": True}, None), - ("marker.select", {"type": params.select_mouse, "value": 'PRESS'}, None), - ("marker.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True}, - {"properties": [("extend", True)]}), - ("marker.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True}, - {"properties": [("camera", True)]}), - ("marker.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True, "ctrl": True}, - {"properties": [("extend", True), ("camera", True)]}), - ("marker.select_box", {"type": params.select_tweak, "value": 'ANY'}, - {"properties": [("tweak", True)]}), - ("marker.select_box", {"type": 'B', "value": 'PRESS'}, None), - *_template_items_select_actions(params, "marker.select_all"), - ("marker.delete", {"type": 'X', "value": 'PRESS'}, None), - ("marker.delete", {"type": 'DEL', "value": 'PRESS'}, None), - ("marker.rename", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), - ("marker.move", {"type": 'G', "value": 'PRESS'}, None), - ("marker.camera_bind", {"type": 'B', "value": 'PRESS', "ctrl": True}, None), - ]) - - return keymap - - -def km_time_scrub(_params): - items = [] - keymap = ( - "Time Scrub", - {"space_type": 'EMPTY', "region_type": 'WINDOW'}, - {"items": items}, - ) - - items.extend([ - ("anim.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), - ]) - - return keymap - - -def km_time_scrub_clip(_params): - items = [] - keymap = ( - "Clip Time Scrub", - {"space_type": 'CLIP_EDITOR', "region_type": 'PREVIEW'}, - {"items": items}, - ) - - items.extend([ - ("clip.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), - ]) - - return keymap - +# ------------------------------------------------------------------------------ +# Editor (Graph Editor) def km_graph_editor_generic(_params): items = [] @@ -1631,7 +1652,7 @@ def km_graph_editor_generic(_params): sidebar_key={"type": 'N', "value": 'PRESS'}, ), ("graph.extrapolation_type", {"type": 'E', "value": 'PRESS', "shift": True}, None), - ("anim.channels_find", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), + ("anim.channels_select_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), *_template_items_hide_reveal_actions("graph.hide", "graph.reveal"), ("wm.context_set_enum", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, {"properties": [("data_path", 'area.type'), ("value", 'DOPESHEET_EDITOR')]}), @@ -1728,6 +1749,7 @@ def km_graph_editor(params): ("graph.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None), ("graph.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None), ("graph.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None), + op_menu_pie("GRAPH_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), ("graph.fmodifier_add", {"type": 'M', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("only_active", False)]}), ("anim.channels_editable_toggle", {"type": 'TAB', "value": 'PRESS'}, None), @@ -1771,6 +1793,9 @@ def km_graph_editor(params): return keymap +# ------------------------------------------------------------------------------ +# Editor (Image) + def km_image_generic(params): items = [] keymap = ( @@ -1792,6 +1817,7 @@ def km_image_generic(params): ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "repeat": True}, None), ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("reverse", True)]}), + op_menu_pie("IMAGE_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), ]) if not params.legacy: @@ -1893,6 +1919,9 @@ def km_image(params): return keymap +# ------------------------------------------------------------------------------ +# Editor (Node) + def km_node_generic(_params): items = [] keymap = ( @@ -2001,6 +2030,7 @@ def km_node_editor(params): ("node.view_all", {"type": 'HOME', "value": 'PRESS'}, None), ("node.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None), ("node.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None), + op_menu_pie("NODE_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), ("node.delete", {"type": 'X', "value": 'PRESS'}, None), ("node.delete", {"type": 'DEL', "value": 'PRESS'}, None), ("node.delete_reconnect", {"type": 'X', "value": 'PRESS', "ctrl": True}, None), @@ -2058,12 +2088,17 @@ def km_node_editor(params): {"properties": [("data_path", 'tool_settings.use_snap')]}), ("wm.context_menu_enum", {"type": 'TAB', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("data_path", 'tool_settings.snap_node_element')]}), + ("wm.context_toggle", {"type": 'Z', "value": 'PRESS', "alt": True, "shift": True}, + {"properties": [("data_path", "space_data.overlay.show_overlays")]}), *_template_items_context_menu("NODE_MT_context_menu", params.context_menu_event), ]) return keymap +# ------------------------------------------------------------------------------ +# Editor (Info) + def km_info(params): items = [] keymap = ( @@ -2090,6 +2125,9 @@ def km_info(params): return keymap +# ------------------------------------------------------------------------------ +# Editor (File Browser) + def km_file_browser(params): items = [] keymap = ( @@ -2107,7 +2145,9 @@ def km_file_browser(params): ("file.parent", {"type": 'UP_ARROW', "value": 'PRESS', "alt": True}, None), ("file.previous", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True}, None), ("file.next", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True}, None), + # The two refresh operators have polls excluding each other (so only one is available depending on context). ("file.refresh", {"type": 'R', "value": 'PRESS'}, None), + ("asset.library_refresh", {"type": 'R', "value": 'PRESS'}, None), ("file.parent", {"type": 'P', "value": 'PRESS'}, None), ("file.previous", {"type": 'BACK_SPACE', "value": 'PRESS'}, None), ("file.next", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, None), @@ -2141,7 +2181,6 @@ def km_file_browser(params): ("only_activate_if_selected", params.select_mouse == 'LEFTMOUSE'), ("pass_through", True), ]}), *_template_items_context_menu("FILEBROWSER_MT_context_menu", params.context_menu_event), - *_template_items_context_menu("ASSETBROWSER_MT_context_menu", params.context_menu_event), ]) return keymap @@ -2158,7 +2197,7 @@ def km_file_browser_main(params): if not params.use_file_single_click: items.extend([ ("file.select", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, - {"properties": [("open", True), ("deselect_all", not params.legacy)]}), + {"properties": [("open", True), ("deselect_all", not params.legacy)]}), ]) items.extend([ @@ -2209,6 +2248,7 @@ def km_file_browser_main(params): ("file.highlight", {"type": 'MOUSEMOVE', "value": 'ANY', "any": True}, None), ("file.sort_column_ui_context", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None), ("file.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None), + *_template_items_context_menu("ASSETBROWSER_MT_context_menu", params.context_menu_event), ]) return keymap @@ -2240,6 +2280,9 @@ def km_file_browser_buttons(_params): return keymap +# ------------------------------------------------------------------------------ +# Editor (Dope Sheet) + def km_dopesheet_generic(_params): items = [] keymap = ( @@ -2350,8 +2393,9 @@ def km_dopesheet(params): ("action.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None), ("action.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None), ("action.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None), + op_menu_pie("DOPESHEET_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), ("anim.channels_editable_toggle", {"type": 'TAB', "value": 'PRESS'}, None), - ("anim.channels_find", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), + ("anim.channels_select_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), ("transform.transform", {"type": 'G', "value": 'PRESS'}, {"properties": [("mode", 'TIME_TRANSLATE')]}), ("transform.transform", {"type": params.select_tweak, "value": 'ANY'}, @@ -2374,6 +2418,9 @@ def km_dopesheet(params): return keymap +# ------------------------------------------------------------------------------ +# Editor (NLA) + def km_nla_generic(_params): items = [] keymap = ( @@ -2392,7 +2439,7 @@ def km_nla_generic(_params): {"properties": [("isolate_action", True)]}), ("nla.tweakmode_exit", {"type": 'TAB', "value": 'PRESS', "shift": True}, {"properties": [("isolate_action", True)]}), - ("anim.channels_find", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), + ("anim.channels_select_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), ]) return keymap @@ -2461,6 +2508,7 @@ def km_nla_editor(params): ("nla.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None), ("nla.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None), ("nla.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None), + op_menu_pie("NLA_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), ("nla.actionclip_add", {"type": 'A', "value": 'PRESS', "shift": True}, None), ("nla.transition_add", {"type": 'T', "value": 'PRESS', "shift": True}, None), ("nla.soundclip_add", {"type": 'K', "value": 'PRESS', "shift": True}, None), @@ -2503,6 +2551,9 @@ def km_nla_editor(params): return keymap +# ------------------------------------------------------------------------------ +# Editor (Text) + def km_text_generic(_params): items = [] keymap = ( @@ -2664,6 +2715,9 @@ def km_text(params): return keymap +# ------------------------------------------------------------------------------ +# Editor (Sequencer) + def km_sequencercommon(params): items = [] keymap = ( @@ -2678,13 +2732,10 @@ def km_sequencercommon(params): sidebar_key={"type": 'N', "value": 'PRESS'}, ), ("wm.context_toggle", {"type": 'O', "value": 'PRESS', "shift": True}, - {"properties": [("data_path", 'scene.sequence_editor.show_overlay')]}), + {"properties": [("data_path", 'scene.sequence_editor.show_overlay_frame')]}), ("wm.context_toggle_enum", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, {"properties": [("data_path", 'space_data.view_type'), ("value_1", 'SEQUENCER'), ("value_2", 'PREVIEW')]}), ("sequencer.refresh_all", {"type": 'R', "value": 'PRESS', "ctrl": True}, None), - ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS'}, None), - ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True}, - {"properties": [("extend", True)]}), ]) if params.select_mouse == 'LEFTMOUSE' and not params.legacy: @@ -2767,16 +2818,11 @@ def km_sequencer(params): for i in range(10) ) ), - ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "alt": True}, - {"properties": [("linked_handle", True)]}), - ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True, "alt": True}, - {"properties": [("extend", True), ("linked_handle", True)]}), - ("sequencer.select", - {"type": params.select_mouse, "value": 'PRESS' if params.legacy else 'CLICK', "ctrl": True}, - {"properties": [("side_of_frame", True), ("linked_time", True)]}), - ("sequencer.select", - {"type": params.select_mouse, "value": 'PRESS' if params.legacy else 'CLICK', "ctrl": True, "shift": True}, - {"properties": [("side_of_frame", True), ("linked_time", True), ("extend", True)]}), + *_template_sequencer_timeline_select( + type=params.select_mouse, + value=params.select_mouse_value_fallback, + legacy=params.legacy, + ), ("sequencer.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("sequencer.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("sequencer.select_linked_pick", {"type": 'L', "value": 'PRESS'}, None), @@ -2795,6 +2841,7 @@ def km_sequencer(params): ("sequencer.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None), op_menu("SEQUENCER_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}), op_menu("SEQUENCER_MT_change", {"type": 'C', "value": 'PRESS'}), + op_menu_pie("SEQUENCER_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), ("sequencer.slip", {"type": 'S', "value": 'PRESS'}, None), ("wm.context_set_int", {"type": 'O', "value": 'PRESS'}, {"properties": [("data_path", 'scene.sequence_editor.overlay_frame'), ("value", 0)]}), @@ -2825,6 +2872,16 @@ def km_sequencerpreview(params): ) items.extend([ + # Selection. + *_template_sequencer_preview_select( + type=params.select_mouse, + value=params.select_mouse_value_fallback, + legacy=params.legacy, + ), + *_template_items_select_actions(params, "sequencer.select_all"), + ("sequencer.select_box", {"type": 'B', "value": 'PRESS'}, None), + + # View. ("sequencer.view_all_preview", {"type": 'HOME', "value": 'PRESS'}, None), ("sequencer.view_all_preview", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None), ("sequencer.view_ghost_border", {"type": 'O', "value": 'PRESS'}, None), @@ -2842,7 +2899,10 @@ def km_sequencerpreview(params): {"properties": [("ratio", 0.25)]}), ("sequencer.view_zoom_ratio", {"type": 'NUMPAD_8', "value": 'PRESS'}, {"properties": [("ratio", 0.125)]}), - ("sequencer.sample", {"type": params.action_mouse, "value": 'PRESS'}, None), + op_menu_pie("SEQUENCER_MT_preview_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), + + # Edit. + ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), op_tool_optional( ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), (op_tool_cycle, "builtin.move"), params), @@ -2858,11 +2918,41 @@ def km_sequencerpreview(params): {"properties": [("property", 'SCALE')]}), ("sequencer.strip_transform_clear", {"type": 'R', "alt": True, "value": 'PRESS'}, {"properties": [("property", 'ROTATION')]}), + + ("sequencer.delete", {"type": 'X', "value": 'PRESS'}, None), + ("sequencer.delete", {"type": 'DEL', "value": 'PRESS'}, None), + + *_template_items_context_menu("SEQUENCER_MT_preview_context_menu", params.context_menu_event), ]) + if not params.legacy: + # New pie menus. + items.extend([ + ("wm.context_toggle", {"type": 'ACCENT_GRAVE', "value": 'PRESS', "ctrl": True}, + {"properties": [("data_path", 'space_data.show_gizmo')]}), + op_menu_pie("SEQUENCER_MT_pivot_pie", {"type": 'PERIOD', "value": 'PRESS'}), + ("wm.context_toggle", {"type": 'Z', "value": 'PRESS', "alt": True, "shift": True}, + {"properties": [("data_path", "space_data.show_overlays")]}), + ]) + + # 2D cursor. + if params.cursor_tweak_event: + items.extend([ + ("sequencer.cursor_set", params.cursor_set_event, None), + ("transform.translate", params.cursor_tweak_event, + {"properties": [("release_confirm", True), ("cursor_transform", True)]}), + ]) + else: + items.extend([ + ("sequencer.cursor_set", params.cursor_set_event, None), + ]) + return keymap +# ------------------------------------------------------------------------------ +# Editor (Console) + def km_console(_params): items = [] keymap = ( @@ -2928,6 +3018,9 @@ def km_console(_params): return keymap +# ------------------------------------------------------------------------------ +# Editor (Clip) + def km_clip(_params): items = [] keymap = ( @@ -2957,6 +3050,7 @@ def km_clip(_params): op_menu_pie("CLIP_MT_solving_pie", {"type": 'S', "value": 'PRESS', "shift": True}), op_menu_pie("CLIP_MT_marker_pie", {"type": 'E', "value": 'PRESS', "shift": True}), op_menu_pie("CLIP_MT_reconstruction_pie", {"type": 'W', "value": 'PRESS', "shift": True}), + op_menu_pie("CLIP_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), ]) return keymap @@ -3157,6 +3251,9 @@ def km_clip_dopesheet_editor(_params): return keymap +# ------------------------------------------------------------------------------ +# Editor (Spreadsheet) + def km_spreadsheet_generic(_params): items = [] keymap = ( @@ -3178,7 +3275,6 @@ def km_spreadsheet_generic(_params): # ------------------------------------------------------------------------------ # Animation - def km_frames(params): items = [] keymap = ( @@ -3298,7 +3394,7 @@ def km_animation_channels(params): ("anim.channel_select_keys", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK', "shift": True}, {"properties": [("extend", True)]}), # Find (setting the name filter). - ("anim.channels_find", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), + ("anim.channels_select_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), # Selection. *_template_items_select_actions(params, "anim.channels_select_all"), ("anim.channels_select_box", {"type": 'B', "value": 'PRESS'}, None), @@ -3342,8 +3438,7 @@ def km_animation_channels(params): # ------------------------------------------------------------------------------ -# Modes - +# Object Modes def km_grease_pencil(params): items = [] @@ -4312,7 +4407,7 @@ def km_pose(params): ("pose.push", {"type": 'E', "value": 'PRESS', "ctrl": True}, None), ("pose.relax", {"type": 'E', "value": 'PRESS', "alt": True}, None), ("pose.breakdown", {"type": 'E', "value": 'PRESS', "shift": True}, None), - ("pose.blend_to_neighbour", {"type": 'E', "value": 'PRESS', "shift": True, "alt": True}, None), + ("pose.blend_to_neighbor", {"type": 'E', "value": 'PRESS', "shift": True, "alt": True}, None), op_menu("VIEW3D_MT_pose_propagate", {"type": 'P', "value": 'PRESS', "alt": True}), *( (("object.hide_collection", @@ -4577,17 +4672,6 @@ def _template_view3d_select(*, type, value, legacy): )] -def _template_view3d_select_for_fallback(params, fallback): - if (not fallback) and params.use_fallback_tool_rmb: - # Needed so we have immediate select+tweak when the default select tool is active. - return _template_view3d_select( - type=params.select_mouse, - value=params.select_mouse_value, - legacy=params.legacy, - ) - return [] - - def _template_view3d_gpencil_select(*, type, value, legacy, use_select_mouse=True): return [ *([] if not use_select_mouse else [ @@ -4603,17 +4687,6 @@ def _template_view3d_gpencil_select(*, type, value, legacy, use_select_mouse=Tru ] -def _template_view3d_gpencil_select_for_fallback(params, fallback): - if (not fallback) and params.use_fallback_tool_rmb: - # Needed so we have immediate select+tweak when the default select tool is active. - return _template_view3d_gpencil_select( - type=params.select_mouse, - value=params.select_mouse_value, - legacy=params.legacy, - ) - return [] - - def _template_uv_select(*, type, value, legacy): return [ ("uv.select", {"type": type, "value": value}, @@ -4623,15 +4696,49 @@ def _template_uv_select(*, type, value, legacy): ] -def _template_uv_select_for_fallback(params, fallback): - if (not fallback) and params.use_fallback_tool_rmb: - # Needed so we have immediate select+tweak when the default select tool is active. - return _template_uv_select( - type=params.select_mouse, - value=params.select_mouse_value, - legacy=params.legacy, - ) - return [] +def _template_sequencer_generic_select(*, type, value, legacy): + return [( + "sequencer.select", + {"type": type, "value": value, **{m: True for m in mods}}, + {"properties": [(c, True) for c in props]}, + ) for props, mods in ( + (("deselect_all",) if not legacy else (), ()), + (("toggle",), ("shift",)), + )] + + +def _template_sequencer_preview_select(*, type, value, legacy): + return _template_sequencer_generic_select( + type=type, value=value, legacy=legacy, + ) + [( + "sequencer.select", + {"type": type, "value": value, **{m: True for m in mods}}, + {"properties": [(c, True) for c in props]}, + ) for props, mods in ( + (("center",), ("ctrl",)), + # TODO: + # (("enumerate",), ("alt",)), + (("toggle", "center"), ("shift", "ctrl")), + # (("center", "enumerate"), ("ctrl", "alt")), + # (("toggle", "enumerate"), ("shift", "alt")), + # (("toggle", "center", "enumerate"), ("shift", "ctrl", "alt")), + )] + + +def _template_sequencer_timeline_select(*, type, value, legacy): + return _template_sequencer_generic_select( + type=type, value=value, legacy=legacy, + ) + [( + "sequencer.select", + {"type": type, "value": value, **{m: True for m in mods}}, + {"properties": [(c, True) for c in props]}, + ) for props, mods in ( + (("linked_handle",), ("alt",)), + (("linked_handle", "extend"), ("shift", "alt",)), + + (("side_of_frame", "linked_time"), ("ctrl",)), + (("side_of_frame", "linked_time", "extend"), ("ctrl", "shift")), + )] def km_image_paint(params): @@ -4944,6 +5051,9 @@ def km_mesh(params): ("mesh.bevel", {"type": 'B', "value": 'PRESS', "ctrl": True}, {"properties": [("affect", 'EDGES')]}), (op_tool_cycle, "builtin.bevel"), params), + op_tool_optional( + ("transform.shrink_fatten", {"type": 'S', "value": 'PRESS', "alt": True}, None), + (op_tool_cycle, "builtin.shrink_fatten"), params), ("mesh.bevel", {"type": 'B', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("affect", 'VERTICES')]}), # Selection modes. @@ -5008,7 +5118,6 @@ def km_mesh(params): ("mesh.rip_edge_move", {"type": 'D', "value": 'PRESS', "alt": True}, None), op_menu("VIEW3D_MT_edit_mesh_merge", {"type": 'M', "value": 'PRESS'}), op_menu("VIEW3D_MT_edit_mesh_split", {"type": 'M', "value": 'PRESS', "alt": True}), - ("transform.shrink_fatten", {"type": 'S', "value": 'PRESS', "alt": True}, None), ("mesh.edge_face_add", {"type": 'F', "value": 'PRESS', "repeat": True}, None), ("mesh.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None), op_menu("VIEW3D_MT_mesh_add", {"type": 'A', "value": 'PRESS', "shift": True}), @@ -5398,7 +5507,6 @@ def km_object_non_modal(params): # ------------------------------------------------------------------------------ # Modal Maps and Gizmos - def km_eyedropper_modal_map(_params): items = [] keymap = ( @@ -6072,11 +6180,10 @@ def km_popup_toolbar(_params): # ------------------------------------------------------------------------------ -# Tool System Keymaps +# Tool System (Generic) # # Named are auto-generated based on the tool name and it's toolbar. - def km_generic_tool_annotate(params): return ( "Generic Tool: Annotate", @@ -6139,6 +6246,9 @@ def km_image_editor_tool_generic_sample(params): ) +# ------------------------------------------------------------------------------ +# Tool System (UV Editor) + def km_image_editor_tool_uv_cursor(params): return ( "Image Editor Tool: Uv, Cursor", @@ -6157,7 +6267,8 @@ def km_image_editor_tool_uv_select(params, *, fallback): _fallback_id("Image Editor Tool: Uv, Tweak", fallback), {"space_type": 'IMAGE_EDITOR', "region_type": 'WINDOW'}, {"items": [ - *([] if fallback else _template_items_tool_select(params, "uv.select", "uv.cursor_set", extend="extend")), + *([] if (fallback and (params.select_mouse == 'RIGHTMOUSE')) else _template_items_tool_select( + params, "uv.select", "uv.cursor_set", extend="extend")), *([] if (not params.use_fallback_tool_rmb) else _template_uv_select( type=params.select_mouse, value=params.select_mouse_value, legacy=params.legacy)), ]}, @@ -6172,8 +6283,7 @@ def km_image_editor_tool_uv_select_box(params, *, fallback): *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( "uv.select_box", # Don't use `tool_maybe_tweak_event`, see comment for this slot. - **({"type": params.select_tweak, "value": 'ANY'} if fallback else params.tool_tweak_event))), - *_template_uv_select_for_fallback(params, fallback), + **(params.select_tweak_event if fallback else params.tool_tweak_event))), ]}, ) @@ -6185,8 +6295,7 @@ def km_image_editor_tool_uv_select_circle(params, *, fallback): {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( "uv.select_circle", - type=params.select_tweak if fallback else params.tool_mouse, - value='ANY' if fallback else 'PRESS', + **(params.select_tweak_event if fallback else {"type": params.tool_mouse, "value": 'PRESS'}), properties=[("wait_for_input", False)])), # No selection fallback since this operates on press. ]}, @@ -6201,8 +6310,7 @@ def km_image_editor_tool_uv_select_lasso(params, *, fallback): {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( "uv.select_lasso", - **({"type": params.select_tweak, "value": 'ANY'} if fallback else params.tool_tweak_event))), - *_template_uv_select_for_fallback(params, fallback), + **(params.select_tweak_event if fallback else params.tool_tweak_event))), ]}, ) @@ -6270,12 +6378,15 @@ def km_image_editor_tool_uv_scale(params): ) +# ------------------------------------------------------------------------------ +# Tool System (Node Editor) + def km_node_editor_tool_select(params, *, fallback): return ( _fallback_id("Node Tool: Tweak", fallback), {"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'}, {"items": [ - *([] if fallback else [ + *([] if (fallback and (params.select_mouse == 'RIGHTMOUSE')) else [ ("node.select", {"type": params.select_mouse, "value": 'PRESS'}, {"properties": [("deselect_all", not params.legacy)]}), ]), @@ -6290,7 +6401,8 @@ def km_node_editor_tool_select_box(params, *, fallback): {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( "node.select_box", - type=params.tool_maybe_tweak, value=params.tool_maybe_tweak_value, + # Don't use `tool_maybe_tweak_event`, see comment for this slot. + **(params.select_tweak_event if fallback else params.tool_tweak_event), properties=[("tweak", True)], )), ]}, @@ -6303,7 +6415,7 @@ def km_node_editor_tool_select_lasso(params, *, fallback): {"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'}, {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( - "node.select_lasso", type=params.tool_mouse, value='PRESS', + "node.select_lasso", **(params.select_tweak_event if fallback else params.tool_tweak_event), properties=[("tweak", True)])) ]}, ) @@ -6315,7 +6427,11 @@ def km_node_editor_tool_select_circle(params, *, fallback): {"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'}, {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( - "node.select_circle", type=params.tool_mouse, value='PRESS', + "node.select_circle", + # Why circle select should be used on tweak? + # So that RMB or Shift-RMB is still able to set an element as active. + type=params.select_tweak if fallback else params.tool_mouse, + value='ANY' if fallback else 'PRESS', properties=[("wait_for_input", False)])), ]}, ) @@ -6331,6 +6447,9 @@ def km_node_editor_tool_links_cut(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Generic) + def km_3d_view_tool_cursor(params): return ( "3D View Tool: Cursor", @@ -6349,7 +6468,7 @@ def km_3d_view_tool_select(params, *, fallback): _fallback_id("3D View Tool: Tweak", fallback), {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - *([] if fallback else _template_items_tool_select( + *([] if (fallback and (params.select_mouse == 'RIGHTMOUSE')) else _template_items_tool_select( params, "view3d.select", "view3d.cursor3d", extend="toggle")), *([] if (not params.use_fallback_tool_rmb) else _template_view3d_select( type=params.select_mouse, value=params.select_mouse_value, legacy=params.legacy)), @@ -6365,8 +6484,7 @@ def km_3d_view_tool_select_box(params, *, fallback): *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions( "view3d.select_box", # Don't use `tool_maybe_tweak_event`, see comment for this slot. - **({"type": params.select_tweak, "value": 'ANY'} if fallback else params.tool_tweak_event))), - *_template_view3d_select_for_fallback(params, fallback), + **(params.select_tweak_event if fallback else params.tool_tweak_event))), ]}, ) @@ -6383,7 +6501,6 @@ def km_3d_view_tool_select_circle(params, *, fallback): type=params.select_tweak if fallback else params.tool_mouse, value='ANY' if fallback else 'PRESS', properties=[("wait_for_input", False)])), - # No selection fallback since this operates on press. ]}, ) @@ -6395,8 +6512,7 @@ def km_3d_view_tool_select_lasso(params, *, fallback): {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions( "view3d.select_lasso", - **({"type": params.select_tweak, "value": 'ANY'} if fallback else params.tool_tweak_event))), - *_template_view3d_select_for_fallback(params, fallback), + **(params.select_tweak_event if fallback else params.tool_tweak_event))), ]} ) @@ -6477,6 +6593,9 @@ def km_3d_view_tool_measure(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Pose Mode) + def km_3d_view_tool_pose_breakdowner(params): return ( "3D View Tool: Pose, Breakdowner", @@ -6507,6 +6626,9 @@ def km_3d_view_tool_pose_relax(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Edit Armature) + def km_3d_view_tool_edit_armature_roll(params): return ( "3D View Tool: Edit Armature, Roll", @@ -6562,6 +6684,9 @@ def km_3d_view_tool_edit_armature_extrude_to_cursor(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Object Mode) + def km_3d_view_tool_interactive_add(params): return ( "3D View Tool: Object, Add Primitive", @@ -6578,6 +6703,9 @@ def km_3d_view_tool_interactive_add(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Edit Mesh) + def km_3d_view_tool_edit_mesh_extrude_region(params): return ( "3D View Tool: Edit Mesh, Extrude Region", @@ -6844,6 +6972,9 @@ def km_3d_view_tool_edit_mesh_rip_edge(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Edit Curve) + def km_3d_view_tool_edit_curve_draw(params): return ( "3D View Tool: Edit Curve, Draw", @@ -6911,6 +7042,9 @@ def km_3d_view_tool_edit_curve_extrude_to_cursor(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Sculpt) + def km_3d_view_tool_sculpt_box_hide(params): return ( "3D View Tool: Sculpt, Box Hide", @@ -7066,6 +7200,9 @@ def km_3d_view_tool_sculpt_face_set_edit(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Weight Paint) + def km_3d_view_tool_paint_weight_sample_weight(params): return ( "3D View Tool: Paint Weight, Sample Weight", @@ -7096,6 +7233,9 @@ def km_3d_view_tool_paint_weight_gradient(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Grease Pencil, Paint) + def km_3d_view_tool_paint_gpencil_line(params): return ( "3D View Tool: Paint Gpencil, Line", @@ -7230,12 +7370,15 @@ def km_3d_view_tool_paint_gpencil_interpolate(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Grease Pencil, Edit) + def km_3d_view_tool_edit_gpencil_select(params, *, fallback): return ( _fallback_id("3D View Tool: Edit Gpencil, Tweak", fallback), {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - *([] if fallback else _template_items_tool_select( + *([] if (fallback and (params.select_mouse == 'RIGHTMOUSE')) else _template_items_tool_select( params, "gpencil.select", "view3d.cursor3d", extend="toggle")), *([] if (not params.use_fallback_tool_rmb) else _template_view3d_gpencil_select( type=params.select_mouse, value=params.select_mouse_value, legacy=params.legacy)), @@ -7251,8 +7394,7 @@ def km_3d_view_tool_edit_gpencil_select_box(params, *, fallback): *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions( "gpencil.select_box", # Don't use `tool_maybe_tweak_event`, see comment for this slot. - **({"type": params.select_tweak, "value": 'ANY'} if fallback else params.tool_tweak_event))), - *_template_view3d_gpencil_select_for_fallback(params, fallback), + **(params.select_tweak_event if fallback else params.tool_tweak_event))), ]}, ) @@ -7269,7 +7411,6 @@ def km_3d_view_tool_edit_gpencil_select_circle(params, *, fallback): type=params.select_tweak if fallback else params.tool_mouse, value='ANY' if fallback else 'PRESS', properties=[("wait_for_input", False)])), - # No selection fallback since this operates on press. ]}, ) @@ -7281,8 +7422,7 @@ def km_3d_view_tool_edit_gpencil_select_lasso(params, *, fallback): {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions( "gpencil.select_lasso", - **({"type": params.select_tweak, "value": 'ANY'} if fallback else params.tool_tweak_event))), - *_template_view3d_gpencil_select_for_fallback(params, fallback), + **(params.select_tweak_event if fallback else params.tool_tweak_event))), ]} ) @@ -7368,6 +7508,9 @@ def km_3d_view_tool_edit_gpencil_interpolate(params): ) +# ------------------------------------------------------------------------------ +# Tool System (3D View, Grease Pencil, Sculpt) + def km_3d_view_tool_sculpt_gpencil_select(params): return ( "3D View Tool: Sculpt Gpencil, Tweak", @@ -7403,46 +7546,60 @@ def km_3d_view_tool_sculpt_gpencil_select_lasso(params): ) -def km_sequencer_editor_tool_select(params, *, fallback): +# ------------------------------------------------------------------------------ +# Tool System (Sequencer, Generic) + +def km_sequencer_editor_tool_generic_select(params, *, fallback): return ( - # TODO, fall-back tool support. - _fallback_id("Sequencer Tool: Select", fallback), + _fallback_id("Sequencer Tool: Tweak", fallback), {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ - ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS'}, None), + *([] if (fallback and (params.select_mouse == 'RIGHTMOUSE')) else _template_items_tool_select( + params, "sequencer.select", "sequencer.cursor_set", extend="toggle")), + + *([] if (not params.use_fallback_tool_rmb) else _template_sequencer_preview_select( + type=params.select_mouse, value=params.select_mouse_value, legacy=params.legacy)), + # Ignored for preview. *_template_items_change_frame(params), ]}, ) -def km_sequencer_editor_tool_select_box(params, *, fallback): +def km_sequencer_editor_tool_generic_select_box(params, *, fallback): return ( - # TODO, fall-back tool support. _fallback_id("Sequencer Tool: Select Box", fallback), {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ # Don't use `tool_maybe_tweak_event`, see comment for this slot. - *_template_items_tool_select_actions_simple( - "sequencer.select_box", **params.tool_tweak_event, - properties=[("tweak", params.select_mouse == 'LEFTMOUSE')], - ), + *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( + "sequencer.select_box", + **(params.select_tweak_event if fallback else params.tool_tweak_event), + properties=[("tweak", params.select_mouse == 'LEFTMOUSE')])), + # RMB select can already set the frame, match the tweak tool. + # Ignored for preview. *(_template_items_change_frame(params) if params.select_mouse == 'LEFTMOUSE' else []), ]}, ) -def km_sequencer_editor_tool_generic_sample(params): +def km_sequencer_editor_tool_generic_cursor(params): return ( - "Sequencer Tool: Sample", + "Sequencer Tool: Cursor", {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ - ("sequencer.sample", {"type": params.tool_mouse, "value": 'PRESS'}, None), + ("sequencer.cursor_set", {"type": params.tool_mouse, "value": 'PRESS'}, None), + # Don't use `tool_maybe_tweak_event` since it conflicts with `PRESS` that places the cursor. + ("transform.translate", params.tool_tweak_event, + {"properties": [("release_confirm", True), ("cursor_transform", True)]}), ]}, ) +# ------------------------------------------------------------------------------ +# Tool System (Sequencer, Timeline) + def km_sequencer_editor_tool_blade(_params): return ( "Sequencer Tool: Blade", @@ -7459,12 +7616,25 @@ def km_sequencer_editor_tool_blade(_params): ) +# ------------------------------------------------------------------------------ +# Tool System (Sequencer, Preview) + +def km_sequencer_editor_tool_sample(params): + return ( + "Sequencer Tool: Sample", + {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, + {"items": [ + ("sequencer.sample", {"type": params.tool_mouse, "value": 'PRESS'}, None), + ]}, + ) + + def km_sequencer_editor_tool_move(params): return ( "Sequencer Tool: Move", {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ - ("transform.translate", params.tool_maybe_tweak_event, + ("transform.translate", {**params.tool_maybe_tweak_event, **params.tool_modifier}, {"properties": [("release_confirm", True)]}), ]}, ) @@ -7475,7 +7645,7 @@ def km_sequencer_editor_tool_rotate(params): "Sequencer Tool: Rotate", {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ - ("transform.rotate", params.tool_maybe_tweak_event, + ("transform.rotate", {**params.tool_maybe_tweak_event, **params.tool_modifier}, {"properties": [("release_confirm", True)]}), ]}, ) @@ -7486,7 +7656,7 @@ def km_sequencer_editor_tool_scale(params): "Sequencer Tool: Scale", {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ - ("transform.resize", params.tool_maybe_tweak_event, + ("transform.resize", {**params.tool_maybe_tweak_event, **params.tool_modifier}, {"properties": [("release_confirm", True)]}), ]}, ) @@ -7741,13 +7911,14 @@ def generate_keymaps(params=None): km_3d_view_tool_sculpt_gpencil_select_box(params), km_3d_view_tool_sculpt_gpencil_select_circle(params), km_3d_view_tool_sculpt_gpencil_select_lasso(params), - *(km_sequencer_editor_tool_select(params, fallback=fallback) for fallback in (False, True)), - *(km_sequencer_editor_tool_select_box(params, fallback=fallback) for fallback in (False, True)), + *(km_sequencer_editor_tool_generic_select(params, fallback=fallback) for fallback in (False, True)), + *(km_sequencer_editor_tool_generic_select_box(params, fallback=fallback) for fallback in (False, True)), + km_sequencer_editor_tool_generic_cursor(params), km_sequencer_editor_tool_blade(params), - km_sequencer_editor_tool_generic_sample(params), - km_sequencer_editor_tool_scale(params), - km_sequencer_editor_tool_rotate(params), + km_sequencer_editor_tool_sample(params), km_sequencer_editor_tool_move(params), + km_sequencer_editor_tool_rotate(params), + km_sequencer_editor_tool_scale(params), ] # ------------------------------------------------------------------------------ |