130 lines
4.1 KiB
GDScript
130 lines
4.1 KiB
GDScript
"""
|
|
class GDDBTablesList
|
|
"""
|
|
|
|
class_name GDDBTablesList
|
|
|
|
tool
|
|
extends Control
|
|
|
|
signal resize_tables_list
|
|
|
|
signal add_table
|
|
signal edit_table_name
|
|
signal delete_table
|
|
signal select_table
|
|
|
|
var m_tables = []
|
|
|
|
var m_mouse_pos_pressed : Vector2 = Vector2()
|
|
var m_mouse_pressed : bool = false
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
m_mouse_pos_pressed = Vector2()
|
|
m_mouse_pressed = false
|
|
|
|
$tables_header.connect("add_table", self, "on_add_table")
|
|
|
|
# called when the node gets an input
|
|
func _input(event : InputEvent) -> void :
|
|
if(!gddb_globals.is_interface_active()):
|
|
return
|
|
|
|
var evLocal = $resize_ctrl.make_input_local(event)
|
|
|
|
if event is InputEventMouseButton :
|
|
if(event.button_index == BUTTON_LEFT):
|
|
if(event.pressed):
|
|
var rect = Rect2(Vector2(0, 0), $resize_ctrl.get_size())
|
|
var inside = rect.has_point(evLocal.position)
|
|
if(inside):
|
|
m_mouse_pressed = true
|
|
m_mouse_pos_pressed = evLocal.position
|
|
else:
|
|
m_mouse_pressed = false
|
|
|
|
elif event is InputEventMouseMotion :
|
|
if(m_mouse_pressed):
|
|
var diff_x = evLocal.position.x - m_mouse_pos_pressed.x
|
|
emit_signal("resize_tables_list", diff_x)
|
|
|
|
# custom resizing the tables list
|
|
func resize_content(size : Vector2) -> void :
|
|
set_size(size)
|
|
|
|
# I have no idea why I need to do this; this should be done automatically
|
|
var content_size = $tables_container/tables.get_size()
|
|
content_size.x = size.x
|
|
$tables_container/tables.set_custom_minimum_size(content_size)
|
|
|
|
# Called when the user presses the "add_table" button from the tables_list/header
|
|
func on_add_table() -> void :
|
|
# print("GDDBTablesList::on_add_table()")
|
|
emit_signal("add_table")
|
|
|
|
# creates a table
|
|
func create_table(db_table : Object, select_table : bool = true) -> void:
|
|
# print("GDDBTablesList::create_table(" + str(db_table) + ")")
|
|
var table = load(gddb_constants.c_addon_main_path + "table_item.tscn").instance()
|
|
var table_id = db_table.get_table_id()
|
|
table.set_table_id(table_id)
|
|
table.set_table_name(db_table.get_table_name())
|
|
table.connect("select_item", self, "on_select_item")
|
|
table.connect("edit_table", self, "on_edit_table_name")
|
|
table.connect("delete_table", self, "on_delete_table")
|
|
m_tables.push_back(table)
|
|
$tables_container/tables.add_child(table)
|
|
if(select_table):
|
|
select_item_by_id(table_id)
|
|
|
|
# Called when the user presses the "edit_table" button from the tables_list/table
|
|
func on_edit_table_name(table_id : int, table_name : String) -> void:
|
|
# print("GDDBTablesList::on_edit_table_name(" + str(table_id) + ", " + table_name + ")")
|
|
emit_signal("edit_table_name", table_id, table_name)
|
|
|
|
# Called when the user presses the "delete_table" button from the tables_list/table
|
|
func on_delete_table(table_id : int) -> void:
|
|
# print("GDDBTablesList::on_delete_table(" + str(table_id) + ")")
|
|
emit_signal("delete_table", table_id)
|
|
|
|
# edits the table name
|
|
func edit_table_name(table_id: int, table_name : String) -> void:
|
|
for idx in range(0, m_tables.size()):
|
|
if(m_tables[idx].get_table_id() == table_id):
|
|
m_tables[idx].set_table_name(table_name)
|
|
break
|
|
|
|
# deletes a table from the list
|
|
func delete_table(table_id : int) -> void:
|
|
for idx in range(0, m_tables.size()):
|
|
if(m_tables[idx].get_table_id() == table_id):
|
|
$tables_container/tables.remove_child(m_tables[idx])
|
|
m_tables.remove(idx)
|
|
break
|
|
|
|
# called when the user presses an item
|
|
func on_select_item(table_id : int) -> void:
|
|
# print("GDDBTablesList::on_select_item(" + str(table_id) + ")")
|
|
select_item_by_id(table_id)
|
|
emit_signal("select_table", table_id)
|
|
|
|
# select an item by index
|
|
func select_item_at(table_idx : int) -> void:
|
|
for idx in range(0, m_tables.size()):
|
|
m_tables[idx].set_selected(idx == table_idx)
|
|
|
|
# select an item by id
|
|
func select_item_by_id(table_id : int) -> void:
|
|
# print("GDDBTablesList::select_item_by_id(" + str(table_id) + ")")
|
|
for idx in range(0, m_tables.size()):
|
|
m_tables[idx].set_selected(m_tables[idx].get_table_id() == table_id)
|
|
|
|
# returns the selected element
|
|
func get_selected_item():
|
|
for idx in range(0, m_tables.size()):
|
|
if(m_tables[idx].is_selected()):
|
|
return m_tables[idx]
|
|
print("ERROR: GDDBTablesList::get_selected_item() - there is no selected element")
|
|
return null
|