godot_data_editor/custom_properties.gd
2017-08-03 11:35:44 +02:00

77 lines
2.6 KiB
GDScript

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