1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-18 17:19:50 +00:00
Pixelorama/addons/dockable_container/layout_panel.gd

98 lines
1.9 KiB
GDScript3
Raw Normal View History

tool
extends "layout_node.gd"
# Layout leaf nodes, defining tabs
export(PoolStringArray) var names: PoolStringArray setget set_names, get_names
export(int) var current_tab: int setget set_current_tab, get_current_tab
var _names := PoolStringArray()
var _current_tab := 0
func _init() -> void:
resource_name = "Tabs"
func clone():
var new_panel = get_script().new()
new_panel._names = _names
new_panel._current_tab = _current_tab
return new_panel
func set_current_tab(value: int) -> void:
if value != _current_tab:
_current_tab = value
emit_tree_changed()
func get_current_tab() -> int:
return int(clamp(_current_tab, 0, _names.size() - 1))
func set_names(value: PoolStringArray) -> void:
_names = value
emit_tree_changed()
func get_names() -> PoolStringArray:
return _names
func push_name(name: String) -> void:
_names.append(name)
emit_tree_changed()
func insert_node(position: int, node: Node) -> void:
_names.insert(position, node.name)
emit_tree_changed()
func find_name(node_name: String) -> int:
for i in _names.size():
if _names[i] == node_name:
return i
return -1
func find_node(node: Node):
return find_name(node.name)
func remove_node(node: Node) -> void:
var i = find_node(node)
if i >= 0:
_names.remove(i)
emit_tree_changed()
else:
push_warning("Remove failed, node '%s' was not found" % node)
func rename_node(previous_name: String, new_name: String) -> void:
var i = find_name(previous_name)
if i >= 0:
_names.set(i, new_name)
emit_tree_changed()
else:
push_warning("Rename failed, name '%s' was not found" % previous_name)
func empty() -> bool:
return _names.empty()
func update_nodes(node_names: PoolStringArray, data: Dictionary):
var i = 0
var removed_any = false
while i < _names.size():
var current = _names[i]
if not current in node_names or data.has(current):
_names.remove(i)
removed_any = true
else:
data[current] = self
i += 1
if removed_any:
emit_tree_changed()