From 647d37c816ad0540a7e0c195f61032d5fded2790 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 17 Aug 2025 20:33:14 -0500 Subject: [PATCH] More UI stuff, appmanager class, and appsettings --- sessionzero/AppSettings.tres | 11 ++ sessionzero/project.godot | 7 +- .../resources/icons/outline/general/bars.svg | 43 +------ .../icons/outline/general/book-open.svg | 4 +- .../outline/general/book-open.svg.import | 2 +- .../resources/icons/outline/general/bug.svg | 4 +- .../icons/outline/general/bug.svg.import | 2 +- .../resources/icons/outline/general/cog.svg | 6 +- .../icons/outline/general/cog.svg.import | 2 +- .../icons/outline/general/database.svg | 4 +- .../icons/outline/general/database.svg.import | 2 +- .../resources/icons/outline/general/home.svg | 4 +- .../icons/outline/general/home.svg.import | 2 +- .../icons/outline/user/address-book.svg | 4 +- .../icons/outline/user/user-circle.svg | 4 +- .../icons/outline/user/user-circle.svg.import | 2 +- .../icons/outline/user/users-group.svg | 4 +- .../icons/outline/user/users-group.svg.import | 2 +- sessionzero/resources/themes/main_theme.tres | 45 ++++++- .../scenes/controls/control_panel_button.tscn | 21 ++-- ...n => library_grid_container_template.tscn} | 4 +- sessionzero/src/scenes/main.tscn | 3 + sessionzero/src/scenes/main/MainUI.tscn | 118 +++++++++++++----- .../scenes/main/content_pages/home_page.tscn | 62 +++++++++ sessionzero/src/scripts/AppManager.cs | 70 +++++++++++ sessionzero/src/scripts/AppManager.cs.uid | 1 + .../ApplicationSettingsResource.cs | 10 ++ .../ApplicationSettingsResource.cs.uid | 1 + .../scenes/controls/ContentPageBase.cs | 8 ++ .../scenes/controls/ContentPageBase.cs.uid | 1 + .../scenes/controls/ControlPanelButton.cs | 2 + .../controls/content_page_panel_template.tscn | 45 +++++++ .../src/scripts/scenes/main/MainUILogic.cs | 21 ++-- .../main/content_pages/HomeContentPage.cs | 12 ++ .../main/content_pages/HomeContentPage.cs.uid | 1 + 35 files changed, 416 insertions(+), 118 deletions(-) create mode 100644 sessionzero/AppSettings.tres rename sessionzero/src/scenes/controls/{library_grid_container.tscn => library_grid_container_template.tscn} (65%) create mode 100644 sessionzero/src/scenes/main.tscn create mode 100644 sessionzero/src/scenes/main/content_pages/home_page.tscn create mode 100644 sessionzero/src/scripts/AppManager.cs create mode 100644 sessionzero/src/scripts/AppManager.cs.uid create mode 100644 sessionzero/src/scripts/custom_resources/ApplicationSettingsResource.cs create mode 100644 sessionzero/src/scripts/custom_resources/ApplicationSettingsResource.cs.uid create mode 100644 sessionzero/src/scripts/scenes/controls/ContentPageBase.cs create mode 100644 sessionzero/src/scripts/scenes/controls/ContentPageBase.cs.uid create mode 100644 sessionzero/src/scripts/scenes/controls/content_page_panel_template.tscn create mode 100644 sessionzero/src/scripts/scenes/main/content_pages/HomeContentPage.cs create mode 100644 sessionzero/src/scripts/scenes/main/content_pages/HomeContentPage.cs.uid diff --git a/sessionzero/AppSettings.tres b/sessionzero/AppSettings.tres new file mode 100644 index 0000000..faabaff --- /dev/null +++ b/sessionzero/AppSettings.tres @@ -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" diff --git a/sessionzero/project.godot b/sessionzero/project.godot index 5653131..37d02a9 100644 --- a/sessionzero/project.godot +++ b/sessionzero/project.godot @@ -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 diff --git a/sessionzero/resources/icons/outline/general/bars.svg b/sessionzero/resources/icons/outline/general/bars.svg index 26e7a19..b1868b8 100644 --- a/sessionzero/resources/icons/outline/general/bars.svg +++ b/sessionzero/resources/icons/outline/general/bars.svg @@ -1,42 +1,3 @@ - - - - - + + diff --git a/sessionzero/resources/icons/outline/general/book-open.svg b/sessionzero/resources/icons/outline/general/book-open.svg index 1adcf0f..2c5b710 100644 --- a/sessionzero/resources/icons/outline/general/book-open.svg +++ b/sessionzero/resources/icons/outline/general/book-open.svg @@ -1,3 +1,3 @@ - - + + diff --git a/sessionzero/resources/icons/outline/general/book-open.svg.import b/sessionzero/resources/icons/outline/general/book-open.svg.import index 48f7389..9b28257 100644 --- a/sessionzero/resources/icons/outline/general/book-open.svg.import +++ b/sessionzero/resources/icons/outline/general/book-open.svg.import @@ -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 diff --git a/sessionzero/resources/icons/outline/general/bug.svg b/sessionzero/resources/icons/outline/general/bug.svg index 7c03801..524b821 100644 --- a/sessionzero/resources/icons/outline/general/bug.svg +++ b/sessionzero/resources/icons/outline/general/bug.svg @@ -1,3 +1,3 @@ - - + + diff --git a/sessionzero/resources/icons/outline/general/bug.svg.import b/sessionzero/resources/icons/outline/general/bug.svg.import index 08d0dd8..c3a1e83 100644 --- a/sessionzero/resources/icons/outline/general/bug.svg.import +++ b/sessionzero/resources/icons/outline/general/bug.svg.import @@ -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 diff --git a/sessionzero/resources/icons/outline/general/cog.svg b/sessionzero/resources/icons/outline/general/cog.svg index fde1218..f2eef66 100644 --- a/sessionzero/resources/icons/outline/general/cog.svg +++ b/sessionzero/resources/icons/outline/general/cog.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/sessionzero/resources/icons/outline/general/cog.svg.import b/sessionzero/resources/icons/outline/general/cog.svg.import index 284b66c..1a1d524 100644 --- a/sessionzero/resources/icons/outline/general/cog.svg.import +++ b/sessionzero/resources/icons/outline/general/cog.svg.import @@ -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 diff --git a/sessionzero/resources/icons/outline/general/database.svg b/sessionzero/resources/icons/outline/general/database.svg index 0c8d8e8..e1167a1 100644 --- a/sessionzero/resources/icons/outline/general/database.svg +++ b/sessionzero/resources/icons/outline/general/database.svg @@ -1,3 +1,3 @@ - - + + diff --git a/sessionzero/resources/icons/outline/general/database.svg.import b/sessionzero/resources/icons/outline/general/database.svg.import index 821ce88..f713bea 100644 --- a/sessionzero/resources/icons/outline/general/database.svg.import +++ b/sessionzero/resources/icons/outline/general/database.svg.import @@ -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 diff --git a/sessionzero/resources/icons/outline/general/home.svg b/sessionzero/resources/icons/outline/general/home.svg index 1e74956..017c4b2 100644 --- a/sessionzero/resources/icons/outline/general/home.svg +++ b/sessionzero/resources/icons/outline/general/home.svg @@ -1,3 +1,3 @@ - - + + diff --git a/sessionzero/resources/icons/outline/general/home.svg.import b/sessionzero/resources/icons/outline/general/home.svg.import index b7a684b..c67c297 100644 --- a/sessionzero/resources/icons/outline/general/home.svg.import +++ b/sessionzero/resources/icons/outline/general/home.svg.import @@ -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 diff --git a/sessionzero/resources/icons/outline/user/address-book.svg b/sessionzero/resources/icons/outline/user/address-book.svg index 3c454e2..144def5 100644 --- a/sessionzero/resources/icons/outline/user/address-book.svg +++ b/sessionzero/resources/icons/outline/user/address-book.svg @@ -1,3 +1,3 @@ - - + + diff --git a/sessionzero/resources/icons/outline/user/user-circle.svg b/sessionzero/resources/icons/outline/user/user-circle.svg index 0f5c910..affcd40 100644 --- a/sessionzero/resources/icons/outline/user/user-circle.svg +++ b/sessionzero/resources/icons/outline/user/user-circle.svg @@ -1,3 +1,3 @@ - - + + diff --git a/sessionzero/resources/icons/outline/user/user-circle.svg.import b/sessionzero/resources/icons/outline/user/user-circle.svg.import index 44d2efa..faceba6 100644 --- a/sessionzero/resources/icons/outline/user/user-circle.svg.import +++ b/sessionzero/resources/icons/outline/user/user-circle.svg.import @@ -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 diff --git a/sessionzero/resources/icons/outline/user/users-group.svg b/sessionzero/resources/icons/outline/user/users-group.svg index d10cc61..c93da53 100644 --- a/sessionzero/resources/icons/outline/user/users-group.svg +++ b/sessionzero/resources/icons/outline/user/users-group.svg @@ -1,3 +1,3 @@ - - + + diff --git a/sessionzero/resources/icons/outline/user/users-group.svg.import b/sessionzero/resources/icons/outline/user/users-group.svg.import index 6d6806f..52352e2 100644 --- a/sessionzero/resources/icons/outline/user/users-group.svg.import +++ b/sessionzero/resources/icons/outline/user/users-group.svg.import @@ -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 diff --git a/sessionzero/resources/themes/main_theme.tres b/sessionzero/resources/themes/main_theme.tres index 1067cd5..61ff9a6 100644 --- a/sessionzero/resources/themes/main_theme.tres +++ b/sessionzero/resources/themes/main_theme.tres @@ -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") diff --git a/sessionzero/src/scenes/controls/control_panel_button.tscn b/sessionzero/src/scenes/controls/control_panel_button.tscn index 6548d61..2aa91c3 100644 --- a/sessionzero/src/scenes/controls/control_panel_button.tscn +++ b/sessionzero/src/scenes/controls/control_panel_button.tscn @@ -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 diff --git a/sessionzero/src/scenes/controls/library_grid_container.tscn b/sessionzero/src/scenes/controls/library_grid_container_template.tscn similarity index 65% rename from sessionzero/src/scenes/controls/library_grid_container.tscn rename to sessionzero/src/scenes/controls/library_grid_container_template.tscn index 86760a7..f9ed117 100644 --- a/sessionzero/src/scenes/controls/library_grid_container.tscn +++ b/sessionzero/src/scenes/controls/library_grid_container_template.tscn @@ -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 diff --git a/sessionzero/src/scenes/main.tscn b/sessionzero/src/scenes/main.tscn new file mode 100644 index 0000000..ff64544 --- /dev/null +++ b/sessionzero/src/scenes/main.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://bv1ceq4dnkl7l"] + +[node name="Main" type="Node"] diff --git a/sessionzero/src/scenes/main/MainUI.tscn b/sessionzero/src/scenes/main/MainUI.tscn index 1955090..c614249 100644 --- a/sessionzero/src/scenes/main/MainUI.tscn +++ b/sessionzero/src/scenes/main/MainUI.tscn @@ -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 diff --git a/sessionzero/src/scenes/main/content_pages/home_page.tscn b/sessionzero/src/scenes/main/content_pages/home_page.tscn new file mode 100644 index 0000000..4f32035 --- /dev/null +++ b/sessionzero/src/scenes/main/content_pages/home_page.tscn @@ -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"] diff --git a/sessionzero/src/scripts/AppManager.cs b/sessionzero/src/scripts/AppManager.cs new file mode 100644 index 0000000..0bc7fba --- /dev/null +++ b/sessionzero/src/scripts/AppManager.cs @@ -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 Pages { get; private set; } = []; + + private PackedScene _mainUiScene; + + public override void _Ready() + { + Instance = this; + + try + { + AppSettings = ResourceLoader.Load("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(); + 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("Main"); + + try + { + MainUI = _mainUiScene.Instantiate(); + } + catch (InvalidCastException e) + { + GD.PrintErr($"Failed to setup the MainUI scene: {e}"); + return; + } + + MainCanvas.AddChild(MainUI); + + MainUI.LoadPageContent(Pages["Home"]); + } +} diff --git a/sessionzero/src/scripts/AppManager.cs.uid b/sessionzero/src/scripts/AppManager.cs.uid new file mode 100644 index 0000000..cc2771b --- /dev/null +++ b/sessionzero/src/scripts/AppManager.cs.uid @@ -0,0 +1 @@ +uid://ceq1itkqfqmag diff --git a/sessionzero/src/scripts/custom_resources/ApplicationSettingsResource.cs b/sessionzero/src/scripts/custom_resources/ApplicationSettingsResource.cs new file mode 100644 index 0000000..9ac4061 --- /dev/null +++ b/sessionzero/src/scripts/custom_resources/ApplicationSettingsResource.cs @@ -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 Pages { get; private set; } +} diff --git a/sessionzero/src/scripts/custom_resources/ApplicationSettingsResource.cs.uid b/sessionzero/src/scripts/custom_resources/ApplicationSettingsResource.cs.uid new file mode 100644 index 0000000..10cfe59 --- /dev/null +++ b/sessionzero/src/scripts/custom_resources/ApplicationSettingsResource.cs.uid @@ -0,0 +1 @@ +uid://ddh7o0nfsuo4k diff --git a/sessionzero/src/scripts/scenes/controls/ContentPageBase.cs b/sessionzero/src/scripts/scenes/controls/ContentPageBase.cs new file mode 100644 index 0000000..fe7e4c3 --- /dev/null +++ b/sessionzero/src/scripts/scenes/controls/ContentPageBase.cs @@ -0,0 +1,8 @@ +using Godot; + +public partial class ContentPageBase : Control +{ + [Export] public virtual string PageName { get; protected set; } + + +} \ No newline at end of file diff --git a/sessionzero/src/scripts/scenes/controls/ContentPageBase.cs.uid b/sessionzero/src/scripts/scenes/controls/ContentPageBase.cs.uid new file mode 100644 index 0000000..99eac21 --- /dev/null +++ b/sessionzero/src/scripts/scenes/controls/ContentPageBase.cs.uid @@ -0,0 +1 @@ +uid://c2uo34okr8gj5 diff --git a/sessionzero/src/scripts/scenes/controls/ControlPanelButton.cs b/sessionzero/src/scripts/scenes/controls/ControlPanelButton.cs index 763de5b..5f12604 100644 --- a/sessionzero/src/scripts/scenes/controls/ControlPanelButton.cs +++ b/sessionzero/src/scripts/scenes/controls/ControlPanelButton.cs @@ -1,6 +1,8 @@ using Godot; using System; +namespace SessionZeroApp; + public partial class ControlPanelButton : Panel { diff --git a/sessionzero/src/scripts/scenes/controls/content_page_panel_template.tscn b/sessionzero/src/scripts/scenes/controls/content_page_panel_template.tscn new file mode 100644 index 0000000..fcae840 --- /dev/null +++ b/sessionzero/src/scripts/scenes/controls/content_page_panel_template.tscn @@ -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") diff --git a/sessionzero/src/scripts/scenes/main/MainUILogic.cs b/sessionzero/src/scripts/scenes/main/MainUILogic.cs index 8e3a129..3e92003 100644 --- a/sessionzero/src/scripts/scenes/main/MainUILogic.cs +++ b/sessionzero/src/scripts/scenes/main/MainUILogic.cs @@ -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"); SetupButtonConnections(); - - var cpbTest = GetNode("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); + } } diff --git a/sessionzero/src/scripts/scenes/main/content_pages/HomeContentPage.cs b/sessionzero/src/scripts/scenes/main/content_pages/HomeContentPage.cs new file mode 100644 index 0000000..c0f0059 --- /dev/null +++ b/sessionzero/src/scripts/scenes/main/content_pages/HomeContentPage.cs @@ -0,0 +1,12 @@ +using Godot; + +public partial class HomeContentPage : ContentPageBase +{ + + public override string PageName { get; protected set; } = "Home"; + + public override void _Ready() + { + + } +} \ No newline at end of file diff --git a/sessionzero/src/scripts/scenes/main/content_pages/HomeContentPage.cs.uid b/sessionzero/src/scripts/scenes/main/content_pages/HomeContentPage.cs.uid new file mode 100644 index 0000000..88e519a --- /dev/null +++ b/sessionzero/src/scripts/scenes/main/content_pages/HomeContentPage.cs.uid @@ -0,0 +1 @@ +uid://bnum2abqdmr4y