mirror of
https://github.com/Relintai/material-maker.git
synced 2024-12-23 21:16:54 +01:00
63 lines
1.7 KiB
GDScript3
63 lines
1.7 KiB
GDScript3
|
extends Panel
|
||
|
|
||
|
export var rearrange_group : int = 0
|
||
|
|
||
|
var current_tab = -1
|
||
|
|
||
|
signal tab_changed
|
||
|
signal no_more_tabs
|
||
|
|
||
|
func _ready():
|
||
|
$Tabs.set_tabs_rearrange_group(rearrange_group)
|
||
|
add_to_group("tab_group_"+str(rearrange_group))
|
||
|
|
||
|
func add_child(control, legible_unique_name = false) -> void:
|
||
|
.add_child(control, legible_unique_name)
|
||
|
if !(control is Tabs):
|
||
|
$Tabs.add_tab(control.name)
|
||
|
set_current_tab($Tabs.get_tab_count()-1)
|
||
|
|
||
|
func close_tab(tab = null) -> void:
|
||
|
if tab == null:
|
||
|
tab = $Tabs.get_current_tab()
|
||
|
get_node($Tabs.get_tab_title(tab)).queue_free()
|
||
|
$Tabs.remove_tab(tab)
|
||
|
if $Tabs.get_tab_count() == 0:
|
||
|
emit_signal("no_more_tabs")
|
||
|
current_tab = -1
|
||
|
else:
|
||
|
set_current_tab(0)
|
||
|
|
||
|
func set_current_tab(t) -> void:
|
||
|
if t == current_tab or t < 0 or t >= $Tabs.get_tab_count():
|
||
|
if $Tabs.get_tab_count():
|
||
|
current_tab = -1
|
||
|
return
|
||
|
print("Setting current tab to "+str(t))
|
||
|
var node
|
||
|
if current_tab >= 0:
|
||
|
node = get_node($Tabs.get_tab_title(current_tab))
|
||
|
if node != null:
|
||
|
node.visible = false
|
||
|
print("Hiding "+$Tabs.get_tab_title($Tabs.current_tab))
|
||
|
$Tabs.current_tab = t
|
||
|
current_tab = t
|
||
|
node = null
|
||
|
for tab_container in get_tree().get_nodes_in_group("tab_group_"+str(rearrange_group)):
|
||
|
print(tab_container.name)
|
||
|
node = tab_container.get_node($Tabs.get_tab_title(t))
|
||
|
if node != null:
|
||
|
break
|
||
|
print(node)
|
||
|
if node != null:
|
||
|
if node.get_parent() != self:
|
||
|
node.get_parent().call_deferred("set_current_tab", 0)
|
||
|
node.get_parent().remove_child(node)
|
||
|
.add_child(node)
|
||
|
node.visible = true
|
||
|
node.rect_position = Vector2(0, $Tabs.rect_size.y)
|
||
|
node.rect_size = rect_size - node.rect_position
|
||
|
else:
|
||
|
print("Did not find panel")
|
||
|
emit_signal("tab_changed", t)
|