aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs110
1 files changed, 104 insertions, 6 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs
index 06a3c9ba4..6d605ed1c 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs
@@ -6,12 +6,16 @@ using System.Text;
using System.Threading.Tasks;
using Tango.Core.Commands;
using Tango.Integration.Observables;
+using Tango.MachineStudio.Common.Notifications;
using Tango.SharedUI;
namespace Tango.MachineStudio.HardwareDesigner.ViewModels
{
public class MainViewVM : ViewModel
{
+ private INotificationProvider _notification;
+ private bool _isNew;
+
private ObservablesEntitiesAdapter _adapter;
public ObservablesEntitiesAdapter Adapter
{
@@ -30,21 +34,34 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels
public HardwareVersion CurrentVersion
{
get { return _currentVersion; }
- set { _currentVersion = value; RaisePropertyChangedAuto(); }
+ set { _currentVersion = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
}
public RelayCommand SaveCommand { get; set; }
- public MainViewVM()
+ public RelayCommand DeleteCommand { get; set; }
+
+ public RelayCommand NewCommand { get; set; }
+
+ public MainViewVM(INotificationProvider notification)
{
- Adapter = ObservablesEntitiesAdapter.Instance;
+ _notification = notification;
- SaveCommand = new RelayCommand(Save);
+ Adapter = ObservablesEntitiesAdapter.Instance;
+ SaveCommand = new RelayCommand(Save, () => CurrentVersion != null);
+ NewCommand = new RelayCommand(New);
+ DeleteCommand = new RelayCommand(Delete, () => !_isNew && CurrentVersion != null);
}
private void OnSelectedVersionChanged()
{
- CurrentVersion = SelectedVersion.Clone();
+ if (SelectedVersion != null)
+ {
+ _isNew = false;
+ CurrentVersion = SelectedVersion.Clone();
+ }
+
+ InvalidateRelayCommands();
}
public void OnRemoveDancer(HardwareDancer dancer)
@@ -86,11 +103,92 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels
}
}
- private void Save()
+ private void New()
+ {
+ String name = _notification.ShowTextInput("Enter hardware version name", "Name");
+
+ if (!String.IsNullOrWhiteSpace(name))
+ {
+ SelectedVersion = null;
+ CurrentVersion = new HardwareVersion();
+ CurrentVersion.Version = Adapter.HardwareVersions.Max(x => x.Version) + 1;
+ CurrentVersion.Name = name;
+
+ _isNew = true;
+ InvalidateRelayCommands();
+ }
+ }
+
+ private async void Save()
{
if (CurrentVersion != null)
{
+ using (_notification.PushTaskItem("Saving hardware version..."))
+ {
+ HardwareVersion realVersion = null;
+
+ if (_isNew)
+ {
+ realVersion = CurrentVersion;
+ }
+ else
+ {
+ realVersion = Adapter.HardwareVersions.SingleOrDefault(x => x.Guid == SelectedVersion.Guid);
+ realVersion.Version = CurrentVersion.Version;
+ realVersion.Name = CurrentVersion.Name;
+ realVersion.HardwareDancers.ToList().ForEach(x => x.DefferedDelete(Adapter.Context));
+ realVersion.HardwareMotors.ToList().ForEach(x => x.DefferedDelete(Adapter.Context));
+ realVersion.HardwarePidControls.ToList().ForEach(x => x.DefferedDelete(Adapter.Context));
+
+ realVersion.HardwareDancers.Clear();
+ realVersion.HardwareMotors.Clear();
+ realVersion.HardwarePidControls.Clear();
+
+
+ foreach (var item in CurrentVersion.HardwareDancers.ToList().Select(x => x.Clone()))
+ {
+ item.HardwareVersionGuid = realVersion.Guid;
+ realVersion.HardwareDancers.Add(item);
+ }
+
+ foreach (var item in CurrentVersion.HardwareMotors.ToList().Select(x => x.Clone()))
+ {
+ item.HardwareVersionGuid = realVersion.Guid;
+ realVersion.HardwareMotors.Add(item);
+ }
+
+ foreach (var item in CurrentVersion.HardwarePidControls.ToList().Select(x => x.Clone()))
+ {
+ item.HardwareVersionGuid = realVersion.Guid;
+ realVersion.HardwarePidControls.Add(item);
+ }
+ }
+
+
+
+ if (_isNew)
+ {
+ Adapter.Context.HardwareVersions.Add(realVersion);
+ }
+
+ await realVersion.SaveAsync(Adapter.Context);
+
+ SelectedVersion = Adapter.HardwareVersions.SingleOrDefault(x => x.Guid == realVersion.Guid);
+ }
+ }
+ }
+
+ private void Delete()
+ {
+ if (_notification.ShowQuestion("Are you sure you want to delete this hardware version?"))
+ {
+ using (_notification.PushTaskItem("Deleting hardware version..."))
+ {
+ SelectedVersion.DeleteAsync(Adapter.Context);
+ SelectedVersion = null;
+ CurrentVersion = null;
+ }
}
}
}