diff options
| author | Roy <roy.mail.net@gmail.com> | 2018-02-20 00:03:51 +0200 |
|---|---|---|
| committer | Roy <roy.mail.net@gmail.com> | 2018-02-20 00:03:51 +0200 |
| commit | 1a573aaa346ec4b8bd58a0e35ab9df571a09b855 (patch) | |
| tree | 18055974ba06b0b1282955a2160e1fad5dd21bcc /Software/Visual_Studio/MachineStudio | |
| parent | 160ec4042539e69a7494bcde5c893c6dffcbf1b6 (diff) | |
| download | Tango-1a573aaa346ec4b8bd58a0e35ab9df571a09b855.tar.gz Tango-1a573aaa346ec4b8bd58a0e35ab9df571a09b855.zip | |
Added logs to developer module!
Diffstat (limited to 'Software/Visual_Studio/MachineStudio')
7 files changed, 380 insertions, 505 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/IOMonitorControl.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/IOMonitorControl.xaml deleted file mode 100644 index c40e69d98..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/IOMonitorControl.xaml +++ /dev/null @@ -1,115 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.Developer.Controls.IOMonitorControl" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:local="clr-namespace:Tango.MachineStudio.Developer.Controls" - mc:Ignorable="d" - d:DesignHeight="120" d:DesignWidth="200" Width="200" Height="120" Background="White"> - - <UserControl.Resources> - - </UserControl.Resources> - - <Grid Margin="5"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="30"/> - <ColumnDefinition Width="1*"/> - <ColumnDefinition Width="30"/> - </Grid.ColumnDefinitions> - - <Grid Grid.Column="1" Grid.Row="1"> - <Border BorderThickness="1" BorderBrush="#878787" CornerRadius="5"> - <Border.Background> - <ImageBrush ImageSource="../Images/black-screen.jpg" /> - </Border.Background> - - <TextBlock TextAlignment="Center" VerticalAlignment="Center" FontSize="50" Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=Value,FallbackValue='0000'}"></TextBlock> - </Border> - </Grid> - - <Grid Grid.Row="1"> - <Border BorderBrush="Gainsboro" BorderThickness="1 1 0 1" Margin="0 10" CornerRadius="5 0 0 5" PreviewMouseDown="OnBackwardPressed" PreviewMouseUp="OnBackwardReleased"> - <Border.Style> - <Style TargetType="Border"> - <Setter Property="Background"> - <Setter.Value> - <LinearGradientBrush EndPoint="1,0"> - <GradientStop Color="#515151" Offset="1" /> - <GradientStop Color="#FFEEEEEE" Offset="0"/> - </LinearGradientBrush> - </Setter.Value> - </Setter> - <Style.Triggers> - <EventTrigger RoutedEvent="PreviewMouseDown"> - <EventTrigger.Actions> - <BeginStoryboard> - <Storyboard> - <ColorAnimation Storyboard.TargetProperty="Background.GradientStops[1].Color" To="#FFCECECE" Duration="00:00:0.1" /> - </Storyboard> - </BeginStoryboard> - </EventTrigger.Actions> - </EventTrigger> - <EventTrigger RoutedEvent="PreviewMouseUp"> - <EventTrigger.Actions> - <BeginStoryboard> - <Storyboard> - <ColorAnimation Storyboard.TargetProperty="Background.GradientStops[1].Color" To="#FFEEEEEE" Duration="00:00:0.1" /> - </Storyboard> - </BeginStoryboard> - </EventTrigger.Actions> - </EventTrigger> - </Style.Triggers> - </Style> - </Border.Style> - - <Viewbox Stretch="Fill" Margin="-10 10"> - <materialDesign:PackIcon Kind="ChevronLeft" HorizontalAlignment="Center" VerticalAlignment="Center" Width="24" Height="24" Foreground="#202020" /> - </Viewbox> - </Border> - </Grid> - - <Grid Grid.Row="1" Grid.Column="2"> - <Border BorderBrush="Gainsboro" BorderThickness="0 1 1 1" Margin="0 10" CornerRadius="0 10 10 0" PreviewMouseDown="OnForwardPressed" PreviewMouseUp="OnForwardReleased"> - <Border.Style> - <Style TargetType="Border"> - <Setter Property="Background"> - <Setter.Value> - <LinearGradientBrush EndPoint="1,0"> - <GradientStop Color="#515151" Offset="0" /> - <GradientStop Color="#FFEEEEEE" Offset="1"/> - </LinearGradientBrush> - </Setter.Value> - </Setter> - <Style.Triggers> - <EventTrigger RoutedEvent="PreviewMouseDown"> - <EventTrigger.Actions> - <BeginStoryboard> - <Storyboard> - <ColorAnimation Storyboard.TargetProperty="Background.GradientStops[1].Color" To="#FFCECECE" Duration="00:00:0.1" /> - </Storyboard> - </BeginStoryboard> - </EventTrigger.Actions> - </EventTrigger> - <EventTrigger RoutedEvent="PreviewMouseUp"> - <EventTrigger.Actions> - <BeginStoryboard> - <Storyboard> - <ColorAnimation Storyboard.TargetProperty="Background.GradientStops[1].Color" To="#FFEEEEEE" Duration="00:00:0.1" /> - </Storyboard> - </BeginStoryboard> - </EventTrigger.Actions> - </EventTrigger> - </Style.Triggers> - </Style> - </Border.Style> - - <Viewbox Stretch="Fill" Margin="-10 10"> - <materialDesign:PackIcon Kind="ChevronRight" HorizontalAlignment="Center" VerticalAlignment="Center" Width="24" Height="24" Foreground="#202020" /> - </Viewbox> - </Border> - </Grid> - - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/IOMonitorControl.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/IOMonitorControl.xaml.cs deleted file mode 100644 index bc408958d..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/IOMonitorControl.xaml.cs +++ /dev/null @@ -1,109 +0,0 @@ -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.Core.Commands; - -namespace Tango.MachineStudio.Developer.Controls -{ - /// <summary> - /// Interaction logic for IOMonitorControl.xaml - /// </summary> - public partial class IOMonitorControl : UserControl - { - public ICommand ForwardPressedCommand - { - get { return (ICommand)GetValue(ForwardPressedCommandProperty); } - set { SetValue(ForwardPressedCommandProperty, value); } - } - public static readonly DependencyProperty ForwardPressedCommandProperty = - DependencyProperty.Register("ForwardPressedCommand", typeof(ICommand), typeof(IOMonitorControl), new PropertyMetadata(null)); - - public ICommand ForwardReleasedCommand - { - get { return (ICommand)GetValue(ForwardReleasedCommandProperty); } - set { SetValue(ForwardReleasedCommandProperty, value); } - } - public static readonly DependencyProperty ForwardReleasedCommandProperty = - DependencyProperty.Register("ForwardReleasedCommand", typeof(ICommand), typeof(IOMonitorControl), new PropertyMetadata(null)); - - public ICommand BackwardPressedCommand - { - get { return (ICommand)GetValue(BackwardPressedCommandProperty); } - set { SetValue(BackwardPressedCommandProperty, value); } - } - public static readonly DependencyProperty BackwardPressedCommandProperty = - DependencyProperty.Register("BackwardPressedCommand", typeof(ICommand), typeof(IOMonitorControl), new PropertyMetadata(null)); - - public ICommand BackwardReleasedCommand - { - get { return (ICommand)GetValue(BackwardReleasedCommandProperty); } - set { SetValue(BackwardReleasedCommandProperty, value); } - } - public static readonly DependencyProperty BackwardReleasedCommandProperty = - DependencyProperty.Register("BackwardReleasedCommand", typeof(ICommand), typeof(IOMonitorControl), new PropertyMetadata(null)); - - public object CommandParameter - { - get { return (object)GetValue(CommandParameterProperty); } - set { SetValue(CommandParameterProperty, value); } - } - public static readonly DependencyProperty CommandParameterProperty = - DependencyProperty.Register("CommandParameter", typeof(object), typeof(IOMonitorControl), new PropertyMetadata(null)); - - public String Value - { - get { return (String)GetValue(ValueProperty); } - set { SetValue(ValueProperty, value); } - } - public static readonly DependencyProperty ValueProperty = - DependencyProperty.Register("Value", typeof(String), typeof(IOMonitorControl), new PropertyMetadata("0000")); - - public IOMonitorControl() - { - InitializeComponent(); - } - - private void OnForwardPressed(object sender, MouseButtonEventArgs e) - { - if (ForwardPressedCommand != null) - { - ForwardPressedCommand.Execute(CommandParameter); - } - } - - private void OnForwardReleased(object sender, MouseButtonEventArgs e) - { - if (ForwardReleasedCommand != null) - { - ForwardReleasedCommand.Execute(CommandParameter); - } - } - - private void OnBackwardPressed(object sender, MouseButtonEventArgs e) - { - if (BackwardPressedCommand != null) - { - BackwardPressedCommand.Execute(CommandParameter); - } - } - - private void OnBackwardReleased(object sender, MouseButtonEventArgs e) - { - if (BackwardReleasedCommand != null) - { - BackwardReleasedCommand.Execute(CommandParameter); - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Navigation/DeveloperNavigationManager.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Navigation/DeveloperNavigationManager.cs index 5be50231d..03e022380 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Navigation/DeveloperNavigationManager.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Navigation/DeveloperNavigationManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.Logging; using Tango.MachineStudio.Common.Navigation; using Tango.MachineStudio.Developer.Views; @@ -12,6 +13,7 @@ namespace Tango.MachineStudio.Developer.Navigation { public void NavigateTo(DeveloperNavigationView view) { + LogManager.Log(String.Format("Navigating to view {0}...", view.ToString())); MainView.Instance.TransitionControl.AutoNavigate(view.ToString()); } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj index 91a9602be..364b8573a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj @@ -100,9 +100,6 @@ <Reference Include="PresentationFramework" /> </ItemGroup> <ItemGroup> - <Compile Include="Controls\IOMonitorControl.xaml.cs"> - <DependentUpon>IOMonitorControl.xaml</DependentUpon> - </Compile> <Compile Include="Converters\BrushStopLabToColorConverter.cs" /> <Compile Include="Converters\BrushStopCMYKToColorConverter.cs" /> <Compile Include="Converters\BrushStopToColorConverter.cs" /> @@ -122,7 +119,6 @@ <Compile Include="Navigation\DeveloperNavigationManager.cs" /> <Compile Include="Navigation\DeveloperNavigationView.cs" /> <Compile Include="ViewModelLocator.cs" /> - <Compile Include="ViewModels\IOVM.cs" /> <Compile Include="ViewModels\MainViewVM.cs" /> <Compile Include="Views\MainView.xaml.cs"> <DependentUpon>MainView.xaml</DependentUpon> @@ -140,10 +136,6 @@ <Compile Include="Views\RunningJobView.xaml.cs"> <DependentUpon>RunningJobView.xaml</DependentUpon> </Compile> - <Page Include="Controls\IOMonitorControl.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> <Page Include="Resources\GraphEx.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> @@ -219,6 +211,10 @@ <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project> <Name>Tango.Integration</Name> </ProjectReference> + <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj"> + <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project> + <Name>Tango.Logging</Name> + </ProjectReference> <ProjectReference Include="..\..\..\Tango.PMR\Tango.PMR.csproj"> <Project>{e4927038-348d-4295-aaf4-861c58cb3943}</Project> <Name>Tango.PMR</Name> @@ -314,5 +310,8 @@ <ItemGroup> <Resource Include="Images\black-screen.jpg" /> </ItemGroup> + <ItemGroup> + <Folder Include="Controls\" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/IOVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/IOVM.cs deleted file mode 100644 index cc4170827..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/IOVM.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.Core; -using Tango.Integration.Observables; - -namespace Tango.MachineStudio.Developer.ViewModels -{ - public class IOVM : ExtendedObject - { - private TechMonitor _io; - public TechMonitor IO - { - get { return _io; } - set { _io = value; RaisePropertyChangedAuto(); } - } - - private String _name; - public String Name - { - get { return _name; } - set { _name = value; } - } - - private bool _index; - public bool Index - { - get { return _index; } - set { _index = value; } - } - - private double _value; - public double Value - { - get { return _value; } - set { _value = value; RaisePropertyChanged(nameof(Value)); } - } - - public IOVM(TechMonitor io, String name) - { - IO = io; - Name = name; - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs index 62b742390..cf66efbd6 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs @@ -1,43 +1,29 @@ using GalaSoft.MvvmLight.Ioc; -using RealTimeGraphEx.Controllers; -using RealTimeGraphEx.DataSeries; using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.ComponentModel; using System.Linq; -using System.Text; +using System.Runtime.CompilerServices; using System.Threading.Tasks; +using System.Windows.Data; using System.Windows.Media; using Tango.Core.Commands; using Tango.Integration.Observables; +using Tango.Integration.Operators; +using Tango.Integration.Services; +using Tango.Logging; +using Tango.MachineStudio.Common.Authentication; using Tango.MachineStudio.Common.Controls; +using Tango.MachineStudio.Common.Diagnostics; using Tango.MachineStudio.Common.Notifications; using Tango.MachineStudio.Common.StudioApplication; -using Tango.SharedUI; -using System.Runtime.CompilerServices; -using System.Windows.Threading; -using Tango.Settings; -using Tango.MachineStudio.Developer.Views; -using Tango.Video.DirectCapture; -using Tango.Integration.Operators; -using Tango.PMR.Diagnostics; -using System.Reflection; -using Tango.PMR.Common; -using Tango.SharedUI.Helpers; -using Tango.Transport; -using Tango.Integration.Printing; -using Tango.Integration.Diagnostics; -using Microsoft.Win32; -using Tango.MachineStudio.Technician.ViewModels; -using Tango.MachineStudio.Common.Diagnostics; using Tango.MachineStudio.Common.Video; -using Tango.Integration.Services; using Tango.MachineStudio.Developer.Navigation; -using System.Data.Entity; -using Tango.MachineStudio.Common.Authentication; -using DeepEqual.Syntax; -using System.ComponentModel; -using System.Windows.Data; +using Tango.MachineStudio.Developer.Views; +using Tango.Settings; +using Tango.SharedUI; +using Tango.Transport; namespace Tango.MachineStudio.Developer.ViewModels { @@ -53,10 +39,10 @@ namespace Tango.MachineStudio.Developer.ViewModels private TimeSpan _runningJobEstimatedDuration; private JobHandler _jobHandler; private DeveloperNavigationManager _navigation; - private ObservablesContext _dbJobContext; private bool _blockInvalidateCommands; private IAuthenticationProvider _authentication; - private ObservablesContext _machineDBContext; + private ObservablesContext _machineDbContext; + private ObservablesContext _activeJobDbContext; #region Properties @@ -91,14 +77,15 @@ namespace Tango.MachineStudio.Developer.ViewModels } private ObservableCollection<WindingMethod> _windingMethods; - + /// <summary> + /// Gets or sets the winding methods. + /// </summary> public ObservableCollection<WindingMethod> WindingMethods { get { return _windingMethods; } set { _windingMethods = value; RaisePropertyChangedAuto(); } } - /// <summary> /// Gets or sets the application manager. /// </summary> @@ -152,21 +139,6 @@ namespace Tango.MachineStudio.Developer.ViewModels { _rmlProcessParametersTablesGroup = value; RaisePropertyChangedAuto(); OnProcessParametersTableGroupChanged(); } } - public void OnDropSegment(Segment dragged, Segment dropped) - { - dragged.SegmentIndex = dropped.SegmentIndex; - dropped.SegmentIndex++; - - int index = 1; - - foreach (var segment in ActiveJob.Segments.OrderBy(x => x.SegmentIndex)) - { - segment.SegmentIndex = index++; - } - - SegmentsCollectionView.Refresh(); - } - private ObservableCollection<ProcessParametersTablesGroup> _groupsHistory; /// <summary> /// Gets or sets the RML process parameters groups history. @@ -465,7 +437,9 @@ namespace Tango.MachineStudio.Developer.ViewModels } private String _jobFilter; - + /// <summary> + /// Gets or sets the job filter. + /// </summary> public String JobFilter { get { return _jobFilter; } @@ -598,15 +572,18 @@ namespace Tango.MachineStudio.Developer.ViewModels { SelectedJobs = new ObservableCollection<Job>(); - _machineDBContext = ObservablesContext.CreateDefault(); + LogManager.Log("Initializing machine Db context..."); + _machineDbContext = ObservablesContext.CreateDefault(); if (SettingsManager.Default.MachineStudio.DeveloperModule.LastSelectedMachineGuid != null) { - SelectedMachine = _machineDBContext.Machines.SingleOrDefault(x => x.Guid == SettingsManager.Default.MachineStudio.DeveloperModule.LastSelectedMachineGuid); + LogManager.Log("Setting last selected machine from settings..."); + SelectedMachine = _machineDbContext.Machines.SingleOrDefault(x => x.Guid == SettingsManager.Default.MachineStudio.DeveloperModule.LastSelectedMachineGuid); } if (SettingsManager.Default.MachineStudio.DeveloperModule.LastSelectedJobGuid != null && SelectedMachine != null) { + LogManager.Log("Setting last selected job from settings..."); SelectedMachineJob = SelectedMachine.Jobs.SingleOrDefault(x => x.Guid == SettingsManager.Default.MachineStudio.DeveloperModule.LastSelectedJobGuid); } @@ -618,6 +595,8 @@ namespace Tango.MachineStudio.Developer.ViewModels ApplicationManager = applicationManager; VideoCaptureProvider = videoCaptureProvider; + LogManager.Log("Initializing relay commands..."); + //Initialize Commands... EditMachineCommand = new RelayCommand(EditMachine, () => SelectedMachine != null); EditRMLCommand = new RelayCommand(EditRML, () => SelectedRML != null); @@ -630,12 +609,12 @@ namespace Tango.MachineStudio.Developer.ViewModels RemoveJobCommand = new RelayCommand(RemoveSelectedJobs, () => SelectedMachineJob != null); AddBrushStopCommand = new RelayCommand(AddBrushStop, () => SelectedSegment != null); RemoveBrushStopCommand = new RelayCommand(RemoveSelectedBrushStops, () => SelectedBrushStop != null); - SaveJobCommand = new RelayCommand(SaveJob, () => SelectedMachine != null); - DiscardJobCommand = new RelayCommand(DiscardJob, () => SelectedMachine != null); + SaveJobCommand = new RelayCommand(SaveActiveJob, () => SelectedMachine != null); + DiscardJobCommand = new RelayCommand(BackToJobs, () => SelectedMachine != null); StartJobCommand = new RelayCommand(StartJob, () => ActiveJob != null && !IsJobRunning); StopJobCommand = new RelayCommand(StopJob, () => IsJobRunning); CloseJobCompletionStatusCommand = new RelayCommand(CloseJobCompletionStatusBar); - LoadJobCommand = new RelayCommand(LoadJob, () => SelectedMachineJob != null); + LoadJobCommand = new RelayCommand(LoadSelectedJob, () => SelectedMachineJob != null); DuplicateJobCommand = new RelayCommand(DuplicateSelectedJobs, () => SelectedMachineJob != null); DuplicateSegmentCommand = new RelayCommand(DuplicateSelectedSegments, () => SelectedSegment != null); DuplicateBrushStopCommand = new RelayCommand(DuplicateSelectedBrushStops, () => SelectedBrushStop != null); @@ -665,7 +644,7 @@ namespace Tango.MachineStudio.Developer.ViewModels private void SelectedMachine_Saved(object sender, EventArgs e) { InvalidateLiquidFactorsAndProcessTables(); - SelectedMachine.Reload(_machineDBContext); + SelectedMachine.Reload(_machineDbContext); } /// <summary> @@ -698,32 +677,36 @@ namespace Tango.MachineStudio.Developer.ViewModels #endregion - #region Virtual Methods + #region Properties Changes + /// <summary> + /// Called when the selected parameters table has changed. + /// </summary> protected virtual void OnSelectedParametersTableChanged() { if (SelectedProcessParametersTable != null) { + LogManager.Log("Selected process parameters table changed."); SelectedProcessParametersTable.DyeingSpeedMinInkUptakeChanged -= SelectedProcessParametersTable_DyeingSpeedMinInkUptakeChanged; SelectedProcessParametersTable.DyeingSpeedMinInkUptakeChanged += SelectedProcessParametersTable_DyeingSpeedMinInkUptakeChanged; - } - - SetSegmentBrushStopsLiquidVolumes(SelectedSegment); - UpdateEstimatedDuration(); + SetSegmentBrushStopsLiquidVolumes(SelectedSegment); + UpdateEstimatedDuration(); + } } /// <summary> /// Called when the process parameters table group has been changed /// </summary> - private void OnProcessParametersTableGroupChanged() + protected virtual void OnProcessParametersTableGroupChanged() { if (RmlProcessParametersTableGroup != null && RmlProcessParametersTableGroup.ProcessParametersTables.Count > 0) { - SelectedProcessParametersTable = RmlProcessParametersTableGroup.ProcessParametersTables.First(); - } + LogManager.Log("Process parameters group changed..."); + SelectedProcessParametersTable = RmlProcessParametersTableGroup.ProcessParametersTables.OrderBy(x => x.TableIndex).FirstOrDefault(); - UpdateEstimatedDuration(); + UpdateEstimatedDuration(); + } } /// <summary> @@ -733,6 +716,7 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (SelectedSegment != null) { + LogManager.Log("Selected segment changed..."); SetSegmentBrushStopsLiquidVolumes(SelectedSegment); SelectedBrushStop = SelectedSegment.BrushStops.FirstOrDefault(); @@ -748,6 +732,7 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (SelectedGroupHistory != null) { + LogManager.Log(String.Format("Parameters group {0} selected from history.", SelectedGroupHistory.Name)); RmlProcessParametersTableGroup = SelectedGroupHistory.CloneGroup(); } } @@ -759,137 +744,96 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (SelectedMachine != null) { + LogManager.Log(String.Format("Machine {0} changed.", SelectedMachine.SerialNumber)); ReloadMachine(); JobsCollectionView = CollectionViewSource.GetDefaultView(SelectedMachine.Jobs); JobsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Job.LastUpdated), ListSortDirection.Descending)); } } - private void ReloadMachine() + /// <summary> + /// Called when the job filtering has changed. + /// </summary> + protected virtual void OnJobFilterChanged() { - _machineDBContext.Dispose(); - _machineDBContext = ObservablesContext.CreateDefault(); - _machineDBContext.Configuration.LazyLoadingEnabled = true; - Machines = _machineDBContext.Machines.ToObservableCollection(); - _selectedMachine = Machines.SingleOrDefault(x => x.Guid == _selectedMachine.Guid); - RaisePropertyChanged(nameof(SelectedMachine)); - - JobsCollectionView = CollectionViewSource.GetDefaultView(SelectedMachine.Jobs); - JobsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Job.LastUpdated), ListSortDirection.Descending)); - } - - #endregion - - #region Private Methods + String filter = JobFilter.ToLower(); - private void OnJobFilterChanged() - { JobsCollectionView.Filter = (job) => { Job j = job as Job; - return String.IsNullOrWhiteSpace(JobFilter) + return String.IsNullOrWhiteSpace(filter) + || + j.Name.ToLower().Contains(filter) //Job name + || + j.User.Contact.FirstName.ToLower().Contains(filter) // User first name || - j.Name.ToLower().Contains(JobFilter.ToLower()); + j.Length.ToString().Contains(filter); //Job length }; } - private void OnActiveJobChanged() + /// <summary> + /// Called when the active job has changed. + /// </summary> + protected virtual void OnActiveJobChanged() { if (ActiveJob != null) { + LogManager.Log(String.Format("Active job {0} changed.", ActiveJob.Name)); SegmentsCollectionView = CollectionViewSource.GetDefaultView(ActiveJob.Segments); SegmentsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Segment.SegmentIndex), ListSortDirection.Ascending)); } } - private void LoadJob() - { - if (SelectedMachineJob != null) - { - SelectedSegments = new ObservableCollection<Segment>(); - SelectedBrushStops = new ObservableCollection<BrushStop>(); - SelectedRML = null; - SelectedSegment = null; - SelectedGroupHistory = null; - SelectedBrushStop = null; - SelectedProcessParametersTable = null; - RmlProcessParametersTableGroup = null; - - using (_notification.PushTaskItem("Loading job details...")) - { - //await Task.Factory.StartNew(() => - //{ - _blockInvalidateCommands = false; - - _dbJobContext = ObservablesContext.CreateDefault(); - _dbJobContext.Configuration.LazyLoadingEnabled = true; - - ColorSpaces = _dbJobContext.ColorSpaces.ToObservableCollection(); - Rmls = _dbJobContext.Rmls.ToObservableCollection(); - WindingMethods = _dbJobContext.WindingMethods.ToObservableCollection(); - - _activeJob = _dbJobContext.Jobs.SingleOrDefault(x => x.Guid == SelectedMachineJob.Guid); - - _selectedRML = ActiveJob.Rml; - - _selectedSegment = ActiveJob.Segments.FirstOrDefault(); - - ActiveJob.LengthChanged -= ActiveJob_LengthChanged; - ActiveJob.LengthChanged += ActiveJob_LengthChanged; + #endregion - ActiveJob = _activeJob; + #region Drag & Drop - SelectedRML = _selectedRML; - SelectedSegment = _selectedSegment; + /// <summary> + /// Switch the segment position in the job. + /// </summary> + /// <param name="dragged">The dragged.</param> + /// <param name="dropped">The dropped.</param> + public void OnDropSegment(Segment dragged, Segment dropped) + { + LogManager.Log(String.Format("Segment {0} Dropped on segment {1}", dragged.SegmentIndex, dropped.SegmentIndex)); - UpdateEstimatedDuration(); + dragged.SegmentIndex = dropped.SegmentIndex; + dropped.SegmentIndex++; - _blockInvalidateCommands = false; - InvalidateRelayCommands(); + int index = 1; - InvokeUI(() => _navigation.NavigateTo(DeveloperNavigationView.JobView)); - //}); - } + foreach (var segment in ActiveJob.Segments.OrderBy(x => x.SegmentIndex)) + { + segment.SegmentIndex = index++; } + + SegmentsCollectionView.Refresh(); } - private async void SaveJob() + /// <summary> + /// Switch the brush stop position in the segment. + /// </summary> + /// <param name="dragged">The dragged stop.</param> + /// <param name="dropped">The dropped stop.</param> + public void OnDropBrushStop(BrushStop dragged, BrushStop dropped) { - if (ActiveJob != null) - { - using (_notification.PushTaskItem("Saving job to database...")) - { - ActiveJob.LastUpdated = DateTime.UtcNow; - ActiveJob.Rml = SelectedRML; + LogManager.Log(String.Format("BrushStop {0} Dropped on BrushStop {1}", dragged.StopIndex, dropped.StopIndex)); - await ActiveJob.SaveAsync(_dbJobContext); - ReloadMachine(); - SelectedMachineJob = SelectedMachine.Jobs.SingleOrDefault(x => x.Guid == ActiveJob.Guid); - } - } + dragged.SetStopIndex(dropped.StopIndex); + dropped.SetStopIndex(dropped.StopIndex + 1); + ArrangeBrushStopsIndices(); } - private void DiscardJob() - { - bool jobModified = !ActiveJob.CompareUsingJson(SelectedMachineJob); + #endregion - if (jobModified) - { - if (_notification.ShowQuestion("This will discard the current job changes. Are you sure?")) - { - _dbJobContext.Dispose(); - _navigation.NavigateTo(DeveloperNavigationView.MachineJobSelectionView); - } - } - else - { - _dbJobContext.Dispose(); - _navigation.NavigateTo(DeveloperNavigationView.MachineJobSelectionView); - } - } + #region Running Job Management + /// <summary> + /// Closes the job completion status bar. + /// </summary> private void CloseJobCompletionStatusBar() { + LogManager.Log("Closing job completion status bar..."); _navigation.NavigateTo(DeveloperNavigationView.JobView); IsJobCompleted = false; IsJobFailed = false; @@ -898,27 +842,43 @@ namespace Tango.MachineStudio.Developer.ViewModels RunningJob = null; } + /// <summary> + /// Stops the job. + /// </summary> private void StopJob() { + LogManager.Log("Stopping job..."); IsJobRunning = false; IsJobCanceled = true; _jobHandler.Cancel(); } - private void FailJob() + /// <summary> + /// Fails the job. + /// </summary> + private void SetJobFailed() { + LogManager.Log("Setting job failed state..."); IsJobRunning = false; IsJobFailed = true; } - private void CompleteJob() + /// <summary> + /// Completes the job. + /// </summary> + private void SetJobCompleted() { + LogManager.Log("Setting job completed state..."); IsJobRunning = false; IsJobCompleted = true; } + /// <summary> + /// Starts the job. + /// </summary> private void StartJob() { + LogManager.Log(String.Format("Starting job {0}...", ActiveJob.Name)); if (MachineOperator == null || MachineOperator.State != TransportComponentState.Connected) { _notification.ShowError("No machine connected. Could not execute the specified job."); @@ -945,6 +905,7 @@ namespace Tango.MachineStudio.Developer.ViewModels _navigation.NavigateTo(DeveloperNavigationView.RunningJobView); + LogManager.Log("Sending job to machine operator..."); _jobHandler = MachineOperator.Print(ActiveJob, SelectedProcessParametersTable); _jobHandler.StatusReceived += (x, status) => @@ -976,7 +937,8 @@ namespace Tango.MachineStudio.Developer.ViewModels _jobHandler.Failed += (x, ex) => { - FailJob(); + LogManager.Log(ex, String.Format("Job {0} has failed.", RunningJob.Name)); + SetJobFailed(); InvokeUI(() => { @@ -986,34 +948,58 @@ namespace Tango.MachineStudio.Developer.ViewModels _jobHandler.Completed += (x, e) => { - CompleteJob(); + LogManager.Log(String.Format("Job {0} has completed.", RunningJob.Name)); + SetJobCompleted(); }; _jobHandler.Canceled += (x, y) => { + LogManager.Log(String.Format("Job {0} has been canceled.", RunningJob.Name)); //Finally Canceled.. }; } - private void UpdateEstimatedDuration() + /// <summary> + /// Creates the running job effective segments. + /// </summary> + /// <param name="job">The job.</param> + /// <returns></returns> + private List<Segment> CreateRunningJobEffectiveSegments(Job job) { - if (ActiveJob != null && SelectedProcessParametersTable != null && SelectedProcessParametersTable.DyeingSpeed > 0) - { - EstimatedDuration = TimeSpan.FromSeconds(ActiveJob.Length / (SelectedProcessParametersTable.DyeingSpeed / 100d)); - } - } + LogManager.Log("Creating job effective segments..."); - private void SetSegmentBrushStopsLiquidVolumes(Segment segment) - { - if (!DesignMode && segment != null) + List<Segment> segments = new List<Segment>(); + foreach (var s in job.Segments) { - foreach (var stop in segment.BrushStops) + s.Completed = false; + s.Started = false; + segments.Add(s); + + if (job.EnableInterSegment && job.Segments.IndexOf(s) != job.Segments.Count - 1) { - stop.SetLiquidVolumes(SelectedMachine.Configuration, SelectedRML, SelectedProcessParametersTable); + segments.Add(new Segment() + { + Length = job.InterSegmentLength, + BrushStops = new System.Collections.ObjectModel.ObservableCollection<BrushStop>() + { + new BrushStop() + { + Color = Colors.White, + } + }, + Started = false, + Completed = false + }); } } + + return segments; } + #endregion + + #region RML + /// <summary> /// Saves the liquid factors. /// </summary> @@ -1023,7 +1009,8 @@ namespace Tango.MachineStudio.Developer.ViewModels { using (_notification.PushTaskItem("Saving Liquid Factors...")) { - await SelectedRML.SaveAsync(_dbJobContext); + LogManager.Log(String.Format("Saving liquid factors for RML {0}...", SelectedRML.Name)); + await SelectedRML.SaveAsync(_activeJobDbContext); InvalidateLiquidFactorsAndProcessTables(); } } @@ -1034,18 +1021,11 @@ namespace Tango.MachineStudio.Developer.ViewModels /// </summary> private void EditRML() { + LogManager.Log(String.Format("Requesting DB module for RML {0} editing...", SelectedRML.Name)); ApplicationManager.RequestModule("Data Base", SelectedRML); } /// <summary> - /// Navigates to the Machine Designer Module in order to edit the selected machine. - /// </summary> - private void EditMachine() - { - ApplicationManager.RequestModule("Machine Designer", SelectedMachine); - } - - /// <summary> /// Saves the process parameters group. /// </summary> private async void SaveProcessParameters() @@ -1056,6 +1036,7 @@ namespace Tango.MachineStudio.Developer.ViewModels using (_notification.PushTaskItem("Saving Parameters Group...")) { + LogManager.Log(String.Format("Saving process parameters group under the name {0}...", response)); ProcessParametersTablesGroup group = new ProcessParametersTablesGroup(); List<ProcessParametersTable> tables = new List<ProcessParametersTable>(); @@ -1078,7 +1059,7 @@ namespace Tango.MachineStudio.Developer.ViewModels } SelectedRML.ProcessParametersTablesGroups.Add(group); - await SelectedRML.SaveAsync(_dbJobContext); + await SelectedRML.SaveAsync(_activeJobDbContext); InvalidateLiquidFactorsAndProcessTables(); } @@ -1091,10 +1072,11 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (SelectedRML != null && SelectedMachine != null) { + LogManager.Log("Invalidating liquid factors, process parameters and process group history..."); LiquidTypesRmls = SelectedMachine.Configuration.IdsPacks.OrderBy(x => x.PackIndex).Select(x => x.LiquidType).SelectMany(x => x.LiquidTypesRmls).Where(x => x.Rml.Guid == SelectedRML.Guid).ToList(); RmlProcessParametersTableGroup = SelectedRML.ProcessParametersTablesGroups.ToList().SingleOrDefault(x => x.Active); - _selectedGroupHistory = RmlProcessParametersTableGroup; + var selectedHistory = RmlProcessParametersTableGroup; if (RmlProcessParametersTableGroup != null) { @@ -1104,44 +1086,173 @@ namespace Tango.MachineStudio.Developer.ViewModels GroupsHistory = SelectedRML.ProcessParametersTablesGroups.OrderByDescending(x => x.SaveDate).OrderBy(x => !x.Active).ToObservableCollection(); + _selectedGroupHistory = selectedHistory; + RaisePropertyChangedAuto(nameof(SelectedGroupHistory)); } } - private List<Segment> CreateRunningJobEffectiveSegments(Job job) + #endregion + + #region Active Job Management + + /// <summary> + /// Loads the selected job. + /// </summary> + private void LoadSelectedJob() { - List<Segment> segments = new List<Segment>(); - foreach (var s in job.Segments) + if (SelectedMachineJob != null) { - s.Completed = false; - s.Started = false; - segments.Add(s); + using (_notification.PushTaskItem("Loading job details...")) + { + LogManager.Log(String.Format("Loading job {0}...", SelectedMachineJob.Name)); + SelectedSegments = new ObservableCollection<Segment>(); + SelectedBrushStops = new ObservableCollection<BrushStop>(); + SelectedRML = null; + SelectedSegment = null; + SelectedGroupHistory = null; + SelectedBrushStop = null; + SelectedProcessParametersTable = null; + RmlProcessParametersTableGroup = null; - if (job.EnableInterSegment && job.Segments.IndexOf(s) != job.Segments.Count - 1) + + _blockInvalidateCommands = false; + + LogManager.Log("Creating active job DB context..."); + _activeJobDbContext = ObservablesContext.CreateDefault(); + _activeJobDbContext.Configuration.LazyLoadingEnabled = true; + + LogManager.Log("Initializing available color spaces, RMLs & Winding methods..."); + ColorSpaces = _activeJobDbContext.ColorSpaces.ToObservableCollection(); + Rmls = _activeJobDbContext.Rmls.ToObservableCollection(); + WindingMethods = _activeJobDbContext.WindingMethods.ToObservableCollection(); + + LogManager.Log("Setting active job..."); + _activeJob = _activeJobDbContext.Jobs.SingleOrDefault(x => x.Guid == SelectedMachineJob.Guid); + + _selectedRML = ActiveJob.Rml; + + LogManager.Log("Setting selected segment..."); + _selectedSegment = ActiveJob.Segments.FirstOrDefault(); + + ActiveJob.LengthChanged -= ActiveJob_LengthChanged; + ActiveJob.LengthChanged += ActiveJob_LengthChanged; + + ActiveJob = _activeJob; + + SelectedRML = _selectedRML; + SelectedSegment = _selectedSegment; + + UpdateEstimatedDuration(); + + _blockInvalidateCommands = false; + InvalidateRelayCommands(); + + _navigation.NavigateTo(DeveloperNavigationView.JobView); + } + } + } + + /// <summary> + /// Saves the active job. + /// </summary> + private async void SaveActiveJob() + { + if (ActiveJob != null) + { + using (_notification.PushTaskItem("Saving job details...")) { - segments.Add(new Segment() - { - Length = job.InterSegmentLength, - BrushStops = new System.Collections.ObjectModel.ObservableCollection<BrushStop>() - { - new BrushStop() - { - Color = Colors.White, - } - }, - Started = false, - Completed = false - }); + LogManager.Log(String.Format("Saving the active job {0}...", ActiveJob.Name)); + ActiveJob.LastUpdated = DateTime.UtcNow; + ActiveJob.Rml = SelectedRML; + + await ActiveJob.SaveAsync(_activeJobDbContext); + ReloadMachine(); + SelectedMachineJob = SelectedMachine.Jobs.SingleOrDefault(x => x.Guid == ActiveJob.Guid); } } + } - return segments; + private void BackToJobs() + { + LogManager.Log("User request for 'back to jobs'..."); + LogManager.Log("Comparing active job with selected job..."); + + bool jobModified = !ActiveJob.CompareUsingJson(SelectedMachineJob); + + if (jobModified) + { + LogManager.Log("Selected job has been modified. Invoking confirmation dialog..."); + if (_notification.ShowQuestion("This will discard the current job changes. Are you sure?")) + { + LogManager.Log("Disposing active job db context..."); + _activeJobDbContext.Dispose(); + _navigation.NavigateTo(DeveloperNavigationView.MachineJobSelectionView); + } + } + else + { + LogManager.Log("Disposing active job db context..."); + _activeJobDbContext.Dispose(); + _navigation.NavigateTo(DeveloperNavigationView.MachineJobSelectionView); + } + } + + #endregion + + #region Private Methods + + private void ReloadMachine() + { + LogManager.Log("Reloading selected machine..."); + _machineDbContext.Dispose(); + _machineDbContext = ObservablesContext.CreateDefault(); + _machineDbContext.Configuration.LazyLoadingEnabled = true; + String machineGuid = _selectedMachine.Guid; + Machines = _machineDbContext.Machines.ToObservableCollection(); + _selectedMachine = Machines.SingleOrDefault(x => x.Guid == machineGuid); + RaisePropertyChanged(nameof(SelectedMachine)); + + JobsCollectionView = CollectionViewSource.GetDefaultView(SelectedMachine.Jobs); + JobsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Job.LastUpdated), ListSortDirection.Descending)); + } + + private void UpdateEstimatedDuration() + { + if (ActiveJob != null && SelectedProcessParametersTable != null && SelectedProcessParametersTable.DyeingSpeed > 0) + { + EstimatedDuration = TimeSpan.FromSeconds(ActiveJob.Length / (SelectedProcessParametersTable.DyeingSpeed / 100d)); + } + } + + private void SetSegmentBrushStopsLiquidVolumes(Segment segment) + { + if (!DesignMode && segment != null) + { + LogManager.Log("Setting segment brush stops liquid volumes..."); + foreach (var stop in segment.BrushStops) + { + stop.SetLiquidVolumes(SelectedMachine.Configuration, SelectedRML, SelectedProcessParametersTable); + } + } + } + + /// <summary> + /// Navigates to the Machine Designer Module in order to edit the selected machine. + /// </summary> + private void EditMachine() + { + LogManager.Log(String.Format("Requesting machine designer module for machine {0} editing...", SelectedMachine.SerialNumber)); + ApplicationManager.RequestModule("Machine Designer", SelectedMachine); } #endregion #region Add / Remove / Duplicate Jobs, Segments & Brush Stops + /// <summary> + /// Arranges the segments indices. + /// </summary> private void ArrangeSegmentsIndices() { int index = 1; @@ -1154,6 +1265,9 @@ namespace Tango.MachineStudio.Developer.ViewModels SegmentsCollectionView.Refresh(); } + /// <summary> + /// Arranges the brush stops indices. + /// </summary> private void ArrangeBrushStopsIndices() { int index = 0; @@ -1187,10 +1301,12 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (_notification.ShowQuestion("Are you sure you want to delete the selected segments?")) { + LogManager.Log(String.Format("Removing {0} segments...", SelectedSegments.Count)); + SelectedSegments.ToList().ForEach(x => { ActiveJob.Segments.Remove(x); - x.DefferedDelete(_dbJobContext); + x.DefferedDelete(_activeJobDbContext); }); ArrangeSegmentsIndices(); @@ -1205,6 +1321,7 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (ActiveJob != null) { + LogManager.LogFormat("Adding new segment to job {0}...", ActiveJob.Name); Segment seg = new Segment(); seg.Name = "Untitled Segment"; seg.Length = 10; @@ -1233,15 +1350,17 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (_notification.ShowQuestion("Are you sure you want to delete the selected jobs?")) { + LogManager.Log(String.Format("Removing {0} jobs...", SelectedJobs.Count)); SelectedJobs.ToList().ForEach(x => { SelectedMachine.Jobs.Remove(x); - x.DefferedDelete(_machineDBContext); + x.DefferedDelete(_machineDbContext); }); using (_notification.PushTaskItem("Removing selected jobs...")) { - await SelectedMachine.SaveAsync(_machineDBContext); + LogManager.Log("Saving selected machine to database..."); + await SelectedMachine.SaveAsync(_machineDbContext); } } } @@ -1258,18 +1377,21 @@ namespace Tango.MachineStudio.Developer.ViewModels if (!String.IsNullOrWhiteSpace(jobName)) { + LogManager.Log(String.Format("Adding new job {0}...", jobName)); + Job newJob = new Job(); newJob.Name = jobName; newJob.CreationDate = DateTime.UtcNow; newJob.User = _authentication.CurrentUser; - newJob.Rml = _machineDBContext.Rmls.FirstOrDefault(); - newJob.WindingMethod = _machineDBContext.WindingMethods.FirstOrDefault(); + newJob.Rml = _machineDbContext.Rmls.FirstOrDefault(); + newJob.WindingMethod = _machineDbContext.WindingMethods.FirstOrDefault(); newJob.Machine = SelectedMachine; SelectedMachine.Jobs.Add(newJob); - await SelectedMachine.SaveAsync(_machineDBContext); + LogManager.Log("Saving selected machine to database..."); + await SelectedMachine.SaveAsync(_machineDbContext); SelectedMachineJob = newJob; - LoadJob(); + LoadSelectedJob(); AddSegment(); } } @@ -1284,10 +1406,12 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (_notification.ShowQuestion("Are you sure you want to delete the selected colors?")) { + LogManager.Log(String.Format("Removing {0} brush stops...", SelectedBrushStops.Count)); + SelectedBrushStops.ToList().ForEach(x => { SelectedSegment.BrushStops.Remove(x); - x.DefferedDelete(_dbJobContext); + x.DefferedDelete(_activeJobDbContext); }); ArrangeBrushStopsIndices(); @@ -1302,6 +1426,8 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (SelectedSegment != null) { + LogManager.LogFormat("Adding new brush stop to segment...", SelectedSegment.SegmentIndex.ToString()); + var stop = new BrushStop(); if (SelectedSegment.BrushStops.Count > 0) @@ -1315,7 +1441,7 @@ namespace Tango.MachineStudio.Developer.ViewModels stop.OffsetPercent = 100; stop.Segment = SelectedSegment; - stop.ColorSpace = _dbJobContext.ColorSpaces.FirstOrDefault(); + stop.ColorSpace = _activeJobDbContext.ColorSpaces.FirstOrDefault(); stop.Color = Colors.Black; stop.SetLiquidVolumes(SelectedMachine.Configuration, SelectedRML, SelectedProcessParametersTable); SelectedSegment.BrushStops.Add(stop); @@ -1329,6 +1455,8 @@ namespace Tango.MachineStudio.Developer.ViewModels /// </summary> private void DuplicateSelectedBrushStops() { + LogManager.LogFormat("Duplicating {0} brush stops...", SelectedBrushStops.Count); + foreach (var stop in SelectedBrushStops.OrderBy(x => x.StopIndex)) { var cloned = stop.Clone(); @@ -1344,6 +1472,8 @@ namespace Tango.MachineStudio.Developer.ViewModels /// </summary> private void DuplicateSelectedSegments() { + LogManager.LogFormat("Duplicating {0} segments...", SelectedSegments.Count); + foreach (var segment in SelectedSegments.OrderBy(x => x.SegmentIndex)) { var cloned = segment.Clone(); @@ -1363,6 +1493,8 @@ namespace Tango.MachineStudio.Developer.ViewModels { using (_notification.PushTaskItem("Cloning selected jobs...")) { + LogManager.LogFormat("Duplicating {0} jobs...", SelectedJobs.Count); + int index = SelectedMachine.Jobs.Max(x => x.JobIndex); foreach (var job in SelectedJobs) @@ -1372,7 +1504,8 @@ namespace Tango.MachineStudio.Developer.ViewModels SelectedMachine.Jobs.Add(cloned); } - await SelectedMachine.SaveAsync(_machineDBContext); + LogManager.Log("Saving selected machine to database..."); + await SelectedMachine.SaveAsync(_machineDbContext); } } } @@ -1393,22 +1526,6 @@ namespace Tango.MachineStudio.Developer.ViewModels #endregion - #region Public Methods - - /// <summary> - /// Switch the brush stop position in the segment. - /// </summary> - /// <param name="draggedStop">The dragged stop.</param> - /// <param name="droppedStop">The dropped stop.</param> - public void OnDropBrushStop(BrushStop draggedStop, BrushStop droppedStop) - { - draggedStop.SetStopIndex(droppedStop.StopIndex); - droppedStop.SetStopIndex(droppedStop.StopIndex + 1); - ArrangeBrushStopsIndices(); - } - - #endregion - #region IShutdownRequestBlocker public Task<bool> OnShutdownRequest() diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechnicianDbContext.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechnicianDbContext.cs new file mode 100644 index 000000000..a0314ab6b --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechnicianDbContext.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Integration.Observables; + +namespace Tango.MachineStudio.Technician +{ + public class TechnicianDbContext + { + private static ObservablesContext _context; + + public static ObservablesContext Context + { + get + { + if (_context == null) + { + _context = ObservablesContext.CreateDefault(); + } + + return _context; + } + private set { _context = value; } + } + } +} |
