├── icon.png
├── medias
├── header.png
├── screenshots.jpg
├── header.png.import
└── screenshots.jpg.import
├── visuals
├── godot_icon.png
├── icons
│ ├── add.png
│ ├── cross.png
│ ├── delete.png
│ ├── download.png
│ ├── settings.png
│ ├── add.png.import
│ ├── cross.png.import
│ ├── delete.png.import
│ ├── download.png.import
│ └── settings.png.import
├── splashscreen.png
├── Poppins-Regular.ttf
├── fonts
│ ├── Poppins-Medium.ttf
│ └── MontserratAlternates-Regular.ttf
├── godot_icon.png.import
└── splashscreen.png.import
├── addons
└── google_fonts
│ ├── test.ttf
│ ├── plugin.cfg
│ ├── plugin.gd
│ ├── Menu.tscn
│ └── Menu.gd
├── default_env.tres
├── scripts
├── notification.gd
├── settings.gd
├── notifications.gd
├── setup.gd
├── card.gd
├── download_popup.gd
└── cards_view.gd
├── scenes
├── top_bar.gd
├── main.tscn
├── buton.tscn
├── notification.tscn
├── top_bar.tscn
├── main.gd
├── card_view.tscn
├── visuals
│ └── app_theme.tres
├── card.tscn
├── settings.tscn
├── download_popup.tscn
└── setup.tscn
├── .gitignore
├── autoload
├── network.tscn
├── globals.gd
├── user_settings.gd
├── network.gd
└── file_manager.gd
├── icon.png.import
├── LICENSE
├── project.godot
└── README.md
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/icon.png
--------------------------------------------------------------------------------
/medias/header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/medias/header.png
--------------------------------------------------------------------------------
/medias/screenshots.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/medias/screenshots.jpg
--------------------------------------------------------------------------------
/visuals/godot_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/godot_icon.png
--------------------------------------------------------------------------------
/visuals/icons/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/icons/add.png
--------------------------------------------------------------------------------
/visuals/icons/cross.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/icons/cross.png
--------------------------------------------------------------------------------
/visuals/icons/delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/icons/delete.png
--------------------------------------------------------------------------------
/visuals/splashscreen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/splashscreen.png
--------------------------------------------------------------------------------
/visuals/Poppins-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/Poppins-Regular.ttf
--------------------------------------------------------------------------------
/visuals/icons/download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/icons/download.png
--------------------------------------------------------------------------------
/visuals/icons/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/icons/settings.png
--------------------------------------------------------------------------------
/addons/google_fonts/test.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/addons/google_fonts/test.ttf
--------------------------------------------------------------------------------
/visuals/fonts/Poppins-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/fonts/Poppins-Medium.ttf
--------------------------------------------------------------------------------
/visuals/fonts/MontserratAlternates-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrEliptik/godownloader/HEAD/visuals/fonts/MontserratAlternates-Regular.ttf
--------------------------------------------------------------------------------
/addons/google_fonts/plugin.cfg:
--------------------------------------------------------------------------------
1 | [plugin]
2 |
3 | name="GoogleFonts"
4 | description="simple addon to choose and download google fonts"
5 | author="Aknakos"
6 | version="1.0"
7 | script="plugin.gd"
8 |
--------------------------------------------------------------------------------
/default_env.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Environment" load_steps=2 format=2]
2 |
3 | [sub_resource type="ProceduralSky" id=1]
4 |
5 | [resource]
6 | background_mode = 2
7 | background_sky = SubResource( 1 )
8 |
--------------------------------------------------------------------------------
/scripts/notification.gd:
--------------------------------------------------------------------------------
1 | extends Control
2 |
3 | var text: String = ""
4 |
5 | onready var text_label = $MarginContainer/HBoxContainer/Text
6 |
7 | func _ready() -> void:
8 | text_label.text = text
9 |
10 | func _on_CloseBtn_pressed() -> void:
11 | queue_free()
12 |
--------------------------------------------------------------------------------
/scenes/top_bar.gd:
--------------------------------------------------------------------------------
1 | extends MarginContainer
2 |
3 | signal add_version()
4 | signal settings()
5 |
6 | func _ready() -> void:
7 | pass
8 |
9 | func _on_AddBtn_pressed() -> void:
10 | emit_signal("add_version")
11 |
12 | func _on_SettingsBtn_pressed() -> void:
13 | emit_signal("settings")
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .import
2 | .vscode
3 |
4 | # Godot-specific ignores
5 | .import/
6 | export.cfg
7 | export_presets.cfg
8 |
9 | # Imported translations (automatically generated from CSV files)
10 | *.translation
11 |
12 | # Mono-specific ignores
13 | .mono/
14 | data_*/
15 |
16 | /addons/godot-plugin-refresher
17 | build/*
18 |
--------------------------------------------------------------------------------
/autoload/network.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://autoload/network.gd" type="Script" id=1]
4 |
5 | [node name="Network" type="Node2D"]
6 | script = ExtResource( 1 )
7 |
8 | [node name="HTTPRequest" type="HTTPRequest" parent="."]
9 | use_threads = true
10 |
11 | [node name="DownloadReq" type="HTTPRequest" parent="."]
12 | use_threads = true
13 |
14 | [connection signal="request_completed" from="HTTPRequest" to="." method="_on_HTTPRequest_request_completed"]
15 | [connection signal="request_completed" from="DownloadReq" to="." method="_on_DownloadReq_request_completed"]
16 |
--------------------------------------------------------------------------------
/autoload/globals.gd:
--------------------------------------------------------------------------------
1 | extends Node
2 |
3 | enum TYPE {STABLE, RC, BETA, ALPHA, PRE_ALPHA}
4 |
5 | var TYPE_TO_STRING = {
6 | TYPE.STABLE: "stable",
7 | TYPE.RC: "rc",
8 | TYPE.BETA: "beta",
9 | TYPE.ALPHA: "alpha",
10 | TYPE.PRE_ALPHA: "dev"
11 | }
12 |
13 | var version = {
14 | "path": "",
15 | "version": "",
16 | "type": TYPE.STABLE
17 | }
18 |
19 | var install_path: String = ""
20 | var setup_complete: bool = false
21 |
22 | var launch_startup: bool = true
23 | var check_update_auto: bool = true
24 | var auto_delete_install_file: bool = true
25 | var godot_versions = []
26 |
27 | var available_versions = []
28 |
--------------------------------------------------------------------------------
/icon.png.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://icon.png"
13 | dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/medias/header.png.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/header.png-f44621d7d416ab674b1299e95563cc18.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://medias/header.png"
13 | dest_files=[ "res://.import/header.png-f44621d7d416ab674b1299e95563cc18.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/visuals/icons/add.png.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/add.png-a4004089473e9c22b2bff2d5ed84ac27.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://visuals/icons/add.png"
13 | dest_files=[ "res://.import/add.png-a4004089473e9c22b2bff2d5ed84ac27.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/visuals/icons/cross.png.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/cross.png-512e03f7f6c1ad7ba0eb616041866ac1.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://visuals/icons/cross.png"
13 | dest_files=[ "res://.import/cross.png-512e03f7f6c1ad7ba0eb616041866ac1.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/visuals/icons/delete.png.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/delete.png-a26a67a2558febfcf658c46fadd455d9.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://visuals/icons/delete.png"
13 | dest_files=[ "res://.import/delete.png-a26a67a2558febfcf658c46fadd455d9.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/medias/screenshots.jpg.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/screenshots.jpg-39990cc2064265b355f040f559d92fb4.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://medias/screenshots.jpg"
13 | dest_files=[ "res://.import/screenshots.jpg-39990cc2064265b355f040f559d92fb4.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/visuals/godot_icon.png.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/godot_icon.png-8200d807580e8ef9bd80be7bd5ddfe1d.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://visuals/godot_icon.png"
13 | dest_files=[ "res://.import/godot_icon.png-8200d807580e8ef9bd80be7bd5ddfe1d.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/visuals/icons/download.png.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/download.png-4883107b972ef21624c7af365fd7d496.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://visuals/icons/download.png"
13 | dest_files=[ "res://.import/download.png-4883107b972ef21624c7af365fd7d496.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/visuals/icons/settings.png.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/settings.png-ad7bbc7a1e3344e950640e290efe8a72.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://visuals/icons/settings.png"
13 | dest_files=[ "res://.import/settings.png-ad7bbc7a1e3344e950640e290efe8a72.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/visuals/splashscreen.png.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="StreamTexture"
5 | path="res://.import/splashscreen.png-9e639f42aeb9bba09eba5604a64030bb.stex"
6 | metadata={
7 | "vram_texture": false
8 | }
9 |
10 | [deps]
11 |
12 | source_file="res://visuals/splashscreen.png"
13 | dest_files=[ "res://.import/splashscreen.png-9e639f42aeb9bba09eba5604a64030bb.stex" ]
14 |
15 | [params]
16 |
17 | compress/mode=0
18 | compress/lossy_quality=0.7
19 | compress/hdr_mode=0
20 | compress/bptc_ldr=0
21 | compress/normal_map=0
22 | flags/repeat=0
23 | flags/filter=true
24 | flags/mipmaps=false
25 | flags/anisotropic=false
26 | flags/srgb=2
27 | process/fix_alpha_border=true
28 | process/premult_alpha=false
29 | process/HDR_as_SRGB=false
30 | process/invert_color=false
31 | process/normal_map_invert_y=false
32 | stream=false
33 | size_limit=0
34 | detect_3d=true
35 | svg/scale=1.0
36 |
--------------------------------------------------------------------------------
/scripts/settings.gd:
--------------------------------------------------------------------------------
1 | extends ScrollContainer
2 |
3 | signal finish()
4 |
5 | onready var dir_path = $ContentMargin/VBoxContainer/GodotInstalls/HBoxContainer/DirPath
6 |
7 | func _ready() -> void:
8 | # TODO: handle multiple paths
9 | dir_path.text = Globals.install_path
10 |
11 | func _on_Startup_toggled(button_pressed: bool) -> void:
12 | Globals.launch_startup = button_pressed
13 |
14 | func _on_AutoUpdate_toggled(button_pressed: bool) -> void:
15 | Globals.check_update_auto = button_pressed
16 |
17 | func _on_DesktopShortcut_toggled(button_pressed: bool) -> void:
18 | pass
19 |
20 | func _on_AutoDeleteInstall_toggled(button_pressed: bool) -> void:
21 | Globals.auto_delete_install_file = button_pressed
22 |
23 | func _on_FinishBtn_pressed() -> void:
24 | UserSettings.apply_settings(UserSettings.load_settings())
25 | emit_signal("finish")
26 |
27 | func _on_CancelBtn_pressed() -> void:
28 | UserSettings.grab_settings()
29 | UserSettings.save_settings()
30 | emit_signal("finish")
31 |
--------------------------------------------------------------------------------
/scripts/notifications.gd:
--------------------------------------------------------------------------------
1 | extends Control
2 |
3 | export var notification_scene: PackedScene = preload("res://scenes/notification.tscn")
4 | export var notification_time: float = 4.0
5 |
6 | var queue: Array
7 |
8 | func _ready() -> void:
9 | pass
10 |
11 | func queue_notification(text: String) -> void:
12 | var instance = notification_scene.instance()
13 | instance.text = text
14 | queue.append(instance)
15 |
16 | # Check if timer is already running,
17 | # if not, we can pop a notification
18 | if $Timer.time_left > 0: return
19 |
20 | $Timer.start(notification_time)
21 | var inst = queue.pop_front()
22 | $Container.add_child(inst)
23 | $Tween.interpolate_property(inst, "rect_position", Vector2(0, 150), Vector2.ZERO,
24 | 0.3, Tween.TRANS_CUBIC, Tween.EASE_OUT)
25 | $Tween.start()
26 |
27 | func _on_Timer_timeout() -> void:
28 | var notif = $Container.get_child(0)
29 | if not notif: return
30 | $Tween.interpolate_property(notif, "modulate",
31 | Color(1, 1, 1, 1), Color(1, 1, 1, 0),
32 | 0.4, Tween.TRANS_CUBIC, Tween.EASE_IN)
33 | $Tween.start()
34 | yield(get_tree().create_timer(0.45), "timeout")
35 | notif.queue_free()
36 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Victor Meunier (MrEliptik)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/addons/google_fonts/plugin.gd:
--------------------------------------------------------------------------------
1 | tool
2 | extends EditorPlugin
3 |
4 |
5 | const MainPanel = preload("res://addons/google_fonts/Menu.tscn")
6 | var main_panel_instance
7 |
8 |
9 | func _enter_tree():
10 | main_panel_instance = MainPanel.instance()
11 | # Add the main panel to the editor's main viewport.
12 | get_editor_interface().get_editor_viewport().add_child(main_panel_instance)
13 | # Hide the main panel. Very much required.
14 | make_visible(false)
15 | main_panel_instance.connect('update_filesystem', self, '_update_filesystem')
16 |
17 | func _exit_tree():
18 | if main_panel_instance:
19 | main_panel_instance.queue_free()
20 |
21 | func make_visible(visible):
22 | if main_panel_instance:
23 | main_panel_instance.visible = visible
24 |
25 | func get_plugin_name():
26 | return "Fonts"
27 |
28 | func has_main_screen():
29 | return true
30 |
31 | func get_plugin_icon():
32 | return get_editor_interface().get_base_control().get_icon("Font", "EditorIcons")
33 |
34 | # var editor_settings = EditorPlugin.get_editor_interface().get_editor_settings()
35 | # var my_theme = editor_settings.get_setting("interface/theme/preset")
36 |
37 | func _update_filesystem():
38 | get_editor_interface().get_resource_filesystem().scan()
39 |
--------------------------------------------------------------------------------
/project.godot:
--------------------------------------------------------------------------------
1 | ; Engine configuration file.
2 | ; It's best edited using the editor UI and not directly,
3 | ; since the parameters that go here are not all obvious.
4 | ;
5 | ; Format:
6 | ; [section] ; section goes between []
7 | ; param=value ; assign values to parameters
8 |
9 | config_version=4
10 |
11 | [application]
12 |
13 | config/name="godownloader"
14 | run/main_scene="res://scenes/main.tscn"
15 | run/low_processor_mode=true
16 | boot_splash/image="res://visuals/splashscreen.png"
17 | boot_splash/bg_color=Color( 0.113725, 0.105882, 0.133333, 1 )
18 | config/icon="res://icon.png"
19 |
20 | [autoload]
21 |
22 | Globals="*res://autoload/globals.gd"
23 | FileManager="*res://autoload/file_manager.gd"
24 | UserSettings="*res://autoload/user_settings.gd"
25 |
26 | [display]
27 |
28 | window/size/width=1280
29 | window/size/height=720
30 | window/size/test_width=960
31 | window/size/test_height=540
32 | window/stretch/mode="2d"
33 | window/stretch/aspect="expand"
34 |
35 | [editor_plugins]
36 |
37 | enabled=PoolStringArray( "res://addons/google_fonts/plugin.cfg" )
38 |
39 | [physics]
40 |
41 | common/enable_pause_aware_picking=true
42 |
43 | [rendering]
44 |
45 | vram_compression/import_etc=true
46 | vram_compression/import_etc2=false
47 | environment/default_environment="res://default_env.tres"
48 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | A Godot download manager: easily manage, download and update your Godot installations.
6 |
7 | *NOTE: This app is currently under development!*
8 |
9 | ## Screenshots
10 |
11 |
12 |
13 |
14 |
15 |
16 | ## About me
17 |
18 | Full time indie gamedev: 3D, 2D & VR.
19 |
20 | - [Discord](https://discord.gg/83nFRPTP6t)
21 | - [YouTube](https://www.youtube.com/c/MrEliptik)
22 | - [TikTok](https://www.tiktok.com/@mreliptik)
23 | - [Twitter](https://twitter.com/mreliptik_)
24 | - [Instagram](https://www.instagram.com/_mreliptik)
25 | - [Itch.io](https://mreliptik.itch.io/)
26 | - [Sketchfab](https://sketchfab.com/victor.meunierpk)
27 |
28 | If you enjoyed this project and want to support me:
29 |
30 |
31 |
32 | ## LICENSE & Credits
33 |
34 | This project is distributed under the MIT license, which it's free to use, modify and redistribute, for both personnal and commercial projects. For more information see [LICENSE.md](https://github.com/MrEliptik/godownloader/blob/master/LICENSE).
35 |
--------------------------------------------------------------------------------
/scripts/setup.gd:
--------------------------------------------------------------------------------
1 | extends Control
2 |
3 | signal finish()
4 |
5 | var desktop_shortcut: bool = true
6 |
7 | onready var dirPath = $Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer/DirPath
8 | onready var finishBtn = $Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5/FinishBtn
9 | onready var executablesFound = $Control/VBoxContainer/ContentMargin/VBoxContainer/ExecutablesFound
10 |
11 | func _ready() -> void:
12 | finishBtn.disabled = true
13 | executablesFound.modulate.a = 0
14 |
15 | func _on_BrowseBtn_pressed() -> void:
16 | $Control/FileDialog.show()
17 |
18 | func _on_FinishBtn_pressed() -> void:
19 | emit_signal("finish")
20 | call_deferred("queue_free")
21 |
22 | func _on_Startup_pressed() -> void:
23 | Globals.launch_startup
24 |
25 | func _on_FileDialog_dir_selected(dir: String) -> void:
26 | dirPath.text = dir
27 | finishBtn.disabled = false
28 |
29 | Globals.install_path = dir
30 | var res = FileManager.look_for_godot_in_dir(dir)
31 | executablesFound.text = "Found %s Godot executables" % res.size()
32 | executablesFound.modulate.a = 1.0
33 |
34 | for version in res:
35 | Globals.godot_versions.append(version)
36 |
37 | func _on_Startup_toggled(button_pressed):
38 | Globals.launch_startup = button_pressed
39 |
40 | func _on_CheckUpdateAuto_toggled(button_pressed):
41 | Globals.check_update_auto = button_pressed
42 |
43 | func _on_AutoDeleteInstall_toggled(button_pressed: bool) -> void:
44 | Globals.auto_delete_install_file = button_pressed
45 |
46 | func _on_DesktopShortcut_toggled(button_pressed):
47 | desktop_shortcut = button_pressed
48 |
--------------------------------------------------------------------------------
/scripts/card.gd:
--------------------------------------------------------------------------------
1 | tool
2 | extends Control
3 |
4 | export var installed: bool = false setget set_installed
5 |
6 | var version: String = "x.x.x" setget set_version
7 | var path: String = "path/to/somewhere" setget set_path
8 | var type: String = ""
9 |
10 | onready var version_label = $ContentMargin/HBoxContainer/VBoxContainer/Version
11 | onready var path_label = $ContentMargin/HBoxContainer/VBoxContainer/Path
12 |
13 | func _ready() -> void:
14 | version_label.text = version + " - " + type
15 | path_label.text = path
16 | # Set values
17 | $ContentMargin/HBoxContainer/DownloadBtn.visible = !installed
18 | $ContentMargin/HBoxContainer/EraseBtn.visible = installed
19 | $ContentMargin/HBoxContainer/LaunchBtn.visible = installed
20 |
21 | func set_installed(val: bool) -> void:
22 | installed = val
23 | if has_node("ContentMargin/HBoxContainer/DownloadBtn"):
24 | $ContentMargin/HBoxContainer/DownloadBtn.visible = !installed
25 | if has_node("ContentMargin/HBoxContainer/EraseBtn"):
26 | $ContentMargin/HBoxContainer/EraseBtn.visible = installed
27 |
28 | func set_version(new_version: String) -> void:
29 | version = new_version
30 | if version_label:
31 | version_label.text = version
32 |
33 | func set_path(new_path: String) -> void:
34 | path = new_path
35 | if path_label:
36 | path_label.text = path
37 |
38 | func launch(path: String) -> void:
39 | var output = []
40 | # -p to launch project manager
41 | # https://godotengine.org/qa/99353/opening-a-godot-game-from-another-wrong-project-lauches
42 | var pid = OS.execute(path, ["-p"], false, output)
43 | print(pid)
44 | print(output)
45 |
46 | func _on_LaunchBtn_pressed() -> void:
47 | launch(path)
48 |
--------------------------------------------------------------------------------
/scenes/main.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=5 format=2]
2 |
3 | [ext_resource path="res://scenes/top_bar.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://scenes/card_view.tscn" type="PackedScene" id=2]
5 | [ext_resource path="res://scripts/notifications.gd" type="Script" id=4]
6 | [ext_resource path="res://scenes/main.gd" type="Script" id=6]
7 |
8 | [node name="Main" type="Control"]
9 | anchor_right = 1.0
10 | anchor_bottom = 1.0
11 | script = ExtResource( 6 )
12 |
13 | [node name="ColorRect" type="ColorRect" parent="."]
14 | anchor_right = 1.0
15 | anchor_bottom = 1.0
16 | color = Color( 0.113725, 0.105882, 0.133333, 1 )
17 |
18 | [node name="VBoxContainer" type="VBoxContainer" parent="."]
19 | anchor_right = 1.0
20 | anchor_bottom = 1.0
21 |
22 | [node name="TopBar" parent="VBoxContainer" instance=ExtResource( 1 )]
23 |
24 | [node name="View" type="Control" parent="VBoxContainer"]
25 | margin_top = 64.0
26 | margin_right = 1280.0
27 | margin_bottom = 720.0
28 | size_flags_horizontal = 3
29 | size_flags_vertical = 3
30 |
31 | [node name="CardView" parent="VBoxContainer/View" instance=ExtResource( 2 )]
32 |
33 | [node name="PopupContainer" type="Control" parent="."]
34 | anchor_right = 1.0
35 | anchor_bottom = 1.0
36 | mouse_filter = 2
37 |
38 | [node name="Notifications" type="Control" parent="."]
39 | anchor_left = 0.5
40 | anchor_top = 1.0
41 | anchor_right = 0.5
42 | anchor_bottom = 1.0
43 | margin_left = -341.0
44 | margin_top = -144.0
45 | margin_right = 341.0
46 | margin_bottom = -17.0
47 | script = ExtResource( 4 )
48 |
49 | [node name="Container" type="Control" parent="Notifications"]
50 | anchor_right = 1.0
51 | anchor_bottom = 1.0
52 |
53 | [node name="Timer" type="Timer" parent="Notifications"]
54 | one_shot = true
55 |
56 | [node name="Tween" type="Tween" parent="Notifications"]
57 |
58 | [connection signal="add_version" from="VBoxContainer/TopBar" to="." method="_on_TopBar_add_version"]
59 | [connection signal="settings" from="VBoxContainer/TopBar" to="." method="_on_TopBar_settings"]
60 | [connection signal="timeout" from="Notifications/Timer" to="Notifications" method="_on_Timer_timeout"]
61 |
--------------------------------------------------------------------------------
/scenes/buton.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=8 format=2]
2 |
3 | [ext_resource path="res://visuals/fonts/Poppins-Medium.ttf" type="DynamicFontData" id=1]
4 |
5 | [sub_resource type="DynamicFont" id=7]
6 | size = 28
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
11 | [sub_resource type="StyleBoxFlat" id=15]
12 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
13 | border_width_left = 3
14 | border_width_top = 3
15 | border_width_right = 3
16 | border_width_bottom = 3
17 | border_color = Color( 1, 1, 1, 1 )
18 | corner_radius_top_left = 5
19 | corner_radius_top_right = 5
20 | corner_radius_bottom_right = 5
21 | corner_radius_bottom_left = 5
22 |
23 | [sub_resource type="StyleBoxFlat" id=16]
24 | bg_color = Color( 0.235294, 0.564706, 0.505882, 1 )
25 | corner_radius_top_left = 5
26 | corner_radius_top_right = 5
27 | corner_radius_bottom_right = 5
28 | corner_radius_bottom_left = 5
29 |
30 | [sub_resource type="StyleBoxEmpty" id=9]
31 |
32 | [sub_resource type="StyleBoxFlat" id=13]
33 | bg_color = Color( 0.427451, 0.427451, 0.447059, 1 )
34 | corner_radius_top_left = 5
35 | corner_radius_top_right = 5
36 | corner_radius_bottom_right = 5
37 | corner_radius_bottom_left = 5
38 |
39 | [sub_resource type="StyleBoxFlat" id=17]
40 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
41 | corner_radius_top_left = 5
42 | corner_radius_top_right = 5
43 | corner_radius_bottom_right = 5
44 | corner_radius_bottom_left = 5
45 |
46 | [node name="Button" type="Button"]
47 | margin_right = 200.0
48 | margin_bottom = 65.0
49 | rect_min_size = Vector2( 200, 65 )
50 | size_flags_vertical = 4
51 | custom_colors/font_color_disabled = Color( 0.113725, 0.105882, 0.133333, 1 )
52 | custom_colors/font_color_focus = Color( 0.203922, 0.203922, 0.231373, 1 )
53 | custom_colors/font_color = Color( 0.203922, 0.203922, 0.231373, 1 )
54 | custom_colors/font_color_hover = Color( 0.203922, 0.203922, 0.231373, 1 )
55 | custom_colors/font_color_pressed = Color( 0.203922, 0.203922, 0.231373, 1 )
56 | custom_fonts/font = SubResource( 7 )
57 | custom_styles/hover = SubResource( 15 )
58 | custom_styles/pressed = SubResource( 16 )
59 | custom_styles/focus = SubResource( 9 )
60 | custom_styles/disabled = SubResource( 13 )
61 | custom_styles/normal = SubResource( 17 )
62 | text = "DOWNLOAD"
63 |
--------------------------------------------------------------------------------
/autoload/user_settings.gd:
--------------------------------------------------------------------------------
1 | extends Node
2 |
3 | const SAVE_PATH = "user://config.cfg"
4 |
5 | var config_file = ConfigFile.new()
6 | var settings = {
7 | "godot": {
8 | "install_path": "",
9 | "setup_complete": false,
10 | "godot_versions": [],
11 | },
12 | "user": {
13 | "launch_startup": true,
14 | "check_update_auto": true,
15 | "auto_delete_install_file": true
16 | }
17 | }
18 |
19 | func _ready() -> void:
20 | ## Create config file if not existing
21 | ## otherwise, load values
22 | var file_check = File.new()
23 | if file_check.file_exists(SAVE_PATH):
24 | var values = load_settings()
25 | apply_settings(values)
26 | else:
27 | save_settings()
28 |
29 | func save_settings():
30 | for section in settings.keys():
31 | for key in settings[section].keys():
32 | config_file.set_value(section, key, settings[section][key])
33 |
34 | config_file.save(SAVE_PATH)
35 |
36 | func load_settings():
37 | var err = config_file.load(SAVE_PATH)
38 | if err != OK:
39 | print("Error loading the settings. Error code: %s" % err)
40 | return []
41 |
42 | var values = []
43 | for section in settings.keys():
44 | for key in settings[section].keys():
45 | var val = settings[section][key]
46 | values.append(config_file.get_value(section, key, val))
47 | settings[section][key] = config_file.get_value(section, key, val)
48 | # print("%s: %s" % [key, val])
49 | return settings
50 |
51 | func grab_settings():
52 | settings["godot"]["install_path"] = Globals.install_path
53 | settings["godot"]["setup_complete"] = Globals.setup_complete
54 | settings["godot"]["godot_versions"] = Globals.godot_versions
55 | settings["user"]["launch_startup"] = Globals.launch_startup
56 | settings["user"]["check_update_auto"] = Globals.check_update_auto
57 | settings["user"]["auto_delete_install_file"] = Globals.auto_delete_install_file
58 |
59 | func apply_settings(values: Dictionary):
60 | Globals.install_path = values["godot"]["install_path"]
61 | Globals.setup_complete = values["godot"]["setup_complete"]
62 | Globals.godot_versions = values["godot"]["godot_versions"]
63 | Globals.launch_startup = values["user"]["launch_startup"]
64 | Globals.check_update_auto = values["user"]["check_update_auto"]
65 | Globals.auto_delete_install_file = values["user"]["auto_delete_install_file"]
66 |
67 |
--------------------------------------------------------------------------------
/scenes/notification.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=6 format=2]
2 |
3 | [ext_resource path="res://visuals/Poppins-Regular.ttf" type="DynamicFontData" id=1]
4 | [ext_resource path="res://visuals/icons/cross.png" type="Texture" id=2]
5 | [ext_resource path="res://scripts/notification.gd" type="Script" id=3]
6 |
7 | [sub_resource type="StyleBoxFlat" id=1]
8 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
9 | corner_radius_top_left = 5
10 | corner_radius_top_right = 5
11 | corner_radius_bottom_right = 5
12 | corner_radius_bottom_left = 5
13 |
14 | [sub_resource type="DynamicFont" id=2]
15 | size = 24
16 | use_mipmaps = true
17 | use_filter = true
18 | font_data = ExtResource( 1 )
19 |
20 | [node name="Notification" type="Control"]
21 | anchor_right = 1.0
22 | anchor_bottom = 1.0
23 | script = ExtResource( 3 )
24 |
25 | [node name="Panel" type="Panel" parent="."]
26 | anchor_right = 1.0
27 | anchor_bottom = 1.0
28 | custom_styles/panel = SubResource( 1 )
29 |
30 | [node name="MarginContainer" type="MarginContainer" parent="."]
31 | anchor_right = 1.0
32 | anchor_bottom = 1.0
33 | custom_constants/margin_right = 15
34 | custom_constants/margin_left = 15
35 |
36 | [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"]
37 | margin_left = 15.0
38 | margin_right = 1265.0
39 | margin_bottom = 720.0
40 | size_flags_horizontal = 3
41 | size_flags_vertical = 3
42 | alignment = 1
43 |
44 | [node name="Text" type="Label" parent="MarginContainer/HBoxContainer"]
45 | margin_right = 1226.0
46 | margin_bottom = 720.0
47 | size_flags_horizontal = 3
48 | size_flags_vertical = 3
49 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
50 | custom_fonts/font = SubResource( 2 )
51 | text = "Example notification blahhhhh
52 | bkaaaaa"
53 | valign = 1
54 | autowrap = true
55 |
56 | [node name="CloseBtn" type="TextureButton" parent="MarginContainer/HBoxContainer"]
57 | margin_left = 1230.0
58 | margin_right = 1250.0
59 | margin_bottom = 720.0
60 | rect_min_size = Vector2( 20, 0 )
61 | size_flags_vertical = 3
62 | texture_normal = ExtResource( 2 )
63 | texture_pressed = ExtResource( 2 )
64 | texture_hover = ExtResource( 2 )
65 | texture_disabled = ExtResource( 2 )
66 | texture_focused = ExtResource( 2 )
67 | expand = true
68 | stretch_mode = 5
69 |
70 | [connection signal="pressed" from="MarginContainer/HBoxContainer/CloseBtn" to="." method="_on_CloseBtn_pressed"]
71 |
--------------------------------------------------------------------------------
/autoload/network.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | signal versions_updated()
4 | signal download_progress(progress)
5 | signal download_finished(complete, download_path)
6 |
7 | var mirror = "https://downloads.tuxfamily.org/godotengine/"
8 |
9 | onready var http_req = $HTTPRequest
10 | onready var download_req = $DownloadReq
11 |
12 | var version_regex = RegEx.new()
13 | var type_regex = RegEx.new()
14 |
15 | var downloading_version: String = ""
16 |
17 | var last_download_percent: int = 0
18 | var downloading: bool = false
19 | var download_path: String = ""
20 |
21 | func _ready() -> void:
22 | version_regex.compile("(?<=>)(?:[0-9]\\.){1,2}[0-9](?=<)")
23 | type_regex.compile("(?<=-)(.*?)(?=_)")
24 |
25 | # get_available_versions()
26 |
27 | func _process(delta: float) -> void:
28 | if not downloading: return
29 | var bodySize = download_req.get_body_size()
30 | var downloadedBytes = download_req.get_downloaded_bytes()
31 | print("Download: %smb" % str(downloadedBytes/1000000.0))
32 |
33 | var percent = ceil(downloadedBytes*100/bodySize)
34 | if percent > last_download_percent:
35 | last_download_percent = percent
36 | emit_signal("download_progress", percent)
37 |
38 | func get_available_versions() -> void:
39 | http_req.request(mirror)
40 | yield(http_req, "request_completed")
41 | emit_signal("versions_updated")
42 |
43 | func download_version(version: String) -> void:
44 | downloading_version = version
45 | download_path = "user://download_tmp_godot_%s.zip" % version
46 | download_req.set_download_file(download_path)
47 | download_req.request(mirror+"/"+version+"/Godot_v"+version+"-stable_win64.exe.zip")
48 | downloading = true
49 | last_download_percent = 0
50 |
51 | func cancel_download() -> void:
52 | download_req.cancel_request()
53 | downloading = false
54 | emit_signal("download_finished", false, download_path)
55 |
56 | func _on_HTTPRequest_request_completed(result: int, response_code: int, headers: PoolStringArray, body: PoolByteArray) -> void:
57 | # print(body.get_string_from_utf8())
58 | var res = version_regex.search_all(body.get_string_from_utf8())
59 | for r in res:
60 | Globals.available_versions.append({"version":r.get_string(), "type":Globals.TYPE.STABLE})
61 |
62 | func _on_DownloadReq_request_completed(result: int, response_code: int, headers: PoolStringArray, body: PoolByteArray) -> void:
63 | print(result)
64 | print(response_code)
65 | if response_code == 200:
66 | # Load a zip file
67 | emit_signal("download_finished", true, download_path)
68 | emit_signal("download_finished", false, download_path)
69 | downloading = false
70 |
71 |
72 |
--------------------------------------------------------------------------------
/scenes/top_bar.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=7 format=2]
2 |
3 | [ext_resource path="res://visuals/icons/settings.png" type="Texture" id=1]
4 | [ext_resource path="res://visuals/fonts/Poppins-Medium.ttf" type="DynamicFontData" id=2]
5 | [ext_resource path="res://icon.png" type="Texture" id=3]
6 | [ext_resource path="res://visuals/icons/download.png" type="Texture" id=4]
7 | [ext_resource path="res://scenes/top_bar.gd" type="Script" id=5]
8 |
9 | [sub_resource type="DynamicFont" id=1]
10 | size = 25
11 | use_mipmaps = true
12 | use_filter = true
13 | font_data = ExtResource( 2 )
14 |
15 | [node name="TopBar" type="MarginContainer"]
16 | margin_right = 1280.0
17 | margin_bottom = 60.0
18 | script = ExtResource( 5 )
19 |
20 | [node name="ColorRect" type="ColorRect" parent="."]
21 | margin_right = 1280.0
22 | margin_bottom = 60.0
23 | color = Color( 0.14902, 0.14902, 0.180392, 1 )
24 |
25 | [node name="ContentMargin" type="MarginContainer" parent="."]
26 | margin_right = 1280.0
27 | margin_bottom = 60.0
28 | rect_min_size = Vector2( 0, 60 )
29 | custom_constants/margin_right = 20
30 | custom_constants/margin_top = 10
31 | custom_constants/margin_left = 20
32 | custom_constants/margin_bottom = 10
33 |
34 | [node name="HBoxContainer" type="HBoxContainer" parent="ContentMargin"]
35 | margin_left = 20.0
36 | margin_top = 10.0
37 | margin_right = 1260.0
38 | margin_bottom = 50.0
39 |
40 | [node name="TextureRect" type="TextureRect" parent="ContentMargin/HBoxContainer"]
41 | margin_right = 60.0
42 | margin_bottom = 40.0
43 | rect_min_size = Vector2( 60, 0 )
44 | size_flags_vertical = 3
45 | texture = ExtResource( 3 )
46 | expand = true
47 | stretch_mode = 6
48 |
49 | [node name="Label" type="Label" parent="ContentMargin/HBoxContainer"]
50 | margin_left = 64.0
51 | margin_top = 2.0
52 | margin_right = 1112.0
53 | margin_bottom = 38.0
54 | size_flags_horizontal = 3
55 | size_flags_vertical = 6
56 | custom_fonts/font = SubResource( 1 )
57 | text = "Godownloader v0.1"
58 | align = 1
59 | valign = 1
60 |
61 | [node name="AddBtn" type="TextureButton" parent="ContentMargin/HBoxContainer"]
62 | margin_left = 1116.0
63 | margin_right = 1176.0
64 | margin_bottom = 40.0
65 | rect_min_size = Vector2( 60, 0 )
66 | size_flags_vertical = 3
67 | texture_normal = ExtResource( 4 )
68 | expand = true
69 | stretch_mode = 5
70 |
71 | [node name="SettingsBtn" type="TextureButton" parent="ContentMargin/HBoxContainer"]
72 | margin_left = 1180.0
73 | margin_right = 1240.0
74 | margin_bottom = 40.0
75 | rect_min_size = Vector2( 60, 0 )
76 | size_flags_vertical = 3
77 | texture_normal = ExtResource( 1 )
78 | expand = true
79 | stretch_mode = 5
80 |
81 | [connection signal="pressed" from="ContentMargin/HBoxContainer/AddBtn" to="." method="_on_AddBtn_pressed"]
82 | [connection signal="pressed" from="ContentMargin/HBoxContainer/SettingsBtn" to="." method="_on_SettingsBtn_pressed"]
83 |
--------------------------------------------------------------------------------
/scripts/download_popup.gd:
--------------------------------------------------------------------------------
1 | extends Control
2 |
3 | signal download(version)
4 | signal cancel()
5 |
6 | onready var version_btn = $Control/VBoxContainer/ContentMargin/VBoxContainer/VersionContainer/VersionBtn
7 | onready var download_btn = $Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5/DownloadBtn
8 | onready var cancel_btn = $Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5/CancelBtn
9 | onready var download_label = $Control/VBoxContainer/ContentMargin/VBoxContainer/DownloadContainer/DownloadLabel
10 | onready var download_bar = $Control/VBoxContainer/ContentMargin/VBoxContainer/DownloadContainer/ProgressBar
11 |
12 | var alpha: bool = true
13 | var beta: bool = true
14 | var stable: bool = true
15 |
16 | func _ready() -> void:
17 | fill_in_versions()
18 | $Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer.show()
19 | $Control/VBoxContainer/ContentMargin/VBoxContainer/VersionContainer.show()
20 | $Control/VBoxContainer/ContentMargin/VBoxContainer/DownloadContainer.hide()
21 | download_btn.show()
22 | cancel_btn.hide()
23 | download_bar.value = 0
24 |
25 | func update_progress(val: float) -> void:
26 | download_bar.value = val
27 |
28 | func fill_in_versions() -> void:
29 | for version in Globals.available_versions:
30 | # Skip the version we don't want to see
31 | if version["type"] == Globals.TYPE.ALPHA && not alpha: continue
32 | if version["type"] == Globals.TYPE.BETA && not beta: continue
33 | if version["type"] == Globals.TYPE.STABLE && not stable: continue
34 |
35 | version_btn.add_item(version["version"])
36 |
37 | func erase_options() -> void:
38 | version_btn.clear()
39 |
40 | func _on_Alpha_toggled(button_pressed: bool) -> void:
41 | alpha = button_pressed
42 | erase_options()
43 | fill_in_versions()
44 |
45 | func _on_Beta_toggled(button_pressed: bool) -> void:
46 | beta = button_pressed
47 | erase_options()
48 | fill_in_versions()
49 |
50 | func _on_Stable_toggled(button_pressed: bool) -> void:
51 | stable = button_pressed
52 | erase_options()
53 | fill_in_versions()
54 |
55 | func _on_VersionBtn_item_selected(index: int) -> void:
56 | download_btn.text = "DOWNLOAD v%s" % version_btn.get_item_text(index)
57 |
58 | func _on_DownloadBtn_pressed() -> void:
59 | var version = version_btn.get_item_text(version_btn.selected)
60 | emit_signal("download", version)
61 | download_label.text = "Downloading Godot %s" % version
62 | $Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer.hide()
63 | $Control/VBoxContainer/ContentMargin/VBoxContainer/VersionContainer.hide()
64 | $Control/VBoxContainer/ContentMargin/VBoxContainer/DownloadContainer.show()
65 | download_btn.hide()
66 | cancel_btn.show()
67 |
68 | func _on_CloseBtn_pressed() -> void:
69 | queue_free()
70 |
71 | func _on_CancelBtn_pressed() -> void:
72 | emit_signal("cancel")
73 |
--------------------------------------------------------------------------------
/addons/google_fonts/Menu.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://addons/google_fonts/Menu.gd" type="Script" id=1]
4 |
5 | [node name="Menu" type="PanelContainer"]
6 | anchor_right = 1.0
7 | anchor_bottom = 1.0
8 | size_flags_horizontal = 3
9 | size_flags_vertical = 3
10 | script = ExtResource( 1 )
11 | __meta__ = {
12 | "_edit_use_anchors_": false
13 | }
14 |
15 | [node name="split" type="HSplitContainer" parent="."]
16 | margin_left = 7.0
17 | margin_top = 7.0
18 | margin_right = 1017.0
19 | margin_bottom = 593.0
20 | __meta__ = {
21 | "_edit_use_anchors_": false
22 | }
23 |
24 | [node name="box" type="VBoxContainer" parent="split"]
25 | margin_right = 261.0
26 | margin_bottom = 586.0
27 | size_flags_horizontal = 3
28 | size_flags_stretch_ratio = 0.36
29 |
30 | [node name="Tree" type="Tree" parent="split/box"]
31 | margin_right = 261.0
32 | margin_bottom = 562.0
33 | size_flags_horizontal = 3
34 | size_flags_vertical = 3
35 | size_flags_stretch_ratio = 0.35
36 | hide_root = true
37 | __meta__ = {
38 | "_edit_use_anchors_": false
39 | }
40 |
41 | [node name="Button" type="Button" parent="split/box"]
42 | margin_top = 566.0
43 | margin_right = 261.0
44 | margin_bottom = 586.0
45 | text = "Reload"
46 |
47 | [node name="PanelContainer" type="PanelContainer" parent="split"]
48 | margin_left = 273.0
49 | margin_right = 1010.0
50 | margin_bottom = 586.0
51 | size_flags_horizontal = 3
52 | size_flags_vertical = 3
53 |
54 | [node name="VBoxContainer" type="VBoxContainer" parent="split/PanelContainer"]
55 | margin_left = 7.0
56 | margin_top = 7.0
57 | margin_right = 730.0
58 | margin_bottom = 579.0
59 | size_flags_horizontal = 3
60 | size_flags_vertical = 3
61 |
62 | [node name="TextEdit" type="TextEdit" parent="split/PanelContainer/VBoxContainer"]
63 | margin_right = 723.0
64 | margin_bottom = 572.0
65 | size_flags_horizontal = 3
66 | size_flags_vertical = 3
67 | text = "lorem ipsum"
68 | context_menu_enabled = false
69 | shortcut_keys_enabled = false
70 | virtual_keyboard_enabled = false
71 | selecting_enabled = false
72 | wrap_enabled = true
73 |
74 | [node name="save" type="Button" parent="split/PanelContainer/VBoxContainer"]
75 | visible = false
76 | margin_top = 502.0
77 | margin_right = 723.0
78 | margin_bottom = 572.0
79 | size_flags_vertical = 3
80 | size_flags_stretch_ratio = 0.14
81 | text = "Save Font to Project"
82 | __meta__ = {
83 | "_edit_use_anchors_": false
84 | }
85 |
86 | [node name="HTTPRequest" type="HTTPRequest" parent="."]
87 | use_threads = true
88 |
89 | [connection signal="cell_selected" from="split/box/Tree" to="." method="_on_Tree_cell_selected"]
90 | [connection signal="pressed" from="split/box/Button" to="." method="_on_Button_pressed"]
91 | [connection signal="pressed" from="split/PanelContainer/VBoxContainer/save" to="." method="_on_save_pressed"]
92 | [connection signal="request_completed" from="HTTPRequest" to="." method="_on_HTTPRequest_request_completed"]
93 |
--------------------------------------------------------------------------------
/scenes/main.gd:
--------------------------------------------------------------------------------
1 | extends Control
2 |
3 | export var setup_scene = preload("res://scenes/setup.tscn")
4 | export var cardview_scene = preload("res://scenes/card_view.tscn")
5 | export var settings_scene = preload("res://scenes/settings.tscn")
6 | export var network = preload("res://autoload/network.tscn")
7 | export var download_popup_scene = preload("res://scenes/download_popup.tscn")
8 |
9 | var download_popup = null
10 |
11 | onready var net_instance = network.instance()
12 | onready var view_container = $VBoxContainer/View
13 | onready var popup_container = $PopupContainer
14 | onready var notifications = $Notifications
15 |
16 | func _ready() -> void:
17 | add_child(net_instance)
18 | net_instance.get_available_versions()
19 | net_instance.connect("download_progress", self, "on_download_progress")
20 | net_instance.connect("download_finished", self, "on_download_finished")
21 | net_instance.connect("versions_updated", $VBoxContainer/View/CardView, "on_versions_updated")
22 |
23 | if Globals.setup_complete:
24 | pass
25 | else:
26 | var instance = setup_scene.instance()
27 | popup_container.add_child(instance)
28 | instance.connect("finish", $VBoxContainer/View/CardView, "_on_Setup_finish")
29 |
30 | # notifications.queue_notification("Test blabla bla, long test, bla bla bla")
31 |
32 | func _on_TopBar_add_version() -> void:
33 | var instance = download_popup_scene.instance()
34 | add_child(instance)
35 | instance.connect("download", self, "on_download_popup_download")
36 | instance.connect("cancel", self, "on_download_popup_cancel")
37 | download_popup = instance
38 |
39 | func _on_TopBar_settings() -> void:
40 | var curr_scene = view_container.get_child(0)
41 | if curr_scene.get_name() == "Settings": return
42 | var instance = settings_scene.instance()
43 | view_container.add_child(instance)
44 | instance.connect("finish", self, "on_settings_finish")
45 | curr_scene.queue_free()
46 |
47 | func on_download_popup_download(version: String) -> void:
48 | net_instance.download_version(version)
49 |
50 | func on_download_popup_cancel() -> void:
51 | net_instance.cancel_download()
52 |
53 | func on_download_progress(progress: int) -> void:
54 | download_popup.update_progress(progress)
55 |
56 | func on_download_finished(complete: bool, path:String) -> void:
57 | download_popup.queue_free()
58 | if complete:
59 | notifications.queue_notification("Download finished! Unzipping..")
60 | # Unzip to install dir
61 | FileManager.unzip_to(path, Globals.install_path)
62 |
63 | notifications.queue_notification("Successfuly unzipped: %s" % path)
64 | # Remove download
65 | FileManager.delete_file(path)
66 | else:
67 | notifications.queue_notification("Download stopped. Deleting file..")
68 | # Remove download
69 | FileManager.delete_file(path)
70 |
71 | func on_settings_finish() -> void:
72 | var curr_scene = view_container.get_child(0)
73 | var instance = cardview_scene.instance()
74 | view_container.add_child(instance)
75 | curr_scene.queue_free()
76 |
--------------------------------------------------------------------------------
/autoload/file_manager.gd:
--------------------------------------------------------------------------------
1 | extends Node
2 |
3 | static func look_for_godot_in_dir(dir_path: String) -> Array:
4 | var res = []
5 | var dir = Directory.new()
6 |
7 | var godot_regex = RegEx.new()
8 | godot_regex.compile("(Godot_.*)")
9 |
10 | var version_regex = RegEx.new()
11 | version_regex.compile("((?:[0-9]\\.){1,2}[0-9])")
12 |
13 | var type_regex = RegEx.new()
14 | type_regex.compile("(?<=-)(.*?)(?=_)")
15 |
16 | if dir.open(dir_path) == OK:
17 | dir.list_dir_begin()
18 | var file_name = dir.get_next()
19 | while file_name != "":
20 | if dir.current_is_dir():
21 | print("Found directory: " + file_name)
22 | else:
23 | print("Found file: " + file_name)
24 | # Check if godot
25 | var result = godot_regex.search(file_name)
26 | if result:
27 | print(result.get_string())
28 | var version_res = version_regex.search(file_name)
29 | if version_res:
30 | var type = ""
31 | print(version_res.get_string())
32 | var type_res = type_regex.search(file_name)
33 | if type_res:
34 | print(type_res.get_string())
35 | type = type_res.get_string()
36 |
37 | match type:
38 | "stable":
39 | type = Globals.TYPE.STABLE
40 | "rc":
41 | type = Globals.TYPE.RC
42 | "beta":
43 | type = Globals.TYPE.BETA
44 | "alpha":
45 | type = Globals.TYPE.ALPHA
46 | "dev":
47 | type = Globals.TYPE.PRE_ALPHA
48 | _:
49 | type = Globals.TYPE.PRE_ALPHA
50 |
51 | var version = {
52 | "path":dir_path.plus_file(file_name),
53 | "version": version_res.get_string(),
54 | "type": type
55 | }
56 | res.append(version)
57 | file_name = dir.get_next()
58 | else:
59 | print("An error occurred when trying to access the path.")
60 |
61 | return res
62 |
63 | static func unzip_to(path: String, to: String) -> void:
64 | # Convert relative path to absolute
65 | var abs_path = get_abs_path(path)
66 | # Convert path to "windows" path, necessary for "del"
67 | abs_path = abs_path.replacen("/", "\\")
68 |
69 | to = to.replacen("/", "\\")
70 |
71 | print("\"%s\""%to)
72 |
73 | var output = []
74 | # Expand-Archive -LiteralPath .\Godot_v3.4.3-stable_win64.exe.zip -DestinationPath "C:\Users\Victor\Downloads\Godot_v3.4.3" -Force
75 | if OS.execute("powershell.exe",
76 | ["-Command", "Expand-Archive", "-LiteralPath", abs_path, "-DestinationPath", "\'%s\'"%to, "-Force"],
77 | true, output, true) != OK:
78 | print("Unzipping %s failed" % abs_path)
79 | print(output)
80 |
81 | static func delete_file(path: String) -> void:
82 | # Convert relative path to absolute
83 | var abs_path = get_abs_path(path)
84 | # Convert path to "windows" path, necessary for "del"
85 | abs_path = abs_path.replacen("/", "\\")
86 | var output = []
87 | if OS.execute("del", [abs_path], true, output, true) != OK:
88 | print("Deleting %s failed" % abs_path)
89 | print(output)
90 |
91 | # Converts relative path to absolute
92 | static func get_abs_path(path: String) -> String:
93 | var file = File.new()
94 | file.open(path, File.READ)
95 | var abs_path = file.get_path_absolute()
96 | file.close()
97 | return abs_path
98 |
--------------------------------------------------------------------------------
/scenes/card_view.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=7 format=2]
2 |
3 | [ext_resource path="res://scripts/cards_view.gd" type="Script" id=1]
4 | [ext_resource path="res://scenes/card.tscn" type="PackedScene" id=2]
5 | [ext_resource path="res://visuals/Poppins-Regular.ttf" type="DynamicFontData" id=4]
6 | [ext_resource path="res://scenes/visuals/app_theme.tres" type="Theme" id=5]
7 |
8 | [sub_resource type="DynamicFont" id=1]
9 | size = 34
10 | use_mipmaps = true
11 | use_filter = true
12 | font_data = ExtResource( 4 )
13 |
14 | [sub_resource type="DynamicFont" id=2]
15 | size = 30
16 | use_mipmaps = true
17 | use_filter = true
18 | font_data = ExtResource( 4 )
19 |
20 | [node name="CardView" type="ScrollContainer"]
21 | anchor_right = 1.0
22 | anchor_bottom = 1.0
23 | margin_right = -6.0
24 | size_flags_horizontal = 3
25 | size_flags_vertical = 3
26 | theme = ExtResource( 5 )
27 | follow_focus = true
28 | script = ExtResource( 1 )
29 |
30 | [node name="ContentMargin" type="MarginContainer" parent="."]
31 | margin_right = 1274.0
32 | margin_bottom = 720.0
33 | size_flags_horizontal = 3
34 | size_flags_vertical = 3
35 | custom_constants/margin_right = 20
36 | custom_constants/margin_top = 30
37 | custom_constants/margin_left = 20
38 | custom_constants/margin_bottom = 15
39 |
40 | [node name="VBoxContainer" type="VBoxContainer" parent="ContentMargin"]
41 | margin_left = 20.0
42 | margin_top = 30.0
43 | margin_right = 1254.0
44 | margin_bottom = 705.0
45 | size_flags_horizontal = 3
46 | size_flags_vertical = 3
47 | custom_constants/separation = 15
48 |
49 | [node name="LatestVersion" type="VBoxContainer" parent="ContentMargin/VBoxContainer"]
50 | visible = false
51 | margin_right = 1234.0
52 | margin_bottom = 190.0
53 | custom_constants/separation = 10
54 |
55 | [node name="Label" type="Label" parent="ContentMargin/VBoxContainer/LatestVersion"]
56 | margin_right = 1234.0
57 | margin_bottom = 60.0
58 | rect_min_size = Vector2( 0, 60 )
59 | size_flags_horizontal = 3
60 | custom_colors/font_color = Color( 0.345098, 0.839216, 0.74902, 1 )
61 | custom_fonts/font = SubResource( 1 )
62 | text = "New version available!"
63 |
64 | [node name="HSeparator" type="HSeparator" parent="ContentMargin/VBoxContainer/LatestVersion/Label"]
65 | margin_top = 41.0
66 | margin_right = 1228.0
67 | margin_bottom = 67.0
68 | size_flags_horizontal = 3
69 |
70 | [node name="Card" parent="ContentMargin/VBoxContainer/LatestVersion" instance=ExtResource( 2 )]
71 | margin_top = 70.0
72 | margin_right = 1234.0
73 | margin_bottom = 190.0
74 |
75 | [node name="Installed" type="VBoxContainer" parent="ContentMargin/VBoxContainer"]
76 | margin_right = 1234.0
77 | margin_bottom = 60.0
78 | custom_constants/separation = 10
79 |
80 | [node name="Label" type="Label" parent="ContentMargin/VBoxContainer/Installed"]
81 | margin_right = 1234.0
82 | margin_bottom = 60.0
83 | rect_min_size = Vector2( 0, 60 )
84 | size_flags_horizontal = 3
85 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
86 | custom_fonts/font = SubResource( 2 )
87 | text = "Installed"
88 |
89 | [node name="HSeparator" type="HSeparator" parent="ContentMargin/VBoxContainer/Installed/Label"]
90 | margin_top = 38.0
91 | margin_right = 1228.0
92 | margin_bottom = 62.0
93 | size_flags_horizontal = 3
94 |
--------------------------------------------------------------------------------
/scripts/cards_view.gd:
--------------------------------------------------------------------------------
1 | extends ScrollContainer
2 |
3 | export var card_scene: PackedScene = preload("res://scenes/card.tscn")
4 |
5 | onready var latest_version = $ContentMargin/VBoxContainer/LatestVersion
6 | onready var installed = $ContentMargin/VBoxContainer/Installed
7 |
8 | func _ready() -> void:
9 | display_installed()
10 |
11 | func display_installed() -> void:
12 | for version in Globals.godot_versions:
13 | var instance = card_scene.instance()
14 | instance.path = version["path"]
15 | instance.version = version["version"]
16 | instance.type = Globals.TYPE_TO_STRING[version["type"]]
17 | instance.installed = true
18 | installed.add_child(instance)
19 |
20 | func check_new_version_available() -> String:
21 | var latest_version = ""
22 | var latest_installed_version = ""
23 |
24 | for version in Globals.available_versions:
25 | if version["type"] != Globals.TYPE.STABLE: continue
26 | latest_version = get_higher_version(version["version"], latest_version)
27 |
28 | # print(latest_version)
29 |
30 | for version in Globals.godot_versions:
31 | if version["type"] != Globals.TYPE.STABLE: continue
32 | latest_installed_version = get_higher_version(version["version"], latest_installed_version)
33 |
34 | print(latest_installed_version)
35 |
36 | var new_version = get_higher_version(latest_version, latest_installed_version)
37 | if new_version != latest_installed_version:
38 | print("new_version: ", new_version)
39 |
40 | return new_version
41 |
42 | func get_higher_version(vA, vB) -> String:
43 | var higher_version: String = ""
44 |
45 | # Get only the numbers in array form
46 | var splitA = vA.split(".")
47 | var splitB = vB.split(".")
48 |
49 | # initiliaze to one of the split
50 | # if they the versions are the same, we can return that
51 | # otherwise, it'll be overwritten
52 | var higher_version_arr = splitA
53 |
54 | # Make sure version are the same length by adding
55 | # zeros to the end
56 | while (splitA.size() < splitB.size()):
57 | splitA.append("0")
58 | while (splitB.size() < splitA.size()):
59 | splitB.append("0")
60 |
61 | # Start comparing
62 | for i in range(splitA.size()):
63 |
64 | # Same number, we can continue
65 | if int(splitA[i]) == int(splitB[i]): continue
66 |
67 | # A has bigger number, we don't need to continue
68 | # the rest doesn't matter
69 | elif int(splitA[i]) > int(splitB[i]):
70 | higher_version_arr = splitA
71 | break
72 | # B has bigger number, we don't need to continue
73 | # the rest doesn't matter
74 | else:
75 | higher_version_arr = splitB
76 | break
77 |
78 | # Turn the split into a semantic version string again
79 | for i in range(higher_version_arr.size()):
80 | if i == (higher_version_arr.size()-1):
81 | higher_version += str(higher_version_arr[i])
82 | else:
83 | higher_version += str(higher_version_arr[i]) + "."
84 |
85 | return higher_version
86 |
87 | func on_versions_updated() -> void:
88 | var new_version = check_new_version_available()
89 | if not new_version: return
90 | $ContentMargin/VBoxContainer/LatestVersion/Card.version = new_version
91 | $ContentMargin/VBoxContainer/LatestVersion/Card.path = ""
92 | $ContentMargin/VBoxContainer/LatestVersion.show()
93 |
94 | func _on_Setup_finish() -> void:
95 | display_installed()
96 |
97 | Globals.setup_complete = true
98 | UserSettings.grab_settings()
99 | UserSettings.save_settings()
100 |
101 | check_new_version_available()
102 |
--------------------------------------------------------------------------------
/scenes/visuals/app_theme.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Theme" load_steps=9 format=2]
2 |
3 | [ext_resource path="res://visuals/Poppins-Regular.ttf" type="DynamicFontData" id=1]
4 |
5 | [sub_resource type="DynamicFont" id=6]
6 | use_mipmaps = true
7 | use_filter = true
8 | font_data = ExtResource( 1 )
9 |
10 | [sub_resource type="DynamicFont" id=7]
11 | size = 20
12 | use_mipmaps = true
13 | use_filter = true
14 | font_data = ExtResource( 1 )
15 |
16 | [sub_resource type="StyleBoxEmpty" id=4]
17 | content_margin_left = 10.0
18 |
19 | [sub_resource type="StyleBoxFlat" id=5]
20 | content_margin_left = 10.0
21 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
22 | corner_radius_top_left = 5
23 | corner_radius_top_right = 5
24 | corner_radius_bottom_right = 5
25 | corner_radius_bottom_left = 5
26 |
27 | [sub_resource type="StyleBoxFlat" id=1]
28 | bg_color = Color( 0.203922, 0.203922, 0.231373, 1 )
29 | corner_radius_top_left = 5
30 | corner_radius_top_right = 5
31 | corner_radius_bottom_right = 5
32 | corner_radius_bottom_left = 5
33 |
34 | [sub_resource type="StyleBoxFlat" id=2]
35 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
36 | corner_radius_top_left = 5
37 | corner_radius_top_right = 5
38 | corner_radius_bottom_right = 5
39 | corner_radius_bottom_left = 5
40 |
41 | [sub_resource type="StyleBoxFlat" id=3]
42 | bg_color = Color( 0.427451, 0.427451, 0.447059, 1 )
43 | corner_radius_top_left = 5
44 | corner_radius_top_right = 5
45 | corner_radius_bottom_right = 5
46 | corner_radius_bottom_left = 5
47 |
48 | [resource]
49 | default_font = SubResource( 6 )
50 | CheckBox/colors/font_color = Color( 0, 0, 0, 1 )
51 | CheckBox/colors/font_color_disabled = Color( 0, 0, 0, 1 )
52 | CheckBox/colors/font_color_focus = Color( 0, 0, 0, 1 )
53 | CheckBox/colors/font_color_hover = Color( 0, 0, 0, 1 )
54 | CheckBox/colors/font_color_hover_pressed = Color( 0, 0, 0, 1 )
55 | CheckBox/colors/font_color_pressed = Color( 0, 0, 0, 1 )
56 | CheckBox/constants/check_vadjust = 0
57 | CheckBox/constants/hseparation = 0
58 | CheckBox/fonts/font = SubResource( 6 )
59 | CheckBox/icons/checked = null
60 | CheckBox/icons/checked_disabled = null
61 | CheckBox/icons/radio_checked = null
62 | CheckBox/icons/radio_checked_disabled = null
63 | CheckBox/icons/radio_unchecked = null
64 | CheckBox/icons/radio_unchecked_disabled = null
65 | CheckBox/icons/unchecked = null
66 | CheckBox/icons/unchecked_disabled = null
67 | CheckBox/styles/disabled = null
68 | CheckBox/styles/focus = null
69 | CheckBox/styles/hover = null
70 | CheckBox/styles/hover_pressed = null
71 | CheckBox/styles/normal = null
72 | CheckBox/styles/pressed = null
73 | LineEdit/colors/clear_button_color = Color( 0, 0, 0, 1 )
74 | LineEdit/colors/clear_button_color_pressed = Color( 0, 0, 0, 1 )
75 | LineEdit/colors/cursor_color = Color( 0.8, 0.8, 0.807843, 1 )
76 | LineEdit/colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
77 | LineEdit/colors/font_color_selected = Color( 0.8, 0.8, 0.807843, 1 )
78 | LineEdit/colors/font_color_uneditable = Color( 0.8, 0.8, 0.807843, 1 )
79 | LineEdit/colors/selection_color = Color( 0, 0, 0, 1 )
80 | LineEdit/constants/minimum_spaces = 10
81 | LineEdit/fonts/font = SubResource( 7 )
82 | LineEdit/icons/clear = null
83 | LineEdit/styles/focus = SubResource( 4 )
84 | LineEdit/styles/normal = SubResource( 5 )
85 | LineEdit/styles/read_only = SubResource( 5 )
86 | VScrollBar/icons/decrement = null
87 | VScrollBar/icons/decrement_highlight = null
88 | VScrollBar/icons/decrement_pressed = null
89 | VScrollBar/icons/increment = null
90 | VScrollBar/icons/increment_highlight = null
91 | VScrollBar/icons/increment_pressed = null
92 | VScrollBar/styles/grabber = SubResource( 1 )
93 | VScrollBar/styles/grabber_highlight = SubResource( 2 )
94 | VScrollBar/styles/grabber_pressed = SubResource( 3 )
95 | VScrollBar/styles/scroll = null
96 | VScrollBar/styles/scroll_focus = null
97 |
--------------------------------------------------------------------------------
/scenes/card.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=10 format=2]
2 |
3 | [ext_resource path="res://visuals/Poppins-Regular.ttf" type="DynamicFontData" id=1]
4 | [ext_resource path="res://scenes/buton.tscn" type="PackedScene" id=2]
5 | [ext_resource path="res://scripts/card.gd" type="Script" id=3]
6 | [ext_resource path="res://visuals/icons/delete.png" type="Texture" id=4]
7 |
8 | [sub_resource type="StyleBoxFlat" id=8]
9 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
10 | corner_radius_top_left = 5
11 | corner_radius_top_right = 5
12 | corner_radius_bottom_right = 5
13 | corner_radius_bottom_left = 5
14 |
15 | [sub_resource type="DynamicFont" id=1]
16 | size = 28
17 | use_mipmaps = true
18 | use_filter = true
19 | font_data = ExtResource( 1 )
20 |
21 | [sub_resource type="DynamicFont" id=2]
22 | size = 24
23 | use_mipmaps = true
24 | use_filter = true
25 | font_data = ExtResource( 1 )
26 |
27 | [sub_resource type="StyleBoxFlat" id=10]
28 | bg_color = Color( 0.839216, 0.34902, 0.345098, 1 )
29 | border_width_left = 3
30 | border_width_top = 3
31 | border_width_right = 3
32 | border_width_bottom = 3
33 | border_color = Color( 1, 1, 1, 1 )
34 | corner_radius_top_left = 5
35 | corner_radius_top_right = 5
36 | corner_radius_bottom_right = 5
37 | corner_radius_bottom_left = 5
38 |
39 | [sub_resource type="StyleBoxFlat" id=9]
40 | bg_color = Color( 0.839216, 0.34902, 0.345098, 1 )
41 | corner_radius_top_left = 5
42 | corner_radius_top_right = 5
43 | corner_radius_bottom_right = 5
44 | corner_radius_bottom_left = 5
45 |
46 | [node name="Card" type="Control"]
47 | margin_right = 648.0
48 | margin_bottom = 82.0
49 | rect_min_size = Vector2( 0, 120 )
50 | size_flags_horizontal = 3
51 | script = ExtResource( 3 )
52 |
53 | [node name="Panel" type="Panel" parent="."]
54 | anchor_right = 1.0
55 | anchor_bottom = 1.0
56 | custom_styles/panel = SubResource( 8 )
57 |
58 | [node name="ContentMargin" type="MarginContainer" parent="."]
59 | anchor_right = 1.0
60 | anchor_bottom = 1.0
61 | size_flags_horizontal = 3
62 | size_flags_vertical = 3
63 | custom_constants/margin_right = 10
64 | custom_constants/margin_top = 10
65 | custom_constants/margin_left = 10
66 | custom_constants/margin_bottom = 5
67 |
68 | [node name="HBoxContainer" type="HBoxContainer" parent="ContentMargin"]
69 | margin_left = 10.0
70 | margin_top = 10.0
71 | margin_right = 638.0
72 | margin_bottom = 115.0
73 | custom_constants/separation = 15
74 |
75 | [node name="VBoxContainer" type="VBoxContainer" parent="ContentMargin/HBoxContainer"]
76 | margin_top = 12.0
77 | margin_right = 246.0
78 | margin_bottom = 92.0
79 | size_flags_vertical = 4
80 | custom_constants/separation = 5
81 |
82 | [node name="Version" type="Label" parent="ContentMargin/HBoxContainer/VBoxContainer"]
83 | margin_right = 246.0
84 | margin_bottom = 40.0
85 | size_flags_horizontal = 3
86 | size_flags_vertical = 6
87 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
88 | custom_fonts/font = SubResource( 1 )
89 | text = "x.x.x - "
90 | valign = 1
91 |
92 | [node name="Path" type="Label" parent="ContentMargin/HBoxContainer/VBoxContainer"]
93 | margin_top = 45.0
94 | margin_right = 246.0
95 | margin_bottom = 80.0
96 | size_flags_horizontal = 3
97 | size_flags_vertical = 6
98 | custom_colors/font_color = Color( 0.427451, 0.427451, 0.447059, 1 )
99 | custom_fonts/font = SubResource( 2 )
100 | text = "path/to/somewhere"
101 | valign = 1
102 |
103 | [node name="HSeparator" type="HSeparator" parent="ContentMargin/HBoxContainer"]
104 | self_modulate = Color( 1, 1, 1, 0 )
105 | margin_left = 261.0
106 | margin_right = 413.0
107 | margin_bottom = 105.0
108 | size_flags_horizontal = 3
109 |
110 | [node name="DownloadBtn" parent="ContentMargin/HBoxContainer" instance=ExtResource( 2 )]
111 | margin_left = 428.0
112 | margin_top = 20.0
113 | margin_right = 628.0
114 | margin_bottom = 85.0
115 | expand_icon = true
116 |
117 | [node name="LaunchBtn" parent="ContentMargin/HBoxContainer" instance=ExtResource( 2 )]
118 | visible = false
119 | margin_left = 348.0
120 | margin_top = 20.0
121 | margin_right = 548.0
122 | margin_bottom = 85.0
123 | text = "Launch"
124 | expand_icon = true
125 |
126 | [node name="EraseBtn" parent="ContentMargin/HBoxContainer" instance=ExtResource( 2 )]
127 | visible = false
128 | margin_left = 563.0
129 | margin_top = 20.0
130 | margin_right = 628.0
131 | margin_bottom = 85.0
132 | rect_min_size = Vector2( 65, 65 )
133 | custom_styles/hover = SubResource( 10 )
134 | custom_styles/normal = SubResource( 9 )
135 | text = ""
136 |
137 | [node name="TextureRect" type="TextureRect" parent="ContentMargin/HBoxContainer/EraseBtn"]
138 | anchor_left = 0.5
139 | anchor_top = 0.5
140 | anchor_right = 0.5
141 | anchor_bottom = 0.5
142 | margin_left = -20.0
143 | margin_top = -20.0
144 | margin_right = 20.0
145 | margin_bottom = 20.0
146 | texture = ExtResource( 4 )
147 | expand = true
148 | stretch_mode = 6
149 |
150 | [connection signal="pressed" from="ContentMargin/HBoxContainer/LaunchBtn" to="." method="_on_LaunchBtn_pressed"]
151 |
--------------------------------------------------------------------------------
/addons/google_fonts/Menu.gd:
--------------------------------------------------------------------------------
1 | tool
2 | extends PanelContainer
3 |
4 | signal update_filesystem
5 |
6 | onready var tree:Tree = $split/box/Tree
7 | onready var text:TextEdit = $split/PanelContainer/VBoxContainer/TextEdit
8 | onready var http:HTTPRequest = $HTTPRequest
9 | onready var saveb:Button = $split/PanelContainer/VBoxContainer/save
10 |
11 | var fonts
12 | var tree_map = {}
13 | var tree_map_index = 0
14 | var display_type = 0
15 | var font_name := ''
16 |
17 | var dummy = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do\neiusmod tempor incididunt ut labore et dolore magna aliqua.\nUt enim ad minim veniam, quis nostrud exercitation ullamco\nlaboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident,\nsunt in culpa qui officia deserunt mollit anim id est laborum.'
18 |
19 |
20 | func load_json(path):
21 | var file = File.new()
22 | if file.open(path, file.READ) != OK:
23 | return
24 | var data_text = file.get_as_text()
25 | file.close()
26 | var data_parse = JSON.parse(data_text)
27 | if data_parse.error != OK:
28 | return
29 | return data_parse.result
30 |
31 |
32 |
33 | func save_json(path, data:Dictionary):
34 | var file = File.new()
35 | if file.open(path, file.WRITE) != OK:
36 | return
37 | file.store_string(JSON.print(data))
38 | file.close()
39 |
40 |
41 | func update_font_file():
42 | var response = load_json("res://addons/google_fonts/response.json")
43 | var files = {}
44 | for r in response['tree']:
45 | if not r['path'].begins_with('.') and '/' in r['path']:
46 | var p = r['path'].split('/')
47 | var pointer = files
48 | for pp in p:
49 | if not pointer.has(pp):
50 | pointer[pp] = {}
51 | if not '.' in pp:
52 | pointer = pointer[pp]
53 | else:
54 | pointer[pp] = r['url']
55 | # print(Marshalls.base64_to_utf8('IyBPbmx5IHJ1biBnZnRvb2xzIHFhIG9uIHBycyB3aGljaCBoYXZlIG1vZGlm\naWVkIGZpbGVzIGluIGRpcmVjdG9yaWVzIHdoaWNoCiMgY29udGFpbiBmb250\nIGJpbmFyaWVzLgoKIyBGaW5kIGRpcmVjdG9yaWVzIHdoaWNoIGNvbnRhaW4g\nZmlsZXMgdGhhdCBoYXZlIGJlZW4gYWx0ZXJlZCBvciBhZGRlZC4gQWxzbwoj\nIFNraXAgL3N0YXRpYyBkaXJlY3Rvcmllcy4KQ0hBTkdFRF9ESVJTPSQoZ2l0\nIGRpZmYgb3JpZ2luL21haW4gLS1kaXJzdGF0PWZpbGVzIC0tZGlmZi1maWx0\nZXIgZCB8IHNlZCAicy9bMC05LiBdLiolLy9nIiB8IGdyZXAgLXYgInN0YXRp\nYyIpCk9VVD1vdXQKClBSX1VSTD0iJEdJVEhVQl9TRVJWRVJfVVJMLyRHSVRI\nVUJfUkVQT1NJVE9SWS9wdWxsLyRQUl9OVU1CRVIiCmVjaG8gIlBSIHVybDog\nJFBSX1VSTCIKCmZvciBkaXIgaW4gJENIQU5HRURfRElSUwpkbwogICAgZm9u\ndF9jb3VudD0kKGxzIC0xICRkaXIqLnR0ZiAyPi9kZXYvbnVsbCB8IHdjIC1s\nKQogICAgaXNfZGVzaWduZXJfZGlyPSQoZWNobyAkZGlyIHwgZ3JlcCAiZGVz\naWduZXJzIikKICAgIGlmIFsgJGZvbnRfY291bnQgIT0gMCBdCiAgICB0aGVu\nCgllY2hvICJDaGVja2luZyAkZGlyIgoJbWtkaXIgLXAgJE9VVAoJIyBJZiBw\nciBjb250YWlucyBtb2RpZmllZCBmb250cywgY2hlY2sgd2l0aCBGb250YmFr\nZXJ5LCBEaWZmZW5hdG9yIGFuZCBEaWZmQnJvd3NlcnMuCgkjIElmIHByIGRv\nZXNuJ3QgY29udGFpbiBtb2RpZmllZCBmb250cywganVzdCBjaGVjayB3aXRo\nIEZvbnRiYWtlcnkuCgltb2RpZmllZF9mb250cz0kKGdpdCBkaWZmIC0tbmFt\nZS1vbmx5IG9yaWdpbi9tYWluIEhFQUQgJGRpcioudHRmKQoJaWYgWyAtbiAi\nJG1vZGlmaWVkX2ZvbnRzIiBdCgl0aGVuCgkgICAgZWNobyAiRm9udHMgaGF2\nZSBiZWVuIG1vZGlmaWVkLiBDaGVja2luZyBmb250cyB3aXRoIGFsbCB0b29s\ncyIKCSAgICBnZnRvb2xzIHFhIC1mICRkaXIqLnR0ZiAtZ2ZiIC1hIC1vICRP\nVVQvJChiYXNlbmFtZSAkZGlyKV9xYSAtLW91dC11cmwgJFBSX1VSTAoJZWxz\nZQoJICAgIGVjaG8gIkZvbnRzIGhhdmUgbm90IGJlZW4gbW9kaWZpZWQuIENo\nZWNraW5nIGZvbnRzIHdpdGggRm9udGJha2VyeSBvbmx5IgoJICAgIGdmdG9v\nbHMgcWEgLWYgJGRpcioudHRmIC0tZm9udGJha2VyeSAtbyAkT1VULyQoYmFz\nZW5hbWUgJGRpcilfcWEgLS1vdXQtdXJsICRQUl9VUkwKCWZpCiAgICBlbGlm\nIFsgISAteiAkaXNfZGVzaWduZXJfZGlyIF0KICAgIHRoZW4KICAgICAgICBl\nY2hvICJDaGVja2luZyBkZXNpZ25lciBwcm9maWxlIgogICAgICAgIHB5dGVz\ndCAuY2kvdGVzdF9wcm9maWxlcy5weSAkZGlyCiAgICBlbHNlCgllY2hvICJT\na2lwcGluZyAkZGlyLiBEaXJlY3RvcnkgZG9lcyBub3QgY29udGFpbiBmb250\ncyIKICAgIGZpCmRvbmUKCg==\n')
56 | save_json('res://addons/google_fonts/fonts.json', files)
57 | print('fonts updated')
58 | return files
59 |
60 |
61 | func populate_branch(tree, root, pointer:Dictionary):
62 | for p in pointer.keys():
63 | var branch = tree.create_item(root)
64 | branch.set_text(0, p)
65 | if typeof(pointer[p]) == TYPE_DICTIONARY:
66 | populate_branch(tree, branch, pointer[p])
67 | else:
68 | branch.set_meta('url', pointer[p])
69 |
70 | func populate_tree():
71 | tree.clear()
72 | var root = tree.create_item()
73 | populate_branch(tree, root, fonts)
74 |
75 |
76 | func _ready():
77 | var f = File.new()
78 | if f.file_exists('res://addons/google_fonts/fonts.json'):
79 | fonts = load_json("res://addons/google_fonts/fonts.json")
80 | else:
81 | fonts = update_font_file()
82 | populate_tree()
83 | saveb.hide()
84 |
85 |
86 | # Called every frame. 'delta' is the elapsed time since the previous frame.
87 | #func _process(delta):
88 | # pass
89 |
90 |
91 | func _on_Tree_cell_selected():
92 | var selected = tree.get_selected()
93 | if 'ttf' in selected.get_text(0):
94 | display_type = 1
95 | font_name = selected.get_text(0)
96 | else:
97 | display_type = 0
98 | font_name = ''
99 | saveb.hide()
100 | var url = selected.get_meta('url')
101 | if url != null:
102 | http.request(url)
103 |
104 |
105 | func _on_HTTPRequest_request_completed(result, response_code, headers, body):
106 | if response_code == 200:
107 | if display_type == 0:
108 | var content = Marshalls.base64_to_utf8(JSON.parse(body.get_string_from_utf8()).result['content'])
109 | text.text = content
110 | text.set("custom_fonts/font", null)
111 | saveb.hide()
112 | else:
113 | var f = DynamicFont.new()
114 | text.set("custom_fonts/font", f)
115 | var data = Marshalls.base64_to_raw(JSON.parse(body.get_string_from_utf8()).result['content'])
116 | var dir = Directory.new()
117 | var file = File.new()
118 | if file.file_exists('res://addons/google_fonts/test.ttf'):
119 | if dir.remove('res://addons/google_fonts/test.ttf') != OK:
120 | print('unabel to delete')
121 | file.open('res://addons/google_fonts/test.ttf', file.WRITE)
122 | file.store_buffer(data)
123 | file.close()
124 | text.text = dummy
125 | f.font_data = load('res://addons/google_fonts/test.ttf')
126 | saveb.show()
127 |
128 |
129 | func _on_save_pressed():
130 | if font_name != '':
131 | var dir = Directory.new()
132 | dir.copy('res://addons/google_fonts/test.ttf', 'res://' + font_name)
133 | emit_signal('update_filesystem')
134 |
135 |
136 | func _on_Button_pressed():
137 | _ready()
138 |
--------------------------------------------------------------------------------
/scenes/settings.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=24 format=2]
2 |
3 | [ext_resource path="res://scripts/settings.gd" type="Script" id=1]
4 | [ext_resource path="res://scenes/buton.tscn" type="PackedScene" id=2]
5 | [ext_resource path="res://visuals/Poppins-Regular.ttf" type="DynamicFontData" id=3]
6 | [ext_resource path="res://scenes/visuals/app_theme.tres" type="Theme" id=4]
7 | [ext_resource path="res://visuals/fonts/Poppins-Medium.ttf" type="DynamicFontData" id=5]
8 | [ext_resource path="res://visuals/icons/add.png" type="Texture" id=6]
9 |
10 | [sub_resource type="DynamicFont" id=2]
11 | size = 30
12 | use_mipmaps = true
13 | use_filter = true
14 | font_data = ExtResource( 3 )
15 |
16 | [sub_resource type="DynamicFont" id=3]
17 | size = 23
18 | use_mipmaps = true
19 | use_filter = true
20 | font_data = ExtResource( 3 )
21 |
22 | [sub_resource type="DynamicFont" id=4]
23 | size = 21
24 | use_mipmaps = true
25 | use_filter = true
26 | font_data = ExtResource( 3 )
27 |
28 | [sub_resource type="DynamicFont" id=5]
29 | size = 28
30 | use_mipmaps = true
31 | use_filter = true
32 | font_data = ExtResource( 5 )
33 |
34 | [sub_resource type="StyleBoxFlat" id=6]
35 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
36 | border_width_left = 3
37 | border_width_top = 3
38 | border_width_right = 3
39 | border_width_bottom = 3
40 | border_color = Color( 1, 1, 1, 1 )
41 | corner_radius_top_left = 5
42 | corner_radius_top_right = 5
43 | corner_radius_bottom_right = 5
44 | corner_radius_bottom_left = 5
45 |
46 | [sub_resource type="StyleBoxFlat" id=7]
47 | bg_color = Color( 0.0862745, 0.0862745, 0.105882, 1 )
48 | corner_radius_top_left = 5
49 | corner_radius_top_right = 5
50 | corner_radius_bottom_right = 5
51 | corner_radius_bottom_left = 5
52 |
53 | [sub_resource type="StyleBoxEmpty" id=8]
54 |
55 | [sub_resource type="StyleBoxFlat" id=9]
56 | bg_color = Color( 0.427451, 0.427451, 0.447059, 1 )
57 | corner_radius_top_left = 5
58 | corner_radius_top_right = 5
59 | corner_radius_bottom_right = 5
60 | corner_radius_bottom_left = 5
61 |
62 | [sub_resource type="StyleBoxFlat" id=10]
63 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
64 | corner_radius_top_left = 5
65 | corner_radius_top_right = 5
66 | corner_radius_bottom_right = 5
67 | corner_radius_bottom_left = 5
68 |
69 | [sub_resource type="StyleBoxFlat" id=17]
70 | bg_color = Color( 0.839216, 0.34902, 0.345098, 1 )
71 | border_width_left = 3
72 | border_width_top = 3
73 | border_width_right = 3
74 | border_width_bottom = 3
75 | border_color = Color( 1, 1, 1, 1 )
76 | corner_radius_top_left = 5
77 | corner_radius_top_right = 5
78 | corner_radius_bottom_right = 5
79 | corner_radius_bottom_left = 5
80 |
81 | [sub_resource type="StyleBoxFlat" id=18]
82 | bg_color = Color( 0.839216, 0.34902, 0.345098, 1 )
83 | corner_radius_top_left = 5
84 | corner_radius_top_right = 5
85 | corner_radius_bottom_right = 5
86 | corner_radius_bottom_left = 5
87 |
88 | [sub_resource type="DynamicFont" id=11]
89 | size = 28
90 | use_mipmaps = true
91 | use_filter = true
92 | font_data = ExtResource( 5 )
93 |
94 | [sub_resource type="StyleBoxFlat" id=12]
95 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
96 | border_width_left = 3
97 | border_width_top = 3
98 | border_width_right = 3
99 | border_width_bottom = 3
100 | border_color = Color( 1, 1, 1, 1 )
101 | corner_radius_top_left = 5
102 | corner_radius_top_right = 5
103 | corner_radius_bottom_right = 5
104 | corner_radius_bottom_left = 5
105 |
106 | [sub_resource type="StyleBoxFlat" id=13]
107 | bg_color = Color( 0.235294, 0.564706, 0.505882, 1 )
108 | corner_radius_top_left = 5
109 | corner_radius_top_right = 5
110 | corner_radius_bottom_right = 5
111 | corner_radius_bottom_left = 5
112 |
113 | [sub_resource type="StyleBoxEmpty" id=14]
114 |
115 | [sub_resource type="StyleBoxFlat" id=15]
116 | bg_color = Color( 0.427451, 0.427451, 0.447059, 1 )
117 | corner_radius_top_left = 5
118 | corner_radius_top_right = 5
119 | corner_radius_bottom_right = 5
120 | corner_radius_bottom_left = 5
121 |
122 | [sub_resource type="StyleBoxFlat" id=16]
123 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
124 | corner_radius_top_left = 5
125 | corner_radius_top_right = 5
126 | corner_radius_bottom_right = 5
127 | corner_radius_bottom_left = 5
128 |
129 | [node name="Settings" type="ScrollContainer"]
130 | anchor_right = 1.0
131 | anchor_bottom = 1.0
132 | margin_right = -6.0
133 | size_flags_horizontal = 3
134 | size_flags_vertical = 3
135 | theme = ExtResource( 4 )
136 | script = ExtResource( 1 )
137 |
138 | [node name="ContentMargin" type="MarginContainer" parent="."]
139 | margin_right = 1274.0
140 | margin_bottom = 720.0
141 | size_flags_horizontal = 3
142 | size_flags_vertical = 3
143 | custom_constants/margin_right = 20
144 | custom_constants/margin_top = 10
145 | custom_constants/margin_left = 20
146 | custom_constants/margin_bottom = 15
147 |
148 | [node name="VBoxContainer" type="VBoxContainer" parent="ContentMargin"]
149 | margin_left = 20.0
150 | margin_top = 10.0
151 | margin_right = 1254.0
152 | margin_bottom = 705.0
153 | size_flags_horizontal = 3
154 | size_flags_vertical = 3
155 | custom_constants/separation = 35
156 |
157 | [node name="General" type="VBoxContainer" parent="ContentMargin/VBoxContainer"]
158 | margin_right = 1234.0
159 | margin_bottom = 236.0
160 | custom_constants/separation = 10
161 |
162 | [node name="Label" type="Label" parent="ContentMargin/VBoxContainer/General"]
163 | margin_right = 1234.0
164 | margin_bottom = 60.0
165 | rect_min_size = Vector2( 0, 60 )
166 | size_flags_horizontal = 3
167 | custom_colors/font_color = Color( 1, 1, 1, 1 )
168 | custom_fonts/font = SubResource( 2 )
169 | text = "General"
170 |
171 | [node name="HSeparator" type="HSeparator" parent="ContentMargin/VBoxContainer/General/Label"]
172 | margin_top = 38.0
173 | margin_right = 1228.0
174 | margin_bottom = 62.0
175 | size_flags_horizontal = 3
176 |
177 | [node name="HBoxContainer2" type="HBoxContainer" parent="ContentMargin/VBoxContainer/General"]
178 | margin_top = 70.0
179 | margin_right = 1234.0
180 | margin_bottom = 104.0
181 | custom_constants/separation = 10
182 |
183 | [node name="Startup" type="CheckBox" parent="ContentMargin/VBoxContainer/General/HBoxContainer2"]
184 | margin_right = 24.0
185 | margin_bottom = 34.0
186 | theme = ExtResource( 4 )
187 | pressed = true
188 |
189 | [node name="Label" type="Label" parent="ContentMargin/VBoxContainer/General/HBoxContainer2"]
190 | margin_left = 34.0
191 | margin_right = 1234.0
192 | margin_bottom = 34.0
193 | size_flags_horizontal = 3
194 | size_flags_vertical = 6
195 | custom_colors/font_color = Color( 1, 1, 1, 1 )
196 | custom_fonts/font = SubResource( 3 )
197 | text = "Launch at startup"
198 | valign = 1
199 |
200 | [node name="HBoxContainer3" type="HBoxContainer" parent="ContentMargin/VBoxContainer/General"]
201 | margin_top = 114.0
202 | margin_right = 1234.0
203 | margin_bottom = 148.0
204 | custom_constants/separation = 10
205 |
206 | [node name="AutoUpdate" type="CheckBox" parent="ContentMargin/VBoxContainer/General/HBoxContainer3"]
207 | margin_right = 24.0
208 | margin_bottom = 34.0
209 | theme = ExtResource( 4 )
210 | pressed = true
211 |
212 | [node name="Label" type="Label" parent="ContentMargin/VBoxContainer/General/HBoxContainer3"]
213 | margin_left = 34.0
214 | margin_right = 1234.0
215 | margin_bottom = 34.0
216 | size_flags_horizontal = 3
217 | size_flags_vertical = 6
218 | custom_colors/font_color = Color( 1, 1, 1, 1 )
219 | custom_fonts/font = SubResource( 3 )
220 | text = "Automatically check for updates"
221 | valign = 1
222 |
223 | [node name="HBoxContainer4" type="HBoxContainer" parent="ContentMargin/VBoxContainer/General"]
224 | margin_top = 158.0
225 | margin_right = 1234.0
226 | margin_bottom = 192.0
227 | custom_constants/separation = 10
228 |
229 | [node name="DesktopShortcut" type="CheckBox" parent="ContentMargin/VBoxContainer/General/HBoxContainer4"]
230 | margin_right = 24.0
231 | margin_bottom = 34.0
232 | theme = ExtResource( 4 )
233 | pressed = true
234 |
235 | [node name="Label" type="Label" parent="ContentMargin/VBoxContainer/General/HBoxContainer4"]
236 | margin_left = 34.0
237 | margin_right = 1234.0
238 | margin_bottom = 34.0
239 | size_flags_horizontal = 3
240 | size_flags_vertical = 6
241 | custom_colors/font_color = Color( 1, 1, 1, 1 )
242 | custom_fonts/font = SubResource( 3 )
243 | text = "Add shortcut to desktop"
244 | valign = 1
245 |
246 | [node name="HBoxContainer5" type="HBoxContainer" parent="ContentMargin/VBoxContainer/General"]
247 | margin_top = 202.0
248 | margin_right = 1234.0
249 | margin_bottom = 236.0
250 | custom_constants/separation = 10
251 |
252 | [node name="AutoDeleteInstall" type="CheckBox" parent="ContentMargin/VBoxContainer/General/HBoxContainer5"]
253 | margin_right = 24.0
254 | margin_bottom = 34.0
255 | theme = ExtResource( 4 )
256 | pressed = true
257 |
258 | [node name="Label" type="Label" parent="ContentMargin/VBoxContainer/General/HBoxContainer5"]
259 | margin_left = 34.0
260 | margin_right = 1234.0
261 | margin_bottom = 34.0
262 | size_flags_horizontal = 3
263 | size_flags_vertical = 6
264 | custom_colors/font_color = Color( 1, 1, 1, 1 )
265 | custom_fonts/font = SubResource( 3 )
266 | text = "Auto delete install file after installation"
267 | valign = 1
268 |
269 | [node name="GodotInstalls" type="VBoxContainer" parent="ContentMargin/VBoxContainer"]
270 | margin_top = 271.0
271 | margin_right = 1234.0
272 | margin_bottom = 502.0
273 | custom_constants/separation = 10
274 |
275 | [node name="Label" type="Label" parent="ContentMargin/VBoxContainer/GodotInstalls"]
276 | margin_right = 1234.0
277 | margin_bottom = 60.0
278 | rect_min_size = Vector2( 0, 60 )
279 | size_flags_horizontal = 3
280 | custom_colors/font_color = Color( 1, 1, 1, 1 )
281 | custom_fonts/font = SubResource( 2 )
282 | text = "Godot installation fodler(s)"
283 |
284 | [node name="HSeparator" type="HSeparator" parent="ContentMargin/VBoxContainer/GodotInstalls/Label"]
285 | margin_top = 38.0
286 | margin_right = 1228.0
287 | margin_bottom = 62.0
288 | size_flags_horizontal = 3
289 |
290 | [node name="Label2" type="Label" parent="ContentMargin/VBoxContainer/GodotInstalls"]
291 | margin_top = 70.0
292 | margin_right = 1234.0
293 | margin_bottom = 101.0
294 | size_flags_horizontal = 3
295 | size_flags_vertical = 6
296 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
297 | custom_fonts/font = SubResource( 4 )
298 | text = "The folder will be scanned to find Godot executables"
299 | valign = 1
300 | autowrap = true
301 |
302 | [node name="HBoxContainer" type="HBoxContainer" parent="ContentMargin/VBoxContainer/GodotInstalls"]
303 | margin_top = 111.0
304 | margin_right = 1234.0
305 | margin_bottom = 176.0
306 | custom_constants/separation = 30
307 |
308 | [node name="DirPath" type="LineEdit" parent="ContentMargin/VBoxContainer/GodotInstalls/HBoxContainer"]
309 | margin_right = 1004.0
310 | margin_bottom = 65.0
311 | size_flags_horizontal = 3
312 | size_flags_vertical = 3
313 | theme = ExtResource( 4 )
314 |
315 | [node name="BrowseBtn" parent="ContentMargin/VBoxContainer/GodotInstalls/HBoxContainer" instance=ExtResource( 2 )]
316 | margin_left = 1034.0
317 | margin_right = 1234.0
318 | custom_colors/font_color_disabled = Color( 0.427451, 0.427451, 0.447059, 1 )
319 | custom_colors/font_color_focus = Color( 0.8, 0.8, 0.807843, 1 )
320 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
321 | custom_colors/font_color_hover = Color( 0.8, 0.8, 0.807843, 1 )
322 | custom_colors/font_color_pressed = Color( 0.8, 0.8, 0.807843, 1 )
323 | custom_fonts/font = SubResource( 5 )
324 | custom_styles/hover = SubResource( 6 )
325 | custom_styles/pressed = SubResource( 7 )
326 | custom_styles/focus = SubResource( 8 )
327 | custom_styles/disabled = SubResource( 9 )
328 | custom_styles/normal = SubResource( 10 )
329 | text = "Browse"
330 |
331 | [node name="HBoxContainer2" type="HBoxContainer" parent="ContentMargin/VBoxContainer/GodotInstalls"]
332 | margin_top = 186.0
333 | margin_right = 1234.0
334 | margin_bottom = 231.0
335 | custom_constants/separation = 30
336 | alignment = 1
337 |
338 | [node name="TextureButton" type="TextureButton" parent="ContentMargin/VBoxContainer/GodotInstalls/HBoxContainer2"]
339 | margin_left = 594.0
340 | margin_right = 639.0
341 | margin_bottom = 45.0
342 | rect_min_size = Vector2( 45, 45 )
343 | texture_normal = ExtResource( 6 )
344 | expand = true
345 | stretch_mode = 5
346 |
347 | [node name="VSeparator" type="VSeparator" parent="ContentMargin/VBoxContainer"]
348 | modulate = Color( 1, 1, 1, 0 )
349 | margin_top = 537.0
350 | margin_right = 1234.0
351 | margin_bottom = 595.0
352 | size_flags_vertical = 3
353 |
354 | [node name="HBoxContainer" type="HBoxContainer" parent="ContentMargin/VBoxContainer"]
355 | margin_top = 630.0
356 | margin_right = 1234.0
357 | margin_bottom = 695.0
358 | alignment = 1
359 |
360 | [node name="CancelBtn" parent="ContentMargin/VBoxContainer/HBoxContainer" instance=ExtResource( 2 )]
361 | custom_colors/font_color_disabled = Color( 0.427451, 0.427451, 0.447059, 1 )
362 | custom_colors/font_color_focus = Color( 1, 1, 1, 1 )
363 | custom_colors/font_color = Color( 1, 1, 1, 1 )
364 | custom_colors/font_color_hover = Color( 1, 1, 1, 1 )
365 | custom_colors/font_color_pressed = Color( 1, 1, 1, 1 )
366 | custom_styles/hover = SubResource( 17 )
367 | custom_styles/normal = SubResource( 18 )
368 | text = "DISCARD"
369 |
370 | [node name="HSeparator" type="HSeparator" parent="ContentMargin/VBoxContainer/HBoxContainer"]
371 | modulate = Color( 1, 1, 1, 0 )
372 | margin_left = 204.0
373 | margin_right = 1030.0
374 | margin_bottom = 65.0
375 | size_flags_horizontal = 3
376 |
377 | [node name="FinishBtn" parent="ContentMargin/VBoxContainer/HBoxContainer" instance=ExtResource( 2 )]
378 | margin_left = 1034.0
379 | margin_right = 1234.0
380 | custom_fonts/font = SubResource( 11 )
381 | custom_styles/hover = SubResource( 12 )
382 | custom_styles/pressed = SubResource( 13 )
383 | custom_styles/focus = SubResource( 14 )
384 | custom_styles/disabled = SubResource( 15 )
385 | custom_styles/normal = SubResource( 16 )
386 | text = "FINISH"
387 |
388 | [connection signal="toggled" from="ContentMargin/VBoxContainer/General/HBoxContainer2/Startup" to="." method="_on_Startup_toggled"]
389 | [connection signal="toggled" from="ContentMargin/VBoxContainer/General/HBoxContainer3/AutoUpdate" to="." method="_on_AutoUpdate_toggled"]
390 | [connection signal="toggled" from="ContentMargin/VBoxContainer/General/HBoxContainer4/DesktopShortcut" to="." method="_on_DesktopShortcut_toggled"]
391 | [connection signal="toggled" from="ContentMargin/VBoxContainer/General/HBoxContainer5/AutoDeleteInstall" to="." method="_on_AutoDeleteInstall_toggled"]
392 | [connection signal="pressed" from="ContentMargin/VBoxContainer/HBoxContainer/CancelBtn" to="." method="_on_CancelBtn_pressed"]
393 | [connection signal="pressed" from="ContentMargin/VBoxContainer/HBoxContainer/FinishBtn" to="." method="_on_FinishBtn_pressed"]
394 |
--------------------------------------------------------------------------------
/scenes/download_popup.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=27 format=2]
2 |
3 | [ext_resource path="res://scenes/buton.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://visuals/fonts/Poppins-Medium.ttf" type="DynamicFontData" id=2]
5 | [ext_resource path="res://visuals/Poppins-Regular.ttf" type="DynamicFontData" id=3]
6 | [ext_resource path="res://scenes/visuals/app_theme.tres" type="Theme" id=4]
7 | [ext_resource path="res://scripts/download_popup.gd" type="Script" id=5]
8 | [ext_resource path="res://visuals/icons/cross.png" type="Texture" id=6]
9 |
10 | [sub_resource type="Shader" id=18]
11 | code = "shader_type canvas_item;
12 |
13 | uniform float blur_amount : hint_range(-2.0, 10.0);
14 | uniform float mix_amount : hint_range(0.0, 1.0);
15 | uniform vec4 color_over : hint_color;
16 |
17 | void fragment() {
18 | vec4 blurred = textureLod(SCREEN_TEXTURE, SCREEN_UV, blur_amount);
19 | vec4 fin = mix(blurred, color_over, mix_amount);
20 | COLOR = fin;
21 | }"
22 |
23 | [sub_resource type="ShaderMaterial" id=19]
24 | shader = SubResource( 18 )
25 | shader_param/blur_amount = 1.343
26 | shader_param/mix_amount = 0.471
27 | shader_param/color_over = Color( 0.113725, 0.105882, 0.133333, 1 )
28 |
29 | [sub_resource type="StyleBoxFlat" id=3]
30 | bg_color = Color( 0.203922, 0.203922, 0.231373, 1 )
31 | corner_radius_top_left = 5
32 | corner_radius_top_right = 5
33 | corner_radius_bottom_right = 5
34 | corner_radius_bottom_left = 5
35 |
36 | [sub_resource type="DynamicFont" id=5]
37 | size = 25
38 | use_mipmaps = true
39 | use_filter = true
40 | font_data = ExtResource( 2 )
41 |
42 | [sub_resource type="StyleBoxFlat" id=4]
43 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
44 | corner_radius_top_left = 5
45 | corner_radius_top_right = 5
46 |
47 | [sub_resource type="DynamicFont" id=14]
48 | size = 23
49 | use_mipmaps = true
50 | use_filter = true
51 | font_data = ExtResource( 3 )
52 |
53 | [sub_resource type="DynamicFont" id=8]
54 | size = 34
55 | use_mipmaps = true
56 | use_filter = true
57 | font_data = ExtResource( 3 )
58 |
59 | [sub_resource type="DynamicFont" id=20]
60 | size = 25
61 | use_mipmaps = true
62 | use_filter = true
63 | font_data = ExtResource( 3 )
64 |
65 | [sub_resource type="StyleBoxFlat" id=21]
66 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
67 | corner_radius_top_left = 5
68 | corner_radius_top_right = 5
69 | corner_radius_bottom_right = 5
70 | corner_radius_bottom_left = 5
71 |
72 | [sub_resource type="StyleBoxFlat" id=22]
73 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
74 | corner_radius_top_left = 5
75 | corner_radius_top_right = 5
76 | corner_radius_bottom_right = 5
77 | corner_radius_bottom_left = 5
78 |
79 | [sub_resource type="DynamicFont" id=26]
80 | size = 23
81 | use_mipmaps = true
82 | use_filter = true
83 | font_data = ExtResource( 3 )
84 |
85 | [sub_resource type="DynamicFont" id=7]
86 | size = 28
87 | use_mipmaps = true
88 | use_filter = true
89 | font_data = ExtResource( 2 )
90 |
91 | [sub_resource type="StyleBoxFlat" id=15]
92 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
93 | border_width_left = 3
94 | border_width_top = 3
95 | border_width_right = 3
96 | border_width_bottom = 3
97 | border_color = Color( 1, 1, 1, 1 )
98 | corner_radius_top_left = 5
99 | corner_radius_top_right = 5
100 | corner_radius_bottom_right = 5
101 | corner_radius_bottom_left = 5
102 |
103 | [sub_resource type="StyleBoxFlat" id=16]
104 | bg_color = Color( 0.235294, 0.564706, 0.505882, 1 )
105 | corner_radius_top_left = 5
106 | corner_radius_top_right = 5
107 | corner_radius_bottom_right = 5
108 | corner_radius_bottom_left = 5
109 |
110 | [sub_resource type="StyleBoxEmpty" id=9]
111 |
112 | [sub_resource type="StyleBoxFlat" id=13]
113 | bg_color = Color( 0.427451, 0.427451, 0.447059, 1 )
114 | corner_radius_top_left = 5
115 | corner_radius_top_right = 5
116 | corner_radius_bottom_right = 5
117 | corner_radius_bottom_left = 5
118 |
119 | [sub_resource type="StyleBoxFlat" id=17]
120 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
121 | corner_radius_top_left = 5
122 | corner_radius_top_right = 5
123 | corner_radius_bottom_right = 5
124 | corner_radius_bottom_left = 5
125 |
126 | [sub_resource type="StyleBoxFlat" id=23]
127 | bg_color = Color( 0.839216, 0.34902, 0.345098, 1 )
128 | border_width_left = 3
129 | border_width_top = 3
130 | border_width_right = 3
131 | border_width_bottom = 3
132 | border_color = Color( 1, 1, 1, 1 )
133 | corner_radius_top_left = 5
134 | corner_radius_top_right = 5
135 | corner_radius_bottom_right = 5
136 | corner_radius_bottom_left = 5
137 |
138 | [sub_resource type="StyleBoxFlat" id=24]
139 | bg_color = Color( 0.662745, 0.270588, 0.266667, 1 )
140 | corner_radius_top_left = 5
141 | corner_radius_top_right = 5
142 | corner_radius_bottom_right = 5
143 | corner_radius_bottom_left = 5
144 |
145 | [sub_resource type="StyleBoxFlat" id=25]
146 | bg_color = Color( 0.839216, 0.34902, 0.345098, 1 )
147 | corner_radius_top_left = 5
148 | corner_radius_top_right = 5
149 | corner_radius_bottom_right = 5
150 | corner_radius_bottom_left = 5
151 |
152 | [node name="DownloadPopup" type="Control"]
153 | anchor_right = 1.0
154 | anchor_bottom = 1.0
155 | grow_horizontal = 2
156 | grow_vertical = 2
157 | size_flags_horizontal = 3
158 | size_flags_vertical = 3
159 | theme = ExtResource( 4 )
160 | script = ExtResource( 5 )
161 |
162 | [node name="Blur" type="ColorRect" parent="."]
163 | material = SubResource( 19 )
164 | anchor_right = 1.0
165 | anchor_bottom = 1.0
166 |
167 | [node name="Control" type="Control" parent="."]
168 | anchor_left = 0.5
169 | anchor_top = 0.5
170 | anchor_right = 0.5
171 | anchor_bottom = 0.5
172 | margin_left = -304.0
173 | margin_top = -203.5
174 | margin_right = 304.0
175 | margin_bottom = 203.5
176 |
177 | [node name="Background" type="Panel" parent="Control"]
178 | anchor_right = 1.0
179 | anchor_bottom = 1.0
180 | custom_styles/panel = SubResource( 3 )
181 |
182 | [node name="VBoxContainer" type="VBoxContainer" parent="Control"]
183 | anchor_right = 1.0
184 | anchor_bottom = 1.0
185 |
186 | [node name="Label" type="Label" parent="Control/VBoxContainer"]
187 | margin_right = 608.0
188 | margin_bottom = 65.0
189 | rect_min_size = Vector2( 0, 65 )
190 | size_flags_horizontal = 3
191 | size_flags_vertical = 1
192 | custom_fonts/font = SubResource( 5 )
193 | text = "Download a Godot version"
194 | align = 1
195 | valign = 1
196 |
197 | [node name="Panel2" type="Panel" parent="Control/VBoxContainer/Label"]
198 | show_behind_parent = true
199 | anchor_right = 1.0
200 | anchor_bottom = 1.0
201 | custom_styles/panel = SubResource( 4 )
202 |
203 | [node name="CloseBtn" type="TextureButton" parent="Control/VBoxContainer/Label"]
204 | anchor_left = 1.0
205 | anchor_top = 0.5
206 | anchor_right = 1.0
207 | anchor_bottom = 0.5
208 | margin_left = -71.0
209 | margin_top = -19.5
210 | margin_bottom = 20.5
211 | texture_normal = ExtResource( 6 )
212 | expand = true
213 | stretch_mode = 5
214 |
215 | [node name="ContentMargin" type="MarginContainer" parent="Control/VBoxContainer"]
216 | margin_top = 69.0
217 | margin_right = 608.0
218 | margin_bottom = 407.0
219 | size_flags_vertical = 3
220 | custom_constants/margin_right = 20
221 | custom_constants/margin_top = 10
222 | custom_constants/margin_left = 20
223 | custom_constants/margin_bottom = 20
224 |
225 | [node name="VBoxContainer" type="VBoxContainer" parent="Control/VBoxContainer/ContentMargin"]
226 | margin_left = 20.0
227 | margin_top = 25.0
228 | margin_right = 588.0
229 | margin_bottom = 302.0
230 | size_flags_vertical = 4
231 | custom_constants/separation = 35
232 |
233 | [node name="TypeContainer" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
234 | margin_right = 568.0
235 | margin_bottom = 34.0
236 | custom_constants/separation = 20
237 | alignment = 1
238 |
239 | [node name="HBoxContainer2" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer"]
240 | margin_left = 115.0
241 | margin_right = 218.0
242 | margin_bottom = 34.0
243 | custom_constants/separation = 10
244 |
245 | [node name="Alpha" type="CheckBox" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer/HBoxContainer2"]
246 | margin_right = 24.0
247 | margin_bottom = 34.0
248 | theme = ExtResource( 4 )
249 | pressed = true
250 |
251 | [node name="Label" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer/HBoxContainer2"]
252 | margin_left = 34.0
253 | margin_right = 103.0
254 | margin_bottom = 34.0
255 | size_flags_horizontal = 3
256 | size_flags_vertical = 6
257 | custom_colors/font_color = Color( 1, 1, 1, 1 )
258 | custom_fonts/font = SubResource( 14 )
259 | text = "Alpha"
260 | valign = 1
261 |
262 | [node name="HBoxContainer3" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer"]
263 | margin_left = 238.0
264 | margin_right = 325.0
265 | margin_bottom = 34.0
266 | custom_constants/separation = 10
267 |
268 | [node name="Beta" type="CheckBox" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer/HBoxContainer3"]
269 | margin_right = 24.0
270 | margin_bottom = 34.0
271 | pressed = true
272 |
273 | [node name="Label" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer/HBoxContainer3"]
274 | margin_left = 34.0
275 | margin_right = 87.0
276 | margin_bottom = 34.0
277 | size_flags_horizontal = 3
278 | size_flags_vertical = 6
279 | custom_colors/font_color = Color( 1, 1, 1, 1 )
280 | custom_fonts/font = SubResource( 14 )
281 | text = "Beta"
282 | valign = 1
283 |
284 | [node name="HBoxContainer4" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer"]
285 | margin_left = 345.0
286 | margin_right = 453.0
287 | margin_bottom = 34.0
288 | custom_constants/separation = 10
289 |
290 | [node name="Stable" type="CheckBox" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer/HBoxContainer4"]
291 | margin_right = 24.0
292 | margin_bottom = 34.0
293 | pressed = true
294 |
295 | [node name="Label" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer/HBoxContainer4"]
296 | margin_left = 34.0
297 | margin_right = 108.0
298 | margin_bottom = 34.0
299 | size_flags_horizontal = 3
300 | size_flags_vertical = 6
301 | custom_colors/font_color = Color( 1, 1, 1, 1 )
302 | custom_fonts/font = SubResource( 14 )
303 | text = "Stable"
304 | valign = 1
305 |
306 | [node name="VersionContainer" type="VBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
307 | margin_top = 69.0
308 | margin_right = 568.0
309 | margin_bottom = 177.0
310 | custom_constants/separation = 10
311 |
312 | [node name="Label" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/VersionContainer"]
313 | margin_right = 568.0
314 | margin_bottom = 48.0
315 | size_flags_horizontal = 3
316 | size_flags_vertical = 6
317 | custom_colors/font_color = Color( 1, 1, 1, 1 )
318 | custom_fonts/font = SubResource( 8 )
319 | text = "Choose version"
320 | align = 1
321 | valign = 1
322 |
323 | [node name="VersionBtn" type="OptionButton" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/VersionContainer"]
324 | margin_top = 58.0
325 | margin_right = 568.0
326 | margin_bottom = 108.0
327 | rect_min_size = Vector2( 0, 50 )
328 |
329 | [node name="DownloadContainer" type="VBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
330 | visible = false
331 | margin_right = 568.0
332 | margin_bottom = 104.0
333 | custom_constants/separation = 20
334 | alignment = 1
335 |
336 | [node name="DownloadLabel" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/DownloadContainer"]
337 | margin_right = 568.0
338 | margin_bottom = 48.0
339 | size_flags_horizontal = 3
340 | size_flags_vertical = 6
341 | custom_colors/font_color = Color( 1, 1, 1, 1 )
342 | custom_fonts/font = SubResource( 8 )
343 | text = "Downloading Godot 3.4.3"
344 | align = 1
345 | valign = 1
346 |
347 | [node name="ProgressBar" type="ProgressBar" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/DownloadContainer"]
348 | margin_top = 68.0
349 | margin_right = 568.0
350 | margin_bottom = 104.0
351 | theme = ExtResource( 4 )
352 | custom_colors/font_color = Color( 1, 1, 1, 1 )
353 | custom_fonts/font = SubResource( 20 )
354 | custom_styles/fg = SubResource( 21 )
355 | custom_styles/bg = SubResource( 22 )
356 | value = 50.0
357 |
358 | [node name="Speed" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/DownloadContainer"]
359 | visible = false
360 | margin_top = 124.0
361 | margin_right = 568.0
362 | margin_bottom = 158.0
363 | size_flags_horizontal = 3
364 | size_flags_vertical = 6
365 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
366 | custom_fonts/font = SubResource( 26 )
367 | text = "34 mb/s"
368 | align = 2
369 | valign = 1
370 |
371 | [node name="HBoxContainer5" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
372 | margin_top = 212.0
373 | margin_right = 568.0
374 | margin_bottom = 277.0
375 | size_flags_horizontal = 3
376 | custom_constants/separation = 30
377 | alignment = 2
378 |
379 | [node name="DownloadBtn" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5" instance=ExtResource( 1 )]
380 | margin_left = 268.0
381 | margin_right = 568.0
382 | rect_min_size = Vector2( 300, 65 )
383 | custom_fonts/font = SubResource( 7 )
384 | custom_styles/hover = SubResource( 15 )
385 | custom_styles/pressed = SubResource( 16 )
386 | custom_styles/focus = SubResource( 9 )
387 | custom_styles/disabled = SubResource( 13 )
388 | custom_styles/normal = SubResource( 17 )
389 | text = "DOWNLOAD v3.4.3"
390 |
391 | [node name="CancelBtn" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5" instance=ExtResource( 1 )]
392 | visible = false
393 | margin_left = 368.0
394 | margin_right = 568.0
395 | custom_colors/font_color_focus = Color( 1, 1, 1, 1 )
396 | custom_colors/font_color = Color( 1, 1, 1, 1 )
397 | custom_colors/font_color_hover = Color( 1, 1, 1, 1 )
398 | custom_colors/font_color_pressed = Color( 1, 1, 1, 1 )
399 | custom_fonts/font = SubResource( 7 )
400 | custom_styles/hover = SubResource( 23 )
401 | custom_styles/pressed = SubResource( 24 )
402 | custom_styles/focus = SubResource( 9 )
403 | custom_styles/disabled = SubResource( 25 )
404 | custom_styles/normal = SubResource( 25 )
405 | text = "Cancel"
406 |
407 | [connection signal="pressed" from="Control/VBoxContainer/Label/CloseBtn" to="." method="_on_CloseBtn_pressed"]
408 | [connection signal="toggled" from="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer/HBoxContainer2/Alpha" to="." method="_on_Alpha_toggled"]
409 | [connection signal="toggled" from="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer/HBoxContainer3/Beta" to="." method="_on_Beta_toggled"]
410 | [connection signal="toggled" from="Control/VBoxContainer/ContentMargin/VBoxContainer/TypeContainer/HBoxContainer4/Stable" to="." method="_on_Stable_toggled"]
411 | [connection signal="item_selected" from="Control/VBoxContainer/ContentMargin/VBoxContainer/VersionContainer/VersionBtn" to="." method="_on_VersionBtn_item_selected"]
412 | [connection signal="pressed" from="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5/DownloadBtn" to="." method="_on_DownloadBtn_pressed"]
413 | [connection signal="pressed" from="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5/CancelBtn" to="." method="_on_CancelBtn_pressed"]
414 |
--------------------------------------------------------------------------------
/scenes/setup.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=26 format=2]
2 |
3 | [ext_resource path="res://scenes/buton.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://visuals/fonts/Poppins-Medium.ttf" type="DynamicFontData" id=2]
5 | [ext_resource path="res://visuals/Poppins-Regular.ttf" type="DynamicFontData" id=3]
6 | [ext_resource path="res://scenes/visuals/app_theme.tres" type="Theme" id=4]
7 | [ext_resource path="res://scripts/setup.gd" type="Script" id=5]
8 |
9 | [sub_resource type="Shader" id=18]
10 | code = "shader_type canvas_item;
11 |
12 | uniform float blur_amount : hint_range(-2.0, 10.0);
13 | uniform float mix_amount : hint_range(0.0, 1.0);
14 | uniform vec4 color_over : hint_color;
15 |
16 | void fragment() {
17 | vec4 blurred = textureLod(SCREEN_TEXTURE, SCREEN_UV, blur_amount);
18 | vec4 fin = mix(blurred, color_over, mix_amount);
19 | COLOR = fin;
20 | }"
21 |
22 | [sub_resource type="ShaderMaterial" id=19]
23 | shader = SubResource( 18 )
24 | shader_param/blur_amount = 1.343
25 | shader_param/mix_amount = 0.471
26 | shader_param/color_over = Color( 0.113725, 0.105882, 0.133333, 1 )
27 |
28 | [sub_resource type="StyleBoxFlat" id=3]
29 | bg_color = Color( 0.203922, 0.203922, 0.231373, 1 )
30 | corner_radius_top_left = 5
31 | corner_radius_top_right = 5
32 | corner_radius_bottom_right = 5
33 | corner_radius_bottom_left = 5
34 |
35 | [sub_resource type="DynamicFont" id=5]
36 | size = 25
37 | use_mipmaps = true
38 | use_filter = true
39 | font_data = ExtResource( 2 )
40 |
41 | [sub_resource type="StyleBoxFlat" id=4]
42 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
43 | corner_radius_top_left = 5
44 | corner_radius_top_right = 5
45 |
46 | [sub_resource type="DynamicFont" id=21]
47 | size = 32
48 | use_mipmaps = true
49 | use_filter = true
50 | font_data = ExtResource( 3 )
51 |
52 | [sub_resource type="DynamicFont" id=22]
53 | size = 24
54 | use_mipmaps = true
55 | use_filter = true
56 | font_data = ExtResource( 3 )
57 |
58 | [sub_resource type="DynamicFont" id=7]
59 | size = 28
60 | use_mipmaps = true
61 | use_filter = true
62 | font_data = ExtResource( 2 )
63 |
64 | [sub_resource type="StyleBoxFlat" id=10]
65 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
66 | border_width_left = 3
67 | border_width_top = 3
68 | border_width_right = 3
69 | border_width_bottom = 3
70 | border_color = Color( 1, 1, 1, 1 )
71 | corner_radius_top_left = 5
72 | corner_radius_top_right = 5
73 | corner_radius_bottom_right = 5
74 | corner_radius_bottom_left = 5
75 |
76 | [sub_resource type="StyleBoxFlat" id=11]
77 | bg_color = Color( 0.0862745, 0.0862745, 0.105882, 1 )
78 | corner_radius_top_left = 5
79 | corner_radius_top_right = 5
80 | corner_radius_bottom_right = 5
81 | corner_radius_bottom_left = 5
82 |
83 | [sub_resource type="StyleBoxEmpty" id=9]
84 |
85 | [sub_resource type="StyleBoxFlat" id=13]
86 | bg_color = Color( 0.427451, 0.427451, 0.447059, 1 )
87 | corner_radius_top_left = 5
88 | corner_radius_top_right = 5
89 | corner_radius_bottom_right = 5
90 | corner_radius_bottom_left = 5
91 |
92 | [sub_resource type="StyleBoxFlat" id=12]
93 | bg_color = Color( 0.14902, 0.14902, 0.180392, 1 )
94 | corner_radius_top_left = 5
95 | corner_radius_top_right = 5
96 | corner_radius_bottom_right = 5
97 | corner_radius_bottom_left = 5
98 |
99 | [sub_resource type="DynamicFont" id=20]
100 | size = 21
101 | use_mipmaps = true
102 | use_filter = true
103 | font_data = ExtResource( 3 )
104 |
105 | [sub_resource type="DynamicFont" id=14]
106 | size = 23
107 | use_mipmaps = true
108 | use_filter = true
109 | font_data = ExtResource( 3 )
110 |
111 | [sub_resource type="DynamicFont" id=23]
112 | size = 23
113 | use_mipmaps = true
114 | use_filter = true
115 | font_data = ExtResource( 3 )
116 |
117 | [sub_resource type="DynamicFont" id=6]
118 | size = 28
119 | use_mipmaps = true
120 | use_filter = true
121 | font_data = ExtResource( 3 )
122 |
123 | [sub_resource type="StyleBoxFlat" id=15]
124 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
125 | border_width_left = 3
126 | border_width_top = 3
127 | border_width_right = 3
128 | border_width_bottom = 3
129 | border_color = Color( 1, 1, 1, 1 )
130 | corner_radius_top_left = 5
131 | corner_radius_top_right = 5
132 | corner_radius_bottom_right = 5
133 | corner_radius_bottom_left = 5
134 |
135 | [sub_resource type="StyleBoxFlat" id=16]
136 | bg_color = Color( 0.235294, 0.564706, 0.505882, 1 )
137 | corner_radius_top_left = 5
138 | corner_radius_top_right = 5
139 | corner_radius_bottom_right = 5
140 | corner_radius_bottom_left = 5
141 |
142 | [sub_resource type="StyleBoxFlat" id=17]
143 | bg_color = Color( 0.345098, 0.839216, 0.74902, 1 )
144 | corner_radius_top_left = 5
145 | corner_radius_top_right = 5
146 | corner_radius_bottom_right = 5
147 | corner_radius_bottom_left = 5
148 |
149 | [node name="Setup" type="Control"]
150 | anchor_right = 1.0
151 | anchor_bottom = 1.0
152 | grow_horizontal = 2
153 | grow_vertical = 2
154 | size_flags_horizontal = 3
155 | size_flags_vertical = 3
156 | script = ExtResource( 5 )
157 |
158 | [node name="Blur" type="ColorRect" parent="."]
159 | material = SubResource( 19 )
160 | anchor_right = 1.0
161 | anchor_bottom = 1.0
162 |
163 | [node name="Control" type="Control" parent="."]
164 | anchor_left = 0.5
165 | anchor_top = 0.5
166 | anchor_right = 0.5
167 | anchor_bottom = 0.5
168 | margin_left = -568.0
169 | margin_top = -281.0
170 | margin_right = 568.0
171 | margin_bottom = 281.0
172 |
173 | [node name="Background" type="Panel" parent="Control"]
174 | anchor_right = 1.0
175 | anchor_bottom = 1.0
176 | custom_styles/panel = SubResource( 3 )
177 |
178 | [node name="VBoxContainer" type="VBoxContainer" parent="Control"]
179 | anchor_right = 1.0
180 | anchor_bottom = 1.0
181 |
182 | [node name="Label" type="Label" parent="Control/VBoxContainer"]
183 | margin_right = 1136.0
184 | margin_bottom = 65.0
185 | rect_min_size = Vector2( 0, 65 )
186 | size_flags_horizontal = 3
187 | size_flags_vertical = 1
188 | custom_fonts/font = SubResource( 5 )
189 | text = "Setup"
190 | align = 1
191 | valign = 1
192 |
193 | [node name="Panel2" type="Panel" parent="Control/VBoxContainer/Label"]
194 | show_behind_parent = true
195 | anchor_right = 1.0
196 | anchor_bottom = 1.0
197 | custom_styles/panel = SubResource( 4 )
198 |
199 | [node name="ContentMargin" type="MarginContainer" parent="Control/VBoxContainer"]
200 | margin_top = 69.0
201 | margin_right = 1136.0
202 | margin_bottom = 557.0
203 | custom_constants/margin_right = 20
204 | custom_constants/margin_top = 10
205 | custom_constants/margin_left = 20
206 | custom_constants/margin_bottom = 20
207 |
208 | [node name="VBoxContainer" type="VBoxContainer" parent="Control/VBoxContainer/ContentMargin"]
209 | margin_left = 20.0
210 | margin_top = 10.0
211 | margin_right = 1116.0
212 | margin_bottom = 468.0
213 | custom_constants/separation = 10
214 |
215 | [node name="Label" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
216 | margin_right = 1096.0
217 | margin_bottom = 46.0
218 | size_flags_horizontal = 3
219 | size_flags_vertical = 6
220 | custom_colors/font_color = Color( 1, 1, 1, 1 )
221 | custom_fonts/font = SubResource( 21 )
222 | text = "Choose Godot installation folder"
223 | valign = 1
224 |
225 | [node name="Label2" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
226 | margin_top = 56.0
227 | margin_right = 1096.0
228 | margin_bottom = 91.0
229 | size_flags_horizontal = 3
230 | size_flags_vertical = 6
231 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
232 | custom_fonts/font = SubResource( 22 )
233 | text = "The folder will be scanned to find already installed Godot executables"
234 | valign = 1
235 | autowrap = true
236 |
237 | [node name="HBoxContainer" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
238 | margin_top = 101.0
239 | margin_right = 1096.0
240 | margin_bottom = 166.0
241 | custom_constants/separation = 30
242 |
243 | [node name="DirPath" type="LineEdit" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer"]
244 | margin_right = 866.0
245 | margin_bottom = 65.0
246 | size_flags_horizontal = 3
247 | size_flags_vertical = 3
248 | theme = ExtResource( 4 )
249 |
250 | [node name="BrowseBtn" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer" instance=ExtResource( 1 )]
251 | margin_left = 896.0
252 | margin_right = 1096.0
253 | custom_colors/font_color_disabled = Color( 0.427451, 0.427451, 0.447059, 1 )
254 | custom_colors/font_color_focus = Color( 0.8, 0.8, 0.807843, 1 )
255 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
256 | custom_colors/font_color_hover = Color( 0.8, 0.8, 0.807843, 1 )
257 | custom_colors/font_color_pressed = Color( 0.8, 0.8, 0.807843, 1 )
258 | custom_fonts/font = SubResource( 7 )
259 | custom_styles/hover = SubResource( 10 )
260 | custom_styles/pressed = SubResource( 11 )
261 | custom_styles/focus = SubResource( 9 )
262 | custom_styles/disabled = SubResource( 13 )
263 | custom_styles/normal = SubResource( 12 )
264 | text = "Browse"
265 |
266 | [node name="ExecutablesFound" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
267 | modulate = Color( 0.345098, 0.839216, 0.74902, 1 )
268 | margin_top = 176.0
269 | margin_right = 1096.0
270 | margin_bottom = 207.0
271 | size_flags_horizontal = 3
272 | size_flags_vertical = 6
273 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
274 | custom_fonts/font = SubResource( 20 )
275 | text = "3 Godot executables found"
276 | valign = 1
277 | autowrap = true
278 |
279 | [node name="HBoxContainer2" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
280 | margin_top = 217.0
281 | margin_right = 1096.0
282 | margin_bottom = 251.0
283 | custom_constants/separation = 30
284 |
285 | [node name="Startup" type="CheckBox" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer2"]
286 | margin_right = 24.0
287 | margin_bottom = 34.0
288 | theme = ExtResource( 4 )
289 | pressed = true
290 |
291 | [node name="Label" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer2"]
292 | margin_left = 54.0
293 | margin_right = 1096.0
294 | margin_bottom = 34.0
295 | size_flags_horizontal = 3
296 | size_flags_vertical = 6
297 | custom_colors/font_color = Color( 1, 1, 1, 1 )
298 | custom_fonts/font = SubResource( 14 )
299 | text = "Launch at startup"
300 | valign = 1
301 |
302 | [node name="HBoxContainer3" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
303 | margin_top = 261.0
304 | margin_right = 1096.0
305 | margin_bottom = 295.0
306 | custom_constants/separation = 30
307 |
308 | [node name="CheckUpdateAuto" type="CheckBox" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer3"]
309 | margin_right = 24.0
310 | margin_bottom = 34.0
311 | pressed = true
312 |
313 | [node name="Label" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer3"]
314 | margin_left = 54.0
315 | margin_right = 1096.0
316 | margin_bottom = 34.0
317 | size_flags_horizontal = 3
318 | size_flags_vertical = 6
319 | custom_colors/font_color = Color( 1, 1, 1, 1 )
320 | custom_fonts/font = SubResource( 14 )
321 | text = "Automatically check for updates"
322 | valign = 1
323 |
324 | [node name="HBoxContainer4" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
325 | margin_top = 305.0
326 | margin_right = 1096.0
327 | margin_bottom = 339.0
328 | custom_constants/separation = 30
329 |
330 | [node name="DesktopShortcut" type="CheckBox" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer4"]
331 | margin_right = 24.0
332 | margin_bottom = 34.0
333 | pressed = true
334 |
335 | [node name="Label" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer4"]
336 | margin_left = 54.0
337 | margin_right = 1096.0
338 | margin_bottom = 34.0
339 | size_flags_horizontal = 3
340 | size_flags_vertical = 6
341 | custom_colors/font_color = Color( 1, 1, 1, 1 )
342 | custom_fonts/font = SubResource( 14 )
343 | text = "Add shortcut to desktop"
344 | valign = 1
345 |
346 | [node name="HBoxContainer6" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
347 | margin_top = 349.0
348 | margin_right = 1096.0
349 | margin_bottom = 383.0
350 | custom_constants/separation = 30
351 | alignment = 1
352 |
353 | [node name="AutoDeleteInstall" type="CheckBox" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer6"]
354 | margin_right = 24.0
355 | margin_bottom = 34.0
356 | theme = ExtResource( 4 )
357 | pressed = true
358 |
359 | [node name="Label" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer6"]
360 | margin_left = 54.0
361 | margin_right = 1096.0
362 | margin_bottom = 34.0
363 | size_flags_horizontal = 3
364 | size_flags_vertical = 6
365 | custom_colors/font_color = Color( 1, 1, 1, 1 )
366 | custom_fonts/font = SubResource( 23 )
367 | text = "Auto delete install file after installation"
368 | valign = 1
369 |
370 | [node name="HBoxContainer5" type="HBoxContainer" parent="Control/VBoxContainer/ContentMargin/VBoxContainer"]
371 | margin_top = 393.0
372 | margin_right = 1096.0
373 | margin_bottom = 458.0
374 | size_flags_vertical = 3
375 | custom_constants/separation = 30
376 |
377 | [node name="Label2" type="Label" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5"]
378 | margin_top = 12.0
379 | margin_right = 866.0
380 | margin_bottom = 52.0
381 | size_flags_horizontal = 3
382 | size_flags_vertical = 6
383 | custom_colors/font_color = Color( 0.8, 0.8, 0.807843, 1 )
384 | custom_fonts/font = SubResource( 6 )
385 | text = "You can change these settings later in the settings page"
386 | valign = 1
387 | autowrap = true
388 |
389 | [node name="FinishBtn" parent="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5" instance=ExtResource( 1 )]
390 | margin_left = 896.0
391 | margin_right = 1096.0
392 | custom_fonts/font = SubResource( 7 )
393 | custom_styles/hover = SubResource( 15 )
394 | custom_styles/pressed = SubResource( 16 )
395 | custom_styles/focus = SubResource( 9 )
396 | custom_styles/disabled = SubResource( 13 )
397 | custom_styles/normal = SubResource( 17 )
398 | text = "FINISH"
399 |
400 | [node name="FileDialog" type="FileDialog" parent="Control"]
401 | anchor_right = 1.0
402 | anchor_bottom = 1.0
403 | rect_min_size = Vector2( 210, 73.5 )
404 | theme = ExtResource( 4 )
405 | window_title = "Open a Directory"
406 | mode = 2
407 | access = 2
408 | show_hidden_files = true
409 |
410 | [connection signal="pressed" from="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer/BrowseBtn" to="." method="_on_BrowseBtn_pressed"]
411 | [connection signal="toggled" from="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer2/Startup" to="." method="_on_Startup_toggled"]
412 | [connection signal="toggled" from="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer3/CheckUpdateAuto" to="." method="_on_CheckUpdateAuto_toggled"]
413 | [connection signal="toggled" from="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer4/DesktopShortcut" to="." method="_on_DesktopShortcut_toggled"]
414 | [connection signal="toggled" from="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer6/AutoDeleteInstall" to="." method="_on_AutoDeleteInstall_toggled"]
415 | [connection signal="pressed" from="Control/VBoxContainer/ContentMargin/VBoxContainer/HBoxContainer5/FinishBtn" to="." method="_on_FinishBtn_pressed"]
416 | [connection signal="dir_selected" from="Control/FileDialog" to="." method="_on_FileDialog_dir_selected"]
417 |
--------------------------------------------------------------------------------