mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-18 17:19:50 +00:00
98 lines
1.9 KiB
GDScript3
98 lines
1.9 KiB
GDScript3
|
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()
|