88 lines
2.5 KiB
GDScript
Executable File
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()
|