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()