aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs250
1 files changed, 244 insertions, 6 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs
index 9e8a9fe34..a2baec8b8 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs
@@ -3,13 +3,19 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Media;
using System.Windows.Threading;
+using Tango.Core;
using Tango.Core.Commands;
using Tango.Core.DI;
using Tango.Integration.Operation;
+using Tango.PMR.IFS;
using Tango.PPC.Common;
+using Tango.PPC.Common.Connection;
using Tango.PPC.Common.Modules;
using Tango.PPC.Common.Navigation;
+using Tango.PPC.UI.Views;
using Tango.PPC.UI.ViewsContracts;
using Tango.SharedUI;
@@ -22,6 +28,7 @@ namespace Tango.PPC.UI.ViewModels
public class LayoutViewVM : PPCViewModel<ILayoutView>
{
private JobHandler _jobHandler;
+ private bool _resettingDevice;
/// <summary>
/// Gets or sets the module loader.
@@ -29,6 +36,86 @@ namespace Tango.PPC.UI.ViewModels
[TangoInject]
public IPPCModuleLoader ModuleLoader { get; set; }
+ #region Classes
+
+ public class CartridgeModel : ExtendedObject
+ {
+ private IMachineProvider _machineProvider;
+
+ public CartridgeStatus Status { get; set; }
+
+ public bool InProgress
+ {
+ get { return Status.State == CartridgeState.Filling || Status.State == CartridgeState.Emptying; }
+ }
+
+ public String Message
+ {
+ get { return Status.Cartridge.Slot == PMR.Diagnostics.CartridgeSlot.Ink ? "Ink filling is in progress..." : "Waste emptying is in progress..."; }
+ }
+
+ public Brush Brush
+ {
+ get
+ {
+ if (Status.Cartridge.Slot == PMR.Diagnostics.CartridgeSlot.Ink)
+ {
+ try
+ {
+ int index = Status.Cartridge.Index;
+
+ var idsPack = _machineProvider.Machine.Configuration.NoneEmptyIdsPacks.FirstOrDefault(x => x.PackIndex == index);
+
+ if (idsPack != null)
+ {
+ switch (idsPack.LiquidType.Type)
+ {
+ case BL.Enumerations.LiquidTypes.Cyan:
+ return Application.Current.Resources["TangoCyanInkBrush"] as Brush;
+ case BL.Enumerations.LiquidTypes.Magenta:
+ return Application.Current.Resources["TangoMagentaInkBrush"] as Brush;
+ case BL.Enumerations.LiquidTypes.Yellow:
+ return Application.Current.Resources["TangoYellowInkBrush"] as Brush;
+ case BL.Enumerations.LiquidTypes.Black:
+ return Application.Current.Resources["TangoBlackInkBrush"] as Brush;
+ case BL.Enumerations.LiquidTypes.Lubricant:
+ return Application.Current.Resources["TangoLubricantBrush"] as Brush;
+ case BL.Enumerations.LiquidTypes.Cleaner:
+ return Application.Current.Resources["TangoCleanerBrush"] as Brush;
+ case BL.Enumerations.LiquidTypes.TransparentInk:
+ return Application.Current.Resources["TangoTransparentInkBrush"] as Brush;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error generating ink filling brush.");
+ }
+
+ return Application.Current.Resources["TangoPrimaryAccentBrush"] as Brush;
+ }
+ else
+ {
+ return Application.Current.Resources["TangoWasteBrush"] as Brush;
+ }
+ }
+ }
+
+ public CartridgeModel(IMachineProvider machineProvider)
+ {
+ _machineProvider = machineProvider;
+ Status = new CartridgeStatus();
+ }
+
+ public void Invalidate()
+ {
+ RaisePropertyChanged(nameof(InProgress));
+ RaisePropertyChanged(nameof(Status));
+ }
+ }
+
+ #endregion
+
#region Properties
private bool _isMenuOpened;
@@ -72,6 +159,23 @@ namespace Tango.PPC.UI.ViewModels
set { _isPowerOpened = value; RaisePropertyChangedAuto(); }
}
+ private bool _isInkFillingOrWasteEmptying;
+ /// <summary>
+ /// Gets or sets a value indicating whether ink filling or waste emptying is active.
+ /// </summary>
+ public bool IsInkFillingOrWasteEmptying
+ {
+ get { return _isInkFillingOrWasteEmptying; }
+ set { _isInkFillingOrWasteEmptying = value; RaisePropertyChangedAuto(); }
+ }
+
+ private List<CartridgeModel> _cartridges;
+ public List<CartridgeModel> Cartridges
+ {
+ get { return _cartridges; }
+ set { _cartridges = value; RaisePropertyChangedAuto(); }
+ }
+
#endregion
#region Commands
@@ -121,6 +225,21 @@ namespace Tango.PPC.UI.ViewModels
/// </summary>
public RelayCommand RestartApplicationCommand { get; set; }
+ /// <summary>
+ /// Gets or sets the power off command.
+ /// </summary>
+ public RelayCommand PowerOffCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the reset command.
+ /// </summary>
+ public RelayCommand ResetCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the stand by command.
+ /// </summary>
+ public RelayCommand StandByCommand { get; set; }
+
#endregion
#region Constructors
@@ -137,15 +256,13 @@ namespace Tango.PPC.UI.ViewModels
StopPrintingCommand = new RelayCommand(StopPrinting);
SignOutCommand = new RelayCommand(SignOut);
- UpdateCommand = new RelayCommand(() =>
- {
- NavigationManager.NavigateTo(NavigationView.MachineUpdateView);
- TangoIOC.Default.GetInstance<MachineUpdateViewVM>().CheckForUpdates();
- IsMenuOpened = false;
- });
+ UpdateCommand = new RelayCommand(UpdateMachine);
PowerCommand = new RelayCommand(() => IsPowerOpened = true);
RestartApplicationCommand = new RelayCommand(RestartApplication);
+ PowerOffCommand = new RelayCommand(PowerOffMachine, () => MachineProvider.MachineOperator.Status != MachineStatuses.Disconnected);
+ ResetCommand = new RelayCommand(ResetMachine, () => MachineProvider.MachineOperator.Status != MachineStatuses.Disconnected);
+ StandByCommand = new RelayCommand(StandBy, () => MachineProvider.MachineOperator.CanPrint);
}
#endregion
@@ -239,6 +356,83 @@ namespace Tango.PPC.UI.ViewModels
}
}
+ /// <summary>
+ /// Powers off the machine.
+ /// </summary>
+ private async void PowerOffMachine()
+ {
+ IsMenuOpened = false;
+
+ if (await NotificationProvider.ShowQuestion("Are you sure you wish to turn off the machine?"))
+ {
+ try
+ {
+ await MachineProvider.MachineOperator.PowerDown();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error triggering power down.");
+ await NotificationProvider.ShowError(ex.FlattenMessage());
+ }
+ }
+ }
+
+ /// <summary>
+ /// Resets the machine.
+ /// </summary>
+ private async void ResetMachine()
+ {
+ IsMenuOpened = false;
+
+ if (!await NotificationProvider.ShowQuestion("Are you sure you want to reset the machine?")) return;
+
+ try
+ {
+ _resettingDevice = true;
+ ResetCommand.RaiseCanExecuteChanged();
+ await MachineProvider.MachineOperator.Reset();
+ await NotificationProvider.ShowInfo("Machine was successfully restarted.");
+ }
+ catch (Exception ex)
+ {
+ await NotificationProvider.ShowError(ex.FlattenMessage());
+ }
+ finally
+ {
+ _resettingDevice = false;
+ ResetCommand.RaiseCanExecuteChanged();
+ }
+ }
+
+ private async void StandBy()
+ {
+ IsMenuOpened = false;
+
+ try
+ {
+ LogManager.Log("Executing stand-by command.");
+ await MachineProvider.MachineOperator.StandBy();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error switching to stand-by mode.");
+ await NotificationProvider.ShowError($"Error switching to stand-by mode.\n{ex.FlattenMessage()}");
+ }
+ }
+
+ private void UpdateMachine()
+ {
+ if (MachineProvider.MachineOperator.IsPrinting)
+ {
+ NotificationProvider.ShowInfo("Cannot perform a machine update while the machine is dyeing.");
+ return;
+ }
+
+ NavigationManager.NavigateTo(NavigationView.MachineUpdateView);
+ TangoIOC.Default.GetInstance<MachineUpdateViewVM>().CheckForUpdates();
+ IsMenuOpened = false;
+ }
+
#endregion
#region Override Methods
@@ -250,6 +444,34 @@ namespace Tango.PPC.UI.ViewModels
{
base.OnApplicationStarted();
MachineProvider.MachineOperator.PrintingStarted += MachineOperator_PrintingStarted;
+ MachineProvider.MachineOperator.InkFillingStatusChanged += MachineOperator_InkFillingStatusChanged;
+ }
+
+ private void MachineOperator_InkFillingStatusChanged(object sender, InkFillingStatusChangedEventArgs e)
+ {
+ if (Cartridges == null)
+ {
+ Cartridges = MachineProvider.MachineOperator.InkFillingStatus.CartridgesStatuses.Select(x => new CartridgeModel(MachineProvider) { Status = x }).ToList();
+ }
+ else
+ {
+ foreach (var cartridgeStatus in e.Status.CartridgesStatuses)
+ {
+ var model = Cartridges.SingleOrDefault(x => x.Status == cartridgeStatus);
+
+ if (model != null)
+ {
+ model.Status = cartridgeStatus;
+ }
+ }
+ }
+
+ foreach (var cartridgeModel in Cartridges)
+ {
+ cartridgeModel.Invalidate();
+ }
+
+ IsInkFillingOrWasteEmptying = Cartridges.Any(x => x.Status.State == CartridgeState.Filling || x.Status.State == CartridgeState.Emptying);
}
/// <summary>
@@ -260,6 +482,22 @@ namespace Tango.PPC.UI.ViewModels
}
+ public override void OnApplicationReady()
+ {
+ base.OnApplicationReady();
+ MachineProvider.MachineOperator.StatusChanged += MachineOperator_StatusChanged;
+ }
+
+ private void MachineOperator_StatusChanged(object sender, MachineStatuses e)
+ {
+ InvokeUI(() =>
+ {
+ PowerOffCommand.RaiseCanExecuteChanged();
+ ResetCommand.RaiseCanExecuteChanged();
+ StandByCommand.RaiseCanExecuteChanged();
+ });
+ }
+
#endregion
#region Public Methods