166 lines
3.7 KiB
C#
166 lines
3.7 KiB
C#
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;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|