93 lines
2.6 KiB
GDScript
93 lines
2.6 KiB
GDScript
@tool
|
|
extends EditorPlugin
|
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
# Script Splitter
|
|
# https://github.com/CodeNameTwister/Script-Splitter
|
|
#
|
|
# Script Splitter addon for godot 4
|
|
# author: "Twister"
|
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
|
|
|
|
const InputTool = preload("core/Input.gd")
|
|
const TWISTER_script_splitter = preload("core/builder.gd")
|
|
var builder : TWISTER_script_splitter = null
|
|
var handler : InputTool = null
|
|
|
|
var tab_container : Node = null:
|
|
get:
|
|
if !is_instance_valid(tab_container):
|
|
var script_editor: ScriptEditor = EditorInterface.get_script_editor()
|
|
tab_container = find(script_editor, "*", "TabContainer")
|
|
return tab_container
|
|
var item_list : Node = null:
|
|
get:
|
|
if !is_instance_valid(item_list):
|
|
var script_editor: ScriptEditor = EditorInterface.get_script_editor()
|
|
item_list = find(script_editor, "*", "ItemList")
|
|
return item_list
|
|
|
|
func find(root : Node, pattern : String, type : String) -> Node:
|
|
var e : Array[Node] = root.find_children(pattern, type, true, false)
|
|
if e.size() > 0:
|
|
return e[0]
|
|
return null
|
|
|
|
func _enter_tree() -> void:
|
|
add_to_group(&"__SCRIPT_SPLITTER__")
|
|
builder = TWISTER_script_splitter.new()
|
|
handler = InputTool.new(self, builder)
|
|
|
|
func script_split() -> void:
|
|
handler.get_honey_splitter().split()
|
|
|
|
func script_merge(value : Node = null) -> void:
|
|
handler.get_honey_splitter().merge(value)
|
|
|
|
func _ready() -> void:
|
|
set_process(false)
|
|
set_process_input(false)
|
|
for __ : int in range(5):
|
|
await Engine.get_main_loop().process_frame
|
|
if is_instance_valid(builder):
|
|
builder.init_1(self, tab_container, item_list)
|
|
if is_instance_valid(handler):
|
|
handler.init_1()
|
|
|
|
builder.connect_callbacks(
|
|
handler.add_column,
|
|
handler.add_row,
|
|
handler.remove_column,
|
|
handler.remove_row,
|
|
handler.left_tab_close,
|
|
handler.right_tab_close,
|
|
handler.others_tab_close
|
|
)
|
|
|
|
func _save_external_data() -> void:
|
|
builder.refresh_warnings()
|
|
|
|
func remove_from_control(control : Node) -> void:
|
|
builder.reset_by_control(control)
|
|
|
|
func _exit_tree() -> void:
|
|
remove_from_group(&"__SCRIPT_SPLITTER__")
|
|
for x : Variant in [handler, builder]:
|
|
if is_instance_valid(x) and x is Object:
|
|
x.call(&"init_0")
|
|
|
|
func get_builder() -> Object:
|
|
return builder
|
|
|
|
func _process(delta: float) -> void:
|
|
builder.update(delta)
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if handler.event(event):
|
|
get_viewport().set_input_as_handled()
|
|
|
|
func _io_call(id : StringName) -> void:
|
|
builder.handle(id)
|
|
|
|
func move_item_container(container : TabContainer, from : int, to : int) -> void:
|
|
builder.get_editor_manager().move_item_container(container, from, to)
|