extends PopupPanel const SETTINGS_FILE = "user://browser_settings.json" # Tab references @onready var tab_general: Button = $HSplitContainer/Sidebar/VBoxContainer/TabGeneral @onready var tab_privacy: Button = $HSplitContainer/Sidebar/VBoxContainer/TabPrivacy @onready var tab_downloads: Button = $HSplitContainer/Sidebar/VBoxContainer/TabDownloads @onready var tab_advanced: Button = $HSplitContainer/Sidebar/VBoxContainer/TabAdvanced @onready var tab_about: Button = $HSplitContainer/Sidebar/VBoxContainer/TabAbout # Panel references @onready var general_panel: VBoxContainer = $HSplitContainer/Content/ScrollContainer/ContentStack/GeneralPanel @onready var privacy_panel: VBoxContainer = $HSplitContainer/Content/ScrollContainer/ContentStack/PrivacyPanel @onready var downloads_panel: VBoxContainer = $HSplitContainer/Content/ScrollContainer/ContentStack/DownloadsPanel @onready var advanced_panel: VBoxContainer = $HSplitContainer/Content/ScrollContainer/ContentStack/AdvancedPanel @onready var about_panel: VBoxContainer = $HSplitContainer/Content/ScrollContainer/ContentStack/AboutPanel # Settings controls - General @onready var startup_new_tab: CheckBox = $HSplitContainer/Content/ScrollContainer/ContentStack/GeneralPanel/StartupSection/VBoxContainer/StartupNewTab @onready var startup_specific_page: CheckBox = $HSplitContainer/Content/ScrollContainer/ContentStack/GeneralPanel/StartupSection/VBoxContainer/StartupSpecificPage @onready var startup_url_container: HBoxContainer = $HSplitContainer/Content/ScrollContainer/ContentStack/GeneralPanel/StartupSection/VBoxContainer/StartupURLContainer @onready var startup_url_input: LineEdit = $HSplitContainer/Content/ScrollContainer/ContentStack/GeneralPanel/StartupSection/VBoxContainer/StartupURLContainer/URLInput @onready var search_input: LineEdit = $HSplitContainer/Content/ScrollContainer/ContentStack/GeneralPanel/SearchEngineSection/VBoxContainer/HBoxContainer/SearchInput # Settings controls - Privacy @onready var clear_history_button: Button = $HSplitContainer/Content/ScrollContainer/ContentStack/PrivacyPanel/ClearDataSection/VBoxContainer/ButtonsContainer/ClearHistoryButton @onready var clear_cookies_button: Button = $HSplitContainer/Content/ScrollContainer/ContentStack/PrivacyPanel/ClearDataSection/VBoxContainer/ButtonsContainer/ClearCookiesButton @onready var clear_downloads_button: Button = $HSplitContainer/Content/ScrollContainer/ContentStack/PrivacyPanel/ClearDataSection/VBoxContainer/ButtonsContainer/ClearDownloadsButton # Settings controls - Downloads @onready var download_confirm_checkbox: CheckBox = $HSplitContainer/Content/ScrollContainer/ContentStack/DownloadsPanel/DownloadConfirmSection/VBoxContainer/ConfirmCheckBox # Settings controls - Advanced @onready var dns_input: LineEdit = $HSplitContainer/Content/ScrollContainer/ContentStack/AdvancedPanel/DNSSection/VBoxContainer/HBoxContainer/DNSInput # Settings are now managed by SettingsManager singleton var tab_buttons = [] var content_panels = [] func _ready(): tab_buttons = [tab_general, tab_privacy, tab_downloads, tab_advanced, tab_about] content_panels = [general_panel, privacy_panel, downloads_panel, advanced_panel, about_panel] tab_general.toggled.connect(_on_tab_toggled.bind("general")) tab_privacy.toggled.connect(_on_tab_toggled.bind("privacy")) tab_downloads.toggled.connect(_on_tab_toggled.bind("downloads")) tab_advanced.toggled.connect(_on_tab_toggled.bind("advanced")) tab_about.toggled.connect(_on_tab_toggled.bind("about")) startup_new_tab.toggled.connect(_on_startup_new_tab_toggled) startup_specific_page.toggled.connect(_on_startup_specific_page_toggled) startup_url_input.text_changed.connect(_on_startup_url_changed) search_input.text_changed.connect(_on_search_engine_changed) download_confirm_checkbox.toggled.connect(_on_download_confirmation_changed) dns_input.text_changed.connect(_on_dns_changed) clear_history_button.pressed.connect(_on_clear_history_pressed) clear_cookies_button.pressed.connect(_on_clear_cookies_pressed) clear_downloads_button.pressed.connect(_on_clear_downloads_pressed) apply_settings_to_ui() _on_tab_toggled(true, "general") func _on_tab_toggled(pressed: bool, tab_name: String): if not pressed: return _update_tab_styles(tab_name) for i in range(content_panels.size()): var panel = content_panels[i] match tab_name: "general": panel.visible = (i == 0) "privacy": panel.visible = (i == 1) "downloads": panel.visible = (i == 2) "advanced": panel.visible = (i == 3) "about": panel.visible = (i == 4) func _update_tab_styles(selected_tab: String): for i in range(tab_buttons.size()): var button = tab_buttons[i] var tab_names = ["general", "privacy", "downloads", "advanced", "about"] var is_selected = (tab_names[i] == selected_tab) if is_selected: button.modulate = Color.WHITE else: button.modulate = Color(0.8, 0.8, 0.8) func _on_startup_new_tab_toggled(pressed: bool): if pressed: SettingsManager.set_startup_new_tab(true) startup_url_container.visible = false func _on_startup_specific_page_toggled(pressed: bool): if pressed: SettingsManager.set_startup_specific_page(true) startup_url_container.visible = true func _on_startup_url_changed(new_url: String): SettingsManager.set_startup_url(new_url) func _on_search_engine_changed(new_url: String): SettingsManager.set_search_engine_url(new_url) func _on_download_confirmation_changed(enabled: bool): SettingsManager.set_download_confirmation(enabled) func _on_dns_changed(new_dns: String): SettingsManager.set_dns_url(new_dns) func _on_clear_history_pressed(): BrowserHistory.clear_all() func _on_clear_cookies_pressed(): LuaCrumbsUtils.clear_all_crumbs() func _on_clear_downloads_pressed(): var main = Engine.get_main_loop().current_scene if main.download_manager.downloads_history_ui: main.download_manager.downloads_history_ui.clear_all_downloads() else: main.download_manager._ensure_downloads_history_ui() main.download_manager.downloads_history_ui.clear_all_downloads() func apply_settings_to_ui(): var startup_behavior = SettingsManager.get_startup_behavior() startup_new_tab.button_pressed = startup_behavior.new_tab startup_specific_page.button_pressed = startup_behavior.specific_page startup_url_container.visible = startup_behavior.specific_page startup_url_input.text = startup_behavior.url search_input.text = SettingsManager.get_search_engine_url() download_confirm_checkbox.button_pressed = SettingsManager.get_download_confirmation() dns_input.text = SettingsManager.get_dns_url()