using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core.Commands; using Tango.DAL.Observables; using Tango.MachineStudio.Common.Notifications; using Tango.SharedUI; namespace Tango.MachineStudio.MachineDesigner.ViewModels { public class MainViewVM : ViewModel { private bool _isSaving; private INotificationProvider _notification; private ObservablesEntitiesAdapter _adapter; /// /// Gets or sets the db adapter. /// public ObservablesEntitiesAdapter Adapter { get { return _adapter; } set { _adapter = value; RaisePropertyChangedAuto(); } } private Machine _machine; /// /// Gets or sets the machine. /// public Machine Machine { get { return _machine; } set { _machine = value; RaisePropertyChangedAuto(); OnMachineChanged(); } } private Configuration _configuration; /// /// Gets or sets the configuration. /// public Configuration Configuration { get { return _configuration; } set { _configuration = value; RaisePropertyChangedAuto(); } } private IdsPack _selectedIds; /// /// Gets or sets the selected ids pack. /// public IdsPack SelectedIds { get { return _selectedIds; } set { _selectedIds = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } public RelayCommand SaveCommand { get; set; } public RelayCommand AddIdsCommand { get; set; } public RelayCommand RemoveIdsCommand { get; set; } /// /// Initializes a new instance of the class. /// public MainViewVM(INotificationProvider notification) { _notification = notification; Adapter = ObservablesEntitiesAdapter.Instance; Configuration = new Configuration(); Configuration.Name = "Untitled"; SaveCommand = new RelayCommand(Save, (x) => !_isSaving); AddIdsCommand = new RelayCommand(AddIds, (x) => !_isSaving && Configuration.IdsPacks.Count < 8); RemoveIdsCommand = new RelayCommand(RemoveIds, (x) => !_isSaving && SelectedIds != null); } private void OnMachineChanged() { if (Machine != null) { Configuration = Machine.Configuration; } else { Configuration = new Configuration() { Name = "Untitled" }; } } public void DropTouchPanel(ApplicationDisplayPanelVersion applicationDisplayPanelVersion) { Configuration.ApplicationDisplayPanelVersions = applicationDisplayPanelVersion; Configuration.ApplicationDisplayPanelVersionGuid = applicationDisplayPanelVersion.Guid; } public void DropApplicationVersion(ApplicationVersion applicationVersion) { Configuration.ApplicationVersions = applicationVersion; Configuration.ApplicationVersionGuid = applicationVersion.Guid; } public void DropEmbeddedFirmware(EmbeddedFirmwareVersion embeddedFirmwareVersion) { Configuration.EmbeddedFirmwareVersions = embeddedFirmwareVersion; Configuration.EmbeddedFirmwareVersionGuid = embeddedFirmwareVersion.Guid; } public void DropEmbeddedSoftware(EmbeddedSoftwareVersion embeddedSoftwareVersion) { Configuration.EmbeddedSoftwareVersions = embeddedSoftwareVersion; Configuration.EmbeddedSoftwareVersionGuid = embeddedSoftwareVersion.Guid; } private void RemoveIds() { Configuration.IdsPacks.Remove(SelectedIds); SelectedIds = null; } private void AddIds() { Configuration.IdsPacks.Add(new IdsPack()); InvalidateRelayCommands(); } public void DropCartridgeType(CartridgeType cartridgeType, IdsPack idsPack) { idsPack.CartridgeTypes = cartridgeType; idsPack.CartridgeTypeGuid = cartridgeType.Guid; } public void DropDispenser(Dispenser dispenser, IdsPack idsPack) { idsPack.Dispenser = dispenser; idsPack.DispenserGuid = dispenser.Guid; } public void DropMidTankType(MidTankType midTankType, IdsPack idsPack) { idsPack.MidTankTypes = midTankType; idsPack.MidTankTypeGuid = midTankType.Guid; } public void DropLiquidType(LiquidType liquidType, IdsPack idsPack) { idsPack.LiquidTypes = liquidType; idsPack.LiquidTypeGuid = liquidType.Guid; } private async void Save() { _isSaving = true; InvalidateRelayCommands(); try { using (_notification.PushTaskItem("Saving Configuration...")) { await Configuration.SaveAsync(); Configuration = Adapter.Configurations.SingleOrDefault(x => x.Guid == Configuration.Guid); } } catch (Exception ex) { _notification.ShowError("An error occurred while trying to save the configuration" + Environment.NewLine + ex.Message); } finally { _isSaving = false; InvalidateRelayCommands(); } } } }