using Avalonia.Input; using Avalonia.Interactivity; using Footwear_Test_methodsfor_wholeshoe_Slipresistanceperformance.ViewModels; using Footwear_Test_methodsfor_wholeshoe_Slipresistanceperformance.Services; using Footwear_Test_methodsfor_wholeshoe_Slipresistanceperformance.Models; using SukiUI.Controls; using System; using System.Threading.Tasks; namespace Footwear_Test_methodsfor_wholeshoe_Slipresistanceperformance.Views { public partial class MainWindow : SukiWindow { private readonly MachineLicenseService licenseService; private bool isLicenseWindowOpen; public MainWindow() : this(new MachineLicenseService()) { } public MainWindow(MachineLicenseService licenseService) { this.licenseService = licenseService; InitializeComponent(); Closed += OnClosed; AddHandler(KeyDownEvent, OnKeyDown, RoutingStrategies.Tunnel, handledEventsToo: true); DataContextChanged += OnDataContextChanged; } private void OnClosed(object? sender, EventArgs e) { if (DataContext is MainWindowViewModel viewModel) { viewModel.Dispose(); } } private void OnDataContextChanged(object? sender, EventArgs e) { if (DataContext is MainWindowViewModel viewModel) { viewModel.LicenseLockRequested -= OnLicenseLockRequested; viewModel.LicenseLockRequested += OnLicenseLockRequested; } } private void OnKeyDown(object? sender, KeyEventArgs e) { if (e.Key == Key.L && e.KeyModifiers.HasFlag(KeyModifiers.Control) && e.KeyModifiers.HasFlag(KeyModifiers.Alt) && e.KeyModifiers.HasFlag(KeyModifiers.Shift)) { e.Handled = true; _ = ShowAdministrationAsync(); } } private void OnLicenseLockRequested(string message) => _ = ShowLicenseLockAsync(message); private async Task ShowAdministrationAsync() { if (isLicenseWindowOpen) { return; } isLicenseWindowOpen = true; try { var window = new LicenseWindow(licenseService, LicenseWindowMode.Administration, "验证管理密码后可修改两次密码和时效。"); await window.ShowDialog(this); if (DataContext is MainWindowViewModel viewModel) { viewModel.RefreshLicenseState(); } } finally { isLicenseWindowOpen = false; } } private async Task ShowLicenseLockAsync(string message) { if (isLicenseWindowOpen) { return; } isLicenseWindowOpen = true; try { var check = licenseService.Check(); var mode = check.State == LicenseCheckState.Expired ? LicenseWindowMode.Unlock : LicenseWindowMode.Blocked; var window = new LicenseWindow(licenseService, mode, message); await window.ShowDialog(this); if (!window.Succeeded) { Close(); return; } if (DataContext is MainWindowViewModel viewModel) { viewModel.RefreshLicenseState(); } } finally { isLicenseWindowOpen = false; } } } }