using Avalonia.Controls; using SlamCross.Models; namespace SlamCross.Views; public partial class SettingsWindow : Window { private readonly AppSettings _settings; public SettingsWindow(AppSettings settings) { _settings = settings; InitializeComponent(); LoadSettings(); } private void LoadSettings() { Set("StartEnabled", b => b.IsChecked = _settings.StartEnabled); Set("StartMinimized",b => b.IsChecked = _settings.StartMinimized); Set("HoldToPlay", b => b.IsChecked = _settings.HoldToPlay); Set("LogError", b => b.IsChecked = _settings.LogError); Set("WriteTags", b => b.IsChecked = _settings.WriteTags); Set("OverrideFolders",b => b.IsChecked = _settings.OverrideFolders); Set("RelayKeyBox", b => b.Text = _settings.RelayKey); Set("SteamAppsBox", b => b.Text = _settings.SteamAppsOverride); Set("UserDataBox", b => b.Text = _settings.UserDataOverride); UpdateOverrideVisibility(); } private void OverrideChanged(object? sender, Avalonia.Interactivity.RoutedEventArgs e) => UpdateOverrideVisibility(); private void UpdateOverrideVisibility() { var visible = this.FindControl("OverrideFolders")?.IsChecked == true; if (this.FindControl("OverridePanel") is Grid panel) panel.IsVisible = visible; } private void Save_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { _settings.StartEnabled = Get("StartEnabled")?.IsChecked == true; _settings.StartMinimized = Get("StartMinimized")?.IsChecked == true; _settings.HoldToPlay = Get("HoldToPlay")?.IsChecked == true; _settings.LogError = Get("LogError")?.IsChecked == true; _settings.WriteTags = Get("WriteTags")?.IsChecked == true; _settings.OverrideFolders= Get("OverrideFolders")?.IsChecked == true; var relay = Get("RelayKeyBox")?.Text?.Trim(); if (!string.IsNullOrEmpty(relay) && !relay.Equals(_settings.PlayKey, System.StringComparison.OrdinalIgnoreCase)) _settings.RelayKey = relay; _settings.SteamAppsOverride = Get("SteamAppsBox")?.Text?.Trim() ?? ""; _settings.UserDataOverride = Get("UserDataBox")?.Text?.Trim() ?? ""; Close(); } private void Close_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) => Close(); private T? Get(string name) where T : Control => this.FindControl(name); private void Set(string name, System.Action action) where T : Control { if (this.FindControl(name) is T ctrl) action(ctrl); } }