239 lines
7.3 KiB
C#
239 lines
7.3 KiB
C#
using System.ComponentModel;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
using CommunityToolkit.Mvvm.Messaging;
|
|
using Livia.Models;
|
|
using Livia.Models.Data;
|
|
using Livia.Properties;
|
|
using Livia.Utility;
|
|
using Livia.Utility.DependencyInjection;
|
|
using Livia.ViewModels;
|
|
using Livia.Views.Utility;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Logging;
|
|
using Ookii.Dialogs.Wpf;
|
|
|
|
namespace Livia.Views;
|
|
|
|
/// <summary>
|
|
/// Interaction logic for MainWindow.xaml
|
|
/// </summary>
|
|
public partial class MainWindow:IRecipient<DataLoadedMessage>
|
|
{
|
|
private readonly ILogger _logger;
|
|
private readonly IIdleTimer _idleTimer;
|
|
private readonly MainWindowViewModel _viewModel;
|
|
private readonly DebounceHelper _updateServerJobListBounceHelper;
|
|
|
|
public MainWindow(ILogger logger, IIdleTimer idleTimer, IWarningSystem warningSystem)
|
|
{
|
|
_logger = logger;
|
|
_idleTimer = idleTimer;
|
|
logger.LogInformation("MainWindow Starting");
|
|
|
|
_viewModel = ActivatorUtilities.GetServiceOrCreateInstance<MainWindowViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
InitializeComponent();
|
|
DataContext = _viewModel;
|
|
|
|
if (ViewSettings.Default.MainWindowIsMaximized)
|
|
{
|
|
MaterialTitleBar.WindowIsMaximized = true;
|
|
}
|
|
|
|
warningSystem.SetSnackbar(MainWindowSnackbar);
|
|
_updateServerJobListBounceHelper = new DebounceHelper(TimeSpan.FromSeconds(0.5));
|
|
WeakReferenceMessenger.Default.RegisterAll(this);
|
|
FocusVisualStyleClear.Init();
|
|
}
|
|
|
|
public void AddMainControl(UIElement dataContext)
|
|
{
|
|
ControlHost.Children.Add(dataContext);
|
|
}
|
|
|
|
private void TitleBarMouseLeftButtonDown(object sender, MouseEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
DragMove();
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
_logger.LogError(exception, "Error dragging window, sender = {sender}, event = {event}", sender, e);
|
|
}
|
|
}
|
|
|
|
private void WindowActivated(object sender, EventArgs e)
|
|
{
|
|
_logger.LogInformation("WindowActivated");
|
|
LoginControl.UpdateCapsLockOnState();
|
|
}
|
|
|
|
private void WindowPreviewKeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
LoginControl.UpdateCapsLockOnState();
|
|
}
|
|
|
|
private void WindowClosing(object sender, CancelEventArgs e)
|
|
{
|
|
if (!_viewModel.ConfirmClosing())
|
|
{
|
|
e.Cancel = true;
|
|
return;
|
|
}
|
|
|
|
WeakReferenceMessenger.Default.Send(new ShutdownMessage());
|
|
_logger.LogInformation("Window Closing");
|
|
ViewSettings.Default.Save();
|
|
_viewModel.Dispose();
|
|
Application.Current.Shutdown();
|
|
}
|
|
|
|
private void WindowSizeChanged(object sender, SizeChangedEventArgs e)
|
|
{
|
|
//ignores start up
|
|
if (e.PreviousSize == new Size())
|
|
{
|
|
return;
|
|
}
|
|
|
|
_logger.LogInformation("Window Size Changed");
|
|
MaterialTitleBar.TryManuallyExitMaximizedMode(this, e);
|
|
}
|
|
|
|
private void MainWindowOnPreviewMouseDown(object sender, MouseButtonEventArgs e)
|
|
{
|
|
_idleTimer.ResetTimer();
|
|
//_logger.LogInformation("MainWindowOnPreviewMouseDown");
|
|
}
|
|
|
|
private void MainWindowOnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
|
|
{
|
|
_idleTimer.ResetTimer();
|
|
//_logger.LogInformation("MainWindowOnPreviewMouseWheel");
|
|
}
|
|
|
|
private void MainWindowOnPreviewMouseMove(object sender, MouseEventArgs e)
|
|
{
|
|
_idleTimer.ResetTimer();
|
|
//_logger.LogInformation("MainWindowOnPreviewMouseMove");
|
|
}
|
|
|
|
private async void ProcessDataButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
VistaFolderBrowserDialog dialog = new();
|
|
|
|
if (!(dialog.ShowDialog() ?? false))
|
|
return;
|
|
|
|
ProgressBarDialog progressBarDialog = new(true, "Importing");
|
|
progressBarDialog.Show();
|
|
await progressBarDialog.SetTask(_viewModel.ProcessData(dialog.SelectedPath, progressBarDialog.CancellationToken)).ConfigureAwait(false);
|
|
}
|
|
|
|
public void ProcessDataCommandLine(Dictionary<string, string> argsDict)
|
|
{
|
|
ProgressBarDialog progressBarDialog = new(true);
|
|
progressBarDialog.Show();
|
|
progressBarDialog.SetTask(_viewModel.ProcessDataCommandLine(argsDict, progressBarDialog.CancellationToken)).ConfigureAwait(false);
|
|
}
|
|
|
|
private void ExportReportButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
string? key = _viewModel.DataBlockLoader.CurrentDisplayingDataBlock?.Key;
|
|
if (key == null)
|
|
return;
|
|
|
|
SelectReportModuleDialog selectReportModuleDialog = new();
|
|
selectReportModuleDialog.Show();
|
|
|
|
//auto click
|
|
if (!Settings.Default.ShowSelectReportModuleDialog)
|
|
selectReportModuleDialog.ConfirmButtonClick(this, new RoutedEventArgs());
|
|
}
|
|
|
|
private void CheckReportsButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
string? key = _viewModel.DataBlockLoader.CurrentDisplayingDataBlock?.Key;
|
|
if (key == null)
|
|
return;
|
|
|
|
CheckReportDialog checkReportDialog = new(key);
|
|
checkReportDialog.ShowDialog();
|
|
}
|
|
|
|
private void LogoutButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
if (_viewModel.ConfirmLogout())
|
|
{
|
|
WeakReferenceMessenger.Default.Send(new LogoutMessage());
|
|
}
|
|
}
|
|
private void SettingsButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
if (ViewUtility.WindowExists(out SettingsWindow? window))
|
|
{
|
|
if (window == null)
|
|
return;
|
|
window.WindowState = WindowState.Normal;
|
|
window.Activate();
|
|
}
|
|
else
|
|
{
|
|
SettingsWindow newWindow = new();
|
|
newWindow.Show();
|
|
}
|
|
}
|
|
|
|
private void AnonymousModeButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
_viewModel.PatientInfoManager.AnonymousMode = !_viewModel.PatientInfoManager.AnonymousMode;
|
|
}
|
|
|
|
private async void ShowRightDrawerButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!_updateServerJobListBounceHelper.TryFire())
|
|
return;
|
|
|
|
DrawerHost.IsLeftDrawerOpen = false;
|
|
DrawerHost.IsRightDrawerOpen = true;
|
|
await _viewModel.JobListTableViewModel.UpdateServerJobList();
|
|
}
|
|
|
|
private async void ShowLeftDrawerButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
DrawerHost.IsLeftDrawerOpen = true;
|
|
DrawerHost.IsRightDrawerOpen = false;
|
|
await _viewModel.JobListTableViewModel.UpdateServerJobList();
|
|
}
|
|
|
|
private void HideRightDrawerButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
DrawerHost.IsRightDrawerOpen = false;
|
|
}
|
|
|
|
private void HideLeftDrawerButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
DrawerHost.IsLeftDrawerOpen = false;
|
|
}
|
|
|
|
private async void ImportDataButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
VistaFolderBrowserDialog dialog = new();
|
|
|
|
if (!(dialog.ShowDialog() ?? false))
|
|
return;
|
|
|
|
DataBlock data = new(dialog.SelectedPath)
|
|
{
|
|
Key = "0000",
|
|
ResultPath = dialog.SelectedPath
|
|
};
|
|
await _viewModel.DataBlockLoader.LoadData(data);
|
|
}
|
|
public void Receive(DataLoadedMessage message)
|
|
{
|
|
DrawerHost.IsRightDrawerOpen = false;
|
|
DrawerHost.IsLeftDrawerOpen = false;
|
|
}
|
|
} |