zcbot/windows-node/Zcbot.WindowsNode/Presentation/MainWindow.xaml.cs

84 lines
2.3 KiB
C#

using System.ComponentModel;
using System.Windows;
using System.Windows.Threading;
namespace Zcbot.WindowsNode;
public partial class MainWindow : Window
{
private readonly DispatcherTimer jobRefreshTimer;
internal MainWindow(MainWindowViewModel viewModel)
{
InitializeComponent();
ViewModel = viewModel;
DataContext = viewModel;
ViewModel.PropertyChanged += ViewModel_OnPropertyChanged;
jobRefreshTimer = new DispatcherTimer(DispatcherPriority.Background, Dispatcher)
{
Interval = TimeSpan.FromSeconds(1),
};
jobRefreshTimer.Tick += (_, _) =>
{
if (IsVisible && ViewModel.IsJobsPage)
{
ViewModel.JobPage.Refresh();
}
};
jobRefreshTimer.Start();
}
internal MainWindowViewModel ViewModel { get; }
internal bool AllowClose { get; set; }
protected override void OnClosing(CancelEventArgs eventArgs)
{
if (!AllowClose)
{
eventArgs.Cancel = true;
Hide();
}
base.OnClosing(eventArgs);
}
protected override void OnClosed(EventArgs eventArgs)
{
jobRefreshTimer.Stop();
ViewModel.PropertyChanged -= ViewModel_OnPropertyChanged;
base.OnClosed(eventArgs);
}
internal void ShowAndActivate()
{
if (!IsVisible) Show();
if (WindowState == WindowState.Minimized) WindowState = WindowState.Normal;
Activate();
}
private void EnrollmentCodeBox_OnPasswordChanged(
object sender,
System.Windows.RoutedEventArgs eventArgs)
{
if (!string.Equals(
ViewModel.EnrollmentCode,
EnrollmentCodeBox.Password,
StringComparison.Ordinal))
{
ViewModel.EnrollmentCode = EnrollmentCodeBox.Password;
}
}
private void ViewModel_OnPropertyChanged(object? sender, PropertyChangedEventArgs eventArgs)
{
if (eventArgs.PropertyName == nameof(MainWindowViewModel.EnrollmentCode)
&& !string.Equals(
EnrollmentCodeBox.Password,
ViewModel.EnrollmentCode,
StringComparison.Ordinal))
{
EnrollmentCodeBox.Password = ViewModel.EnrollmentCode;
}
}
}