More UI stuff, appmanager class, and appsettings

This commit is contained in:
Chris Bell 2025-08-17 20:33:14 -05:00
parent 52c32de8f2
commit 647d37c816
35 changed files with 416 additions and 118 deletions

View File

@ -0,0 +1,11 @@
[gd_resource type="Resource" script_class="ApplicationSettingsResource" load_steps=4 format=3 uid="uid://dwhgu0ywrt618"]
[ext_resource type="Script" uid="uid://ddh7o0nfsuo4k" path="res://src/scripts/custom_resources/ApplicationSettingsResource.cs" id="1_3gmkh"]
[ext_resource type="PackedScene" uid="uid://djj22j6g14exe" path="res://src/scenes/main/MainUI.tscn" id="1_688px"]
[ext_resource type="PackedScene" uid="uid://ble4w0555f45u" path="res://src/scenes/main/content_pages/home_page.tscn" id="2_tfier"]
[resource]
script = ExtResource("1_3gmkh")
MainUiScene = ExtResource("1_688px")
Pages = Array[PackedScene]([ExtResource("2_tfier")])
metadata/_custom_type_script = "uid://ddh7o0nfsuo4k"

View File

@ -12,12 +12,17 @@ config_version=5
config/name="SessionZero"
config/tags=PackedStringArray("c#")
run/main_scene="uid://djj22j6g14exe"
run/main_scene="uid://bv1ceq4dnkl7l"
config/features=PackedStringArray("4.4", "C#", "GL Compatibility")
boot_splash/bg_color=Color(0.101961, 0.12549, 0.180392, 1)
boot_splash/fullsize=false
boot_splash/image="uid://qnpvlqg85kx4"
config/icon="res://resources/images/icon.svg"
[autoload]
AppManager="*res://src/scripts/AppManager.cs"
[display]
window/size/window_width_override=1920

View File

@ -1,42 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="24"
height="24"
fill="none"
viewBox="0 0 24 24"
version="1.1"
id="svg1"
sodipodi:docname="bars.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:zoom="11.166667"
inkscape:cx="23.820895"
inkscape:cy="19.791045"
inkscape:window-width="2327"
inkscape:window-height="1281"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
stroke="currentColor"
stroke-linecap="round"
stroke-width="2"
d="M5 7h14M5 12h14M5 17h14"
id="path1"
style="fill:#ffffff;stroke:#ffffff" />
<svg width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M5 7h14M5 12h14M5 17h14" fill="#fff" stroke="#fff" stroke-linecap="round" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 220 B

View File

@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.03v13m0-13c-2.819-.831-4.715-1.076-8.029-1.023A.99.99 0 0 0 3 6v11c0 .563.466 1.014 1.03 1.007 3.122-.043 5.018.212 7.97 1.023m0-13c2.819-.831 4.715-1.076 8.029-1.023A.99.99 0 0 1 21 6v11c0 .563-.466 1.014-1.03 1.007-3.122-.043-5.018.212-7.97 1.023"/>
<svg width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 6.03v13m0-13c-2.819-.831-4.715-1.076-8.029-1.023A.99.99 0 0 0 3 6v11c0 .563.466 1.014 1.03 1.007 3.122-.043 5.018.212 7.97 1.023m0-13c2.819-.831 4.715-1.076 8.029-1.023A.99.99 0 0 1 21 6v11c0 .563-.466 1.014-1.03 1.007-3.122-.043-5.018.212-7.97 1.023" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 458 B

After

Width:  |  Height:  |  Size: 463 B

View File

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
svg/scale=5.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 5 9 4V3m5 2 1-1V3m-3 6v11m0-11a5 5 0 0 1 5 5m-5-5a5 5 0 0 0-5 5m5-5a4.959 4.959 0 0 1 2.973 1H15V8a3 3 0 0 0-6 0v2h.027A4.959 4.959 0 0 1 12 9Zm-5 5H5m2 0v2a5 5 0 0 0 10 0v-2m2.025 0H17m-9.975 4H6a1 1 0 0 0-1 1v2m12-3h1.025a1 1 0 0 1 1 1v2M16 11h1a1 1 0 0 0 1-1V8m-9.975 3H7a1 1 0 0 1-1-1V8"/>
<svg width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M10 5 9 4V3m5 2 1-1V3m-3 6v11m0-11a5 5 0 0 1 5 5m-5-5a5 5 0 0 0-5 5m5-5a4.959 4.959 0 0 1 2.973 1H15V8a3 3 0 0 0-6 0v2h.027A4.959 4.959 0 0 1 12 9Zm-5 5H5m2 0v2a5 5 0 0 0 10 0v-2m2.025 0H17m-9.975 4H6a1 1 0 0 0-1 1v2m12-3h1.025a1 1 0 0 1 1 1v2M16 11h1a1 1 0 0 0 1-1V8m-9.975 3H7a1 1 0 0 1-1-1V8" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 498 B

After

Width:  |  Height:  |  Size: 503 B

View File

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
svg/scale=5.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 13v-2a1 1 0 0 0-1-1h-.757l-.707-1.707.535-.536a1 1 0 0 0 0-1.414l-1.414-1.414a1 1 0 0 0-1.414 0l-.536.535L14 4.757V4a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v.757l-1.707.707-.536-.535a1 1 0 0 0-1.414 0L4.929 6.343a1 1 0 0 0 0 1.414l.536.536L4.757 10H4a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h.757l.707 1.707-.535.536a1 1 0 0 0 0 1.414l1.414 1.414a1 1 0 0 0 1.414 0l.536-.535 1.707.707V20a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-.757l1.707-.708.536.536a1 1 0 0 0 1.414 0l1.414-1.414a1 1 0 0 0 0-1.414l-.535-.536.707-1.707H20a1 1 0 0 0 1-1Z"/>
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"/>
<svg width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M21 13v-2a1 1 0 0 0-1-1h-.757l-.707-1.707.535-.536a1 1 0 0 0 0-1.414l-1.414-1.414a1 1 0 0 0-1.414 0l-.536.535L14 4.757V4a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v.757l-1.707.707-.536-.535a1 1 0 0 0-1.414 0L4.929 6.343a1 1 0 0 0 0 1.414l.536.536L4.757 10H4a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h.757l.707 1.707-.535.536a1 1 0 0 0 0 1.414l1.414 1.414a1 1 0 0 0 1.414 0l.536-.535 1.707.707V20a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-.757l1.707-.708.536.536a1 1 0 0 0 1.414 0l1.414-1.414a1 1 0 0 0 0-1.414l-.535-.536.707-1.707H20a1 1 0 0 0 1-1Z" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
<path d="m12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 853 B

After

Width:  |  Height:  |  Size: 849 B

View File

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
svg/scale=5.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 6c0 1.657-3.134 3-7 3S5 7.657 5 6m14 0c0-1.657-3.134-3-7-3S5 4.343 5 6m14 0v6M5 6v6m0 0c0 1.657 3.134 3 7 3s7-1.343 7-3M5 12v6c0 1.657 3.134 3 7 3s7-1.343 7-3v-6"/>
<svg width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 6c0 1.657-3.134 3-7 3S5 7.657 5 6m14 0c0-1.657-3.134-3-7-3S5 4.343 5 6m14 0v6M5 6v6m0 0c0 1.657 3.134 3 7 3s7-1.343 7-3M5 12v6c0 1.657 3.134 3 7 3s7-1.343 7-3v-6" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 369 B

After

Width:  |  Height:  |  Size: 374 B

View File

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
svg/scale=5.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m4 12 8-8 8 8M6 10.5V19a1 1 0 0 0 1 1h3v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h3a1 1 0 0 0 1-1v-8.5"/>
<svg width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="m4 12 8-8 8 8M6 10.5V19a1 1 0 0 0 1 1h3v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h3a1 1 0 0 0 1-1v-8.5" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 299 B

After

Width:  |  Height:  |  Size: 316 B

View File

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
svg/scale=5.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 6H5m2 3H5m2 3H5m2 3H5m2 3H5m11-1a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2M7 3h11a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm8 7a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z"/>
<svg width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M7 6H5m2 3H5m2 3H5m2 3H5m2 3H5m11-1a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2M7 3h11a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm8 7a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 374 B

After

Width:  |  Height:  |  Size: 379 B

View File

@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Zm0 0a8.949 8.949 0 0 0 4.951-1.488A3.987 3.987 0 0 0 13 16h-2a3.987 3.987 0 0 0-3.951 3.512A8.948 8.948 0 0 0 12 21Zm3-11a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"/>
<svg width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Zm0 0a8.949 8.949 0 0 0 4.951-1.488A3.987 3.987 0 0 0 13 16h-2a3.987 3.987 0 0 0-3.951 3.512A8.948 8.948 0 0 0 12 21Zm3-11a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 391 B

After

Width:  |  Height:  |  Size: 396 B

View File

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
svg/scale=5.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
<path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="M4.5 17H4a1 1 0 0 1-1-1 3 3 0 0 1 3-3h1m0-3.05A2.5 2.5 0 1 1 9 5.5M19.5 17h.5a1 1 0 0 0 1-1 3 3 0 0 0-3-3h-1m0-3.05a2.5 2.5 0 1 0-2-4.45m.5 13.5h-7a1 1 0 0 1-1-1 3 3 0 0 1 3-3h3a3 3 0 0 1 3 3 1 1 0 0 1-1 1Zm-1-9.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0Z"/>
<svg width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M4.5 17H4a1 1 0 0 1-1-1 3 3 0 0 1 3-3h1m0-3.05A2.5 2.5 0 1 1 9 5.5M19.5 17h.5a1 1 0 0 0 1-1 3 3 0 0 0-3-3h-1m0-3.05a2.5 2.5 0 1 0-2-4.45m.5 13.5h-7a1 1 0 0 1-1-1 3 3 0 0 1 3-3h3a3 3 0 0 1 3 3 1 1 0 0 1-1 1Zm-1-9.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0Z" stroke="#fff" stroke-linecap="round" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 430 B

After

Width:  |  Height:  |  Size: 435 B

View File

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
svg/scale=5.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -1,4 +1,4 @@
[gd_resource type="Theme" load_steps=4 format=3 uid="uid://cy6doom358pb0"]
[gd_resource type="Theme" load_steps=15 format=3 uid="uid://cy6doom358pb0"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gsqoc"]
bg_color = Color(0.101961, 0.12549, 0.180392, 1)
@ -9,15 +9,34 @@ corner_radius_top_left = 8
corner_radius_top_right = 8
corner_radius_bottom_right = 8
corner_radius_bottom_left = 8
expand_margin_left = 24.0
expand_margin_top = 24.0
expand_margin_right = 24.0
expand_margin_bottom = 24.0
shadow_color = Color(0, 0, 0, 0.152941)
shadow_size = 5
shadow_offset = Vector2(3, 3)
anti_aliasing = false
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4nads"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_x2ak3"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_i4ejt"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_i4ejt"]
bg_color = Color(0.227451, 0.309804, 0.435294, 1)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_0wthw"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_dagba"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_xtbu8"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_hf3i3"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_1nr78"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_7adcq"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6bdnh"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_x2ak3"]
bg_color = Color(0.101961, 0.12549, 0.180392, 1)
shadow_color = Color(0, 0, 0, 0.235294)
@ -27,6 +46,9 @@ shadow_offset = Vector2(3, 3)
[resource]
BackgroundPanel/base_type = &"Panel"
BackgroundPanel/styles/panel = SubResource("StyleBoxFlat_gsqoc")
ContentPageHeaderLabel/base_type = &"Label"
ContentPageHeaderLabel/colors/font_color = Color(0.772549, 0.835294, 0.901961, 1)
ContentPageHeaderLabel/font_sizes/font_size = 30
ControlPanelButton/base_type = &"Panel"
ControlPanelButton/styles/panel = SubResource("StyleBoxFlat_4nads")
ControlPanelButtonDescriptionLabel/base_type = &"Label"
@ -35,5 +57,18 @@ ControlPanelButtonDescriptionLabel/font_sizes/font_size = 14
ControlPanelButtonHeaderLabel/base_type = &"Label"
ControlPanelButtonHeaderLabel/colors/font_color = Color(0.772549, 0.835294, 0.901961, 1)
ControlPanelButtonHeaderLabel/font_sizes/font_size = 25
SideNavButton/base_type = &"Button"
SideNavButton/constants/icon_max_width = 15
SideNavButton/styles/disabled = SubResource("StyleBoxEmpty_4nads")
SideNavButton/styles/disabled_mirrored = SubResource("StyleBoxEmpty_x2ak3")
SideNavButton/styles/focus = SubResource("StyleBoxEmpty_i4ejt")
SideNavButton/styles/hover = SubResource("StyleBoxFlat_i4ejt")
SideNavButton/styles/hover_mirrored = SubResource("StyleBoxEmpty_0wthw")
SideNavButton/styles/hover_pressed = SubResource("StyleBoxEmpty_dagba")
SideNavButton/styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_xtbu8")
SideNavButton/styles/normal = SubResource("StyleBoxEmpty_hf3i3")
SideNavButton/styles/normal_mirrored = SubResource("StyleBoxEmpty_1nr78")
SideNavButton/styles/pressed = SubResource("StyleBoxEmpty_7adcq")
SideNavButton/styles/pressed_mirrored = SubResource("StyleBoxEmpty_6bdnh")
SideNavigationPanel/base_type = &"Panel"
SideNavigationPanel/styles/panel = SubResource("StyleBoxFlat_x2ak3")

View File

@ -1,26 +1,31 @@
[gd_scene load_steps=4 format=3 uid="uid://dik0j12wsrebk"]
[gd_scene load_steps=3 format=3 uid="uid://dik0j12wsrebk"]
[ext_resource type="Script" uid="uid://2fms2mdp2fcr" path="res://src/scripts/scenes/controls/ControlPanelButton.cs" id="1_7ouv3"]
[ext_resource type="Texture2D" uid="uid://led2qy4im1ir" path="res://resources/icons/outline/user/address-book.svg" id="1_ceptd"]
[ext_resource type="Material" uid="uid://ct6poiml5fc2h" path="res://resources/shaders/InverShaderMaterial.tres" id="1_ubvdb"]
[node name="ControlPanelButton" type="Panel"]
custom_minimum_size = Vector2(250, 150)
custom_minimum_size = Vector2(300, 200)
size_flags_horizontal = 4
size_flags_vertical = 4
theme_type_variation = &"ControlPanelButton"
script = ExtResource("1_7ouv3")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 15
theme_override_constants/margin_top = 15
theme_override_constants/margin_right = 15
theme_override_constants/margin_bottom = 15
[node name="Icon" type="TextureRect" parent="VBoxContainer"]
material = ExtResource("1_ubvdb")
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
layout_mode = 2
[node name="Icon" type="TextureRect" parent="MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 40)
layout_mode = 2
size_flags_vertical = 6
@ -28,14 +33,14 @@ texture = ExtResource("1_ceptd")
expand_mode = 3
stretch_mode = 5
[node name="HeaderLabel" type="Label" parent="VBoxContainer"]
[node name="HeaderLabel" type="Label" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_type_variation = &"ControlPanelButtonHeaderLabel"
text = "Library"
[node name="DescriptionLabel" type="Label" parent="VBoxContainer"]
[node name="DescriptionLabel" type="Label" parent="MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(50, 0)
layout_mode = 2
size_flags_vertical = 6

View File

@ -3,6 +3,6 @@
[node name="LibraryGridContainer" type="GridContainer"]
size_flags_horizontal = 4
size_flags_vertical = 0
theme_override_constants/h_separation = 80
theme_override_constants/v_separation = 80
theme_override_constants/h_separation = 20
theme_override_constants/v_separation = 20
columns = 2

View File

@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://bv1ceq4dnkl7l"]
[node name="Main" type="Node"]

View File

@ -1,17 +1,17 @@
[gd_scene load_steps=8 format=3 uid="uid://djj22j6g14exe"]
[gd_scene load_steps=11 format=3 uid="uid://djj22j6g14exe"]
[ext_resource type="Script" uid="uid://rbad8dldyf3k" path="res://src/scripts/scenes/main/MainUILogic.cs" id="1_jqcri"]
[ext_resource type="Theme" uid="uid://cy6doom358pb0" path="res://resources/themes/main_theme.tres" id="1_w8y14"]
[ext_resource type="Texture2D" uid="uid://b1uk5lvcgwwng" path="res://resources/images/logo_800x800_transparent.png" id="2_gvps3"]
[ext_resource type="Material" uid="uid://ct6poiml5fc2h" path="res://resources/shaders/InverShaderMaterial.tres" id="2_jqcri"]
[ext_resource type="Texture2D" uid="uid://byj6qsopdu0d3" path="res://resources/icons/outline/general/bars.svg" id="2_ljdvm"]
[ext_resource type="PackedScene" uid="uid://uw5lhfr2gtir" path="res://src/scenes/controls/library_grid_container.tscn" id="5_708wv"]
[ext_resource type="PackedScene" uid="uid://dik0j12wsrebk" path="res://src/scenes/controls/control_panel_button.tscn" id="6_8fhmd"]
[ext_resource type="Texture2D" uid="uid://du8ke5nyvbvb4" path="res://resources/icons/outline/general/home.svg" id="6_8fhmd"]
[ext_resource type="Texture2D" uid="uid://btfy8wdc7wad" path="res://resources/icons/outline/general/book-open.svg" id="6_qkaxd"]
[ext_resource type="Texture2D" uid="uid://dl1vmy617ucp0" path="res://resources/icons/outline/user/users-group.svg" id="7_6kp2r"]
[ext_resource type="Texture2D" uid="uid://bmdvoxtfpa4k5" path="res://resources/icons/outline/general/bug.svg" id="8_k8ybs"]
[ext_resource type="Texture2D" uid="uid://bxa23hikofgyc" path="res://resources/icons/outline/user/user-circle.svg" id="9_k8ybs"]
[ext_resource type="Texture2D" uid="uid://cstlfuft2ekqb" path="res://resources/icons/outline/general/cog.svg" id="10_di5gi"]
[node name="MainUICanvas" type="CanvasLayer"]
follow_viewport_enabled = true
[node name="MainUI" type="Control" parent="." node_paths=PackedStringArray("HamburgerButton", "SideNavPanel", "MainContentContainer")]
[node name="MainUI" type="Control" node_paths=PackedStringArray("HamburgerButton", "SideNavPanel", "MainContentContainer")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@ -23,10 +23,10 @@ size_flags_vertical = 3
script = ExtResource("1_jqcri")
HamburgerButton = NodePath("BackgroundPanel/VBoxContainer/TopNavPanel/HBoxContainer/MarginContainer/HamburgerIcon")
SideNavPanel = NodePath("BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel")
MainContentContainer = NodePath("BackgroundPanel/VBoxContainer/MainGridContainer/MainContentMarginContainer")
MainContentContainer = NodePath("BackgroundPanel/VBoxContainer/MainGridContainer/ScrollContainer/MainContentMarginContainer")
_navPanelExpandedSize = 100
[node name="BackgroundPanel" type="Panel" parent="MainUI"]
[node name="BackgroundPanel" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@ -36,7 +36,7 @@ grow_vertical = 2
theme = ExtResource("1_w8y14")
theme_type_variation = &"BackgroundPanel"
[node name="VBoxContainer" type="VBoxContainer" parent="MainUI/BackgroundPanel"]
[node name="VBoxContainer" type="VBoxContainer" parent="BackgroundPanel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@ -45,13 +45,13 @@ grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 0
[node name="TopNavPanel" type="Panel" parent="MainUI/BackgroundPanel/VBoxContainer"]
[node name="TopNavPanel" type="Panel" parent="BackgroundPanel/VBoxContainer"]
z_index = 1
custom_minimum_size = Vector2(0, 40)
layout_mode = 2
theme_type_variation = &"SideNavigationPanel"
[node name="HBoxContainer" type="HBoxContainer" parent="MainUI/BackgroundPanel/VBoxContainer/TopNavPanel"]
[node name="HBoxContainer" type="HBoxContainer" parent="BackgroundPanel/VBoxContainer/TopNavPanel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@ -59,7 +59,7 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="MainUI/BackgroundPanel/VBoxContainer/TopNavPanel/HBoxContainer"]
[node name="MarginContainer" type="MarginContainer" parent="BackgroundPanel/VBoxContainer/TopNavPanel/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 2
theme_override_constants/margin_left = 10
@ -67,26 +67,25 @@ theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="HamburgerIcon" type="TextureButton" parent="MainUI/BackgroundPanel/VBoxContainer/TopNavPanel/HBoxContainer/MarginContainer"]
material = ExtResource("2_jqcri")
[node name="HamburgerIcon" type="TextureButton" parent="BackgroundPanel/VBoxContainer/TopNavPanel/HBoxContainer/MarginContainer"]
custom_minimum_size = Vector2(48, 0)
layout_mode = 2
texture_normal = ExtResource("2_ljdvm")
ignore_texture_size = true
stretch_mode = 4
[node name="MainGridContainer" type="GridContainer" parent="MainUI/BackgroundPanel/VBoxContainer"]
[node name="MainGridContainer" type="GridContainer" parent="BackgroundPanel/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
columns = 2
[node name="SideNavPanel" type="Panel" parent="MainUI/BackgroundPanel/VBoxContainer/MainGridContainer"]
[node name="SideNavPanel" type="Panel" parent="BackgroundPanel/VBoxContainer/MainGridContainer"]
custom_minimum_size = Vector2(100, 0)
layout_mode = 2
size_flags_vertical = 3
theme_type_variation = &"SideNavigationPanel"
[node name="VBoxContainer" type="VBoxContainer" parent="MainUI/BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel"]
[node name="VBoxContainer" type="VBoxContainer" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@ -94,14 +93,20 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="MainUI/BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer"]
[node name="MarginContainer" type="MarginContainer" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="TextureRect" type="TextureRect" parent="MainUI/BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer"]
[node name="NavButtonsVBox" type="VBoxContainer" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/separation = 10
[node name="NavbarIcon" type="TextureRect" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer/NavButtonsVBox"]
custom_minimum_size = Vector2(40, 40)
layout_mode = 2
size_flags_horizontal = 4
@ -110,11 +115,72 @@ texture = ExtResource("2_gvps3")
expand_mode = 1
stretch_mode = 4
[node name="NavButtonsVBox" type="VBoxContainer" parent="MainUI/BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer"]
[node name="HomeButton" type="Button" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer/NavButtonsVBox"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
tooltip_text = "Dashboard"
theme_type_variation = &"SideNavButton"
icon = ExtResource("6_8fhmd")
icon_alignment = 1
expand_icon = true
[node name="LibraryButton" type="Button" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer/NavButtonsVBox"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
tooltip_text = "Library"
theme_type_variation = &"SideNavButton"
icon = ExtResource("6_qkaxd")
icon_alignment = 1
expand_icon = true
[node name="CharactersButton" type="Button" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer/NavButtonsVBox"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
tooltip_text = "Characters"
theme_type_variation = &"SideNavButton"
icon = ExtResource("7_6kp2r")
icon_alignment = 1
expand_icon = true
[node name="AdvancedButton" type="Button" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer/NavButtonsVBox"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
tooltip_text = "Advanced"
theme_type_variation = &"SideNavButton"
icon = ExtResource("8_k8ybs")
icon_alignment = 1
expand_icon = true
[node name="HFlowContainer" type="HFlowContainer" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer/NavButtonsVBox"]
layout_mode = 2
size_flags_vertical = 10
[node name="ProfileButton" type="Button" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer/NavButtonsVBox/HFlowContainer"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
size_flags_horizontal = 3
tooltip_text = "Profile"
theme_type_variation = &"SideNavButton"
icon = ExtResource("9_k8ybs")
icon_alignment = 1
expand_icon = true
[node name="SettingsButton" type="Button" parent="BackgroundPanel/VBoxContainer/MainGridContainer/SideNavPanel/VBoxContainer/MarginContainer/NavButtonsVBox/HFlowContainer"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
size_flags_horizontal = 3
tooltip_text = "Settings"
theme_type_variation = &"SideNavButton"
icon = ExtResource("10_di5gi")
icon_alignment = 1
expand_icon = true
[node name="ScrollContainer" type="ScrollContainer" parent="BackgroundPanel/VBoxContainer/MainGridContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="MainContentMarginContainer" type="MarginContainer" parent="MainUI/BackgroundPanel/VBoxContainer/MainGridContainer"]
[node name="MainContentMarginContainer" type="MarginContainer" parent="BackgroundPanel/VBoxContainer/MainGridContainer/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
@ -122,9 +188,3 @@ theme_override_constants/margin_left = 50
theme_override_constants/margin_top = 50
theme_override_constants/margin_right = 50
theme_override_constants/margin_bottom = 50
[node name="LibraryGridContainer" parent="MainUI/BackgroundPanel/VBoxContainer/MainGridContainer/MainContentMarginContainer" instance=ExtResource("5_708wv")]
layout_mode = 2
[node name="ControlPanelButton" parent="MainUI/BackgroundPanel/VBoxContainer/MainGridContainer/MainContentMarginContainer/LibraryGridContainer" instance=ExtResource("6_8fhmd")]
layout_mode = 2

View File

@ -0,0 +1,62 @@
[gd_scene load_steps=7 format=3 uid="uid://ble4w0555f45u"]
[ext_resource type="PackedScene" uid="uid://bgidhyuhh4q7m" path="res://src/scripts/scenes/controls/content_page_panel_template.tscn" id="1_o7g64"]
[ext_resource type="Script" uid="uid://bnum2abqdmr4y" path="res://src/scripts/scenes/main/content_pages/HomeContentPage.cs" id="1_p4fm1"]
[ext_resource type="PackedScene" uid="uid://uw5lhfr2gtir" path="res://src/scenes/controls/library_grid_container_template.tscn" id="2_dau57"]
[ext_resource type="PackedScene" uid="uid://dik0j12wsrebk" path="res://src/scenes/controls/control_panel_button.tscn" id="3_on1wh"]
[ext_resource type="Texture2D" uid="uid://dn6obwwyar2er" path="res://resources/icons/outline/general/database.svg" id="4_p4fm1"]
[ext_resource type="Texture2D" uid="uid://dl1vmy617ucp0" path="res://resources/icons/outline/user/users-group.svg" id="5_on1wh"]
[node name="HomePage" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource("1_p4fm1")
[node name="ContentPagePanel" parent="." instance=ExtResource("1_o7g64")]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="HeaderLabel" parent="ContentPagePanel/VBoxContainer" index="0"]
text = "Dashboard"
[node name="SubHeaderLabel" parent="ContentPagePanel/VBoxContainer" index="2"]
visible = false
[node name="HSeparator2" parent="ContentPagePanel/VBoxContainer" index="3"]
visible = false
[node name="LibraryGridContainer" parent="ContentPagePanel/VBoxContainer/ContentPanel" index="0" instance=ExtResource("2_dau57")]
layout_mode = 2
[node name="LibraryControlPanelButton" parent="ContentPagePanel/VBoxContainer/ContentPanel/LibraryGridContainer" instance=ExtResource("3_on1wh")]
layout_mode = 2
[node name="Icon" parent="ContentPagePanel/VBoxContainer/ContentPanel/LibraryGridContainer/LibraryControlPanelButton/MarginContainer/VBoxContainer" index="0"]
texture = ExtResource("4_p4fm1")
[node name="CharactersControlPanelButton2" parent="ContentPagePanel/VBoxContainer/ContentPanel/LibraryGridContainer" instance=ExtResource("3_on1wh")]
layout_mode = 2
[node name="Icon" parent="ContentPagePanel/VBoxContainer/ContentPanel/LibraryGridContainer/CharactersControlPanelButton2/MarginContainer/VBoxContainer" index="0"]
texture = ExtResource("5_on1wh")
[node name="HeaderLabel" parent="ContentPagePanel/VBoxContainer/ContentPanel/LibraryGridContainer/CharactersControlPanelButton2/MarginContainer/VBoxContainer" index="1"]
text = "Characters"
[node name="DescriptionLabel" parent="ContentPagePanel/VBoxContainer/ContentPanel/LibraryGridContainer/CharactersControlPanelButton2/MarginContainer/VBoxContainer" index="2"]
text = "Create and manage Characters"
[editable path="ContentPagePanel"]
[editable path="ContentPagePanel/VBoxContainer/ContentPanel/LibraryGridContainer"]
[editable path="ContentPagePanel/VBoxContainer/ContentPanel/LibraryGridContainer/LibraryControlPanelButton"]
[editable path="ContentPagePanel/VBoxContainer/ContentPanel/LibraryGridContainer/CharactersControlPanelButton2"]

View File

@ -0,0 +1,70 @@
using Godot;
using System;
using System.Collections.Generic;
namespace SessionZeroApp;
public partial class AppManager : Node
{
public static AppManager Instance { get; private set; }
public ApplicationSettingsResource AppSettings { get; private set; }
public CanvasLayer MainCanvas { get; private set; }
public Node MainNode { get; private set; }
public MainUILogic MainUI { get; private set; }
public Dictionary<string, ContentPageBase> Pages { get; private set; } = [];
private PackedScene _mainUiScene;
public override void _Ready()
{
Instance = this;
try
{
AppSettings = ResourceLoader.Load<ApplicationSettingsResource>("res://AppSettings.tres");
}
catch (InvalidCastException e)
{
GD.PrintErr($"Failed to get the AppSettings resource: {e}");
return;
}
_mainUiScene = AppSettings.MainUiScene;
foreach (var scene in AppSettings.Pages)
{
try
{
var newPage = scene.Instantiate<ContentPageBase>();
Pages[newPage.PageName] = newPage;
}
catch (InvalidCastException e)
{
GD.PrintErr($"Couldn't add page '{scene}': {e}");
continue;
}
}
MainCanvas = new();
GetTree().Root.CallDeferred("add_child", MainCanvas);
MainNode = GetTree().Root.GetNode<Node>("Main");
try
{
MainUI = _mainUiScene.Instantiate<MainUILogic>();
}
catch (InvalidCastException e)
{
GD.PrintErr($"Failed to setup the MainUI scene: {e}");
return;
}
MainCanvas.AddChild(MainUI);
MainUI.LoadPageContent(Pages["Home"]);
}
}

View File

@ -0,0 +1 @@
uid://ceq1itkqfqmag

View File

@ -0,0 +1,10 @@
using Godot;
using System;
[GlobalClass]
public partial class ApplicationSettingsResource : Resource
{
[ExportCategory("Setup")]
[Export] public PackedScene MainUiScene;
[Export] public Godot.Collections.Array<PackedScene> Pages { get; private set; }
}

View File

@ -0,0 +1 @@
uid://ddh7o0nfsuo4k

View File

@ -0,0 +1,8 @@
using Godot;
public partial class ContentPageBase : Control
{
[Export] public virtual string PageName { get; protected set; }
}

View File

@ -0,0 +1 @@
uid://c2uo34okr8gj5

View File

@ -1,6 +1,8 @@
using Godot;
using System;
namespace SessionZeroApp;
public partial class ControlPanelButton : Panel
{

View File

@ -0,0 +1,45 @@
[gd_scene load_steps=4 format=3 uid="uid://bgidhyuhh4q7m"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8fhmd"]
[sub_resource type="StyleBoxLine" id="StyleBoxLine_jqcri"]
color = Color(0, 0, 0, 0)
thickness = 0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_jqcri"]
[node name="ContentPagePanel" type="PanelContainer"]
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_styles/panel = SubResource("StyleBoxEmpty_8fhmd")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 2
[node name="HeaderLabel" type="Label" parent="VBoxContainer"]
layout_mode = 2
theme_type_variation = &"ContentPageHeaderLabel"
text = "Header"
horizontal_alignment = 1
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 10
theme_override_styles/separator = SubResource("StyleBoxLine_jqcri")
[node name="SubHeaderLabel" type="Label" parent="VBoxContainer"]
custom_minimum_size = Vector2(20, 0)
layout_mode = 2
text = "Subheader"
horizontal_alignment = 1
autowrap_mode = 2
[node name="HSeparator2" type="HSeparator" parent="VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 10
theme_override_styles/separator = SubResource("StyleBoxLine_jqcri")
[node name="ContentPanel" type="PanelContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_styles/panel = SubResource("StyleBoxEmpty_jqcri")

View File

@ -1,9 +1,11 @@
using Godot;
using System;
namespace SessionZeroApp;
public partial class MainUILogic : Control
{
[ExportGroup("Node Exports")]
[ExportGroup("Node Exports")]
[Export] public TextureButton HamburgerButton;
[Export] public Panel SideNavPanel;
[Export] public MarginContainer MainContentContainer;
@ -20,13 +22,8 @@ public partial class MainUILogic : Control
_sideNavVBox = SideNavPanel.GetNode<VBoxContainer>("VBoxContainer");
SetupButtonConnections();
var cpbTest = GetNode<ControlPanelButton>("BackgroundPanel/VBoxContainer/MainGridContainer/MainContentMarginContainer/LibraryGridContainer/ControlPanelButton");
cpbTest.Pressed += () => { GD.Print("AYYYYYY"); };
}
private void SetupButtonConnections()
{
@ -51,7 +48,15 @@ public partial class MainUILogic : Control
_sideNavTween.TweenProperty(_sideNavVBox, "modulate:a", targetAlpha, 0.2f);
_sideNavToggled = !_sideNavToggled;
}
public void LoadPageContent(Control pageContent)
{
foreach (var child in MainContentContainer.GetChildren())
{
RemoveChild(child);
}
MainContentContainer.AddChild(pageContent);
}
}

View File

@ -0,0 +1,12 @@
using Godot;
public partial class HomeContentPage : ContentPageBase
{
public override string PageName { get; protected set; } = "Home";
public override void _Ready()
{
}
}

View File

@ -0,0 +1 @@
uid://bnum2abqdmr4y