diff options
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.cs | 292 |
1 files changed, 227 insertions, 65 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 a2c7e4460..ee5e0e39c 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 @@ -9,6 +9,7 @@ using Tango.BL.Entities; using Tango.MachineStudio.Common.Notifications; using Tango.SharedUI; using Tango.BL; +using Tango.SharedUI.Components; namespace Tango.MachineStudio.HardwareDesigner.ViewModels { @@ -24,6 +25,62 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels set { _adapter = value; RaisePropertyChangedAuto(); } } + private SelectedObjectCollection<HardwareMotorType> _motorTypes; + public SelectedObjectCollection<HardwareMotorType> MotorTypes + { + get { return _motorTypes; } + set { _motorTypes = value; RaisePropertyChangedAuto(); } + } + + private ObservableCollection<HardwareMotorType> _selectedMotorTypes; + public ObservableCollection<HardwareMotorType> SelectedMotorTypes + { + get { return _selectedMotorTypes; } + set { _selectedMotorTypes = value; RaisePropertyChangedAuto(); } + } + + private SelectedObjectCollection<HardwareDancerType> _dancerTypes; + public SelectedObjectCollection<HardwareDancerType> DancerTypes + { + get { return _dancerTypes; } + set { _dancerTypes = value; RaisePropertyChangedAuto(); } + } + + private ObservableCollection<HardwareDancerType> _selectedDancerTypes; + public ObservableCollection<HardwareDancerType> SelectedDancerTypes + { + get { return _selectedDancerTypes; } + set { _selectedDancerTypes = value; RaisePropertyChangedAuto(); } + } + + private SelectedObjectCollection<HardwarePidControlType> _pidControlTypes; + public SelectedObjectCollection<HardwarePidControlType> PidControlTypes + { + get { return _pidControlTypes; } + set { _pidControlTypes = value; RaisePropertyChangedAuto(); } + } + + private ObservableCollection<HardwarePidControlType> _selectedPidControlTypes; + public ObservableCollection<HardwarePidControlType> SelectedPidControlTypes + { + get { return _selectedPidControlTypes; } + set { _selectedPidControlTypes = value; RaisePropertyChangedAuto(); } + } + + private SelectedObjectCollection<HardwareWinderType> _winderTypes; + public SelectedObjectCollection<HardwareWinderType> WinderTypes + { + get { return _winderTypes; } + set { _winderTypes = value; RaisePropertyChangedAuto(); } + } + + private ObservableCollection<HardwareWinderType> _selectedWinderTypes; + public ObservableCollection<HardwareWinderType> SelectedWinderTypes + { + get { return _selectedWinderTypes; } + set { _selectedWinderTypes = value; RaisePropertyChangedAuto(); } + } + private HardwareVersion _selectedVersion; public HardwareVersion SelectedVersion { @@ -51,6 +108,20 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels } } + private Object _selectedHardwareObjectType; + public Object SelectedHardwareObjectType + { + get { return _selectedHardwareObjectType; } + set + { + _selectedHardwareObjectType = null; + RaisePropertyChangedAuto(); + _selectedHardwareObjectType = value; + RaisePropertyChangedAuto(); + OnSelectedHardwareObjectTypeChanged(); + } + } + public RelayCommand SaveCommand { get; set; } public RelayCommand DeleteCommand { get; set; } @@ -65,77 +136,115 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels SaveCommand = new RelayCommand(Save, () => CurrentVersion != null); NewCommand = new RelayCommand(New); DeleteCommand = new RelayCommand(Delete, () => !_isNew && CurrentVersion != null); - } - - private void OnSelectedVersionChanged() - { - if (SelectedVersion != null) - { - _isNew = false; - CurrentVersion = SelectedVersion.Clone(); - } - - InvalidateRelayCommands(); - } - public void OnRemoveDancer(HardwareDancer dancer) - { - CurrentVersion.HardwareDancers.Remove(dancer); + CurrentVersion = new HardwareVersion(); + CreateTemplate(CurrentVersion); } - public void OnRemoveMotor(HardwareMotor motor) + private void OnSelectedHardwareObjectTypeChanged() { - CurrentVersion.HardwareMotors.Remove(motor); - } + if (SelectedHardwareObjectType != null) + { + if (SelectedHardwareObjectType is SelectedObject<HardwareMotorType>) + { + var type = (SelectedHardwareObjectType as SelectedObject<HardwareMotorType>).Data; + var hardwareObj = CurrentVersion.HardwareMotors.SingleOrDefault(x => x.HardwareMotorType == type); - public void OnRemovePidControl(HardwarePidControl pidControl) - { - CurrentVersion.HardwarePidControls.Remove(pidControl); - } + if (hardwareObj != null) + { + SelectedHardwareObject = hardwareObj; + } + else + { + hardwareObj = new HardwareMotor() { HardwareMotorType = type }; + CurrentVersion.HardwareMotors.Add(hardwareObj); + SelectedHardwareObject = hardwareObj; + } + } + else if (SelectedHardwareObjectType is SelectedObject<HardwareDancerType>) + { + var type = (SelectedHardwareObjectType as SelectedObject<HardwareDancerType>).Data; + var hardwareObj = CurrentVersion.HardwareDancers.SingleOrDefault(x => x.HardwareDancerType == type); - public void OnRemoveWinder(HardwareWinder hardwareWinder) - { - CurrentVersion.HardwareWinders.Remove(hardwareWinder); - } + if (hardwareObj != null) + { + SelectedHardwareObject = hardwareObj; + } + else + { + hardwareObj = new HardwareDancer() { HardwareDancerType = type }; + CurrentVersion.HardwareDancers.Add(hardwareObj); + SelectedHardwareObject = hardwareObj; + } + } + else if (SelectedHardwareObjectType is SelectedObject<HardwarePidControlType>) + { + var type = (SelectedHardwareObjectType as SelectedObject<HardwarePidControlType>).Data; + var hardwareObj = CurrentVersion.HardwarePidControls.SingleOrDefault(x => x.HardwarePidControlType == type); - public void OnMotorDrop(HardwareMotorType motorType) - { - if (CheckCurrentVersionNull()) return; + if (hardwareObj != null) + { + SelectedHardwareObject = hardwareObj; + } + else + { + hardwareObj = new HardwarePidControl() { HardwarePidControlType = type }; + CurrentVersion.HardwarePidControls.Add(hardwareObj); + SelectedHardwareObject = hardwareObj; + } + } + else if (SelectedHardwareObjectType is SelectedObject<HardwareWinderType>) + { + var type = (SelectedHardwareObjectType as SelectedObject<HardwareWinderType>).Data; + var hardwareObj = CurrentVersion.HardwareWinders.SingleOrDefault(x => x.HardwareWinderType == type); - if (!CurrentVersion.HardwareMotors.ToList().Exists(x => x.HardwareMotorType == motorType)) - { - CurrentVersion.HardwareMotors.Add(new HardwareMotor() { HardwareMotorType = motorType }); + if (hardwareObj != null) + { + SelectedHardwareObject = hardwareObj; + } + else + { + hardwareObj = new HardwareWinder() { HardwareWinderType = type }; + CurrentVersion.HardwareWinders.Add(hardwareObj); + SelectedHardwareObject = hardwareObj; + } + } } } - public void OnDropDancer(HardwareDancerType dancerType) + private void CreateTemplate(HardwareVersion version) { - if (CheckCurrentVersionNull()) return; - - if (!CurrentVersion.HardwareDancers.ToList().Exists(x => x.HardwareDancerType == dancerType)) + if (version == null) { - CurrentVersion.HardwareDancers.Add(new HardwareDancer() { HardwareDancerType = dancerType }); + SelectedMotorTypes = new ObservableCollection<HardwareMotorType>(); + SelectedDancerTypes = new ObservableCollection<HardwareDancerType>(); + SelectedPidControlTypes = new ObservableCollection<HardwarePidControlType>(); + SelectedWinderTypes = new ObservableCollection<HardwareWinderType>(); } - } - - public void OnDropPidControl(HardwarePidControlType pidControlType) - { - if (CheckCurrentVersionNull()) return; - - if (!CurrentVersion.HardwarePidControls.ToList().Exists(x => x.HardwarePidControlType == pidControlType)) + else { - CurrentVersion.HardwarePidControls.Add(new HardwarePidControl() { HardwarePidControlType = pidControlType }); + SelectedMotorTypes = version.HardwareMotors.Select(x => x.HardwareMotorType).ToObservableCollection(); + SelectedDancerTypes = version.HardwareDancers.Select(x => x.HardwareDancerType).ToObservableCollection(); + SelectedPidControlTypes = version.HardwarePidControls.Select(x => x.HardwarePidControlType).ToObservableCollection(); + SelectedWinderTypes = version.HardwareWinders.Select(x => x.HardwareWinderType).ToObservableCollection(); } + + MotorTypes = new SelectedObjectCollection<HardwareMotorType>(Adapter.HardwareMotorTypes, SelectedMotorTypes); + DancerTypes = new SelectedObjectCollection<HardwareDancerType>(Adapter.HardwareDancerTypes, SelectedDancerTypes); + PidControlTypes = new SelectedObjectCollection<HardwarePidControlType>(Adapter.HardwarePidControlTypes, SelectedPidControlTypes); + WinderTypes = new SelectedObjectCollection<HardwareWinderType>(Adapter.HardwareWinderTypes, SelectedWinderTypes); } - public void OnDropWinder(HardwareWinderType hardwareWinderType) + private void OnSelectedVersionChanged() { - if (CheckCurrentVersionNull()) return; - - if (!CurrentVersion.HardwareWinders.ToList().Exists(x => x.HardwareWinderType == hardwareWinderType)) + if (SelectedVersion != null) { - CurrentVersion.HardwareWinders.Add(new HardwareWinder() { HardwareWinderType = hardwareWinderType }); + _isNew = false; + CurrentVersion = SelectedVersion.Clone(); + CreateTemplate(CurrentVersion); } + + InvalidateRelayCommands(); } private bool CheckCurrentVersionNull() @@ -159,7 +268,7 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels CurrentVersion = new HardwareVersion(); CurrentVersion.Version = Adapter.HardwareVersions.Max(x => x.Version) + 1; CurrentVersion.Name = name; - + CreateTemplate(CurrentVersion); _isNew = true; InvalidateRelayCommands(); } @@ -175,7 +284,12 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels if (_isNew) { - realVersion = CurrentVersion; + realVersion = CurrentVersion.Clone(); + + realVersion.HardwareMotors.ToList().Where(x => !SelectedMotorTypes.Contains(x.HardwareMotorType)).ToList().ForEach(x => realVersion.HardwareMotors.Remove(x)); + realVersion.HardwareDancers.ToList().Where(x => !SelectedDancerTypes.Contains(x.HardwareDancerType)).ToList().ForEach(x => realVersion.HardwareDancers.Remove(x)); + realVersion.HardwarePidControls.ToList().Where(x => !SelectedPidControlTypes.Contains(x.HardwarePidControlType)).ToList().ForEach(x => realVersion.HardwarePidControls.Remove(x)); + realVersion.HardwareWinders.ToList().Where(x => !SelectedWinderTypes.Contains(x.HardwareWinderType)).ToList().ForEach(x => realVersion.HardwareWinders.Remove(x)); } else { @@ -193,28 +307,76 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels realVersion.HardwarePidControls.Clear(); realVersion.HardwareWinders.Clear(); - - foreach (var item in CurrentVersion.HardwareDancers.ToList().Select(x => x.Clone())) + foreach (var type in SelectedDancerTypes) { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwareDancers.Add(item); + var item = CurrentVersion.HardwareDancers.SingleOrDefault(x => x.HardwareDancerType == type); + if (item != null) + { + item.HardwareVersionGuid = realVersion.Guid; + realVersion.HardwareDancers.Add(item); + } + else + { + realVersion.HardwareDancers.Add(new HardwareDancer() + { + HardwareVersionGuid = realVersion.Guid, + HardwareDancerType = type + }); + } } - foreach (var item in CurrentVersion.HardwareMotors.ToList().Select(x => x.Clone())) + foreach (var type in SelectedMotorTypes) { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwareMotors.Add(item); + var item = CurrentVersion.HardwareMotors.SingleOrDefault(x => x.HardwareMotorType == type); + if (item != null) + { + item.HardwareVersionGuid = realVersion.Guid; + realVersion.HardwareMotors.Add(item); + } + else + { + realVersion.HardwareMotors.Add(new HardwareMotor() + { + HardwareVersionGuid = realVersion.Guid, + HardwareMotorType = type + }); + } } - foreach (var item in CurrentVersion.HardwarePidControls.ToList().Select(x => x.Clone())) + foreach (var type in SelectedPidControlTypes) { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwarePidControls.Add(item); + var item = CurrentVersion.HardwarePidControls.SingleOrDefault(x => x.HardwarePidControlType == type); + if (item != null) + { + item.HardwareVersionGuid = realVersion.Guid; + realVersion.HardwarePidControls.Add(item); + } + else + { + realVersion.HardwarePidControls.Add(new HardwarePidControl() + { + HardwareVersionGuid = realVersion.Guid, + HardwarePidControlType = type + }); + } } - foreach (var item in CurrentVersion.HardwareWinders.ToList().Select(x => x.Clone())) + + foreach (var type in SelectedWinderTypes) { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwareWinders.Add(item); + var item = CurrentVersion.HardwareWinders.SingleOrDefault(x => x.HardwareWinderType == type); + if (item != null) + { + item.HardwareVersionGuid = realVersion.Guid; + realVersion.HardwareWinders.Add(item); + } + else + { + realVersion.HardwareWinders.Add(new HardwareWinder() + { + HardwareVersionGuid = realVersion.Guid, + HardwareWinderType = type + }); + } } } |
