@tool extends PanelContainer var shortcuts := [ {"shortcut":"Ctrl+T", "text":"Add Text event", "editor":"VisualEditor"}, {"shortcut":"Ctrl+Shift+T", "text":"Add Text event with current character", "editor":"VisualEditor"}, {"shortcut":"Ctrl+Alt/Opt+T", "text":"Add Text event with previous character", "editor":"VisualEditor"}, {"shortcut":"Ctrl+E", "text":"Add Character join event", "editor":"VisualEditor"}, {"shortcut":"Ctrl+Shift+E", "text":"Add Character update event", "editor":"VisualEditor"}, {"shortcut":"Ctrl+Alt/Opt+E", "text":"Add Character leave event", "editor":"VisualEditor"}, {"shortcut":"Ctrl+J", "text":"Add Jump event", "editor":"VisualEditor"}, {"shortcut":"Ctrl+L", "text":"Add Label event", "editor":"VisualEditor"}, {}, {"shortcut":"Alt/Opt+Up", "text":"Move selected events/lines up"}, {"shortcut":"Alt/Opt+Down", "text":"Move selected events/lines down"}, {}, {"shortcut":"Ctrl+F", "text":"Search"}, {"shortcut":"Ctrl+R", "text":"Replace"}, {}, {"shortcut":"Ctrl+F5", "text":"Play timeline", "platform":"-macOS"}, {"shortcut":"Ctrl+B", "text":"Play timeline", "platform":"macOS"}, {"shortcut":"Ctrl+F6", "text":"Play timeline from here", "platform":"-macOS"}, {"shortcut":"Ctrl+Shift+B", "text":"Play timeline from here", "platform":"macOS"}, {}, {"shortcut":"Ctrl+C", "text":"Copy"}, {"shortcut":"Ctrl+V", "text":"Paste"}, {"shortcut":"Ctrl+D", "text":"Duplicate selected events/lines"}, {"shortcut":"Ctrl+X", "text":"Cut selected events/lines"}, {"shortcut":"Ctrl+K", "text":"Toggle Comment" , "editor":"TextEditor"}, {"shortcut":"Delete", "text":"Delete events", "editor":"VisualEditor"}, {}, {"shortcut":"Ctrl+A", "text":"Select All"}, {"shortcut":"Ctrl+Shift+A", "text":"Select Nothing", "editor":"VisualEditor"}, {"shortcut":"Up", "text":"Select previous event", "editor":"VisualEditor"}, {"shortcut":"Down", "text":"Select next event", "editor":"VisualEditor"}, {}, {"shortcut":"Ctrl+Z", "text":"Undo"}, {"shortcut":"Ctrl+Shift+Z", "text":"Redo"}, {}, ] # Called when the node enters the scene tree for the first time. func _ready() -> void: %CloseShortcutPanel.icon = get_theme_icon("Close", "EditorIcons") get_theme_stylebox("panel").bg_color = get_theme_color("dark_color_3", "Editor") func reload_shortcuts() -> void: for i in %ShortcutList.get_children(): i.queue_free() var is_text_editor: bool = %TextEditor.visible for i in shortcuts: if i.is_empty(): %ShortcutList.add_child(HSeparator.new()) %ShortcutList.add_child(HSeparator.new()) continue if "editor" in i and not get_node("%"+i.editor).visible: continue if "platform" in i: var platform := OS.get_name() if not (platform == i.platform.trim_prefix("-") != i.platform.begins_with("-")): continue var hbox := HBoxContainer.new() hbox.add_theme_constant_override("separation", 0) for key_text in i.shortcut.split("+"): if hbox.get_child_count(): var plus_l := Label.new() plus_l.text = "+" hbox.add_child(plus_l) var key := Button.new() if key_text == "Up": key.icon = get_theme_icon("ArrowUp", "EditorIcons") elif key_text == "Down": key.icon = get_theme_icon("ArrowDown", "EditorIcons") else: key_text = key_text.replace("Alt/Opt", "Opt" if OS.get_name() == "macOS" else "Alt") key.text = key_text key.disabled = true key.theme_type_variation = "ShortcutKeyLabel" key.add_theme_font_override("font", get_theme_font("source", "EditorFonts")) hbox.add_child(key) %ShortcutList.add_child(hbox) var text := Label.new() text.text = i.text.replace("events/lines", "lines" if is_text_editor else "events") text.theme_type_variation = "DialogicHintText2" %ShortcutList.add_child(text) func open(): if visible: close() return reload_shortcuts() show() await get_tree().process_frame size = get_parent().size - Vector2(100, 100)*DialogicUtil.get_editor_scale() size.x = %ShortcutList.get_minimum_size().x + 100 size.y = min(size.y, %ShortcutList.get_minimum_size().y+100) global_position = get_parent().global_position+get_parent().size/2-size/2 func _on_close_shortcut_panel_pressed() -> void: close() func close() -> void: hide()