mirror of
https://codeberg.org/StreamGraph/StreamGraph.git
synced 2024-11-13 19:49:55 +01:00
add ability to change type in variable viewer
This commit is contained in:
parent
b2439d9209
commit
ec7acbdce8
2 changed files with 55 additions and 17 deletions
|
@ -25,7 +25,6 @@ func _ready() -> void:
|
||||||
variable_tree.set_column_expand_ratio(2, 15)
|
variable_tree.set_column_expand_ratio(2, 15)
|
||||||
root = variable_tree.create_item()
|
root = variable_tree.create_item()
|
||||||
rebuild_variable_tree()
|
rebuild_variable_tree()
|
||||||
|
|
||||||
variable_tree.item_activated.connect(
|
variable_tree.item_activated.connect(
|
||||||
func():
|
func():
|
||||||
var column := variable_tree.get_selected_column()
|
var column := variable_tree.get_selected_column()
|
||||||
|
@ -86,8 +85,12 @@ func _ready() -> void:
|
||||||
(container as Dictionary)[key] = new_value
|
(container as Dictionary)[key] = new_value
|
||||||
)
|
)
|
||||||
|
|
||||||
for i in DeckType.Types.size():
|
variable_tree.button_clicked.connect(_on_variable_tree_button_clicked)
|
||||||
|
|
||||||
|
for i in DeckType.Types.size() - 1:
|
||||||
types_popup.add_radio_check_item(DeckType.type_str(i))
|
types_popup.add_radio_check_item(DeckType.type_str(i))
|
||||||
|
|
||||||
|
types_popup.id_pressed.connect(_on_types_popup_id_pressed)
|
||||||
|
|
||||||
|
|
||||||
func rebuild_variable_tree(data: Dictionary = {}) -> void:
|
func rebuild_variable_tree(data: Dictionary = {}) -> void:
|
||||||
|
@ -104,22 +107,12 @@ func add_item(item_name: String, item_value: Variant, parent: TreeItem = root, c
|
||||||
# if the default parameter is null
|
# if the default parameter is null
|
||||||
var item := variable_tree.create_item(parent)
|
var item := variable_tree.create_item(parent)
|
||||||
item.set_text(0, item_name)
|
item.set_text(0, item_name)
|
||||||
|
|
||||||
var type: DeckType.Types = DeckType.INVERSE_GODOT_TYPES_MAP[typeof(item_value)]
|
var type: DeckType.Types = DeckType.INVERSE_GODOT_TYPES_MAP[typeof(item_value)]
|
||||||
|
|
||||||
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)
|
|
||||||
DeckType.Types.BOOL:
|
|
||||||
item.set_cell_mode(1, TreeItem.CELL_MODE_CHECK)
|
|
||||||
item.set_checked(1, item_value)
|
|
||||||
_:
|
|
||||||
item.set_text(1, str(item_value))
|
|
||||||
|
|
||||||
item.set_meta(&"container", container)
|
item.set_meta(&"container", container)
|
||||||
item.set_meta(&"indexed", indexed)
|
item.set_meta(&"indexed", indexed)
|
||||||
item.set_meta(&"value", item_value)
|
|
||||||
|
set_item_value(item, item_value)
|
||||||
|
|
||||||
item.set_text(2, DeckType.type_str(type))
|
item.set_text(2, DeckType.type_str(type))
|
||||||
item.set_metadata(2, type)
|
item.set_metadata(2, type)
|
||||||
|
@ -135,10 +128,28 @@ func add_item(item_name: String, item_value: Variant, parent: TreeItem = root, c
|
||||||
return item
|
return item
|
||||||
|
|
||||||
|
|
||||||
|
func set_item_value(item: TreeItem, value: Variant) -> void:
|
||||||
|
item.set_meta(&"value", value)
|
||||||
|
var type: DeckType.Types = DeckType.INVERSE_GODOT_TYPES_MAP[typeof(value)]
|
||||||
|
|
||||||
|
match type:
|
||||||
|
DeckType.Types.NUMERIC:
|
||||||
|
item.set_cell_mode(1, TreeItem.CELL_MODE_RANGE)
|
||||||
|
item.set_range_config(1, -9999, 9999, 0.0001)
|
||||||
|
item.set_range(1, value)
|
||||||
|
DeckType.Types.BOOL:
|
||||||
|
item.set_cell_mode(1, TreeItem.CELL_MODE_CHECK)
|
||||||
|
item.set_checked(1, value)
|
||||||
|
_:
|
||||||
|
item.set_text(1, str(value))
|
||||||
|
|
||||||
|
|
||||||
func _on_variable_tree_button_clicked(item: TreeItem, column: int, id: int, mouse_button_index: int) -> void:
|
func _on_variable_tree_button_clicked(item: TreeItem, column: int, id: int, mouse_button_index: int) -> void:
|
||||||
if mouse_button_index != MOUSE_BUTTON_LEFT:
|
if mouse_button_index != MOUSE_BUTTON_LEFT:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# we only have a delete button for now, so assume it is what's clicked
|
||||||
|
|
||||||
if item.get_meta(&"container", -1) is int:
|
if item.get_meta(&"container", -1) is int:
|
||||||
var key := item.get_text(0)
|
var key := item.get_text(0)
|
||||||
top_field_removed.emit(key)
|
top_field_removed.emit(key)
|
||||||
|
@ -161,3 +172,32 @@ func _on_variable_tree_button_clicked(item: TreeItem, column: int, id: int, mous
|
||||||
else:
|
else:
|
||||||
(container as Dictionary).erase(item.get_text(0))
|
(container as Dictionary).erase(item.get_text(0))
|
||||||
item.free()
|
item.free()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_types_popup_id_pressed(id: int) -> void:
|
||||||
|
var current_item := variable_tree.get_selected()
|
||||||
|
|
||||||
|
if current_item.get_metadata(2) == id:
|
||||||
|
return
|
||||||
|
|
||||||
|
current_item.set_metadata(2, id)
|
||||||
|
|
||||||
|
var new_value: Variant
|
||||||
|
match id as DeckType.Types:
|
||||||
|
DeckType.Types.BOOL, DeckType.Types.STRING, DeckType.Types.NUMERIC:
|
||||||
|
# simple types that can generally be converted between each other
|
||||||
|
var target_type: Variant.Type = DeckType.GODOT_TYPES_MAP[id]
|
||||||
|
new_value = type_convert(current_item.get_meta(&"value"), target_type)
|
||||||
|
set_item_value(current_item, new_value)
|
||||||
|
DeckType.Types.ARRAY:
|
||||||
|
new_value = []
|
||||||
|
set_item_value(current_item, new_value)
|
||||||
|
DeckType.Types.DICTIONARY:
|
||||||
|
new_value = {}
|
||||||
|
set_item_value(current_item, new_value)
|
||||||
|
|
||||||
|
current_item.set_text(2, DeckType.type_str(id))
|
||||||
|
|
||||||
|
if current_item.get_meta(&"container", -1) is int:
|
||||||
|
var field_name := current_item.get_text(0)
|
||||||
|
top_field_edited.emit(field_name, field_name, new_value)
|
||||||
|
|
|
@ -27,5 +27,3 @@ hide_root = true
|
||||||
|
|
||||||
[node name="TypesPopup" type="PopupMenu" parent="."]
|
[node name="TypesPopup" type="PopupMenu" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[connection signal="button_clicked" from="VariableTree" to="." method="_on_variable_tree_button_clicked"]
|
|
||||||
|
|
Loading…
Reference in a new issue