Files
algodoogle 5e0b58a984 add kanban
2026-07-16 15:52:34 +01:00

74 lines
2.3 KiB
GDScript

@tool
extends Node
var delete := Shortcut.new()
var duplicate := Shortcut.new()
var create := Shortcut.new()
var rename := Shortcut.new()
var search := Shortcut.new()
var confirm := Shortcut.new()
var undo := Shortcut.new()
var redo := Shortcut.new()
var save := Shortcut.new()
var save_as := Shortcut.new()
## Returns whether a specific node should handle the shortcut.
static func should_handle_shortcut(node: Node) -> bool:
var focus_owner := node.get_viewport().gui_get_focus_owner()
return focus_owner and (node.is_ancestor_of(focus_owner) or focus_owner == node)
func _ready() -> void:
if Engine.is_editor_hint():
# TODO: Update on editor settings change.
__update_shortcuts_editor()
else:
__update_shortcuts_standalone()
func __update_shortcuts_editor() -> void:
var editor_settings = Engine.get_singleton(&"EditorInterface").get_editor_settings()
delete = editor_settings.get_shortcut("scene_tree/delete")
duplicate = editor_settings.get_shortcut("scene_tree/duplicate")
create = editor_settings.get_shortcut("scene_tree/add_child_node")
rename = editor_settings.get_shortcut("scene_tree/rename")
search = editor_settings.get_shortcut("editor/open_search")
confirm = editor_settings.get_shortcut("ui_accept")
undo = editor_settings.get_shortcut("ui_undo")
redo = editor_settings.get_shortcut("ui_redo")
func __create(key: Key, shift: bool, ctrl: bool):
var ev := InputEventKey.new()
ev.command_or_control_autoremap = ctrl
ev.shift_pressed = shift
ev.keycode = key
var shortcut := Shortcut.new()
shortcut.events.append(ev)
return shortcut
func __get(action: String, fallback: Shortcut = null) -> Shortcut:
if InputMap.has_action(action):
var shortcut := Shortcut.new()
shortcut.events = InputMap.action_get_events(action)
return shortcut
return fallback
func __update_shortcuts_standalone() -> void:
delete = __get("ui_kanban_delete", __get("ui_text_delete"))
duplicate = __get("ui_kanban_duplicate", __get("ui_graph_duplicate"))
create = __get("ui_kanban_create", __create(KEY_A, false, true))
rename = __get("ui_kanban_rename", __create(KEY_F2, false, false))
search = __get("ui_kanban_search", __get("ui_filedialog_find"))
confirm = __get("ui_accept")
undo = __get("ui_undo")
redo = __get("ui_redo")
save = __get("ui_kanban_save", __create(KEY_S, false, true))
save_as = __get("ui_kanban_save_as", __create(KEY_S, true, true))