2026-05-16 19:18:27 +02:00
@tool
2021-05-13 15:39:31 +02:00
" " "
class GDDBInterface
" " "
class_name GDDBInterface
extends Control
var m_db_manager = null
# Called when the node enters the scene tree for the first time.
func _ready ( ) - > void :
# init db_manager
m_db_manager = load ( gddb_constants . c_addon_main_path + " core/db_man.gd " ) . new ( )
# menu connections
2026-05-16 19:18:27 +02:00
$dlg/menu . connect ( " new_database " , Callable ( self , " on_menu_new_database " ) )
$dlg/menu . connect ( " load_database " , Callable ( self , " on_menu_load_database " ) )
$dlg/menu . connect ( " save_database " , Callable ( self , " on_menu_save_database " ) )
$dlg/menu . connect ( " save_database_as " , Callable ( self , " on_menu_save_database_as " ) )
2021-05-13 15:39:31 +02:00
# dialod notifications
2026-05-16 19:18:27 +02:00
$dlg . connect ( " about_to_popup " , Callable ( self , " on_about_to_show " ) )
$dlg . get_close_button ( ) . connect ( " pressed " , Callable ( self , " on_close " ) )
2021-05-13 15:39:31 +02:00
# new database connections
2026-05-16 19:18:27 +02:00
$dlg/new_db_dlg . connect ( " create_new_db " , Callable ( self , " on_new_database " ) )
2021-05-13 15:39:31 +02:00
# save / load connections
2026-05-16 19:18:27 +02:00
$dlg/load_db_dlg . connect ( " file_selected " , Callable ( self , " on_file_selected " ) )
2021-05-13 15:39:31 +02:00
# Called when the node is about to be shown.
func on_about_to_show ( ) - > void :
gddb_globals . set_interface_active ( true )
func on_close ( ) - > void :
gddb_globals . set_interface_active ( false )
# called when creating a new database from the menu
func on_menu_new_database ( ) - > void :
$dlg/new_db_dlg/v_layout/db_info/db_edt . set_text ( " " )
$dlg/new_db_dlg . popup_centered ( )
# called when loading a database from the menu
func on_menu_load_database ( ) - > void :
2026-05-16 19:18:27 +02:00
$dlg/load_db_dlg . set_mode ( FileDialog . FILE_MODE_OPEN_FILE )
2021-05-13 15:39:31 +02:00
$dlg/load_db_dlg . set_title ( " Load Database ... " )
$dlg/load_db_dlg . set_current_file ( " " )
$dlg/load_db_dlg . popup_centered ( )
# called when saving a database from the menu
func on_menu_save_database ( ) - > void :
# print("on_menu_save_database")
var currnet_tab = $dlg/databases . get_current_tab_control ( )
if ( currnet_tab . can_save_database ( ) ) :
currnet_tab . save_database ( )
else :
on_menu_save_database_as ( )
# called when saving a database as another from the menu
func on_menu_save_database_as ( ) :
# print("on_menu_save_database_as")
2026-05-16 19:18:27 +02:00
$dlg/load_db_dlg . set_mode ( FileDialog . FILE_MODE_SAVE_FILE )
2021-05-13 15:39:31 +02:00
$dlg/load_db_dlg . set_title ( " Save Database As ... " )
var currnet_tab = $dlg/databases . get_current_tab_control ( )
$dlg/load_db_dlg . set_current_file ( currnet_tab . get_db_name ( ) )
$dlg/load_db_dlg . popup_centered ( )
# called when adding a new database
func on_new_database ( db_name : String ) - > void :
var tmp_name = db_name . to_lower ( )
var db_id = m_db_manager . add_database ( db_name )
if ( db_id == gddb_constants . c_invalid_id ) :
$dlg/error_dlg . set_text ( " Database with name \" " + db_name + " \" already exists " )
$dlg/error_dlg . popup_centered ( )
return
var db = m_db_manager . get_db_by_id ( db_id )
# print("new DB added: " + str(db))
2026-05-16 19:18:27 +02:00
var db_editor = load ( gddb_constants . c_addon_main_path + " db_editor.tscn " ) . instantiate ( )
2021-05-13 15:39:31 +02:00
$dlg/databases . add_child ( db_editor )
db_editor . set_name ( db_name )
db . set_dirty ( true )
db_editor . set_database ( db )
$dlg/menu . enable_file_save ( true )
$dlg/menu . enable_file_save_as ( true )
$dlg/new_db_dlg . hide ( )
# called when selecting a file from save / load dialog
func on_file_selected ( filepath : String ) - > void :
# print("GDDBInterface::on_file_selected(" + filepath + ")")
2026-05-16 19:18:27 +02:00
if ( $dlg/load_db_dlg . get_mode ( ) == FileDialog . FILE_MODE_SAVE_FILE ) :
2021-05-13 15:39:31 +02:00
var filepath_low = filepath . to_lower ( )
# check for the file extension
if ( ! filepath_low . ends_with ( " .json " ) ) :
$dlg/error_dlg . set_text ( " The extension of the file must be \" .json \" " )
$dlg/error_dlg . popup_centered ( )
return
var current_filename = $dlg/load_db_dlg . get_current_file ( ) . to_lower ( )
var filename_dot = current_filename . length ( ) - 5
current_filename . erase ( filename_dot , 5 )
# check the filename
if ( ! gddb_globals . check_db_name ( current_filename ) ) :
$dlg/error_dlg . set_text ( " Invalid characters in the database filename. \n \n The filename cannot contain any of these characters: " + gddb_constants . c_invalid_characters )
$dlg/error_dlg . popup_centered ( )
return
save_database_as ( filepath )
2026-05-16 19:18:27 +02:00
elif ( $dlg/load_db_dlg . get_mode ( ) == FileDialog . FILE_MODE_OPEN_FILE ) :
2021-05-13 15:39:31 +02:00
load_database ( filepath )
# saves a database to a given file path
func save_database_as ( filepath : String ) - > void :
# print("GDDBInterface::save_database_as(" + filepath + ")")
var currnet_tab = $dlg/databases . get_current_tab_control ( )
currnet_tab . set_database_filepath ( filepath )
currnet_tab . save_database ( )
func load_database ( filepath : String ) - > void :
var db_id = m_db_manager . load_database ( filepath )
if ( db_id == gddb_types . e_db_invalid_file ) :
$dlg/error_dlg . set_text ( " Invalid database " )
$dlg/error_dlg . popup_centered ( )
return
if ( db_id == gddb_types . e_db_invalid_ver ) :
$dlg/error_dlg . set_text ( " Wrong database version. Currently is: " + gddb_constants . c_gddb_ver )
$dlg/error_dlg . popup_centered ( )
return
var db = m_db_manager . get_db_by_id ( db_id )
db . set_dirty ( false )
# print("new DB added: " + str(db))
2026-05-16 19:18:27 +02:00
var db_editor = load ( gddb_constants . c_addon_main_path + " db_editor.tscn " ) . instantiate ( )
2021-05-13 15:39:31 +02:00
$dlg/databases . add_child ( db_editor )
db_editor . set_name ( db . get_db_name ( ) )
db_editor . set_database ( db )
$dlg/menu . enable_file_save ( true )
$dlg/menu . enable_file_save_as ( true )
db_editor . set_dirty ( false )