74 lines
2.3 KiB
GDScript
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))
|