58 lines
1.2 KiB
GDScript
58 lines
1.2 KiB
GDScript
extends Container
|
|
|
|
|
|
var flex_tab : WeakRef
|
|
var current : int = -1
|
|
|
|
|
|
func _init():
|
|
set_meta("flexlayout", true)
|
|
|
|
func get_controls() -> Array[Control]:
|
|
var controls : Array[Control] = []
|
|
for c in $Tabs.get_children():
|
|
controls.append(c.flex_panel)
|
|
return controls
|
|
|
|
func get_control_index(fp : Control) -> int:
|
|
for i in range($Tabs.get_child_count()):
|
|
if fp == $Tabs.get_child(i).flex_panel:
|
|
return i
|
|
return -1
|
|
|
|
func add(ft : Control):
|
|
var tab = load("res://addons/flexible_layout/flexible_tab.tscn").instantiate()
|
|
tab.init(ft)
|
|
$Tabs.add_child(tab)
|
|
if current == -1:
|
|
set_current(0)
|
|
else:
|
|
ft.visible = false
|
|
|
|
func erase(ft : Control):
|
|
var index : int = get_control_index(ft)
|
|
if ft.get_parent() != null:
|
|
ft.get_parent().remove_child(ft)
|
|
$Tabs.remove_child($Tabs.get_child(index))
|
|
if index == current:
|
|
if $Tabs.get_child_count() > 0:
|
|
set_current(0)
|
|
else:
|
|
set_current(-1)
|
|
|
|
func get_flex_tab():
|
|
return flex_tab.get_ref()
|
|
|
|
func set_flex_tab(ft):
|
|
flex_tab = weakref(ft)
|
|
|
|
func set_current(c : int):
|
|
current = c
|
|
for i in range($Tabs.get_child_count()):
|
|
$Tabs.get_child(i).flex_panel.visible = (i == current)
|
|
$Tabs.get_child(i).update()
|
|
|
|
func _on_resized():
|
|
#print("%s: %s - %s" % [ str(self), str(position), str(size) ])
|
|
$Tabs.queue_sort()
|