@tool """ class GDDBTableProperty """ class_name GDDBTableProperty extends Control signal delete_property signal edit_property signal enable_autoincrement var m_prop_id : int = -1 var m_prop_type : int = 0 var m_prop_name : String = "" var m_parent_table = null # Called when the node enters the scene tree for the first time. func _ready() -> void: $prop_name.connect("text_changed", Callable(self, "on_name_changed")) $prop_type.clear() for idx in range(0, gddb_types.e_prop_types_count): $prop_type.add_item(gddb_globals.get_data_name(idx), gddb_types.e_prop_type_bool + idx) $prop_type.select(0) $prop_type.get_popup().connect("about_to_popup", Callable(self, "on_about_to_show")) $prop_type.connect("item_selected", Callable(self, "on_type_changed")) $delete_button.connect("pressed", Callable(self, "on_delete_button_pressed")) $autoincrement_btn.hide() $autoincrement_btn.connect("toggled", Callable(self, "on_set_autoincrement")) # setup property func setup(prop_id : int, prop_type : int, prop_name : String) -> void: """ if(prop_type < gddb_types.e_prop_types_count): print("GDDBTableProperty::setup(" + str(prop_id) + ", " + gddb_globals.get_data_name(prop_type) + ", " + prop_name + ")") else: var db = m_parent_table.get_parent_database() var table = db.get_table_by_id(prop_type - gddb_types.e_prop_types_count) print("GDDBTableProperty::setup(" + str(prop_id) + ", " + table.get_table_name() + ", " + prop_name + ")") #""" set_prop_id(prop_id) set_prop_type(prop_type) set_prop_name(prop_name) # sets parent table func set_parent_table(table): #print("GDDBTableProperty::set_parent_table(" + str(table) + ")") m_parent_table = table var db = m_parent_table.get_parent_database() for idx in range(0, db.get_tables_count()): var tbl = db.get_table_at(idx) if(tbl == m_parent_table): continue $prop_type.add_item(tbl.get_table_name(), gddb_types.e_prop_types_count + tbl.get_table_id()) # sets proprty id func set_prop_id(prop_id : int) -> void: # print("GDDBTableProperty::set_prop_id(" + str(prop_id) + ")") m_prop_id = prop_id # returns property id func get_prop_id() -> int: return m_prop_id # sets property type func set_prop_type(prop_type : int) -> void: """ print("GDDBTableProperty::set_prop_type(" + str(prop_type) + ")") if(prop_type < gddb_types.e_prop_types_count): print("GDDBTableProperty::set_prop_type(" + gddb_globals.get_data_name(prop_type) + ")") else: var db = m_parent_table.get_parent_database() var table = db.get_table_by_id(prop_type - gddb_types.e_prop_types_count) print("GDDBTableProperty::set_prop_type(" + table.get_table_name() + ")") #""" #if(prop_type >= gddb_types.e_prop_types_count): # print("GDDBTableProperty::set_prop_type(" + str(prop_type) + ")") m_prop_type = prop_type select_current_prop() if(m_prop_type == gddb_types.e_prop_type_int): $autoincrement_btn.show() var prop = m_parent_table.get_prop_by_id(m_prop_id) if(prop.has_autoincrement()): $autoincrement_btn.set_pressed(true) else: $autoincrement_btn.hide() # selects current property func select_current_prop() -> void: if(m_prop_type < gddb_types.e_prop_types_count): $prop_type.select(m_prop_type) # links property type to other tables func link(): # print("GDDBTableProperty::link()") refill_list() if(m_prop_type >= gddb_types.e_prop_types_count): """ print("m_prop_id : " + str(m_prop_id)) print("m_prop_type : " + str(m_prop_type)) print("m_prop_name : " + m_prop_name) """ set_selection_by_id(m_prop_type) else: $prop_type.select(m_prop_type) # returns property type func get_prop_type() -> int: return m_prop_type # sets property name func set_prop_name(prop_name : String) -> void: # print("GDDBTableProperty::set_prop_name(" + prop_name + ")") m_prop_name = prop_name $prop_name.set_text(m_prop_name) # returns property name func get_prop_name() -> String: return m_prop_name # called everytime the name of the property is changed func on_name_changed(new_text : String) -> void: m_prop_name = new_text emit_signal("edit_property", m_prop_id, m_prop_type, m_prop_name) # called when the popup from option button is about to be shown func on_about_to_show(): var selected_id = $prop_type.get_selected_id() # print("GDDBTableProperty::on_about_to_show() - " + str(selected_id)) refill_list() set_selection_by_id(selected_id) # refills the list func refill_list() -> void : $prop_type.clear() for idx in range(0, gddb_types.e_prop_types_count): $prop_type.add_item(gddb_globals.get_data_name(idx), gddb_types.e_prop_type_bool + idx) if(null != m_parent_table): var db = m_parent_table.get_parent_database() for idx in range(0, db.get_tables_count()): var table = db.get_table_at(idx) if(table == m_parent_table): continue """ print("GDDBTableProperty::refill_list - Add:") print("table id: " + str(table.get_table_id())) print("table name: " + table.get_table_name()) #""" # print("GDDBTableProperty::prop_type.add_item(" + table.get_table_name() + ", " + str(gddb_types.e_prop_types_count + table.get_table_id()) + ")" ) $prop_type.add_item(table.get_table_name(), gddb_types.e_prop_types_count + table.get_table_id()) # $prop_type.select(selected_idx) # sets selection func set_selection_by_id(selected_id : int) -> void : # print("GDDBTableProperty::set_selection_by_id(" + str(selected_id) + ")") for idx in range(0, $prop_type.get_item_count()): if($prop_type.get_item_id(idx) == selected_id): $prop_type.select(idx) break func on_set_autoincrement(enable : bool) -> void: # print("GDDBTableProperty::on_set_autoincrement(" + str(enable) + ") - " + str(m_prop_id)) emit_signal("enable_autoincrement", m_prop_id, enable) # called everytime the type of the property is changed func on_type_changed(option_idx : int) -> void: var option_id = $prop_type.get_item_id(option_idx) """ print("GDDBTableProperty::on_type_changed(" + str(option_idx) + ")") print("option_id = " + str(option_id)) if(option_id >= gddb_types.e_prop_types_count): print("GDDBTableProperty::on_type_changed(" + str(option_id) + ")") else: print("GDDBTableProperty::on_type_changed(" + gddb_globals.get_data_name(option_id) + ")") #""" m_prop_type = option_id $autoincrement_btn.set_pressed(false) if(m_prop_type == gddb_types.e_prop_type_int): $autoincrement_btn.show() else: $autoincrement_btn.hide() emit_signal("edit_property", m_prop_id, m_prop_type, m_prop_name) # called when the delete property button is pressed func on_delete_button_pressed() -> void: emit_signal("delete_property", m_prop_id)