From 9aa62ae732a450e8c58f910bfcaeee2c8b5891d7 Mon Sep 17 00:00:00 2001 From: fenix-hub Date: Thu, 3 Oct 2019 16:06:46 +0200 Subject: [PATCH] Add files via upload --- addons/file-editor/README.md | 116 +++++++++--------- addons/file-editor/VERSION.md | 114 +++++++++-------- .../icons.pngs/delete.png.buttonicon | Bin 0 -> 183 bytes .../icons.pngs/edit.png.buttonicon | Bin 0 -> 244 bytes .../icons.pngs/file.png.buttonicon | Bin 0 -> 160 bytes .../file-editor/icons.pngs/new.png.buttonicon | Bin 0 -> 180 bytes .../icons.pngs/read.png.buttonicon | Bin 0 -> 286 bytes .../icons.pngs/save.png.buttonicon | Bin 0 -> 236 bytes .../icons.pngs/saveas.png.buttonicon | Bin 0 -> 250 bytes addons/file-editor/plugin.cfg | 6 +- addons/file-editor/scenes/FileEditor.tscn | 104 +++++++++------- addons/file-editor/scenes/FileScene.tscn | 75 ++++++----- addons/file-editor/scenes/Preview.tscn | 20 +-- addons/file-editor/scripts/FileEditor.gd | 22 ++-- .../file-editor/scripts/FileEditorButton.gd | 19 +++ addons/file-editor/scripts/FileScene.gd | 40 +++++- addons/file-editor/scripts/IconLoader.gd | 15 +++ addons/file-editor/scripts/Preview.gd | 101 +++++++++++++-- addons/file-editor/scripts/file-editor.gd | 27 +++- 19 files changed, 440 insertions(+), 219 deletions(-) create mode 100644 addons/file-editor/icons.pngs/delete.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/edit.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/file.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/new.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/read.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/save.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/saveas.png.buttonicon create mode 100644 addons/file-editor/scripts/FileEditorButton.gd create mode 100644 addons/file-editor/scripts/IconLoader.gd diff --git a/addons/file-editor/README.md b/addons/file-editor/README.md index 743fed0..e9ccbcc 100644 --- a/addons/file-editor/README.md +++ b/addons/file-editor/README.md @@ -1,58 +1,58 @@ -# Godot Text Editor -A little plugin to easy-way manage your text files inside your project folder. - -Author: *"Nicolo (fenix) Santilio"* -Version: *0.3.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. -Always remember to save your file when you close the tab! -![preview](https://i.imgur.com/RLQoWt8.png)![preview2](https://i.imgur.com/A3kHV1k.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" - -#### 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. - -# Want to contact me? -I'm planning to create a Discord group to collect each plugin I've made (and I will make), but until then you can directly talk with my via e-mail at *n.santilio97@gmail.com* \ No newline at end of file +Check my **[Discord](https://discord.gg/KnJGY9S)** to stay updated on this repository. +*(Recommended since the AssetLibrary is not automatically updated)* + +# 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* +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. +![preview](https://i.imgur.com/LcrGCGS.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" + +#### 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. diff --git a/addons/file-editor/VERSION.md b/addons/file-editor/VERSION.md index 4105c90..c7f740f 100644 --- a/addons/file-editor/VERSION.md +++ b/addons/file-editor/VERSION.md @@ -1,49 +1,65 @@ -**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 0.3.3** -*added* file support: -+ "*.dat ; Data File", -+ "*.xml ; XML File", -+ "*.sql ; SQL database file", -+ "*.json ; JavaScript Object Notation File" +**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 + +----------------------- + + diff --git a/addons/file-editor/icons.pngs/delete.png.buttonicon b/addons/file-editor/icons.pngs/delete.png.buttonicon new file mode 100644 index 0000000000000000000000000000000000000000..5ed1d2f94ccd32a885b7938373cd2e2eacb7f8e3 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFT^vIy<|HRL zFt|B7GIFpoF>$alIk-%aWa?4y&~g@B5-o9}fW^>9P>g{=#fK#*aE_5YP#=S*tDnm{ Hr-UW|&pk89 literal 0 HcmV?d00001 diff --git a/addons/file-editor/icons.pngs/edit.png.buttonicon b/addons/file-editor/icons.pngs/edit.png.buttonicon new file mode 100644 index 0000000000000000000000000000000000000000..32224eb3e2677a3781ee787d71d285e71b4dc73c GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFhpi(^Q|oaBTB0vrt-ZftC7!UD<>jg4nzj%4^HBun tVsmnGLV2$!o!)-)*FuFG3~9_Mj~S+Y<%%efyAN_4gQu&X%Q~loCIBF@MI8VD literal 0 HcmV?d00001 diff --git a/addons/file-editor/icons.pngs/file.png.buttonicon b/addons/file-editor/icons.pngs/file.png.buttonicon new file mode 100644 index 0000000000000000000000000000000000000000..848ca50c577b573886547ed09d0a69ec3b0903af GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9jKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkNHD-B#1%+C00SGTtrLM9=8_=4V21w%mf;=~fLujS7srr_ImrnOjMoDA t1s<{~#Yj82Fij|6D0F7-P;+2lc=4X+(-PC`KY)rEJYD@<);T3K0RR<|DU|>K literal 0 HcmV?d00001 diff --git a/addons/file-editor/icons.pngs/new.png.buttonicon b/addons/file-editor/icons.pngs/new.png.buttonicon new file mode 100644 index 0000000000000000000000000000000000000000..9c48a0228d539fb6bca62b679c91f252f528ab36 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9jKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP>?6UC&U#>qAePEVlH01 kxQM}M*5yM#mCRN%UQm|)Vb`Vn->)Dr|Gh(k-#KO%poFWZ zi(^Q|oaBTCMmN@EX0|kTHnuQkfx|70jgn^!${GxLCP+HSCbSt!EHDx|x}b-Nuf)ww pz2hKP;GTxYYQv6gRt)8=4DNEaktF()~pfzgdMnVBt(osBJwS>SL>W2595gR%xgo(Yl;vI%X55)P6)34zJ3 zhToVN1r|37A4|~J*Jm)?bbu#pLew`VHnw*s9mJ{+GVai3Fx@32xG&0l9ng3NPgg&e IbxsLQ01ir6g#Z8m literal 0 HcmV?d00001 diff --git a/addons/file-editor/plugin.cfg b/addons/file-editor/plugin.cfg index 257a4b6..c955f48 100644 --- a/addons/file-editor/plugin.cfg +++ b/addons/file-editor/plugin.cfg @@ -1,7 +1,7 @@ -[plugin] +[plugin] name="File Editor" description="An internal file editor to view and edit text files in your project folder." -author="Nicolò 'fenix' Santilio" -version="0.3.3" +author="Nicolo 'fenix' Santilio" +version="1.2.1" script="scripts/file-editor.gd" diff --git a/addons/file-editor/scenes/FileEditor.tscn b/addons/file-editor/scenes/FileEditor.tscn index f503833..82f44e3 100644 --- a/addons/file-editor/scenes/FileEditor.tscn +++ b/addons/file-editor/scenes/FileEditor.tscn @@ -1,16 +1,13 @@ -[gd_scene load_steps=10 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://addons/file-editor/scripts/FileEditor.gd" type="Script" id=1] -[ext_resource path="res://addons/file-editor/icons/new.svg" type="Texture" id=2] -[ext_resource path="res://addons/file-editor/icons/file.svg" type="Texture" id=3] -[ext_resource path="res://addons/file-editor/icons/delete.svg" type="Texture" id=4] -[ext_resource path="res://addons/file-editor/fonts/Roboto-Black.ttf" type="DynamicFontData" id=5] +[ext_resource path="res://addons/file-editor/fonts/Roboto-Black.ttf" type="DynamicFontData" id=2] -[sub_resource type="DynamicFont" id=1] +[sub_resource type="DynamicFont" id=6] size = 13 -font_data = ExtResource( 5 ) +font_data = ExtResource( 2 ) -[sub_resource type="StyleBoxFlat" id=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 ) @@ -20,7 +17,7 @@ border_width_right = 1 border_color = Color( 0.121569, 0.145098, 0.192157, 1 ) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=3] +[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 ) @@ -30,7 +27,7 @@ border_width_right = 1 border_color = Color( 0.121569, 0.145098, 0.192157, 1 ) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=4] +[sub_resource type="StyleBoxFlat" id=9] bg_color = Color( 0.121569, 0.145098, 0.192157, 1 ) draw_center = false border_width_left = 1 @@ -42,57 +39,64 @@ border_color = Color( 0.121569, 0.145098, 0.192157, 1 ) [node name="FileEditor" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 script = ExtResource( 1 ) [node name="Container" 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 = 1024.0 -margin_bottom = 22.0 +margin_right = 1013.0 +margin_bottom = 20.0 [node name="newfile_btn" type="Button" parent="Container/Buttons"] -margin_right = 337.0 -margin_bottom = 22.0 -size_flags_horizontal = 3 +margin_right = 110.0 +margin_bottom = 20.0 text = "Create new File" -icon = ExtResource( 2 ) +flat = true [node name="openfile_btn" type="Button" parent="Container/Buttons"] -margin_left = 341.0 -margin_right = 678.0 -margin_bottom = 22.0 -size_flags_horizontal = 3 +margin_left = 114.0 +margin_right = 188.0 +margin_bottom = 20.0 text = "Open File" -icon = ExtResource( 3 ) +flat = true [node name="deletefile_btn" type="Button" parent="Container/Buttons"] -margin_left = 682.0 -margin_right = 1019.0 -margin_bottom = 22.0 -size_flags_horizontal = 3 +margin_left = 192.0 +margin_right = 274.0 +margin_bottom = 20.0 text = "Delete File" -icon = ExtResource( 4 ) +flat = true [node name="version" type="Label" parent="Container/Buttons"] -margin_left = 1023.0 -margin_top = 2.0 -margin_right = 1023.0 -margin_bottom = 19.0 -custom_fonts/font = SubResource( 1 ) +margin_left = 974.0 +margin_top = 1.0 +margin_right = 1013.0 +margin_bottom = 18.0 +size_flags_horizontal = 10 +custom_fonts/font = SubResource( 6 ) 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 -margin_top = 32.0 -margin_right = 1024.0 +margin_top = 26.0 +margin_right = 1000.0 margin_bottom = 600.0 -size_flags_vertical = 3 -custom_styles/tab_fg = SubResource( 2 ) -custom_styles/tab_bg = SubResource( 3 ) -custom_styles/panel = SubResource( 4 ) +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 @@ -104,7 +108,7 @@ 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" ) +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" ) [node name="NewFileDialogue" type="AcceptDialog" parent="."] editor/display_folded = true @@ -124,7 +128,7 @@ margin_bottom = -36.0 [node name="Label" type="Label" parent="NewFileDialogue/VBoxContainer"] margin_right = 280.0 -margin_bottom = 17.0 +margin_bottom = 16.0 size_flags_vertical = 3 text = "Insert file name (no extension needed)" align = 1 @@ -132,11 +136,29 @@ valign = 1 [node name="new_filename" type="LineEdit" parent="NewFileDialogue/VBoxContainer"] margin_left = 40.0 -margin_top = 21.0 +margin_top = 20.0 margin_right = 240.0 -margin_bottom = 45.0 +margin_bottom = 44.0 rect_min_size = Vector2( 200, 0 ) size_flags_horizontal = 6 size_flags_vertical = 3 clear_button_enabled = true placeholder_text = "example" + +[node name="ConfirmationDialog" type="ConfirmationDialog" parent="."] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -323.5 +margin_top = -37.5 +margin_right = 323.5 +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 diff --git a/addons/file-editor/scenes/FileScene.tscn b/addons/file-editor/scenes/FileScene.tscn index aa1cb2e..ce17579 100644 --- a/addons/file-editor/scenes/FileScene.tscn +++ b/addons/file-editor/scenes/FileScene.tscn @@ -1,15 +1,15 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=12 format=2] [ext_resource path="res://addons/file-editor/scripts/FileScene.gd" type="Script" id=1] -[ext_resource path="res://addons/file-editor/icons/read.svg" type="Texture" id=2] -[ext_resource path="res://addons/file-editor/icons/edit.png" type="Texture" id=3] -[ext_resource path="res://addons/file-editor/fonts/Roboto-Black.ttf" type="DynamicFontData" id=4] +[ext_resource path="res://addons/file-editor/fonts/Roboto-Black.ttf" type="DynamicFontData" id=2] [sub_resource type="StyleBoxFlat" id=1] content_margin_left = 10.0 content_margin_right = 10.0 bg_color = Color( 0.145098, 0.172549, 0.231373, 1 ) +[sub_resource type="StyleBoxEmpty" id=9] + [sub_resource type="StyleBoxEmpty" id=2] [sub_resource type="StyleBoxEmpty" id=3] @@ -23,25 +23,21 @@ bg_color = Color( 0.145098, 0.172549, 0.231373, 1 ) [sub_resource type="StyleBoxEmpty" id=7] [sub_resource type="DynamicFont" id=8] -font_data = ExtResource( 4 ) +font_data = ExtResource( 2 ) [node name="filename" type="VBoxContainer"] anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 4.0 -margin_top = 32.0 -margin_right = -4.0 -margin_bottom = -4.0 size_flags_vertical = 3 script = ExtResource( 1 ) [node name="HSeparator" type="HSeparator" parent="."] -margin_right = 1016.0 +margin_right = 1024.0 margin_bottom = 4.0 [node name="TopBar" type="HBoxContainer" parent="."] margin_top = 8.0 -margin_right = 1016.0 +margin_right = 1024.0 margin_bottom = 28.0 [node name="VSeparator" type="VSeparator" parent="TopBar"] @@ -56,31 +52,31 @@ custom_styles/hover = SubResource( 1 ) custom_styles/normal = SubResource( 1 ) text = "File" flat = false -items = [ "Save File", null, 0, false, false, 0, 0, null, "", false, "Save file As...", null, 0, false, false, 1, 0, null, "", false, "", null, 0, false, false, -1, 0, null, "", true, "Normal Preview", null, 0, false, false, 2, 0, null, "", false, "BBCode Preview", null, 0, false, false, 3, 0, null, "", false, "Markdown Preview (DEMO)", null, 0, false, false, 4, 0, null, "", false ] +items = [ "Save File", null, 0, false, false, 0, 0, null, "", false, "Save file As...", null, 0, false, false, 1, 0, null, "", false, "", null, 0, false, false, -1, 0, null, "", true, "Normal Preview", null, 0, false, false, 2, 0, null, "", false, "BBCode Preview", null, 0, false, false, 3, 0, null, "", false, "Markdown Preview", null, 0, false, false, 4, 0, null, "", false, "HTML Preview", null, 0, false, false, 5, 0, null, "", false ] [node name="filepath" type="Label" parent="TopBar"] -margin_left = 519.0 +margin_left = 523.0 margin_top = 3.0 -margin_right = 519.0 +margin_right = 523.0 margin_bottom = 17.0 size_flags_horizontal = 6 [node name="close_btn" type="Button" parent="TopBar"] -margin_left = 988.0 -margin_right = 1008.0 +margin_left = 996.0 +margin_right = 1016.0 margin_bottom = 20.0 size_flags_horizontal = 8 text = "X" [node name="VSeparator2" type="VSeparator" parent="TopBar"] -margin_left = 1012.0 -margin_right = 1016.0 +margin_left = 1020.0 +margin_right = 1024.0 margin_bottom = 20.0 [node name="TextEditor" type="TextEdit" parent="."] margin_top = 32.0 -margin_right = 1016.0 -margin_bottom = 541.0 +margin_right = 1024.0 +margin_bottom = 577.0 size_flags_vertical = 3 syntax_highlighting = true show_line_numbers = true @@ -93,30 +89,41 @@ caret_blink_speed = 1.0 caret_moving_by_right_click = false [node name="FileInfo" type="HBoxContainer" parent="."] -editor/display_folded = true -margin_top = 545.0 -margin_right = 1016.0 -margin_bottom = 564.0 +margin_top = 581.0 +margin_right = 1024.0 +margin_bottom = 600.0 +custom_constants/separation = 2 + +[node name="VSeparator4" type="VSeparator" parent="FileInfo"] +margin_right = 5.0 +margin_bottom = 19.0 +rect_min_size = Vector2( 5, 0 ) +custom_styles/separator = SubResource( 9 ) + +[node name="lastmodified_icon" type="TextureRect" parent="FileInfo"] +margin_left = 7.0 +margin_right = 7.0 +margin_bottom = 19.0 +stretch_mode = 4 [node name="Label" type="Label" parent="FileInfo"] +margin_left = 9.0 margin_top = 2.0 -margin_right = 125.0 +margin_right = 134.0 margin_bottom = 16.0 text = "Last modified time:" [node name="lastmodified" type="Label" parent="FileInfo"] -margin_left = 129.0 +margin_left = 136.0 margin_top = 2.0 -margin_right = 129.0 +margin_right = 136.0 margin_bottom = 16.0 [node name="Readonly" type="CheckBox" parent="FileInfo"] -margin_left = 929.0 -margin_right = 1008.0 +margin_left = 939.0 +margin_right = 1018.0 margin_bottom = 19.0 size_flags_horizontal = 10 -custom_icons/checked = ExtResource( 2 ) -custom_icons/unchecked = ExtResource( 3 ) custom_styles/hover = SubResource( 2 ) custom_styles/pressed = SubResource( 3 ) custom_styles/focus = SubResource( 4 ) @@ -130,6 +137,8 @@ text = "Can Edit" flat = true [node name="VSeparator3" type="VSeparator" parent="FileInfo"] -margin_left = 1012.0 -margin_right = 1016.0 +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"] diff --git a/addons/file-editor/scenes/Preview.tscn b/addons/file-editor/scenes/Preview.tscn index f382193..4382ada 100644 --- a/addons/file-editor/scenes/Preview.tscn +++ b/addons/file-editor/scenes/Preview.tscn @@ -7,21 +7,21 @@ [ext_resource path="res://addons/file-editor/fonts/Carlito-Bold.ttf" type="DynamicFontData" id=5] [ext_resource path="res://addons/file-editor/fonts/Carlito-Regular.ttf" type="DynamicFontData" id=6] -[sub_resource type="DynamicFont" id=5] +[sub_resource type="DynamicFont" id=1] use_mipmaps = true use_filter = true font_data = ExtResource( 2 ) -[sub_resource type="DynamicFont" id=1] +[sub_resource type="DynamicFont" id=2] font_data = ExtResource( 3 ) -[sub_resource type="DynamicFont" id=2] +[sub_resource type="DynamicFont" id=3] font_data = ExtResource( 4 ) -[sub_resource type="DynamicFont" id=3] +[sub_resource type="DynamicFont" id=4] font_data = ExtResource( 5 ) -[sub_resource type="DynamicFont" id=4] +[sub_resource type="DynamicFont" id=5] font_data = ExtResource( 6 ) [node name="Preview" type="WindowDialog"] @@ -43,11 +43,11 @@ anchor_bottom = 1.0 margin_right = 863.0 margin_bottom = 505.0 size_flags_vertical = 3 -custom_fonts/mono_font = SubResource( 5 ) -custom_fonts/bold_italics_font = SubResource( 1 ) -custom_fonts/italics_font = SubResource( 2 ) -custom_fonts/bold_font = SubResource( 3 ) -custom_fonts/normal_font = SubResource( 4 ) +custom_fonts/mono_font = SubResource( 1 ) +custom_fonts/bold_italics_font = SubResource( 2 ) +custom_fonts/italics_font = SubResource( 3 ) +custom_fonts/bold_font = SubResource( 4 ) +custom_fonts/normal_font = SubResource( 5 ) bbcode_enabled = true scroll_following = true [connection signal="popup_hide" from="." to="." method="_on_Preview_popup_hide"] diff --git a/addons/file-editor/scripts/FileEditor.gd b/addons/file-editor/scripts/FileEditor.gd index 88d00ab..67d9234 100644 --- a/addons/file-editor/scripts/FileEditor.gd +++ b/addons/file-editor/scripts/FileEditor.gd @@ -31,7 +31,8 @@ var EXTENSIONS : PoolStringArray = [ "*.dat ; Data File", "*.xml ; XML File", "*.sql ; SQL database file", -"*.json ; JavaScript Object Notation File" +"*.json ; JavaScript Object Notation File", +"*.html ; HyperText Markup Language", ] var directories = [] @@ -42,6 +43,10 @@ func _ready(): 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") @@ -83,12 +88,15 @@ func open_newfiledialogue(): NewFileDialogue.set_position(OS.get_screen_size()/2 - NewFileDialogue.get_size()/2) func create_new_file(): - 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() + 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(" cannot be empty! Please, give your file a name.") func open_filelist(): update_list() diff --git a/addons/file-editor/scripts/FileEditorButton.gd b/addons/file-editor/scripts/FileEditorButton.gd new file mode 100644 index 0000000..95b3ac3 --- /dev/null +++ b/addons/file-editor/scripts/FileEditorButton.gd @@ -0,0 +1,19 @@ +tool +extends ToolButton + +var fileditor_workspace +var fileditor + +func _ready(): + connect("pressed",self,"show_fileditor") + +func show_fileditor(): + fileditor_workspace.get_children()[0].hide() + fileditor_workspace.get_children()[1].hide() + fileditor_workspace.get_children()[2].hide() + fileditor_workspace.add_child(fileditor) + fileditor.show() + +func load_values(fi, fe): + fileditor_workspace = fi + fileditor = fe diff --git a/addons/file-editor/scripts/FileScene.gd b/addons/file-editor/scripts/FileScene.gd index 0052763..ddd1adf 100644 --- a/addons/file-editor/scripts/FileScene.gd +++ b/addons/file-editor/scripts/FileScene.gd @@ -12,19 +12,28 @@ onready var LastModified = $FileInfo/lastmodified 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 = "" var current_filename = "" - +var old_file_content = "" var Preview = load("res://addons/file-editor/scenes/Preview.tscn") 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 @@ -37,7 +46,10 @@ func new_file_open(file_path, file_content, last_modified) : 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)) FileList.invalidate() @@ -57,10 +69,11 @@ func save_file(current_path : String): 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() @@ -75,6 +88,7 @@ func save_file_as(): FileList.connect("file_selected",self,"save_file") FileList.current_file = current_filename.replace("-",".") open_filelist() + old_file_content = current_content FileList.invalidate() @@ -93,27 +107,42 @@ func button_pressed(id : int): 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(): - queue_free() + if old_file_content != TextEditor.get_text(): + ClosingFile.popup() + else: + queue_free() func _on_Readonly_toggled(button_pressed): if button_pressed: @@ -121,4 +150,7 @@ func _on_Readonly_toggled(button_pressed): TextEditor.readonly = (true) else: ReadOnly.set_text("Can Edit") - TextEditor.readonly = (false) \ No newline at end of file + TextEditor.readonly = (false) + +func _on_TextEditor_text_changed(): + LastModifiedIcon.texture = IconLoader.load_icon_from_name("saveas") diff --git a/addons/file-editor/scripts/IconLoader.gd b/addons/file-editor/scripts/IconLoader.gd new file mode 100644 index 0000000..068ee1b --- /dev/null +++ b/addons/file-editor/scripts/IconLoader.gd @@ -0,0 +1,15 @@ +tool +extends Node + +func load_icon_from_name(icon_name : String) -> ImageTexture: + var file = File.new() + var image = Image.new() + var texture = ImageTexture.new() + + file.open("res://addons/file-editor/icons.pngs/"+icon_name+".png.buttonicon", File.READ) + var buffer = file.get_buffer(file.get_len()) + file.close() + + image.load_png_from_buffer(buffer) + texture.create_from_image(image) + return texture \ No newline at end of file diff --git a/addons/file-editor/scripts/Preview.gd b/addons/file-editor/scripts/Preview.gd index 7d9e234..8934fef 100644 --- a/addons/file-editor/scripts/Preview.gd +++ b/addons/file-editor/scripts/Preview.gd @@ -13,17 +13,102 @@ func print_bb(content : String): TextPreview.append_bbcode(content) func print_markdown(content : String): - content = content.replace(" **"," [b]") - content = content.replace("**","[/b]") + var result = "" + var bolded = [] + var italics = [] + var striked = [] + var coded = [] + var linknames = [] + var images = [] + var links = [] + var lists = [] - content = content.replace(" *"," [i]") - content = content.replace("*","[/i] ") + var regex = RegEx.new() + regex.compile('\\*\\*(?.*)\\*\\*') + result = regex.search_all(content) + if result: + for res in result: + bolded.append(res.get_string("boldtext")) - content = content.replace(" ~~","[s] ") - content = content.replace("~~","[/s]") - content = content.replace(" `"," [code]") - content = content.replace("`","[/code]") + regex.compile("\\*(?.*)\\*") + result = regex.search_all(content) + if result: + for res in result: + italics.append(res.get_string("italictext")) + + regex.compile("~~(?.*)~~") + result = regex.search_all(content) + if result: + for res in result: + striked.append(res.get_string("strikedtext")) + + regex.compile("`(?.*)`") + result = regex.search_all(content) + if result: + for res in result: + coded.append(res.get_string("coded")) + + regex.compile("[+-](?\\s.*)") + result = regex.search_all(content) + if result: + for res in result: + lists.append(res.get_string("element")) + + regex.compile("(?!\\[.*?\\))") + result = regex.search_all(content) + if result: + for res in result: + images.append(res.get_string("img")) + + regex.compile("\\[(?.*?)\\]|\\((?[h\\.]\\S*?)\\)") + result = regex.search_all(content) + if result: + for res in result: + if res.get_string("link")!="": + links.append(res.get_string("link")) + if res.get_string("linkname")!="": + linknames.append(res.get_string("linkname")) + + for bold in bolded: + content = content.replace("**"+bold+"**","[b]"+bold+"[/b]") + for italic in italics: + content = content.replace("*"+italic+"*","[i]"+italic+"[/i]") + for strik in striked: + content = content.replace("~~"+strik+"~~","[s]"+strik+"[/s]") + for code in coded: + content = content.replace("`"+code+"`","[code]"+code+"[/code]") + for image in images: + var substr = image.split("(") + var imglink = substr[1].rstrip(")") + content = content.replace(image,"[img]"+imglink+"[/img]") + for i in links.size(): + content = content.replace("["+linknames[i]+"]("+links[i]+")","[url="+links[i]+"]"+linknames[i]+"[/url]") + for element in lists: + 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) + +func print_html(content : String): + content = content.replace("","[i]") + content = content.replace("","[/i]") + content = content.replace("","[b]") + content = content.replace("","[/b]") + content = content.replace("","[u]") + content = content.replace("","[/u]") + content = content.replace('',"]") + content = content.replace("","[/url]") + content = content.replace('',"[/img]") + content = content.replace('"/>',"[/img]") + content = content.replace("
","[code]")
+	content = content.replace("
","[/code]") + content = content.replace("
","[center]") + content = content.replace("
","[/center]") TextPreview.append_bbcode(content) diff --git a/addons/file-editor/scripts/file-editor.gd b/addons/file-editor/scripts/file-editor.gd index 266c2a5..576a861 100644 --- a/addons/file-editor/scripts/file-editor.gd +++ b/addons/file-editor/scripts/file-editor.gd @@ -1,14 +1,29 @@ tool extends EditorPlugin -var doc +var doc = preload("../scenes/FileEditor.tscn").instance() var plugin_version +var toolbar +var fileditorbutton +var IconLoader = preload("res://addons/file-editor/scripts/IconLoader.gd") func _enter_tree(): - doc = preload("../scenes/FileEditor.tscn").instance() - add_control_to_dock(EditorPlugin.DOCK_SLOT_LEFT_BR,doc) - + add_autoload_singleton("IconLoader","res://addons/file-editor/scripts/IconLoader.gd") + get_editor_interface().get_editor_viewport().add_child(doc) + doc.hide() func _exit_tree(): - remove_control_from_docks(doc) - doc.queue_free() \ No newline at end of file + get_editor_interface().get_editor_viewport().remove_child(doc) + remove_autoload_singleton("IconLoader") + +func has_main_screen(): + return true + +func get_plugin_name(): + return "File" + +func get_plugin_icon(): + return IconLoader.load_icon_from_name("file") + +func make_visible(visible): + doc.visible = visible \ No newline at end of file