using System; using System.ComponentModel; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Forms; using System.Drawing; using SPC.Kiosk.Base; using SPC.Kiosk.Common; using System.Windows.Threading; using SPC.Kiosk.Popup.Model; using SPC.Kiosk.Popup.ViewModel; using System.Windows.Media.Animation; using System.Threading.Tasks; namespace SPC.Kiosk.Popup { /// /// CallEmployee.xaml에 대한 상호 작용 논리 /// public partial class PaymentProcess : Window { #region [ Members ] private int ScreenNo { get; set; } = 0; private VmPaymentProcess ViewModel { get; set; } private double GetPayments { get; set; } private LastPaymentsType GetPaymentType { get; set; } private bool FirstLoaded = true; #endregion Members #region [ Ctor ] /// /// Ctor /// public PaymentProcess(LastPaymentsType _getPaymentType, double _totalPayment ) { GetPaymentType = _getPaymentType; GetPayments = _totalPayment; InitializeComponent(); this.ContentRendered += PaymentProcess_ContentRendered; this.Loaded += PaymentProcess_Loaded; this.Left = Screen.AllScreens[ScreenNo].WorkingArea.Left; this.Top = Screen.AllScreens[ScreenNo].WorkingArea.Top; this.Width = Screen.AllScreens[ScreenNo].Bounds.Width; this.Height = Screen.AllScreens[ScreenNo].Bounds.Height; } #endregion Ctor #region [ Methods ] private void OpenWindow() { var OpenAnimations = Animations.GetOpenAnimation(this.FrameBase , OpenCloseAnimationType.FullSizeUp , this.FrameBase.Height , 0.5 , 0.2); if (OpenAnimations != null) { OpenAnimations.Completed += OpenAnimations_Completed; OpenAnimations.Begin(); } } private void ChangeWindow() { this.Dispatcher.Invoke((Action)(() => { try { var _target = this.FrameData; var targetAnimation = new Storyboard(); var centerX = _target.ActualWidth / 2; var centerY = _target.ActualHeight / 2; _target.RenderTransform = new ScaleTransform(1, 1, centerX, centerY); var flipXAni = new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(0.2))); Storyboard.SetTarget(flipXAni, _target); Storyboard.SetTargetProperty(flipXAni, new PropertyPath("RenderTransform.ScaleX")); targetAnimation.Children.Add(flipXAni); targetAnimation.Completed += TargetAnimation_Completed; targetAnimation.Begin(); } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "ChangeWindow()", "Fail", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } })); } private void TargetAnimation_Completed(object sender, EventArgs e) { if (this.ViewModel.PaymentWindow.Equals(PaymentWindowType.PaymentStart)) { this.BarCode.IsEnabled = true; this.BarCode.Focus(); } else { this.BarCode.IsEnabled = false; } } private void CloseWindow() { var CloseAnimation = Animations.GetCloseAnimation(this.FrameBase , OpenCloseAnimationType.FullSizeDown , this.FrameBase.Height , 0.5 , 0.2); if (CloseAnimation != null) { CloseAnimation.Completed += CloseAnimation_Completed; CloseAnimation.Begin(); } } #endregion Methods #region [ Event Handlers ] private void OpenAnimations_Completed(object sender, EventArgs e) { this.ViewModel.PaymentWindow = PaymentWindowType.PaymentStart; this.BarCode.IsEnabled = true; this.BarCode.Focus(); } private void CloseAnimation_Completed(object sender, EventArgs e) { this.ContentRendered -= PaymentProcess_ContentRendered; this.Loaded -= PaymentProcess_Loaded; this.BarCode.PreviewKeyDown -= BarCode_PreviewKeyDown; this.BarCode.LostFocus -= BarCode_LostFocus; this.ViewModel.Dispose(); this.Close(); } private void PaymentProcess_ContentRendered(object sender, EventArgs e) { this.FrameBase.Width = 1300; this.FrameBase.Height = 1010; OpenWindow(); } private void PaymentProcess_Loaded(object sender, RoutedEventArgs e) { if (this.DataContext is VmPaymentProcess viewModel) { this.ViewModel = viewModel; this.ViewModel.PropertyChanged += ViewModel_PropertyChanged; this.ViewModel.PaymentType = GetPaymentType; this.ViewModel.Payments = GetPayments; this.ViewModel.IsTimeoutPopup = false; } this.BarCode.PreviewKeyDown += BarCode_PreviewKeyDown; this.BarCode.LostFocus += BarCode_LostFocus; this.FrameBase.Width = 0; this.FrameBase.Height = 0; } private void BarCode_LostFocus(object sender, RoutedEventArgs e) { this.BarCode.Focus(); } private void BarCode_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) { if (sender is System.Windows.Controls.TextBox textBox && (e.Key.Equals(Key.Enter) || e.Key.Equals(Key.Return)) && !string.IsNullOrEmpty(textBox.Text)) { this.ViewModel.ReadBarCode = textBox.Text.Trim(); textBox.Text = string.Empty; } } private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case "CanWindowClose": if (this.ViewModel.CanWindowClose) { if (this.ViewModel.ImmediatelyClose) { CloseAnimation_Completed(null, null); } else { CloseWindow(); } } break; case "PaymentWindow": if (!FirstLoaded) { ChangeWindow(); } else { FirstLoaded = false; } break; } } #endregion Event Handlers } }