Files
puzzle-quest/addons/godot_db_manager/db_editor.gd
T
Vaillant Jeremy 01ea3af253 Run godot --convert-3to4 (automated conversion)
Apply Godot 4.6 automated conversion: renames Spatial.translate->position,
margin_*->offset_*, tool->@tool, .empty()->.is_empty(), DynamicFont->FontFile,
onready->@onready, export()->@export, and many more.

127 files changed by the tool. Manual fixes still required for:
 - godot_db_manager plugin (incompatible APIs: WindowDialog, Tabs, etc.)
 - lod plugin (Spatial -> Node3D renames)
 - ResourceLoader.load_interactive removed -> load_threaded_request
 - OS.set_window_fullscreen removed -> DisplayServer
 - Viewport.set_size_override removed

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 19:18:27 +02:00

211 lines
7.1 KiB
GDScript

@tool
"""
class GDDBEditor
"""
class_name GDDBEditor
extends TabBar
var m_name = ""
var m_database = null
var m_filepath = ""
# Called when the node enters the scene tree for the first time.
func _ready() -> void :
set_tab_alignment(TabBar.ALIGN_LEFT)
set_tab_close_display_policy(TabBar.CLOSE_BUTTON_SHOW_ALWAYS)
$tables_list.connect("resize_tables_list", Callable(self, "on_resize_the_table_list"))
$tables_list.connect("add_table", Callable(self, "on_add_table"))
$tables_list.connect("edit_table_name", Callable(self, "on_edit_table"))
$tables_list.connect("delete_table", Callable(self, "on_delete_table"))
$tables_list.connect("select_table", Callable(self, "on_select_table"))
$table_editor.connect("set_dirty", Callable(self, "on_set_dirty"))
$delete_table_dlg.connect("delete_table", Callable(self, "on_confirm_delete_table"))
$new_table_dlg.connect("cancel_dialog", Callable(self, "on_close_new_table_dlg"))
$new_table_dlg.get_close_button().connect("pressed", Callable(self, "on_close_new_table_dlg"))
$error_dlg.connect("confirmed", Callable(self, "on_retry_create_table"))
# resizing the tables list
func on_resize_the_table_list(diff_x : float) -> void :
var size = $tables_list.get_size()
var min_size = $tables_list.get_custom_minimum_size()
size.x += diff_x
if(size.x < min_size.x):
return
if(size.x > gddb_constants.c_max_tables_list_width):
return
$tables_list.resize_content(size)
var pos = $table_editor.get_position()
size = $table_editor.get_size()
pos.x += diff_x
size.x -= diff_x
$table_editor.set_position(pos)
$table_editor.set_size(size)
# overrides the member from base class
func set_name(ctrl_name) -> void :
m_name = ctrl_name
super.set_name(ctrl_name)
# sets the database; for easy access
func set_database(db) -> void :
# print("GDDBEditor::set_database(" + db.get_db_name() + ") to " + get_name())
m_database = db
set_dirty(true)
var tables_count = db.get_tables_count()
$table_editor.hide()
for idx in range(0, tables_count):
var table = db.get_table_at(idx)
$tables_list.create_table(table, idx == 0)
if(idx == 0):
$table_editor.set_table(table)
$table_editor.link_props()
$table_editor.show()
# returns the database id
func get_db_id() -> int :
if(null == m_database):
return gddb_constants.c_invalid_id
return m_database.get_db_id()
# returns the database name
func get_db_name() -> String :
if(null == m_database):
return ""
return m_database.get_db_name()
# sets the database to be dirty; should be saved
func set_dirty(dirty) -> void :
if(dirty):
var title = m_name + "*"
super.set_name(title)
else:
super.set_name(m_name)
# called when the user presses the "add_table" button from the "tables_list/tables_header"
func on_add_table() -> void :
# print("GDDBEditor::on_add_table()")
$new_table_dlg.set_dld_type(gddb_types.e_new_dlg_type_new)
$new_table_dlg.set_table_id(gddb_constants.c_invalid_id)
$new_table_dlg.set_init_name("")
$new_table_dlg.connect("create_new_table", Callable(self, "on_create_table"))
$new_table_dlg.popup_centered()
# called when the user accepts the name of the table in the "new_table_dlg"
func on_create_table(table_name : String) -> void :
# print("GDDBEditor::on_create_table(" + table_name + ")")
$new_table_dlg.disconnect("create_new_table", Callable(self, "on_create_table"))
var table_id = m_database.add_table(table_name)
if(table_id == gddb_constants.c_invalid_id):
$error_dlg.set_text("Table with the name \"" + table_name + "\" already exists" )
$error_dlg.popup_centered()
return
var table = m_database.get_table_by_id(table_id)
$tables_list.create_table(table)
$table_editor.set_table(table)
$table_editor.show()
m_database.set_dirty(true)
set_dirty(true)
# called when the user retryes to create a table (changed the name)
func on_retry_create_table() -> void :
$new_table_dlg.set_init_name("")
$new_table_dlg.popup_centered()
# called when the user presses the "edit_table_name" from the "tables/list/table"
func on_edit_table(table_id : int, table_name : String) -> void :
# print("GDDBEditor::on_edit_table(" + str(table_id) + ", " + table_name + ")")
$new_table_dlg.set_dld_type(gddb_types.e_new_dlg_type_edit)
$new_table_dlg.set_table_id(table_id)
$new_table_dlg.set_init_name(table_name)
$new_table_dlg.connect("create_new_table", Callable(self, "on_table_name_edited"))
$new_table_dlg.popup_centered()
# gets called when canceling the new_table_dlg
func on_close_new_table_dlg() -> void :
# print("GDDBEditor::on_close_new_table_dlg()")
var dlg_type = $new_table_dlg.get_dlg_type()
if(dlg_type == gddb_types.e_new_dlg_type_new):
$new_table_dlg.disconnect("create_new_table", Callable(self, "on_create_table"))
elif(dlg_type == gddb_types.e_new_dlg_type_edit):
$new_table_dlg.disconnect("create_new_table", Callable(self, "on_table_name_edited"))
# called when the user presses the "delete_table" from the "tables/list/table"
func on_delete_table(table_id : int) -> void :
# print("GDDBEditor::on_delete_table(" + str(table_id) + ")")
var table = m_database.get_table_by_id(table_id)
$delete_table_dlg.set_table_id(table_id)
$delete_table_dlg.set_table_name(table.get_table_name())
$delete_table_dlg.popup_centered()
# called when the user accepts the name of the table in the "new_table_dlg"
func on_table_name_edited(table_name : String) -> void :
# print("GDDBEditor::on_table_name_edited(" + table_name + ")")
$new_table_dlg.disconnect("create_new_table", Callable(self, "on_table_name_edited"))
var table_id = $new_table_dlg.get_table_id()
if(!m_database.edit_table_name(table_name, table_id)):
$error_dlg.set_text("Table with the name \"" + table_name + "\" already exists" )
$error_dlg.popup_centered()
return
# print("GDDBEditor::on_table_name_edited(" + str(table_id) + ", " + table_name + ")")
$tables_list.edit_table_name(table_id, table_name)
m_database.set_dirty(true)
set_dirty(true)
# called when the user confirms to delete a table
func on_confirm_delete_table() -> void :
# print("GDDBEditor::on_confirm_delete_table()")
var table_id = $delete_table_dlg.get_table_id()
var selected_table = $tables_list.get_selected_item()
if(null == selected_table):
return
var selected_table_id = selected_table.get_table_id()
m_database.delete_table_by_id(table_id)
$tables_list.delete_table(table_id)
if(selected_table_id == table_id):
$tables_list.select_item_at(0)
var table = m_database.get_table_at(0)
$table_editor.set_table(table)
m_database.set_dirty(true)
set_dirty(true)
# called when the user selects a table from the table_list
func on_select_table(table_id : int) -> void :
var table = m_database.get_table_by_id(table_id)
if(null != table):
$table_editor.set_table(table)
$table_editor.link_props()
# saves current database
func save_database() -> void:
m_database.save_db()
set_dirty(false)
# returns true if the database can be saved, otherwise false
func can_save_database() -> bool:
return !m_database.get_db_filepath().is_empty()
# sets the database's path
func set_database_filepath(filepath : String) -> void:
m_database.set_db_filepath(filepath)
# called when a table is modified
func on_set_dirty() -> void:
m_database.set_dirty(true)
set_dirty(true)