Files
LanMountainDesktop/LanMontainDesktop/Views/Components/StudyEnvironmentWidgetSettingsWindow.axaml.cs
lincube 55852a2cb8 0.3.0
自习组件加入
2026-03-04 11:28:59 +08:00

91 lines
2.8 KiB
C#

using System;
using Avalonia.Controls;
using Avalonia.Interactivity;
using LanMontainDesktop.Services;
namespace LanMontainDesktop.Views.Components;
public partial class StudyEnvironmentWidgetSettingsWindow : UserControl
{
private readonly AppSettingsService _appSettingsService = new();
private readonly LocalizationService _localizationService = new();
private string _languageCode = "zh-CN";
private bool _suppressEvents;
public event EventHandler? SettingsChanged;
public StudyEnvironmentWidgetSettingsWindow()
{
InitializeComponent();
LoadState();
ApplyLocalization();
}
private void LoadState()
{
var snapshot = _appSettingsService.Load();
_languageCode = _localizationService.NormalizeLanguageCode(snapshot.LanguageCode);
var showDisplayDb = snapshot.StudyEnvironmentShowDisplayDb;
var showDbfs = snapshot.StudyEnvironmentShowDbfs;
if (!showDisplayDb && !showDbfs)
{
showDisplayDb = true;
}
_suppressEvents = true;
ShowDisplayDbCheckBox.IsChecked = showDisplayDb;
ShowDbfsCheckBox.IsChecked = showDbfs;
_suppressEvents = false;
}
private void ApplyLocalization()
{
TitleTextBlock.Text = L("study.environment.settings.title", "环境组件设置");
DescriptionTextBlock.Text = L(
"study.environment.settings.desc",
"配置右侧实时噪音值显示内容。");
ShowDisplayDbCheckBox.Content = L(
"study.environment.settings.show_display_db",
"显示 display dB");
ShowDbfsCheckBox.Content = L(
"study.environment.settings.show_dbfs",
"显示 dBFS");
HintTextBlock.Text = L(
"study.environment.settings.hint",
"至少启用一种显示方式。");
}
private void OnDisplayModeChanged(object? sender, RoutedEventArgs e)
{
_ = sender;
_ = e;
if (_suppressEvents)
{
return;
}
var showDisplayDb = ShowDisplayDbCheckBox.IsChecked == true;
var showDbfs = ShowDbfsCheckBox.IsChecked == true;
if (!showDisplayDb && !showDbfs)
{
_suppressEvents = true;
ShowDisplayDbCheckBox.IsChecked = true;
_suppressEvents = false;
showDisplayDb = true;
}
var snapshot = _appSettingsService.Load();
snapshot.StudyEnvironmentShowDisplayDb = showDisplayDb;
snapshot.StudyEnvironmentShowDbfs = showDbfs;
_appSettingsService.Save(snapshot);
SettingsChanged?.Invoke(this, EventArgs.Empty);
}
private string L(string key, string fallback)
{
return _localizationService.GetString(_languageCode, key, fallback);
}
}