From 724c984124c3830fb87573c259791c85bea358e4 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Fri, 31 May 2024 19:04:36 +0200 Subject: [PATCH 01/12] Update datatable.tscn --- addons/datatable_godot/datatable.tscn | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/addons/datatable_godot/datatable.tscn b/addons/datatable_godot/datatable.tscn index 9889154..dd72a29 100644 --- a/addons/datatable_godot/datatable.tscn +++ b/addons/datatable_godot/datatable.tscn @@ -248,7 +248,6 @@ theme_override_constants/margin_right = 5 theme_override_constants/margin_bottom = 5 [node name="bg_main" type="VBoxContainer" parent="MarginContainer"] -visible = false layout_mode = 2 [node name="FlowContainer" type="FlowContainer" parent="MarginContainer/bg_main"] @@ -325,18 +324,6 @@ layout_mode = 2 size_flags_horizontal = 3 bbcode_enabled = true text = " -[center][font_size=24]Please make a save of your data file!![/font_size] - -This version of the plugin doesn't have a automatic back-up system, I'm still working on it. - -This plugin is still in development, so you could get bug, crash, or your data [b]COULD[/b] be deleted. - -If it's happen, first, I'm sorry for this -second, open an issue explaining what was your action before this happen -third, [color=red]COPY-PASTE[/color] your back-up, do not in any circonstences move it, as this bug could happen again (if it happen one time, it could happen a second time). - -Just to be clear: If you didn't make a back-up of your data, I probably can't help get your data back. - [font_size=24]Don't know where to start?[/font_size] - First create a collection by clicking on the \"Manage Collections\" @@ -2622,6 +2609,7 @@ grow_vertical = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_ij0bt") [node name="bg_manageType" type="Panel" parent="MarginContainer"] +visible = false layout_mode = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_3otyk") script = ExtResource("39_mg6or") From c3e205987556d76afa4cc854407fa8e468449575 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 01:25:27 +0200 Subject: [PATCH 02/12] Creating multiple class files and put part in them --- addons/datatable_godot/common/backup.gd | 36 ++++++ addons/datatable_godot/common/commonV2.gd | 18 +++ addons/datatable_godot/common/interface.gd | 38 ++++++ addons/datatable_godot/common/plugin.gd | 45 +++++++ addons/datatable_godot/common/updater.gd | 141 +++++++++++++++++++++ addons/datatable_godot/datatable.gd | 2 + addons/datatable_godot/plugin.cfg | 6 +- addons/datatable_godot/ui/datatable_ui.gd | 131 ------------------- 8 files changed, 285 insertions(+), 132 deletions(-) create mode 100644 addons/datatable_godot/common/backup.gd create mode 100644 addons/datatable_godot/common/commonV2.gd create mode 100644 addons/datatable_godot/common/interface.gd create mode 100644 addons/datatable_godot/common/plugin.gd create mode 100644 addons/datatable_godot/common/updater.gd diff --git a/addons/datatable_godot/common/backup.gd b/addons/datatable_godot/common/backup.gd new file mode 100644 index 0000000..adb3f24 --- /dev/null +++ b/addons/datatable_godot/common/backup.gd @@ -0,0 +1,36 @@ +@tool +extends _dt_common +class_name _dt_backup + +static var _INSTANCE: _dt_backup = null + +var _folder: String +var _max: int + +static func get_instance() -> _dt_backup: + + if _INSTANCE: + return _INSTANCE + + _INSTANCE = _dt_backup.new() + return _INSTANCE + + +# Init + +func _init(): + + var config = _dt_plugin.get_instance() + + _folder = config.get_backup_path() + _max = int(config.get_backup_max()) + + +# Backend + +func get_path(): + return _folder + +func get_max(): + return _max + diff --git a/addons/datatable_godot/common/commonV2.gd b/addons/datatable_godot/common/commonV2.gd new file mode 100644 index 0000000..1c8b405 --- /dev/null +++ b/addons/datatable_godot/common/commonV2.gd @@ -0,0 +1,18 @@ +@tool +class_name _dt_common +## Class created by DataTable Plugin +## This class is used for common function that is used in multiple part of the plugin, like [method get_version], [method add_root], etc + +# backend func + +func ASSERT_ERROR(message: String): + assert(false, message) + +func add_root(Child: Node): + + if Child == null || !Child: + ASSERT_ERROR("Can't add child to EditorInterface: child null or invalid") + return + + EditorInterface.get_base_control().add_child(Child) + diff --git a/addons/datatable_godot/common/interface.gd b/addons/datatable_godot/common/interface.gd new file mode 100644 index 0000000..a0c7503 --- /dev/null +++ b/addons/datatable_godot/common/interface.gd @@ -0,0 +1,38 @@ +@tool +extends _dt_common +class_name _dt_interface + +const check_update_text: String = "[img]res://addons/datatable_godot/icons/Reload.png[/img] Checking for update... " +const up_to_date_text: String = "[img]res://addons/datatable_godot/icons/StatusSuccess.png[/img] [color=lightgreen]Version up-to-date! " +const update_available_text: String = "[img]res://addons/datatable_godot/icons/StatusError.png[/img] [color=#ff768b]An update is available! " +const cant_check_text: String = "[img]res://addons/datatable_godot/icons/StatusWarning.png[/img] [color=ffde66]Couldn't check for update! " + +const check_update_tip: String = "The plugin is check for an update..." +const up_to_date_tip: String = "You good to go, you got the last version available!" +const update_available_tip: String = "A new update is available, please update it!" +const cant_check_tip: String = "The plugin couldn't check if an update was available due to an unknown error. Check it manually please!" + +var _main: Control + +static var _INSTANCE: _dt_interface = null + +static func get_instance() -> _dt_interface: + + if _INSTANCE: + return _INSTANCE + + _INSTANCE = _dt_interface.new() + return _INSTANCE + +# Backend + +func set_main(value: Control): + _main = value + +func get_main() -> Control: + + if !_main: + ASSERT_ERROR("Can't get main interface because it's null, it need to be initiated by the main plugin script") + return null + + return _main diff --git a/addons/datatable_godot/common/plugin.gd b/addons/datatable_godot/common/plugin.gd new file mode 100644 index 0000000..7d22bfd --- /dev/null +++ b/addons/datatable_godot/common/plugin.gd @@ -0,0 +1,45 @@ +@tool +extends _dt_common +class_name _dt_plugin + +const LOCAL_PATH: String = "res://addons/datatable_godot/" +const LOCAL_CONFIG_PATH: String = "res://addons/datatable_godot/plugin.cfg" + +var _config: ConfigFile + +static var _INSTANCE: _dt_plugin = null + +static func get_instance() -> _dt_plugin: + + if _INSTANCE: + return _INSTANCE + + _INSTANCE = _dt_plugin.new() + return _INSTANCE + +# Init + +func _init(): + _config = ConfigFile.new() + _config.load(LOCAL_CONFIG_PATH) + +# Backend + +func get_version() -> String: + return _config.get_value("plugin", "version") + +func get_name() -> String: + return _config.get_value("plugin", "name") + +func get_backup_path() -> String: + return _config.get_value("backup", "folder") + +func get_backup_max() -> String: + return _config.get_value("backup", "max") + +# Convert a version number to an actually comparable number +# OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) +func version_to_number(version: String) -> int: + + var bits = version.split(".") + return bits[0].to_int() * 1000000 + bits[1].to_int() * 1000 + bits[2].to_int() diff --git a/addons/datatable_godot/common/updater.gd b/addons/datatable_godot/common/updater.gd new file mode 100644 index 0000000..9709148 --- /dev/null +++ b/addons/datatable_godot/common/updater.gd @@ -0,0 +1,141 @@ +# This code is using some code from Nathanhoad +# Under the given license of his plugin (https://github.com/nathanhoad/godot_input_helper/tree/main) +# See below for more details! + +@tool +extends _dt_common +class_name _dt_updater + +var _plugin: _dt_plugin +var _http_request: HTTPRequest + +var _is_checking_update: bool = false + +const UPDATE_URL: String = "https://api.github.com/repos/Ward727a/godot_datatable_plugin/releases" + +signal update_available(new_version: String) +signal update_error +signal update_not_available +signal checking_update + + +static var _INSTANCE: _dt_updater = null + +static func get_instance() -> _dt_updater: + + if _INSTANCE: + return _INSTANCE + + _INSTANCE = _dt_updater.new() + return _INSTANCE + +# Init + +func _init(): + _plugin = _dt_plugin.get_instance() + +# Backend + +func _get_http() -> HTTPRequest: + + if _http_request: + return _http_request + + _http_request = HTTPRequest.new() + add_root(_http_request) + + _http_request.request_completed.connect(_on_update_resp) + + return _http_request + +func check_update(): + + if _is_checking_update: + return + _is_checking_update = true + + checking_update.emit() + + _get_http().request(UPDATE_URL) + +# Hook + +# Original creator of this code part is nathanhoad, I only edited it a little to make it work with mine! +# Github link to his plugin: https://github.com/nathanhoad/godot_input_helper/tree/main +# Thanks to nathanhoad! +# +# Nathanhoad License: +# MIT License +# Copyright (c) 2022-present Nathan Hoad +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +func _on_update_resp(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray): + + _is_checking_update = false + + if result != HTTPRequest.RESULT_SUCCESS: + update_error.emit() + return + + var current_version: String = _plugin.get_version() + + var response = JSON.parse_string(body.get_string_from_utf8()) + if typeof(response) != TYPE_ARRAY: + update_error.emit() + return + + var versions = (response as Array).filter(func(release): + var version: String = release.tag_name.substr(1) + return _plugin.version_to_number(version) > _plugin.version_to_number(current_version) + ) + + if versions.size() > 0: + update_available.emit(versions[0].tag_name.substr(1)) + + _get_http().request_completed.disconnect(_on_update_resp) + else: + update_not_available.emit() + +# OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) +func _on_success_update(new_version): + EditorInterface.get_resource_filesystem().scan() + + print_rich("\n[b]Updated DataTable to v%s[/b]\n" % new_version) + + var finished_dialog: AcceptDialog = AcceptDialog.new() + finished_dialog.dialog_text = "Datatable plugin now up to date. It need to restart!" + + var restart_addon = func(): + finished_dialog.queue_free() + EditorInterface.call_deferred("set_plugin_enabled", "DataTable", true) + EditorInterface.set_plugin_enabled("DataTable", false) + + finished_dialog.canceled.connect(restart_addon) + finished_dialog.confirmed.connect(restart_addon) + EditorInterface.get_base_control().add_child(finished_dialog) + finished_dialog.popup_centered() + +# OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) +func _on_failed_update() -> void: + var failed_dialog: AcceptDialog = AcceptDialog.new() + failed_dialog.dialog_text = "There was a problem downloading the update." + failed_dialog.canceled.connect(func(): failed_dialog.queue_free()) + failed_dialog.confirmed.connect(func(): failed_dialog.queue_free()) + EditorInterface.get_base_control().add_child(failed_dialog) + failed_dialog.popup_centered() diff --git a/addons/datatable_godot/datatable.gd b/addons/datatable_godot/datatable.gd index c23774d..c0ab402 100644 --- a/addons/datatable_godot/datatable.gd +++ b/addons/datatable_godot/datatable.gd @@ -20,6 +20,8 @@ func _enter_tree(): common.toggle_plugin_on.emit() + _dt_interface.get_instance().set_main(datatableDock) + print_rich("[color=lightgreen][Datatable] This warning ([color=ffde66]core/config/project_settings.cpp:365 - Property not found: autoload/datatable[/color]) & error ([color=ff786b]Request for nonexistent project setting: autoload/datatable.[/color]) message can be ignored, it will be fixed at the next version, but for now it's needed to remove the old singleton autoload to free the name for the class") remove_autoload_singleton("datatable") diff --git a/addons/datatable_godot/plugin.cfg b/addons/datatable_godot/plugin.cfg index 928b032..2c844d6 100644 --- a/addons/datatable_godot/plugin.cfg +++ b/addons/datatable_godot/plugin.cfg @@ -3,5 +3,9 @@ name="DataTable" description="A simple datatable system to use in godot" author="Ward" -version="1.3.0" +version="2.0.0" script="datatable.gd" + +[backup] +folder="res://datatable_backup/" +max="3" diff --git a/addons/datatable_godot/ui/datatable_ui.gd b/addons/datatable_godot/ui/datatable_ui.gd index e6e640d..70c146f 100644 --- a/addons/datatable_godot/ui/datatable_ui.gd +++ b/addons/datatable_godot/ui/datatable_ui.gd @@ -1,14 +1,9 @@ @tool extends Control -# This code is using some code from Nathanhoad -# Under the given license of his plugin (https://github.com/nathanhoad/godot_input_helper/tree/main) -# See below for more details! - ## import common @onready var common:Node = %signals - ## Popup components - Alert @onready var pop_alert_main: Popup = $alert @onready var pop_alert_title: Label = $alert/Panel/MarginContainer/Panel/MarginContainer/VBoxContainer/alert_title @@ -48,11 +43,6 @@ const LOCAL_CONFIG_PATH: String = "res://addons/datatable_godot/plugin.cfg" func _ready(): ## We check if a new update is available or not - http_request.request_completed.connect(_check_update_resp) - - version_statut.pressed.connect(_check_update) - - _check_update() ## By security we reset the visible state of the main window to true _signal_toggleMain() @@ -62,11 +52,6 @@ func _ready(): common.toggle_newTable_ask.connect(_signal_toggleNewTable) common.toggle_manageType_ask.connect(_signal_toggleManageType) common.popup_alert_ask.connect(_signal_show_alert_popup) - - bg_autoupdate.updated.connect(_success_update) - bg_autoupdate.failed.connect(_failed_update) - - common.plugin_version = get_version() func _disable_all_UI(): bg_main.visible = false @@ -104,121 +89,5 @@ func check_for_datatable_change(): common.ask_reload_data.emit() -func _check_update(): - - if checking_update: - return - checking_update = true - - version_statut.set_text(check_update_text) - version_statut.set_tooltip_text(check_update_tip) - - http_request.request(UPDATE_URL) - -# Original creator of this code part is nathanhoad, I only edited it a little to make it work with mine! -# Github link to his plugin: https://github.com/nathanhoad/godot_input_helper/tree/main -# Thanks to nathanhoad! -# -# Nathanhoad License: -# MIT License -# Copyright (c) 2022-present Nathan Hoad -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -func _check_update_resp(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray): - - checking_update = false - - if result != HTTPRequest.RESULT_SUCCESS: - version_statut.set_text(cant_check_text) - version_statut.set_tooltip_text(cant_check_tip) - return - - var current_version: String = get_version() - - var response = JSON.parse_string(body.get_string_from_utf8()) - if typeof(response) != TYPE_ARRAY: - version_statut.set_text(cant_check_text) - version_statut.set_tooltip_text(cant_check_tip) - return - - var versions = (response as Array).filter(func(release): - var version: String = release.tag_name.substr(1) - return version_to_number(version) > version_to_number(current_version) - ) - - if versions.size() > 0: - version_statut.set_text(update_available_text) - version_statut.set_tooltip_text(update_available_tip) - - version_statut.pressed.disconnect(_check_update) - version_statut.pressed.connect(_show_update_window) - - http_request.request_completed.disconnect(_check_update_resp) - - - _show_update_window() - bg_autoupdate.next_version = versions[0].tag_name.substr(1) - else: - version_statut.set_text(up_to_date_text) - version_statut.set_tooltip_text(up_to_date_tip) - func _show_update_window(): bg_autoupdate.visible = true - -# Get the current version -# OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) -func get_version() -> String: - var config: ConfigFile = ConfigFile.new() - config.load(LOCAL_CONFIG_PATH) - return config.get_value("plugin", "version") - -# Convert a version number to an actually comparable number -# OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) -func version_to_number(version: String) -> int: - - var bits = version.split(".") - return bits[0].to_int() * 1000000 + bits[1].to_int() * 1000 + bits[2].to_int() - -# OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) -func _success_update(new_version): - EditorInterface.get_resource_filesystem().scan() - - print_rich("\n[b]Updated DataTable to v%s[/b]\n" % new_version) - - var finished_dialog: AcceptDialog = AcceptDialog.new() - finished_dialog.dialog_text = "Datatable plugin now up to date. It need to restart!" - - var restart_addon = func(): - finished_dialog.queue_free() - EditorInterface.call_deferred("set_plugin_enabled", "DataTable", true) - EditorInterface.set_plugin_enabled("DataTable", false) - - finished_dialog.canceled.connect(restart_addon) - finished_dialog.confirmed.connect(restart_addon) - EditorInterface.get_base_control().add_child(finished_dialog) - finished_dialog.popup_centered() - -# OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) -func _failed_update() -> void: - var failed_dialog: AcceptDialog = AcceptDialog.new() - failed_dialog.dialog_text = "There was a problem downloading the update." - failed_dialog.canceled.connect(func(): failed_dialog.queue_free()) - failed_dialog.confirmed.connect(func(): failed_dialog.queue_free()) - EditorInterface.get_base_control().add_child(failed_dialog) - failed_dialog.popup_centered() From 260756ba407d2705e3eb5e8e557762b274fff274 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 01:45:01 +0200 Subject: [PATCH 03/12] =?UTF-8?q?Backup=20->=20=E2=9C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/datatable_godot/common/backup.gd | 86 +++++++++++++++++++++++++ addons/datatable_godot/common/plugin.gd | 11 +++- addons/datatable_godot/plugin.cfg | 5 ++ 3 files changed, 101 insertions(+), 1 deletion(-) diff --git a/addons/datatable_godot/common/backup.gd b/addons/datatable_godot/common/backup.gd index adb3f24..8c03e9d 100644 --- a/addons/datatable_godot/common/backup.gd +++ b/addons/datatable_godot/common/backup.gd @@ -6,6 +6,10 @@ static var _INSTANCE: _dt_backup = null var _folder: String var _max: int +var _suffix: String + +var _index: int = 0 +var _most_recent_path: String static func get_instance() -> _dt_backup: @@ -24,6 +28,7 @@ func _init(): _folder = config.get_backup_path() _max = int(config.get_backup_max()) + _suffix = config.get_backup_suffix() # Backend @@ -34,3 +39,84 @@ func get_path(): func get_max(): return _max +func make(path: String): + + if !_check_path(path): + return + + var data = load(path) + + var file_name = _get_file_name(path) + + if file_name.is_empty(): + ASSERT_ERROR("File name is empty, cancelling backup") + return + + var index = _get_index(path) + + var backup_file_path = str(_folder, "/", file_name, _suffix, index, _dt_plugin.get_instance().get_file_ext()) + + if !_has_dir(): + return + + var err = ResourceSaver.save(data, backup_file_path) + + if err != OK: + ASSERT_ERROR("Couldn't create backup file!") + else: + print_rich("[color=lightgreen][DataTable] Created a backup for '",file_name,"' collection, path: ",backup_file_path) + +func _get_file_name(path: String)->String: + + var file_name + + if path.ends_with(".tableCollection.res"): + var path_splitted = path.split(".tableCollection.res") + path_splitted = path_splitted[0].split("/") + file_name = path_splitted[path_splitted.size()-1] + else: + var path_splitted = path.split(".res") + path_splitted = path_splitted[0].split("/") + file_name = path_splitted[path_splitted.size()-1] + + return file_name + +func _check_path(path: String)->bool: + + if path == null || path.is_empty(): + ASSERT_ERROR("Can't make a backup of an empty path") + return false + + if path.contains(_folder): + ASSERT_ERROR("Can't make a backup of a backup file") + return false + + return true + +func _get_index(path: String)->int: + + _index += 1 + + if _index > _max: + _index = 1 + + if _most_recent_path != path: + _index = 1 + + _most_recent_path = path + + return _index + +func _has_dir()->bool: + var backup_dir = DirAccess.open("res://") + + var dir_path = _folder.replace('res://', "") + + if !backup_dir.dir_exists(dir_path): + var make_err = backup_dir.make_dir(dir_path) + + if make_err != OK: + ASSERT_ERROR(str("The plugin couldn't create the '",dir_path,"' folder in the path: 'res://', the back-up system can't work without it!")) + return false + + return true diff --git a/addons/datatable_godot/common/plugin.gd b/addons/datatable_godot/common/plugin.gd index 7d22bfd..eea91d6 100644 --- a/addons/datatable_godot/common/plugin.gd +++ b/addons/datatable_godot/common/plugin.gd @@ -23,7 +23,7 @@ func _init(): _config = ConfigFile.new() _config.load(LOCAL_CONFIG_PATH) -# Backend +# Config func get_version() -> String: return _config.get_value("plugin", "version") @@ -31,12 +31,21 @@ func get_version() -> String: func get_name() -> String: return _config.get_value("plugin", "name") +func get_file_version() -> String: + return _config.get_value("file", "version") + +func get_file_ext() -> String: + return _config.get_value("file", "ext") + func get_backup_path() -> String: return _config.get_value("backup", "folder") func get_backup_max() -> String: return _config.get_value("backup", "max") +func get_backup_suffix() -> String: + return _config.get_value("backup", "suffix") + # Convert a version number to an actually comparable number # OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) func version_to_number(version: String) -> int: diff --git a/addons/datatable_godot/plugin.cfg b/addons/datatable_godot/plugin.cfg index 2c844d6..4b7c633 100644 --- a/addons/datatable_godot/plugin.cfg +++ b/addons/datatable_godot/plugin.cfg @@ -9,3 +9,8 @@ script="datatable.gd" [backup] folder="res://datatable_backup/" max="3" +suffix="_backup" + +[file] +ext=".tableCollection.res" +version="1.0.0" From dbb32332d346e027f91015e330d48a4e6028a2ca Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 01:53:24 +0200 Subject: [PATCH 04/12] Adding some comments to file --- addons/datatable_godot/common/backup.gd | 4 ++-- addons/datatable_godot/common/interface.gd | 2 ++ addons/datatable_godot/common/plugin.gd | 2 ++ addons/datatable_godot/common/updater.gd | 21 ++++++++++++--------- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/addons/datatable_godot/common/backup.gd b/addons/datatable_godot/common/backup.gd index 8c03e9d..dbdf692 100644 --- a/addons/datatable_godot/common/backup.gd +++ b/addons/datatable_godot/common/backup.gd @@ -2,6 +2,8 @@ extends _dt_common class_name _dt_backup +## Class that manage all the backup system + static var _INSTANCE: _dt_backup = null var _folder: String @@ -19,7 +21,6 @@ static func get_instance() -> _dt_backup: _INSTANCE = _dt_backup.new() return _INSTANCE - # Init func _init(): @@ -30,7 +31,6 @@ func _init(): _max = int(config.get_backup_max()) _suffix = config.get_backup_suffix() - # Backend func get_path(): diff --git a/addons/datatable_godot/common/interface.gd b/addons/datatable_godot/common/interface.gd index a0c7503..51203df 100644 --- a/addons/datatable_godot/common/interface.gd +++ b/addons/datatable_godot/common/interface.gd @@ -2,6 +2,8 @@ extends _dt_common class_name _dt_interface +## Class that manage all the interface system of the plugin + const check_update_text: String = "[img]res://addons/datatable_godot/icons/Reload.png[/img] Checking for update... " const up_to_date_text: String = "[img]res://addons/datatable_godot/icons/StatusSuccess.png[/img] [color=lightgreen]Version up-to-date! " const update_available_text: String = "[img]res://addons/datatable_godot/icons/StatusError.png[/img] [color=#ff768b]An update is available! " diff --git a/addons/datatable_godot/common/plugin.gd b/addons/datatable_godot/common/plugin.gd index eea91d6..d6df0bc 100644 --- a/addons/datatable_godot/common/plugin.gd +++ b/addons/datatable_godot/common/plugin.gd @@ -2,6 +2,8 @@ extends _dt_common class_name _dt_plugin +## Class that manage all the config, and plugin related information for the plugin + const LOCAL_PATH: String = "res://addons/datatable_godot/" const LOCAL_CONFIG_PATH: String = "res://addons/datatable_godot/plugin.cfg" diff --git a/addons/datatable_godot/common/updater.gd b/addons/datatable_godot/common/updater.gd index 9709148..35d62d2 100644 --- a/addons/datatable_godot/common/updater.gd +++ b/addons/datatable_godot/common/updater.gd @@ -1,11 +1,15 @@ -# This code is using some code from Nathanhoad -# Under the given license of his plugin (https://github.com/nathanhoad/godot_input_helper/tree/main) -# See below for more details! + @tool extends _dt_common class_name _dt_updater +## Class that manage all the update system of the plugin +## +## This code is using some code from Nathanhoad[br] +## Under the given license of his plugin (link: https://github.com/nathanhoad/godot_input_helper/tree/main)[br] +## See the code for more details! + var _plugin: _dt_plugin var _http_request: HTTPRequest @@ -13,11 +17,10 @@ var _is_checking_update: bool = false const UPDATE_URL: String = "https://api.github.com/repos/Ward727a/godot_datatable_plugin/releases" -signal update_available(new_version: String) -signal update_error -signal update_not_available -signal checking_update - +signal update_available(new_version: String) ## The plugin has a more recent version available on GitHub +signal update_error ## The plugin couldn't check if a most recent version is available due to an error +signal update_not_needed ## The plugin is already at the most recent version +signal checking_update ## The plugin is checking for an update, need to wait static var _INSTANCE: _dt_updater = null @@ -110,7 +113,7 @@ func _on_update_resp(result: int, response_code: int, headers: PackedStringArray _get_http().request_completed.disconnect(_on_update_resp) else: - update_not_available.emit() + update_not_needed.emit() # OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) func _on_success_update(new_version): From 96ea9867506502c91b9e6b6bc26f7aeef46e19a3 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 12:39:02 +0200 Subject: [PATCH 05/12] Create resource script file system --- addons/datatable_godot/common/backup.gd | 5 + addons/datatable_godot/common/common.gd | 213 +------------------- addons/datatable_godot/common/commonV2.gd | 41 ++++ addons/datatable_godot/common/interface.gd | 1 + addons/datatable_godot/common/plugin.gd | 3 + addons/datatable_godot/common/resource.gd | 130 ++++++++++++ addons/datatable_godot/datatable.gd | 11 +- addons/datatable_godot/ui/bg/bg_newTable.gd | 56 ++--- addons/datatable_godot/ui/datatable_ui.gd | 3 +- 9 files changed, 212 insertions(+), 251 deletions(-) create mode 100644 addons/datatable_godot/common/resource.gd diff --git a/addons/datatable_godot/common/backup.gd b/addons/datatable_godot/common/backup.gd index dbdf692..cb2f7b2 100644 --- a/addons/datatable_godot/common/backup.gd +++ b/addons/datatable_godot/common/backup.gd @@ -66,6 +66,11 @@ func make(path: String): else: print_rich("[color=lightgreen][DataTable] Created a backup for '",file_name,"' collection, path: ",backup_file_path) +func link(timer: Timer, path: String): + if timer.timeout.get_connections().has(make): + timer.timeout.disconnect(make) + timer.timeout.connect(make.bind(path)) + func _get_file_name(path: String)->String: var file_name diff --git a/addons/datatable_godot/common/common.gd b/addons/datatable_godot/common/common.gd index f06789c..523fadb 100644 --- a/addons/datatable_godot/common/common.gd +++ b/addons/datatable_godot/common/common.gd @@ -27,12 +27,12 @@ var collection_path: String = "": backup_timer.stop() backup_timer.set_meta('index_backup', 1) if backup_timer.timeout.get_connections().size() != 0: - backup_timer.timeout.disconnect(_do_backup_data) - backup_timer.timeout.connect(_do_backup_data.bind(new_value)) + backup_timer.timeout.disconnect(_dt_backup.get_instance().make) + backup_timer.timeout.connect(_dt_backup.get_instance().make.bind(new_value)) backup_timer.start() # doing a pre-backup for security reason - _do_backup_data(new_value) + _dt_backup.get_instance().make(new_value) @onready var script_keys: Array = [] @@ -95,87 +95,13 @@ signal presave_data func _ready(): script_key_ask.connect(_signal_generate_key) - toggle_plugin_off.connect(_signal_disconnect_all) - get_type_ask.connect(_signal_get_type) - get_data_ask.connect(_signal_get_data) - - add_type_ask.connect(_signal_add_type) - - - load_from_ressource() - -func disconnect_signal(object: Signal): - for connection:Dictionary in object.get_connections(): - object.disconnect(connection['callable']) + _dt_resource.get_instance().load_file() ##################### ## Signal Callable ## ##################### -# I don't really know if this is really usefull, but by security I will keep it here -# It doesn't cause bug for now, so will see in the future -func _signal_disconnect_all(): - - print("[DataTable] => Disconnecting all signals...") - - disconnect_signal(toggle_plugin_on) - disconnect_signal(toggle_plugin_off) - disconnect_signal(toggle_main_ask) - disconnect_signal(toggle_main_response) - disconnect_signal(toggle_newTable_ask) - disconnect_signal(toggle_newTable_response) - disconnect_signal(toggle_manageTable_ask) - disconnect_signal(toggle_manageTable_response) - disconnect_signal(toggle_newType_ask) - disconnect_signal(toggle_newType_response) - disconnect_signal(toggle_manageType_ask) - disconnect_signal(toggle_manageType_response) - disconnect_signal(toggle_help_ask) - disconnect_signal(toggle_help_response) - disconnect_signal(add_type_ask) - disconnect_signal(add_type_response) - disconnect_signal(get_data_ask) - disconnect_signal(get_data_response) - disconnect_signal(get_type_ask) - disconnect_signal(get_type_response) - - disconnect_signal(script_key_ask) - disconnect_signal(script_key_response) - - disconnect_signal(presave_data) - - disconnect_signal(popup_alert_ask) - - print("[DataTable] => Disconnected all signals with success!") - -## add our new type to the global type list -func _signal_add_type(type: Dictionary): - - # if the type given miss one of the parameters, cancel the operation - if !type.has('name') || !type.has('params'): - add_type_response.emit(false) - return - - var type_name = type['name'] - - # if the type name is already registered, cancel the operation - if table_types.has(type_name): - add_type_response.emit(false) - return - - table_types[type_name] = type - - add_type_response.emit(true) - -func _signal_get_type(key: int): - load_from_ressource() - get_type_response.emit(table_types, key) - -func _signal_get_data(key: int): - load_from_ressource() - get_data_response.emit(table_datas, key) - func _signal_generate_key(script_name: String): var script_key: int = randi() @@ -188,134 +114,3 @@ func _signal_generate_key(script_name: String): script_keys.push_back(script_key) script_key_response.emit(script_key, script_name) - -func save_in_ressource(): - - if collection_path.is_empty(): - return - - var packedData: PackedDataContainer = PackedDataContainer.new() - - var datas = {"table": table_datas, "type": table_types} - - print("[DataTable] Saving data...") - - #print(datas['table']) - - packedData.pack(datas) - - ResourceSaver.save(packedData, collection_path) - - pass - -func load_from_ressource(): - - if collection_path.is_empty(): - return - - ## load table data from the ressource file - ## from here - if !ResourceLoader.exists(collection_path): - return - - var packedData = load(collection_path) - - var table_data = packedData['table'] - - for main_key in table_data: - - var data = table_data[main_key] - - table_datas[main_key] = {"name": data['name'], "size": data['size'], "structure": data['structure'], "rows": {}} - - for row_key in data['rows']: - - var row_data = data['rows'][row_key] # name, columns - - table_datas[main_key]['rows'][row_key] = {"name": row_data['name'], "columns": {}} - - for column_key in row_data['columns']: - - var column_data = row_data['columns'][column_key] # name, value, type - - table_datas[main_key]['rows'][row_key]['columns'][column_key] = {"name": column_data['name'], "value": column_data['value'], "type": column_data['type'], "size": column_data['size']} - - ## to here - - var type_data = packedData['type'] - - for main_key in type_data: # name of type - - var type = type_data[main_key] - - table_types[main_key] = {"name": type['name'], "params":{}} - - for param_key in type['params']: - - var param = type["params"][param_key] - - table_types[main_key]["params"][param_key] = {"name":param['name'], "type": param['type'], "size": 0, "comment": ""} - - if param.size() == 4: - table_types[main_key]["params"][param_key]['comment'] = param['comment'] - table_types[main_key]["params"][param_key]['size'] = param['size'] - - pass - - -func _do_backup_data(path: String): - - if path.is_empty(): - return - - if !ResourceLoader.exists(path): - return - - var data = load(path) - - var file_name - - # skip the backup if it's a backup that is openned - if path.contains("datatable_backup"): - assert(false, "Can't back-up a back-up file, please copy-paste the back-up in another directory. The back-up system will not work otherwise!") - return - - if path.ends_with(".tableCollection.res"): - var path_splitted = path.split(".tableCollection.res") - path_splitted = path_splitted[0].split("/") - file_name = path_splitted[path_splitted.size()-1] - else: - var path_splitted = path.split(".res") - path_splitted = path_splitted[0].split("/") - file_name = path_splitted[path_splitted.size()-1] - - if file_name.is_empty(): - assert(false, "couldn't create backup file!") - return - - var index_backup = backup_timer.get_meta('index_backup') - - var backup_file_path = str(backup_folder, "/", file_name, "_backup",index_backup,".tableCollection.res") - - index_backup += 1 - - if index_backup > 3: - index_backup = 1 - - backup_timer.set_meta('index_backup', index_backup) - - var backup_dir = DirAccess.open("res://") - - if !backup_dir.dir_exists("datatable_backup"): - var make_err = backup_dir.make_dir("datatable_backup") - - if make_err != OK: - assert(false, "The plugin couldn't create the 'datatable_backup' folder in the path: 'res://', the back-up system can't work without it!") - - var err = ResourceSaver.save(data, backup_file_path) - - if err != OK: - assert(false, "Couldn't create backup file!") - else: - print_rich("[color=lightgreen][DataTable] Created a backup for '",file_name,"' collection, path: ",backup_file_path) - diff --git a/addons/datatable_godot/common/commonV2.gd b/addons/datatable_godot/common/commonV2.gd index 1c8b405..db16e98 100644 --- a/addons/datatable_godot/common/commonV2.gd +++ b/addons/datatable_godot/common/commonV2.gd @@ -3,6 +3,39 @@ class_name _dt_common ## Class created by DataTable Plugin ## This class is used for common function that is used in multiple part of the plugin, like [method get_version], [method add_root], etc +# Color for text + +const txt_color = { + SUCCESS = "lightgreen", + WARNING = "ffde66", + ERROR = "ff768b", + VECX = "fab293", + VECY = "93fab2", + VECZ = "b293fa", + VECW = "93dbfa" +} + +# Type for plugin + +const TYPE_STRING = 0 +const TYPE_INT = 1 +const TYPE_FLOAT = 2 +const TYPE_COLOR = 3 +const TYPE_VECTOR2 = 4 +const TYPE_VECTOR3 = 5 +const TYPE_VECTOR4 = 6 +const TYPE_BOOL = 7 +const TYPE_RESS = 8 # Ressource +const TYPE_QUAT = 9 # Quaternion +const TYPE_RECT = 10 +const TYPE_PLANE = 11 +const TYPE_T2 = 12 # Transform2D +const TYPE_T3 = 13 # Transform3D +const TYPE_AABB = 14 +const TYPE_BASIS = 15 +const TYPE_PROJ = 16 +const TYPE_MAX = 17 + # backend func func ASSERT_ERROR(message: String): @@ -16,3 +49,11 @@ func add_root(Child: Node): EditorInterface.get_base_control().add_child(Child) +func SUCCESS(message: String): + print_rich(str("[color=",txt_color.SUCCESS,"][DataTable] ", message)) + +func WARNING(message: String): + push_warning(str("[DataTable] ", message)) + +func ERROR(message: String): + push_error(str("[DataTable] ", message)) diff --git a/addons/datatable_godot/common/interface.gd b/addons/datatable_godot/common/interface.gd index 51203df..74b4a16 100644 --- a/addons/datatable_godot/common/interface.gd +++ b/addons/datatable_godot/common/interface.gd @@ -38,3 +38,4 @@ func get_main() -> Control: return null return _main + diff --git a/addons/datatable_godot/common/plugin.gd b/addons/datatable_godot/common/plugin.gd index d6df0bc..fac3cc6 100644 --- a/addons/datatable_godot/common/plugin.gd +++ b/addons/datatable_godot/common/plugin.gd @@ -11,6 +11,9 @@ var _config: ConfigFile static var _INSTANCE: _dt_plugin = null +signal plugin_off +signal plugin_on + static func get_instance() -> _dt_plugin: if _INSTANCE: diff --git a/addons/datatable_godot/common/resource.gd b/addons/datatable_godot/common/resource.gd new file mode 100644 index 0000000..b87ae76 --- /dev/null +++ b/addons/datatable_godot/common/resource.gd @@ -0,0 +1,130 @@ +@tool +extends _dt_common +class_name _dt_resource + +## Class that manage all the save / load datatable collection file + +signal res_saved(path: String) +signal res_loaded(path: String) +signal res_reload + +static var _INSTANCE: _dt_resource = null + +var table_datas: Dictionary +var table_types: Dictionary + +var _loaded_path: String +var _collection_path: String + +static func get_instance() -> _dt_resource: + + if _INSTANCE: + return _INSTANCE + + _INSTANCE = _dt_resource.new() + return _INSTANCE + +# public + +func set_path(path: String): + _collection_path = path + +func get_path(): + return _collection_path + +func get_data() -> Dictionary: + + return table_datas + +func get_type() -> Dictionary: + + return table_types + +func set_data(packedData: PackedDataContainer): + var table_data = packedData['table'] + + for main_key in table_data: + + var data = table_data[main_key] + + table_datas[main_key] = {"name": data['name'], "size": data['size'], "structure": data['structure'], "rows": {}} + + for row_key in data['rows']: + + var row_data = data['rows'][row_key] # name, columns + + table_datas[main_key]['rows'][row_key] = {"name": row_data['name'], "columns": {}} + + for column_key in row_data['columns']: + + var column_data = row_data['columns'][column_key] # name, value, type + + table_datas[main_key]['rows'][row_key]['columns'][column_key] = {"name": column_data['name'], "value": column_data['value'], "type": column_data['type'], "size": column_data['size']} + +func set_type(packedData: PackedDataContainer): + var type_data = packedData['type'] + + for main_key in type_data: # name of type + + var type = type_data[main_key] + + table_types[main_key] = {"name": type['name'], "params":{}} + + for param_key in type['params']: + + var param = type["params"][param_key] + + table_types[main_key]["params"][param_key] = {"name":param['name'], "type": param['type'], "size": 0, "comment": ""} + + if param.size() == 4: + table_types[main_key]["params"][param_key]['comment'] = param['comment'] + table_types[main_key]["params"][param_key]['size'] = param['size'] + +func load_file(): + + var save_path = get_path() + + if !_check_path(save_path): + ASSERT_ERROR(str("The file '",save_path,"' doesn't exist!")) + return + + if _loaded_path == save_path: + var dic = {"table": get_data(), "type": get_type()} + return dic + + var packedData = load(save_path) + + set_data(packedData) + + set_type(packedData) + + res_loaded.emit(_collection_path) + _loaded_path = save_path + + var dic = {"table": get_data(), "type": get_type()} + return dic + +func save_file(): + if _collection_path.is_empty(): + return + + var packedData: PackedDataContainer = PackedDataContainer.new() + + var datas = {"table": table_datas, "type": table_types} + + packedData.pack(datas) + + ResourceSaver.save(packedData, _collection_path) + res_saved.emit(_collection_path) + +# private + +func _check_path(path: String) -> bool: + + if path == null || path.is_empty(): + return false + + if !ResourceLoader.exists(path): + return false + + return true diff --git a/addons/datatable_godot/datatable.gd b/addons/datatable_godot/datatable.gd index c0ab402..1b7add0 100644 --- a/addons/datatable_godot/datatable.gd +++ b/addons/datatable_godot/datatable.gd @@ -6,29 +6,28 @@ var datatableDock: Node @onready var common: Node const tab_icon = preload("res://addons/datatable_godot/icons/tab_icon.svg") - -var editor_window: Window +const tab_path = "res://addons/datatable_godot/datatable.tscn" func _enter_tree(): # Initialization of the plugin goes here. - datatableDock = preload("res://addons/datatable_godot/datatable.tscn").instantiate() + datatableDock = preload(tab_path).instantiate() _add_data_table_dock() datatableDock.hide() common = datatableDock.get_node('signals') - common.toggle_plugin_on.emit() - _dt_interface.get_instance().set_main(datatableDock) print_rich("[color=lightgreen][Datatable] This warning ([color=ffde66]core/config/project_settings.cpp:365 - Property not found: autoload/datatable[/color]) & error ([color=ff786b]Request for nonexistent project setting: autoload/datatable.[/color]) message can be ignored, it will be fixed at the next version, but for now it's needed to remove the old singleton autoload to free the name for the class") remove_autoload_singleton("datatable") print("[DataTable] => Plugin is enabled!") + + _dt_plugin.get_instance().plugin_on.emit() func _exit_tree(): - common.toggle_plugin_off.emit() + _dt_plugin.get_instance().plugin_off.emit() # Clean-up of the plugin goes here. _remove_data_table_dock() diff --git a/addons/datatable_godot/ui/bg/bg_newTable.gd b/addons/datatable_godot/ui/bg/bg_newTable.gd index 1c57709..283828f 100644 --- a/addons/datatable_godot/ui/bg/bg_newTable.gd +++ b/addons/datatable_godot/ui/bg/bg_newTable.gd @@ -63,8 +63,6 @@ func _ready(): common.script_key_ask.emit("bg_newTable") - common.get_type_response.connect(_signal_get_types) - common.get_data_response.connect(_signal_get_datas) common.toggle_newTable_response.connect(_signal_on_shown) common.toggle_main_response.connect(_signal_on_hide) @@ -87,8 +85,17 @@ func _ready(): func check_data(): if shown: - common.get_data_ask.emit(script_key) - common.get_type_ask.emit(script_key) + var local_data = _dt_resource.get_instance().load_file() + + type_data = local_data['type'] + table_data = local_data['table'] + + selected_table_data = {} + reload_table_list() + reload_items_list() + param_list._clean(true) + + reload_table_type_options_ask.emit(type_data) func reload_table_list(): @@ -114,7 +121,8 @@ func reload_table_list(): if selected_table_data == data: _select_table(duplicate_node) - common.save_in_ressource() + + _dt_resource.get_instance().save_file() pass @@ -161,29 +169,28 @@ func reload_items_list(): reload_item_list.emit() - common.save_in_ressource() + + _dt_resource.get_instance().save_file() func _signal_on_shown(): - - common.get_data_ask.emit(script_key) - common.get_type_ask.emit(script_key) - shown = true - common.save_in_ressource() + check_data() + + _dt_resource.get_instance().save_file() return func _presave_data(): param_list.save_data_of_struct() - common.save_in_ressource() + _dt_resource.get_instance().save_file() func _signal_on_hide(): param_list.save_data_of_struct() shown = false - common.save_in_ressource() + _dt_resource.get_instance().save_file() selected_table_data = {} return @@ -193,27 +200,6 @@ func _signal_on_receive_key(key: int, script_name: String): script_key = key -func _signal_get_types(types: Dictionary, key: int): - - if script_key != key: - return - - type_data = types - - reload_table_type_options_ask.emit(type_data) - -func _signal_get_datas(datas: Dictionary, key: int): - - if script_key != key: - return - - table_data = datas - selected_table_data = {} - reload_table_list() - reload_items_list() - param_list._clean(true) - - func _create_table(table_name: String): if ob_tableType.item_count == 0: @@ -340,7 +326,7 @@ func _select_item(item_node: Node): selected_item_node.select(true) - common.save_in_ressource() + _dt_resource.get_instance().save_file() func _delete_item(item_node: Node): diff --git a/addons/datatable_godot/ui/datatable_ui.gd b/addons/datatable_godot/ui/datatable_ui.gd index 70c146f..e2b571b 100644 --- a/addons/datatable_godot/ui/datatable_ui.gd +++ b/addons/datatable_godot/ui/datatable_ui.gd @@ -43,6 +43,7 @@ const LOCAL_CONFIG_PATH: String = "res://addons/datatable_godot/plugin.cfg" func _ready(): ## We check if a new update is available or not + _dt_updater.get_instance().check_update() ## By security we reset the visible state of the main window to true _signal_toggleMain() @@ -87,7 +88,7 @@ func _signal_show_alert_popup(title: String, description: String): func check_for_datatable_change(): - common.ask_reload_data.emit() + _dt_resource.get_instance().res_reload.emit() func _show_update_window(): bg_autoupdate.visible = true From 609fd0fc7dfb3485cc04f78cb7de37e992d87de0 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 16:52:32 +0200 Subject: [PATCH 06/12] Updated the auto-updater, commonV2, etc --- addons/datatable_godot/common/backup.gd | 19 ++- addons/datatable_godot/common/common.gd | 2 - addons/datatable_godot/common/commonV2.gd | 25 +++ addons/datatable_godot/common/interface.gd | 20 ++- addons/datatable_godot/common/plugin.gd | 34 +++- addons/datatable_godot/common/resource.gd | 111 ++++++++++++- addons/datatable_godot/common/updater.gd | 129 ++++++++++++++-- addons/datatable_godot/datatable.tscn | 1 + addons/datatable_godot/plugin.cfg | 10 ++ addons/datatable_godot/ui/bg/bg_autoupdate.gd | 57 ++----- addons/datatable_godot/ui/bg/bg_manageType.gd | 146 +++++++----------- addons/datatable_godot/ui/bg/bg_newTable.gd | 4 +- .../ui/buttons/main/b_manageTableType.gd | 2 +- .../ui/buttons/main/b_newTable.gd | 2 +- .../ui/buttons/main/mb_manageCollection.gd | 81 +++------- .../ui/buttons/main/txt_version_status.gd | 4 +- .../ui/buttons/manageType/b_closeWindow.gd | 2 +- .../ui/buttons/newTable/b_closeWindow.gd | 2 +- addons/datatable_godot/ui/datatable_ui.gd | 32 +--- 19 files changed, 408 insertions(+), 275 deletions(-) diff --git a/addons/datatable_godot/common/backup.gd b/addons/datatable_godot/common/backup.gd index cb2f7b2..769715d 100644 --- a/addons/datatable_godot/common/backup.gd +++ b/addons/datatable_godot/common/backup.gd @@ -15,15 +15,15 @@ var _most_recent_path: String static func get_instance() -> _dt_backup: - if _INSTANCE: - return _INSTANCE + if !_INSTANCE || _dt_plugin.get_instance().get_dev_reset_instance() == "true": + _INSTANCE = _dt_backup.new() - _INSTANCE = _dt_backup.new() + _INSTANCE.load_var() return _INSTANCE # Init -func _init(): +func load_var(): var config = _dt_plugin.get_instance() @@ -41,6 +41,10 @@ func get_max(): func make(path: String): + if _dt_plugin.get_instance().get_dev_stop_backup() == "true": + WARNING("Can't make backup as the dev config 'stop_backup' is on true!") + return + if !_check_path(path): return @@ -100,17 +104,20 @@ func _check_path(path: String)->bool: func _get_index(path: String)->int: + _index += 1 if _index > _max: _index = 1 - + return 1 + if _most_recent_path != path: _index = 1 + return 1 _most_recent_path = path - return _index + return (_index) func _has_dir()->bool: var backup_dir = DirAccess.open("res://") diff --git a/addons/datatable_godot/common/common.gd b/addons/datatable_godot/common/common.gd index 523fadb..12749df 100644 --- a/addons/datatable_godot/common/common.gd +++ b/addons/datatable_godot/common/common.gd @@ -20,8 +20,6 @@ var collection_path: String = "": set(new_value): collection_path = new_value if !collection_path.is_empty(): - $"../MarginContainer/bg_main/FlowContainer/left_top_menu/b_newTable".disabled = false - $"../MarginContainer/bg_main/FlowContainer/left_top_menu/b_manageTableType".disabled = false # Working on the backup timer to restart it, reset the signal, and set it again backup_timer.stop() diff --git a/addons/datatable_godot/common/commonV2.gd b/addons/datatable_godot/common/commonV2.gd index db16e98..896663b 100644 --- a/addons/datatable_godot/common/commonV2.gd +++ b/addons/datatable_godot/common/commonV2.gd @@ -36,6 +36,27 @@ const TYPE_BASIS = 15 const TYPE_PROJ = 16 const TYPE_MAX = 17 +const INT_ICON = "res://addons/datatable_godot/icons/int.svg" +const FLOAT_ICON = "res://addons/datatable_godot/icons/float.svg" +const STR_ICON = "res://addons/datatable_godot/icons/String.svg" +const COLOR_ICON = "res://addons/datatable_godot/icons/Color.svg" +const V2_ICON = "res://addons/datatable_godot/icons/Vector2.svg" +const V3_ICON = "res://addons/datatable_godot/icons/Vector3.svg" +const V4_ICON = "res://addons/datatable_godot/icons/Vector4.svg" +const BOOL_ICON = "res://addons/datatable_godot/icons/bool.png" +const RESS_ICON = "res://addons/datatable_godot/icons/Ressource.png" +const QUAT_ICON = "res://addons/datatable_godot/icons/Quaternion.png" +const RECT_ICON = "res://addons/datatable_godot/icons/Rect2.png" +const PLANE_ICON = "res://addons/datatable_godot/icons/Plane.png" +const T2_ICON = "res://addons/datatable_godot/icons/Transform2D.png" +const T3_ICON = "res://addons/datatable_godot/icons/Transform3D.png" +const AABB_ICON = "res://addons/datatable_godot/icons/AABB.png" +const BASIS_ICON = "res://addons/datatable_godot/icons/Basis.png" +const PROJ_ICON = "res://addons/datatable_godot/icons/Projection.png" + +const ARR_ICON = "res://addons/datatable_godot/icons/array_value.png" +const SINGLE_ICON = "res://addons/datatable_godot/icons/single_value.png" + # backend func func ASSERT_ERROR(message: String): @@ -57,3 +78,7 @@ func WARNING(message: String): func ERROR(message: String): push_error(str("[DataTable] ", message)) + +func DEBUG(message: String): + if _dt_plugin.get_instance().get_dev_debug() == "true": + print_rich(str("[DataTable - Debug] ", message)) diff --git a/addons/datatable_godot/common/interface.gd b/addons/datatable_godot/common/interface.gd index 74b4a16..2fd3e04 100644 --- a/addons/datatable_godot/common/interface.gd +++ b/addons/datatable_godot/common/interface.gd @@ -20,12 +20,18 @@ static var _INSTANCE: _dt_interface = null static func get_instance() -> _dt_interface: - if _INSTANCE: - return _INSTANCE + if !_INSTANCE || _dt_plugin.get_instance().get_dev_reset_instance() == "true": + _INSTANCE = _dt_interface.new() - _INSTANCE = _dt_interface.new() + _INSTANCE.load_var() return _INSTANCE +# Init + +func load_var(): + # can be used to init variable if needed + pass + # Backend func set_main(value: Control): @@ -39,3 +45,11 @@ func get_main() -> Control: return _main +func show_main(): + get_main().toggleMain() + +func show_type(): + get_main().toggleManageType() + +func show_table(): + get_main().toggleNewTable() diff --git a/addons/datatable_godot/common/plugin.gd b/addons/datatable_godot/common/plugin.gd index fac3cc6..a1e5c18 100644 --- a/addons/datatable_godot/common/plugin.gd +++ b/addons/datatable_godot/common/plugin.gd @@ -16,15 +16,15 @@ signal plugin_on static func get_instance() -> _dt_plugin: - if _INSTANCE: - return _INSTANCE + if !_INSTANCE: + _INSTANCE = _dt_plugin.new() - _INSTANCE = _dt_plugin.new() + _INSTANCE.load_var() return _INSTANCE # Init -func _init(): +func load_var(): _config = ConfigFile.new() _config.load(LOCAL_CONFIG_PATH) @@ -36,20 +36,38 @@ func get_version() -> String: func get_name() -> String: return _config.get_value("plugin", "name") +func get_dev_debug() -> String: + return _config.get_value("dev", "debug", "false") + +func get_dev_stop_update() -> String: + return _config.get_value("dev", "stop_update", "false") + +func get_dev_stop_backup() -> String: + return _config.get_value("dev", "stop_backup", "false") + +func get_dev_reset_instance() -> String: + return _config.get_value("dev", "reset_instance", "false") + func get_file_version() -> String: return _config.get_value("file", "version") func get_file_ext() -> String: - return _config.get_value("file", "ext") + return _config.get_value("file", "ext", ".tableCollection.res") func get_backup_path() -> String: - return _config.get_value("backup", "folder") + return _config.get_value("backup", "folder", "res://datatable_backup/") func get_backup_max() -> String: - return _config.get_value("backup", "max") + return _config.get_value("backup", "max", "3") func get_backup_suffix() -> String: - return _config.get_value("backup", "suffix") + return _config.get_value("backup", "suffix", "_backup") + +func get_update_temp_file() -> String: + return _config.get_value("update", "temp_file", "user://temp_update_datatable.zip") + +func get_update_safeguard() -> String: + return _config.get_value("update", "safeguard", "res://safeguard/safeguard.gd") # Convert a version number to an actually comparable number # OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) diff --git a/addons/datatable_godot/common/resource.gd b/addons/datatable_godot/common/resource.gd index b87ae76..a7bef97 100644 --- a/addons/datatable_godot/common/resource.gd +++ b/addons/datatable_godot/common/resource.gd @@ -4,34 +4,59 @@ class_name _dt_resource ## Class that manage all the save / load datatable collection file +const _collection_required_key = ["table", "type"] + signal res_saved(path: String) signal res_loaded(path: String) +signal res_created(path: String) signal res_reload -static var _INSTANCE: _dt_resource = null +static var _INSTANCE var table_datas: Dictionary var table_types: Dictionary var _loaded_path: String var _collection_path: String +var _collection_name: String + +var _ext: String +var _version: String static func get_instance() -> _dt_resource: - if _INSTANCE: - return _INSTANCE + if !_INSTANCE || _dt_plugin.get_instance().get_dev_reset_instance() == "true": + _INSTANCE = _dt_resource.new() - _INSTANCE = _dt_resource.new() + _INSTANCE.load_var() return _INSTANCE +# Init + +func load_var(): + + _ext = _dt_plugin.get_instance().get_file_ext() + _version = _dt_plugin.get_instance().get_file_version() + # public +func set_name(path_or_name: String): + + if path_or_name.contains(".res"): + _collection_name = _get_file_name(path_or_name) + else: + _collection_name = path_or_name + func set_path(path: String): _collection_path = path + set_name(path) func get_path(): return _collection_path +func get_name(): + return _collection_name + func get_data() -> Dictionary: return table_datas @@ -41,6 +66,9 @@ func get_type() -> Dictionary: return table_types func set_data(packedData: PackedDataContainer): + + table_datas.clear() + var table_data = packedData['table'] for main_key in table_data: @@ -62,6 +90,9 @@ func set_data(packedData: PackedDataContainer): table_datas[main_key]['rows'][row_key]['columns'][column_key] = {"name": column_data['name'], "value": column_data['value'], "type": column_data['type'], "size": column_data['size']} func set_type(packedData: PackedDataContainer): + + table_types.clear() + var type_data = packedData['type'] for main_key in type_data: # name of type @@ -80,14 +111,23 @@ func set_type(packedData: PackedDataContainer): table_types[main_key]["params"][param_key]['comment'] = param['comment'] table_types[main_key]["params"][param_key]['size'] = param['size'] -func load_file(): +func load_file(path: String = ""): - var save_path = get_path() + var save_path = path + + if path.is_empty(): + save_path = get_path() + else: + set_path(path) if !_check_path(save_path): ASSERT_ERROR(str("The file '",save_path,"' doesn't exist!")) return + if !_is_valid_resource_file(save_path): + ERROR(str("The file '",save_path,"' is not a valid collection file!")) + return + if _loaded_path == save_path: var dic = {"table": get_data(), "type": get_type()} return dic @@ -95,7 +135,6 @@ func load_file(): var packedData = load(save_path) set_data(packedData) - set_type(packedData) res_loaded.emit(_collection_path) @@ -117,6 +156,32 @@ func save_file(): ResourceSaver.save(packedData, _collection_path) res_saved.emit(_collection_path) +func new_file(path: String) -> bool: + if path.is_empty(): + ERROR("Can't create a new file with an empty given path") + return false + + var _file_name = _get_file_name(path) + + var packedData: PackedDataContainer = PackedDataContainer.new() + + packedData.pack({"table": {}, "type": {}}) + + var ret = ResourceSaver.save(packedData, path) + + if ret != OK: + ERROR("Can't save collection due to an error when trying to save it!") + return false + + set_data(packedData) + set_type(packedData) + + set_path(path) + + res_created.emit(path) + + return true + # private func _check_path(path: String) -> bool: @@ -128,3 +193,35 @@ func _check_path(path: String) -> bool: return false return true + +func _get_file_name(path: String) -> String: + var collections_name + + if path.ends_with(_ext): + collections_name = path.split(_ext)[0].split("/") + else: + collections_name = path.split(".res")[0].split("/") + + var collection_name = collections_name[collections_name.size()-1] + + return collection_name + +func _is_valid_resource_file(path: String) -> bool: + + var res = load(path) + + if res.get_class() != "PackedDataContainer": + ERROR("This file isn't a PackedDataContainer!") + return false + + var key_index = 0 + + for i in res: + if _collection_required_key.has(i): + key_index += 1 + + if key_index != _collection_required_key.size(): + ERROR("This file doesn't have the required key to be an valid collection!") + return false + + return true diff --git a/addons/datatable_godot/common/updater.gd b/addons/datatable_godot/common/updater.gd index 35d62d2..e858c04 100644 --- a/addons/datatable_godot/common/updater.gd +++ b/addons/datatable_godot/common/updater.gd @@ -12,8 +12,20 @@ class_name _dt_updater var _plugin: _dt_plugin var _http_request: HTTPRequest +var _version_statut: RichTextLabel var _is_checking_update: bool = false +var _next_version + +const check_update_text: String = "[img]res://addons/datatable_godot/icons/Reload.png[/img] Checking for update... " +const up_to_date_text: String = "[img]res://addons/datatable_godot/icons/StatusSuccess.png[/img] [color=lightgreen]Version up-to-date! " +const update_available_text: String = "[img]res://addons/datatable_godot/icons/StatusError.png[/img] [color=#ff768b]An update is available! " +const cant_check_text: String = "[img]res://addons/datatable_godot/icons/StatusWarning.png[/img] [color=ffde66]Couldn't check for update! " + +const check_update_tip: String = "The plugin is check for an update..." +const up_to_date_tip: String = "You good to go, you got the last version available!" +const update_available_tip: String = "A new update is available, please update it!" +const cant_check_tip: String = "The plugin couldn't check if an update was available due to an unknown error. Check it manually please!" const UPDATE_URL: String = "https://api.github.com/repos/Ward727a/godot_datatable_plugin/releases" @@ -22,19 +34,22 @@ signal update_error ## The plugin couldn't check if a most recent version is ava signal update_not_needed ## The plugin is already at the most recent version signal checking_update ## The plugin is checking for an update, need to wait +signal failed ## Failed updating while doing so +signal updated ## Plugin updated, need a restart + static var _INSTANCE: _dt_updater = null static func get_instance() -> _dt_updater: - if _INSTANCE: - return _INSTANCE + if !_INSTANCE || _dt_plugin.get_instance().get_dev_reset_instance() == "true": + _INSTANCE = _dt_updater.new() - _INSTANCE = _dt_updater.new() + _INSTANCE.load_var() return _INSTANCE # Init -func _init(): +func load_var(): _plugin = _dt_plugin.get_instance() # Backend @@ -51,16 +66,43 @@ func _get_http() -> HTTPRequest: return _http_request -func check_update(): +func check_update(label: RichTextLabel): + + if _dt_plugin.get_instance().get_dev_stop_update() == "true": + WARNING("Can't make update as the dev config 'stop_update' is on true!") + return if _is_checking_update: return _is_checking_update = true - checking_update.emit() + _checking_update() + + _version_statut = label _get_http().request(UPDATE_URL) + +func _update_available(new_v: String): + update_available.emit(new_v) + _update_statut(update_available_text, update_available_tip) + +func _update_not_needed(): + update_not_needed.emit() + _update_statut(up_to_date_text, up_to_date_tip) + +func _checking_update(): + checking_update.emit() + _update_statut(check_update_text, check_update_tip) + +func _update_error(): + update_error.emit() + _update_statut(cant_check_text, cant_check_tip) + +func _update_statut(txt: String, tip: String): + _version_statut.set_text(txt) + _version_statut.set_tooltip_text(tip) + # Hook # Original creator of this code part is nathanhoad, I only edited it a little to make it work with mine! @@ -93,14 +135,14 @@ func _on_update_resp(result: int, response_code: int, headers: PackedStringArray _is_checking_update = false if result != HTTPRequest.RESULT_SUCCESS: - update_error.emit() + _update_error() return var current_version: String = _plugin.get_version() var response = JSON.parse_string(body.get_string_from_utf8()) if typeof(response) != TYPE_ARRAY: - update_error.emit() + _update_error() return var versions = (response as Array).filter(func(release): @@ -109,11 +151,11 @@ func _on_update_resp(result: int, response_code: int, headers: PackedStringArray ) if versions.size() > 0: - update_available.emit(versions[0].tag_name.substr(1)) + _update_available(versions[0].tag_name.substr(1)) _get_http().request_completed.disconnect(_on_update_resp) else: - update_not_needed.emit() + _update_not_needed() # OC: Nathanhoad (https://github.com/nathanhoad/godot_input_helper/tree/main) under MIT License (see above) func _on_success_update(new_version): @@ -142,3 +184,70 @@ func _on_failed_update() -> void: failed_dialog.confirmed.connect(func(): failed_dialog.queue_free()) EditorInterface.get_base_control().add_child(failed_dialog) failed_dialog.popup_centered() + + +# # # Function used by the UI + + +func save_zip(bytes: PackedByteArray) -> void: + + var TEMP_FILE_NAME = _dt_plugin.get_instance().get_update_temp_file() + + var file: FileAccess = FileAccess.open(TEMP_FILE_NAME, FileAccess.WRITE) + file.store_buffer(bytes) + file.flush() + +func _on_download_button_pressed() -> bool: + + var TEMP_FILE_NAME = _dt_plugin.get_instance().get_update_temp_file() + var SAFEGUARD_PATH = _dt_plugin.get_instance().get_update_safeguard() + + # Safeguard + if FileAccess.file_exists(SAFEGUARD_PATH): + ERROR(str("Can't update due to safeguard (please delete: ",SAFEGUARD_PATH,")")) + failed.emit() + return false + _get_http().request_completed.connect(_on_http_request_completed) + + _get_http().request(str("https://github.com/Ward727a/godot_datatable_plugin/archive/refs/tags/v",_next_version,".zip")) + + return true + +func _on_http_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray): + + var TEMP_FILE_NAME = _dt_plugin.get_instance().get_update_temp_file() + + if result != HTTPRequest.RESULT_SUCCESS: + failed.emit() + return + + save_zip(body) + + OS.move_to_trash(ProjectSettings.globalize_path("res://addons/datatable_godot")) + + var zip_reader: ZIPReader = ZIPReader.new() + zip_reader.open(TEMP_FILE_NAME) + var files: PackedStringArray = zip_reader.get_files() + + var base_path = files[1] + + # Remove archive folder + files.remove_at(0) + # Remove assets folder + files.remove_at(0) + + for path in files: + var new_file_path: String = path.replace(base_path, "") + + if path.ends_with("/"): + DirAccess.make_dir_recursive_absolute(str("res://addons/",new_file_path)) + else: + var file: FileAccess = FileAccess.open(str("res://addons/",new_file_path), FileAccess.WRITE) + file.store_buffer(zip_reader.read_file(path)) + + zip_reader.close() + + DirAccess.remove_absolute(TEMP_FILE_NAME) + + updated.emit(_next_version) + diff --git a/addons/datatable_godot/datatable.tscn b/addons/datatable_godot/datatable.tscn index dd72a29..757f43f 100644 --- a/addons/datatable_godot/datatable.tscn +++ b/addons/datatable_godot/datatable.tscn @@ -367,6 +367,7 @@ alignment = 2 [node name="version_status" type="RichTextLabel" parent="MarginContainer/bg_main/Panel/VBoxContainer/HBoxContainer/HBoxContainer3"] layout_mode = 2 tooltip_text = "The plugin is check for an update..." +mouse_default_cursor_shape = 2 theme_override_styles/focus = SubResource("StyleBoxFlat_w7rfg") theme_override_styles/normal = SubResource("StyleBoxFlat_w7rfg") bbcode_enabled = true diff --git a/addons/datatable_godot/plugin.cfg b/addons/datatable_godot/plugin.cfg index 4b7c633..93c941c 100644 --- a/addons/datatable_godot/plugin.cfg +++ b/addons/datatable_godot/plugin.cfg @@ -6,6 +6,10 @@ author="Ward" version="2.0.0" script="datatable.gd" +[update] +temp_file="user://temp_update_datatable.zip" +safeguard="res://safeguard/safeguard.gd" + [backup] folder="res://datatable_backup/" max="3" @@ -14,3 +18,9 @@ suffix="_backup" [file] ext=".tableCollection.res" version="1.0.0" + +[dev] +debug="true" +stop_update="false" +stop_backup="false" +reset_instance="false" diff --git a/addons/datatable_godot/ui/bg/bg_autoupdate.gd b/addons/datatable_godot/ui/bg/bg_autoupdate.gd index 73b6d31..9ac7db5 100644 --- a/addons/datatable_godot/ui/bg/bg_autoupdate.gd +++ b/addons/datatable_godot/ui/bg/bg_autoupdate.gd @@ -31,8 +31,6 @@ signal failed() signal updated(new_version: String) -const TEMP_FILE_NAME = "user://temp_update_datatable.zip" - @onready var title: Label = $MarginContainer/MarginContainer/VBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer2/Label @onready var downloadButton: Button = $MarginContainer/MarginContainer/VBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer3/MarginContainer/b_downloadUpdate @onready var close: Button = $MarginContainer/MarginContainer/VBoxContainer/HBoxContainer/right_top/Button @@ -55,59 +53,24 @@ func _ready(): func _close_window(): self.visible = false -func save_zip(bytes: PackedByteArray) -> void: - var file: FileAccess = FileAccess.open(TEMP_FILE_NAME, FileAccess.WRITE) - file.store_buffer(bytes) - file.flush() - func _on_download_button_pressed() -> void: - # Safeguard - if FileAccess.file_exists("res://safeguard/safeguard.gd"): - prints("Can't update due to safeguard (please delete: safeguard/safeguard.gd)") - failed.emit() + _dt_updater.get_instance().failed.connect(_on_failed_update) + _dt_updater.get_instance().updated.connect(_on_success_update) + + if _dt_updater.get_instance()._on_download_button_pressed(): error_txt.visible = true return - http_request.request_completed.connect(_on_http_request_completed) - http_request.request(str("https://github.com/Ward727a/godot_datatable_plugin/archive/refs/tags/v",next_version,".zip")) downloadButton.disabled = true downloadButton.text = "Downloading the update..." -func _on_http_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray): - - if result != HTTPRequest.RESULT_SUCCESS: - failed.emit() - error_txt.visible = true - return - - save_zip(body) +func _on_failed_update(): - OS.move_to_trash(ProjectSettings.globalize_path("res://addons/datatable_godot")) - - var zip_reader: ZIPReader = ZIPReader.new() - zip_reader.open(TEMP_FILE_NAME) - var files: PackedStringArray = zip_reader.get_files() - - var base_path = files[1] - - # Remove archive folder - files.remove_at(0) - # Remove assets folder - files.remove_at(0) - - for path in files: - var new_file_path: String = path.replace(base_path, "") - - if path.ends_with("/"): - DirAccess.make_dir_recursive_absolute(str("res://addons/",new_file_path)) - else: - var file: FileAccess = FileAccess.open(str("res://addons/",new_file_path), FileAccess.WRITE) - file.store_buffer(zip_reader.read_file(path)) - - zip_reader.close() - - DirAccess.remove_absolute(TEMP_FILE_NAME) + error_txt.visible = true + downloadButton.text = "Error when trying to update!" + +func _on_success_update(next_v:String): - updated.emit(next_version) success_txt.visible = true + downloadButton.text = str("Update: ",next_v," done with success!") diff --git a/addons/datatable_godot/ui/bg/bg_manageType.gd b/addons/datatable_godot/ui/bg/bg_manageType.gd index 5bef687..5c5639f 100644 --- a/addons/datatable_godot/ui/bg/bg_manageType.gd +++ b/addons/datatable_godot/ui/bg/bg_manageType.gd @@ -1,7 +1,6 @@ @tool extends Panel -## import common to access signals and enum @onready var common: Node = %signals @onready var script_key: int = -1 @@ -20,27 +19,6 @@ extends Panel @onready var selected_object_key: String = "" @onready var selected_object_node: Node -const int_icon = "res://addons/datatable_godot/icons/int.svg" -const float_icon = "res://addons/datatable_godot/icons/float.svg" -const str_icon = "res://addons/datatable_godot/icons/String.svg" -const color_icon = "res://addons/datatable_godot/icons/Color.svg" -const v2_icon = "res://addons/datatable_godot/icons/Vector2.svg" -const v3_icon = "res://addons/datatable_godot/icons/Vector3.svg" -const v4_icon = "res://addons/datatable_godot/icons/Vector4.svg" -const bool_icon = "res://addons/datatable_godot/icons/bool.png" -const ress_icon = "res://addons/datatable_godot/icons/Ressource.png" -const quat_icon = "res://addons/datatable_godot/icons/Quaternion.png" -const rect_icon = "res://addons/datatable_godot/icons/Rect2.png" -const plane_icon = "res://addons/datatable_godot/icons/Plane.png" -const t2_icon = "res://addons/datatable_godot/icons/Transform2D.png" -const t3_icon = "res://addons/datatable_godot/icons/Transform3D.png" -const aabb_icon = "res://addons/datatable_godot/icons/AABB.png" -const basis_icon = "res://addons/datatable_godot/icons/Basis.png" -const proj_icon = "res://addons/datatable_godot/icons/Projection.png" - -const arr_icon = "res://addons/datatable_godot/icons/array_value.png" -const single_icon = "res://addons/datatable_godot/icons/single_value.png" - @onready var _shown = false signal select_type(object_node: HBoxContainer) @@ -72,18 +50,7 @@ func _ready(): ## link this signal to get when the window is closed common.toggle_main_response.connect(_signal_onHide) - ## link this signal to get the script key once asked - common.script_key_response.connect(_signal_key_response) - - common.script_key_ask.emit("bg_manageType") - - common.ask_reload_data.connect(check_data) - - ## link this signal to get the types data once asked - common.get_type_response.connect(_signal_type_response) - - ## link this signal to get the table data once asked - common.get_data_response.connect(_signal_data_response) + _dt_resource.get_instance().res_reload.connect(check_data) ## link this signal to check if param name is valid edit_param_name_ask.connect(_signal_edit_param_name) @@ -106,11 +73,13 @@ func _ready(): func check_data(): if _shown: - common.get_type_ask.emit(script_key) + get_type() + get_data() func _signal_onShown(): - common.get_type_ask.emit(script_key) - common.get_data_ask.emit(script_key) + get_type() + get_data() + _shown = true pass @@ -128,22 +97,13 @@ func _signal_onHide(): selected_object_key = "" pass -func _signal_key_response(key: int, script_name: String): - if script_name == "bg_manageType": - script_key = key - -func _signal_type_response(types: Dictionary, key: int): - if key == script_key: - - - types_data = types - - reload_list() - -func _signal_data_response(datas: Dictionary, key: int): +func get_type(): + types_data = _dt_resource.get_instance().get_type() - if key == script_key: - tables_data = datas + reload_list() + +func get_data(): + tables_data = _dt_resource.get_instance().get_data() func reload_list(): if typeList.get_child_count() != 0: @@ -215,49 +175,49 @@ func _signal_select_type(object_node: HBoxContainer): node.bbcode_enabled = true match int(param['type']): - common.TYPE_STRING: - node_icon = str_icon - common.TYPE_FLOAT: - node_icon = float_icon - common.TYPE_COLOR: - node_icon = color_icon - common.TYPE_INT: - node_icon = int_icon - common.TYPE_VECTOR2: - node_icon = v2_icon - common.TYPE_VECTOR3: - node_icon = v3_icon - common.TYPE_VECTOR4: - node_icon = v4_icon - common.TYPE_BOOL: - node_icon = bool_icon - common.TYPE_RESS: - node_icon = ress_icon - common.TYPE_QUAT: - node_icon = quat_icon - common.TYPE_RECT: - node_icon = rect_icon - common.TYPE_PLANE: - node_icon = plane_icon - common.TYPE_T2: - node_icon = t2_icon - common.TYPE_T3: - node_icon = t3_icon - common.TYPE_AABB: - node_icon = aabb_icon - common.TYPE_BASIS: - node_icon = basis_icon - common.TYPE_PROJ: - node_icon = proj_icon + _dt_common.TYPE_STRING: + node_icon = _dt_common.STR_ICON + _dt_common.TYPE_FLOAT: + node_icon = _dt_common.FLOAT_ICON + _dt_common.TYPE_COLOR: + node_icon = _dt_common.COLOR_ICON + _dt_common.TYPE_INT: + node_icon = _dt_common.INT_ICON + _dt_common.TYPE_VECTOR2: + node_icon = _dt_common.V2_ICON + _dt_common.TYPE_VECTOR3: + node_icon = _dt_common.V3_ICON + _dt_common.TYPE_VECTOR4: + node_icon = _dt_common.V4_ICON + _dt_common.TYPE_BOOL: + node_icon = _dt_common.BOOL_ICON + _dt_common.TYPE_RESS: + node_icon = _dt_common.RESS_ICON + _dt_common.TYPE_QUAT: + node_icon = _dt_common.QUAT_ICON + _dt_common.TYPE_RECT: + node_icon = _dt_common.RECT_ICON + _dt_common.TYPE_PLANE: + node_icon = _dt_common.PLANE_ICON + _dt_common.TYPE_T2: + node_icon = _dt_common.T2_ICON + _dt_common.TYPE_T3: + node_icon = _dt_common.T3_ICON + _dt_common.TYPE_AABB: + node_icon = _dt_common.AABB_ICON + _dt_common.TYPE_BASIS: + node_icon = _dt_common.BASIS_ICON + _dt_common.TYPE_PROJ: + node_icon = _dt_common.PROJ_ICON if !param.has("size"): param['size'] = 0 if int(param['size']) == 0: - node_size = single_icon + node_size = _dt_common.SINGLE_ICON else: - node_size = arr_icon + node_size = _dt_common.ARR_ICON nSize.icon = load(node_size) node.text = str("[img]",node_icon,"[/img] ",param['name']) @@ -280,8 +240,8 @@ func _signal_remove_type(object_node: HBoxContainer): paramList.remove_child(i) recheck_param_name.emit() recheck_type_name.emit() - - common.save_in_ressource() + + _dt_resource.get_instance().save_file() pass func _signal_edit_param_name(param_name: String): @@ -339,7 +299,7 @@ func _signal_add_param(param_name: String, param_type: int, param_size: int): add_param_response.emit(true) _signal_select_type(selected_object_node) - common.save_in_ressource() + _dt_resource.get_instance().save_file() func _signal_remove_param(param_name: String): @@ -357,7 +317,7 @@ func _signal_remove_param(param_name: String): print("Erased key: ",param_name," in item: ", row_key) tables_data[i]['rows'][row_key]['columns'].erase(param_name) - common.save_in_ressource() + _dt_resource.get_instance().save_file() func _signal_check_type_name(new_type: String): @@ -385,5 +345,5 @@ func _signal_add_type(new_type: String): reload_list() add_type_response.emit(true) - common.save_in_ressource() + _dt_resource.get_instance().save_file() diff --git a/addons/datatable_godot/ui/bg/bg_newTable.gd b/addons/datatable_godot/ui/bg/bg_newTable.gd index 283828f..e429114 100644 --- a/addons/datatable_godot/ui/bg/bg_newTable.gd +++ b/addons/datatable_godot/ui/bg/bg_newTable.gd @@ -61,13 +61,11 @@ signal delete_item_response(success: bool) # Called when the node enters the scene tree for the first time. func _ready(): - common.script_key_ask.emit("bg_newTable") - common.toggle_newTable_response.connect(_signal_on_shown) common.toggle_main_response.connect(_signal_on_hide) - common.ask_reload_data.connect(check_data) + _dt_resource.get_instance().res_reload.connect(check_data) common.presave_data.connect(_presave_data) diff --git a/addons/datatable_godot/ui/buttons/main/b_manageTableType.gd b/addons/datatable_godot/ui/buttons/main/b_manageTableType.gd index 8aba302..32c8b4b 100644 --- a/addons/datatable_godot/ui/buttons/main/b_manageTableType.gd +++ b/addons/datatable_godot/ui/buttons/main/b_manageTableType.gd @@ -5,5 +5,5 @@ extends Button @onready var common: Node = %signals func _pressed(): - common.toggle_manageType_ask.emit() + _dt_interface.get_instance().show_type() diff --git a/addons/datatable_godot/ui/buttons/main/b_newTable.gd b/addons/datatable_godot/ui/buttons/main/b_newTable.gd index 714f406..c69fc62 100644 --- a/addons/datatable_godot/ui/buttons/main/b_newTable.gd +++ b/addons/datatable_godot/ui/buttons/main/b_newTable.gd @@ -5,4 +5,4 @@ extends Button @onready var common: Node = %signals func _pressed(): - common.toggle_newTable_ask.emit() + _dt_interface.get_instance().show_table() diff --git a/addons/datatable_godot/ui/buttons/main/mb_manageCollection.gd b/addons/datatable_godot/ui/buttons/main/mb_manageCollection.gd index 82c0128..4d2ec88 100644 --- a/addons/datatable_godot/ui/buttons/main/mb_manageCollection.gd +++ b/addons/datatable_godot/ui/buttons/main/mb_manageCollection.gd @@ -66,85 +66,42 @@ func _item_pressed(id: int): pass func _on_load_collection(collection_path: String): - print_rich("[color=ffde66][DataTable] Loading collection at path: ", collection_path) + print_rich("[color=",_dt_common.txt_color.WARNING,"][DataTable] Loading collection at path: ", collection_path) - var collections_name + _dt_resource.get_instance().load_file(collection_path) + _dt_resource.get_instance().res_reload.emit() - if collection_path.ends_with(".tableCollection.res"): - collections_name = collection_path.split(".tableCollection.res")[0].split("/") - else: - collections_name = collection_path.split(".res")[0].split("/") + var collection_name = _dt_resource.get_instance().get_name() + collection_path = _dt_resource.get_instance().get_path() - var collection_name = collections_name[collections_name.size()-1] - - if !FileAccess.file_exists(collection_path): - push_error("This file doesn't exist!") - return - - var packedData = load(collection_path) - - if packedData.get_class() != "PackedDataContainer": - push_error("This file is not of the class \"PackedDataContainer\"!") - return - - var success_key: int = 0 - - for i in packedData: - if _collection_required_key.has(i): - success_key += 1 - - if success_key != _collection_required_key.size(): - push_error("This file doesn't have the required key to be an valid collection!") - return - - print_rich("[color=lightgreen][DataTable] Loaded collection '",collection_name,"' with success!") - - common.table_datas = {} - common.table_types = {} - - common.collection_path = collection_path - common.ask_reload_data.emit() + print_rich("[color=",_dt_common.txt_color.SUCCESS,"][DataTable] Loaded collection '",collection_name,"' with success!") %label_collection.set_text(str("Opened collection: ", collection_name)) %label_collection.set_tooltip_text(str("path: ",collection_path)) + _dt_backup.get_instance().make(collection_path) + + $"../b_newTable".disabled = false + $"../b_manageTableType".disabled = false + _load_file_dialog.queue_free() func _on_new_collection(collection_path: String): - print_rich("[color=ffde66][DataTable] Creating new collection at path: ", collection_path) - - var collections_name - - if collection_path.ends_with(".tableCollection.res"): - collections_name = collection_path.split(".tableCollection.res")[0].split("/") - else: - collections_name = collection_path.split(".res")[0].split("/") - - var collection_name = collections_name[collections_name.size()-1] - - var packedData: PackedDataContainer = PackedDataContainer.new() + print_rich("[color=",_dt_common.txt_color.WARNING,"][DataTable] Creating new collection at path: ", collection_path) - var template_data = {"table": {}, "type": {}} + _dt_resource.get_instance().new_file(collection_path) + _dt_resource.get_instance().res_reload.emit() - packedData.pack(template_data) + var collection_name = _dt_resource.get_instance().get_name() + collection_path = _dt_resource.get_instance().get_path() - var ret = ResourceSaver.save(packedData, collection_path) - - if ret != OK: - push_error("Can't create collection due to an error when trying to save it!") - return - - common.table_datas = {} - common.table_types = {} - - common.collection_path = collection_path - common.ask_reload_data.emit() - - print_rich("[color=lightgreen][DataTable] Created collection '",collection_name,"' with success!") + print_rich("[color=",_dt_common.txt_color.SUCCESS,"][DataTable] Created collection '",collection_name,"' with success!") %label_collection.set_text(str("Opened collection: ", collection_name)) %label_collection.set_tooltip_text(str("path: ",collection_path)) + _dt_backup.get_instance().make(collection_path) + _new_file_dialog.queue_free() func _on_close_load(): diff --git a/addons/datatable_godot/ui/buttons/main/txt_version_status.gd b/addons/datatable_godot/ui/buttons/main/txt_version_status.gd index 0be1fa8..a940349 100644 --- a/addons/datatable_godot/ui/buttons/main/txt_version_status.gd +++ b/addons/datatable_godot/ui/buttons/main/txt_version_status.gd @@ -1,9 +1,7 @@ @tool extends RichTextLabel -signal pressed - func _gui_input(event): if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT and event.pressed: - pressed.emit() + _dt_updater.get_instance().check_update(self) diff --git a/addons/datatable_godot/ui/buttons/manageType/b_closeWindow.gd b/addons/datatable_godot/ui/buttons/manageType/b_closeWindow.gd index 1bafa51..f062b9d 100644 --- a/addons/datatable_godot/ui/buttons/manageType/b_closeWindow.gd +++ b/addons/datatable_godot/ui/buttons/manageType/b_closeWindow.gd @@ -5,4 +5,4 @@ extends Button @onready var common: Node = %signals func _pressed(): - common.toggle_main_ask.emit() + _dt_interface.get_instance().show_main() diff --git a/addons/datatable_godot/ui/buttons/newTable/b_closeWindow.gd b/addons/datatable_godot/ui/buttons/newTable/b_closeWindow.gd index 1bafa51..f062b9d 100644 --- a/addons/datatable_godot/ui/buttons/newTable/b_closeWindow.gd +++ b/addons/datatable_godot/ui/buttons/newTable/b_closeWindow.gd @@ -5,4 +5,4 @@ extends Button @onready var common: Node = %signals func _pressed(): - common.toggle_main_ask.emit() + _dt_interface.get_instance().show_main() diff --git a/addons/datatable_godot/ui/datatable_ui.gd b/addons/datatable_godot/ui/datatable_ui.gd index e2b571b..cc38692 100644 --- a/addons/datatable_godot/ui/datatable_ui.gd +++ b/addons/datatable_godot/ui/datatable_ui.gd @@ -15,26 +15,8 @@ extends Control @onready var bg_manageType: Panel = $MarginContainer/bg_manageType @onready var bg_autoupdate: Panel = $MarginContainer/bg_autoupdate -@onready var http_request: HTTPRequest = $HTTPRequest - @onready var version_statut: RichTextLabel = $MarginContainer/bg_main/Panel/VBoxContainer/HBoxContainer/HBoxContainer3/version_status -const UPDATE_URL: String = "https://api.github.com/repos/Ward727a/godot_datatable_plugin/releases" - -var checking_update: bool = false - -const check_update_text: String = "[img]res://addons/datatable_godot/icons/Reload.png[/img] Checking for update... " -const up_to_date_text: String = "[img]res://addons/datatable_godot/icons/StatusSuccess.png[/img] [color=lightgreen]Version up-to-date! " -const update_available_text: String = "[img]res://addons/datatable_godot/icons/StatusError.png[/img] [color=#ff768b]An update is available! " -const cant_check_text: String = "[img]res://addons/datatable_godot/icons/StatusWarning.png[/img] [color=ffde66]Couldn't check for update! " - -const check_update_tip: String = "The plugin is check for an update..." -const up_to_date_tip: String = "You good to go, you got the last version available!" -const update_available_tip: String = "A new update is available, please update it!" -const cant_check_tip: String = "The plugin couldn't check if an update was available due to an unknown error. Check it manually please!" - -const LOCAL_CONFIG_PATH: String = "res://addons/datatable_godot/plugin.cfg" - ############### ## Functions ## @@ -43,15 +25,11 @@ const LOCAL_CONFIG_PATH: String = "res://addons/datatable_godot/plugin.cfg" func _ready(): ## We check if a new update is available or not - _dt_updater.get_instance().check_update() + _dt_updater.get_instance().check_update(version_statut) ## By security we reset the visible state of the main window to true - _signal_toggleMain() + toggleMain() - ## Connect each asking signal for the toggle on/off of UI main window - common.toggle_main_ask.connect(_signal_toggleMain) - common.toggle_newTable_ask.connect(_signal_toggleNewTable) - common.toggle_manageType_ask.connect(_signal_toggleManageType) common.popup_alert_ask.connect(_signal_show_alert_popup) func _disable_all_UI(): @@ -63,19 +41,19 @@ func _disable_all_UI(): ## Signal Callable ## ##################### -func _signal_toggleMain(): +func toggleMain(): _disable_all_UI() bg_main.visible = true common.toggle_main_response.emit() -func _signal_toggleNewTable(): +func toggleNewTable(): _disable_all_UI() bg_newTable.visible = true common.toggle_newTable_response.emit() -func _signal_toggleManageType(): +func toggleManageType(): _disable_all_UI() bg_manageType.visible = true From 2d453fe1412bbe33deab9606482cc87b6a9bdb20 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 19:19:17 +0200 Subject: [PATCH 07/12] Cleaning schema and making schema system Starting working on the dynamic type --- addons/datatable_godot/common/backup.gd | 7 +- addons/datatable_godot/common/common.gd | 114 - addons/datatable_godot/common/commonV2.gd | 1 + addons/datatable_godot/common/interface.gd | 7 +- addons/datatable_godot/common/plugin.gd | 6 +- addons/datatable_godot/common/resource.gd | 8 +- addons/datatable_godot/common/schema.gd | 89 + addons/datatable_godot/common/signals.gd | 38 + addons/datatable_godot/common/updater.gd | 12 +- addons/datatable_godot/datatable.gd | 6 + addons/datatable_godot/datatable.tscn | 1951 +---------------- addons/datatable_godot/ui/datatable_ui.gd | 5 +- .../ui/nodes/schema/aabb_schema.tscn | 152 ++ .../ui/nodes/schema/array_schema.tscn | 88 + .../ui/nodes/schema/basis_schema.tscn | 218 ++ .../ui/nodes/schema/bool_schema.tscn | 19 + .../ui/nodes/schema/color_schema.tscn | 20 + .../ui/nodes/schema/float_schema.tscn | 24 + .../ui/nodes/schema/int_schema.tscn | 24 + .../ui/nodes/schema/plane_schema.tscn | 99 + .../ui/nodes/schema/proj_schema.tscn | 369 ++++ .../ui/nodes/schema/quat_schema.tscn | 99 + .../ui/nodes/schema/rect_schema.tscn | 110 + .../ui/nodes/schema/ress_schema.tscn | 44 + .../ui/nodes/schema/string_schema.tscn | 20 + .../ui/nodes/schema/t_2_schema.tscn | 152 ++ .../ui/nodes/schema/t_3_schema.tscn | 281 +++ .../ui/nodes/schema/vector_2_schema.tscn | 60 + .../ui/nodes/schema/vector_3_schema.tscn | 80 + .../ui/nodes/schema/vector_4_schema.tscn | 100 + .../schema/new_table/VBC_itemTableDataList.gd | 114 +- .../ui/schema/new_table/array_schema.gd | 70 +- 32 files changed, 2205 insertions(+), 2182 deletions(-) delete mode 100644 addons/datatable_godot/common/common.gd create mode 100644 addons/datatable_godot/common/schema.gd create mode 100644 addons/datatable_godot/common/signals.gd create mode 100644 addons/datatable_godot/ui/nodes/schema/aabb_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/array_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/basis_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/bool_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/color_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/float_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/int_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/plane_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/proj_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/quat_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/rect_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/ress_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/string_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/t_2_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/t_3_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/vector_2_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/vector_3_schema.tscn create mode 100644 addons/datatable_godot/ui/nodes/schema/vector_4_schema.tscn diff --git a/addons/datatable_godot/common/backup.gd b/addons/datatable_godot/common/backup.gd index 769715d..0bc229c 100644 --- a/addons/datatable_godot/common/backup.gd +++ b/addons/datatable_godot/common/backup.gd @@ -4,7 +4,12 @@ class_name _dt_backup ## Class that manage all the backup system -static var _INSTANCE: _dt_backup = null + +static var _INSTANCE: _dt_backup + +static func delete(): + _INSTANCE = null + var _folder: String var _max: int diff --git a/addons/datatable_godot/common/common.gd b/addons/datatable_godot/common/common.gd deleted file mode 100644 index 12749df..0000000 --- a/addons/datatable_godot/common/common.gd +++ /dev/null @@ -1,114 +0,0 @@ -@tool -extends Node - -## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## -## Some explanation: Why I created a key system for some signal? ## -## Simply due to the fact that I use massively the signal system of godot ## -## and some signal need to be handled only by some specific script at some ## -## specific time, so to make this I make this key system. ## -## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## - -@onready var table_types: Dictionary = {} -@onready var table_datas: Dictionary = {} - -## timer -@onready var backup_timer: Timer = %backup_timer - -const backup_folder: String = "res://datatable_backup/" - -var collection_path: String = "": - set(new_value): - collection_path = new_value - if !collection_path.is_empty(): - - # Working on the backup timer to restart it, reset the signal, and set it again - backup_timer.stop() - backup_timer.set_meta('index_backup', 1) - if backup_timer.timeout.get_connections().size() != 0: - backup_timer.timeout.disconnect(_dt_backup.get_instance().make) - backup_timer.timeout.connect(_dt_backup.get_instance().make.bind(new_value)) - backup_timer.start() - - # doing a pre-backup for security reason - _dt_backup.get_instance().make(new_value) - -@onready var script_keys: Array = [] - -const TYPE_STRING = 0 -const TYPE_INT = 1 -const TYPE_FLOAT = 2 -const TYPE_COLOR = 3 -const TYPE_VECTOR2 = 4 -const TYPE_VECTOR3 = 5 -const TYPE_VECTOR4 = 6 -const TYPE_BOOL = 7 -const TYPE_RESS = 8 # Ressource -const TYPE_QUAT = 9 # Quaternion -const TYPE_RECT = 10 -const TYPE_PLANE = 11 -const TYPE_T2 = 12 # Transform2D -const TYPE_T3 = 13 # Transform3D -const TYPE_AABB = 14 -const TYPE_BASIS = 15 -const TYPE_PROJ = 16 -const TYPE_MAX = 17 - -var plugin_version = "1.1.0" - -signal toggle_plugin_on -signal toggle_plugin_off - -signal toggle_main_ask -signal toggle_main_response - -signal toggle_newTable_ask -signal toggle_newTable_response -signal toggle_manageTable_ask -signal toggle_manageTable_response - -signal toggle_newType_ask -signal toggle_newType_response -signal toggle_manageType_ask -signal toggle_manageType_response - -signal toggle_help_ask -signal toggle_help_response - -signal add_type_ask(type: Dictionary) -signal add_type_response(success: bool) -signal get_type_ask(key: int) -signal get_type_response(data: Dictionary, key: int) - -signal script_key_ask(script_name: String) -signal script_key_response(key: int, script_name: String) - -signal get_data_ask(key: int) -signal get_data_response(data: Dictionary, key: int) - -signal popup_alert_ask(title: String, description: String) - -signal ask_reload_data - -signal presave_data - -func _ready(): - script_key_ask.connect(_signal_generate_key) - - _dt_resource.get_instance().load_file() - -##################### -## Signal Callable ## -##################### - -func _signal_generate_key(script_name: String): - - var script_key: int = randi() - - if script_keys.has(script_key): - script_key = randi() - while script_keys.has(script_key): - script_key = randi() - - script_keys.push_back(script_key) - - script_key_response.emit(script_key, script_name) diff --git a/addons/datatable_godot/common/commonV2.gd b/addons/datatable_godot/common/commonV2.gd index 896663b..2067a0f 100644 --- a/addons/datatable_godot/common/commonV2.gd +++ b/addons/datatable_godot/common/commonV2.gd @@ -82,3 +82,4 @@ func ERROR(message: String): func DEBUG(message: String): if _dt_plugin.get_instance().get_dev_debug() == "true": print_rich(str("[DataTable - Debug] ", message)) + diff --git a/addons/datatable_godot/common/interface.gd b/addons/datatable_godot/common/interface.gd index 2fd3e04..8495254 100644 --- a/addons/datatable_godot/common/interface.gd +++ b/addons/datatable_godot/common/interface.gd @@ -16,7 +16,12 @@ const cant_check_tip: String = "The plugin couldn't check if an update was avail var _main: Control -static var _INSTANCE: _dt_interface = null + +static var _INSTANCE: _dt_interface + +static func delete(): + _INSTANCE = null + static func get_instance() -> _dt_interface: diff --git a/addons/datatable_godot/common/plugin.gd b/addons/datatable_godot/common/plugin.gd index a1e5c18..2ff1bba 100644 --- a/addons/datatable_godot/common/plugin.gd +++ b/addons/datatable_godot/common/plugin.gd @@ -9,11 +9,15 @@ const LOCAL_CONFIG_PATH: String = "res://addons/datatable_godot/plugin.cfg" var _config: ConfigFile -static var _INSTANCE: _dt_plugin = null signal plugin_off signal plugin_on +static var _INSTANCE: _dt_plugin + +static func delete(): + _INSTANCE = null + static func get_instance() -> _dt_plugin: if !_INSTANCE: diff --git a/addons/datatable_godot/common/resource.gd b/addons/datatable_godot/common/resource.gd index a7bef97..ae7019e 100644 --- a/addons/datatable_godot/common/resource.gd +++ b/addons/datatable_godot/common/resource.gd @@ -11,8 +11,6 @@ signal res_loaded(path: String) signal res_created(path: String) signal res_reload -static var _INSTANCE - var table_datas: Dictionary var table_types: Dictionary @@ -23,6 +21,12 @@ var _collection_name: String var _ext: String var _version: String +static var _INSTANCE: _dt_resource + +static func delete(): + _INSTANCE = null + + static func get_instance() -> _dt_resource: if !_INSTANCE || _dt_plugin.get_instance().get_dev_reset_instance() == "true": diff --git a/addons/datatable_godot/common/schema.gd b/addons/datatable_godot/common/schema.gd new file mode 100644 index 0000000..94156eb --- /dev/null +++ b/addons/datatable_godot/common/schema.gd @@ -0,0 +1,89 @@ +@tool +extends _dt_common +class_name _dt_schema + +var string_schema: Node +var int_schema: Node +var float_schema: Node +var color_schema: Node +var vector2_schema: Node +var vector3_schema: Node +var vector4_schema: Node +var t2_schema: Node +var t3_schema: Node +var array_schema: Node +var bool_schema: Node +var ress_schema: Node +var quat_schema: Node +var plane_schema: Node +var rect_schema: Node +var aabb_schema: Node +var basis_schema: Node +var proj_schema: Node + +var custom_schema: Dictionary + +static var _INSTANCE: _dt_schema + +static func delete(): + _INSTANCE = null + +static func get_instance() -> _dt_schema: + + if !_INSTANCE: + _INSTANCE = _dt_schema.new() + _INSTANCE.load_var() + + return _INSTANCE + +func load_var(): + string_schema = preload("res://addons/datatable_godot/ui/nodes/schema/string_schema.tscn").instantiate() + int_schema = preload("res://addons/datatable_godot/ui/nodes/schema/int_schema.tscn").instantiate() + float_schema = preload("res://addons/datatable_godot/ui/nodes/schema/float_schema.tscn").instantiate() + color_schema = preload("res://addons/datatable_godot/ui/nodes/schema/color_schema.tscn").instantiate() + vector2_schema = preload("res://addons/datatable_godot/ui/nodes/schema/vector_2_schema.tscn").instantiate() + vector3_schema = preload("res://addons/datatable_godot/ui/nodes/schema/vector_3_schema.tscn").instantiate() + vector4_schema = preload("res://addons/datatable_godot/ui/nodes/schema/vector_4_schema.tscn").instantiate() + t2_schema = preload("res://addons/datatable_godot/ui/nodes/schema/t_2_schema.tscn").instantiate() + t3_schema = preload("res://addons/datatable_godot/ui/nodes/schema/t_3_schema.tscn").instantiate() + array_schema = preload("res://addons/datatable_godot/ui/nodes/schema/array_schema.tscn").instantiate() + bool_schema = preload("res://addons/datatable_godot/ui/nodes/schema/bool_schema.tscn").instantiate() + ress_schema = preload("res://addons/datatable_godot/ui/nodes/schema/ress_schema.tscn").instantiate() + quat_schema = preload("res://addons/datatable_godot/ui/nodes/schema/quat_schema.tscn").instantiate() + plane_schema = preload("res://addons/datatable_godot/ui/nodes/schema/plane_schema.tscn").instantiate() + rect_schema = preload("res://addons/datatable_godot/ui/nodes/schema/rect_schema.tscn").instantiate() + aabb_schema = preload("res://addons/datatable_godot/ui/nodes/schema/aabb_schema.tscn").instantiate() + basis_schema = preload("res://addons/datatable_godot/ui/nodes/schema/basis_schema.tscn").instantiate() + proj_schema = preload("res://addons/datatable_godot/ui/nodes/schema/proj_schema.tscn").instantiate() + +func each() -> Array: + return [ + string_schema, + int_schema, + float_schema, + color_schema, + vector2_schema, + vector3_schema, + vector4_schema, + t2_schema, + t3_schema, + array_schema, + bool_schema, + ress_schema, + quat_schema, + plane_schema, + rect_schema, + aabb_schema, + basis_schema, + proj_schema + ] + +func add_custom(schema_name: String, schema_path: String) -> bool: + + if custom_schema.has(schema_name): + ERROR("Can't add a schema with the same name as another one") + return false + + custom_schema[schema_name] = load(schema_path).instantiate() + + return true diff --git a/addons/datatable_godot/common/signals.gd b/addons/datatable_godot/common/signals.gd new file mode 100644 index 0000000..1ff3894 --- /dev/null +++ b/addons/datatable_godot/common/signals.gd @@ -0,0 +1,38 @@ +@tool +extends Node + +signal toggle_plugin_on +signal toggle_plugin_off + +signal toggle_main_ask +signal toggle_main_response + +signal toggle_newTable_ask +signal toggle_newTable_response +signal toggle_manageTable_ask +signal toggle_manageTable_response + +signal toggle_newType_ask +signal toggle_newType_response +signal toggle_manageType_ask +signal toggle_manageType_response + +signal toggle_help_ask +signal toggle_help_response + +signal add_type_ask(type: Dictionary) +signal add_type_response(success: bool) +signal get_type_ask(key: int) +signal get_type_response(data: Dictionary, key: int) + +signal script_key_ask(script_name: String) +signal script_key_response(key: int, script_name: String) + +signal get_data_ask(key: int) +signal get_data_response(data: Dictionary, key: int) + +signal popup_alert_ask(title: String, description: String) + +signal ask_reload_data + +signal presave_data diff --git a/addons/datatable_godot/common/updater.gd b/addons/datatable_godot/common/updater.gd index e858c04..5ecdf05 100644 --- a/addons/datatable_godot/common/updater.gd +++ b/addons/datatable_godot/common/updater.gd @@ -37,7 +37,11 @@ signal checking_update ## The plugin is checking for an update, need to wait signal failed ## Failed updating while doing so signal updated ## Plugin updated, need a restart -static var _INSTANCE: _dt_updater = null + +static var _INSTANCE: _dt_updater + +static func delete(): + _INSTANCE = null static func get_instance() -> _dt_updater: @@ -100,8 +104,10 @@ func _update_error(): _update_statut(cant_check_text, cant_check_tip) func _update_statut(txt: String, tip: String): - _version_statut.set_text(txt) - _version_statut.set_tooltip_text(tip) + + if _version_statut: + _version_statut.set_text(txt) + _version_statut.set_tooltip_text(tip) # Hook diff --git a/addons/datatable_godot/datatable.gd b/addons/datatable_godot/datatable.gd index 1b7add0..a1ee80f 100644 --- a/addons/datatable_godot/datatable.gd +++ b/addons/datatable_godot/datatable.gd @@ -36,6 +36,12 @@ func _exit_tree(): remove_autoload_singleton("datatable") print("[DataTable] => Plugin is disabled!") + + _dt_plugin.get_instance().delete() + _dt_interface.get_instance().delete() + _dt_resource.get_instance().delete() + _dt_backup.get_instance().delete() + _dt_updater.get_instance().delete() pass func _has_main_screen(): diff --git a/addons/datatable_godot/datatable.tscn b/addons/datatable_godot/datatable.tscn index 757f43f..b9ce867 100644 --- a/addons/datatable_godot/datatable.tscn +++ b/addons/datatable_godot/datatable.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=88 format=3 uid="uid://doa4a6glaf5xx"] +[gd_scene load_steps=68 format=3 uid="uid://doa4a6glaf5xx"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/datatable_ui.gd" id="1_u3r8m"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/main/b_newTable.gd" id="2_4grge"] +[ext_resource type="Script" path="res://addons/datatable_godot/common/signals.gd" id="2_vuf0n"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/main/b_manageTableType.gd" id="4_igs8k"] [ext_resource type="Texture2D" uid="uid://dwb1kfrq35nuy" path="res://addons/datatable_godot/icons/Load.png" id="5_3t6xb"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/main/mb_manageCollection.gd" id="5_jk0la"] @@ -13,7 +14,6 @@ [ext_resource type="Script" path="res://addons/datatable_godot/ui/inputs/new_table/in_tableTitle.gd" id="9_nq8rd"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/inputs/new_table/OB_tableType.gd" id="9_sfsm6"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/inputs/new_table/in_itemTableName.gd" id="11_p3d64"] -[ext_resource type="Script" path="res://addons/datatable_godot/common/common.gd" id="13_3q25f"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/inputs/new_table/b_addItemTable.gd" id="13_yo7v8"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/schema_table.gd" id="14_1gj4k"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/newTable/txt_table_name.gd" id="14_igr0e"] @@ -21,45 +21,25 @@ [ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/tableItemSchema.gd" id="15_1mk7i"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/newTable/in_tableItemName.gd" id="16_ekyrp"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/newTable/b_deleteTable.gd" id="16_rqnvk"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/string_schema.gd" id="16_s2dxu"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/int_schema.gd" id="17_rbj10"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/float_schema.gd" id="18_0j6q2"] [ext_resource type="Texture2D" uid="uid://bh4utwbo8c1th" path="res://addons/datatable_godot/icons/String.svg" id="18_g50xn"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/color_schema.gd" id="19_7fgjh"] [ext_resource type="Texture2D" uid="uid://bpl61j5iclrvd" path="res://addons/datatable_godot/icons/int.svg" id="19_eb0qd"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/inputs/new_table/param_block.gd" id="19_l23ym"] [ext_resource type="Texture2D" uid="uid://hmlxro3byyk4" path="res://addons/datatable_godot/icons/float.svg" id="20_1xhyb"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/vector2_schema.gd" id="20_n8d7r"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/vector3_schema.gd" id="21_4n3yv"] [ext_resource type="Texture2D" uid="uid://cw3pqcha6hash" path="res://addons/datatable_godot/icons/Color.svg" id="21_jn4dx"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/vector4_schema.gd" id="22_obp24"] [ext_resource type="Texture2D" uid="uid://cep60026oa02c" path="res://addons/datatable_godot/icons/Vector2.svg" id="23_el2ma"] [ext_resource type="Texture2D" uid="uid://kpudoq60xvhi" path="res://addons/datatable_godot/icons/Close.svg" id="24_5ei7p"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/VBC_itemTableDataList.gd" id="24_5fjef"] [ext_resource type="Texture2D" uid="uid://cjj2fecod00cv" path="res://addons/datatable_godot/icons/Vector3.svg" id="24_r7gkh"] [ext_resource type="Texture2D" uid="uid://dpah1oqjdvr7u" path="res://addons/datatable_godot/icons/Vector4.svg" id="25_xicgs"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/bool_schema.gd" id="26_4dcoq"] [ext_resource type="Texture2D" uid="uid://d4af0scr4f3ea" path="res://addons/datatable_godot/icons/Add.svg" id="26_aoqmn"] [ext_resource type="Texture2D" uid="uid://blh822uvyrgg1" path="res://addons/datatable_godot/icons/Remove.svg" id="27_p6oml"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/t2_schema.gd" id="31_01e71"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/array_schema.gd" id="32_7b5r7"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/box/arr_item_box.gd" id="32_olfsa"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/t3_schema.gd" id="32_qc5jy"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/ress_schema.gd" id="36_wke7h"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/quaternionSchema.gd" id="38_47e3s"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/manageType/b_closeWindow.gd" id="39_7ex4j"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/bg/bg_manageType.gd" id="39_mg6or"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/plane_schema.gd" id="39_qbw7h"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/rect_schema.gd" id="40_i7lsn"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/newTable/b_resource_import.gd" id="40_ygtq0"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/manageType/type_title.gd" id="41_acyeb"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/manageType/b_addType.gd" id="42_ppf6e"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/inputs/manage_type/in_newTypeName.gd" id="42_slt2x"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/aabb_schema.gd" id="43_1qtkx"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/manageType/b_deleteType.gd" id="43_cggt8"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/basis_schema.gd" id="44_s0byb"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/inputs/manage_type/in_new_param_name.gd" id="45_3s3h2"] -[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/proj_schema.gd" id="45_wyglv"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/manageType/b_add_param.gd" id="46_uwt2p"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/manageType/b_delete_param.gd" id="47_8n2ia"] [ext_resource type="Texture2D" uid="uid://cw3yfy2wnj7sr" path="res://addons/datatable_godot/icons/single_value.png" id="47_hdmps"] @@ -230,7 +210,7 @@ wait_time = 600.0 [node name="signals" type="Node" parent="."] unique_name_in_owner = true -script = ExtResource("13_3q25f") +script = ExtResource("2_vuf0n") [node name="HTTPRequest" type="HTTPRequest" parent="."] @@ -366,12 +346,12 @@ alignment = 2 [node name="version_status" type="RichTextLabel" parent="MarginContainer/bg_main/Panel/VBoxContainer/HBoxContainer/HBoxContainer3"] layout_mode = 2 -tooltip_text = "The plugin is check for an update..." +tooltip_text = "You good to go, you got the last version available!" mouse_default_cursor_shape = 2 theme_override_styles/focus = SubResource("StyleBoxFlat_w7rfg") theme_override_styles/normal = SubResource("StyleBoxFlat_w7rfg") bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Reload.png[/img] Checking for update... " +text = "[img]res://addons/datatable_godot/icons/StatusSuccess.png[/img] [color=lightgreen]Version up-to-date! " fit_content = true autowrap_mode = 0 script = ExtResource("7_76wdw") @@ -680,1925 +660,6 @@ size_flags_horizontal = 3 size_flags_vertical = 3 script = ExtResource("24_5fjef") -[node name="string_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("16_s2dxu") - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/string_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "String type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/String.svg[/img] String Name" -fit_content = true - -[node name="LineEdit" type="LineEdit" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/string_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="int_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("17_rbj10") - -[node name="ParamName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/int_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Int type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Int.svg[/img] Int Name" -fit_content = true - -[node name="ParamValue" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/int_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -rounded = true -allow_greater = true -allow_lesser = true -custom_arrow_step = 1.0 - -[node name="float_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("18_0j6q2") - -[node name="ParamName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/float_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Float type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Float.svg[/img] Float Name" -fit_content = true - -[node name="ParamValue" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/float_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -custom_arrow_step = 0.05 - -[node name="color_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("19_7fgjh") - -[node name="ParamName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/color_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Color type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Color.svg[/img] Color Name" -fit_content = true - -[node name="ParamValue" type="ColorPickerButton" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/color_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="vector2_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("20_n8d7r") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector2_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Vector2 type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Vector2.svg[/img] Vec2 Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector2_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector2_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector2_schema/paramValue/x_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]X: [/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector2_schema/paramValue/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector2_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector2_schema/paramValue/y_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]Y: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector2_schema/paramValue/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="t2_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("31_01e71") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Vector2 type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Transform2D.png[/img] Transform2D Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="v0" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v0/x_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]xX: [/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v0/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v0/y_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]xY: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v0/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="o_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v0/o_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]xO: [/color]" -fit_content = true - -[node name="o_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v0/o_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="v1" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v1/x_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]yX: [/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v1/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v1/y_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]yY: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v1/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="o_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v1/o_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]yO: [/color]" -fit_content = true - -[node name="o_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t2_schema/paramValue/v1/o_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="t3_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("32_qc5jy") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema"] -custom_minimum_size = Vector2(150, 0) -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Vector2 type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Transform3D.png[/img] Transform3D Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="v0" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0/x_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]xX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0/y_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]xY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0/z_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]xZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="o_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0/o_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]xO: [/color]" - -[node name="o_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v0/o_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="v1" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1/x_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]yX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1/y_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]yY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1/z_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]yZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="o_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1/o_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]yO:[/color]" -fit_content = true - -[node name="o_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v1/o_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="v2" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2/x_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]zX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2/y_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]zY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2/z_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]zZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="o_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2/o_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]zO:[/color]" -fit_content = true - -[node name="o_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/t3_schema/paramValue/v2/o_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="vector3_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("21_4n3yv") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Vector3 type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Vector3.svg[/img] Vec3 Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema/paramValue/x_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]X: [/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema/paramValue/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema/paramValue/y_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]Y: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema/paramValue/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema/paramValue/z_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]Z: [/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector3_schema/paramValue/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="vector4_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("22_obp24") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Vector4 type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Vector4.svg[/img] Vec4 Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue/x_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]X: [/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue/y_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]Y: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue/z_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]Z: [/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="w_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue/w_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]W: [/color]" -fit_content = true - -[node name="w_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/vector4_schema/paramValue/w_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="array_schema" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -size_flags_horizontal = 3 -script = ExtResource("32_7b5r7") -metadata/array = true - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema/HBoxContainer"] -custom_minimum_size = Vector2(163, 0) -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "test" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/array_value.png[/img]Array" -fit_content = true -scroll_active = false - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema/HBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="paramValue" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema/HBoxContainer/HBoxContainer"] -clip_contents = true -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="b_add_arr_item" type="Button" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema/HBoxContainer/HBoxContainer"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -theme_override_colors/font_color = Color(0, 0, 0, 0) -theme_override_colors/font_pressed_color = Color(0, 0, 0, 0) -theme_override_colors/font_hover_color = Color(0, 0, 0, 0) -theme_override_colors/font_focus_color = Color(0, 0, 0, 0) -theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 0) -theme_override_colors/font_disabled_color = Color(0, 0, 0, 0) -theme_override_colors/font_outline_color = Color(0, 0, 0, 0) -text = " X " -icon = ExtResource("26_aoqmn") -icon_alignment = 1 - -[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema"] -clip_contents = true -layout_mode = 2 -size_flags_vertical = 0 - -[node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema"] -layout_mode = 2 -size_flags_vertical = 3 - -[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema/HBoxContainer2"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 0 -size_flags_stretch_ratio = 0.4 - -[node name="arr_items_list" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema/HBoxContainer2"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 -script = ExtResource("32_olfsa") - -[node name="arr_item_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema/HBoxContainer2/arr_items_list"] -visible = false -layout_mode = 2 -size_flags_vertical = 3 - -[node name="b_delete_arr_item" type="Button" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/array_schema/HBoxContainer2/arr_items_list/arr_item_schema"] -layout_mode = 2 -theme_override_colors/font_color = Color(0, 0, 0, 0) -theme_override_colors/font_pressed_color = Color(0, 0, 0, 0) -theme_override_colors/font_hover_color = Color(0, 0, 0, 0) -theme_override_colors/font_focus_color = Color(0, 0, 0, 0) -theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 0) -theme_override_colors/font_disabled_color = Color(0, 0, 0, 0) -theme_override_colors/font_outline_color = Color(0, 0, 0, 0) -text = " X " -icon = ExtResource("27_p6oml") -icon_alignment = 1 - -[node name="bool_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("26_4dcoq") - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/bool_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Bool type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/bool.png[/img] String Name" -fit_content = true - -[node name="paramValue" type="CheckBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/bool_schema"] -layout_mode = 2 - -[node name="ress_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("36_wke7h") - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/ress_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Ressource type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Ressource.png[/img] test" -fit_content = true - -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/ress_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/ress_schema/VBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="Label" type="Label" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/ress_schema/VBoxContainer/HBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -mouse_filter = 0 -clip_text = true -text_overrun_behavior = 3 - -[node name="b_resource_import" type="Button" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/ress_schema/VBoxContainer/HBoxContainer"] -layout_mode = 2 -text = "Import..." -script = ExtResource("40_ygtq0") - -[node name="FileDialog" type="FileDialog" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/ress_schema/VBoxContainer/HBoxContainer/b_resource_import"] -title = "Open a File" -initial_position = 2 -size = Vector2i(500, 400) -ok_button_text = "Ouvrir" -file_mode = 0 - -[node name="quat_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("38_47e3s") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Quaternion.png[/img] Quaternion Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue/x_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]X: [/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue/y_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]Y: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue/z_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]Z: [/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="d_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue/d_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]D: [/color]" -fit_content = true - -[node name="d_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/quat_schema/paramValue/d_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="plane_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("39_qbw7h") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Plane.png[/img] Plane Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue/x_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]X: [/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue/y_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]Y: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue/z_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]Z: [/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="d_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue"] -layout_mode = 2 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue/d_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]D: [/color]" -fit_content = true - -[node name="d_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/plane_schema/paramValue/d_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="rect_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("40_i7lsn") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Vector2 type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Rect2.png[/img] Rect Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer/x_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]X: [/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer/y_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]Y: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue"] -layout_mode = 2 - -[node name="w_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer2/w_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]W: [/color]" -fit_content = true - -[node name="w_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer2/w_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="h_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer2/h_box"] -custom_minimum_size = Vector2(30, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]H: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/rect_schema/paramValue/HBoxContainer2/h_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="aabb_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("43_1qtkx") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Vector2 type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/AABB.png[/img] AABB Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="v0" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v0/x_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]X: [/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v0/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v0/y_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]Y: [/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v0/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v0/z_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]Z: [/color]" -fit_content = true - -[node name="o_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v0/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="v1" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue"] -layout_mode = 2 - -[node name="w_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v1/w_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]W: [/color]" -fit_content = true - -[node name="w_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v1/w_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="h_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v1/h_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]H: [/color]" -fit_content = true - -[node name="h_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v1/h_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="d_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v1/d_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]D: [/color]" -fit_content = true - -[node name="d_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/aabb_schema/paramValue/v1/d_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="basis_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("44_s0byb") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Vector2 type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Basis.png[/img] Basis Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="v0" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v0/x_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]xX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v0/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v0/y_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]xY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v0/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v0/z_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]xZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v0/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="v1" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v1/x_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]yX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v1/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v1/y_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]yY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v1/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v1/z_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]yZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v1/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="v2" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v2/x_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]zX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v2/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v2/y_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]zY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v2/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v2/z_box"] -custom_minimum_size = Vector2(35, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]zZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/basis_schema/paramValue/v2/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="proj_schema" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList"] -visible = false -layout_mode = 2 -script = ExtResource("45_wyglv") - -[node name="paramName" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema"] -custom_minimum_size = Vector2(150, 0) -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.4 -tooltip_text = "Vector2 type" -bbcode_enabled = true -text = "[img]res://addons/datatable_godot/icons/Transform3D.png[/img] Transform3D Name" -fit_content = true - -[node name="paramValue" type="VBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="v0" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0/x_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]xX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0/y_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]xY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0/z_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]xZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="w_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0/w_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]xW: [/color]" -fit_content = true - -[node name="w_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v0/w_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="v1" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1/x_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]yX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1/y_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]yY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1/z_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]yZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="w_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1/w_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]yW:[/color]" -fit_content = true - -[node name="w_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v1/w_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="v2" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2/x_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]zX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2/y_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]zY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2/z_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]zZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="w_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2/w_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]zW:[/color]" -fit_content = true - -[node name="w_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v2/w_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="v3" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue"] -layout_mode = 2 - -[node name="x_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3/x_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=fab293]wX:[/color]" -fit_content = true - -[node name="x_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3/x_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="y_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3/y_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93fab2]wY:[/color]" -fit_content = true - -[node name="y_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3/y_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="z_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3/z_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=b293fa]wZ:[/color]" -fit_content = true - -[node name="z_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3/z_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - -[node name="w_box" type="HBoxContainer" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3/w_box"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_stretch_ratio = 0.2 -bbcode_enabled = true -text = "[color=93dbfa]wW:[/color]" -fit_content = true - -[node name="w_value" type="SpinBox" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2/MarginContainer/ScrollContainer/VBC_itemTableDataList/proj_schema/paramValue/v3/w_box"] -layout_mode = 2 -size_flags_horizontal = 3 -step = 0.0 -allow_greater = true -allow_lesser = true -suffix = "px" -custom_arrow_step = 0.05 - [node name="panel_item_blocker" type="Panel" parent="MarginContainer/bg_newTable/VBoxContainer/HBoxContainer/HSplitContainer/Panel2"] visible = false layout_mode = 1 @@ -3012,7 +1073,7 @@ alignment = 1 [node name="Label" type="Label" parent="MarginContainer/bg_autoupdate/MarginContainer/MarginContainer/VBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer2"] layout_mode = 2 -text = "The version 1.2.0 is available for download!" +text = "The version 1.3.0 is available for download!" [node name="error_txt" type="RichTextLabel" parent="MarginContainer/bg_autoupdate/MarginContainer/MarginContainer/VBoxContainer/Panel/MarginContainer/VBoxContainer"] visible = false diff --git a/addons/datatable_godot/ui/datatable_ui.gd b/addons/datatable_godot/ui/datatable_ui.gd index cc38692..f89016c 100644 --- a/addons/datatable_godot/ui/datatable_ui.gd +++ b/addons/datatable_godot/ui/datatable_ui.gd @@ -17,7 +17,6 @@ extends Control @onready var version_statut: RichTextLabel = $MarginContainer/bg_main/Panel/VBoxContainer/HBoxContainer/HBoxContainer3/version_status - ############### ## Functions ## ############### @@ -26,6 +25,7 @@ func _ready(): ## We check if a new update is available or not _dt_updater.get_instance().check_update(version_statut) + _dt_updater.get_instance().update_available.connect(_show_update_window) ## By security we reset the visible state of the main window to true toggleMain() @@ -68,5 +68,6 @@ func check_for_datatable_change(): _dt_resource.get_instance().res_reload.emit() -func _show_update_window(): +func _show_update_window(next_v: String): + bg_autoupdate.next_version = next_v bg_autoupdate.visible = true diff --git a/addons/datatable_godot/ui/nodes/schema/aabb_schema.tscn b/addons/datatable_godot/ui/nodes/schema/aabb_schema.tscn new file mode 100644 index 0000000..1507217 --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/aabb_schema.tscn @@ -0,0 +1,152 @@ +[gd_scene load_steps=2 format=3 uid="uid://q3o4215f33m5"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/aabb_schema.gd" id="1_8bxvg"] + +[node name="aabb_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_8bxvg") + +[node name="paramName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Vector2 type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/AABB.png[/img] AABB Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="v0" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/x_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]X: [/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v0/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/y_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]Y: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v0/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/z_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]Z: [/color]" +fit_content = true + +[node name="o_value" type="SpinBox" parent="paramValue/v0/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="v1" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="w_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/w_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]W: [/color]" +fit_content = true + +[node name="w_value" type="SpinBox" parent="paramValue/v1/w_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="h_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/h_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]H: [/color]" +fit_content = true + +[node name="h_value" type="SpinBox" parent="paramValue/v1/h_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="d_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/d_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]D: [/color]" +fit_content = true + +[node name="d_value" type="SpinBox" parent="paramValue/v1/d_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/array_schema.tscn b/addons/datatable_godot/ui/nodes/schema/array_schema.tscn new file mode 100644 index 0000000..e0cffb8 --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/array_schema.tscn @@ -0,0 +1,88 @@ +[gd_scene load_steps=5 format=3 uid="uid://6kgq5h8y7gcu"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/array_schema.gd" id="1_hlcei"] +[ext_resource type="Texture2D" uid="uid://d4af0scr4f3ea" path="res://addons/datatable_godot/icons/Add.svg" id="2_43556"] +[ext_resource type="Script" path="res://addons/datatable_godot/ui/box/arr_item_box.gd" id="3_gepj5"] +[ext_resource type="Texture2D" uid="uid://blh822uvyrgg1" path="res://addons/datatable_godot/icons/Remove.svg" id="4_gqklv"] + +[node name="array_schema" type="VBoxContainer"] +visible = false +size_flags_horizontal = 3 +script = ExtResource("1_hlcei") +metadata/array = true + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="HBoxContainer"] +custom_minimum_size = Vector2(163, 0) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "test" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/array_value.png[/img]Array" +fit_content = true +scroll_active = false + +[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="paramValue" type="HBoxContainer" parent="HBoxContainer/HBoxContainer"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="b_add_arr_item" type="Button" parent="HBoxContainer/HBoxContainer"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +theme_override_colors/font_color = Color(0, 0, 0, 0) +theme_override_colors/font_pressed_color = Color(0, 0, 0, 0) +theme_override_colors/font_hover_color = Color(0, 0, 0, 0) +theme_override_colors/font_focus_color = Color(0, 0, 0, 0) +theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 0) +theme_override_colors/font_disabled_color = Color(0, 0, 0, 0) +theme_override_colors/font_outline_color = Color(0, 0, 0, 0) +text = " X " +icon = ExtResource("2_43556") +icon_alignment = 1 + +[node name="MarginContainer" type="MarginContainer" parent="."] +clip_contents = true +layout_mode = 2 +size_flags_vertical = 0 + +[node name="HBoxContainer2" type="HBoxContainer" parent="."] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +size_flags_stretch_ratio = 0.4 + +[node name="arr_items_list" type="VBoxContainer" parent="HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("3_gepj5") + +[node name="arr_item_schema" type="HBoxContainer" parent="HBoxContainer2/arr_items_list"] +visible = false +layout_mode = 2 +size_flags_vertical = 3 + +[node name="b_delete_arr_item" type="Button" parent="HBoxContainer2/arr_items_list/arr_item_schema"] +layout_mode = 2 +theme_override_colors/font_color = Color(0, 0, 0, 0) +theme_override_colors/font_pressed_color = Color(0, 0, 0, 0) +theme_override_colors/font_hover_color = Color(0, 0, 0, 0) +theme_override_colors/font_focus_color = Color(0, 0, 0, 0) +theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 0) +theme_override_colors/font_disabled_color = Color(0, 0, 0, 0) +theme_override_colors/font_outline_color = Color(0, 0, 0, 0) +text = " X " +icon = ExtResource("4_gqklv") +icon_alignment = 1 diff --git a/addons/datatable_godot/ui/nodes/schema/basis_schema.tscn b/addons/datatable_godot/ui/nodes/schema/basis_schema.tscn new file mode 100644 index 0000000..5226a82 --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/basis_schema.tscn @@ -0,0 +1,218 @@ +[gd_scene load_steps=2 format=3 uid="uid://b6fftqufvsp0q"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/basis_schema.gd" id="1_5jph4"] + +[node name="basis_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_5jph4") + +[node name="paramName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Vector2 type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Basis.png[/img] Basis Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="v0" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/x_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]xX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v0/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/y_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]xY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v0/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/z_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]xZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v0/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="v1" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/x_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]yX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v1/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/y_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]yY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v1/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/z_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]yZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v1/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="v2" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/x_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]zX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v2/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/y_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]zY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v2/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/z_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]zZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v2/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/bool_schema.tscn b/addons/datatable_godot/ui/nodes/schema/bool_schema.tscn new file mode 100644 index 0000000..64f2e6a --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/bool_schema.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=2 format=3 uid="uid://b77hnhhpu8av8"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/bool_schema.gd" id="1_0n7jv"] + +[node name="bool_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_0n7jv") + +[node name="RichTextLabel" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Bool type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/bool.png[/img] String Name" +fit_content = true + +[node name="paramValue" type="CheckBox" parent="."] +layout_mode = 2 diff --git a/addons/datatable_godot/ui/nodes/schema/color_schema.tscn b/addons/datatable_godot/ui/nodes/schema/color_schema.tscn new file mode 100644 index 0000000..52c5833 --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/color_schema.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=2 format=3 uid="uid://2ybv0wpdcdeb"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/color_schema.gd" id="1_mqcqk"] + +[node name="color_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_mqcqk") + +[node name="ParamName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Color type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Color.svg[/img] Color Name" +fit_content = true + +[node name="ParamValue" type="ColorPickerButton" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 diff --git a/addons/datatable_godot/ui/nodes/schema/float_schema.tscn b/addons/datatable_godot/ui/nodes/schema/float_schema.tscn new file mode 100644 index 0000000..1a6ab2b --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/float_schema.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=2 format=3 uid="uid://cs4r8tfwegfb3"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/float_schema.gd" id="1_xrp0f"] + +[node name="float_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_xrp0f") + +[node name="ParamName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Float type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Float.svg[/img] Float Name" +fit_content = true + +[node name="ParamValue" type="SpinBox" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/int_schema.tscn b/addons/datatable_godot/ui/nodes/schema/int_schema.tscn new file mode 100644 index 0000000..a30c3df --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/int_schema.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=2 format=3 uid="uid://bd5mhn3a5phr7"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/int_schema.gd" id="1_l4i83"] + +[node name="int_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_l4i83") + +[node name="ParamName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Int type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Int.svg[/img] Int Name" +fit_content = true + +[node name="ParamValue" type="SpinBox" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +rounded = true +allow_greater = true +allow_lesser = true +custom_arrow_step = 1.0 diff --git a/addons/datatable_godot/ui/nodes/schema/plane_schema.tscn b/addons/datatable_godot/ui/nodes/schema/plane_schema.tscn new file mode 100644 index 0000000..09f4526 --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/plane_schema.tscn @@ -0,0 +1,99 @@ +[gd_scene load_steps=2 format=3 uid="uid://dl8gaa43nw4av"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/plane_schema.gd" id="1_j3mir"] + +[node name="plane_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_j3mir") + +[node name="paramName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Plane.png[/img] Plane Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="x_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/x_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]X: [/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/y_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]Y: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/z_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]Z: [/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="d_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/d_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]D: [/color]" +fit_content = true + +[node name="d_value" type="SpinBox" parent="paramValue/d_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/proj_schema.tscn b/addons/datatable_godot/ui/nodes/schema/proj_schema.tscn new file mode 100644 index 0000000..13f1c0d --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/proj_schema.tscn @@ -0,0 +1,369 @@ +[gd_scene load_steps=2 format=3 uid="uid://07hkei7jlimi"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/proj_schema.gd" id="1_unwl8"] + +[node name="proj_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_unwl8") + +[node name="paramName" type="RichTextLabel" parent="."] +custom_minimum_size = Vector2(150, 0) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Vector2 type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Transform3D.png[/img] Transform3D Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="v0" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/x_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]xX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v0/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/y_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]xY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v0/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/z_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]xZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v0/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="w_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/w_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]xW: [/color]" +fit_content = true + +[node name="w_value" type="SpinBox" parent="paramValue/v0/w_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="v1" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/x_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]yX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v1/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/y_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]yY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v1/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/z_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]yZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v1/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="w_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/w_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]yW:[/color]" +fit_content = true + +[node name="w_value" type="SpinBox" parent="paramValue/v1/w_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="v2" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/x_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]zX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v2/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/y_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]zY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v2/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/z_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]zZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v2/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="w_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/w_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]zW:[/color]" +fit_content = true + +[node name="w_value" type="SpinBox" parent="paramValue/v2/w_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="v3" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v3"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v3/x_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]wX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v3/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v3"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v3/y_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]wY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v3/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v3"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v3/z_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]wZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v3/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="w_box" type="HBoxContainer" parent="paramValue/v3"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v3/w_box"] +custom_minimum_size = Vector2(40, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]wW:[/color]" +fit_content = true + +[node name="w_value" type="SpinBox" parent="paramValue/v3/w_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/quat_schema.tscn b/addons/datatable_godot/ui/nodes/schema/quat_schema.tscn new file mode 100644 index 0000000..705511f --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/quat_schema.tscn @@ -0,0 +1,99 @@ +[gd_scene load_steps=2 format=3 uid="uid://cxv2241ipje06"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/quaternionSchema.gd" id="1_vbljs"] + +[node name="quat_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_vbljs") + +[node name="paramName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Quaternion.png[/img] Quaternion Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="x_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/x_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]X: [/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/y_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]Y: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/z_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]Z: [/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="d_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/d_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]D: [/color]" +fit_content = true + +[node name="d_value" type="SpinBox" parent="paramValue/d_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/rect_schema.tscn b/addons/datatable_godot/ui/nodes/schema/rect_schema.tscn new file mode 100644 index 0000000..ff8f3bf --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/rect_schema.tscn @@ -0,0 +1,110 @@ +[gd_scene load_steps=2 format=3 uid="uid://coygjo4cwrm7p"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/rect_schema.gd" id="1_bjn0f"] + +[node name="rect_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_bjn0f") + +[node name="paramName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Vector2 type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Rect2.png[/img] Rect Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/HBoxContainer/x_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]X: [/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/HBoxContainer/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/HBoxContainer/y_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]Y: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/HBoxContainer/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="HBoxContainer2" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="w_box" type="HBoxContainer" parent="paramValue/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/HBoxContainer2/w_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]W: [/color]" +fit_content = true + +[node name="w_value" type="SpinBox" parent="paramValue/HBoxContainer2/w_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="h_box" type="HBoxContainer" parent="paramValue/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/HBoxContainer2/h_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]H: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/HBoxContainer2/h_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/ress_schema.tscn b/addons/datatable_godot/ui/nodes/schema/ress_schema.tscn new file mode 100644 index 0000000..7d6266e --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/ress_schema.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=3 format=3 uid="uid://b6xlum6l21b2x"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/ress_schema.gd" id="1_4nhhx"] +[ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/newTable/b_resource_import.gd" id="2_wose6"] + +[node name="ress_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_4nhhx") + +[node name="RichTextLabel" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Ressource type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Ressource.png[/img] test" +fit_content = true + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +mouse_filter = 0 +clip_text = true +text_overrun_behavior = 3 + +[node name="b_resource_import" type="Button" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "Import..." +script = ExtResource("2_wose6") + +[node name="FileDialog" type="FileDialog" parent="VBoxContainer/HBoxContainer/b_resource_import"] +title = "Open a File" +initial_position = 2 +size = Vector2i(500, 400) +ok_button_text = "Ouvrir" +file_mode = 0 diff --git a/addons/datatable_godot/ui/nodes/schema/string_schema.tscn b/addons/datatable_godot/ui/nodes/schema/string_schema.tscn new file mode 100644 index 0000000..2ac0fd7 --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/string_schema.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=2 format=3 uid="uid://c4ta5t13uakf"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/string_schema.gd" id="1_v5why"] + +[node name="string_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_v5why") + +[node name="RichTextLabel" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "String type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/String.svg[/img] String Name" +fit_content = true + +[node name="LineEdit" type="LineEdit" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 diff --git a/addons/datatable_godot/ui/nodes/schema/t_2_schema.tscn b/addons/datatable_godot/ui/nodes/schema/t_2_schema.tscn new file mode 100644 index 0000000..b7bf36c --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/t_2_schema.tscn @@ -0,0 +1,152 @@ +[gd_scene load_steps=2 format=3 uid="uid://b7mgujhfbq8p6"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/t2_schema.gd" id="1_fvpv1"] + +[node name="t2_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_fvpv1") + +[node name="paramName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Vector2 type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Transform2D.png[/img] Transform2D Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="v0" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/x_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]xX: [/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v0/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/y_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]xY: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v0/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="o_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/o_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]xO: [/color]" +fit_content = true + +[node name="o_value" type="SpinBox" parent="paramValue/v0/o_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="v1" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/x_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]yX: [/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v1/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/y_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]yY: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v1/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="o_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/o_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]yO: [/color]" +fit_content = true + +[node name="o_value" type="SpinBox" parent="paramValue/v1/o_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/t_3_schema.tscn b/addons/datatable_godot/ui/nodes/schema/t_3_schema.tscn new file mode 100644 index 0000000..8deb80e --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/t_3_schema.tscn @@ -0,0 +1,281 @@ +[gd_scene load_steps=2 format=3 uid="uid://b8j3b05skhe81"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/t3_schema.gd" id="1_lhq3r"] + +[node name="t3_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_lhq3r") + +[node name="paramName" type="RichTextLabel" parent="."] +custom_minimum_size = Vector2(150, 0) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Vector2 type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Transform3D.png[/img] Transform3D Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="v0" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/x_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]xX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v0/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/y_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]xY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v0/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/z_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]xZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v0/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="o_box" type="HBoxContainer" parent="paramValue/v0"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v0/o_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]xO: [/color]" + +[node name="o_value" type="SpinBox" parent="paramValue/v0/o_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="v1" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/x_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]yX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v1/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/y_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]yY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v1/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/z_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]yZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v1/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="o_box" type="HBoxContainer" parent="paramValue/v1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v1/o_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]yO:[/color]" +fit_content = true + +[node name="o_value" type="SpinBox" parent="paramValue/v1/o_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="v2" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="x_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/x_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]zX:[/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/v2/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/y_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]zY:[/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/v2/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/z_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]zZ:[/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/v2/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="o_box" type="HBoxContainer" parent="paramValue/v2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/v2/o_box"] +custom_minimum_size = Vector2(35, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]zO:[/color]" +fit_content = true + +[node name="o_value" type="SpinBox" parent="paramValue/v2/o_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/vector_2_schema.tscn b/addons/datatable_godot/ui/nodes/schema/vector_2_schema.tscn new file mode 100644 index 0000000..c6be167 --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/vector_2_schema.tscn @@ -0,0 +1,60 @@ +[gd_scene load_steps=2 format=3 uid="uid://5rktw2u0p57u"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/vector2_schema.gd" id="1_sy1le"] + +[node name="vector2_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_sy1le") + +[node name="paramName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Vector2 type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Vector2.svg[/img] Vec2 Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="x_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/x_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]X: [/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/y_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]Y: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/vector_3_schema.tscn b/addons/datatable_godot/ui/nodes/schema/vector_3_schema.tscn new file mode 100644 index 0000000..5a1d449 --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/vector_3_schema.tscn @@ -0,0 +1,80 @@ +[gd_scene load_steps=2 format=3 uid="uid://cgl178asspmcf"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/vector3_schema.gd" id="1_42sv7"] + +[node name="vector3_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_42sv7") + +[node name="paramName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Vector3 type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Vector3.svg[/img] Vec3 Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="x_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/x_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]X: [/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/y_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]Y: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/z_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]Z: [/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/nodes/schema/vector_4_schema.tscn b/addons/datatable_godot/ui/nodes/schema/vector_4_schema.tscn new file mode 100644 index 0000000..7925468 --- /dev/null +++ b/addons/datatable_godot/ui/nodes/schema/vector_4_schema.tscn @@ -0,0 +1,100 @@ +[gd_scene load_steps=2 format=3 uid="uid://c8puq7wjihn8l"] + +[ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/vector4_schema.gd" id="1_lp2ny"] + +[node name="vector4_schema" type="HBoxContainer"] +visible = false +script = ExtResource("1_lp2ny") + +[node name="paramName" type="RichTextLabel" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.4 +tooltip_text = "Vector4 type" +bbcode_enabled = true +text = "[img]res://addons/datatable_godot/icons/Vector4.svg[/img] Vec4 Name" +fit_content = true + +[node name="paramValue" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="x_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/x_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=fab293]X: [/color]" +fit_content = true + +[node name="x_value" type="SpinBox" parent="paramValue/x_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="y_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/y_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93fab2]Y: [/color]" +fit_content = true + +[node name="y_value" type="SpinBox" parent="paramValue/y_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="z_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/z_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=b293fa]Z: [/color]" +fit_content = true + +[node name="z_value" type="SpinBox" parent="paramValue/z_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 + +[node name="w_box" type="HBoxContainer" parent="paramValue"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="paramValue/w_box"] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +bbcode_enabled = true +text = "[color=93dbfa]W: [/color]" +fit_content = true + +[node name="w_value" type="SpinBox" parent="paramValue/w_box"] +layout_mode = 2 +size_flags_horizontal = 3 +step = 0.0 +allow_greater = true +allow_lesser = true +suffix = "px" +custom_arrow_step = 0.05 diff --git a/addons/datatable_godot/ui/schema/new_table/VBC_itemTableDataList.gd b/addons/datatable_godot/ui/schema/new_table/VBC_itemTableDataList.gd index 259932e..2ce546b 100644 --- a/addons/datatable_godot/ui/schema/new_table/VBC_itemTableDataList.gd +++ b/addons/datatable_godot/ui/schema/new_table/VBC_itemTableDataList.gd @@ -3,25 +3,7 @@ extends VBoxContainer @onready var common = %signals -@onready var string_schema = $string_schema -@onready var bool_schema = $bool_schema -@onready var int_schema = $int_schema -@onready var float_schema = $float_schema -@onready var color_schema = $color_schema -@onready var vector2_schema = $vector2_schema -@onready var vector3_schema = $vector3_schema -@onready var vector4_schema = $vector4_schema -@onready var ress_schema = $ress_schema -@onready var quat_schema = $quat_schema -@onready var rect_schema = $rect_schema -@onready var plane_schema = $plane_schema -@onready var t2_schema = $t2_schema -@onready var t3_schema = $t3_schema -@onready var aabb_schema = $aabb_schema -@onready var basis_schema = $basis_schema -@onready var proj_schema = $proj_schema -@onready var array_schema = $array_schema @onready var data: Dictionary = {} @@ -33,29 +15,6 @@ extends VBoxContainer signal save_data(data_to_save: Dictionary) -func get_each(): - var each = [ - string_schema, - int_schema, - float_schema, - color_schema, - vector2_schema, - vector3_schema, - vector4_schema, - array_schema, - bool_schema, - ress_schema, - quat_schema, - rect_schema, - plane_schema, - t2_schema, - t3_schema, - aabb_schema, - basis_schema, - proj_schema - ] - - return each func _clean(remove_form: bool): @@ -63,8 +22,7 @@ func _clean(remove_form: bool): if remove_form: for i: Node in get_children(): - if !get_each().has(i): - i.queue_free() + i.queue_free() structure = {} @@ -124,43 +82,43 @@ func reload_from_struct(struct: Dictionary): var schema match(type): - common.TYPE_STRING: - schema = string_schema - common.TYPE_INT: - schema = int_schema - common.TYPE_FLOAT: - schema = float_schema - common.TYPE_COLOR: - schema = color_schema - common.TYPE_VECTOR2: - schema = vector2_schema - common.TYPE_VECTOR3: - schema = vector3_schema - common.TYPE_VECTOR4: - schema = vector4_schema - common.TYPE_BOOL: - schema = bool_schema - common.TYPE_RESS: - schema = ress_schema - common.TYPE_QUAT: - schema = quat_schema - common.TYPE_RECT: - schema = rect_schema - common.TYPE_PLANE: - schema = plane_schema - common.TYPE_T2: - schema = t2_schema - common.TYPE_T3: - schema = t3_schema - common.TYPE_AABB: - schema = aabb_schema - common.TYPE_BASIS: - schema = basis_schema - common.TYPE_PROJ: - schema = proj_schema + _dt_common.TYPE_STRING: + schema = _dt_schema.get_instance().string_schema + _dt_common.TYPE_INT: + schema = _dt_schema.get_instance().int_schema + _dt_common.TYPE_FLOAT: + schema = _dt_schema.get_instance().float_schema + _dt_common.TYPE_COLOR: + schema = _dt_schema.get_instance().color_schema + _dt_common.TYPE_VECTOR2: + schema = _dt_schema.get_instance().vector2_schema + _dt_common.TYPE_VECTOR3: + schema = _dt_schema.get_instance().vector3_schema + _dt_common.TYPE_VECTOR4: + schema = _dt_schema.get_instance().vector4_schema + _dt_common.TYPE_BOOL: + schema = _dt_schema.get_instance().bool_schema + _dt_common.TYPE_RESS: + schema = _dt_schema.get_instance().ress_schema + _dt_common.TYPE_QUAT: + schema = _dt_schema.get_instance().quat_schema + _dt_common.TYPE_RECT: + schema = _dt_schema.get_instance().rect_schema + _dt_common.TYPE_PLANE: + schema = _dt_schema.get_instance().plane_schema + _dt_common.TYPE_T2: + schema = _dt_schema.get_instance().t2_schema + _dt_common.TYPE_T3: + schema = _dt_schema.get_instance().t3_schema + _dt_common.TYPE_AABB: + schema = _dt_schema.get_instance().aabb_schema + _dt_common.TYPE_BASIS: + schema = _dt_schema.get_instance().basis_schema + _dt_common.TYPE_PROJ: + schema = _dt_schema.get_instance().proj_schema if paramSize != 0: - var parent = array_schema.duplicate() + var parent = _dt_schema.get_instance().array_schema.duplicate() add_child(parent) add_child(separator) diff --git a/addons/datatable_godot/ui/schema/new_table/array_schema.gd b/addons/datatable_godot/ui/schema/new_table/array_schema.gd index 2e50554..b3012bc 100644 --- a/addons/datatable_godot/ui/schema/new_table/array_schema.gd +++ b/addons/datatable_godot/ui/schema/new_table/array_schema.gd @@ -22,57 +22,57 @@ func set_type(new_type: int): type = new_type match(type): - common.TYPE_STRING: + _dt_common.TYPE_STRING: icon = "res://addons/datatable_godot/icons/String.svg" - used_schema = $"../string_schema" - common.TYPE_INT: + used_schema = _dt_schema.get_instance().string_schema + _dt_common.TYPE_INT: icon = "res://addons/datatable_godot/icons/int.svg" - used_schema = $"../int_schema" - common.TYPE_FLOAT: + used_schema = _dt_schema.get_instance().int_schema + _dt_common.TYPE_FLOAT: icon = "res://addons/datatable_godot/icons/float.svg" - used_schema = $"../float_schema" - common.TYPE_COLOR: + used_schema = _dt_schema.get_instance().float_schema + _dt_common.TYPE_COLOR: icon = "res://addons/datatable_godot/icons/Color.svg" - used_schema = $"../color_schema" - common.TYPE_VECTOR2: + used_schema = _dt_schema.get_instance().color_schema + _dt_common.TYPE_VECTOR2: icon = "res://addons/datatable_godot/icons/Vector2.svg" - used_schema = $"../vector2_schema" - common.TYPE_VECTOR3: + used_schema = _dt_schema.get_instance().vector2_schema + _dt_common.TYPE_VECTOR3: icon = "res://addons/datatable_godot/icons/Vector3.svg" - used_schema = $"../vector3_schema" - common.TYPE_VECTOR4: + used_schema = _dt_schema.get_instance().vector3_schema + _dt_common.TYPE_VECTOR4: icon = "res://addons/datatable_godot/icons/Vector4.svg" - used_schema = $"../vector4_schema" - common.TYPE_BOOL: + used_schema = _dt_schema.get_instance().vector4_schema + _dt_common.TYPE_BOOL: icon = "res://addons/datatable_godot/icons/bool.png" - used_schema = $"../bool_schema" - common.TYPE_RESS: + used_schema = _dt_schema.get_instance().bool_schema + _dt_common.TYPE_RESS: icon = "res://addons/datatable_godot/icons/Ressource.png" - used_schema = $"../ress_schema" - common.TYPE_QUAT: + used_schema = _dt_schema.get_instance().ress_schema + _dt_common.TYPE_QUAT: icon = "res://addons/datatable_godot/icons/Quaternion.png" - used_schema = $"../quat_schema" - common.TYPE_RECT: + used_schema = _dt_schema.get_instance().quat_schema + _dt_common.TYPE_RECT: icon = "res://addons/datatable_godot/icons/Rect2.png" - used_schema = $"../rect_schema" - common.TYPE_PLANE: + used_schema = _dt_schema.get_instance().rect_schema + _dt_common.TYPE_PLANE: icon = "res://addons/datatable_godot/icons/Plane.png" - used_schema = $"../plane_schema" - common.TYPE_T2: + used_schema = _dt_schema.get_instance().plane_schema + _dt_common.TYPE_T2: icon = "res://addons/datatable_godot/icons/Transform2D.png" - used_schema = $"../t2_schema" - common.TYPE_T3: + used_schema = _dt_schema.get_instance().t2_schema + _dt_common.TYPE_T3: icon = "res://addons/datatable_godot/icons/Transform3D.png" - used_schema = $"../t3_schema" - common.TYPE_AABB: + used_schema = _dt_schema.get_instance().t3_schema + _dt_common.TYPE_AABB: icon = "res://addons/datatable_godot/icons/AABB.png" - used_schema = $"../aabb_schema" - common.TYPE_BASIS: + used_schema = _dt_schema.get_instance().aabb_schema + _dt_common.TYPE_BASIS: icon = "res://addons/datatable_godot/icons/Basis.png" - used_schema = $"../basis_schema" - common.TYPE_PROJ: + used_schema = _dt_schema.get_instance().basis_schema + _dt_common.TYPE_PROJ: icon = "res://addons/datatable_godot/icons/Projection.png" - used_schema = $"../proj_schema" + used_schema = _dt_schema.get_instance().proj_schema input = used_schema.duplicate() @@ -116,7 +116,7 @@ func _ready(): func add_pressed(): - if type == common.TYPE_STRING: + if type == _dt_common.TYPE_STRING: input.set_value(input.get_value().replace(";", "").replace(" ARR/ ", "")) item_value_node.add_item(input.get_value()) From 1af1f2fb177f6a8b41593e0e8d835a4a4f6586f6 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 19:35:28 +0200 Subject: [PATCH 08/12] edit text on main window --- addons/datatable_godot/datatable.tscn | 14 ++++++++++++-- .../ui/link handler project mainscreen.gd | 8 ++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 addons/datatable_godot/ui/link handler project mainscreen.gd diff --git a/addons/datatable_godot/datatable.tscn b/addons/datatable_godot/datatable.tscn index b9ce867..b5e5168 100644 --- a/addons/datatable_godot/datatable.tscn +++ b/addons/datatable_godot/datatable.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=68 format=3 uid="uid://doa4a6glaf5xx"] +[gd_scene load_steps=69 format=3 uid="uid://doa4a6glaf5xx"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/datatable_ui.gd" id="1_u3r8m"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/main/b_newTable.gd" id="2_4grge"] @@ -10,6 +10,7 @@ [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/main/txt_version_status.gd" id="7_76wdw"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/buttons/newTable/b_closeWindow.gd" id="8_4vur3"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/bg/bg_newTable.gd" id="8_n6v0j"] +[ext_resource type="Script" path="res://addons/datatable_godot/ui/link handler project mainscreen.gd" id="8_yg82y"] [ext_resource type="Shortcut" uid="uid://canf3frmvnvfd" path="res://addons/datatable_godot/escape_shortcut.tres" id="9_e2ynf"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/inputs/new_table/in_tableTitle.gd" id="9_nq8rd"] [ext_resource type="Script" path="res://addons/datatable_godot/ui/inputs/new_table/OB_tableType.gd" id="9_sfsm6"] @@ -309,8 +310,17 @@ text = " - First create a collection by clicking on the \"Manage Collections\" - Once this is created, create a structure with the \"Manage Structure\" - You now have structure, you need to create a table that will be using this structure, for this, click on the \"Manage Table\" -- Finaly, you need to start using this table in you code, for this, use the class named \"Collection\", for more information, check the documentation of it with the button in the script editor" +- Finaly, you need to start using this table in you code, for this, use the class named \"Collection\", for more information, check the documentation of it with the button in the script editor + +[font_size=24]New major version information[/font_size] +The plugin is officialy at the version 2.0, but some of you that use this plugin will say: +\"It's not that major, there is no big feature added appart from the back-up system, why say it's a 2.0\" + +This version is more of a \"code\" update than a \"feature\" update, but it's a major code update, I edited many script, and cleaned a lot of the code to prepare for bigger feature that will be added in the near future! + +Want to know what the \"feature\" are? Go check the [url=https://github.com/users/Ward727a/projects/2]project tab on GitHub[/url]!" fit_content = true +script = ExtResource("8_yg82y") [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/bg_main/Panel/VBoxContainer"] layout_mode = 2 diff --git a/addons/datatable_godot/ui/link handler project mainscreen.gd b/addons/datatable_godot/ui/link handler project mainscreen.gd new file mode 100644 index 0000000..ebeb8b0 --- /dev/null +++ b/addons/datatable_godot/ui/link handler project mainscreen.gd @@ -0,0 +1,8 @@ +@tool +extends RichTextLabel + +func _ready(): + meta_clicked.connect(_on_meta_clicked) + +func _on_meta_clicked(meta): + OS.shell_open(str(meta)) From cbc8f07cf5adea6391628551d0b669a9e5b30f3c Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 20:57:40 +0200 Subject: [PATCH 09/12] fix bug with backup --- addons/datatable_godot/common/backup.gd | 4 ++-- addons/datatable_godot/common/resource.gd | 6 +++++- .../datatable_godot/ui/buttons/main/mb_manageCollection.gd | 4 ++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/addons/datatable_godot/common/backup.gd b/addons/datatable_godot/common/backup.gd index 0bc229c..cfebad4 100644 --- a/addons/datatable_godot/common/backup.gd +++ b/addons/datatable_godot/common/backup.gd @@ -79,6 +79,7 @@ func link(timer: Timer, path: String): if timer.timeout.get_connections().has(make): timer.timeout.disconnect(make) timer.timeout.connect(make.bind(path)) + timer.start() func _get_file_name(path: String)->String: @@ -118,10 +119,9 @@ func _get_index(path: String)->int: if _most_recent_path != path: _index = 1 + _most_recent_path = path return 1 - _most_recent_path = path - return (_index) func _has_dir()->bool: diff --git a/addons/datatable_godot/common/resource.gd b/addons/datatable_godot/common/resource.gd index ae7019e..1245fc9 100644 --- a/addons/datatable_godot/common/resource.gd +++ b/addons/datatable_godot/common/resource.gd @@ -24,6 +24,7 @@ var _version: String static var _INSTANCE: _dt_resource static func delete(): + _INSTANCE.DEBUG("Delete resource instance") _INSTANCE = null @@ -32,6 +33,8 @@ static func get_instance() -> _dt_resource: if !_INSTANCE || _dt_plugin.get_instance().get_dev_reset_instance() == "true": _INSTANCE = _dt_resource.new() + _INSTANCE.DEBUG("Getting resource instance") + _INSTANCE.load_var() return _INSTANCE @@ -45,13 +48,14 @@ func load_var(): # public func set_name(path_or_name: String): - + DEBUG(str("Set name of resource: ", path_or_name)) if path_or_name.contains(".res"): _collection_name = _get_file_name(path_or_name) else: _collection_name = path_or_name func set_path(path: String): + DEBUG(str("Set path of resource: ", path)) _collection_path = path set_name(path) diff --git a/addons/datatable_godot/ui/buttons/main/mb_manageCollection.gd b/addons/datatable_godot/ui/buttons/main/mb_manageCollection.gd index 4d2ec88..9c9599f 100644 --- a/addons/datatable_godot/ui/buttons/main/mb_manageCollection.gd +++ b/addons/datatable_godot/ui/buttons/main/mb_manageCollection.gd @@ -81,6 +81,8 @@ func _on_load_collection(collection_path: String): _dt_backup.get_instance().make(collection_path) + _dt_backup.get_instance().link(%backup_timer, collection_path) + $"../b_newTable".disabled = false $"../b_manageTableType".disabled = false @@ -102,6 +104,8 @@ func _on_new_collection(collection_path: String): _dt_backup.get_instance().make(collection_path) + _dt_backup.get_instance().link(%backup_timer, collection_path) + _new_file_dialog.queue_free() func _on_close_load(): From d2e087259ac77ddd7d9313286519d9e39a9b66e5 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 22:18:20 +0200 Subject: [PATCH 10/12] fix bug with schema and quick right click --- addons/datatable_godot/common/backup.gd | 12 ++- addons/datatable_godot/common/schema.gd | 74 +++++++++---------- addons/datatable_godot/datatable.gd | 1 + addons/datatable_godot/datatable.tscn | 2 +- .../ui/buttons/newTable/in_tableItemName.gd | 4 +- .../ui/buttons/newTable/txt_table_name.gd | 2 +- .../ui/nodes/schema/proj_schema.tscn | 1 - .../schema/new_table/VBC_itemTableDataList.gd | 18 ++--- .../ui/schema/new_table/array_schema.gd | 4 +- 9 files changed, 64 insertions(+), 54 deletions(-) diff --git a/addons/datatable_godot/common/backup.gd b/addons/datatable_godot/common/backup.gd index cfebad4..cead0f7 100644 --- a/addons/datatable_godot/common/backup.gd +++ b/addons/datatable_godot/common/backup.gd @@ -4,7 +4,6 @@ class_name _dt_backup ## Class that manage all the backup system - static var _INSTANCE: _dt_backup static func delete(): @@ -51,6 +50,8 @@ func make(path: String): return if !_check_path(path): + ASSERT_ERROR("Error in the path, can't make a backup!") + DEBUG(str("Path: ", path)) return var data = load(path) @@ -58,6 +59,7 @@ func make(path: String): var file_name = _get_file_name(path) if file_name.is_empty(): + DEBUG(str("packedData: ", data, " file_name: ", file_name, " path: ",path)) ASSERT_ERROR("File name is empty, cancelling backup") return @@ -71,16 +73,23 @@ func make(path: String): var err = ResourceSaver.save(data, backup_file_path) if err != OK: + DEBUG(str("packedData: ", data, " file_name: ", file_name, " file_path: ", backup_file_path, " path: ",path)) ASSERT_ERROR("Couldn't create backup file!") else: print_rich("[color=lightgreen][DataTable] Created a backup for '",file_name,"' collection, path: ",backup_file_path) func link(timer: Timer, path: String): + + DEBUG("Link timer to backup system") + if timer.timeout.get_connections().has(make): + DEBUG("Disconnect already connected func") timer.timeout.disconnect(make) + timer.timeout.connect(make.bind(path)) timer.start() + func _get_file_name(path: String)->String: var file_name @@ -110,7 +119,6 @@ func _check_path(path: String)->bool: func _get_index(path: String)->int: - _index += 1 if _index > _max: diff --git a/addons/datatable_godot/common/schema.gd b/addons/datatable_godot/common/schema.gd index 94156eb..f60677a 100644 --- a/addons/datatable_godot/common/schema.gd +++ b/addons/datatable_godot/common/schema.gd @@ -2,24 +2,24 @@ extends _dt_common class_name _dt_schema -var string_schema: Node -var int_schema: Node -var float_schema: Node -var color_schema: Node -var vector2_schema: Node -var vector3_schema: Node -var vector4_schema: Node -var t2_schema: Node -var t3_schema: Node -var array_schema: Node -var bool_schema: Node -var ress_schema: Node -var quat_schema: Node -var plane_schema: Node -var rect_schema: Node -var aabb_schema: Node -var basis_schema: Node -var proj_schema: Node +var string_schema: Resource +var int_schema: Resource +var float_schema: Resource +var color_schema: Resource +var vector2_schema: Resource +var vector3_schema: Resource +var vector4_schema: Resource +var t2_schema: Resource +var t3_schema: Resource +var array_schema: Resource +var bool_schema: Resource +var ress_schema: Resource +var quat_schema: Resource +var plane_schema: Resource +var rect_schema: Resource +var aabb_schema: Resource +var basis_schema: Resource +var proj_schema: Resource var custom_schema: Dictionary @@ -37,24 +37,24 @@ static func get_instance() -> _dt_schema: return _INSTANCE func load_var(): - string_schema = preload("res://addons/datatable_godot/ui/nodes/schema/string_schema.tscn").instantiate() - int_schema = preload("res://addons/datatable_godot/ui/nodes/schema/int_schema.tscn").instantiate() - float_schema = preload("res://addons/datatable_godot/ui/nodes/schema/float_schema.tscn").instantiate() - color_schema = preload("res://addons/datatable_godot/ui/nodes/schema/color_schema.tscn").instantiate() - vector2_schema = preload("res://addons/datatable_godot/ui/nodes/schema/vector_2_schema.tscn").instantiate() - vector3_schema = preload("res://addons/datatable_godot/ui/nodes/schema/vector_3_schema.tscn").instantiate() - vector4_schema = preload("res://addons/datatable_godot/ui/nodes/schema/vector_4_schema.tscn").instantiate() - t2_schema = preload("res://addons/datatable_godot/ui/nodes/schema/t_2_schema.tscn").instantiate() - t3_schema = preload("res://addons/datatable_godot/ui/nodes/schema/t_3_schema.tscn").instantiate() - array_schema = preload("res://addons/datatable_godot/ui/nodes/schema/array_schema.tscn").instantiate() - bool_schema = preload("res://addons/datatable_godot/ui/nodes/schema/bool_schema.tscn").instantiate() - ress_schema = preload("res://addons/datatable_godot/ui/nodes/schema/ress_schema.tscn").instantiate() - quat_schema = preload("res://addons/datatable_godot/ui/nodes/schema/quat_schema.tscn").instantiate() - plane_schema = preload("res://addons/datatable_godot/ui/nodes/schema/plane_schema.tscn").instantiate() - rect_schema = preload("res://addons/datatable_godot/ui/nodes/schema/rect_schema.tscn").instantiate() - aabb_schema = preload("res://addons/datatable_godot/ui/nodes/schema/aabb_schema.tscn").instantiate() - basis_schema = preload("res://addons/datatable_godot/ui/nodes/schema/basis_schema.tscn").instantiate() - proj_schema = preload("res://addons/datatable_godot/ui/nodes/schema/proj_schema.tscn").instantiate() + string_schema = preload("res://addons/datatable_godot/ui/nodes/schema/string_schema.tscn") + int_schema = preload("res://addons/datatable_godot/ui/nodes/schema/int_schema.tscn") + float_schema = preload("res://addons/datatable_godot/ui/nodes/schema/float_schema.tscn") + color_schema = preload("res://addons/datatable_godot/ui/nodes/schema/color_schema.tscn") + vector2_schema = preload("res://addons/datatable_godot/ui/nodes/schema/vector_2_schema.tscn") + vector3_schema = preload("res://addons/datatable_godot/ui/nodes/schema/vector_3_schema.tscn") + vector4_schema = preload("res://addons/datatable_godot/ui/nodes/schema/vector_4_schema.tscn") + t2_schema = preload("res://addons/datatable_godot/ui/nodes/schema/t_2_schema.tscn") + t3_schema = preload("res://addons/datatable_godot/ui/nodes/schema/t_3_schema.tscn") + array_schema = preload("res://addons/datatable_godot/ui/nodes/schema/array_schema.tscn") + bool_schema = preload("res://addons/datatable_godot/ui/nodes/schema/bool_schema.tscn") + ress_schema = preload("res://addons/datatable_godot/ui/nodes/schema/ress_schema.tscn") + quat_schema = preload("res://addons/datatable_godot/ui/nodes/schema/quat_schema.tscn") + plane_schema = preload("res://addons/datatable_godot/ui/nodes/schema/plane_schema.tscn") + rect_schema = preload("res://addons/datatable_godot/ui/nodes/schema/rect_schema.tscn") + aabb_schema = preload("res://addons/datatable_godot/ui/nodes/schema/aabb_schema.tscn") + basis_schema = preload("res://addons/datatable_godot/ui/nodes/schema/basis_schema.tscn") + proj_schema = preload("res://addons/datatable_godot/ui/nodes/schema/proj_schema.tscn") func each() -> Array: return [ @@ -84,6 +84,6 @@ func add_custom(schema_name: String, schema_path: String) -> bool: ERROR("Can't add a schema with the same name as another one") return false - custom_schema[schema_name] = load(schema_path).instantiate() + custom_schema[schema_name] = load(schema_path) return true diff --git a/addons/datatable_godot/datatable.gd b/addons/datatable_godot/datatable.gd index a1ee80f..489c4f5 100644 --- a/addons/datatable_godot/datatable.gd +++ b/addons/datatable_godot/datatable.gd @@ -42,6 +42,7 @@ func _exit_tree(): _dt_resource.get_instance().delete() _dt_backup.get_instance().delete() _dt_updater.get_instance().delete() + _dt_schema.get_instance().delete() pass func _has_main_screen(): diff --git a/addons/datatable_godot/datatable.tscn b/addons/datatable_godot/datatable.tscn index b5e5168..229b1ed 100644 --- a/addons/datatable_godot/datatable.tscn +++ b/addons/datatable_godot/datatable.tscn @@ -229,6 +229,7 @@ theme_override_constants/margin_right = 5 theme_override_constants/margin_bottom = 5 [node name="bg_main" type="VBoxContainer" parent="MarginContainer"] +visible = false layout_mode = 2 [node name="FlowContainer" type="FlowContainer" parent="MarginContainer/bg_main"] @@ -367,7 +368,6 @@ autowrap_mode = 0 script = ExtResource("7_76wdw") [node name="bg_newTable" type="Panel" parent="MarginContainer"] -visible = false layout_mode = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_pmvdh") script = ExtResource("8_n6v0j") diff --git a/addons/datatable_godot/ui/buttons/newTable/in_tableItemName.gd b/addons/datatable_godot/ui/buttons/newTable/in_tableItemName.gd index d34adb2..30b98c9 100644 --- a/addons/datatable_godot/ui/buttons/newTable/in_tableItemName.gd +++ b/addons/datatable_godot/ui/buttons/newTable/in_tableItemName.gd @@ -34,9 +34,11 @@ func copy_template_code(): bg_newTable.add_child(timer) timer.start() + + var template = str( "\n", - "const collection_path: String = \"",common.collection_path,"\"\n", + "const collection_path: String = \"",_dt_resource.get_instance().get_path(),"\"\n", "var collec: Collection = Collection.new(collection_path)\n", "\n", "const table_name: String = \"",table_name,"\"\n", diff --git a/addons/datatable_godot/ui/buttons/newTable/txt_table_name.gd b/addons/datatable_godot/ui/buttons/newTable/txt_table_name.gd index f163ead..fc686f3 100644 --- a/addons/datatable_godot/ui/buttons/newTable/txt_table_name.gd +++ b/addons/datatable_godot/ui/buttons/newTable/txt_table_name.gd @@ -34,7 +34,7 @@ func copy_template_code(): var template = str( "\n", - "const collection_path: String = \"",common.collection_path,"\"\n", + "const collection_path: String = \"",_dt_resource.get_instance().get_path(),"\"\n", "var collec: Collection = Collection.new(collection_path)\n", "\n", "const table_name: String = \"",get_text(),"\"\n", diff --git a/addons/datatable_godot/ui/nodes/schema/proj_schema.tscn b/addons/datatable_godot/ui/nodes/schema/proj_schema.tscn index 13f1c0d..f0b7f2e 100644 --- a/addons/datatable_godot/ui/nodes/schema/proj_schema.tscn +++ b/addons/datatable_godot/ui/nodes/schema/proj_schema.tscn @@ -3,7 +3,6 @@ [ext_resource type="Script" path="res://addons/datatable_godot/ui/schema/new_table/proj_schema.gd" id="1_unwl8"] [node name="proj_schema" type="HBoxContainer"] -visible = false script = ExtResource("1_unwl8") [node name="paramName" type="RichTextLabel" parent="."] diff --git a/addons/datatable_godot/ui/schema/new_table/VBC_itemTableDataList.gd b/addons/datatable_godot/ui/schema/new_table/VBC_itemTableDataList.gd index 2ce546b..5afb32b 100644 --- a/addons/datatable_godot/ui/schema/new_table/VBC_itemTableDataList.gd +++ b/addons/datatable_godot/ui/schema/new_table/VBC_itemTableDataList.gd @@ -115,10 +115,10 @@ func reload_from_struct(struct: Dictionary): _dt_common.TYPE_BASIS: schema = _dt_schema.get_instance().basis_schema _dt_common.TYPE_PROJ: - schema = _dt_schema.get_instance().proj_schema + schema = _dt_schema.get_instance().proj_schema ## Getting the scene with spinbox in it if paramSize != 0: - var parent = _dt_schema.get_instance().array_schema.duplicate() + var parent = _dt_schema.get_instance().array_schema.instantiate() add_child(parent) add_child(separator) @@ -133,21 +133,20 @@ func reload_from_struct(struct: Dictionary): continue - var duplicate: Node = schema.duplicate() + var object: Node = schema.instantiate() - - add_child(duplicate) + add_child(object) ## adding it to the VBox add_child(separator) - node_structure[key] = duplicate + node_structure[key] = object - duplicate.set_title(title) + object.set_title(title) - var name_node = duplicate.get_child(0) + var name_node = object.get_child(0) name_node.set_tooltip_text(comment) - duplicate.visible = true + object.visible = true func save_data_of_struct(): @@ -165,6 +164,7 @@ func save_data_of_struct(): if !data['columns'].has(i): data['columns'][i] = {} + print(struct_data['name']," : ",node.get_value()) data['columns'][i]['name'] = struct_data['name'] data['columns'][i]['type'] = struct_data['type'] diff --git a/addons/datatable_godot/ui/schema/new_table/array_schema.gd b/addons/datatable_godot/ui/schema/new_table/array_schema.gd index b3012bc..e0ff5b5 100644 --- a/addons/datatable_godot/ui/schema/new_table/array_schema.gd +++ b/addons/datatable_godot/ui/schema/new_table/array_schema.gd @@ -5,7 +5,7 @@ var input: HBoxContainer var paramValue: HBoxContainer var text: RichTextLabel var add_item: Button -var used_schema: HBoxContainer +var used_schema: Resource var item_value_node: Node @onready var paramName: String = "" @@ -74,7 +74,7 @@ func set_type(new_type: int): icon = "res://addons/datatable_godot/icons/Projection.png" used_schema = _dt_schema.get_instance().proj_schema - input = used_schema.duplicate() + input = used_schema.instantiate() paramValue.add_child(input) From cf0f0b892417fd7a28d9e5c51598b6ac8a4feae6 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 22:24:48 +0200 Subject: [PATCH 11/12] Fix bug with array item --- addons/datatable_godot/datatable.tscn | 4 ++-- addons/datatable_godot/ui/box/arr_item_box.gd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/datatable_godot/datatable.tscn b/addons/datatable_godot/datatable.tscn index 229b1ed..215f6ce 100644 --- a/addons/datatable_godot/datatable.tscn +++ b/addons/datatable_godot/datatable.tscn @@ -229,7 +229,6 @@ theme_override_constants/margin_right = 5 theme_override_constants/margin_bottom = 5 [node name="bg_main" type="VBoxContainer" parent="MarginContainer"] -visible = false layout_mode = 2 [node name="FlowContainer" type="FlowContainer" parent="MarginContainer/bg_main"] @@ -368,6 +367,7 @@ autowrap_mode = 0 script = ExtResource("7_76wdw") [node name="bg_newTable" type="Panel" parent="MarginContainer"] +visible = false layout_mode = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_pmvdh") script = ExtResource("8_n6v0j") @@ -681,7 +681,6 @@ grow_vertical = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_ij0bt") [node name="bg_manageType" type="Panel" parent="MarginContainer"] -visible = false layout_mode = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_3otyk") script = ExtResource("39_mg6or") @@ -947,6 +946,7 @@ layout_mode = 2 size_flags_horizontal = 3 [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/bg_manageType/VBoxContainer/HBoxContainer/VBoxContainer2/VSplitContainer/VBoxContainer2/Panel/MarginContainer/ScrollContainer/VBoxContainer"] +visible = false layout_mode = 2 [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/bg_manageType/VBoxContainer/HBoxContainer/VBoxContainer2/VSplitContainer/VBoxContainer2/Panel/MarginContainer/ScrollContainer/VBoxContainer/VBoxContainer"] diff --git a/addons/datatable_godot/ui/box/arr_item_box.gd b/addons/datatable_godot/ui/box/arr_item_box.gd index 38c69a0..77d87ea 100644 --- a/addons/datatable_godot/ui/box/arr_item_box.gd +++ b/addons/datatable_godot/ui/box/arr_item_box.gd @@ -5,7 +5,7 @@ extends VBoxContainer var data = {} -var used_schema: HBoxContainer = null +var used_schema: Resource = null @onready var item_schema: HBoxContainer = get_child(0) func add_item(value: Variant): @@ -20,7 +20,7 @@ func add_item(value: Variant): var item = item_schema.duplicate() add_child(item) - var duplicate = used_schema.duplicate() + var duplicate = used_schema.instantiate() item.add_child(duplicate) item.move_child(duplicate, 0) duplicate.set_value(value) From bbb4d2e07a9cebc312fc01964dd153b92e50b201 Mon Sep 17 00:00:00 2001 From: Ward <50712170+Ward727a@users.noreply.github.com> Date: Sat, 1 Jun 2024 22:28:24 +0200 Subject: [PATCH 12/12] Update plugin.cfg --- addons/datatable_godot/plugin.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/datatable_godot/plugin.cfg b/addons/datatable_godot/plugin.cfg index 93c941c..98f4548 100644 --- a/addons/datatable_godot/plugin.cfg +++ b/addons/datatable_godot/plugin.cfg @@ -1,5 +1,4 @@ [plugin] - name="DataTable" description="A simple datatable system to use in godot" author="Ward"