cliff-hanger/addons/ui_design_tool/plugin.gd

88 lines
2.5 KiB
GDScript
Executable File

tool
extends EditorPlugin
const Toolbar = preload("scenes/Toolbar.tscn")
const OverlayTextEdit = preload("scenes/OverlayTextEdit.tscn")
var toolbar
var overlay_text_edit
var editor_inspector = get_editor_interface().get_inspector()
var editor_selection = get_editor_interface().get_selection()
func _enter_tree():
toolbar = Toolbar.instance()
toolbar.undo_redo = get_undo_redo()
toolbar.connect("property_edited", self, "_on_Toolbar_property_edited")
overlay_text_edit = OverlayTextEdit.instance()
overlay_text_edit.undo_redo = get_undo_redo()
overlay_text_edit.connect("property_edited", self, "_on_OverlayTextEdit_property_edited")
editor_inspector.connect("property_selected", self, "_on_property_selected")
editor_selection.connect("selection_changed", self, "_on_selection_changed")
add_control_to_container(EditorPlugin.CONTAINER_CANVAS_EDITOR_BOTTOM, toolbar)
add_control_to_container(EditorPlugin.CONTAINER_CANVAS_EDITOR_BOTTOM, overlay_text_edit)
func _exit_tree():
if toolbar:
toolbar.queue_free()
if overlay_text_edit:
overlay_text_edit.queue_free()
func handles(object):
if object is Control:
make_visible(true)
return true
make_visible(false)
return false
func forward_canvas_gui_input(event):
if event is InputEventMouseButton:
if event.button_index == BUTTON_LEFT:
if event.doubleclick: # Always false when selected multiple nodes
if toolbar.focused_objects:
overlay_text_edit.popup()
return true
return false
func make_visible(visible):
if toolbar:
toolbar.visible = visible
#overlay_text_edit only visible on double click
func _on_property_selected(property):
toolbar.focused_property = property
toolbar.focused_inspector = editor_inspector.get_focus_owner()
func _on_selection_changed():
var selections = editor_selection.get_selected_nodes()
var is_visible = false
var focused_objects
if selections.size() == 1:
var selection = selections[0]
if selection is Control:
focused_objects = [selection]
is_visible = true
elif selections.size() > 1:
var has_non_control = false
for selection in selections:
if not (selection is Control):
has_non_control = true
break
if not has_non_control:
is_visible = true
focused_objects = selections
else:
focused_objects = []
toolbar.visible = is_visible
toolbar.focused_objects = focused_objects
overlay_text_edit.focused_objects = focused_objects
func _on_Toolbar_property_edited(property):
editor_inspector.refresh()
func _on_OverlayTextEdit_property_edited(property):
editor_inspector.refresh()