1
0
forked from joey/godottest
Joey Eamigh 9989fab018
addons?
2025-10-10 14:07:23 -04:00

75 lines
1.9 KiB
GDScript

extends RefCounted
class_name SS2D_EditorTool
const CONFIG_OPTIONS_SECTION = "options"
var _editor_plugin: SS2D_Plugin
var _toolbar: Control
var _options_menu: PopupMenu
var _options_entries := {} ## Dict[int, Callable]
func load_config(_conf: ConfigFile) -> void:
pass
func save_config(_conf: ConfigFile) -> void:
pass
## Initialize the tool and register UI controls.
## Derived classes must call the base implementation!
func register(editor_plugin: EditorPlugin) -> void:
_editor_plugin = editor_plugin
# TODO: Add an abstraction with tighter interface for the toolbar, e.g. SS2D_Toolbar
_toolbar = _editor_plugin.tb_hb
_options_menu = _editor_plugin.tb_options_popup
_options_menu.index_pressed.connect(_on_options_index_pressed_dispatch)
## Create a tool button in the toolbar.
func create_tool_button(icon: Texture2D, tooltip: String, toggle: bool = true) -> Button:
return _editor_plugin.create_tool_button(icon, tooltip, toggle)
func perform_action(action: SS2D_Action) -> void:
_editor_plugin.perform_action(action)
func create_options_item(label: String, callback: Callable) -> void:
_options_menu.add_item(label)
_options_entries[_options_menu.item_count - 1] = callback
func get_options_menu() -> PopupMenu:
return _options_menu
func get_toolbar() -> Control:
return _toolbar
func get_plugin() -> EditorPlugin:
return _editor_plugin
func get_shape() -> SS2D_Shape:
return _editor_plugin.shape
## Adds the dialog node to the tree and displays it.
## Connects to `confirmed` and `canceled` signals to `queue_free()` it when closed.
func show_oneshot_dialog(dialog: AcceptDialog) -> void:
dialog.confirmed.connect(dialog.queue_free)
dialog.canceled.connect(dialog.queue_free)
_editor_plugin.add_child(dialog)
dialog.popup_centered()
func _on_options_index_pressed_dispatch(idx: int) -> void:
var callback: Callable = _options_entries.get(idx)
if callback:
callback.call()