spc-kiosk-pb/Kiosk/PB/SPC.Kiosk.PB/DetailBasketItem.xaml.cs
2019-06-16 14:12:09 +09:00

252 lines
10 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
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.PB.Model;
using SPC.Kiosk.Popup;
using SPC.Kiosk.Popup.Model;
namespace SPC.Kiosk.PB
{
/// <summary>
/// DetailBasketItem.xaml에 대한 상호 작용 논리
/// </summary>
public partial class DetailBasketItem : UserControl
{
#region [ Members ]
/// <summary>
/// ItemData
/// </summary>
public static readonly DependencyProperty ItemDataProperty =
DependencyProperty.Register(nameof(ItemData), typeof(M_BasketItem), typeof(DetailBasketItem), new PropertyMetadata(null, new PropertyChangedCallback(OnItemDataPropertyChanged)));
/// <summary>
/// Display Language
/// </summary>
public static readonly DependencyProperty DisplayLanguagePropery =
DependencyProperty.Register(nameof(DisplayLanguage), typeof(SupportLanguageType), typeof(DetailBasketItem), new PropertyMetadata(SupportLanguageType.ko));//, new PropertyChangedCallback(OnDisplayLanguageProperyChanged)
/// <summary>
/// ItemData
/// </summary>
public M_BasketItem ItemData
{
get { return (M_BasketItem)GetValue(ItemDataProperty); }
set { SetValue(ItemDataProperty, value); }
}
/// <summary>
/// Display Language
/// </summary>
public SupportLanguageType DisplayLanguage
{
get { return (SupportLanguageType)GetValue(DisplayLanguagePropery); }
set { SetValue(DisplayLanguagePropery, value); }
}
#region [ RoutedEvent 'MouseClicked' ]
/// <summary>
/// MouseClicked Event
/// </summary>
public static readonly RoutedEvent MouseClickedEvent = EventManager.RegisterRoutedEvent(nameof(MouseClicked), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(DetailBasketItem));
/// <summary>
/// MouseClicked Routed Event Handler
/// </summary>
public event RoutedEventHandler MouseClicked
{
add { AddHandler(MouseClickedEvent, value); }
remove { RemoveHandler(MouseClickedEvent, value); }
}
#endregion RoutedEvent 'MouseClicked'
public string BackImage { get; set;}
public string DeleteImageData { get; set; }
public string DeleteDownImageData { get; set; }
public string OptionImageData { get; set; }
public List<M_Language> OptionButtonLabel { get; set; }
private PopupManager popupManager = PopupManager.GetInstance;
#endregion Members
#region [ Ctor & Etc ]
/// <summary>
/// Ctor
/// </summary>
public DetailBasketItem()
{
BackImage=ResourceManager.GetNximagePathAdd("basket_list_bg.png", CommonValue.PBdesignImagesPath);
DeleteImageData = ResourceManager.GetNximagePathAdd("btn_delete_2.png", CommonValue.PBdesignImagesPath);
DeleteDownImageData = ResourceManager.GetNximagePathAdd("btn_delete_2_p.png", CommonValue.PBdesignImagesPath);
OptionImageData = ResourceManager.GetNximagePathAdd("btn_option.png", CommonValue.PBdesignImagesPath);
OptionButtonLabel = new List<M_Language>
{
new M_Language
{
Type =SupportLanguageType.ko,
LanguageData = "옵션변경",
},
};
InitializeComponent();
}
#endregion Ctor & Etc
#region [ Methods ]
/// <summary>
/// Raise MouseClicked Event
/// </summary>
private void RaiseMouseClickedEvent(object _sender)
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(DetailBasketItem.MouseClickedEvent, _sender);
RaiseEvent(newEventArgs);
}
private void DeleteAnimationRun()
{
var deteleAnimation = Animations.GetShutterAnimation(this.MainGrid, ShutterAnchor.Bottom, this.MainGrid.ActualHeight, 0, 1, 0.5, 0.5);
deteleAnimation.Completed += DeteleAnimation_Completed;
deteleAnimation.Begin();
}
#endregion Methods
#region [ Event Handlers ]
private void DeteleAnimation_Completed(object sender, EventArgs e)
{
RaiseMouseClickedEvent(this.ItemData);
}
private static void OnItemDataPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
try
{
if (e.NewValue is M_BasketItem newValue)
{
var target = d as DetailBasketItem;
if (e.OldValue is M_BasketItem oldValue)
{
oldValue.PropertyChanged -= target.NewValue_PropertyChanged;
}
target.ItemPrice.Text = (newValue.Count * newValue.Price).ToString("#,##0");
target.ItemCountCombo.LeftButtonData = new M_AnimationButton
{
NormalBrush = newValue.MinusNormalBrush,
DownBrush = newValue.MinusDownBrush,
BrushStretch = Stretch.Fill,
DragEnable = false,
Width = 36,
Height = 36,
Switch = false,
AutoToggle = false,
TextVisible = Visibility.Collapsed,
ClickAnimationType = ButtonAnimationType.None,
CircleBackBrush = "Transparent",
CircleTextBruch = "Transparent",
CircleText = string.Empty,
};
target.ItemCountCombo.RightButtonData = new M_AnimationButton
{
NormalBrush = newValue.PlusNormalBrush,
DownBrush = newValue.PlusDownBrush,
BrushStretch = Stretch.Fill,
DragEnable = false,
Width = 36,
Height = 36,
Switch = false,
AutoToggle = false,
TextVisible = Visibility.Collapsed,
ClickAnimationType = ButtonAnimationType.None,
CircleBackBrush = "Transparent",
CircleTextBruch = "Transparent",
CircleText = string.Empty,
};
if (newValue.Option is List<M_ItemOptionGroup> options
&& options.Count > 0)
{
target.OptionChange.Visibility = Visibility.Visible;
}
else
{
target.OptionChange.Visibility = Visibility.Collapsed;
}
newValue.PropertyChanged += target.NewValue_PropertyChanged;
}
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(d, "OnItemDataPropertyChanged()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
}
private void NewValue_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (sender is M_BasketItem newValue)
{
switch (e.PropertyName)
{
case "Count":
case "Price":
this.ItemPrice.Text = (newValue.Count * newValue.Price).ToString("#,##0");
break;
}
}
}
private void DeleteItem_MouseClicked(object sender, RoutedEventArgs e)
{
//RaiseMouseClickedEvent(this.ItemData);
DeleteAnimationRun();
}
private void OptionChange_MouseClicked(object sender, RoutedEventArgs e)
{
try
{
if (this.ItemData.Option is List<M_ItemOptionGroup>
&& this.ItemData.Option.Count > 0)
{
var newOptions = new List<M_ItemOptionGroup>();
foreach (var aOptionGroup in this.ItemData.Option)
{
newOptions.Add(aOptionGroup.Clone());
}
var popupReturn = popupManager.OpenOptionSelect(this.ItemData.ItemName
, newOptions
, this.ItemData.ItemImage
, this.ItemData.Count
, this.ItemData.BasePrice - this.ItemData.CampaignPrice
, true);
if (popupReturn is M_PopupReturn)
{
if (popupReturn.OKAnswer)
{
if (popupReturn.PopupArgs is M_OptionReturn getOption)
{
this.ItemData.Option = getOption.Options;
this.ItemData.Count = getOption.ItemCount;
this.ItemData.Price = getOption.PriceWithOption;
this.ItemData.AllOptionLabel = CommonFunction.GetOptionLabel(getOption.Options);
}
}
}
}
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "OptionChange_MouseClicked()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
}
#endregion Event Handlers
}
}