forked from joey/godottest
75 lines
1.9 KiB
GDScript
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()
|