mirror of
https://github.com/Relintai/godot_data_editor.git
synced 2024-11-13 06:27:19 +01:00
77 lines
2.6 KiB
GDScript3
77 lines
2.6 KiB
GDScript3
|
tool
|
||
|
extends Panel
|
||
|
|
||
|
var item = null
|
||
|
var property_item_class = preload("property_item.tscn")
|
||
|
var remove_icon = preload("icons/icon_remove.png")
|
||
|
|
||
|
|
||
|
onready var custom_properties_box = get_node("Body/Scroll/CustomProperties")
|
||
|
onready var no_custom_properties_label = get_node("Body/Scroll/CustomProperties/NoCustomPropertiesLabel")
|
||
|
|
||
|
onready var item_manager = null # Item Manager, used to load, modify and save items
|
||
|
|
||
|
signal on_item_changed(item)
|
||
|
signal new_custom_property_created
|
||
|
signal custom_property_add_requested
|
||
|
signal custom_property_delete_requested(custom_property_id)
|
||
|
|
||
|
#TODO: Somehow the properties are initialized twice
|
||
|
|
||
|
func _ready():
|
||
|
pass
|
||
|
self.item_manager = Globals.get("item_manager")
|
||
|
|
||
|
func build_properties(item):
|
||
|
self.item = item
|
||
|
var properties = item._custom_properties
|
||
|
for node in custom_properties_box.get_children():
|
||
|
if node.has_meta("property"):
|
||
|
custom_properties_box.remove_child(node)
|
||
|
|
||
|
var number_of_properties = 0
|
||
|
var property_names = properties.keys()
|
||
|
property_names.sort()
|
||
|
for property_name in property_names:
|
||
|
no_custom_properties_label.hide()
|
||
|
number_of_properties += 1
|
||
|
|
||
|
var container = MarginContainer.new()
|
||
|
var property_item = property_item_class.instance()
|
||
|
var type = properties[property_name][0]
|
||
|
|
||
|
# If there already is a value, read it, otherwise set it to null
|
||
|
var value = null
|
||
|
if properties[property_name].size() == 2:
|
||
|
value = properties[property_name][1]
|
||
|
|
||
|
property_item.initialize(property_name, type, value, 0, "", true)
|
||
|
property_item.connect("custom_property_delete_requested", self, "emit_signal", ["custom_property_delete_requested", property_name, ])
|
||
|
property_item.connect("property_item_load_button_down", self, "_property_item_requests_file_dialog", [])
|
||
|
var changed_values = []
|
||
|
property_item.connect("on_property_value_changed", self, "item_changed", changed_values)
|
||
|
|
||
|
container.set_meta("property", true)
|
||
|
container.add_child(property_item)
|
||
|
custom_properties_box.add_child(container)
|
||
|
|
||
|
pass
|
||
|
if number_of_properties == 0:
|
||
|
no_custom_properties_label.show()
|
||
|
|
||
|
|
||
|
# Fires signal when the item's custom properties is to be updated, delegates to data_editor_gui.
|
||
|
func item_changed(property, value):
|
||
|
if item:
|
||
|
item._custom_properties[property][1] = value
|
||
|
emit_signal("on_item_changed", item)
|
||
|
|
||
|
|
||
|
# Delegates the deletion
|
||
|
func delete_custom_property(property_name):
|
||
|
emit_signal("custom_property_delete_requested", property_name)
|
||
|
|
||
|
|
||
|
# Fires signal when the item's custom properties is to be updated, delegates to data_editor_gui.func _on_NewCustomPropertyButton_button_down():
|
||
|
func _on_NewCustomPropertyButton_button_down():
|
||
|
emit_signal("custom_property_add_requested")
|