diff options
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs')
| -rw-r--r-- | Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs | 415 |
1 files changed, 312 insertions, 103 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs index ca1c95a03..6fbd5852d 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs @@ -9,17 +9,22 @@ using System.Threading.Tasks; using System.Windows.Data; using Tango.Core.Commands; using Tango.Core.Helpers; -using Tango.DAL.Observables; +using Tango.Integration.Observables; using Tango.MachineStudio.Common.Notifications; using Tango.SharedUI; using SimpleValidator.Extensions; +using Tango.MachineStudio.Common.StudioApplication; +using Tango.MachineStudio.Common; namespace Tango.MachineStudio.MachineDesigner.ViewModels { - public class MainViewVM : ViewModel + public class MainViewVM : ViewModel, IModuleRequestListener { private bool _isSaving; private INotificationProvider _notification; + + + #region Properties private ObservablesEntitiesAdapter _adapter; /// <summary> @@ -33,7 +38,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels private Machine _machine; /// <summary> - /// Gets or sets the machine. + /// Gets or sets the current editable machine. /// </summary> public Machine Machine { @@ -42,6 +47,9 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } private Machine _selectedMachine; + /// <summary> + /// Gets or sets the selected machine from the drop down. + /// </summary> public Machine SelectedMachine { get { return _selectedMachine; } @@ -50,7 +58,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels private Configuration _configuration; /// <summary> - /// Gets or sets the configuration. + /// Gets or sets the editable machine configuration. /// </summary> public Configuration Configuration { @@ -69,17 +77,18 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } private ObservableCollection<Configuration> _history; - + /// <summary> + /// Gets or sets the machine configuration history. + /// </summary> public ObservableCollection<Configuration> History { get { return _history; } set { _history = value; RaisePropertyChangedAuto(); } } - private Configuration _selectedHistoryConfiguration; /// <summary> - /// Gets or sets the selected history configuration. + /// Gets or sets the machine selected configuration from history. /// </summary> public Configuration SelectedHistoryConfiguration { @@ -88,20 +97,49 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } private String _filter; - + /// <summary> + /// Gets or sets the configuration components filter. + /// </summary> public String Filter { get { return _filter; } set { _filter = value; RaisePropertyChangedAuto(); OnFilterChanged(); } } + #endregion + + #region Commands + + /// <summary> + /// Gets or sets the save command. + /// </summary> public RelayCommand SaveCommand { get; set; } + /// <summary> + /// Gets or sets the add ids command. + /// </summary> public RelayCommand AddIdsCommand { get; set; } + /// <summary> + /// Gets or sets the remove ids command. + /// </summary> public RelayCommand RemoveIdsCommand { get; set; } /// <summary> + /// Gets or sets the set version configuration command. + /// </summary> + public RelayCommand SetVersionConfigurationCommand { get; set; } + + /// <summary> + /// Gets or sets the set as default command. + /// </summary> + public RelayCommand SetAsDefaultCommand { get; set; } + + #endregion + + #region Constructors + + /// <summary> /// Initializes a new instance of the <see cref="MainViewVM"/> class. /// </summary> public MainViewVM(INotificationProvider notification) @@ -117,9 +155,18 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels SaveCommand = new RelayCommand(Save, (x) => !_isSaving); AddIdsCommand = new RelayCommand(AddIds, (x) => !_isSaving && Configuration.IdsPacks.Count < 8); RemoveIdsCommand = new RelayCommand(RemoveIds, (x) => !_isSaving && SelectedIds != null); + SetVersionConfigurationCommand = new RelayCommand(SetVersionConfiguration,(x) => !_isSaving); + SetAsDefaultCommand = new RelayCommand(SetAsDefaultConfiguration,(x) => !_isSaving); } - private void OnSelectedMachineChanged() + #endregion + + #region Virtual Methods + + /// <summary> + /// Called when the selected machine has changed. + /// </summary> + protected virtual void OnSelectedMachineChanged() { if (SelectedMachine != null) { @@ -133,136 +180,224 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } - public void DropIdsPack(IdsPack idsPack1, IdsPack idsPack2) + /// <summary> + /// Called when the history configuration has been selected + /// </summary> + protected virtual void OnHistoryConfigurationSelected() { - Configuration.IdsPacks.Swap(idsPack1, idsPack2); + if (SelectedHistoryConfiguration != null) + { + Configuration = SelectedHistoryConfiguration.CloneConfiguration(); + } } - private void OnHistoryConfigurationSelected() + /// <summary> + /// Called when the filter has changed + /// </summary> + protected virtual void OnFilterChanged() { - if (SelectedHistoryConfiguration != null) + + + List<ICollectionView> collections = new List<ICollectionView>(); + collections.Add(Adapter.ApplicationDisplayPanelVersionsViewSource); + collections.Add(Adapter.ApplicationVersionsViewSource); + collections.Add(Adapter.EmbeddedSoftwareVersionsViewSource); + collections.Add(Adapter.EmbeddedFirmwareVersionsViewSource); + collections.Add(Adapter.ApplicationOsVersionsViewSource); + collections.Add(Adapter.ApplicationVersionsViewSource); + collections.Add(Adapter.DispenserTypesViewSource); + collections.Add(Adapter.CartridgeTypesViewSource); + collections.Add(Adapter.LiquidTypesViewSource); + collections.Add(Adapter.MidTankTypesViewSource); + collections.Add(Adapter.HardwareVersionsViewSource); + + foreach (var collection in collections) { - Configuration = SelectedHistoryConfiguration.CloneConfiguration(); + collection.Filter = (x) => + { + foreach (var prop in x.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(y => y.PropertyType == typeof(String))) + { + String value = prop.GetValue(x).ToStringSafe(); + + if (value != null) + { + if (value.ToLower().Contains(Filter.ToLower())) + { + return true; + } + } + } + + return false; + }; } } + #endregion + + #region Drag Drop Handlers + + /// <summary> + /// Drops the ids pack. + /// </summary> + /// <param name="idsPack1">The ids pack1.</param> + /// <param name="idsPack2">The ids pack2.</param> + public void DropIdsPack(IdsPack idsPack1, IdsPack idsPack2) + { + Configuration.IdsPacks.Swap(idsPack1, idsPack2); + } + + /// <summary> + /// Drops the touch panel. + /// </summary> + /// <param name="applicationDisplayPanelVersion">The application display panel version.</param> public void DropTouchPanel(ApplicationDisplayPanelVersion applicationDisplayPanelVersion) { - Configuration.ApplicationDisplayPanelVersions = applicationDisplayPanelVersion; + Configuration.ApplicationDisplayPanelVersion = applicationDisplayPanelVersion; Configuration.ApplicationDisplayPanelVersionGuid = applicationDisplayPanelVersion.Guid; } + /// <summary> + /// Drops the application firmware version. + /// </summary> + /// <param name="applicationFirmwareVersion">The application firmware version.</param> public void DropApplicationFirmwareVersion(ApplicationFirmwareVersion applicationFirmwareVersion) { - Configuration.ApplicationFirmwareVersions = applicationFirmwareVersion; + Configuration.ApplicationFirmwareVersion = applicationFirmwareVersion; Configuration.ApplicationFirmwareVersionGuid = applicationFirmwareVersion.Guid; } + /// <summary> + /// Drops the application version. + /// </summary> + /// <param name="applicationVersion">The application version.</param> public void DropApplicationVersion(ApplicationVersion applicationVersion) { - Configuration.ApplicationVersions = applicationVersion; + Configuration.ApplicationVersion = applicationVersion; Configuration.ApplicationVersionGuid = applicationVersion.Guid; } + /// <summary> + /// Drops the hardware version. + /// </summary> + /// <param name="hardwareVersion">The hardware version.</param> public void DropHardwareVersion(HardwareVersion hardwareVersion) { - Configuration.HardwareVersions = hardwareVersion; + Configuration.HardwareVersion = hardwareVersion; Configuration.HardwareVersionGuid = hardwareVersion.Guid; } + /// <summary> + /// Drops the embedded firmware. + /// </summary> + /// <param name="embeddedFirmwareVersion">The embedded firmware version.</param> public void DropEmbeddedFirmware(EmbeddedFirmwareVersion embeddedFirmwareVersion) { - Configuration.EmbeddedFirmwareVersions = embeddedFirmwareVersion; + Configuration.EmbeddedFirmwareVersion = embeddedFirmwareVersion; Configuration.EmbeddedFirmwareVersionGuid = embeddedFirmwareVersion.Guid; } + /// <summary> + /// Drops the embedded software. + /// </summary> + /// <param name="embeddedSoftwareVersion">The embedded software version.</param> public void DropEmbeddedSoftware(EmbeddedSoftwareVersion embeddedSoftwareVersion) { - Configuration.EmbeddedSoftwareVersions = embeddedSoftwareVersion; + Configuration.EmbeddedSoftwareVersion = embeddedSoftwareVersion; Configuration.EmbeddedSoftwareVersionGuid = embeddedSoftwareVersion.Guid; } + /// <summary> + /// Drops the application os version. + /// </summary> + /// <param name="applicationOsVersion">The application os version.</param> public void DropApplicationOsVersion(ApplicationOsVersion applicationOsVersion) { - Configuration.ApplicationOsVersions = applicationOsVersion; + Configuration.ApplicationOsVersion = applicationOsVersion; Configuration.ApplicationVersionGuid = applicationOsVersion.Guid; } - private void RemoveIds() - { - Configuration.IdsPacks.Remove(SelectedIds); - SelectedIds = null; - } - - private void AddIds() - { - Configuration.IdsPacks.Add(new IdsPack() { Configuration = Configuration }); - InvalidateRelayCommands(); - } - + /// <summary> + /// Drops the type of the cartridge. + /// </summary> + /// <param name="cartridgeType">Type of the cartridge.</param> + /// <param name="idsPack">The ids pack.</param> public void DropCartridgeType(CartridgeType cartridgeType, IdsPack idsPack) { - idsPack.CartridgeTypes = cartridgeType; + idsPack.CartridgeType = cartridgeType; idsPack.CartridgeTypeGuid = cartridgeType.Guid; } - public void DropDispenser(Dispenser dispenser, IdsPack idsPack) + /// <summary> + /// Drops the dispenser. + /// </summary> + /// <param name="dispenserType">The dispenser.</param> + /// <param name="idsPack">The ids pack.</param> + public void DropDispenserType(DispenserType dispenserType, IdsPack idsPack) { - idsPack.Dispenser = dispenser; - idsPack.DispenserGuid = dispenser.Guid; + idsPack.DispenserType = dispenserType; + idsPack.DispenserTypeGuid = dispenserType.Guid; } + /// <summary> + /// Drops the type of the mid tank. + /// </summary> + /// <param name="midTankType">Type of the mid tank.</param> + /// <param name="idsPack">The ids pack.</param> public void DropMidTankType(MidTankType midTankType, IdsPack idsPack) { - idsPack.MidTankTypes = midTankType; + idsPack.MidTankType = midTankType; idsPack.MidTankTypeGuid = midTankType.Guid; } + /// <summary> + /// Drops the type of the liquid. + /// </summary> + /// <param name="liquidType">Type of the liquid.</param> + /// <param name="idsPack">The ids pack.</param> public void DropLiquidType(LiquidType liquidType, IdsPack idsPack) { - idsPack.LiquidTypes = liquidType; + idsPack.LiquidType = liquidType; idsPack.LiquidTypeGuid = liquidType.Guid; } - private void OnFilterChanged() + /// <summary> + /// Drops the ids formula. + /// </summary> + /// <param name="idsPackFormula">The ids pack formula.</param> + /// <param name="idsPack">The ids pack.</param> + /// <exception cref="NotImplementedException"></exception> + public void DropIdsFormula(IdsPackFormula idsPackFormula, IdsPack idsPack) { + idsPack.IdsPackFormula = idsPackFormula; + idsPack.IdsPackFormulaGuid = idsPackFormula.Guid; + } + #endregion - List<ICollectionView> collections = new List<ICollectionView>(); - collections.Add(Adapter.ApplicationDisplayPanelVersionsViewSource); - collections.Add(Adapter.ApplicationVersionsViewSource); - collections.Add(Adapter.EmbeddedSoftwareVersionsViewSource); - collections.Add(Adapter.EmbeddedFirmwareVersionsViewSource); - collections.Add(Adapter.ApplicationOsVersionsViewSource); - collections.Add(Adapter.ApplicationVersionsViewSource); - collections.Add(Adapter.DispensersViewSource); - collections.Add(Adapter.CartridgeTypesViewSource); - collections.Add(Adapter.LiquidTypesViewSource); - collections.Add(Adapter.MidTankTypesViewSource); - collections.Add(Adapter.HardwareVersionsViewSource); + #region Private Methods - foreach (var collection in collections) - { - collection.Filter = (x) => - { - foreach (var prop in x.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(y => y.PropertyType == typeof(String))) - { - String value = prop.GetValue(x).ToStringSafe(); - - if (value != null) - { - if (value.ToLower().Contains(Filter.ToLower())) - { - return true; - } - } - } + /// <summary> + /// Removes the selected IDS pack. + /// </summary> + private void RemoveIds() + { + Configuration.IdsPacks.Remove(SelectedIds); + SelectedIds = null; + } - return false; - }; - } + /// <summary> + /// Adds a new IDS pack. + /// </summary> + private void AddIds() + { + Configuration.IdsPacks.Add(new IdsPack() { Configuration = Configuration }); + InvalidateRelayCommands(); } + /// <summary> + /// Saves the current machine configuration. + /// </summary> private async void Save() { foreach (var ids in Configuration.IdsPacks) @@ -276,9 +411,9 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels List<String> errors = new List<string>(); - if (Machine.MachineVersions == null) + if (Machine.MachineVersion == null) { - errors.Add("Machine Version is required."); + errors.Add("Machine version is required."); } if (Machine.Name.IsNullOrWhiteSpace()) @@ -301,39 +436,39 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels errors.Add("Configuration name is required."); } - if (Configuration.ApplicationDisplayPanelVersions == null) + if (Configuration.ApplicationDisplayPanelVersion == null) { errors.Add("Touch Panel is required."); } - if (Configuration.ApplicationFirmwareVersions == null) + if (Configuration.ApplicationFirmwareVersion == null) { - errors.Add("Application Firmware is required."); + errors.Add("Application firmware is required."); } - if (Configuration.ApplicationOsVersions == null) + if (Configuration.ApplicationOsVersion == null) { - errors.Add("Application OS Version is required."); + errors.Add("Application operation system is required."); } - if (Configuration.ApplicationVersions == null) + if (Configuration.ApplicationVersion == null) { - errors.Add("Application Version is required."); + errors.Add("Application version is required."); } - if (Configuration.EmbeddedFirmwareVersions == null) + if (Configuration.EmbeddedFirmwareVersion == null) { - errors.Add("Embedded Firmware is required."); + errors.Add("Embedded firmware is required."); } - if (Configuration.EmbeddedSoftwareVersions == null) + if (Configuration.EmbeddedSoftwareVersion == null) { - errors.Add("Embedded Software is required."); + errors.Add("Embedded software is required."); } - if (Configuration.HardwareVersions == null) + if (Configuration.HardwareVersion == null) { - errors.Add("Hardware Version is required."); + errors.Add("Hardware version is required."); } foreach (var pack in Configuration.IdsPacks) @@ -343,31 +478,22 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels errors.Add(String.Format("Name is required on IDS pack number '{0}'.", Configuration.IdsPacks.IndexOf(pack) + 1)); continue; } - if (pack.CartridgeTypes == null) + if (pack.CartridgeType == null) { errors.Add(String.Format("Cartridge type is required on IDS pack '{0}'.", pack.Name)); } - if (pack.Dispenser == null) + if (pack.DispenserType == null) { - errors.Add(String.Format("Dispenser is required on IDS pack '{0}'.", pack.Name)); + errors.Add(String.Format("Dispenser type is required on IDS pack '{0}'.", pack.Name)); } - if (pack.LiquidTypes == null) + if (pack.LiquidType == null) { errors.Add(String.Format("Liquid type is required on IDS pack '{0}'.", pack.Name)); } - if (pack.MidTankTypes == null) + if (pack.MidTankType == null) { errors.Add(String.Format("Mid Tank type is required on IDS pack '{0}'.", pack.Name)); } - - var taken_ids = Adapter.Machines.Where(x => x.SerialNumber.ToLower() != Machine.SerialNumber).SelectMany(x => x.MachinesConfigurations).Select(x => x.Configuration).SelectMany(x => x.IdsPacks).ToList().FirstOrDefault(x => x.Dispenser.SerialNumber.ToLower() == pack.Dispenser.SerialNumber.ToLower()); - if (taken_ids != null && taken_ids.Configuration.MachinesConfigurations.Count > 0) - { - if (!_notification.ShowQuestion(String.Format("The Dispenser '{1}' on IDS pack '{0}' is already taken by another machine ('{2}', '{3}'). Are you sure you want to assign it to this machine?", pack.Name, pack.Dispenser.SerialNumber, taken_ids.Configuration.MachinesConfigurations.First().Machine.Name, taken_ids.Configuration.MachinesConfigurations.First().Machine.SerialNumber))) - { - return; - } - } } if (errors.Count > 0) @@ -403,7 +529,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels Configuration = Configuration, Machine = Machine, }); - await Machine.SaveAsync(); + await Machine.SaveAsync(Adapter.Context); Machine = Adapter.Machines.SingleOrDefault(x => x.Guid == Machine.Guid); Configuration = Machine.Configuration.CloneConfiguration(); @@ -419,7 +545,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels machine.Name = Machine.Name; machine.SerialNumber = Machine.SerialNumber; - machine.Configuration = Configuration; machine.Organization = Machine.Organization; @@ -431,8 +556,14 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels Machine = machine }); } + else + { + machine.Configuration.DefferedDelete(Adapter.Context); + } - await machine.SaveAsync(); + machine.Configuration = Configuration; + + await machine.SaveAsync(Adapter.Context); Machine = Adapter.Machines.SingleOrDefault(x => x.Guid == machine.Guid); Configuration = Machine.Configuration.CloneConfiguration(); @@ -453,10 +584,88 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } + /// <summary> + /// Sets the specified machine history. + /// </summary> + /// <param name="machine">The machine.</param> private void SetHistory(Machine machine) { History = machine.MachinesConfigurations.Select(x => x.Configuration).ToObservableCollection(); History.Insert(0, machine.Configuration); } + + /// <summary> + /// Sets the current configuration to the selected machine version default configuration. + /// </summary> + private void SetVersionConfiguration() + { + if (Machine.MachineVersion != null) + { + Configuration = Machine.MachineVersion.DefaultConfiguration.CloneConfiguration(); + } + else + { + _notification.ShowError("No machine version selected."); + } + } + + /// <summary> + /// Sets the current configuration as a default machine version configuration. + /// </summary> + private void SetAsDefaultConfiguration() + { + _notification.ShowModalDialog<MachineVersionDialogVM>(async (vm) => + { + try + { + using (_notification.PushTaskItem("Saving Default Configuration...")) + { + if (vm.SelectedVersion != null) + { + vm.SelectedVersion.DefaultConfiguration = Configuration.CloneConfiguration(); + vm.SelectedVersion.DefaultConfigurationGuid = vm.SelectedVersion.DefaultConfiguration.Guid; + await vm.SelectedVersion.SaveAsync(Adapter.Context); + } + else + { + MachineVersion newVersion = new MachineVersion(); + newVersion.Version = vm.Version; + newVersion.Name = vm.VersionName; + + newVersion.DefaultConfiguration = Configuration.CloneConfiguration(); + newVersion.DefaultConfigurationGuid = newVersion.DefaultConfiguration.Guid; + await newVersion.SaveAsync(Adapter.Context); + } + } + } + catch (Exception ex) + { + _notification.ShowError(ex.Message); + } + + }, () => + { + + }); + } + + #endregion + + #region IModuleRequestListener + + /// <summary> + /// Called when the request has been made. + /// </summary> + /// <param name="module">The module instance.</param> + /// <param name="args">The arguments.</param> + public void OnRequestModule(IStudioModule module, object args) + { + if (module is MachineDesignerModule) + { + SelectedMachine = Adapter.Machines.SingleOrDefault(x => x.Guid == (args as Machine).Guid); + } + } + + #endregion } } |
