extends VBoxContainer const Brand := preload("res://scripts/ui/medmind_style.gd") var main: Control var theme_toggle: CheckButton var sound_toggle: CheckButton func _ready() -> void: set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) add_theme_constant_override("separation", 18) var eyebrow := Label.new() eyebrow.text = "PREFERENCES" eyebrow.add_theme_font_override("font", Brand.font) eyebrow.add_theme_font_size_override("font_size", 14) eyebrow.add_theme_color_override("font_color", Brand.SKY_BLUE) add_child(eyebrow) var title := Label.new() title.text = "Settings" title.add_theme_font_override("font", Brand.font) title.add_theme_font_size_override("font_size", 34) add_child(title) var subtitle := Label.new() subtitle.text = "Adjust RanaZe's appearance and interface sounds." subtitle.add_theme_font_override("font", Brand.font) subtitle.add_theme_font_size_override("font_size", 17) subtitle.add_theme_color_override("font_color", Brand.SLATE) add_child(subtitle) var panel := PanelContainer.new() panel.custom_minimum_size = Vector2(520, 0) panel.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN panel.add_theme_stylebox_override("panel", Brand.panel_box(UIThemeService.is_dark_mode())) add_child(panel) var content := VBoxContainer.new() content.add_theme_constant_override("separation", 18) panel.add_child(content) theme_toggle = CheckButton.new() theme_toggle.text = "Dark mode" theme_toggle.custom_minimum_size = Vector2(0, 52) theme_toggle.toggled.connect(_on_theme_toggled) content.add_child(theme_toggle) sound_toggle = CheckButton.new() sound_toggle.text = "Interface sounds" sound_toggle.custom_minimum_size = Vector2(0, 52) sound_toggle.toggled.connect(UISoundService.set_sounds_enabled) content.add_child(sound_toggle) var legal_panel := PanelContainer.new() legal_panel.custom_minimum_size = Vector2(520, 0) legal_panel.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN legal_panel.add_theme_stylebox_override("panel", Brand.panel_box(UIThemeService.is_dark_mode())) legal_panel.set_meta("legal_panel", true) add_child(legal_panel) var legal_content := VBoxContainer.new() legal_content.add_theme_constant_override("separation", 10) legal_panel.add_child(legal_content) var legal_heading := Label.new() legal_heading.text = "Legal" legal_heading.add_theme_font_override("font", Brand.font) legal_heading.add_theme_font_size_override("font_size", 20) legal_content.add_child(legal_heading) for spec in [["Terms of Service", "terms"], ["Privacy Policy", "privacy"]]: var button := Button.new() button.text = spec[0] button.alignment = HORIZONTAL_ALIGNMENT_LEFT button.pressed.connect(_open_legal_document.bind(str(spec[1]))) legal_content.add_child(button) UIThemeService.theme_changed.connect(_on_theme_changed) func on_show(_payload: Variant = null) -> void: theme_toggle.set_pressed_no_signal(UIThemeService.is_dark_mode()) sound_toggle.set_pressed_no_signal(UISoundService.are_sounds_enabled()) func _on_theme_toggled(enabled: bool) -> void: UIThemeService.set_dark_mode(enabled) func _open_legal_document(kind: String) -> void: main.open_legal_document(kind) func _on_theme_changed(is_dark: bool) -> void: theme_toggle.set_pressed_no_signal(is_dark) var panel := theme_toggle.get_parent().get_parent() as PanelContainer if panel != null: panel.add_theme_stylebox_override("panel", Brand.panel_box(is_dark)) for node in get_children(): if node is PanelContainer and node.has_meta("legal_panel"): node.add_theme_stylebox_override("panel", Brand.panel_box(is_dark))