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();
}
}
}
}