aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml.cs
blob: f38c8f8d681ddf82227e7423a1c5d861b2e82825 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
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.DAL.Observables;
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 MainView()
        {
            InitializeComponent();
            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 ApplicationVersion || e.DataContext is ApplicationOsVersion || e.DataContext is ApplicationDisplayPanelVersion)
            {
                SetHighlightRegion(gridTablet);
            }
            else if (e.DataContext is EmbeddedFirmwareVersion || e.DataContext is EmbeddedSoftwareVersion)
            {
                SetHighlightRegion(gridEmbedded);
            }
            else if (e.DataContext is Dispenser || e.DataContext is Cartridge || e.DataContext is LiquidType || e.DataContext is MidTankType)
            {
                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 Dispenser)
            {
                _vm.DropDispenser(e.Draggable.DataContext as Dispenser, 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 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 ApplicationVersion)
            {
                _vm.DropApplicationVersion(e.Draggable.DataContext as ApplicationVersion);
            }
            else if (e.Draggable.DataContext is ApplicationOsVersion)
            {
                _vm.DropApplicationOsVersion(e.Draggable.DataContext as ApplicationOsVersion);
            }
        }

        private void OnEmbeddedDrop(object sender, DropEventArgs e)
        {
            if (e.Draggable.DataContext is EmbeddedFirmwareVersion)
            {
                _vm.DropEmbeddedFirmware(e.Draggable.DataContext as EmbeddedFirmwareVersion);
            }
            else if (e.Draggable.DataContext is EmbeddedSoftwareVersion)
            {
                _vm.DropEmbeddedSoftware(e.Draggable.DataContext as EmbeddedSoftwareVersion);
            }
        }

        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);
            }
        }
    }
}