Merge pull request #7 from fenix-hub/v1.4.3

V1.4.3
This commit is contained in:
fenix-hub 2019-10-08 00:29:48 +02:00 committed by GitHub
commit f8c5e31334
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 1855 additions and 386 deletions

View File

@ -1,11 +1,13 @@
Check my **[Discord](https://discord.gg/KnJGY9S)** to stay updated on this repository.
*(Recommended since the AssetLibrary is not automatically updated)*
This plugin is now supported in [Godot Extended Libraries Discord](https://discord.gg/JNrcucg), check out the [Godot Extended Libraries Project](https://github.com/godot-extended-libraries)!
# Godot Text Editor
A little plugin to easy-way manage your text files inside your project folder.
Author: *"Nicolo (fenix) Santilio"*
Version: *1.2.1*
Version: *1.4.3*
Godot Version: *3.1.1-stable*
**This repository was pushed directly from Godot Engine Editor thanks to [GitHub Integration](https://github.com/fenix-hub/godot-engine.github-integration)!**
@ -19,7 +21,7 @@ When opening / creating a file, the editor will open and you will be able to edi
You can just *Save* the file, or *Save file As* a new file (if it is a new file but also to make some copies).
You will also be able to see some informations about the file you are editing (time and date of last edit) and you can set your editor to *Read Only* if you don't want to make changes but still read the content of the file.
Multiple files can be opened in different tabs.
![preview](https://i.imgur.com/LcrGCGS.png)
![preview1](https://i.imgur.com/mlh1rOX.png)![preview2](https://i.imgur.com/od5nQff.png)
## How do I install it?
**Manual**
@ -45,14 +47,17 @@ You can find this plugin in the AssetLib of Godot Engine Editor. Just download i
+ "*.sql ; SQL database file",
+ "*.json ; JavaScript Object Notation File",
+ "*.html ; HyperText Markup Language"
+ "*.cfg ; Configuration File"
+ "*.ini ; Initialization File (same as .cfg Configuration File)"
#### Current version
To check all the features included in the current version, please read the [VERSION file](./VERSION.md)
#### Upcoming features
To check all the features I'm currently working on, please read the [TODO](https://github.com/fenix-hub/godot-engine.text-editor/projects/1#column-6702439)
To check all the features I'm currently working on, please read the ["To Do" Column](https://github.com/fenix-hub/godot-engine.text-editor/projects/1#column-6702439)
# Disclaimer
This addon was built for a **personal use** intention. It was released as an open source plugin in the hope that it could be useful to the Godot Engine Community.
As a "work in progress" project, there is *no warranty* for any eventual issue and bug that may broke your project.
I don't assume any responsibility for possible corruptions of your project files. It is always advisable to keep a copy of your files and check any changes.

View File

@ -62,4 +62,26 @@
-----------------------
**version 1.4.3**
*removed*
- Old layout
*added*
- More supported files:
1. "*.cfg ; Configuration File",
2. "*.ini ; Initialization File (same as .cfg Configuration File)",
- Added some sample files
- Memorize system of last opened files
- Added *Editor* button , you can now choose which editor to use:
1. Vanilla Editor (simple text editor)
2. Cfg/Ini Editor (table editor for Cfg/Ini files)
Editors are automatically updated, so if you update a cfg/ini file in the Vanilla Editor it will be updated in the Cfg/Ini Editor, and viceversa
- Added editor shorcuts:
1. *Ctrl + N* (new file)
2. *Ctrl + O* (open file)
3. *Ctrl + Alt + C* (close file)
4. *Ctrl + S* (save file)
5. *Ctrl + Alt + S* (save file as...)
6. *Ctrl + D* (delete file)
7. *Ctrl + 1* (Vanilla Editor)
8. *Ctrl + 3* (Cfg/Ini Editor)

63
addons/README.md Normal file
View File

@ -0,0 +1,63 @@
Check my **[Discord](https://discord.gg/KnJGY9S)** to stay updated on this repository.
*(Recommended since the AssetLibrary is not automatically updated)*
This plugin is now supported in [Godot Extended Library Discord](https://discord.gg/JNrcucg), check out the [Godot Extended Library Project](https://github.com/godot-extended-libraries)!
# Godot Text Editor
A little plugin to easy-way manage your text files inside your project folder.
Author: *"Nicolo (fenix) Santilio"*
Version: *1.4.3*
Godot Version: *3.1.1-stable*
**This repository was pushed directly from Godot Engine Editor thanks to [GitHub Integration](https://github.com/fenix-hub/godot-engine.github-integration)!**
## What is this?
This is a little plugin I've made to easily edit text files in your project folder.
## How does it work?
You can open an existing file, create a new file and delete a file.
When opening / creating a file, the editor will open and you will be able to edit it and save it.
You can just *Save* the file, or *Save file As* a new file (if it is a new file but also to make some copies).
You will also be able to see some informations about the file you are editing (time and date of last edit) and you can set your editor to *Read Only* if you don't want to make changes but still read the content of the file.
Multiple files can be opened in different tabs.
![preview1](https://i.imgur.com/mlh1rOX.png)![preview2](https://i.imgur.com/od5nQff.png)
## How do I install it?
**Manual**
Just download this whole repository and put it in your `res://addons` folder inside the project you want to work on.
Then, go to `Project > Plugins > "File Editor" > Status > Activate`.
**Automatic**
You can find this plugin in the AssetLib of Godot Engine Editor. Just download it from there and everything should be fine!
(Remember to activate this plugin)
## Supported formats
+ "*.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"
+ "*.cfg ; Configuration File"
+ "*.ini ; Initialization File (same as .cfg Configuration File)"
#### Current version
To check all the features included in the current version, please read the [VERSION file](./VERSION.md)
#### Upcoming features
To check all the features I'm currently working on, please read the [TODO file](./TODO.md)
# Disclaimer
This addon was built for a **personal use** intention. It was released as an open source plugin in the hope that it could be useful to the Godot Engine Community.
As a "work in progress" project, there is *no warranty* for any eventual issue and bug that may broke your project.
I don't assume any responsibility for possible corruptions of your project files. It is always advisable to keep a copy of your files and check any changes.

87
addons/VERSION.md Normal file
View File

@ -0,0 +1,87 @@
**version 0.0.1**
*added*
- Plugin Created
-----------------------
**version 0.1.1**
*added*
- "Create new File" option
- "Open File" option
- "Delete File" option
- "Save File" option
- "Save File As.." option
-----------------------
**version 0.1.2**
*fixed*
- Repository Installation, folder order
-----------------------
**version 0.2.5**
*removed*
- Old layout
*added*
- New Layout
- Last modified time and date
- Tabs
-----------------------
**version 0.3.1**
*added*
- Version check
- Preview support
- Context menu in editor
- BBCode converter
- Light Mardkwon converter (DEMO)
-----------------------
**version 1.2.1**
*removed*
- Old layout, the plugin won't appear in docs
- Icons file extensions, plugin size reduced
- Old Mardkwon preview method
*added*
- More supported files
1. "*.dat ; Data File",
2. "*.xml ; XML File",
3. "*.sql ; SQL database file",
4. "*.json ; JavaScript Object Notation File",
5. "*.html ; HyperText Markup Language
- New Markdown preview method ( Markdown -> BBCode converter)
- New HTML preview method ( HTML -> BBCode converter)
- New Plugin Layout: a new ButtonTool "File" in you TopBar will appear
- Error check
- Message popups for closing unsaved files
-----------------------
**version 1.4.3**
*removed*
- Old layout
*added*
- More supported files:
1. "*.cfg ; Configuration File",
2. "*.ini ; Initialization File (same as .cfg Configuration File)",
- Added some sample files
- Memorize system of last opened files
- Added *Editor* button , you can now choose which editor to use:
1. Vanilla Editor (simple text editor)
2. Cfg/Ini Editor (table editor for Cfg/Ini files)
Editors are automatically updated, so if you update a cfg/ini file in the Vanilla Editor it will be updated in the Cfg/Ini Editor, and viceversa
- Added editor shorcuts:
1. *Ctrl + N* (new file)
2. *Ctrl + O* (open file)
3. *Ctrl + Alt + C* (close file)
4. *Ctrl + S* (save file)
5. *Ctrl + Alt + S* (save file as...)
6. *Ctrl + D* (delete file)
7. *Ctrl + 1* (Vanilla Editor)
8. *Ctrl + 3* (Cfg/Ini Editor)

View File

@ -1,11 +1,13 @@
Check my **[Discord](https://discord.gg/KnJGY9S)** to stay updated on this repository.
*(Recommended since the AssetLibrary is not automatically updated)*
This plugin is now supported in [Godot Extended Library Discord](https://discord.gg/JNrcucg), check out the [Godot Extended Library Project](https://github.com/godot-extended-libraries)!
# Godot Text Editor
A little plugin to easy-way manage your text files inside your project folder.
Author: *"Nicolo (fenix) Santilio"*
Version: *1.2.1*
Version: *1.4.3*
Godot Version: *3.1.1-stable*
**This repository was pushed directly from Godot Engine Editor thanks to [GitHub Integration](https://github.com/fenix-hub/godot-engine.github-integration)!**
@ -19,7 +21,7 @@ When opening / creating a file, the editor will open and you will be able to edi
You can just *Save* the file, or *Save file As* a new file (if it is a new file but also to make some copies).
You will also be able to see some informations about the file you are editing (time and date of last edit) and you can set your editor to *Read Only* if you don't want to make changes but still read the content of the file.
Multiple files can be opened in different tabs.
![preview](https://i.imgur.com/LcrGCGS.png)
![preview1](https://i.imgur.com/mlh1rOX.png)![preview2](https://i.imgur.com/od5nQff.png)
## How do I install it?
**Manual**
@ -45,6 +47,8 @@ You can find this plugin in the AssetLib of Godot Engine Editor. Just download i
+ "*.sql ; SQL database file",
+ "*.json ; JavaScript Object Notation File",
+ "*.html ; HyperText Markup Language"
+ "*.cfg ; Configuration File"
+ "*.ini ; Initialization File (same as .cfg Configuration File)"
#### Current version
To check all the features included in the current version, please read the [VERSION file](./VERSION.md)
@ -56,3 +60,4 @@ To check all the features I'm currently working on, please read the [TODO file](
This addon was built for a **personal use** intention. It was released as an open source plugin in the hope that it could be useful to the Godot Engine Community.
As a "work in progress" project, there is *no warranty* for any eventual issue and bug that may broke your project.
I don't assume any responsibility for possible corruptions of your project files. It is always advisable to keep a copy of your files and check any changes.

View File

@ -1,6 +1,4 @@
### to do (v-0.x.x)
- XML Tree Visualizer
- JSON Tree Visualizer
- CSV Table Visualizer
- .cfg support
- CFG Tree Visualizer
- Popup dialog when closing a tab if there is new content
- Module for markdown support/conversion

View File

@ -62,4 +62,26 @@
-----------------------
**version 1.4.3**
*removed*
- Old layout
*added*
- More supported files:
1. "*.cfg ; Configuration File",
2. "*.ini ; Initialization File (same as .cfg Configuration File)",
- Added some sample files
- Memorize system of last opened files
- Added *Editor* button , you can now choose which editor to use:
1. Vanilla Editor (simple text editor)
2. Cfg/Ini Editor (table editor for Cfg/Ini files)
Editors are automatically updated, so if you update a cfg/ini file in the Vanilla Editor it will be updated in the Cfg/Ini Editor, and viceversa
- Added editor shorcuts:
1. *Ctrl + N* (new file)
2. *Ctrl + O* (open file)
3. *Ctrl + Alt + C* (close file)
4. *Ctrl + S* (save file)
5. *Ctrl + Alt + S* (save file as...)
6. *Ctrl + D* (delete file)
7. *Ctrl + 1* (Vanilla Editor)
8. *Ctrl + 3* (Cfg/Ini Editor)

View File

@ -0,0 +1,8 @@
[b]bolded text[/b]
[i]italicized text[/i]
[u]underlined text[/u]
[s]strikethrough text[/s]
[url]https://en.wikipedia.org[/url]
[url=https://en.wikipedia.org]English Wikipedia[/url]
[code]monospaced text[/code]
left [center]center[/center] [right]right[/right]

View File

@ -0,0 +1,19 @@
[Locale]
Language="en"
[Version]
Major="2"
Minor="1"
Micro="3"
[Directories]
TempDir="C:\Users\Jon\AppData\Local\Audacity\SessionData"
[AudioIO]
RecordingDevice="Microphone (Blue Snowball)"
Host="MME"
PlaybackDevice="Speakers / Headphones (Realtek)"
EffectsPreviewLen="6"
CutPreviewBeforeLen="2"
CutPreviewAfterLen="1"
SeekShortPeriod="1"
SeekLongPeriod="15"
Duplex="1"
SWPlaythrough="0"

View File

@ -0,0 +1,7 @@
<b>bolded text</b>,
<i>italicized text</i>,
<ins>underlined text</ins>
<del>strikethrough text</del>
<a href="https://en.wikipedia.org">English Wikipedia</a>
<img src="res://addons/file-editor/icon.png"/>

View File

@ -0,0 +1,10 @@
; last modified 1 April 2001 by John Doe
[owner]
name="John Doe"
organization="Acme Widgets Inc."
[database]
; use IP address in case network name resolution is not working
server="192.0.2.62"
port="143"
file="payroll.dat"

View File

@ -0,0 +1,11 @@
*italic*
**bold**
`monospace`
~~strikethrough~~
[link](http://example.com)
![image](res://addons/file-editor/icon.png)
Shopping list:
- apples
- oranges
- pears

View File

@ -0,0 +1,120 @@
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
<book id="bk104">
<author>Corets, Eva</author>
<title>Oberon's Legacy</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2001-03-10</publish_date>
<description>In post-apocalypse England, the mysterious
agent known only as Oberon helps to create a new life
for the inhabitants of London. Sequel to Maeve
Ascendant.</description>
</book>
<book id="bk105">
<author>Corets, Eva</author>
<title>The Sundered Grail</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2001-09-10</publish_date>
<description>The two daughters of Maeve, half-sisters,
battle one another for control of England. Sequel to
Oberon's Legacy.</description>
</book>
<book id="bk106">
<author>Randall, Cynthia</author>
<title>Lover Birds</title>
<genre>Romance</genre>
<price>4.95</price>
<publish_date>2000-09-02</publish_date>
<description>When Carla meets Paul at an ornithology
conference, tempers fly as feathers get ruffled.</description>
</book>
<book id="bk107">
<author>Thurman, Paula</author>
<title>Splish Splash</title>
<genre>Romance</genre>
<price>4.95</price>
<publish_date>2000-11-02</publish_date>
<description>A deep sea diver finds true love twenty
thousand leagues beneath the sea.</description>
</book>
<book id="bk108">
<author>Knorr, Stefan</author>
<title>Creepy Crawlies</title>
<genre>Horror</genre>
<price>4.95</price>
<publish_date>2000-12-06</publish_date>
<description>An anthology of horror stories about roaches,
centipedes, scorpions and other insects.</description>
</book>
<book id="bk109">
<author>Kress, Peter</author>
<title>Paradox Lost</title>
<genre>Science Fiction</genre>
<price>6.95</price>
<publish_date>2000-11-02</publish_date>
<description>After an inadvertant trip through a Heisenberg
Uncertainty Device, James Salway discovers the problems
of being quantum.</description>
</book>
<book id="bk110">
<author>O'Brien, Tim</author>
<title>Microsoft .NET: The Programming Bible</title>
<genre>Computer</genre>
<price>36.95</price>
<publish_date>2000-12-09</publish_date>
<description>Microsoft's .NET initiative is explored in
detail in this deep programmer's reference.</description>
</book>
<book id="bk111">
<author>O'Brien, Tim</author>
<title>MSXML3: A Comprehensive Guide</title>
<genre>Computer</genre>
<price>36.95</price>
<publish_date>2000-12-01</publish_date>
<description>The Microsoft MSXML3 parser is covered in
detail, with attention to XML DOM interfaces, XSLT processing,
SAX and more.</description>
</book>
<book id="bk112">
<author>Galos, Mike</author>
<title>Visual Studio 7: A Comprehensive Guide</title>
<genre>Computer</genre>
<price>49.95</price>
<publish_date>2001-04-16</publish_date>
<description>Microsoft Visual Studio 7 is explored in depth,
looking at how Visual Basic, Visual C++, C#, and ASP+ are
integrated into a comprehensive development
environment.</description>
</book>
</catalog>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 889 B

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
addons/file-editor/icon.psd Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

View File

@ -0,0 +1,4 @@
[Opened]
sample.cfg="res://addons/file-editor/file.samples/sample.cfg"
README.md="res://addons/file-editor/README.md"

View File

@ -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.2.1"
version="1.4.3"
script="scripts/file-editor.gd"

View File

@ -1,105 +1,208 @@
[gd_scene load_steps=7 format=2]
[gd_scene load_steps=20 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]
[ext_resource path="res://addons/file-editor/scenes/VanillaEditor.tscn" type="PackedScene" id=3]
[ext_resource path="res://addons/file-editor/scenes/IniEditor.tscn" type="PackedScene" id=4]
[sub_resource type="DynamicFont" id=6]
[sub_resource type="Image" id=16]
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=3]
image = SubResource( 16 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=17]
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",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=5]
image = SubResource( 17 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=18]
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",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=7]
image = SubResource( 18 )
size = Vector2( 16, 16 )
[sub_resource type="DynamicFont" id=1]
size = 13
font_data = ExtResource( 2 )
[sub_resource type="StyleBoxFlat" id=7]
content_margin_left = 10.0
content_margin_right = 10.0
bg_color = Color( 0.196078, 0.231373, 0.309804, 1 )
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_color = Color( 0.121569, 0.145098, 0.192157, 1 )
expand_margin_bottom = 1.0
[sub_resource type="Image" id=19]
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="StyleBoxFlat" id=8]
content_margin_left = 10.0
content_margin_right = 10.0
bg_color = Color( 0.145098, 0.172549, 0.231373, 1 )
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_color = Color( 0.121569, 0.145098, 0.192157, 1 )
expand_margin_bottom = 1.0
[sub_resource type="ImageTexture" id=9]
image = SubResource( 19 )
size = Vector2( 16, 16 )
[sub_resource type="StyleBoxFlat" id=9]
bg_color = Color( 0.121569, 0.145098, 0.192157, 1 )
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
border_color = Color( 0.121569, 0.145098, 0.192157, 1 )
[sub_resource type="Image" id=20]
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=11]
image = SubResource( 20 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=21]
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=13]
image = SubResource( 21 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=22]
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=15]
image = SubResource( 22 )
size = Vector2( 16, 16 )
[node name="FileEditor" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 7.0
margin_right = -6.0
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource( 1 )
[node name="Container" type="VBoxContainer" parent="."]
[node name="FileEditorContainer" type="VBoxContainer" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 6.0
margin_right = -5.0
margin_bottom = -7.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="Buttons" type="HBoxContainer" parent="Container"]
margin_right = 1013.0
margin_bottom = 20.0
[node name="TobBar" type="HBoxContainer" parent="FileEditorContainer"]
margin_right = 1000.0
margin_bottom = 22.0
[node name="newfile_btn" type="Button" parent="Container/Buttons"]
margin_right = 110.0
margin_bottom = 20.0
text = "Create new File"
flat = true
[node name="file_btn" type="MenuButton" parent="FileEditorContainer/TobBar"]
margin_right = 54.0
margin_bottom = 22.0
text = "File"
icon = SubResource( 3 )
items = [ "New File", null, 0, false, false, 0, 268435534, null, "", false, "Open File", null, 0, false, false, 1, 268435535, null, "", false, "Close File", null, 0, false, false, 2, 335544387, null, "", false, "", null, 0, false, false, -1, 0, null, "", true, "Save File", null, 0, false, false, 3, 268435539, null, "", false, "Save File as...", null, 0, false, false, 4, 335544403, null, "", false, "Delete File", null, 0, false, false, 5, 268435524, null, "", false ]
[node name="openfile_btn" type="Button" parent="Container/Buttons"]
margin_left = 114.0
margin_right = 188.0
margin_bottom = 20.0
text = "Open File"
flat = true
[node name="editor_btn" type="MenuButton" parent="FileEditorContainer/TobBar"]
margin_left = 58.0
margin_right = 126.0
margin_bottom = 22.0
text = "Editor"
icon = SubResource( 5 )
items = [ "Vanilla Editor", null, 0, false, false, 0, 268435505, null, "", false, "CSV Editor", null, 0, false, false, 1, 0, null, "", false, "CFG/INI Editor", null, 0, false, false, 2, 268435507, null, "", false ]
[node name="deletefile_btn" type="Button" parent="Container/Buttons"]
margin_left = 192.0
margin_right = 274.0
margin_bottom = 20.0
text = "Delete File"
flat = true
[node name="preview_btn" type="MenuButton" parent="FileEditorContainer/TobBar"]
margin_left = 130.0
margin_right = 211.0
margin_bottom = 22.0
text = "Preview"
icon = SubResource( 7 )
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", null, 0, false, false, 3, 0, null, "", false, "XML Preview", null, 0, false, false, 4, 0, null, "", false, "JSON Preview", null, 0, false, false, 5, 0, null, "", false ]
[node name="version" type="Label" parent="Container/Buttons"]
margin_left = 974.0
margin_top = 1.0
margin_right = 1013.0
margin_bottom = 18.0
[node name="version" type="Label" parent="FileEditorContainer/TobBar"]
margin_left = 961.0
margin_top = 2.0
margin_right = 1000.0
margin_bottom = 19.0
size_flags_horizontal = 10
custom_fonts/font = SubResource( 6 )
custom_fonts/font = SubResource( 1 )
custom_colors/font_color = Color( 0.121569, 0.145098, 0.192157, 1 )
text = "v1.2.1"
align = 1
[node name="Editor" type="TabContainer" parent="Container"]
visible = false
[node name="SplitContainer" type="HSplitContainer" parent="FileEditorContainer"]
margin_top = 26.0
margin_right = 1000.0
margin_bottom = 600.0
size_flags_horizontal = 3
size_flags_vertical = 11
custom_styles/tab_fg = SubResource( 7 )
custom_styles/tab_bg = SubResource( 8 )
custom_styles/panel = SubResource( 9 )
custom_colors/font_color_fg = Color( 1, 1, 1, 1 )
tab_align = 0
drag_to_rearrange_enabled = true
size_flags_vertical = 3
split_offset = 150
[node name="BoxContainer" type="VBoxContainer" parent="FileEditorContainer/SplitContainer"]
margin_right = 208.0
margin_bottom = 574.0
[node name="OpenFileName" type="LineEdit" parent="FileEditorContainer/SplitContainer/BoxContainer"]
margin_right = 208.0
margin_bottom = 24.0
mouse_filter = 2
text = "res://sample.html"
context_menu_enabled = false
[node name="OpenFileList" type="ItemList" parent="FileEditorContainer/SplitContainer/BoxContainer"]
margin_top = 28.0
margin_right = 208.0
margin_bottom = 570.0
size_flags_vertical = 3
items = [ "sample.bbs", SubResource( 9 ), false, "sample.xml", SubResource( 11 ), false, "sample.md", SubResource( 13 ), false, "sample.html", SubResource( 15 ), false ]
allow_reselect = true
[node name="HSeparator" type="HSeparator" parent="FileEditorContainer/SplitContainer/BoxContainer"]
margin_top = 574.0
margin_right = 208.0
margin_bottom = 574.0
rect_min_size = Vector2( 2, 0 )
custom_constants/separation = 0
[node name="VanillaEditor" parent="FileEditorContainer/SplitContainer" instance=ExtResource( 3 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 220.0
margin_right = 1000.0
margin_bottom = 574.0
[node name="IniEditor" parent="FileEditorContainer/SplitContainer" instance=ExtResource( 4 )]
visible = false
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 220.0
margin_right = 1000.0
margin_bottom = 576.0
[node name="FileList" type="FileDialog" parent="."]
margin_top = 24.0
@ -108,10 +211,9 @@ margin_bottom = 600.0
size_flags_vertical = 3
popup_exclusive = true
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" )
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)" )
[node name="NewFileDialogue" type="AcceptDialog" parent="."]
editor/display_folded = true
margin_left = 348.254
margin_top = 232.623
margin_right = 644.254
@ -157,8 +259,3 @@ 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="VSeparator" type="VSeparator" parent="."]
visible = false
anchor_bottom = 1.0
margin_right = 24.0

View File

@ -0,0 +1,369 @@
[gd_scene load_steps=16 format=2]
[ext_resource path="res://addons/file-editor/scripts/IniVisualEditor.gd" type="Script" id=1]
[sub_resource type="Image" id=15]
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, 224, 224, 224, 255, 224, 224, 224, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=2]
image = SubResource( 15 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=16]
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, 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, 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, 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, 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, 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, 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, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 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, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 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, 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, 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, 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, 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, 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, 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 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=4]
image = SubResource( 16 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=17]
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, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 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, 254, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 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, 254, 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, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 254, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 64, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=6]
image = SubResource( 17 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=18]
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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 142, 224, 224, 224, 238, 224, 224, 224, 238, 224, 224, 224, 174, 224, 224, 224, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 32, 224, 224, 224, 238, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 48, 0, 0, 0, 0, 0, 0, 0, 0, 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, 158, 224, 224, 224, 254, 224, 224, 224, 190, 224, 224, 224, 48, 224, 224, 224, 32, 224, 224, 224, 190, 224, 224, 224, 254, 224, 224, 224, 158, 0, 0, 0, 0, 0, 0, 0, 0, 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, 254, 224, 224, 224, 254, 224, 224, 224, 32, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 32, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 158, 224, 224, 224, 254, 224, 224, 224, 190, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 158, 224, 224, 224, 254, 224, 224, 224, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 32, 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, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 158, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 190, 224, 224, 224, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=8]
image = SubResource( 18 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=19]
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, 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, 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, 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, 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, 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, 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, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 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, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 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, 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, 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, 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, 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, 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, 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 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=10]
image = SubResource( 19 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=20]
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",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=12]
image = SubResource( 20 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=21]
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, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 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, 254, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 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, 254, 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, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 254, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 64, 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, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=14]
image = SubResource( 21 )
size = Vector2( 16, 16 )
[node name="IniEditor" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
script = ExtResource( 1 )
[node name="VBoxContainer" type="VBoxContainer" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
[node name="HSplitContainer" type="HSplitContainer" parent="VBoxContainer"]
margin_right = 1024.0
margin_bottom = 595.0
size_flags_vertical = 3
split_offset = 100
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HSplitContainer"]
margin_right = 174.0
margin_bottom = 595.0
size_flags_vertical = 3
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer"]
editor/display_folded = true
margin_right = 174.0
margin_bottom = 16.0
[node name="sections_icon" type="TextureRect" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer"]
margin_right = 16.0
margin_bottom = 16.0
texture = SubResource( 2 )
[node name="Label" type="Label" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer"]
margin_left = 20.0
margin_top = 1.0
margin_right = 174.0
margin_bottom = 15.0
size_flags_horizontal = 7
text = "Sections"
[node name="sections2" type="ItemList" parent="VBoxContainer/HSplitContainer/VBoxContainer"]
margin_top = 20.0
margin_right = 174.0
margin_bottom = 567.0
size_flags_vertical = 3
allow_reselect = true
auto_height = true
same_column_width = true
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer"]
editor/display_folded = true
margin_top = 571.0
margin_right = 174.0
margin_bottom = 595.0
alignment = 1
[node name="btn_add_section" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer2"]
margin_left = 57.0
margin_right = 85.0
margin_bottom = 24.0
hint_tooltip = "Add a new Section"
icon = SubResource( 4 )
[node name="btn_remove_section" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer2"]
margin_left = 89.0
margin_right = 117.0
margin_bottom = 24.0
hint_tooltip = "Remove selected Section"
icon = SubResource( 6 )
[node name="VBoxContainer2" type="VBoxContainer" parent="VBoxContainer/HSplitContainer"]
editor/display_folded = true
margin_left = 186.0
margin_right = 1024.0
margin_bottom = 595.0
size_flags_vertical = 3
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer2"]
margin_right = 838.0
margin_bottom = 16.0
[node name="keys_icon" type="TextureRect" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer2"]
margin_right = 16.0
margin_bottom = 16.0
texture = SubResource( 8 )
[node name="Label" type="Label" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer2"]
margin_left = 20.0
margin_top = 1.0
margin_right = 838.0
margin_bottom = 15.0
size_flags_horizontal = 7
text = "Keys"
[node name="keys" type="Tree" parent="VBoxContainer/HSplitContainer/VBoxContainer2"]
margin_top = 20.0
margin_right = 838.0
margin_bottom = 567.0
size_flags_vertical = 3
columns = 2
allow_reselect = true
hide_folding = true
select_mode = 1
[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer2"]
editor/display_folded = true
margin_top = 571.0
margin_right = 838.0
margin_bottom = 595.0
alignment = 1
[node name="btn_add_key" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3"]
margin_left = 373.0
margin_right = 401.0
margin_bottom = 24.0
hint_tooltip = "Add a new Key"
icon = SubResource( 10 )
[node name="btn_edit_key" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3"]
margin_left = 405.0
margin_right = 433.0
margin_bottom = 24.0
hint_tooltip = "Edit selected Key"
icon = SubResource( 12 )
[node name="btn_remove_key" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3"]
margin_left = 437.0
margin_right = 465.0
margin_bottom = 24.0
hint_tooltip = "Remove selected Key"
icon = SubResource( 14 )
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
margin_top = 599.0
margin_right = 1024.0
margin_bottom = 600.0
rect_min_size = Vector2( 0, 1 )
custom_constants/separation = 0
[node name="Section" type="AcceptDialog" parent="."]
editor/display_folded = true
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -153.0
margin_top = -29.0
margin_right = 155.0
margin_bottom = 98.0
window_title = ""
[node name="Container" type="VBoxContainer" parent="Section"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 8.0
margin_top = 8.0
margin_right = -8.0
margin_bottom = -36.0
[node name="section" type="HBoxContainer" parent="Section/Container"]
margin_right = 292.0
margin_bottom = 24.0
[node name="Label" type="Label" parent="Section/Container/section"]
margin_top = 5.0
margin_right = 91.0
margin_bottom = 19.0
text = "Section name:"
[node name="_name" type="LineEdit" parent="Section/Container/section"]
margin_left = 95.0
margin_right = 292.0
margin_bottom = 24.0
size_flags_horizontal = 3
context_menu_enabled = false
[node name="key" type="HBoxContainer" parent="Section/Container"]
margin_top = 28.0
margin_right = 292.0
margin_bottom = 52.0
[node name="Label" type="Label" parent="Section/Container/key"]
margin_top = 5.0
margin_right = 91.0
margin_bottom = 19.0
rect_min_size = Vector2( 91, 0 )
text = "Key name:"
align = 1
[node name="_name" type="LineEdit" parent="Section/Container/key"]
margin_left = 95.0
margin_right = 292.0
margin_bottom = 24.0
size_flags_horizontal = 3
context_menu_enabled = false
[node name="value" type="HBoxContainer" parent="Section/Container"]
margin_top = 56.0
margin_right = 292.0
margin_bottom = 80.0
[node name="Label" type="Label" parent="Section/Container/value"]
margin_top = 5.0
margin_right = 91.0
margin_bottom = 19.0
rect_min_size = Vector2( 91, 0 )
text = "Key value:"
align = 1
[node name="_value" type="LineEdit" parent="Section/Container/value"]
margin_left = 95.0
margin_right = 292.0
margin_bottom = 24.0
size_flags_horizontal = 3
context_menu_enabled = false
[node name="Key" type="ConfirmationDialog" parent="."]
editor/display_folded = true
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -150.0
margin_top = -46.0
margin_right = 151.0
margin_bottom = 64.0
window_title = "Add a new Key"
[node name="data" type="VBoxContainer" parent="Key"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 8.0
margin_top = 8.0
margin_right = -8.0
margin_bottom = -36.0
alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="Key/data"]
margin_top = 7.0
margin_right = 285.0
margin_bottom = 31.0
[node name="Label" type="Label" parent="Key/data/HBoxContainer"]
margin_top = 5.0
margin_right = 140.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Key name:"
align = 1
valign = 1
[node name="name" type="LineEdit" parent="Key/data/HBoxContainer"]
margin_left = 144.0
margin_right = 285.0
margin_bottom = 24.0
size_flags_horizontal = 3
[node name="HBoxContainer2" type="HBoxContainer" parent="Key/data"]
margin_top = 35.0
margin_right = 285.0
margin_bottom = 59.0
[node name="Label" type="Label" parent="Key/data/HBoxContainer2"]
margin_top = 5.0
margin_right = 140.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Key value:"
align = 1
valign = 1
[node name="value" type="LineEdit" parent="Key/data/HBoxContainer2"]
margin_left = 144.0
margin_right = 285.0
margin_bottom = 24.0
size_flags_horizontal = 3

View File

@ -25,6 +25,7 @@ font_data = ExtResource( 5 )
font_data = ExtResource( 6 )
[node name="Preview" type="WindowDialog"]
visible = true
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 81.0
@ -40,8 +41,9 @@ anchor_right = 1.0
anchor_bottom = 1.0
[node name="TextPreview" type="RichTextLabel" parent="Container"]
visible = false
margin_right = 863.0
margin_bottom = 505.0
margin_bottom = 250.0
size_flags_vertical = 3
custom_fonts/mono_font = SubResource( 1 )
custom_fonts/bold_italics_font = SubResource( 2 )
@ -50,4 +52,11 @@ custom_fonts/bold_font = SubResource( 4 )
custom_fonts/normal_font = SubResource( 5 )
bbcode_enabled = true
scroll_following = true
[node name="TablePreview" type="GridContainer" parent="Container"]
margin_right = 863.0
margin_bottom = 505.0
size_flags_horizontal = 3
size_flags_vertical = 3
columns = 3
[connection signal="popup_hide" from="." to="." method="_on_Preview_popup_hide"]

View File

@ -0,0 +1,88 @@
[gd_scene load_steps=10 format=2]
[ext_resource path="res://addons/file-editor/scripts/FileScene.gd" type="Script" id=1]
[ext_resource path="res://addons/file-editor/fonts/Roboto-Black.ttf" type="DynamicFontData" id=2]
[sub_resource type="StyleBoxEmpty" id=1]
[sub_resource type="StyleBoxEmpty" id=2]
[sub_resource type="StyleBoxEmpty" id=3]
[sub_resource type="StyleBoxEmpty" id=4]
[sub_resource type="StyleBoxEmpty" id=5]
[sub_resource type="StyleBoxEmpty" id=6]
[sub_resource type="DynamicFont" id=7]
font_data = ExtResource( 2 )
[node name="VanillaEditor" type="VBoxContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
size_flags_vertical = 3
script = ExtResource( 1 )
[node name="TextEditor" type="TextEdit" parent="."]
margin_right = 1024.0
margin_bottom = 577.0
size_flags_vertical = 3
syntax_highlighting = true
show_line_numbers = true
breakpoint_gutter = true
highlight_all_occurrences = true
override_selected_font_color = true
smooth_scrolling = true
hiding_enabled = 1
wrap_enabled = true
caret_blink = true
caret_blink_speed = 1.0
caret_moving_by_right_click = false
[node name="FileInfo" type="HBoxContainer" parent="."]
margin_top = 581.0
margin_right = 1024.0
margin_bottom = 600.0
custom_constants/separation = 2
[node name="lastmodified_icon" type="TextureRect" parent="FileInfo"]
margin_bottom = 19.0
stretch_mode = 4
[node name="Label" type="Label" parent="FileInfo"]
margin_left = 2.0
margin_top = 2.0
margin_right = 127.0
margin_bottom = 16.0
text = "Last modified time:"
[node name="lastmodified" type="Label" parent="FileInfo"]
margin_left = 129.0
margin_top = 2.0
margin_right = 129.0
margin_bottom = 16.0
[node name="Readonly" type="CheckBox" parent="FileInfo"]
margin_left = 939.0
margin_right = 1018.0
margin_bottom = 19.0
size_flags_horizontal = 10
custom_styles/hover = SubResource( 1 )
custom_styles/pressed = SubResource( 2 )
custom_styles/focus = SubResource( 3 )
custom_styles/disabled = SubResource( 4 )
custom_styles/hover_pressed = SubResource( 5 )
custom_styles/normal = SubResource( 6 )
custom_fonts/font = SubResource( 7 )
custom_colors/font_color = Color( 0.145098, 0.172549, 0.231373, 1 )
custom_colors/font_color_pressed = Color( 1, 1, 1, 1 )
text = "Can Edit"
flat = true
[node name="VSeparator3" type="VSeparator" parent="FileInfo"]
margin_left = 1020.0
margin_right = 1024.0
margin_bottom = 19.0
rect_min_size = Vector2( 4, 0 )
[connection signal="text_changed" from="TextEditor" to="." method="_on_TextEditor_text_changed"]

View File

@ -3,18 +3,22 @@ extends Control
onready var FileList = $FileList
onready var Editor = $Container/Editor
onready var OpenFile = $Container/Buttons/openfile_btn
onready var NewFile = $Container/Buttons/newfile_btn
onready var DeleteFile = $Container/Buttons/deletefile_btn
onready var NewFileDialogue = $NewFileDialogue
onready var NewFileDialogue_name = $NewFileDialogue/VBoxContainer/new_filename
onready var Version = $Container/Buttons/version
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()
var FileScene = load("res://addons/file-editor/scenes/FileScene.tscn")
onready var Version = $FileEditorContainer/TobBar/version
onready var VanillaEditor = $FileEditorContainer/SplitContainer/VanillaEditor
onready var IniEditor = $FileEditorContainer/SplitContainer/IniEditor
onready var OpenFileList = $FileEditorContainer/SplitContainer/BoxContainer/OpenFileList
onready var OpenFileName = $FileEditorContainer/SplitContainer/BoxContainer/OpenFileName
var Preview = preload("res://addons/file-editor/scenes/Preview.tscn")
var DIRECTORY : String = "res://"
var EXCEPTIONS : String = "addons"
@ -33,107 +37,376 @@ var EXTENSIONS : PoolStringArray = [
"*.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)",
]
var directories = []
var files = []
var current_file_index = -1
var current_file_path = ""
var save_as = false
func _ready():
OpenFile.connect("pressed",self,"open_selected_file")
NewFile.connect("pressed",self,"open_newfiledialogue")
DeleteFile.connect("pressed",self,"delete_selected_file")
NewFile.icon = IconLoader.load_icon_from_name("new")
OpenFile.icon = IconLoader.load_icon_from_name("file")
DeleteFile.icon = IconLoader.load_icon_from_name("delete")
NewFileDialogue.connect("confirmed",self,"create_new_file")
clean_editor()
update_version()
connect_signals()
create_shortcuts()
load_icons()
FileList.connect("confirmed",self,"update_list")
var opened_files : Array = LastOpenedFiles.load_opened_files()
for open_file in opened_files:
open_file(open_file[1])
FileList.set_filters(EXTENSIONS)
IniEditor.hide()
Editor.hide()
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
# 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_3
hotkey.control = true
EditorBTN.set_item_accelerator(2,hotkey.get_scancode_with_modifiers()) # vanilla 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_")
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")
VanillaEditor.connect("text_changed",self,"_on_vanillaeditor_text_changed")
#---------------- to update from IniEditor to VanillaEditor
IniEditor.connect("update_file",self,"_on_update_file")
# ---- preview buttons
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")
update_version("v"+plugin_version)
Version.set_text("v"+plugin_version)
func update_version(v : String):
Version.set_text(v)
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()
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()
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()
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()
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
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()
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()
func _on_editorbtn_pressed(index : int):
match index:
0:
if not VanillaEditor.visible:
VanillaEditor.show()
IniEditor.hide()
2:
if not IniEditor.visible:
VanillaEditor.hide()
IniEditor.show()
func _on_fileitem_pressed(index : int):
current_file_index = index
var selected_item_metadata = OpenFileList.get_item_metadata(index)
current_file_path = selected_item_metadata[2]
OpenFileName.set_text(current_file_path)
VanillaEditor.new_file_open(selected_item_metadata[0],selected_item_metadata[1])
open_in_inieditor(current_file_path)
func close_file(index):
LastOpenedFiles.remove_opened_file(index,OpenFileList)
OpenFileList.remove_item(index)
OpenFileName.clear()
VanillaEditor.clean_editor()
func open_file(path : String):
if current_file_path != path:
current_file_path = path
open_in_vanillaeditor(path)
open_in_inieditor(path)
LastOpenedFiles.store_opened_files(OpenFileList)
func open_in_vanillaeditor(path : String):
var current_file : File = File.new()
current_file.open(path,File.READ)
var current_content = current_file.get_as_text()
var current_content = current_file.get_as_text()
var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(path))
var file_tab = FileScene.instance()
Editor.add_child(file_tab)
current_file.close()
file_tab.new_file_open(path,current_content,last_modified)
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,[current_content,last_modified,path])
Editor.show()
VanillaEditor.new_file_open(current_content,last_modified)
update_list()
OpenFileList.select(OpenFileList.get_item_count()-1)
func open_in_inieditor(path : String):
var extension = path.get_file().get_extension()
if extension == "ini" or extension == "cfg":
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)
else:
IniEditor.clean_editor()
func _on_update_file():
VanillaEditor.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()
VanillaEditor.new_file_open(current_content,last_modified)
func delete_file(files_selected : PoolStringArray):
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)
func create_new_file():
if NewFileDialogue_name.get_text():
NewFileDialogue.hide()
var new_file_tab = FileScene.instance()
Editor.add_child(new_file_tab)
new_file_tab.new_file_create(NewFileDialogue_name.get_text())
Editor.show()
update_list()
else:
print("<filename> cannot be empty! Please, give your file a name.")
func open_filelist():
update_list()
FileList.popup()
FileList.set_position(OS.get_screen_size()/2 - FileList.get_size()/2)
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 not FileList.is_connected("file_selected",self,"open_file"):
FileList.connect("file_selected",self,"open_file")
else:
FileList.disconnect("file_selected",self,"open_file")
FileList.connect("file_selected",self,"open_file")
open_filelist()
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)+"(*)")
func delete_selected_file():
update_list()
FileList.mode = FileDialog.MODE_OPEN_FILE
FileList.set_title("Select a file you want to delete")
if FileList.is_connected("file_selected",self,"open_file"):
FileList.disconnect("file_selected",self,"open_file")
if not FileList.is_connected("file_selected",self,"delete_file"):
FileList.connect("file_selected",self,"delete_file")
else:
FileList.disconnect("file_selected",self,"delete_file")
FileList.connect("file_selected",self,"delete_file")
open_filelist()
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(VanillaEditor.get_node("TextEditor").get_text())
current_file.close()
func delete_file(path : String):
var dir = Directory.new()
dir.remove(path)
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 = VanillaEditor.get_node("TextEditor").get_text()
if current_content == null:
current_content = ""
current_file.store_line(current_content)
current_file.close()
current_file_path = current_file_path
var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_path))
VanillaEditor.update_lastmodified(last_modified,"save")
OpenFileList.set_item_metadata(current_file_index,[current_content,last_modified,current_path])
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("(*)"))
open_in_inieditor(current_file_path)
update_list()
func clean_editor():
OpenFileName.clear()
OpenFileList.clear()
VanillaEditor.clean_editor()
IniEditor.clean_editor()
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 = VanillaEditor.get_node("TextEditor").get_line_count()
var rows = []
for i in range(0,lines-1):
rows.append(VanillaEditor.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(VanillaEditor.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(VanillaEditor.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(VanillaEditor.get_node("TextEditor").get_text())
func xml_preview():
pass
func json_preview():
pass
func update_list():
FileList.invalidate()

View File

@ -1,10 +1,8 @@
tool
extends VBoxContainer
onready var CloseFile = $TopBar/close_btn
onready var ReadOnly = $FileInfo/Readonly
onready var FileButton = $TopBar/FileButton.get_popup()
onready var TextEditor = $TextEditor
@ -14,8 +12,6 @@ onready var FileList = get_parent().get_parent().get_parent().get_node("FileList
onready var ClosingFile = get_parent().get_parent().get_parent().get_node("ConfirmationDialog")
onready var FilePath = $TopBar/filepath
onready var LastModifiedIcon = $FileInfo/lastmodified_icon
var current_path = ""
@ -23,121 +19,37 @@ var current_filename = ""
var old_file_content = ""
var Preview = load("res://addons/file-editor/scenes/Preview.tscn")
signal text_changed()
func _ready():
FileButton.connect("id_pressed",self,"button_pressed")
ClosingFile.connect("confirmed",self,"queue_free")
CloseFile.connect("pressed",self,"close_editor")
ReadOnly.connect("toggled",self,"_on_Readonly_toggled")
ReadOnly.set("custom_icons/checked",IconLoader.load_icon_from_name("read"))
ReadOnly.set("custom_icons/unchecked",IconLoader.load_icon_from_name("edit"))
func new_file_open(file_path, file_content, last_modified) :
current_path = file_path
var filename_ = file_path.get_file().replace(".","-")
FilePath.set_text(current_path)
if get_parent().has_node(filename_):
queue_free()
else:
set_name(filename_)
current_filename = filename_
old_file_content = file_content
TextEditor.set_text(file_content)
LastModifiedIcon.texture = IconLoader.load_icon_from_name("saveas")
LastModified.set_text(str(last_modified.hour)+":"+str(last_modified.minute)+" "+str(last_modified.day)+"/"+str(last_modified.month)+"/"+str(last_modified.year))
func clean_editor():
TextEditor.set_text("")
LastModifiedIcon.texture = IconLoader.load_icon_from_name("save")
LastModified.set_text("")
FileList.invalidate()
func new_file_open(file_content, last_modified):
TextEditor.set_text(file_content)
update_lastmodified(last_modified,"save")
FileList.invalidate()
func update_lastmodified(last_modified : Dictionary, icon : String):
LastModified.set_text(str(last_modified.hour)+":"+str(last_modified.minute)+" "+str(last_modified.day)+"/"+str(last_modified.month)+"/"+str(last_modified.year))
LastModifiedIcon.texture = IconLoader.load_icon_from_name(icon)
func new_file_create(file_name):
set_name(file_name)
current_filename = file_name
FileButton.set_item_disabled(0,true)
TextEditor.set_text("")
FileList.invalidate()
func save_file(current_path : String):
var current_file = File.new()
current_file.open(current_path,File.WRITE)
var current_content = TextEditor.get_text()
if current_content == null:
current_content = ""
current_file.store_line(current_content)
current_file.close()
old_file_content = current_content
var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_path))
LastModified.set_text(str(last_modified.hour)+":"+str(last_modified.minute)+" "+str(last_modified.day)+"/"+str(last_modified.month)+"/"+str(last_modified.year))
LastModifiedIcon.texture = IconLoader.load_icon_from_name("save")
FilePath.set_text(current_path)
FileList.invalidate()
func save_file_as():
var current_content = TextEditor.get_text()
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 not FileList.is_connected("file_selected",self,"save_file"):
FileList.connect("file_selected",self,"save_file")
FileList.current_file = current_filename.replace("-",".")
open_filelist()
old_file_content = current_content
FileList.invalidate()
func open_filelist():
FileList.popup()
FileList.set_position(OS.get_screen_size()/2 - FileList.get_size()/2)
func button_pressed(id : int):
if id == 0:
save_file(current_path)
elif id == 1:
save_file_as()
elif id == 2:
open_preview()
elif id == 3:
bbcode_preview()
elif id == 4:
markdown_preview()
elif id == 5:
html_preview()
func open_preview():
var preview = Preview.instance()
get_parent().get_parent().get_parent().add_child(preview)
preview.popup()
preview.window_title += " ("+current_filename+")"
preview.print_preview(TextEditor.get_text())
func bbcode_preview():
var preview = Preview.instance()
get_parent().get_parent().get_parent().add_child(preview)
preview.popup()
preview.window_title += " ("+current_filename+")"
preview.print_bb(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_filename+")"
preview.print_markdown(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_filename+")"
preview.print_html(TextEditor.get_text())
func close_editor():
if old_file_content != TextEditor.get_text():
ClosingFile.popup()
@ -154,3 +66,4 @@ func _on_Readonly_toggled(button_pressed):
func _on_TextEditor_text_changed():
LastModifiedIcon.texture = IconLoader.load_icon_from_name("saveas")
emit_signal("text_changed")

View File

@ -1,6 +1,9 @@
tool
extends Node
func _ready():
pass
func load_icon_from_name(icon_name : String) -> ImageTexture:
var file = File.new()
var image = Image.new()

View File

@ -0,0 +1,274 @@
extends Control
tool
onready var Keys = $VBoxContainer/HSplitContainer/VBoxContainer2/keys
onready var Sections = $VBoxContainer/HSplitContainer/VBoxContainer/sections2
onready var BtnAddSection = $VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer2/btn_add_section
onready var BtnRemoveSection = $VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer2/btn_remove_section
onready var BtnAddKey = $VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3/btn_add_key
onready var BtnEditKey = $VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3/btn_edit_key
onready var BtnRemoveKey = $VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3/btn_remove_key
onready var Section = $Section
onready var Key = $Key
var selected_key
var selected_section : int = -1
var root : TreeItem
var current_file_path : String = ""
signal update_file()
func _ready():
create_table_names()
connect_signals()
load_icons()
clean_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")
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")
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"
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()
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()
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()
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()
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.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()
func open_file(filemap : Array):
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.")
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")
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.")
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")
func edit_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)
# 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])
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))
func _on_key_selected():
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
func _on_nokey_selected():
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")

View File

@ -0,0 +1,33 @@
tool
extends Node
const lastopenedfile_path : String = "res://addons/file-editor/lastopenedfiles.lastcfg"
func _ready():
pass
func store_opened_files(filecontainer : Control):
var file = ConfigFile.new()
file.load(lastopenedfile_path)
for child in range(0,filecontainer.get_item_count()):
var filepath = filecontainer.get_item_metadata(child)[2]
file.set_value("Opened",filepath.get_file(),filepath)
file.save(lastopenedfile_path)
func remove_opened_file(index : int , filecontainer : Control):
var file = ConfigFile.new()
file.load(lastopenedfile_path)
var filepath = filecontainer.get_item_metadata(index)[2]
file.set_value("Opened",filepath.get_file(),null)
file.save(lastopenedfile_path)
func load_opened_files() -> Array:
var file = ConfigFile.new()
file.load(lastopenedfile_path)
var keys = []
if file.has_section("Opened"):
var openedfiles = file.get_section_keys("Opened")
for openedfile in openedfiles:
keys.append([openedfile,file.get_value("Opened",openedfile)])
return keys

View File

@ -2,15 +2,19 @@ tool
extends WindowDialog
onready var TextPreview = $Container/TextPreview
onready var TablePreview = $Container/TablePreview
func _ready():
pass
TextPreview.hide()
TablePreview.hide()
func print_preview(content : String):
TextPreview.append_bbcode(content)
TextPreview.show()
func print_bb(content : String):
TextPreview.append_bbcode(content)
TextPreview.show()
func print_markdown(content : String):
var result = ""
@ -49,7 +53,7 @@ func print_markdown(content : String):
for res in result:
coded.append(res.get_string("coded"))
regex.compile("[+-](?<element>\\s.*)")
regex.compile("[+-*](?<element>\\s.*)")
result = regex.search_all(content)
if result:
for res in result:
@ -89,8 +93,11 @@ func print_markdown(content : String):
content = content.replace("-"+element,"[indent]-"+element+"[/indent]")
if content.find("+ "+element):
content = content.replace("+"+element,"[indent]-"+element+"[/indent]")
if content.find("* "+element):
content = content.replace("+"+element,"[indent]-"+element+"[/indent]")
TextPreview.append_bbcode(content)
TextPreview.show()
func print_html(content : String):
content = content.replace("<i>","[i]")
@ -99,6 +106,10 @@ func print_html(content : String):
content = content.replace("</b>","[/b]")
content = content.replace("<u>","[u]")
content = content.replace("</u>","[/u]")
content = content.replace("<ins>","[u]")
content = content.replace("</ins>","[/u]")
content = content.replace("<del>","[s]")
content = content.replace("</del>","[/s]")
content = content.replace('<a href="',"[url=")
content = content.replace('">',"]")
content = content.replace("</a>","[/url]")
@ -111,6 +122,21 @@ func print_html(content : String):
content = content.replace("</center>","[/center]")
TextPreview.append_bbcode(content)
TextPreview.show()
func print_csv(rows : Array):
TablePreview.columns = rows[0].size()
for item in rows:
for string in item:
var label = Label.new()
label.text = str(string)
label.set_h_size_flags(SIZE_EXPAND)
label.set_align(1)
label.set_valign(1)
TablePreview.add_child(label)
TablePreview.show()
func _on_Preview_popup_hide():
queue_free()

View File

@ -9,12 +9,15 @@ var IconLoader = preload("res://addons/file-editor/scripts/IconLoader.gd")
func _enter_tree():
add_autoload_singleton("IconLoader","res://addons/file-editor/scripts/IconLoader.gd")
add_autoload_singleton("LastOpenedFiles","res://addons/file-editor/scripts/LastOpenedFiles.gd")
get_editor_interface().get_editor_viewport().add_child(doc)
doc.hide()
func _exit_tree():
doc.clean_editor()
get_editor_interface().get_editor_viewport().remove_child(doc)
remove_autoload_singleton("IconLoader")
remove_autoload_singleton("LastOpenedFiles")
func has_main_screen():
return true