92 lines
2.5 KiB
GDScript
92 lines
2.5 KiB
GDScript
@tool
|
|
class_name YAMLEditorMenuBar extends MenuBar
|
|
|
|
signal new_file
|
|
signal open_file
|
|
signal save_requested
|
|
signal save_as_requested
|
|
signal close_requested
|
|
|
|
signal undo_requested
|
|
signal redo_requested
|
|
|
|
signal cut_requested
|
|
signal copy_requested
|
|
signal paste_requested
|
|
signal select_all_requested
|
|
|
|
signal find_requested
|
|
signal find_next_requested
|
|
signal find_previous_requested
|
|
signal replace_requested
|
|
|
|
@export var file_menu: PopupMenu
|
|
@export var edit_menu: PopupMenu
|
|
@export var search_menu: PopupMenu
|
|
|
|
func _ready() -> void:
|
|
# Wait for UI to be ready
|
|
await get_tree().process_frame
|
|
|
|
# Set up the menu bar
|
|
_setup_menus()
|
|
|
|
func _setup_menus() -> void:
|
|
# File menu
|
|
file_menu.clear()
|
|
file_menu.add_item("New", 0, KEY_MASK_CTRL | KEY_N)
|
|
file_menu.add_item("Open...", 1, KEY_MASK_CTRL | KEY_O)
|
|
file_menu.add_separator()
|
|
file_menu.add_item("Save", 2, KEY_MASK_CTRL | KEY_S)
|
|
file_menu.add_item("Save As...", 3, KEY_MASK_CTRL | KEY_MASK_SHIFT | KEY_S)
|
|
file_menu.add_separator()
|
|
file_menu.add_item("Close", 4, KEY_MASK_CTRL | KEY_W)
|
|
|
|
# Edit menu
|
|
edit_menu.clear()
|
|
edit_menu.add_item("Undo", 0, KEY_MASK_CTRL | KEY_Z)
|
|
edit_menu.add_item("Redo", 1, KEY_MASK_CTRL | KEY_MASK_SHIFT | KEY_Z)
|
|
edit_menu.add_separator()
|
|
edit_menu.add_item("Cut", 2, KEY_MASK_CTRL | KEY_X)
|
|
edit_menu.add_item("Copy", 3, KEY_MASK_CTRL | KEY_C)
|
|
edit_menu.add_item("Paste", 4, KEY_MASK_CTRL | KEY_V)
|
|
edit_menu.add_separator()
|
|
edit_menu.add_item("Select All", 5, KEY_MASK_CTRL | KEY_A)
|
|
|
|
# Search menu
|
|
search_menu.clear()
|
|
search_menu.add_item("Find...", 0, KEY_MASK_CTRL | KEY_F)
|
|
search_menu.add_item("Find Next", 1, KEY_F3)
|
|
search_menu.add_item("Find Previous", 2, KEY_MASK_SHIFT | KEY_F3)
|
|
search_menu.add_separator()
|
|
search_menu.add_item("Replace...", 3, KEY_MASK_CTRL | KEY_R)
|
|
|
|
# Connect signals
|
|
file_menu.id_pressed.connect(_on_file_menu_id_pressed)
|
|
edit_menu.id_pressed.connect(_on_edit_menu_id_pressed)
|
|
search_menu.id_pressed.connect(_on_search_menu_id_pressed)
|
|
|
|
func _on_file_menu_id_pressed(id: int) -> void:
|
|
match id:
|
|
0: new_file.emit()
|
|
1: open_file.emit()
|
|
2: save_requested.emit()
|
|
3: save_as_requested.emit()
|
|
4: close_requested.emit()
|
|
|
|
func _on_edit_menu_id_pressed(id: int) -> void:
|
|
match id:
|
|
0: undo_requested.emit()
|
|
1: redo_requested.emit()
|
|
2: cut_requested.emit()
|
|
3: copy_requested.emit()
|
|
4: paste_requested.emit()
|
|
5: select_all_requested.emit()
|
|
|
|
func _on_search_menu_id_pressed(id: int) -> void:
|
|
match id:
|
|
0: find_requested.emit()
|
|
1: find_next_requested.emit()
|
|
2: find_previous_requested.emit()
|
|
3: replace_requested.emit()
|