You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

197 lines
7.4 KiB

using System.Windows;
using System.Windows.Input;
using GlobalHotKey;
using SparkClient.Model.Attributes;
using SparkClient.Model.Helper;
using SparkClient.Model.Services;
using SparkClient.ViewModel.Grading;
namespace SparkClient.ViewModel.BaseWindow;
public class BaseControlVM : BaseViewModel
{
string _windowTitle;
private Visibility _showFunctionButton;
private Visibility _showCloseButton;
private string _functionButtonIcon;
private Object _viewContent;
public string WindowTitle { get { return _windowTitle; } set { _windowTitle = value; OnPropertyChanged("WindowTitle"); } }
public Visibility ShowFunctionButton { get { return _showFunctionButton; } set { _showFunctionButton = value; OnPropertyChanged("ShowFunctionButton"); } }
public Visibility ShowCloseButton { get { return _showCloseButton; } set { _showCloseButton = value; OnPropertyChanged("ShowCloseButton"); } }
public string FunctionButtonIcon { get { return _functionButtonIcon; } set { _functionButtonIcon = value; OnPropertyChanged("FunctionButtonIcon"); } }
public Object ViewControl { get { return _viewContent; } set { _viewContent = value; OnPropertyChanged("ViewControl"); } }
public object Content { get; }
public ICommand CloseCommand { get; }
public ICommand EscCloseCommand { get; }
public ICommand NextCommand { get; }
/// <summary>
/// 构造:创建一个带有子页面的模板,并指定子窗口标题,并指定右侧按钮事件内容
/// </summary>
/// <param name="vm">子页面</param>
/// <param name="windowTitle">子窗口标题</param>
/// <param name="Function">事件内哦那个</param>
public BaseControlVM(BaseViewModel vm, string windowTitle, ICommand Function)
{
Content = vm;
WindowTitle = windowTitle;
CloseCommand = new RelayCommand(CloseVM);
EscCloseCommand = new RelayCommand(OnClose);
NextCommand = new RelayCommand(NextDiamond);
}
/// <summary>
/// 构造:创建一个带有子页面的模板,并指定子窗口标题
/// </summary>
/// <param name="vm">子页面</param>
/// <param name="windowTitle">子窗口标题</param>
public BaseControlVM(BaseViewModel vm, string windowTitle)
{
Content = vm;
WindowTitle = windowTitle;
ShowCloseButton = Visibility.Visible;
CloseCommand = new RelayCommand(CloseVM);
NextCommand = new RelayCommand(NextDiamond);
ShowFunctionButton = Visibility.Hidden;
if (vm.GetType().Equals(typeof(GradingResultVM)))
{
// Application.Current.Dispatcher.Invoke(() =>
// {
// try
// {
// if (_hkmQuickAnewDetect == null)
// {
// _hkmQuickAnewDetect = new HotKeyManager();
// _hkmQuickAnewDetect.Register(_hkQuickAnewDetect);
// _hkmQuickAnewDetect.KeyPressed += OnHotKeyPressed;
// }
//
// if (_hkmCloseResult == null)
// {
// _hkmCloseResult = new HotKeyManager();
// _hkmCloseResult.Register(_hkCloseResult);
// _hkmCloseResult.KeyPressed += OnHotKeyPressedClose;
// }
//
// }
// catch (Exception ex)
// {
// Logger.Info($"快捷键注册失败,静默处理:{ex.Message}");
// }
// });
ClientHotKeyManager.Instance.Register(ClientHotKeys.QuickAnewDetectHotKey, OnHotKeyPressed, this);
ClientHotKeyManager.Instance.Register(ClientHotKeys.CloseResultHotKey, OnHotKeyPressedClose, this);
}
else if(vm.GetType().Equals(typeof(GradingLoadingVM)))
{
ShowCloseButton = Visibility.Hidden;
}
}
/// <summary>
/// 构造:创建一个带有子页面的模板
/// </summary>
/// <param name="vm"></param>
public BaseControlVM(BaseViewModel vm)
{
Content = vm;
CloseCommand = new RelayCommand(CloseVM);
}
private void OnClose(object parameter)
{
if (parameter is KeyEventArgs keyEventArgs && keyEventArgs.Key == Key.Escape)
{
CloseVM(parameter);
}
}
private void OnHotKeyPressed(object sender, KeyPressedEventArgs e)
{
// if(Content.GetType().Equals(typeof(GradingResultVM)))
//
if (WindowManager.mainViewModel.Content is BaseControlVM baseVM)
{
if(baseVM.Content.GetType().Equals(typeof(GradingResultVM)))
NextDiamond("");
}
}
private void OnHotKeyPressedClose(object sender, KeyPressedEventArgs e)
{
// if(WindowTitle.StartsWith(MultilingualHelper.getString("DetectionResult")))
if (WindowManager.mainViewModel.Content is BaseControlVM baseVM)
{
if(baseVM.Content.GetType().Equals(typeof(GradingResultVM)))
CloseVM("");
}
}
public void NextDiamond(object parameter)
{
CloseVM(parameter);
DiamondSelectVM selectVm = new DiamondSelectVM();
ViewControl = selectVm;
WindowTitle = MultilingualHelper.getString("DiamondSelect");
selectVm.StartGrading(Common.LastParam);
}
/// <summary>
/// 关闭并退回至上一个页面
/// </summary>
/// <param name="parameter"></param>
[Log]
public async void CloseVM(object parameter)
{
if(Content is GradingResultVM resultVM)
{
WindowManager.PreviousVM();
WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
await SOCClientService.Service.OpenPump(false);
if(resultVM._isSaveCsv == false)
resultVM.SaveToCsv();
try
{
ClientHotKeyManager.Instance.Unregister(ClientHotKeys.QuickAnewDetectHotKey);
ClientHotKeyManager.Instance.Unregister(ClientHotKeys.CloseResultHotKey);
ClientHotKeyManager.Instance.Unregister(ClientHotKeys.SwitchPagesHotKey);
ClientHotKeyManager.Instance.Unregister(ClientHotKeys.ArrowAndHeartHotKey);
}
catch (Exception ex)
{
Logger.Info($"快捷键释放失败,静默处理:{ex.Message}");
}
//bool isSaved = (Content as GradingResultVM).isSaved;
// if (isSaved)
// {
//
// }
// else {
// // 部署改造:2
// WindowManager.PreviousVM();
// WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
// var _socClientService = new SOCClientService();
// _socClientService.OpenPump(false);
// // MessageBox message = new MessageBox();
// // MessageBoxResult result = message.ShowAsk(MultilingualHelper.getString("DiamodResultCloseConfirm"));
// // if (MessageBoxResult.OK.Equals(result))
// // {
// // WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
// // }
// }
}
else
{
WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
}
}
}