Files
crysome/Crysome.Server/Crysome.Server.View/LanguageWindow.cs
T

166 lines
3.7 KiB
C#
Raw Normal View History

2026-08-27 11:22:54 -06:00
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Markup;
using System.Windows.Media;
using Microsoft.Win32;
using Wpf.Ui.Controls;
namespace Crysome.Server.View;
public class LanguageWindow : FluentWindow, IComponentConnector
{
private static readonly string SavedLangPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "language.dat");
internal TitleBar TitleBarControl;
internal TextBlock SelectLabel;
internal ComboBox LanguageComboBox;
internal Button ContinueButton;
private bool _contentLoaded;
public string SelectedCultureTag { get; private set; } = "en";
public LanguageWindow()
{
InitializeComponent();
ApplyBackdrop();
PreSelectSavedLanguage();
}
private void PreSelectSavedLanguage()
{
string text = LoadSavedLanguage();
foreach (ComboBoxItem item in (IEnumerable)LanguageComboBox.Items)
{
if (item.Tag as string == text)
{
LanguageComboBox.SelectedItem = item;
return;
}
}
LanguageComboBox.SelectedIndex = 0;
}
private static string LoadSavedLanguage()
{
try
{
if (File.Exists(SavedLangPath))
{
string text = File.ReadAllText(SavedLangPath)?.Trim();
if (!string.IsNullOrEmpty(text))
{
return text;
}
}
}
catch
{
}
return "en";
}
private void SaveLanguage(string tag)
{
try
{
File.WriteAllText(SavedLangPath, tag);
}
catch
{
}
}
private void ContinueButton_Click(object sender, RoutedEventArgs e)
{
if (LanguageComboBox.SelectedItem is ComboBoxItem { Tag: string tag })
{
SelectedCultureTag = tag;
SaveLanguage(tag);
}
((Window)this).DialogResult = true;
((Window)this).Close();
}
private void ApplyBackdrop()
{
if (IsWindows11OrNewer())
{
((FluentWindow)this).ExtendsContentIntoTitleBar = true;
((FluentWindow)this).WindowBackdropType = (WindowBackdropType)2;
}
else
{
((Control)this).Background = new SolidColorBrush(Color.FromRgb(32, 32, 32));
}
}
private static bool IsWindows11OrNewer()
{
try
{
using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
if (registryKey?.GetValue("CurrentBuild") is string s && int.TryParse(s, out var result))
{
return result >= 22000;
}
}
catch
{
}
return false;
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "9.0.14.0")]
public void InitializeComponent()
{
if (!_contentLoaded)
{
_contentLoaded = true;
Uri resourceLocator = new Uri("/Crysome.Server;component/view/languagewindow.xaml", UriKind.Relative);
Application.LoadComponent(this, resourceLocator);
}
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "9.0.14.0")]
[EditorBrowsable(EditorBrowsableState.Never)]
void IComponentConnector.Connect(int connectionId, object target)
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Expected O, but got Unknown
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Expected O, but got Unknown
switch (connectionId)
{
case 1:
TitleBarControl = (TitleBar)target;
break;
case 2:
SelectLabel = (TextBlock)target;
break;
case 3:
LanguageComboBox = (ComboBox)target;
break;
case 4:
ContinueButton = (Button)target;
((ButtonBase)(object)ContinueButton).Click += ContinueButton_Click;
break;
default:
_contentLoaded = true;
break;
}
}
}