Files
2025-07-20 10:34:21 +02:00

143 lines
4.3 KiB
GDScript

@tool
extends TabContainer
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Spliter
# https://github.com/CodeNameTwister/Script-Spliter
#
# Script Spliter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
@warning_ignore("unused_signal")
signal on_dragging(e : Control)
signal out_dragging(e : Control)
const DDTAB : Script = preload("res://addons/script_spliter/core/DDTAB.gd")
var _buffer_editors : Array[Object] = []
#static var _tab_focus : StyleBox = null
#static var _tab_disabled : StyleBox = null
#static var _tab_selected : StyleBox = null
#static var _tab_hovered : StyleBox = null
#static var _tab_unselected : StyleBox = null
func _config_tab(_tab : StyleBox) -> void:
if _tab is StyleBoxFlat:
_tab.skew.x = 0.5
_tab.border_color = Color.AQUA
#_tab.border_width_left = 0.0
#_tab.border_width_right = 0.0
#_tab.border_width_top = 0.0
#_tab.border_width_bottom = 0.1
func _ready() -> void:
pass
#var root : Control = EditorInterface.get_base_control()
#if root:
#if _tab_focus == null:
#_tab_focus = root.get_theme_stylebox(&"panel", &"tab_focus")
#if _tab_focus is StyleBoxFlat:
#_tab_focus = _tab_focus.duplicate()
#_config_tab(_tab_focus)
#if _tab_disabled == null:
#_tab_disabled = root.get_theme_stylebox(&"panel", &"tab_disabled")
#if _tab_disabled is StyleBoxFlat:
#_tab_disabled = _tab_disabled.duplicate()
#_config_tab(_tab_disabled)
#if _tab_selected == null:
#_tab_selected = root.get_theme_stylebox(&"panel", &"tab_selected")
#if _tab_selected is StyleBoxFlat:
#_tab_selected = _tab_selected.duplicate()
#_config_tab(_tab_selected)
#if _tab_hovered == null:
#_tab_hovered = root.get_theme_stylebox(&"panel", &"tab_hovered")
#if _tab_hovered is StyleBoxFlat:
#_tab_hovered = _tab_hovered.duplicate()
#_config_tab(_tab_hovered)
#if _tab_unselected == null:
#_tab_unselected = root.get_theme_stylebox(&"panel", &"tab_unselected")
#if _tab_unselected is StyleBoxFlat:
#_tab_unselected = _tab_unselected.duplicate()
#_config_tab(_tab_unselected)
#set(&"theme_override_styles/tab_focus", _tab_focus)
#set(&"theme_override_styles/tab_disabled", _tab_disabled)
#set(&"theme_override_styles/tab_selected", _tab_selected)
#set(&"theme_override_styles/tab_hovered", _tab_hovered)
#set(&"theme_override_styles/tab_unselected", _tab_unselected)
func reset() -> void:
for x : Node in get_children(true):
if x is TabBar:
if x.get_script() == DDTAB:
x.reset()
func clear_editors() -> void:
_buffer_editors.clear()
func add_editor(o : Object, limit : int) -> Object:
if is_instance_valid(o):
if limit > 0:
var i : int = _buffer_editors.find(o)
if i > -1:
_buffer_editors.remove_at(i)
_buffer_editors.append(o)
if limit > -1:
while _buffer_editors.size() > limit:
_buffer_editors.remove_at(0)
return o
func remove_editor(o : Object) -> void:
_buffer_editors.erase(o)
func backward_editor() -> Object:
if _buffer_editors.size() > 1:
var o : Variant = _buffer_editors.pop_back()
while !is_instance_valid(o) and _buffer_editors.size() > 0:
o = _buffer_editors.pop_back()
if is_instance_valid(o):
_buffer_editors.push_front(o)
return o
return null
func forward_editor() -> Object:
if _buffer_editors.size() > 1:
var o : Object = _buffer_editors.pop_front()
while !is_instance_valid(o) and _buffer_editors.size() > 0:
o = _buffer_editors.pop_front()
if is_instance_valid(o):
_buffer_editors.push_back(o)
return o
return null
func _on_child(n : Node) -> void:
if n is TabBar:
if n.get_script() != DDTAB:
n.set_script(DDTAB)
if !n.on_start_drag.is_connected(_on_start_drag):
n.on_start_drag.connect(_on_start_drag)
if !n.on_stop_drag.is_connected(_on_stop_drag):
n.on_stop_drag.connect(_on_stop_drag)
func _out_child(n : Node) -> void:
if n is TabBar:
if n.on_start_drag.is_connected(_on_start_drag):
n.on_start_drag.disconnect(_on_start_drag)
if n.on_stop_drag.is_connected(_on_stop_drag):
n.on_stop_drag.disconnect(_on_stop_drag)
if n.get_script() == DDTAB:
n.set_script(null)
func _on_stop_drag(tab : TabBar) -> void:
out_dragging.emit(tab)
func _on_start_drag(tab : TabBar) -> void:
on_dragging.emit(tab)
func _init() -> void:
child_entered_tree.connect(_on_child)
child_exiting_tree.connect(_out_child)