aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs151
1 files changed, 137 insertions, 14 deletions
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 7a1c94504..5c5531063 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
@@ -34,6 +34,8 @@ 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;
namespace Tango.MachineStudio.Developer.ViewModels
{
@@ -52,18 +54,24 @@ namespace Tango.MachineStudio.Developer.ViewModels
private ObservablesContext _dbJobContext;
private Job _jobFromList;
private bool _blockInvalidateCommands;
+ private IAuthenticationProvider _authentication;
#region Properties
private ObservableCollection<ColorSpace> _colorSpaces;
-
+ /// <summary>
+ /// Gets or sets the color spaces.
+ /// </summary>
public ObservableCollection<ColorSpace> ColorSpaces
{
get { return _colorSpaces; }
set { _colorSpaces = value; RaisePropertyChangedAuto(); }
}
- private ObservableCollection<Rml> _rmls;
+ private ObservableCollection<Rml> _rmls;
+ /// <summary>
+ /// Gets or sets the RMLS.
+ /// </summary>
public ObservableCollection<Rml> Rmls
{
get { return _rmls; }
@@ -172,6 +180,16 @@ namespace Tango.MachineStudio.Developer.ViewModels
}
}
+ private ObservableCollection<Job> _selectedJobs;
+ /// <summary>
+ /// Gets or sets the selected jobs.
+ /// </summary>
+ public ObservableCollection<Job> SelectedJobs
+ {
+ get { return _selectedJobs; }
+ set { _selectedJobs = value; RaisePropertyChangedAuto(); }
+ }
+
private Segment _selectedSegment;
/// <summary>
/// Gets or sets the job selected segment.
@@ -182,6 +200,16 @@ namespace Tango.MachineStudio.Developer.ViewModels
set { _selectedSegment = value; RaisePropertyChangedAuto(); OnSelectedSegmentChanged(); }
}
+ private ObservableCollection<Segment> _selectedSegments;
+ /// <summary>
+ /// Gets or sets the selected segments.
+ /// </summary>
+ public ObservableCollection<Segment> SelectedSegments
+ {
+ get { return _selectedSegments; }
+ set { _selectedSegments = value; RaisePropertyChangedAuto(); }
+ }
+
private BrushStop _selectedBrushStop;
/// <summary>
/// Gets or sets the selected segment selected brush stop.
@@ -192,6 +220,16 @@ namespace Tango.MachineStudio.Developer.ViewModels
set { _selectedBrushStop = value; RaisePropertyChangedAuto(); }
}
+ private ObservableCollection<BrushStop> _selectedBrushStops;
+ /// <summary>
+ /// Gets or sets the selected brush stops.
+ /// </summary>
+ public ObservableCollection<BrushStop> SelectedBrushStops
+ {
+ get { return _selectedBrushStops; }
+ set { _selectedBrushStops = value; RaisePropertyChangedAuto(); }
+ }
+
private Rml _selectedRML;
/// <summary>
/// Gets or sets the selected RML.
@@ -457,6 +495,11 @@ namespace Tango.MachineStudio.Developer.ViewModels
/// </summary>
public RelayCommand LoadJobCommand { get; set; }
+ /// <summary>
+ /// Gets or sets the duplicate job command.
+ /// </summary>
+ public RelayCommand DuplicateJobCommand { get; set; }
+
#endregion
#region Constructors
@@ -482,8 +525,12 @@ namespace Tango.MachineStudio.Developer.ViewModels
/// <param name="applicationManager">The application manager.</param>
/// <param name="notificationProvider">The notification provider.</param>
[PreferredConstructor]
- public MainViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, IMainView view, IDiagnosticsFrameProvider diagnosticsFrameProvider, IVideoCaptureProvider videoCaptureProvider, DeveloperNavigationManager navigation) : this(view)
+ public MainViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, IMainView view, IDiagnosticsFrameProvider diagnosticsFrameProvider, IVideoCaptureProvider videoCaptureProvider, DeveloperNavigationManager navigation, IAuthenticationProvider authentication) : this(view)
{
+ SelectedJobs = new ObservableCollection<Job>();
+
+ _authentication = authentication;
+
_notification = notificationProvider;
_navigation = navigation;
ApplicationManager = applicationManager;
@@ -509,6 +556,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
CloseJobCompletionStatusCommand = new RelayCommand(CloseJobCompletionStatusBar);
ExitFullScreenCommand = new RelayCommand(ExitFullScreen);
LoadJobCommand = new RelayCommand(LoadJob, () => SelectedJob != null);
+ DuplicateJobCommand = new RelayCommand(DuplicateJob, () => SelectedJob != null);
ToggleCameraCommand = new RelayCommand<CaptureDevice>(ToggleCamera);
@@ -547,6 +595,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
private void SelectedMachine_Saved(object sender, EventArgs e)
{
InvalidateLiquidFactorsAndProcessTables();
+ SelectedMachine.Reload();
}
/// <summary>
@@ -640,14 +689,43 @@ namespace Tango.MachineStudio.Developer.ViewModels
#region Private Methods
+ private async void DuplicateJob()
+ {
+ if (SelectedJobs.Count > 0)
+ {
+ using (_notification.PushTaskItem("Cloning selected jobs..."))
+ {
+ int index = SelectedMachine.Jobs.Max(x => x.JobIndex);
+
+ foreach (var job in SelectedJobs)
+ {
+ var cloned = job.Clone();
+ cloned.JobIndex = ++index;
+ SelectedMachine.Jobs.Add(cloned);
+ }
+
+ await SelectedMachine.SaveAsync();
+ }
+ }
+ }
+
private async void LoadJob()
{
if (SelectedJob != 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(() =>
- {
+ //await Task.Factory.StartNew(() =>
+ //{
_blockInvalidateCommands = false;
_dbJobContext = ObservablesContext.CreateDefault();
@@ -675,7 +753,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
InvalidateRelayCommands();
InvokeUI(() => _navigation.NavigateTo(DeveloperNavigationView.JobView));
- });
+ //});
}
}
}
@@ -688,15 +766,45 @@ namespace Tango.MachineStudio.Developer.ViewModels
{
SelectedJob.LastUpdated = DateTime.UtcNow;
SelectedJob.Rml = SelectedRML;
- await SelectedJob.SaveAsync();
+ await SelectedJob.SaveAsync(_dbJobContext);
+ _jobFromList = SelectedMachine.Jobs.SingleOrDefault(x => x.Guid == SelectedJob.Guid);
await _jobFromList.Reload();
+
+ foreach (var segment in _jobFromList.Segments)
+ {
+ await segment.Reload();
+
+ foreach (var stop in segment.BrushStops)
+ {
+ await stop.Reload();
+ }
+ }
}
}
}
private void DiscardJob()
{
- if (_notification.ShowQuestion("This will discard the current job changes. Are you sue?"))
+ //bool jobModified = !SelectedJob.WithDeepEqual(_jobFromList)
+ // .IgnoreSourceProperty(x => x.Machine)
+ // .IgnoreSourceProperty(x => x.JobRuns)
+ // .IgnoreSourceProperty(x => x.Parameters)
+ // .IgnoreSourceProperty(x => x.Rml)
+ // .IgnoreSourceProperty(x => x.User)
+ // .IgnoreSourceProperty(x => x.Segments)
+ // .Compare();
+
+ bool jobModified = !SelectedJob.CompareUsingJson(_jobFromList);
+
+ if (jobModified)
+ {
+ if (_notification.ShowQuestion("This will discard the current job changes. Are you sue?"))
+ {
+ _dbJobContext.Dispose();
+ _navigation.NavigateTo(DeveloperNavigationView.MachineJobSelectionView);
+ }
+ }
+ else
{
_dbJobContext.Dispose();
_navigation.NavigateTo(DeveloperNavigationView.MachineJobSelectionView);
@@ -1012,11 +1120,18 @@ namespace Tango.MachineStudio.Developer.ViewModels
/// <summary>
/// Removes the selected job.
/// </summary>
- private void RemoveJob()
+ private async void RemoveJob()
{
if (SelectedMachine != null && SelectedJob != null)
{
- SelectedMachine.Jobs.Remove(SelectedJob);
+ if (_notification.ShowQuestion("Are you sure you want to delete the selected jobs?"))
+ {
+ SelectedJobs.ToList().ForEach(x =>
+ {
+ x.DefferedDelete();
+ });
+ await SelectedMachine.SaveAsync();
+ }
}
}
@@ -1027,11 +1142,19 @@ namespace Tango.MachineStudio.Developer.ViewModels
{
if (SelectedMachine != null)
{
- SelectedMachine.Jobs.Add(new Job(DateTime.UtcNow)
+ String jobName = _notification.ShowTextInput("Please provide a job name", "Name");
+
+ if (!String.IsNullOrWhiteSpace(jobName))
{
- Name = "Untitled Job",
- CreationDate = DateTime.UtcNow,
- });
+ Job newJob = new Job();
+ newJob.Name = jobName;
+ newJob.CreationDate = DateTime.UtcNow;
+ newJob.User = _authentication.CurrentUser;
+ newJob.Rml = Adapter.Rmls.FirstOrDefault();
+
+ SelectedJob = newJob;
+ LoadJob();
+ }
}
}