using MahApps.Metro.Controls; 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 System.Windows.Threading; using Tango.DragAndDrop; using Tango.BL.Entities; using Tango.MachineStudio.Developer.Converters; using Tango.MachineStudio.Developer.ViewModels; using Tango.BL; using Tango.Settings; using Tango.Core; using Tango.SharedUI.Editors; using static Tango.MachineStudio.Developer.DeveloperModuleSettings; using static Tango.SharedUI.Controls.NavigationControl; namespace Tango.MachineStudio.Developer.Views { /// /// Interaction logic for JobView.xaml /// public partial class JobView : UserControl, INavigationView { private MainViewVM _vm; private DispatcherTimer _jobBrushTimer; public DraggingSurface DraggingSurface { get { return (DraggingSurface)GetValue(DraggingSurfaceProperty); } set { SetValue(DraggingSurfaceProperty, value); } } public static readonly DependencyProperty DraggingSurfaceProperty = DependencyProperty.Register("DraggingSurface", typeof(DraggingSurface), typeof(JobView), new PropertyMetadata(null)); public JobView() { InitializeComponent(); DraggingSurface = draggingSurface; this.Loaded += (x, y) => { _vm = DataContext as MainViewVM; }; _jobBrushTimer = new DispatcherTimer(); _jobBrushTimer.Interval = TimeSpan.FromSeconds(1); _jobBrushTimer.Tick += _jobBrushTimer_Tick; _jobBrushTimer.Start(); } private void _jobBrushTimer_Tick(object sender, EventArgs e) { if (_vm != null && _vm.ActiveJob != null) { //List segments = new List(); //foreach (var s in _vm.ActiveJob.OrderedSegments) //{ // segments.Add(s); // if (_vm.ActiveJob.EnableInterSegment && _vm.ActiveJob.OrderedSegments.IndexOf(s) != _vm.ActiveJob.OrderedSegments.Count - 1) // { // segments.Add(new Segment() // { // Length = _vm.ActiveJob.InterSegmentLength, // BrushStops = new SynchronizedObservableCollection() // { // new BrushStop() // { // ColorSpace = new ColorSpace(), // Color = Colors.White, // } // }, // }); // } //} //jobBrushList.ItemsSource = segments; UpdateGradientBrushDisplay(); } } private void Offset_Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { UpdateGradientBrushDisplay(); } private void UpdateGradientBrushDisplay() { if (_vm != null && _vm.SelectedSegment != null) { SegmentToGradientStopsConverter converter = new SegmentToGradientStopsConverter(); GradientStopCollection stops = converter.Convert(_vm.SelectedSegment, null, null, null) as GradientStopCollection; gradientBrush.GradientStops = stops; } else { if (gradientBrush != null) { gradientBrush.GradientStops = new GradientStopCollection(); } } } private void OnBrushStopBorderDrop(object sender, DropEventArgs e) { if (e.Draggable.DataContext is BrushStop) { _vm.OnDropBrushStop(e.Draggable.DataContext as BrushStop, e.Droppable.DataContext as BrushStop); } } private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { UpdateGradientBrushDisplay(); } private void OnJobStartClick(object sender, RoutedEventArgs e) { } private void HiveColorPickerControl_SelectedColorChanged(object sender, Color color) { UpdateGradientBrushDisplay(); } private void Popup_MouseDown(object sender, MouseButtonEventArgs e) { e.Handled = true; } private void OnSegmentDrop(object sender, DropEventArgs e) { _vm.OnDropSegment(e.Draggable.DataContext as Segment, e.Droppable.DataContext as Segment); } private async void TextBox_GotFocus(object sender, RoutedEventArgs e) { await Task.Delay(200); TextBox txtBox = sender as TextBox; txtBox.SelectAll(); } private void TextBox_PreviewMouseUp(object sender, MouseButtonEventArgs e) { e.Handled = true; } private void OnProcessParameterDropped(object sender, DropEventArgs e) { ParameterItem draggedItem = e.Draggable.DataContext as ParameterItem; ParameterItem droppedItem = e.Droppable.DataContext as ParameterItem; if (draggedItem != null && droppedItem != null && draggedItem.ParameterizedObject == droppedItem.ParameterizedObject) { var settings = SettingsManager.Default.GetOrCreate(); var parameters = draggedItem.ParameterizedObject.Parameters; var draggedSettingItem = settings.ProcessParametersIndices.FirstOrDefault(x => x.Name == draggedItem.Name); var droppedSettingItem = settings.ProcessParametersIndices.FirstOrDefault(x => x.Name == droppedItem.Name); if (draggedSettingItem != null && droppedSettingItem != null) { if (draggedSettingItem.Index > droppedSettingItem.Index) { draggedSettingItem.Index = droppedSettingItem.Index - 1; } else { draggedSettingItem.Index = droppedSettingItem.Index + 1; } int index = 1; foreach (var settingItem in settings.ProcessParametersIndices.OrderBy(x => x.Index)) { settingItem.Index = index++; } } settings.Save(); } var editor = e.Draggable.FindAncestor(); if (editor != null) { editor.ParameterizedObject = null; editor.ParameterizedObject = draggedItem.ParameterizedObject; } } private void PopupButton_Checked(object sender, RoutedEventArgs e) { _vm.OnHivePopupOpened(); } private void BrushPicker_ColorChanged(object sender, BrushPicker.ColorChangedEventArgs e) { } private void ColorCanvas_SelectedColorChanged(object sender, RoutedPropertyChangedEventArgs e) { if (e.NewValue.HasValue) { _vm.OnSelectedBrushColorChanged((Color)e.NewValue); } } private void PopupButton_Unchecked(object sender, RoutedEventArgs e) { _vm.OnHivePopupClosed(); } public void OnNavigatedTo() { _vm.IsJobVisible = true; } public void OnNavigatedFrom() { _vm.IsJobVisible = false; } private void ListBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e) { listBoxSegments.SelectedItem = (sender as ListBoxItem).DataContext; } private void listBoxSegments_PreviewMouseDown(object sender, MouseButtonEventArgs e) { } private void listBoxSegments_MouseEnter(object sender, MouseEventArgs e) { Keyboard.ClearFocus(); listBoxSegments.Focus(); } private void OnBrushStopFieldValueChanged(object sender, RoutedPropertyChangedEventArgs e) { try { BrushStop stop = null; var dataContext = (sender as FrameworkElement).DataContext; if (dataContext != null) { if (dataContext is BrushStop) { stop = dataContext as BrushStop; } else { stop = (dataContext as LiquidVolume).BrushStop; } _vm.OnBrushStopFieldValueChanged(stop); } } catch { } } private void OnBrushStopMouseDown(object sender, MouseButtonEventArgs e) { listStops.SelectedItem = (sender as ListBoxItem).DataContext; } private void OnBrushStopColorSpace_SelectionChanged(object sender, SelectionChangedEventArgs e) { _vm.OnBrushStopColorSpaceChanged((sender as ComboBox).DataContext as BrushStop); } } }