2026-06-05 13:44:39 +09:00

165 lines
5.9 KiB
C#

using Aurora;
using Aurora.Api;
using Aurora.View;
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Input;
using System.Windows.Threading;
namespace WeldingCommon.Views.DoorInterlock
{
public class WinDoorInterlockViewModel : NotifyPropertyChangedBase
{
public ICommand CMD_VisibleChanged { get; }
public ICommand CMD_UserEdit { get; }
public ICommand CMD_CheckPassword { get; }
public ICommand CMD_Exit { get; }
private string _strPhoneNumber = "000-0000-0000";
private string _strPassword = "****";
private bool _bEdit = true;
private string _CurrentTime;
private string _IdCurrentTime;
private bool _IsPasswordBtnEnabled = true;
public string PhoneNumber { get => _strPhoneNumber; set => SetProperty(ref _strPhoneNumber, value); }
public string Password { get => _strPassword; set => SetProperty(ref _strPassword, value); }
public bool IsEdit { get => _bEdit; set => SetProperty(ref _bEdit, value); }
public bool IsPasswordBtnEnabled { get => _IsPasswordBtnEnabled; set => SetProperty(ref _IsPasswordBtnEnabled, value); }
public string CurrentTime {
get { return _CurrentTime; }
set {
_CurrentTime = value;
SetProperty(ref _CurrentTime, value);
}
}
public string IdCurrentTime {
get { return _IdCurrentTime; }
set {
_IdCurrentTime = value;
SetProperty(ref _IdCurrentTime, value);
}
}
private readonly string _settingId;
private readonly IAuroraEnvironment _aurora;
private readonly ISettingEntry _settingManager;
private readonly DispatcherTimer _monitorTimer;
private bool _isViewActive;
private KeyboardHook keyboardHook;
public bool IsViewActive {
get { return _isViewActive; }
set {
if (_isViewActive != value) {
_isViewActive = value;
RaisePropertyChanged(nameof(IsViewActive));
if (_isViewActive) {
keyboardHook.HookKeyboard();
} else {
keyboardHook.UnhookKeyboard();
}
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public WinDoorInterlockViewModel(ISettingEntry settingMngr, string settingId)
{
_settingId = settingId;
_settingManager = settingMngr;
var setting = _settingManager[_settingId] as DoorInterlockSetting;
CMD_VisibleChanged = new DelegateCommand(VisibleChanged);
CMD_UserEdit = new Aurora.View.DelegateCommand(BtnUserEdit);
CMD_CheckPassword = new Aurora.View.DelegateCommand(BtnCheckPassword); //btnCheckPassword
CMD_Exit = new DelegateCommand(BtnExit);
_monitorTimer = new DispatcherTimer();
_monitorTimer.Tick += OnMonitoring;
_monitorTimer.Interval = TimeSpan.FromMilliseconds(300);
IsEdit = true;
_IsPasswordBtnEnabled = setting.PasswordButtonEnabled;
keyboardHook = new KeyboardHook();
}
private void OnMonitoring(object sender, EventArgs e)
{
try {
CurrentTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
} catch (Exception) {
//_Log.Error(ex);
}
}
private void VisibleChanged(object obj)
{
//현재 VisibleChanged가 Window 발생 시 브레이킹포인트에 들어오는지 확인이 안됨.. 타이머 스타트가 안되는듯함
bool visible = (bool)obj;
if (visible) {
_monitorTimer.Start();
} else {
_monitorTimer.Stop();
}
}
private void BtnUserEdit(object obj)
{
WinDoorInterlockEditViewModel viewModel = new WinDoorInterlockEditViewModel(_settingManager, _settingId);
WinDoorInterlockEdit window = new WinDoorInterlockEdit(viewModel);
window.WindowStartupLocation = WindowStartupLocation.CenterOwner;
window.ShowDialog();
if (window.DialogResult.HasValue && window.DialogResult.Value) {
var setting = _settingManager[_settingId] as DoorInterlockSetting;
PhoneNumber = setting.PhoneNumber;
IsEdit = false;
}
}
private void BtnCheckPassword(object obj)
{
WinDoorInterlockPasswordViewModel viewModel = new WinDoorInterlockPasswordViewModel(_settingManager, _settingId);
WinDoorInterlockPassword window = new WinDoorInterlockPassword(viewModel);
window.WindowStartupLocation = WindowStartupLocation.CenterOwner;
window.ShowDialog();
if (window.DialogResult.HasValue && window.DialogResult.Value) {
IsEdit = true;
DoorInterlockPopup.GetInstance().PopupMaintClose();
// 인터락 임의해제면 도어오픈이라도 다시 띄우지 않음
if (!(_settingManager[_settingId] as DoorInterlockSetting).UseManualUnlock) {
DoorInterlockSetting SettingItem = _settingManager[_settingId] as DoorInterlockSetting;
SettingItem.DoorInterlockPopUpOff = false;
_settingManager.Save(_settingId, SettingItem, string.Empty);
}
}
}
private void BtnExit(object obj)
{
DoorInterlockPopup.GetInstance().PopupMaintClose();
}
}
}