2024-01-17 07:31:39 +01:00
|
|
|
# (c) 2023-present Eroax
|
|
|
|
# (c) 2023-present Yagich
|
|
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
extends VBoxContainer
|
|
|
|
class_name VariableViewer
|
|
|
|
|
|
|
|
@onready var variable_tree: Tree = %VariableTree
|
|
|
|
var root: TreeItem
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
variable_tree.set_column_title(0, "Name")
|
|
|
|
variable_tree.set_column_title(1, "Value")
|
|
|
|
variable_tree.set_column_title(2, "Type")
|
|
|
|
variable_tree.set_column_expand(1, true)
|
|
|
|
variable_tree.set_column_expand_ratio(0, 15)
|
|
|
|
variable_tree.set_column_expand_ratio(1, 70)
|
|
|
|
variable_tree.set_column_expand_ratio(2, 15)
|
|
|
|
root = variable_tree.create_item()
|
|
|
|
rebuild_variable_tree()
|
|
|
|
|
|
|
|
|
|
|
|
func rebuild_variable_tree(data: Dictionary = {}) -> void:
|
|
|
|
#variable_tree.clear() # godot will raw dog a nullptr later if we clear the whole tree
|
|
|
|
for i in root.get_children():
|
|
|
|
i.free()
|
|
|
|
|
|
|
|
for i in data:
|
2024-01-17 08:55:54 +01:00
|
|
|
add_item(i, data[i])
|
|
|
|
|
|
|
|
|
|
|
|
func add_item(item_name: String, item_value: Variant, parent: TreeItem = root) -> TreeItem:
|
|
|
|
var item := variable_tree.create_item(parent)
|
|
|
|
item.set_text(0, item_name)
|
|
|
|
var type: DeckType.Types = DeckType.INVERSE_GODOT_TYPES_MAP[typeof(item_value)]
|
2024-01-17 10:45:23 +01:00
|
|
|
|
|
|
|
match type:
|
|
|
|
DeckType.Types.NUMERIC:
|
|
|
|
item.set_cell_mode(1, TreeItem.CELL_MODE_RANGE)
|
|
|
|
item.set_range(1, item_value)
|
|
|
|
item.set_range_config(1, -9999, 9999, 0.0001)
|
|
|
|
_:
|
|
|
|
item.set_text(1, str(item_value))
|
|
|
|
|
2024-01-17 08:55:54 +01:00
|
|
|
item.set_text(2, DeckType.type_str(type))
|
|
|
|
if item_value is Dictionary:
|
|
|
|
for i in item_value:
|
|
|
|
add_item(i, item_value[i], item)
|
|
|
|
if item_value is Array:
|
|
|
|
for i in (item_value as Array).size():
|
|
|
|
add_item(str(i), item_value[i], item)
|
|
|
|
item.collapsed = true
|
2024-01-17 10:45:23 +01:00
|
|
|
|
2024-01-17 08:55:54 +01:00
|
|
|
return item
|