Files
leonwww/flumi/Scripts/Browser/settings.gd

144 lines
6.5 KiB
GDScript3
Raw Normal View History

2025-09-07 18:49:32 +03:00
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()