using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Text; using System.Windows; using System.Windows.Input; using System.Windows.Threading; using SPC.Kiosk.Base; using SPC.Kiosk.Common; namespace SPC.Kiosk.Popup.ViewModel { /// /// Popup View Model Base /// public class PopupViewModelBase : ViewModelBase { #region [ Members ] public ICommand ToExecuteNothing { get; protected set; } = null; private SupportLanguageType showLanguageType; /// /// 화면 언어 /// public SupportLanguageType ShowLanguageType { get { return showLanguageType; } set { showLanguageType = value; PropertyChange("ShowLanguageType"); } } /// /// 팝업 응답 정보 /// public M_PopupReturn ReturnValue { get; set; } private bool canWindowClose = false; /// /// 화면 닫기 (true 이면 바로 닫음) /// public bool CanWindowClose { get { return canWindowClose; } set { canWindowClose = value; PropertyChange("CanWindowClose"); } } private bool timerEnabled = false; /// /// 대기시간 타이머 동작 유무 /// public bool TimerEnabled { get { return timerEnabled; } set { timerEnabled = value; PropertyChange("TimerEnabled"); } } private bool isTimeout = false; /// /// 대기시간 초과 유무 (타이머 동작 중지후 IsTimeOut = True 발생) /// public bool IsTimeout { get { return isTimeout; } set { isTimeout = value; PropertyChange("IsTimeout"); } } private double timeOutSeconds = 30d; /// /// 대기시간 (초) /// public double TimeOutSeconds { get { return timeOutSeconds; } set { timeOutSeconds = value; PropertyChange("TimeOutSeconds"); } } private bool isTimeoutPopup = false; public bool IsTimeoutPopup { get { return isTimeoutPopup; } set { isTimeoutPopup = value; PropertyChange("IsTimeoutPopup"); } } /// /// 최종 엑세스 시간 PropertyChanged 가 발생 할때 마다 업데이트됨 /// public DateTime LastAccessTime { get; set; } = DateTime.Now; private DispatcherTimer ShowTimer; #endregion #region [ Ctor ] /// /// 생성자 /// public PopupViewModelBase() { ToExecuteNothing = new Command(ToExecuteNothingHandler); this.PropertyChanged += PopupViewModelBase_PropertyChanged; TimeOutSeconds = CommonValue.TimeOutSeconds; ShowLanguageType = CommonValue.CommonLanguageType; TimerEnabled = true; } /// /// Dispose /// public void Dispose() { this.PropertyChanged -= PopupViewModelBase_PropertyChanged; if (this.ShowTimer != null) { ShowTimer.Stop(); ShowTimer.Tick -= ShowTimer_Tick; ShowTimer = null; } } #endregion Ctor #region [ Event Handlers ] private void ToExecuteNothingHandler(object obj) { } private void ShowTimer_Tick(object sender, EventArgs e) { if ((DateTime.Now - LastAccessTime) > TimeSpan.FromSeconds(TimeOutSeconds)) { TimerEnabled = false; if (IsTimeoutPopup) { #if !TESTMODE var popupReturn = PopupMessageBox.ShowMessageBox(ShowLanguageType , Languages.GetMessages("LBL0067") , Languages.GetMessages("LBL0021") , MessageBoxButton.YesNo , OpenCloseAnimationType.FullSizeUp , OpenCloseAnimationType.FullSizeDown , 0.5, 0.2, 10); if (popupReturn.Equals(MessageBoxResult.Yes)) { LastAccessTime = DateTime.Now; TimerEnabled = true; } else { IsTimeout = true; } #endif } else { IsTimeout = true; } } } private void PopupViewModelBase_PropertyChanged(object sender, PropertyChangedEventArgs e) { LastAccessTime = DateTime.Now; switch (e.PropertyName) { case "TimerEnabled": if (TimerEnabled) { if (this.ShowTimer != null) { this.ShowTimer.Start(); } else { this.ShowTimer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1), }; ShowTimer.Tick += ShowTimer_Tick; ShowTimer.Start(); } } else { if (this.ShowTimer != null) { this.ShowTimer.Stop(); } } break; case "CanWindowClose": if (this.ShowTimer != null) { this.ShowTimer.Stop(); this.ShowTimer.Tick -= ShowTimer_Tick; this.ShowTimer = null; } break; } } #endregion Event Handlers } }