using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Tango.MachineStudio.RML.ViewModels;
using Tango.BL.Entities;
using Tango.DragAndDrop;
namespace Tango.MachineStudio.RML.Views
{
///
/// Interaction logic for ProcessParametersView.xaml
///
public partial class ProcessParametersView : UserControl
{
private HashSet _processTablesViewers;
private MainViewVM _vm;
public DraggingSurface DraggingSurface
{
get { return (DraggingSurface)GetValue(DraggingSurfaceProperty); }
set { SetValue(DraggingSurfaceProperty, value); }
}
public static readonly DependencyProperty DraggingSurfaceProperty =
DependencyProperty.Register("DraggingSurface", typeof(DraggingSurface), typeof(ProcessParametersView), new PropertyMetadata(null));
public double WidthLilquidFactors
{
get { return (double )GetValue(WidthLilquidFactorsProperty); }
set { SetValue(WidthLilquidFactorsProperty, value); }
}
// Using a DependencyProperty as the backing store for WidthLilquidFactors. This enables animation, styling, binding, etc...
public static readonly DependencyProperty WidthLilquidFactorsProperty =
DependencyProperty.Register("WidthLilquidFactors", typeof(double ), typeof(ProcessParametersView), new PropertyMetadata(null));
public ProcessParametersView()
{
InitializeComponent();
_processTablesViewers = new HashSet();
DraggingSurface = draggingSurface;
Loaded += (_, __) => { _vm = DataContext as MainViewVM; };
}
private void OnProcessTableDropped(object sender, DropEventArgs e)
{
ProcessParametersTable dragged = e.Draggable.DataContext as ProcessParametersTable;
ProcessParametersTable dropped = e.Droppable.DataContext as ProcessParametersTable;
_vm.OnProcessParametersTableDropped(dragged, dropped);
}
private void ScrollViewer_Loaded(object sender, RoutedEventArgs e)
{
var viewer = sender as ScrollViewer;
if (!_processTablesViewers.Contains(viewer))
{
viewer.ScrollChanged += Viewer_ScrollChanged;
_processTablesViewers.Add(viewer);
}
}
private void Viewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
foreach (var viewer in _processTablesViewers.Where(x => x.IsLoaded && x.IsVisible && x != sender).ToList())
{
viewer.ScrollToVerticalOffset(e.VerticalOffset);
}
}
}
}