From 5097c16a987bf0f11af98dc786a5752b8f8eccbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Santilio?= Date: Mon, 12 Oct 2020 18:09:54 +0200 Subject: [PATCH 1/2] add settings icon --- .../icons.pngs/settings.png.buttonicon | Bin 0 -> 524 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 addons/file-editor/icons.pngs/settings.png.buttonicon diff --git a/addons/file-editor/icons.pngs/settings.png.buttonicon b/addons/file-editor/icons.pngs/settings.png.buttonicon new file mode 100644 index 0000000000000000000000000000000000000000..d3ce0286465a125238ad508f349849f95c658675 GIT binary patch literal 524 zcmV+n0`vWeP)I@4XQ&Kv5K1s`?o~M7FXlJL=*k zO;T0Wn)iOx)T+90KpnZeQTqpFS*|e8s&tJB=D+b>CjS#|*jyn~R+gXu7EV^uX>9k0MSH@4QEHMO<&%sDsi;&y%GrSKb&`>Y+KcLc`( O0000 Date: Mon, 12 Oct 2020 18:13:53 +0200 Subject: [PATCH 2/2] Add scenes and scripts for custom font feature --- addons/file-editor/plugin.cfg | 2 +- addons/file-editor/scenes/FileEditor.tscn | 120 ++- addons/file-editor/scenes/VanillaEditor.tscn | 4 +- addons/file-editor/scripts/FileEditor.gd | 903 +++++++++--------- addons/file-editor/scripts/IniVisualEditor.gd | 412 ++++---- addons/file-editor/scripts/LastOpenedFiles.gd | 11 +- addons/file-editor/scripts/VanillaEditor.gd | 7 + 7 files changed, 786 insertions(+), 673 deletions(-) diff --git a/addons/file-editor/plugin.cfg b/addons/file-editor/plugin.cfg index 46dba6f..89ea660 100644 --- a/addons/file-editor/plugin.cfg +++ b/addons/file-editor/plugin.cfg @@ -3,5 +3,5 @@ name="File Editor" description="An internal file editor to view and edit text files in your project folder." author="Nicolo 'fenix' Santilio" -version="1.7.3" +version="1.7.6" script="scripts/file-editor.gd" diff --git a/addons/file-editor/scenes/FileEditor.tscn b/addons/file-editor/scenes/FileEditor.tscn index 7da3c9c..0713f17 100644 --- a/addons/file-editor/scenes/FileEditor.tscn +++ b/addons/file-editor/scenes/FileEditor.tscn @@ -1,9 +1,9 @@ -[gd_scene load_steps=19 format=2] +[gd_scene load_steps=27 format=2] [ext_resource path="res://addons/file-editor/scripts/FileEditor.gd" type="Script" id=1] [ext_resource path="res://addons/file-editor/fonts/Roboto-Black.ttf" type="DynamicFontData" id=2] -[sub_resource type="Image" id=17] +[sub_resource type="Image" id=25] data = { "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "format": "RGBA8", @@ -13,10 +13,10 @@ data = { } [sub_resource type="ImageTexture" id=2] -image = SubResource( 17 ) +image = SubResource( 25 ) size = Vector2( 16, 16 ) -[sub_resource type="Image" id=18] +[sub_resource type="Image" id=26] data = { "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 239, 224, 224, 224, 239, 224, 224, 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 80, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "format": "RGBA8", @@ -26,10 +26,10 @@ data = { } [sub_resource type="ImageTexture" id=4] -image = SubResource( 18 ) +image = SubResource( 26 ) size = Vector2( 16, 16 ) -[sub_resource type="Image" id=19] +[sub_resource type="Image" id=27] data = { "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 80, 224, 224, 224, 206, 224, 224, 224, 238, 224, 224, 224, 238, 224, 224, 224, 174, 224, 224, 224, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 206, 224, 224, 224, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 238, 224, 224, 224, 254, 224, 224, 224, 206, 224, 224, 224, 112, 224, 224, 224, 16, 224, 224, 224, 16, 224, 224, 224, 80, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 222, 224, 224, 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 96, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 96, 0, 0, 0, 0, 224, 224, 224, 64, 224, 224, 224, 206, 224, 224, 224, 222, 224, 224, 224, 64, 0, 0, 0, 0, 224, 224, 224, 96, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 32, 0, 0, 0, 0, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 16, 0, 0, 0, 0, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 222, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 126, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 96, 0, 0, 0, 0, 224, 224, 224, 64, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 96, 0, 0, 0, 0, 224, 224, 224, 80, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 126, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 190, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 206, 224, 224, 224, 96, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 64, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 112, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 206, 224, 224, 224, 126, 224, 224, 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "format": "RGBA8", @@ -39,14 +39,14 @@ data = { } [sub_resource type="ImageTexture" id=6] -image = SubResource( 19 ) +image = SubResource( 27 ) size = Vector2( 16, 16 ) [sub_resource type="DynamicFont" id=7] size = 13 font_data = ExtResource( 2 ) -[sub_resource type="Image" id=20] +[sub_resource type="Image" id=28] data = { "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "format": "RGBA8", @@ -56,10 +56,10 @@ data = { } [sub_resource type="ImageTexture" id=9] -image = SubResource( 20 ) +image = SubResource( 28 ) size = Vector2( 16, 16 ) -[sub_resource type="Image" id=21] +[sub_resource type="Image" id=29] data = { "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "format": "RGBA8", @@ -69,10 +69,10 @@ data = { } [sub_resource type="ImageTexture" id=11] -image = SubResource( 21 ) +image = SubResource( 29 ) size = Vector2( 16, 16 ) -[sub_resource type="Image" id=22] +[sub_resource type="Image" id=30] data = { "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "format": "RGBA8", @@ -82,10 +82,10 @@ data = { } [sub_resource type="ImageTexture" id=13] -image = SubResource( 22 ) +image = SubResource( 30 ) size = Vector2( 16, 16 ) -[sub_resource type="Image" id=23] +[sub_resource type="Image" id=31] data = { "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "format": "RGBA8", @@ -95,10 +95,62 @@ data = { } [sub_resource type="ImageTexture" id=15] -image = SubResource( 23 ) +image = SubResource( 31 ) size = Vector2( 16, 16 ) -[sub_resource type="StyleBoxEmpty" id=16] +[sub_resource type="Image" id=32] +data = { +"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id=17] +image = SubResource( 32 ) +size = Vector2( 16, 16 ) + +[sub_resource type="Image" id=33] +data = { +"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id=19] +image = SubResource( 33 ) +size = Vector2( 16, 16 ) + +[sub_resource type="Image" id=34] +data = { +"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id=21] +image = SubResource( 34 ) +size = Vector2( 16, 16 ) + +[sub_resource type="Image" id=35] +data = { +"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id=23] +image = SubResource( 35 ) +size = Vector2( 16, 16 ) + +[sub_resource type="StyleBoxEmpty" id=24] [node name="FileEditor" type="Control"] anchor_right = 1.0 @@ -150,15 +202,23 @@ text = "Preview" icon = SubResource( 6 ) items = [ "BBCode Preview", null, 0, false, false, 0, 0, null, "", false, "Markdown Preview", null, 0, false, false, 1, 0, null, "", false, "HTML Preview", null, 0, false, false, 2, 0, null, "", false, "CSV Preview [coming soon]", null, 0, false, true, 3, 0, null, "", false, "XML Preview [coming soon]", null, 0, false, true, 4, 0, null, "", false, "JSON Preview [coming soon]", null, 0, false, true, 5, 0, null, "", false ] +[node name="SettingsBtn" type="MenuButton" parent="FileEditorContainer/TobBar"] +margin_left = 215.0 +margin_right = 297.0 +margin_bottom = 22.0 +text = "Settings" +icon = SubResource( 6 ) +items = [ "Change Font", null, 0, false, false, 0, 0, null, "", false ] + [node name="version" type="Label" parent="FileEditorContainer/TobBar"] -margin_left = 953.0 +margin_left = 961.0 margin_top = 2.0 margin_right = 1000.0 margin_bottom = 19.0 size_flags_horizontal = 10 custom_fonts/font = SubResource( 7 ) custom_colors/font_color = Color( 0.121569, 0.145098, 0.192157, 1 ) -text = "v1.7.11" +text = "v1.7.4" align = 1 [node name="SplitContainer" type="HSplitContainer" parent="FileEditorContainer"] @@ -177,7 +237,7 @@ margin_bottom = 574.0 margin_right = 153.0 margin_bottom = 570.0 size_flags_vertical = 3 -items = [ "README.md", SubResource( 9 ), false, "sample.cfg", SubResource( 11 ), false, "data2.csv", SubResource( 13 ), false, "text.txt", SubResource( 15 ), false ] +items = [ "sample.bbs", SubResource( 9 ), false, "sample.cfg", SubResource( 11 ), false, "sample.csv", SubResource( 13 ), false, "sample.html", SubResource( 15 ), false, "sample.ini", SubResource( 17 ), false, "sample.md", SubResource( 19 ), false, "sample.txt", SubResource( 21 ), false, "test.csv", SubResource( 23 ), false ] allow_reselect = true [node name="HSeparator" type="HSeparator" parent="FileEditorContainer/SplitContainer/FileContainer"] @@ -185,7 +245,7 @@ margin_top = 574.0 margin_right = 153.0 margin_bottom = 574.0 rect_min_size = Vector2( 2, 0 ) -custom_styles/separator = SubResource( 16 ) +custom_styles/separator = SubResource( 24 ) custom_constants/separation = 0 [node name="EditorContainer" type="VBoxContainer" parent="FileEditorContainer/SplitContainer"] @@ -209,7 +269,7 @@ margin_right = 653.0 margin_bottom = 24.0 mouse_filter = 1 size_flags_horizontal = 3 -text = "res://text.txt" +text = "res://test.csv" editable = false [node name="wrap_button" type="OptionButton" parent="FileEditorContainer/SplitContainer/EditorContainer/HBoxContainer"] @@ -236,7 +296,8 @@ size_flags_vertical = 3 popup_exclusive = true window_title = "Salva un file" dialog_hide_on_ok = true -filters = PoolStringArray( "*.txt ; Plain Text File", "*.rtf ; Rich Text Format File", "*.log ; Log File", "*.md ; MD File", "*.doc ; WordPad Document", "*.doc ; Microsoft Word Document", "*.docm ; Word Open XML Macro-Enabled Document", "*.docx ; Microsoft Word Open XML Document", "*.bbs ; Bulletin Board System Text", "*.dat ; Data File", "*.xml ; XML File", "*.sql ; SQL database file", "*.json ; JavaScript Object Notation File", "*.html ; HyperText Markup Language", "*.csv ; Comma-separated values", "*.cfg ; Configuration File", "*.ini ; Initialization File (same as .cfg Configuration File)", "*.csv ; Comma-separated values File" ) +filters = PoolStringArray( "*.txt ; Plain Text File", "*.rtf ; Rich Text Format File", "*.log ; Log File", "*.md ; MD File", "*.doc ; WordPad Document", "*.doc ; Microsoft Word Document", "*.docm ; Word Open XML Macro-Enabled Document", "*.docx ; Microsoft Word Open XML Document", "*.bbs ; Bulletin Board System Text", "*.dat ; Data File", "*.xml ; XML File", "*.sql ; SQL database file", "*.json ; JavaScript Object Notation File", "*.html ; HyperText Markup Language", "*.csv ; Comma-separated values", "*.cfg ; Configuration File", "*.ini ; Initialization File (same as .cfg Configuration File)", "*.csv ; Comma-separated values File", "*.res ; Resource File" ) +show_hidden_files = true [node name="NewFileDialogue" type="AcceptDialog" parent="."] margin_left = 348.254 @@ -284,3 +345,18 @@ margin_bottom = 37.5 window_title = "Unsaved changes" dialog_text = "There are some unsaved changes. Press \"OK\" if you want to close this tab anyway, or \"cancel\" if you want to keep on editing your file." + +[node name="SelectFontDialog" type="FileDialog" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 222.0 +margin_top = 132.0 +margin_right = -221.0 +margin_bottom = -131.0 +window_title = "Select a Font" +resizable = true +mode = 0 +access = 2 +filters = PoolStringArray( "*.TTF", "*.ttf" ) +current_dir = "/COMPUTER/GodotEngine/GDScript/[Plugin]FileEditor" +current_path = "/COMPUTER/GodotEngine/GDScript/[Plugin]FileEditor/" diff --git a/addons/file-editor/scenes/VanillaEditor.tscn b/addons/file-editor/scenes/VanillaEditor.tscn index da94598..7089862 100644 --- a/addons/file-editor/scenes/VanillaEditor.tscn +++ b/addons/file-editor/scenes/VanillaEditor.tscn @@ -70,9 +70,9 @@ caret_moving_by_right_click = false [node name="SearchBox" type="HBoxContainer" parent="."] visible = false -margin_top = 525.0 +margin_top = 553.0 margin_right = 1024.0 -margin_bottom = 549.0 +margin_bottom = 577.0 [node name="Label" type="Label" parent="SearchBox"] margin_top = 5.0 diff --git a/addons/file-editor/scripts/FileEditor.gd b/addons/file-editor/scripts/FileEditor.gd index 8c70ff1..fede799 100644 --- a/addons/file-editor/scripts/FileEditor.gd +++ b/addons/file-editor/scripts/FileEditor.gd @@ -9,9 +9,11 @@ onready var NewFileDialogue_name = $NewFileDialogue/VBoxContainer/new_filename onready var FileBTN = $FileEditorContainer/TobBar/file_btn.get_popup() onready var PreviewBTN = $FileEditorContainer/TobBar/preview_btn.get_popup() onready var EditorBTN = $FileEditorContainer/TobBar/editor_btn.get_popup() +onready var SettingsBTN : PopupMenu = $FileEditorContainer/TobBar/SettingsBtn.get_popup() onready var Version = $FileEditorContainer/TobBar/version +onready var SelectFontDialog : FileDialog = $SelectFontDialog onready var FileContainer = $FileEditorContainer/SplitContainer/FileContainer onready var OpenFileList = $FileEditorContainer/SplitContainer/FileContainer/OpenFileList @@ -62,522 +64,541 @@ var save_as = false var current_editor : Control var current_ini_editor : Control var current_csv_editor : Control - +var current_font : DynamicFont func _ready(): - - clean_editor() - update_version() - connect_signals() - create_shortcuts() - load_icons() - - var opened_files : Array = LastOpenedFiles.load_opened_files() - for open_file in opened_files: - open_file(open_file[1]) - - FileList.set_filters(EXTENSIONS) + + clean_editor() + update_version() + connect_signals() + create_shortcuts() + load_icons() + + var opened_files : Array = LastOpenedFiles.load_opened_files() + for opened_file in opened_files: + open_file(opened_file[1], opened_file[2]) + + FileList.set_filters(EXTENSIONS) func create_shortcuts(): - var hotkey - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_S - hotkey.control = true - FileBTN.set_item_accelerator(4,hotkey.get_scancode_with_modifiers()) # save file - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_N - hotkey.control = true - FileBTN.set_item_accelerator(0,hotkey.get_scancode_with_modifiers()) # new file - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_O - hotkey.control = true - FileBTN.set_item_accelerator(1,hotkey.get_scancode_with_modifiers()) # open file - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_D - hotkey.control = true - FileBTN.set_item_accelerator(6,hotkey.get_scancode_with_modifiers()) # delete file - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_S - hotkey.control = true - hotkey.alt = true - FileBTN.set_item_accelerator(5,hotkey.get_scancode_with_modifiers()) #save file as - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_C - hotkey.control = true - hotkey.alt = true - FileBTN.set_item_accelerator(2,hotkey.get_scancode_with_modifiers()) # close file - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_F - hotkey.control = true - FileBTN.set_item_accelerator(8,hotkey.get_scancode_with_modifiers()) # search - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_R - hotkey.control = true - FileBTN.set_item_accelerator(9,hotkey.get_scancode_with_modifiers()) # replace - - # vanilla editor ----------------------- - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_1 - hotkey.control = true - EditorBTN.set_item_accelerator(0,hotkey.get_scancode_with_modifiers()) # vanilla editor - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_2 - hotkey.control = true - EditorBTN.set_item_accelerator(1,hotkey.get_scancode_with_modifiers()) # csv editor - - hotkey = InputEventKey.new() - hotkey.scancode = KEY_3 - hotkey.control = true - EditorBTN.set_item_accelerator(2,hotkey.get_scancode_with_modifiers()) # inieditor editor + var hotkey + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_S + hotkey.control = true + FileBTN.set_item_accelerator(4,hotkey.get_scancode_with_modifiers()) # save file + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_N + hotkey.control = true + FileBTN.set_item_accelerator(0,hotkey.get_scancode_with_modifiers()) # new file + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_O + hotkey.control = true + FileBTN.set_item_accelerator(1,hotkey.get_scancode_with_modifiers()) # open file + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_D + hotkey.control = true + FileBTN.set_item_accelerator(6,hotkey.get_scancode_with_modifiers()) # delete file + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_S + hotkey.control = true + hotkey.alt = true + FileBTN.set_item_accelerator(5,hotkey.get_scancode_with_modifiers()) #save file as + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_C + hotkey.control = true + hotkey.alt = true + FileBTN.set_item_accelerator(2,hotkey.get_scancode_with_modifiers()) # close file + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_F + hotkey.control = true + FileBTN.set_item_accelerator(8,hotkey.get_scancode_with_modifiers()) # search + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_R + hotkey.control = true + FileBTN.set_item_accelerator(9,hotkey.get_scancode_with_modifiers()) # replace + + # vanilla editor ----------------------- + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_1 + hotkey.control = true + EditorBTN.set_item_accelerator(0,hotkey.get_scancode_with_modifiers()) # vanilla editor + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_2 + hotkey.control = true + EditorBTN.set_item_accelerator(1,hotkey.get_scancode_with_modifiers()) # csv editor + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_3 + hotkey.control = true + EditorBTN.set_item_accelerator(2,hotkey.get_scancode_with_modifiers()) # inieditor editor func load_icons(): - $FileEditorContainer/TobBar/file_btn.icon = IconLoader.load_icon_from_name("file") - $FileEditorContainer/TobBar/preview_btn.icon = IconLoader.load_icon_from_name("read") - $FileEditorContainer/TobBar/editor_btn.icon = IconLoader.load_icon_from_name("edit_") + $FileEditorContainer/TobBar/file_btn.icon = IconLoader.load_icon_from_name("file") + $FileEditorContainer/TobBar/preview_btn.icon = IconLoader.load_icon_from_name("read") + $FileEditorContainer/TobBar/editor_btn.icon = IconLoader.load_icon_from_name("edit_") + $FileEditorContainer/TobBar/SettingsBtn.icon = IconLoader.load_icon_from_name("settings") func connect_signals(): - FileList.connect("confirmed",self,"update_list") - FileBTN.connect("id_pressed",self,"_on_filebtn_pressed") - PreviewBTN.connect("id_pressed",self,"_on_previewbtn_pressed") - EditorBTN.connect("id_pressed",self,"_on_editorbtn_pressed") - - OpenFileList.connect("item_selected",self,"_on_fileitem_pressed") - WrapBTN.connect("item_selected",self,"on_wrap_button") - MapBTN.connect("item_selected",self,"on_minimap_button") + FileList.connect("confirmed",self,"update_list") + FileBTN.connect("id_pressed",self,"_on_filebtn_pressed") + PreviewBTN.connect("id_pressed",self,"_on_previewbtn_pressed") + EditorBTN.connect("id_pressed",self,"_on_editorbtn_pressed") + SettingsBTN.connect("id_pressed",self,"_on_settingsbtn_pressed") + + OpenFileList.connect("item_selected",self,"_on_fileitem_pressed") + WrapBTN.connect("item_selected",self,"on_wrap_button") + MapBTN.connect("item_selected",self,"on_minimap_button") + + SelectFontDialog.connect("file_selected",self,"_on_font_selected") func update_version(): - var plugin_version = "" - var config = ConfigFile.new() - var err = config.load("res://addons/file-editor/plugin.cfg") - if err == OK: - plugin_version = config.get_value("plugin","version") - Version.set_text("v"+plugin_version) - print(plugin_version) + var plugin_version = "" + var config = ConfigFile.new() + var err = config.load("res://addons/file-editor/plugin.cfg") + if err == OK: + plugin_version = config.get_value("plugin","version") + Version.set_text("v"+plugin_version) + print(plugin_version) func create_selected_file(): - update_list() - FileList.mode = FileDialog.MODE_SAVE_FILE - FileList.set_title("Create a new File") - if FileList.is_connected("file_selected",self,"delete_file"): - FileList.disconnect("file_selected",self,"delete_file") - if FileList.is_connected("file_selected",self,"open_file"): - FileList.disconnect("file_selected",self,"open_file") - if not FileList.is_connected("file_selected",self,"create_new_file"): - FileList.connect("file_selected",self,"create_new_file") - open_filelist() + update_list() + FileList.mode = FileDialog.MODE_SAVE_FILE + FileList.set_title("Create a new File") + if FileList.is_connected("file_selected",self,"delete_file"): + FileList.disconnect("file_selected",self,"delete_file") + if FileList.is_connected("file_selected",self,"open_file"): + FileList.disconnect("file_selected",self,"open_file") + if not FileList.is_connected("file_selected",self,"create_new_file"): + FileList.connect("file_selected",self,"create_new_file") + open_filelist() func open_selected_file(): - update_list() - FileList.mode = FileDialog.MODE_OPEN_FILE - FileList.set_title("Select a File you want to edit") - if FileList.is_connected("file_selected",self,"delete_file"): - FileList.disconnect("file_selected",self,"delete_file") - if FileList.is_connected("file_selected",self,"create_new_file"): - FileList.disconnect("file_selected",self,"create_new_file") - if not FileList.is_connected("file_selected",self,"open_file"): - FileList.connect("file_selected",self,"open_file") - open_filelist() + update_list() + FileList.mode = FileDialog.MODE_OPEN_FILE + FileList.set_title("Select a File you want to edit") + if FileList.is_connected("file_selected",self,"delete_file"): + FileList.disconnect("file_selected",self,"delete_file") + if FileList.is_connected("file_selected",self,"create_new_file"): + FileList.disconnect("file_selected",self,"create_new_file") + if not FileList.is_connected("file_selected",self,"open_file"): + FileList.connect("file_selected",self,"open_file") + open_filelist() func delete_selected_file(): - update_list() - FileList.mode = FileDialog.MODE_OPEN_FILES - FileList.set_title("Select one or more Files you want to delete") - if FileList.is_connected("file_selected",self,"open_file"): - FileList.disconnect("file_selected",self,"open_file") - if FileList.is_connected("file_selected",self,"create_new_file"): - FileList.disconnect("file_selected",self,"create_new_file") - if not FileList.is_connected("files_selected",self,"delete_file"): - FileList.connect("files_selected",self,"delete_file") - open_filelist() + update_list() + FileList.mode = FileDialog.MODE_OPEN_FILES + FileList.set_title("Select one or more Files you want to delete") + if FileList.is_connected("file_selected",self,"open_file"): + FileList.disconnect("file_selected",self,"open_file") + if FileList.is_connected("file_selected",self,"create_new_file"): + FileList.disconnect("file_selected",self,"create_new_file") + if not FileList.is_connected("files_selected",self,"delete_file"): + FileList.connect("files_selected",self,"delete_file") + open_filelist() func save_current_file_as(): - update_list() - FileList.mode = FileDialog.MODE_SAVE_FILE - FileList.set_title("Save this File as...") - if FileList.is_connected("file_selected",self,"delete_file"): - FileList.disconnect("file_selected",self,"delete_file") - if FileList.is_connected("file_selected",self,"open_file"): - FileList.disconnect("file_selected",self,"open_file") - if not FileList.is_connected("file_selected",self,"create_new_file"): - FileList.connect("file_selected",self,"create_new_file") - open_filelist() + update_list() + FileList.mode = FileDialog.MODE_SAVE_FILE + FileList.set_title("Save this File as...") + if FileList.is_connected("file_selected",self,"delete_file"): + FileList.disconnect("file_selected",self,"delete_file") + if FileList.is_connected("file_selected",self,"open_file"): + FileList.disconnect("file_selected",self,"open_file") + if not FileList.is_connected("file_selected",self,"create_new_file"): + FileList.connect("file_selected",self,"create_new_file") + open_filelist() func _on_filebtn_pressed(index : int): - match index: - 0: - create_selected_file() - 1: - open_selected_file() - 2: - if current_file_index!=-1 and current_file_path != "": - close_file(current_file_index) - - 3: - if current_file_index!=-1 and current_file_path != "": - save_as = false - if current_csv_editor and current_csv_editor.visible: - current_csv_editor.save_table() - save_file(current_file_path) - 4: - if current_file_index!=-1 and current_file_path != "": - save_as = true - save_file(current_file_path) - save_current_file_as() - 5: - delete_selected_file() - 6: - current_editor.open_searchbox() - 7: - current_editor.open_replacebox() + match index: + 0: + create_selected_file() + 1: + open_selected_file() + 2: + if current_file_index!=-1 and current_file_path != "": + close_file(current_file_index) + + 3: + if current_file_index!=-1 and current_file_path != "": + save_as = false + if current_csv_editor and current_csv_editor.visible: + current_csv_editor.save_table() + save_file(current_file_path) + 4: + if current_file_index!=-1 and current_file_path != "": + save_as = true + save_file(current_file_path) + save_current_file_as() + 5: + delete_selected_file() + 6: + current_editor.open_searchbox() + 7: + current_editor.open_replacebox() func _on_previewbtn_pressed(id : int): - if id == 0: - bbcode_preview() - elif id == 1: - markdown_preview() - elif id == 2: - html_preview() - elif id == 3: - csv_preview() - elif id == 4: - xml_preview() - elif id == 5: - json_preview() + if id == 0: + bbcode_preview() + elif id == 1: + markdown_preview() + elif id == 2: + html_preview() + elif id == 3: + csv_preview() + elif id == 4: + xml_preview() + elif id == 5: + json_preview() func _on_editorbtn_pressed(index : int): - match index: - 0: - if not current_editor.visible: - current_editor.show() - if current_csv_editor: - current_csv_editor.hide() - if current_ini_editor: - current_ini_editor.hide() - 1: - if current_csv_editor and not current_csv_editor.visible: - if current_ini_editor: - current_ini_editor.hide() - current_editor.hide() - current_csv_editor = open_in_csveditor(current_file_path) - current_csv_editor.show() - 2: - if current_ini_editor and not current_ini_editor.visible: - current_editor.hide() - if current_csv_editor: - current_csv_editor.hide() - current_ini_editor = open_in_inieditor(current_file_path) - current_ini_editor.show() + match index: + 0: + if not current_editor.visible: + current_editor.show() + if current_csv_editor: + current_csv_editor.hide() + if current_ini_editor: + current_ini_editor.hide() + 1: + if current_csv_editor and not current_csv_editor.visible: + if current_ini_editor: + current_ini_editor.hide() + current_editor.hide() + current_csv_editor = open_in_csveditor(current_file_path) + current_csv_editor.show() + 2: + if current_ini_editor and not current_ini_editor.visible: + current_editor.hide() + if current_csv_editor: + current_csv_editor.hide() + current_ini_editor = open_in_inieditor(current_file_path) + current_ini_editor.show() + +func _on_settingsbtn_pressed(index : int): + match index: + 0: + SelectFontDialog.popup() + +func _on_font_selected(font_path : String): + current_editor.set_font(font_path) + LastOpenedFiles.store_editor_fonts(current_file_path.get_file(), font_path) +# Enable this part of code to apply the new font to all Vanilla Editors opened +# for file in [0,OpenFileList.get_child_count()]: +# OpenFileList.get_item_metadata(file)[0].set_font(dynamic_font) +# current_font = dynamic_font func _on_fileitem_pressed(index : int): - current_file_index = index - var selected_item_metadata = OpenFileList.get_item_metadata(current_file_index) - var extension = selected_item_metadata[0].current_path.get_file().get_extension() - - current_file_path = selected_item_metadata[0].current_path - if current_editor.visible: - current_editor.hide() - current_editor = selected_item_metadata[0] - current_editor.show() - OpenFileName.set_text(current_editor.current_path) - current_csv_editor = selected_item_metadata[2] - current_ini_editor = selected_item_metadata[1] - if WrapBTN.get_selected_id() == 1: - current_editor.set_wrap_enabled(true) - else: - current_editor.set_wrap_enabled(false) - if MapBTN.get_selected_id() == 1: - current_editor.draw_minimap(true) - else: - current_editor.draw_minimap(false) - elif current_csv_editor and current_csv_editor.visible: - if extension == "csv": - current_csv_editor.hide() - current_csv_editor = selected_item_metadata[2] - current_csv_editor.show() - OpenFileName.set_text(current_csv_editor.current_file_path) - current_editor = selected_item_metadata[0] - current_ini_editor = selected_item_metadata[1] - else: - if current_csv_editor: - current_csv_editor.hide() - current_csv_editor = selected_item_metadata[2] - if current_ini_editor: - current_ini_editor.hide() - current_ini_editor = selected_item_metadata[1] - current_editor.hide() - current_editor = selected_item_metadata[0] - current_editor.show() - OpenFileName.set_text(current_editor.current_path) - elif current_ini_editor and current_ini_editor.visible: - if extension == "cfg" or extension == "ini": - current_ini_editor.hide() - current_ini_editor = selected_item_metadata[1] - current_ini_editor.show() - OpenFileName.set_text(current_ini_editor.current_file_path) - else: - if current_ini_editor: - current_ini_editor.hide() - current_ini_editor = selected_item_metadata[1] - if current_csv_editor: - current_csv_editor.hide() - current_csv_editor = selected_item_metadata[2] - current_editor.hide() - current_editor = selected_item_metadata[0] - current_editor.show() - OpenFileName.set_text(current_editor.current_path) - -func open_file(path : String): - if current_file_path != path: - current_file_path = path - - var vanilla_editor = open_in_vanillaeditor(path) - var ini_editor = open_in_inieditor(path) - var csv_editor = open_in_csveditor(path) - - generate_file_item(path,vanilla_editor,ini_editor,csv_editor) - - LastOpenedFiles.store_opened_files(OpenFileList) - current_editor.show() + current_file_index = index + var selected_item_metadata = OpenFileList.get_item_metadata(current_file_index) + var extension = selected_item_metadata[0].current_path.get_file().get_extension() + + current_file_path = selected_item_metadata[0].current_path + if current_editor.visible: + current_editor.hide() + current_editor = selected_item_metadata[0] + current_editor.show() + OpenFileName.set_text(current_editor.current_path) + current_csv_editor = selected_item_metadata[2] + current_ini_editor = selected_item_metadata[1] + if WrapBTN.get_selected_id() == 1: + current_editor.set_wrap_enabled(true) + else: + current_editor.set_wrap_enabled(false) + if MapBTN.get_selected_id() == 1: + current_editor.draw_minimap(true) + else: + current_editor.draw_minimap(false) + elif current_csv_editor and current_csv_editor.visible: + if extension == "csv": + current_csv_editor.hide() + current_csv_editor = selected_item_metadata[2] + current_csv_editor.show() + OpenFileName.set_text(current_csv_editor.current_file_path) + current_editor = selected_item_metadata[0] + current_ini_editor = selected_item_metadata[1] + else: + if current_csv_editor: + current_csv_editor.hide() + current_csv_editor = selected_item_metadata[2] + if current_ini_editor: + current_ini_editor.hide() + current_ini_editor = selected_item_metadata[1] + current_editor.hide() + current_editor = selected_item_metadata[0] + current_editor.show() + OpenFileName.set_text(current_editor.current_path) + elif current_ini_editor and current_ini_editor.visible: + if extension == "cfg" or extension == "ini": + current_ini_editor.hide() + current_ini_editor = selected_item_metadata[1] + current_ini_editor.show() + OpenFileName.set_text(current_ini_editor.current_file_path) + else: + if current_ini_editor: + current_ini_editor.hide() + current_ini_editor = selected_item_metadata[1] + if current_csv_editor: + current_csv_editor.hide() + current_csv_editor = selected_item_metadata[2] + current_editor.hide() + current_editor = selected_item_metadata[0] + current_editor.show() + OpenFileName.set_text(current_editor.current_path) + +func open_file(path : String, font : String = "null"): + if current_file_path != path: + current_file_path = path + + var vanilla_editor = open_in_vanillaeditor(path) + if font != "null": + vanilla_editor.set_font(font) + var ini_editor = open_in_inieditor(path) + var csv_editor = open_in_csveditor(path) + + generate_file_item(path,vanilla_editor,ini_editor,csv_editor) + + LastOpenedFiles.store_opened_files(OpenFileList) + current_editor.show() func generate_file_item(path : String , veditor : Control , inieditor : Control, csveditor : Control): - OpenFileName.set_text(path) - OpenFileList.add_item(path.get_file(),IconLoader.load_icon_from_name("file"),true) - current_file_index = OpenFileList.get_item_count()-1 - OpenFileList.set_item_metadata(current_file_index,[veditor,inieditor,csveditor]) - OpenFileList.select(OpenFileList.get_item_count()-1) + OpenFileName.set_text(path) + OpenFileList.add_item(path.get_file(),IconLoader.load_icon_from_name("file"),true) + current_file_index = OpenFileList.get_item_count()-1 + OpenFileList.set_item_metadata(current_file_index,[veditor,inieditor,csveditor]) + OpenFileList.select(OpenFileList.get_item_count()-1) func open_in_vanillaeditor(path : String) -> Control: - var editor = VanillaEditor.instance() - SplitEditorContainer.add_child(editor,true) - - if current_editor and current_editor!=editor: - editor.show() - current_editor.hide() - if current_csv_editor and current_csv_editor.visible: - current_csv_editor.hide() - if current_ini_editor and current_ini_editor.visible: - current_ini_editor.hide() - - current_editor = editor - - - editor.connect("text_changed",self,"_on_vanillaeditor_text_changed") - - var current_file : File = File.new() - current_file.open(path,File.READ) - var current_content = "" - current_content = current_file.get_as_text() - - var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(path)) - - current_file.close() - - editor.new_file_open(current_content,last_modified,current_file_path) - - update_list() - - if WrapBTN.get_selected_id() == 1: - current_editor.set_wrap_enabled(true) - - - return editor + var editor = VanillaEditor.instance() + SplitEditorContainer.add_child(editor,true) + + if current_editor and current_editor!=editor: + editor.show() + current_editor.hide() + if current_csv_editor and current_csv_editor.visible: + current_csv_editor.hide() + if current_ini_editor and current_ini_editor.visible: + current_ini_editor.hide() + + current_editor = editor + + + editor.connect("text_changed",self,"_on_vanillaeditor_text_changed") + + var current_file : File = File.new() + current_file.open(path,File.READ) + var current_content = "" + current_content = current_file.get_as_text() + + var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(path)) + + current_file.close() + + editor.new_file_open(current_content,last_modified,current_file_path) + + update_list() + + if WrapBTN.get_selected_id() == 1: + current_editor.set_wrap_enabled(true) + + + return editor func open_in_inieditor(path : String) -> Control: - var extension = path.get_file().get_extension() - if extension == "ini" or extension == "cfg": - var inieditor = IniEditor.instance() - SplitEditorContainer.add_child(inieditor) - inieditor.hide() - inieditor.connect("update_file",self,"_on_update_file") - current_ini_editor = inieditor - inieditor.current_file_path = path - var current_file : ConfigFile = ConfigFile.new() - var err = current_file.load(path) - if err == OK: - var sections = current_file.get_sections() - var filemap = [] - for section in sections: - var keys = [] - var section_keys = current_file.get_section_keys(section) - for key in section_keys: - keys.append([key,current_file.get_value(section,key)]) - - filemap.append([section,keys]) - - inieditor.open_file(filemap) - return inieditor - else: - current_ini_editor = null - return null + var extension = path.get_file().get_extension() + if extension == "ini" or extension == "cfg": + var inieditor = IniEditor.instance() + SplitEditorContainer.add_child(inieditor) + inieditor.hide() + inieditor.connect("update_file",self,"_on_update_file") + current_ini_editor = inieditor + inieditor.current_file_path = path + var current_file : ConfigFile = ConfigFile.new() + var err = current_file.load(path) + if err == OK: + var sections = current_file.get_sections() + var filemap = [] + for section in sections: + var keys = [] + var section_keys = current_file.get_section_keys(section) + for key in section_keys: + keys.append([key,current_file.get_value(section,key)]) + + filemap.append([section,keys]) + + inieditor.open_file(filemap) + return inieditor + else: + current_ini_editor = null + return null func open_in_csveditor(path : String) -> Control: - var extension = path.get_file().get_extension() - if extension == "csv": - var csveditor = CsvEditor.instance() - SplitEditorContainer.add_child(csveditor) - csveditor.hide() - csveditor.connect("update_file",self,"_on_update_file") - current_csv_editor = csveditor - csveditor.current_file_path = path - csveditor.open_csv_file(path,"|") - return csveditor - else: - current_csv_editor = null - return null + var extension = path.get_file().get_extension() + if extension == "csv": + var csveditor = CsvEditor.instance() + SplitEditorContainer.add_child(csveditor) + csveditor.hide() + csveditor.connect("update_file",self,"_on_update_file") + current_csv_editor = csveditor + csveditor.current_file_path = path + csveditor.open_csv_file(path,"|") + return csveditor + else: + current_csv_editor = null + return null func close_file(index): - LastOpenedFiles.remove_opened_file(index,OpenFileList) - OpenFileList.remove_item(index) - OpenFileName.clear() - current_editor.queue_free() - - if index>0: - OpenFileList.select(OpenFileList.get_item_count()-1) - _on_fileitem_pressed(OpenFileList.get_item_count()-1) + LastOpenedFiles.remove_opened_file(index,OpenFileList) + OpenFileList.remove_item(index) + OpenFileName.clear() + current_editor.queue_free() + + if index>0: + OpenFileList.select(OpenFileList.get_item_count()-1) + _on_fileitem_pressed(OpenFileList.get_item_count()-1) func _on_update_file(): # current_editor.clean_editor() - var current_file : File = File.new() - current_file.open(current_file_path,File.READ) - - var current_content = current_file.get_as_text() - var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_file_path)) - - current_file.close() - - current_editor.new_file_open(current_content,last_modified,current_file_path) + var current_file : File = File.new() + current_file.open(current_file_path,File.READ) + + var current_content = current_file.get_as_text() + var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_file_path)) + + current_file.close() + + current_editor.new_file_open(current_content,last_modified,current_file_path) func delete_file(files_selected : PoolStringArray): - var dir = Directory.new() - for file in files_selected: - dir.remove(file) - - update_list() + var dir = Directory.new() + for file in files_selected: + dir.remove(file) + + update_list() func open_newfiledialogue(): - NewFileDialogue.popup() - NewFileDialogue.set_position(OS.get_screen_size()/2 - NewFileDialogue.get_size()/2) + NewFileDialogue.popup() + NewFileDialogue.set_position(OS.get_screen_size()/2 - NewFileDialogue.get_size()/2) func open_filelist(): - update_list() - FileList.popup() - FileList.set_position(OS.get_screen_size()/2 - FileList.get_size()/2) + update_list() + FileList.popup() + FileList.set_position(OS.get_screen_size()/2 - FileList.get_size()/2) func create_new_file(given_path : String): - var current_file = File.new() - current_file.open(given_path,File.WRITE) - if save_as : - current_file.store_line(current_editor.get_node("TextEditor").get_text()) - current_file.close() - - open_file(given_path) + var current_file = File.new() + current_file.open(given_path,File.WRITE) + if save_as : + current_file.store_line(current_editor.get_node("TextEditor").get_text()) + current_file.close() + + open_file(given_path) func save_file(current_path : String): - var current_file = File.new() - current_file.open(current_path,File.WRITE) - var current_content = "" - var lines = current_editor.get_node("TextEditor").get_line_count() - for line in range(0,lines): - current_content = current_editor.get_node("TextEditor").get_text() - current_file.store_line(current_editor.get_node("TextEditor").get_line(line)) - current_file.close() - - current_file_path = current_path - - var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_file_path)) - - current_editor.update_lastmodified(last_modified,"save") - OpenFileList.set_item_metadata(current_file_index,[current_editor,current_ini_editor,current_csv_editor]) - print(OpenFileList.get_item_metadata(current_file_index)) - - if OpenFileList.get_item_text(current_file_index).ends_with("(*)"): - OpenFileList.set_item_text(current_file_index,OpenFileList.get_item_text(current_file_index).rstrip("(*)")) - + var current_file = File.new() + current_file.open(current_path,File.WRITE) + var current_content = "" + var lines = current_editor.get_node("TextEditor").get_line_count() + for line in range(0,lines): + current_content = current_editor.get_node("TextEditor").get_text() + current_file.store_line(current_editor.get_node("TextEditor").get_line(line)) + current_file.close() + + current_file_path = current_path + + var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_file_path)) + + current_editor.update_lastmodified(last_modified,"save") + OpenFileList.set_item_metadata(current_file_index,[current_editor,current_ini_editor,current_csv_editor]) + print(OpenFileList.get_item_metadata(current_file_index)) + + if OpenFileList.get_item_text(current_file_index).ends_with("(*)"): + OpenFileList.set_item_text(current_file_index,OpenFileList.get_item_text(current_file_index).rstrip("(*)")) + # OpenFileList.set_item_metadata(current_file_index,[current_editor,open_in_inieditor(current_file_path),open_in_csveditor(current_file_path)]) - - update_list() + + update_list() func clean_editor() -> void : - for inieditor in get_tree().get_nodes_in_group("ini_editor"): - inieditor.queue_free() - for vanillaeditor in get_tree().get_nodes_in_group("vanilla_editor"): - vanillaeditor.queue_free() - OpenFileName.clear() - OpenFileList.clear() + for inieditor in get_tree().get_nodes_in_group("ini_editor"): + inieditor.queue_free() + for vanillaeditor in get_tree().get_nodes_in_group("vanilla_editor"): + vanillaeditor.queue_free() + OpenFileName.clear() + OpenFileList.clear() func csv_preview(): - var preview = Preview.instance() - get_parent().get_parent().get_parent().add_child(preview) - preview.popup() - preview.window_title += " ("+current_file_path.get_file()+")" - var lines = current_editor.get_node("TextEditor").get_line_count() - var rows = [] - for i in range(0,lines-1): - rows.append(current_editor.get_node("TextEditor").get_line(i).rsplit(",",false)) - preview.print_csv(rows) + var preview = Preview.instance() + get_parent().get_parent().get_parent().add_child(preview) + preview.popup() + preview.window_title += " ("+current_file_path.get_file()+")" + var lines = current_editor.get_node("TextEditor").get_line_count() + var rows = [] + for i in range(0,lines-1): + rows.append(current_editor.get_node("TextEditor").get_line(i).rsplit(",",false)) + preview.print_csv(rows) func bbcode_preview(): - var preview = Preview.instance() - get_parent().get_parent().get_parent().add_child(preview) - preview.popup() - preview.window_title += " ("+current_file_path.get_file()+")" - preview.print_bb(current_editor.get_node("TextEditor").get_text()) + var preview = Preview.instance() + get_parent().get_parent().get_parent().add_child(preview) + preview.popup() + preview.window_title += " ("+current_file_path.get_file()+")" + preview.print_bb(current_editor.get_node("TextEditor").get_text()) func markdown_preview(): - var preview = Preview.instance() - get_parent().get_parent().get_parent().add_child(preview) - preview.popup() - preview.window_title += " ("+current_file_path.get_file()+")" - preview.print_markdown(current_editor.get_node("TextEditor").get_text()) + var preview = Preview.instance() + get_parent().get_parent().get_parent().add_child(preview) + preview.popup() + preview.window_title += " ("+current_file_path.get_file()+")" + preview.print_markdown(current_editor.get_node("TextEditor").get_text()) func html_preview(): - var preview = Preview.instance() - get_parent().get_parent().get_parent().add_child(preview) - preview.popup() - preview.window_title += " ("+current_file_path.get_file()+")" - preview.print_html(current_editor.get_node("TextEditor").get_text()) + var preview = Preview.instance() + get_parent().get_parent().get_parent().add_child(preview) + preview.popup() + preview.window_title += " ("+current_file_path.get_file()+")" + preview.print_html(current_editor.get_node("TextEditor").get_text()) func xml_preview(): - pass + pass func json_preview(): - pass + pass func _on_vanillaeditor_text_changed(): - if not OpenFileList.get_item_text(current_file_index).ends_with("(*)"): - OpenFileList.set_item_text(current_file_index,OpenFileList.get_item_text(current_file_index)+"(*)") + if not OpenFileList.get_item_text(current_file_index).ends_with("(*)"): + OpenFileList.set_item_text(current_file_index,OpenFileList.get_item_text(current_file_index)+"(*)") func update_list(): - FileList.invalidate() + FileList.invalidate() func on_wrap_button(index:int): - match index: - 0: - current_editor.set_wrap_enabled(false) - 1: - current_editor.set_wrap_enabled(true) + match index: + 0: + current_editor.set_wrap_enabled(false) + 1: + current_editor.set_wrap_enabled(true) func on_minimap_button(index:int): - match index: - 0: - current_editor.draw_minimap(false) - 1: - current_editor.draw_minimap(true) + match index: + 0: + current_editor.draw_minimap(false) + 1: + current_editor.draw_minimap(true) func check_file_preview(file : String): - # check whether the opened file has a corresponding preview session for its extension - pass + # check whether the opened file has a corresponding preview session for its extension + pass diff --git a/addons/file-editor/scripts/IniVisualEditor.gd b/addons/file-editor/scripts/IniVisualEditor.gd index 16dca8e..3e0d642 100644 --- a/addons/file-editor/scripts/IniVisualEditor.gd +++ b/addons/file-editor/scripts/IniVisualEditor.gd @@ -26,259 +26,259 @@ var current_file_path : String = "" signal update_file() func _ready(): - create_table_names() - connect_signals() - load_icons() - clean_editor() - - add_to_group("ini_editor") - + create_table_names() + connect_signals() + load_icons() + clean_editor() + + add_to_group("ini_editor") + # var metadata = [["name","Godot Engine"],["version","1.0.0"],["color","Light Blue"]] # load_section("Engine", metadata) func connect_signals(): - Sections.connect("item_selected",self,"_on_section_selected") - Sections.connect("nothing_selected",self,"_on_nosection_selected") - - BtnAddSection.connect("pressed",self,"_on_addsection_pressed") - BtnRemoveSection.connect("pressed",self,"_on_removesection_pressed") - - Keys.connect("item_selected",self,"_on_key_selected") - Keys.connect("nothing_selected",self,"_on_nokey_selected") - - BtnAddKey.connect("pressed",self,"_on_addkey_pressed") - BtnRemoveKey.connect("pressed",self,"_on_removekey_pressed") - BtnEditKey.connect("pressed",self,"_on_editkey_pressed") - - connect("visibility_changed",self,"_on_visibility_changed") + Sections.connect("item_selected",self,"_on_section_selected") + Sections.connect("nothing_selected",self,"_on_nosection_selected") + + BtnAddSection.connect("pressed",self,"_on_addsection_pressed") + BtnRemoveSection.connect("pressed",self,"_on_removesection_pressed") + + Keys.connect("item_selected",self,"_on_key_selected") + Keys.connect("nothing_selected",self,"_on_nokey_selected") + + BtnAddKey.connect("pressed",self,"_on_addkey_pressed") + BtnRemoveKey.connect("pressed",self,"_on_removekey_pressed") + BtnEditKey.connect("pressed",self,"_on_editkey_pressed") + + connect("visibility_changed",self,"_on_visibility_changed") func create_table_names(): - create_root() - Keys.hide_root = true - - Keys.set_column_titles_visible(true) - Keys.set_column_title(0,"Name") - Keys.set_column_title(1,"Value") + create_root() + Keys.hide_root = true + + Keys.set_column_titles_visible(true) + Keys.set_column_title(0,"Name") + Keys.set_column_title(1,"Value") func load_icons(): - $VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/sections_icon.texture = IconLoader.load_icon_from_name("sections") - $VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer2/keys_icon.texture = IconLoader.load_icon_from_name("keys") - BtnAddSection.icon = IconLoader.load_icon_from_name("add") - BtnAddSection.hint_tooltip = "Add a new Section" - BtnRemoveSection.icon = IconLoader.load_icon_from_name("delete") - BtnRemoveSection.hint_tooltip = "Remove selected Section" - - BtnAddKey.icon = IconLoader.load_icon_from_name("add") - BtnAddKey.hint_tooltip = "Add a new Key" - BtnRemoveKey.icon = IconLoader.load_icon_from_name("delete") - BtnRemoveKey.hint_tooltip = "Remove selected Key" - BtnEditKey.icon = IconLoader.load_icon_from_name("edit_") - BtnEditKey.hint_tooltip = "Edit selected Key" + $VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/sections_icon.texture = IconLoader.load_icon_from_name("sections") + $VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer2/keys_icon.texture = IconLoader.load_icon_from_name("keys") + BtnAddSection.icon = IconLoader.load_icon_from_name("add") + BtnAddSection.hint_tooltip = "Add a new Section" + BtnRemoveSection.icon = IconLoader.load_icon_from_name("delete") + BtnRemoveSection.hint_tooltip = "Remove selected Section" + + BtnAddKey.icon = IconLoader.load_icon_from_name("add") + BtnAddKey.hint_tooltip = "Add a new Key" + BtnRemoveKey.icon = IconLoader.load_icon_from_name("delete") + BtnRemoveKey.hint_tooltip = "Remove selected Key" + BtnEditKey.icon = IconLoader.load_icon_from_name("edit_") + BtnEditKey.hint_tooltip = "Edit selected Key" func _on_addsection_pressed(): - Section.get_node("Container/section/_name").show() - Section.window_title = "Add a new Section" - if not Section.is_connected("confirmed",self,"new_section"): - Section.connect("confirmed",self,"new_section") - if Section.is_connected("confirmed",self,"remove_section"): - Section.disconnect("confirmed",self,"remove_section") - Section.popup() + Section.get_node("Container/section/_name").show() + Section.window_title = "Add a new Section" + if not Section.is_connected("confirmed",self,"new_section"): + Section.connect("confirmed",self,"new_section") + if Section.is_connected("confirmed",self,"remove_section"): + Section.disconnect("confirmed",self,"remove_section") + Section.popup() func _on_removesection_pressed(): - Section.get_node("Container").hide() - Section.window_title = "Remove selected Section" - Section.dialog_text = "Are you sure you want to remove this Section?" - if not Section.is_connected("confirmed",self,"remove_section"): - Section.connect("confirmed",self,"remove_section") - if Section.is_connected("confirmed",self,"new_section"): - Section.disconnect("confirmed",self,"new_section") - Section.popup() + Section.get_node("Container").hide() + Section.window_title = "Remove selected Section" + Section.dialog_text = "Are you sure you want to remove this Section?" + if not Section.is_connected("confirmed",self,"remove_section"): + Section.connect("confirmed",self,"remove_section") + if Section.is_connected("confirmed",self,"new_section"): + Section.disconnect("confirmed",self,"new_section") + Section.popup() func _on_addkey_pressed(): - Key.get_node("data").show() - Key.get_node("data/HBoxContainer/name").editable = true - Key.get_node("data/HBoxContainer/name").set_text("") - Key.window_title = "Add a new Key" - Key.dialog_text = "" - if not Key.is_connected("confirmed",self,"new_key"): - Key.connect("confirmed",self,"new_key") - if Key.is_connected("confirmed",self,"edit_key"): - Key.disconnect("confirmed",self,"edit_key") - if Key.is_connected("confirmed",self,"remove_key"): - Key.disconnect("confirmed",self,"remove_key") - Key.popup() + Key.get_node("data").show() + Key.get_node("data/HBoxContainer/name").editable = true + Key.get_node("data/HBoxContainer/name").set_text("") + Key.window_title = "Add a new Key" + Key.dialog_text = "" + if not Key.is_connected("confirmed",self,"new_key"): + Key.connect("confirmed",self,"new_key") + if Key.is_connected("confirmed",self,"edit_key"): + Key.disconnect("confirmed",self,"edit_key") + if Key.is_connected("confirmed",self,"remove_key"): + Key.disconnect("confirmed",self,"remove_key") + Key.popup() func _on_removekey_pressed(): - Key.get_node("data").hide() - Key.window_title = "Delete selected Key" - Key.dialog_text = "Are you sure you want to remove the selected Key?" - if not Key.is_connected("confirmed",self,"remove_key"): - Key.connect("confirmed",self,"remove_key") - if Key.is_connected("confirmed",self,"edit_key"): - Key.disconnect("confirmed",self,"edit_key") - if Key.is_connected("confirmed",self,"new_key"): - Key.disconnect("confirmed",self,"new_key") - Key.popup() + Key.get_node("data").hide() + Key.window_title = "Delete selected Key" + Key.dialog_text = "Are you sure you want to remove the selected Key?" + if not Key.is_connected("confirmed",self,"remove_key"): + Key.connect("confirmed",self,"remove_key") + if Key.is_connected("confirmed",self,"edit_key"): + Key.disconnect("confirmed",self,"edit_key") + if Key.is_connected("confirmed",self,"new_key"): + Key.disconnect("confirmed",self,"new_key") + Key.popup() func _on_editkey_pressed(): - Key.get_node("data").show() - Key.get_node("data/HBoxContainer/name").editable = false - Key.get_node("data/HBoxContainer/name").set_text(str(selected_key.get_text(0))) - Key.get_node("data/HBoxContainer2/value").set_text(str(selected_key.get_text(1))) - Key.window_title = "Edit selected Key" - Key.dialog_text = "" - if not Key.is_connected("confirmed",self,"edit_key"): - Key.connect("confirmed",self,"edit_key") - if Key.is_connected("confirmed",self,"remove_key"): - Key.disconnect("confirmed",self,"remove_key") - if Key.is_connected("confirmed",self,"new_key"): - Key.disconnect("confirmed",self,"new_key") - Key.popup() + Key.get_node("data").show() + Key.get_node("data/HBoxContainer/name").editable = false + Key.get_node("data/HBoxContainer/name").set_text(str(selected_key.get_text(0))) + Key.get_node("data/HBoxContainer2/value").set_text(str(selected_key.get_text(1))) + Key.window_title = "Edit selected Key" + Key.dialog_text = "" + if not Key.is_connected("confirmed",self,"edit_key"): + Key.connect("confirmed",self,"edit_key") + if Key.is_connected("confirmed",self,"remove_key"): + Key.disconnect("confirmed",self,"remove_key") + if Key.is_connected("confirmed",self,"new_key"): + Key.disconnect("confirmed",self,"new_key") + Key.popup() func clean_editor(): - Keys.clear() - Sections.clear() - selected_section = -1 - BtnAddKey.disabled = true - if current_file_path == "": - BtnAddSection.disabled = true - else: - BtnAddSection.disabled = false - BtnEditKey.disabled = true - BtnRemoveKey.disabled = true - BtnRemoveSection.disabled = true - - create_root() + Keys.clear() + Sections.clear() + selected_section = -1 + BtnAddKey.disabled = true + if current_file_path == "": + BtnAddSection.disabled = true + else: + BtnAddSection.disabled = false + BtnEditKey.disabled = true + BtnRemoveKey.disabled = true + BtnRemoveSection.disabled = true + + create_root() func open_file(filemap : Array): - clean_editor() - for section in filemap: - load_sections(section[0],section[1]) + clean_editor() + for section in filemap: + load_sections(section[0],section[1]) func new_section(): - var file = ConfigFile.new() - file.load(current_file_path) - - var section_name = str(Section.get_node("Container/section/_name").get_text()) - var key_name = str(Section.get_node("Container/key/_name").get_text()) - var key_value = Section.get_node("Container/value/_value").get_text() - - if section_name and key_name and key_value: - file.set_value(section_name,key_name,key_value) - file.save(current_file_path) - - load_sections(section_name,[[key_name,key_value]]) - - emit_signal("update_file") - else: - print("Section <",section_name,"> with Key name: <",key_name,"> and Key value: <",key_value,"> not valid.") + var file = ConfigFile.new() + file.load(current_file_path) + + var section_name = str(Section.get_node("Container/section/_name").get_text()) + var key_name = str(Section.get_node("Container/key/_name").get_text()) + var key_value = Section.get_node("Container/value/_value").get_text() + + if section_name and key_name and key_value: + file.set_value(section_name,key_name,key_value) + file.save(current_file_path) + + load_sections(section_name,[[key_name,key_value]]) + + emit_signal("update_file") + else: + print("Section <",section_name,"> with Key name: <",key_name,"> and Key value: <",key_value,"> not valid.") func remove_section(): - var file = ConfigFile.new() - file.load(current_file_path) - var current_section = Sections.get_item_text(selected_section) - file.erase_section(current_section) - Sections.remove_item(selected_section) - file.save(current_file_path) - - emit_signal("update_file") + var file = ConfigFile.new() + file.load(current_file_path) + var current_section = Sections.get_item_text(selected_section) + file.erase_section(current_section) + Sections.remove_item(selected_section) + file.save(current_file_path) + + emit_signal("update_file") func new_key(): - var key_name = str(Key.get_node("data/HBoxContainer/name").get_text()) - var key_value = Key.get_node("data/HBoxContainer2/value").get_text() - if key_name and key_value: - - var file = ConfigFile.new() - file.load(current_file_path) - - var current_section = Sections.get_item_text(selected_section) - - file.set_value(current_section,key_name,key_value) - file.save(current_file_path) - - load_keys_selected_section([[key_name,key_value]]) - - file.save(current_file_path) - - emit_signal("update_file") - else: - print("Key name: <",key_name,"> with Key value: <",key_value,"> not valid.") + var key_name = str(Key.get_node("data/HBoxContainer/name").get_text()) + var key_value = Key.get_node("data/HBoxContainer2/value").get_text() + if key_name and key_value: + + var file = ConfigFile.new() + file.load(current_file_path) + + var current_section = Sections.get_item_text(selected_section) + + file.set_value(current_section,key_name,key_value) + file.save(current_file_path) + + load_keys_selected_section([[key_name,key_value]]) + + file.save(current_file_path) + + emit_signal("update_file") + else: + print("Key name: <",key_name,"> with Key value: <",key_value,"> not valid.") func remove_key(): - var section = Sections.get_item_text(selected_section) - var sectionmetadata = Sections.get_item_metadata(selected_section) - - for meta in sectionmetadata: - if meta.has(selected_key.get_text(0)): - sectionmetadata.erase(meta) - - Sections.set_item_metadata(selected_section,sectionmetadata) - - if Sections.get_item_metadata(selected_section) == []: - Sections.remove_item(selected_section) - - var file = ConfigFile.new() - file.load(current_file_path) - file.set_value(section,selected_key.get_text(0),null) - file.save(current_file_path) - - Keys.clear() - create_root() - load_keys_selected_section(sectionmetadata) - - emit_signal("update_file") + var section = Sections.get_item_text(selected_section) + var sectionmetadata = Sections.get_item_metadata(selected_section) + + for meta in sectionmetadata: + if meta.has(selected_key.get_text(0)): + sectionmetadata.erase(meta) + + Sections.set_item_metadata(selected_section,sectionmetadata) + + if Sections.get_item_metadata(selected_section) == []: + Sections.remove_item(selected_section) + + var file = ConfigFile.new() + file.load(current_file_path) + file.set_value(section,selected_key.get_text(0),null) + file.save(current_file_path) + + Keys.clear() + create_root() + load_keys_selected_section(sectionmetadata) + + emit_signal("update_file") func edit_key(): - remove_key() - new_key() + remove_key() + new_key() # load a section with custom fields @section_name = name of section ; @section_metadata = keys of this section with keys' properties func load_sections(section_name : String, section_metadata : Array): - Sections.add_item(section_name,IconLoader.load_icon_from_name("section"),true) - Sections.set_item_metadata(Sections.get_item_count()-1,section_metadata) + Sections.add_item(section_name,IconLoader.load_icon_from_name("section"),true) + Sections.set_item_metadata(Sections.get_item_count()-1,section_metadata) # load a key of a selected section to fill the "keys" list func load_keys_selected_section(metadata : Array): - for key in metadata: - var key_item = Keys.create_item(root) - key_item.set_text(0,key[0]) - key_item.set_text(1,key[1]) + for key in metadata: + var key_item = Keys.create_item(root) + key_item.set_text(0,key[0]) + key_item.set_text(1,key[1]) func _on_section_selected(index : int): - Keys.clear() - create_root() - BtnRemoveSection.disabled = false - BtnAddSection.disabled = false - BtnAddKey.disabled = false - BtnRemoveKey.disabled = true - BtnEditKey.disabled = true - - selected_section = index - if Sections.get_item_metadata(index): - load_keys_selected_section(Sections.get_item_metadata(index)) + Keys.clear() + create_root() + BtnRemoveSection.disabled = false + BtnAddSection.disabled = false + BtnAddKey.disabled = false + BtnRemoveKey.disabled = true + BtnEditKey.disabled = true + + selected_section = index + if Sections.get_item_metadata(index): + load_keys_selected_section(Sections.get_item_metadata(index)) func _on_key_selected(): - selected_key = Keys.get_selected() - BtnRemoveKey.disabled = false - BtnEditKey.disabled = false + selected_key = Keys.get_selected() + BtnRemoveKey.disabled = false + BtnEditKey.disabled = false func _on_nosection_selected(): - BtnRemoveKey.disabled = true - BtnAddKey.disabled = true - BtnEditKey.disabled = true - BtnRemoveSection.disabled = true - Keys.clear() - selected_section = -1 + BtnRemoveKey.disabled = true + BtnAddKey.disabled = true + BtnEditKey.disabled = true + BtnRemoveSection.disabled = true + Keys.clear() + selected_section = -1 func _on_nokey_selected(): - BtnRemoveKey.disabled = true - BtnEditKey.disabled = true + BtnRemoveKey.disabled = true + BtnEditKey.disabled = true func create_root(): - root = Keys.create_item() - root.set_text(0,"KEY_NAME") - root.set_text(1,"KEY_VALUE") + root = Keys.create_item() + root.set_text(0,"KEY_NAME") + root.set_text(1,"KEY_VALUE") func _on_visibility_changed(): - if visible: - pass + if visible: + pass diff --git a/addons/file-editor/scripts/LastOpenedFiles.gd b/addons/file-editor/scripts/LastOpenedFiles.gd index 41ac87a..e47f517 100644 --- a/addons/file-editor/scripts/LastOpenedFiles.gd +++ b/addons/file-editor/scripts/LastOpenedFiles.gd @@ -26,8 +26,17 @@ func load_opened_files() -> Array: var file = ConfigFile.new() file.load(lastopenedfile_path) var keys = [] + # Load opened files if file.has_section("Opened"): var openedfiles = file.get_section_keys("Opened") for openedfile in openedfiles: - keys.append([openedfile,file.get_value("Opened",openedfile)]) + # Load each single file which was opened + # creating and returning an Array with this format [1:file name, 2:file path, 3:file font] + keys.append([openedfile, file.get_value("Opened",openedfile), file.get_value("Fonts",openedfile) if file.has_section_key("Fonts",openedfile) else "null"]) return keys + +func store_editor_fonts(file_name : String, font_path : String): + var file = ConfigFile.new() + file.load(lastopenedfile_path) + file.set_value("Fonts",file_name,font_path) + file.save(lastopenedfile_path) diff --git a/addons/file-editor/scripts/VanillaEditor.gd b/addons/file-editor/scripts/VanillaEditor.gd index 73ca287..4068a3e 100644 --- a/addons/file-editor/scripts/VanillaEditor.gd +++ b/addons/file-editor/scripts/VanillaEditor.gd @@ -40,6 +40,13 @@ func _ready(): add_to_group("vanilla_editor") +func set_font(font_path : String) -> void: + var dynamic_font : DynamicFont = DynamicFont.new() + var dynamic_font_data : DynamicFontData = DynamicFontData.new() + dynamic_font_data.set_font_path(font_path) + dynamic_font.set_font_data(dynamic_font_data) + TextEditor.set("custom_fonts/font",dynamic_font) + func set_wrap_enabled(enabled:bool): TextEditor.set_wrap_enabled(enabled) TextEditor.update()