using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
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.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Tango.BL.Entities;
using Tango.DragAndDrop;
using Tango.MachineStudio.MachineDesigner.ViewModels;
namespace Tango.MachineStudio.MachineDesigner.Views
{
/// <summary>
/// Interaction logic for MainView.xaml
/// </summary>
public partial class MainView : UserControl
{
private MainViewVM _vm;
private Rectangle _highlightRect;
private bool _highlightShown;
private DoubleAnimation _highlightAnimation;
public ColumnDefinition PanelColumnDefinition { get; set; }
public MainView()
{
InitializeComponent();
PanelColumnDefinition = panelColumnDefinition;
DraggingSurface = dragSufrace;
this.Loaded += (x, y) =>
{
_vm = DataContext as MainViewVM;
};
DragAndDropService.DragStarted += DragAndDropService_DragStarted;
DragAndDropService.DragEnded += DragAndDropService_DragEnded;
_highlightRect = new Rectangle();
_highlightRect.IsHitTestVisible = false;
_highlightRect.Stroke = Application.Current.Resources["AccentColorBrush"] as Brush;
_highlightRect.StrokeThickness = 2;
_highlightRect.StrokeDashArray = new DoubleCollection(new double[] { 3, 3, 3, 3 });
}
private void DragAndDropService_DragEnded(object sender, FrameworkElement e)
{
canvas.Children.Remove(_highlightRect);
_highlightShown = false;
_highlightRect.BeginAnimation(Rectangle.OpacityProperty, null);
}
private void DragAndDropService_DragStarted(object sender, FrameworkElement e)
{
if (e.DataContext is HardwareVersion)
{
SetHighlightRegion(hardwareGrid);
}
else if (e.DataContext is ApplicationOsVersion || e.DataContext is ApplicationDisplayPanelVersion || e.DataContext is ApplicationFirmwareVersion)
{
SetHighlightRegion(gridTablet);
}
else if (e.DataContext is EmbeddedFirmwareVersion)
{
SetHighlightRegion(gridEmbedded);
}
else if (e.DataContext is DispenserType || e.DataContext is CartridgeType || e.DataContext is LiquidType || e.DataContext is MidTankType || e.DataContext is IdsPackFormula)
{
SetHighlightRegion(gridIds);
}
}
public DraggingSurface DraggingSurface
{
get { return (DraggingSurface)GetValue(DraggingSurfaceProperty); }
set { SetValue(DraggingSurfaceProperty, value); }
}
public static readonly DependencyProperty DraggingSurfaceProperty =
DependencyProperty.Register("DraggingSurface", typeof(DraggingSurface), typeof(MainView), new PropertyMetadata(null));
private void OnDropOnIdsPack(object sender, DropEventArgs e)
{
if (e.Draggable.DataContext is DispenserType)
{
_vm.DropDispenserType(e.Draggable.DataContext as DispenserType, e.Droppable.DataContext as IdsPack);
}
else if (e.Draggable.DataContext is LiquidType)
{
_vm.DropLiquidType(e.Draggable.DataContext as LiquidType, e.Droppable.DataContext as IdsPack);
}
else if (e.Draggable.DataContext is CartridgeType)
{
_vm.DropCartridgeType(e.Draggable.DataContext as CartridgeType, e.Droppable.DataContext as IdsPack);
}
else if (e.Draggable.DataContext is MidTankType)
{
_vm.DropMidTankType(e.Draggable.DataContext as MidTankType, e.Droppable.DataContext as IdsPack);
}
else if (e.Draggable.DataContext is IdsPackFormula)
{
_vm.DropIdsFormula(e.Draggable.DataContext as IdsPackFormula, e.Droppable.DataContext as IdsPack);
}
else if (e.Draggable.DataContext is IdsPack)
{
_vm.DropIdsPack(e.Draggable.DataContext as IdsPack, e.Droppable.DataContext as IdsPack);
}
}
private void OnTabletDrop(object sender, DropEventArgs e)
{
if (e.Draggable.DataContext is ApplicationDisplayPanelVersion)
{
_vm.DropTouchPanel(e.Draggable.DataContext as ApplicationDisplayPanelVersion);
}
else if (e.Draggable.DataContext is ApplicationOsVersion)
{
_vm.DropApplicationOsVersion(e.Draggable.DataContext as ApplicationOsVersion);
}
else if (e.Draggable.DataContext is ApplicationFirmwareVersion)
{
_vm.DropApplicationFirmwareVersion(e.Draggable.DataContext as ApplicationFirmwareVersion);
}
}
private void OnEmbeddedDrop(object sender, DropEventArgs e)
{
if (e.Draggable.DataContext is EmbeddedFirmwareVersion)
{
_vm.DropEmbeddedFirmware(e.Draggable.DataContext as EmbeddedFirmwareVersion);
}
}
private void MachineDrop(object sender, DropEventArgs e)
{
if (e.Draggable.DataContext is HardwareVersion)
{
_vm.DropHardwareVersion(e.Draggable.DataContext as HardwareVersion);
}
}
private void SetHighlightRegion(FrameworkElement element)
{
if (!_highlightShown)
{
_highlightRect.Width = element.Width;
_highlightRect.Height = element.Height;
Canvas.SetLeft(_highlightRect, Canvas.GetLeft(element));
Canvas.SetTop(_highlightRect, Canvas.GetTop(element));
canvas.Children.Add(_highlightRect);
_highlightShown = true;
_highlightAnimation = new DoubleAnimation();
_highlightAnimation.From = 0;
_highlightAnimation.To = 1;
_highlightAnimation.Duration = TimeSpan.FromSeconds(0.2);
_highlightAnimation.AutoReverse = true;
_highlightAnimation.RepeatBehavior = RepeatBehavior.Forever;
_highlightRect.BeginAnimation(Rectangle.OpacityProperty, _highlightAnimation);
}
}
}
}