From 4dd2c61986b710a2703b199e0ee396ec896024d2 Mon Sep 17 00:00:00 2001 From: Lucho Suaya Date: Mon, 27 Oct 2025 18:58:41 +0100 Subject: [PATCH 1/2] Implemented drag and drop reorder of script list in script editor --- addons/script_splitter/core/base/list.gd | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/addons/script_splitter/core/base/list.gd b/addons/script_splitter/core/base/list.gd index 442fff7..9d8bd4c 100644 --- a/addons/script_splitter/core/base/list.gd +++ b/addons/script_splitter/core/base/list.gd @@ -101,6 +101,7 @@ func _init(list : ItemList) -> void: _script_list.item_activated.connect(_on_sc_item_activate) _script_list.item_clicked.connect(_on_sc_item_clicked) #_editor_list.draw.connect(_on_update_list) + _script_list.gui_input.connect(_on_script_list_gui_input) _script_list.add_to_group(&"__SP_LT__") _array_list = [_editor_list, _script_list] @@ -184,6 +185,37 @@ func _on_update_list_search(txt : String) -> void: update_list_selection() +func _on_script_list_gui_input(event: InputEvent) -> void: + # Handle drag and drop for script list reordering + if event is not InputEventMouseMotion or not Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT): + return + + var script_editor: ScriptEditor = EditorInterface.get_script_editor() + if !is_instance_valid(_script_list) or !is_instance_valid(_editor_list) or !is_instance_valid(script_editor): + return + + var hovered_item: int = _script_list.get_item_at_position(_script_list.get_local_mouse_position(), true) + var selected_items: PackedInt32Array = _script_list.get_selected_items() + if hovered_item < 0 or selected_items.size() <= 0: + return + + var selected_item: int = selected_items[0] + if hovered_item == selected_item: + return + + # Move the duplicate first and then the original (for persistence) + _script_list.move_item(selected_item, hovered_item) + if _editor_list.item_count > selected_item and _editor_list.item_count > hovered_item: + _editor_list.move_item(selected_item, hovered_item) + + # Find the editor TabContainer that matches our item count + var editors: Array[Node] = script_editor.find_children("*", "TabContainer", true, false) + for tab_container: TabContainer in editors: + if tab_container.get_child_count() == _editor_list.item_count: + if tab_container.get_child_count() > selected_item and tab_container.get_child_count() > hovered_item: + tab_container.move_child(tab_container.get_child(selected_item), hovered_item) + break + func update_list_selection() -> void: if update_selections_callback.is_valid(): update_selections_callback.call(_array_list) From 291378a8bc72e0b01ba7eb5fc779c9107c7657b1 Mon Sep 17 00:00:00 2001 From: Lucho Suaya Date: Wed, 29 Oct 2025 11:35:48 +0100 Subject: [PATCH 2/2] Fixed broken dependencies in Pin.tscn (likely coming from renaming) --- addons/script_splitter/core/ui/pin/Pin.tscn | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/script_splitter/core/ui/pin/Pin.tscn b/addons/script_splitter/core/ui/pin/Pin.tscn index cbd9174..caeee22 100644 --- a/addons/script_splitter/core/ui/pin/Pin.tscn +++ b/addons/script_splitter/core/ui/pin/Pin.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=4 format=3 uid="uid://cnbyjwmktxipx"] -[ext_resource type="Script" uid="uid://w8t1dg3mooti" path="res://addons/script_spliter/core/ui/pin/control.gd" id="1_2gb5h"] -[ext_resource type="Script" uid="uid://cl3i4qjav3ikw" path="res://addons/script_spliter/core/ui/pin/root.gd" id="1_e0xng"] -[ext_resource type="Script" uid="uid://c34ix3uq8fdae" path="res://addons/script_spliter/core/ui/pin/pin.gd" id="1_ulj15"] +[ext_resource type="Script" uid="uid://w8t1dg3mooti" path="res://addons/script_splitter/core/ui/pin/control.gd" id="1_2gb5h"] +[ext_resource type="Script" uid="uid://cl3i4qjav3ikw" path="res://addons/script_splitter/core/ui/pin/root.gd" id="1_e0xng"] +[ext_resource type="Script" uid="uid://c34ix3uq8fdae" path="res://addons/script_splitter/core/ui/pin/pin.gd" id="1_ulj15"] [node name="Control" type="Control"] layout_mode = 3