Files
GukSang.Jin 7158942669 更新123
2026-06-15 11:24:48 +08:00

118 lines
3.7 KiB
C#

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;
}
}
}
}