Add addon database
This commit is contained in:
@@ -0,0 +1,221 @@
|
||||
"""
|
||||
class GDDBTableCell
|
||||
"""
|
||||
|
||||
class_name GDDBTableCell
|
||||
|
||||
tool
|
||||
extends Control
|
||||
|
||||
signal edit_data
|
||||
signal choose_resource
|
||||
signal choose_data
|
||||
signal edit_string
|
||||
|
||||
const c_cell_min_width = 150
|
||||
|
||||
var m_prop_id : int = -1
|
||||
var m_prop_type : int = gddb_constants.c_invalid_id
|
||||
var m_row_idx : int = -1
|
||||
var m_text : String = ""
|
||||
|
||||
func _ready() -> void :
|
||||
$LineEdit.connect("text_changed", self, "on_text_changed")
|
||||
$LineEdit/edit_btn.connect("pressed", self, "on_edit_string")
|
||||
|
||||
$Button.connect("pressed", self, "on_button_pressed")
|
||||
$Button.set_clip_text(true)
|
||||
|
||||
$CheckBox.connect("toggled", self, "on_toggle_button")
|
||||
|
||||
func _exit_tree() -> void :
|
||||
$LineEdit.disconnect("text_changed", self, "on_text_changed")
|
||||
|
||||
# sets the property id
|
||||
func set_prop_id(id : int) -> void :
|
||||
m_prop_id = id
|
||||
|
||||
# returns the property id
|
||||
func get_prop_id() -> int :
|
||||
return m_prop_id
|
||||
|
||||
# sets property type
|
||||
func set_prop_type(data_type : int) -> void :
|
||||
# print("GDDBTableCell::set_prop_type(" + str(data_type) + ")")
|
||||
|
||||
var data_type_changed = false
|
||||
|
||||
if(m_prop_type != data_type):
|
||||
m_prop_type = data_type
|
||||
data_type_changed = true
|
||||
|
||||
if(!data_type_changed):
|
||||
return
|
||||
|
||||
if(m_prop_type == gddb_types.e_prop_type_bool):
|
||||
$LineEdit.hide()
|
||||
$Button.hide()
|
||||
$CheckBox.show()
|
||||
set_text("")
|
||||
elif(m_prop_type == gddb_types.e_prop_type_int):
|
||||
$LineEdit.show()
|
||||
$LineEdit/edit_btn.hide()
|
||||
$Button.hide()
|
||||
$CheckBox.hide()
|
||||
set_text("0")
|
||||
elif(m_prop_type == gddb_types.e_prop_type_float):
|
||||
$LineEdit.show()
|
||||
$LineEdit/edit_btn.hide()
|
||||
$Button.hide()
|
||||
$CheckBox.hide()
|
||||
set_text("0.0")
|
||||
elif(m_prop_type == gddb_types.e_prop_type_string):
|
||||
$LineEdit.show()
|
||||
$LineEdit/edit_btn.show()
|
||||
$Button.hide()
|
||||
$CheckBox.hide()
|
||||
set_text("")
|
||||
elif(m_prop_type == gddb_types.e_prop_type_resource):
|
||||
$LineEdit.hide()
|
||||
$Button.show()
|
||||
$CheckBox.hide()
|
||||
set_text("res://")
|
||||
elif(m_prop_type >= gddb_types.e_prop_types_count):
|
||||
$LineEdit.hide()
|
||||
$Button.show()
|
||||
$CheckBox.hide()
|
||||
set_text("{}")
|
||||
|
||||
func get_prop_type() -> int :
|
||||
return m_prop_type
|
||||
|
||||
# sets the row index
|
||||
func set_row_idx(idx : int) -> void :
|
||||
m_row_idx = idx
|
||||
|
||||
# returns the property index
|
||||
func get_row_idx() -> int :
|
||||
return m_row_idx
|
||||
|
||||
# sets the text
|
||||
func set_text(text : String) -> void :
|
||||
# print("GDDBTableCell::set_text(" + text + ")")
|
||||
m_text = text
|
||||
$LineEdit.set_text(m_text)
|
||||
$Button.set_text(m_text)
|
||||
if(m_prop_type == gddb_types.e_prop_type_bool):
|
||||
$CheckBox.set_pressed((text == "1"))
|
||||
|
||||
# sets autoincrement
|
||||
func enable_autoincrement(enable : bool) -> void :
|
||||
$LineEdit.set_editable(!enable)
|
||||
|
||||
# refreshes the width by the property name
|
||||
func refresh_width(prop_name : String) -> void :
|
||||
var size = get_custom_minimum_size()
|
||||
size.x = max(c_cell_min_width, get_font("normal_font").get_string_size(prop_name).x + 10)
|
||||
set_custom_minimum_size(size)
|
||||
|
||||
# called when the checkbox is toggled/untoggled
|
||||
func on_toggle_button(enable : bool) -> void :
|
||||
var data = "0"
|
||||
if(enable):
|
||||
data = "1"
|
||||
emit_signal("edit_data", m_prop_id, m_row_idx, data)
|
||||
|
||||
# called when the button is pressed
|
||||
func on_button_pressed() -> void :
|
||||
if(m_prop_type == gddb_types.e_prop_type_resource):
|
||||
# print("GDDBTableCell::on_button_pressed()")
|
||||
emit_signal("choose_resource", m_prop_id, m_row_idx)
|
||||
elif(m_prop_type >= gddb_types.e_prop_types_count):
|
||||
emit_signal("choose_data", m_prop_id, m_row_idx, m_prop_type)
|
||||
|
||||
# called when the edit string button is pressed
|
||||
func on_edit_string() -> void :
|
||||
emit_signal("edit_string", m_prop_id, m_row_idx, m_text)
|
||||
|
||||
# called when edit the data
|
||||
func on_text_changed(new_text : String) -> void :
|
||||
if(new_text.empty()):
|
||||
m_text = ""
|
||||
$LineEdit.set_text(m_text)
|
||||
$LineEdit.set_cursor_position(0)
|
||||
return
|
||||
|
||||
if(m_prop_type == gddb_types.e_prop_type_int):
|
||||
if(!check_integer(new_text)):
|
||||
return
|
||||
|
||||
if(m_prop_type == gddb_types.e_prop_type_float):
|
||||
if(!check_float(new_text)):
|
||||
return
|
||||
|
||||
emit_signal("edit_data", m_prop_id, m_row_idx, new_text)
|
||||
|
||||
# checks if the text is integer
|
||||
func check_integer(text : String) -> bool :
|
||||
var is_negative = false
|
||||
|
||||
# check if the string is probably a number, but starts with "-"
|
||||
if(text.begins_with("-")):
|
||||
text.erase(0, 1)
|
||||
is_negative = true
|
||||
|
||||
# check if the current string is only "-"
|
||||
if(text.empty()):
|
||||
m_text = "-"
|
||||
$LineEdit.set_text(m_text)
|
||||
$LineEdit.set_cursor_position(m_text.length())
|
||||
return true
|
||||
|
||||
if(text.is_valid_integer()):
|
||||
if(text.begins_with("0")):
|
||||
# a negative integer cannot start with "0"
|
||||
if(is_negative):
|
||||
m_text = "-"
|
||||
$LineEdit.set_text(m_text)
|
||||
$LineEdit.set_cursor_position(1)
|
||||
return true
|
||||
|
||||
# a positive number starting with "0" can be only "0"
|
||||
m_text = "0"
|
||||
$LineEdit.set_text(m_text)
|
||||
$LineEdit.set_cursor_position(1)
|
||||
return true
|
||||
|
||||
# don't add more "-" in front of the number
|
||||
if(text.begins_with("-")):
|
||||
text.erase(0, 1)
|
||||
|
||||
# add back the "-"
|
||||
if(is_negative):
|
||||
m_text = "-" + text
|
||||
else:
|
||||
m_text = text
|
||||
|
||||
$LineEdit.set_text(m_text)
|
||||
$LineEdit.set_cursor_position(m_text.length())
|
||||
return true
|
||||
|
||||
$LineEdit.set_text(m_text)
|
||||
$LineEdit.set_cursor_position(m_text.length())
|
||||
return false
|
||||
|
||||
func check_float(text : String) -> bool :
|
||||
if(text.is_valid_float()):
|
||||
if(text.begins_with("00") || text.begins_with("01") || text.begins_with("02")
|
||||
|| text.begins_with("03") || text.begins_with("04") || text.begins_with("05")
|
||||
|| text.begins_with("06") || text.begins_with("07") || text.begins_with("08")
|
||||
|| text.begins_with("09")):
|
||||
m_text = "0"
|
||||
$LineEdit.set_text(m_text)
|
||||
$LineEdit.set_cursor_position(1)
|
||||
return true
|
||||
|
||||
m_text = text
|
||||
return true
|
||||
|
||||
$LineEdit.set_text(m_text)
|
||||
$LineEdit.set_cursor_position(m_text.length())
|
||||
return false
|
||||
Reference in New Issue
Block a user