using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; 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 SPC.Kiosk.Base; using SPC.Kiosk.Common; using SPC.Kiosk.Popup.Model; namespace SPC.Kiosk.Popup { /// /// NumericPad.xaml에 대한 상호 작용 논리 /// public partial class PBNumericPad : UserControl { #region [ Members ] /// /// Button Images /// public static readonly DependencyProperty ButtonImagesProperty = DependencyProperty.Register(nameof(ButtonImages), typeof(List), typeof(PBNumericPad), new PropertyMetadata(null, new PropertyChangedCallback(OnButtonImagesPropertyChanged))); /// /// Input Text /// public static readonly DependencyProperty InputTextProperty = DependencyProperty.Register(nameof(InputText), typeof(string), typeof(PBNumericPad), new PropertyMetadata(string.Empty, new PropertyChangedCallback(OnInputTextPropertyChanged))); /// /// Show Text With Mask /// public static readonly DependencyProperty ShowTextProperty = DependencyProperty.Register(nameof(ShowText), typeof(string), typeof(PBNumericPad), new PropertyMetadata(string.Empty)); /// /// Text Area Visible /// public static readonly DependencyProperty TextVisibleProperty = DependencyProperty.Register(nameof(TextVisibility), typeof(Visibility), typeof(PBNumericPad), new PropertyMetadata(Visibility.Visible)); /// /// Guid Text (Mutil Language) /// public static readonly DependencyProperty GuidTextProperty = DependencyProperty.Register(nameof(GuidText), typeof(List), typeof(PBNumericPad), new PropertyMetadata(default(List), new PropertyChangedCallback(OnGuidTextPropertyChanged))); /// /// Max input Length /// public static readonly DependencyProperty MaxLengthPropery = DependencyProperty.Register(nameof(MaxLength), typeof(int), typeof(PBNumericPad), new PropertyMetadata(0)); /// /// Is Formated Show Text /// public static readonly DependencyProperty FormatedPropery = DependencyProperty.Register(nameof(Formated), typeof(bool), typeof(PBNumericPad), new PropertyMetadata(false)); /// /// CurrencyFormat Text /// public static readonly DependencyProperty CurrencyFormatPropery = DependencyProperty.Register(nameof(CurrencyFormat), typeof(string), typeof(PBNumericPad), new PropertyMetadata("#,##0")); /// /// Display Language Type /// public static readonly DependencyProperty DisplayLanguagePropery = DependencyProperty.Register(nameof(DisplayLanguage), typeof(SupportLanguageType), typeof(PBNumericPad), new PropertyMetadata(SupportLanguageType.ko, new PropertyChangedCallback(OnDisplayLanguageProperyChanged))); /// /// Is PassWord /// public static readonly DependencyProperty IsPassWordPropery = DependencyProperty.Register(nameof(IsPassWord), typeof(bool), typeof(PBNumericPad), new PropertyMetadata(false)); /// /// CurrencyFormat Text /// public string CurrencyFormat { get { return (string)GetValue(CurrencyFormatPropery); } set { SetValue(CurrencyFormatPropery, value); } } /// /// Is PassWord /// public bool IsPassWord { get { return (bool)GetValue(IsPassWordPropery); } set { SetValue(IsPassWordPropery, value); } } /// /// Is Formated Show Text /// public List ButtonImages { get { return (List)GetValue(ButtonImagesProperty); } set { SetValue(ButtonImagesProperty, value); } } /// /// Is Formated Show Text /// public bool Formated { get { return (bool)GetValue(FormatedPropery); } set { SetValue(FormatedPropery, value); } } /// /// Max input Length /// public int MaxLength { get { return (int)GetValue(MaxLengthPropery); } set { SetValue(MaxLengthPropery, value); } } /// /// Text Area Visibility /// public Visibility TextVisibility { get { return (Visibility)GetValue(TextVisibleProperty); } set { SetValue(TextVisibleProperty, value); } } /// /// Input Text (Real Data) /// public string InputText { get { return (string)GetValue(InputTextProperty); } set { SetValue(InputTextProperty, value); } } /// /// Show Text With Mask /// public string ShowText { get { return (string)GetValue(ShowTextProperty); } set { SetValue(ShowTextProperty, value); } } /// /// Guid Text (Multi Language) /// public List GuidText { get { return (List)GetValue(GuidTextProperty); } set { SetValue(GuidTextProperty, value); } } /// /// Display Language Type /// public SupportLanguageType DisplayLanguage { get { return (SupportLanguageType)GetValue(DisplayLanguagePropery); } set { SetValue(DisplayLanguagePropery, value); } } #endregion Members #region [ Ctor/Etc ] /// /// Ctor /// public PBNumericPad() { try { InitializeComponent(); foreach (var aElement in this.BaseGrid.Children) { if (aElement is AnimationButton aNumberButton) { aNumberButton.MouseClicked += NumberButton_MouseClicked; } } SetImage(); } catch { } } #endregion Ctor #region [ Methods ] private void SetShowText(string _showText) { string displayText = _showText; if (!string.IsNullOrEmpty(displayText)) { if (displayText.Length < 10) { } else if (displayText.Length.Equals(10) && Formated) { var displayChars = displayText.ToCharArray(); displayText = string.Empty; for (int i = 0; i < displayChars.Length; i++) { if (i > 2 && i < 6) { displayText += '*'; } else { displayText += displayChars[i]; } } } else if (displayText.Length.Equals(11) && Formated) { var displayChars = displayText.ToCharArray(); displayText = string.Empty; for (int i = 0; i < displayChars.Length; i++) { if (i > 2 && i < 7) { displayText += '*'; } else { displayText += displayChars[i]; } } } else if (displayText.Length < 17 && Formated) { var displayChars = displayText.ToCharArray(); displayText = string.Empty; for (int i = 0; i < displayChars.Length; i++) { if (i > 5 && i < 14) { displayText += '*'; } else { displayText += displayChars[i]; } } } else if (Formated) { var displayChars = displayText.ToCharArray(); displayText = string.Empty; for (int i = 0; i < displayChars.Length; i++) { if (i > 3 && i < 16) { displayText += '*'; } else { displayText += displayChars[i]; } } } string formatedString = string.Empty; if (IsPassWord) { formatedString = string.Empty.PadRight(displayText.Length, '*'); } else { if (Formated) { if (displayText.Length.Equals(10)) { formatedString = string.Format("{0}-{1}-{2}" , displayText.Substring(0, 3) , displayText.Substring(3, 3) , displayText.Substring(6, 4)); } else if (displayText.Length.Equals(11)) { formatedString = string.Format("{0}-{1}-{2}" , displayText.Substring(0, 3) , displayText.Substring(3, 4) , displayText.Substring(7, 4)); } else if (displayText.Length.Equals(16)) { formatedString = string.Format("{0}-{1}-{2}-{3}" , displayText.Substring(0, 4) , displayText.Substring(4, 4) , displayText.Substring(8, 4) , displayText.Substring(12, 4)); } else if (displayText.Length.Equals(20)) { formatedString = string.Format("{0}-{1}-{2}-{3}-{4}" , displayText.Substring(0, 4) , displayText.Substring(4, 4) , displayText.Substring(8, 4) , displayText.Substring(12, 4) , displayText.Substring(16, 4)); } } else { if (string.IsNullOrEmpty(CurrencyFormat)) { formatedString = displayText; } else { formatedString = (double.Parse(displayText)).ToString(CurrencyFormat); } } } if (!string.IsNullOrEmpty(formatedString)) displayText = formatedString; this.ShowText = displayText; } else { this.ShowText = this.GuidText.GetLanguageData(this.DisplayLanguage); } } private double SetEtcTextFontSize(AnimationButton _target, string _text) { double result = 20d; try { var textLength = string.IsNullOrEmpty(_text.Trim()) ? 1 : _text.Trim().Length; var fontSize = 0d; switch (textLength) { case 1: case 2: case 3: case 4: fontSize = 0.35; break; default: fontSize = 0.3; break; } result = _target.ActualHeight > 0 ? _target.ActualHeight * fontSize : 20d; } catch { result = 20d; } return result; } private void SetImage(object _buttonImages = null) { var getButtonImages = new List(); if (_buttonImages is List) { getButtonImages = _buttonImages as List; } else { getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button0, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_0.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button1, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_1.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button2, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_2.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button3, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_3.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button4, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_4.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button5, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_5.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button6, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_6.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button7, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_7.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button8, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_8.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.Button9, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_9.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.ButtonCancel, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_c.png", CommonValue.PBdesignImagesPath) } ); getButtonImages.Add ( new M_NumberPadImages { ButtonType = NumberPadButton.ButtonBack, ButtonImage = ResourceManager.GetNximagePathAdd("btn_number_d.png", CommonValue.PBdesignImagesPath) } ); } foreach (var aElement in this.BaseGrid.Children) { if (aElement is AnimationButton aNumberButton) { var getType = NumberPadButton.ButtonNone; var ButtonTag = string.Empty; switch (aNumberButton.Name) { case nameof(Button0): getType = NumberPadButton.Button0; ButtonTag = "0"; break; case nameof(Button1): getType = NumberPadButton.Button1; ButtonTag = "1"; break; case nameof(Button2): getType = NumberPadButton.Button2; ButtonTag = "2"; break; case nameof(Button3): getType = NumberPadButton.Button3; ButtonTag = "3"; break; case nameof(Button4): getType = NumberPadButton.Button4; ButtonTag = "4"; break; case nameof(Button5): getType = NumberPadButton.Button5; ButtonTag = "5"; break; case nameof(Button6): getType = NumberPadButton.Button6; ButtonTag = "6"; break; case nameof(Button7): getType = NumberPadButton.Button7; ButtonTag = "7"; break; case nameof(Button8): getType = NumberPadButton.Button8; ButtonTag = "8"; break; case nameof(Button9): getType = NumberPadButton.Button9; ButtonTag = "9"; break; case nameof(ButtonCancel): getType = NumberPadButton.ButtonCancel; break; case nameof(ButtonBack): getType = NumberPadButton.ButtonBack; break; } aNumberButton.Tag = ButtonTag; var findButtonImage = getButtonImages.Find(r => r.ButtonType.Equals(getType)); aNumberButton.Width = this.Width / 3; aNumberButton.Height = this.Height / 4; if (findButtonImage is M_NumberPadImages) { aNumberButton.NormalBrush = findButtonImage.ButtonImage; } } } this.UpdateLayout(); } #endregion Methods #region [ Event Handlers ] private static void OnButtonImagesPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue != null) { var target = d as PBNumericPad; target.SetImage(e.NewValue); } } private static void OnGuidTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue != null) { var target = d as PBNumericPad; target.SetShowText(target.InputText); } } private static void OnDisplayLanguageProperyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue != null ) { var target = d as PBNumericPad; target.SetShowText(target.InputText); } } private static void OnInputTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var target = d as PBNumericPad; var inputText = (string)e.NewValue; target.SetShowText(inputText); } private void NumberButton_MouseClicked(object sender, RoutedEventArgs e) { if (sender is AnimationButton aNumberButton) { switch (aNumberButton.Name) { case nameof(ButtonCancel): this.InputText = string.Empty; break; case nameof(ButtonBack): if (this.InputText != null && this.InputText.Length > 0) { this.InputText = this.InputText.Remove(this.InputText.Length - 1, 1); } break; default: if (!this.MaxLength.Equals(0) ) { if (this.InputText.Length < this.MaxLength) { this.InputText = this.InputText + (string)aNumberButton.Tag; } } else { if (!(this.InputText.Length.Equals(0) && aNumberButton.Tag.Equals("0"))) { this.InputText = this.InputText + (string)aNumberButton.Tag; } } break; } } } #endregion Event Handlers } }