extends MenuButton const LOGS_FILE_PATH: String = "user://logs/godot.log" const menu_items: Array = [ { label = "Toggle Theme", action = "toggle_theme_action" }, { label = "Import Option Sets", action = "import_option_sets_action" }, { label = "Export Option Sets", action = "export_option_sets_action" }, { label = "Clear Option Sets", action = "clear_option_sets_action" }, { label = "Import Database", action = "import_database_action" }, { label = "Export Database", action = "export_database_action" }, { label = "Clear Database", action = "clear_database_action" }, { label = "Export App Log", action = "export_app_log_action" }, { label = "About", action = "about_action" }, ] onready var main := get_node("/root/main") as Control onready var menu := get_popup() as PopupMenu onready var popup := get_node("/root/main/popup") as ModalPopup onready var dialog := get_node("/root/main/dialog") as Dialog onready var file_picker := get_node("/root/main/file_picker") as FileDialog onready var database := get_node("/root/main/database") as Database onready var stage := get_node("/root/main/stage") as Stage func _ready(): for idx in range(menu_items.size()): menu.add_item(menu_items[idx].label, idx) menu.connect("id_pressed", self, "id_pressed") func id_pressed(id: int): self.call_deferred(menu_items[id].action) func toggle_theme_action(): main.toggle_theme() func import_option_sets_action(): dialog.setup("All option sets from the dropdown menus will be replaced.", "Continue", "No") dialog.connect("accepted", self, "import_option_sets_action_accepted") popup.open_popup("Replace option sets?", dialog) func import_option_sets_action_accepted(): file_picker.mode = FileDialog.MODE_OPEN_FILE file_picker.current_dir = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS) file_picker.filters = ["*.json", "*.csv"] file_picker.current_file = "" file_picker.connect("file_selected", self, "import_option_sets") file_picker.show_modal(true) file_picker.invalidate() func import_option_sets(file_path: String): stage.load_option_sets(file_path) stage.save_option_sets() func export_option_sets_action(): file_picker.mode = FileDialog.MODE_SAVE_FILE file_picker.current_dir = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS) file_picker.filters = ["*.json"] file_picker.current_file = "" file_picker.connect("file_selected", stage, "save_option_sets") file_picker.show_modal(true) file_picker.invalidate() func clear_option_sets_action(): dialog.setup("All option sets from the dropdown menus will be deleted.", "Delete all", "No") dialog.connect("accepted", self, "clear_option_sets") popup.open_popup("Clear option sets?", dialog) func clear_option_sets(): stage.clear_option_sets() stage.save_option_sets() func import_database_action(): dialog.setup("All entries from the database will be replaced.", "Continue", "No") dialog.connect("accepted", self, "import_database_action_accepted") popup.open_popup("Replace database?", dialog) func import_database_action_accepted(): file_picker.mode = FileDialog.MODE_OPEN_FILE file_picker.current_dir = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS) file_picker.filters = ["*.json", "*.csv"] file_picker.current_file = "" file_picker.connect("file_selected", self, "import_database") file_picker.show_modal(true) file_picker.invalidate() func import_database(file_path: String): database.load_database(file_path) database.save_database() func export_database_action(): file_picker.mode = FileDialog.MODE_SAVE_FILE file_picker.current_dir = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS) file_picker.filters = ["*.csv"] file_picker.current_file = "" file_picker.connect("file_selected", database, "save_database") file_picker.show_modal(true) file_picker.invalidate() func clear_database_action(): dialog.setup("All entries from the database will be deleted.", "Delete all", "No") dialog.connect("accepted", self, "clear_database") popup.open_popup("Clear database?", dialog) func clear_database(): database.clear_database() database.save_database() func export_app_log_action(): file_picker.mode = FileDialog.MODE_SAVE_FILE file_picker.current_dir = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS) file_picker.filters = ["*.txt"] file_picker.current_file = ("log" ) file_picker.connect("file_selected", self, "export_app_log") file_picker.show_modal(true) file_picker.invalidate() func export_app_log(file_path: String): var error : int var file := File.new() error = file.open(LOGS_FILE_PATH, File.READ) if error != OK: printerr("Failed to open log file '%s' (error %d)." % [LOGS_FILE_PATH, error]) return var file_content = file.get_as_text() file.close() error = file.open(file_path, File.WRITE) if error != OK: printerr("Failed to open file '%s' to write log (error %d)." % [file_path, error]) return file.store_string(file_content) file.close() func about_action(): dialog.setup("Surgery Log\nversion %s" % ProjectSettings.get_setting("global/version"), "", "") popup.open_popup("About", dialog)