From 7689f77fe2f356d17a5ad59dbeb4a0fed3ca4a0d Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Mon, 25 May 2020 17:27:24 +0300 Subject: Added PPC power up sequence support ! Refactored AppBarItems implementation. --- .../PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs | 42 ++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs') diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs index b53a54682..e84fd81a1 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs @@ -21,6 +21,7 @@ using Tango.PPC.Common.WatchDog; using Tango.PPC.UI.Dialogs; using Tango.SharedUI; using System.Data.Entity; +using Tango.PPC.UI.AppBarItems; namespace Tango.PPC.UI.ViewModels { @@ -33,6 +34,7 @@ namespace Tango.PPC.UI.ViewModels private DispatcherTimer _date_timer; private bool _isPowerUpDialogShown; private bool _isThreadLoadingShown; + private PowerUpAppBarItem _powerUpAppBar; private DateTime _currentDateTime; /// @@ -64,11 +66,47 @@ namespace Tango.PPC.UI.ViewModels { base.OnApplicationReady(); MachineProvider.MachineOperator.CartridgeValidationRequestReceived += MachineOperator_CartridgeValidationRequestReceived; - MachineProvider.MachineOperator.PowerUpStarted += MachineOperator_PowerUpStarted; + MachineProvider.MachineOperator.FirmwareStarted += MachineOperator_FirmwareStarted; MachineProvider.MachineOperator.ThreadLoadingStatusChanged += MachineOperator_ThreadLoadingStatusChanged; MachineProvider.MachineOperator.ThreadLoadingConfirmationRequired += MachineOperator_ThreadLoadingConfirmationRequired; + + MachineProvider.MachineOperator.PowerUpStarted += MachineOperator_PowerUpStarted; + MachineProvider.MachineOperator.PowerUpProgress += MachineOperator_PowerUpProgress; + MachineProvider.MachineOperator.PowerUpEnded += MachineOperator_PowerUpEnded; + } + + #region Power Up + + private void MachineOperator_PowerUpEnded(object sender, EventArgs e) + { + _powerUpAppBar?.Close(); + _powerUpAppBar = null; + } + + private void MachineOperator_PowerUpProgress(object sender, PMR.Power.StartPowerUpResponse status) + { + if (_powerUpAppBar != null) + { + _powerUpAppBar.Status = status; + } } + private void MachineOperator_PowerUpStarted(object sender, PMR.Power.StartPowerUpResponse e) + { + InvokeUI(() => + { + if (_powerUpAppBar != null) + { + _powerUpAppBar.Close(); + } + + _powerUpAppBar = NotificationProvider.PushAppBarItem(); + _powerUpAppBar.Priority = AppBarPriority.Low; + }); + } + + #endregion + #region Event Handlers /// @@ -101,7 +139,7 @@ namespace Tango.PPC.UI.ViewModels }); } - private async void MachineOperator_PowerUpStarted(object sender, EventArgs e) + private async void MachineOperator_FirmwareStarted(object sender, EventArgs e) { if (_isPowerUpDialogShown) { -- cgit v1.3.1 From 2405a27b29abf5382da56e67cc46cc338d2d0f89 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Mon, 20 Jul 2020 15:33:37 +0300 Subject: Refactored total liquid volume exceeds the max calc to nl/cm based. Fixed notes for New Environment. Applied possible fix for PPC power up message stuck. --- .../ViewModels/ColorConversionViewVM.cs | 4 ++-- .../Notes/Tango.Notes/Azure/New Environment.txt | 4 ++-- .../PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs | 11 +++++++++-- Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs | 17 +++++++++-------- 4 files changed, 22 insertions(+), 14 deletions(-) (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs index f583fa15e..d9ba419e0 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs @@ -314,11 +314,11 @@ namespace Tango.MachineStudio.RML.ViewModels try { var tables = RML.GetActiveProcessGroup().ProcessParametersTables.OrderBy(x => x.TableIndex).ToList(); - return (tables[1].MaxInkUptake / tables[0].MaxInkUptake) * 100; + return tables.Max(x => x.MaxInkUptake); } catch { - return BrushStop.MAX_TOTAL_LIQUID_VOLUME; + return BrushStop.MAX_INK_UPTAKE; } } diff --git a/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt b/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt index 710cdcb2d..212da09a2 100644 --- a/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt +++ b/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt @@ -41,8 +41,8 @@ EXEC sp_addrolemember N'db_datawriter', N'BackupUser' CREATE USER [Tango] FROM EXTERNAL PROVIDER WITH DEFAULT_SCHEMA=[dbo] GO -EXEC sp_addrolemember N'db_datareader', N'BackupUser' -EXEC sp_addrolemember N'db_datawriter', N'BackupUser' +EXEC sp_addrolemember N'db_datareader', N'Tango' +EXEC sp_addrolemember N'db_datawriter', N'Tango' 9. Create a new storage blob container for the machine studio versions. diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs index e84fd81a1..3b45a0c2b 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs @@ -35,6 +35,7 @@ namespace Tango.PPC.UI.ViewModels private bool _isPowerUpDialogShown; private bool _isThreadLoadingShown; private PowerUpAppBarItem _powerUpAppBar; + private bool _started; private DateTime _currentDateTime; /// @@ -79,6 +80,7 @@ namespace Tango.PPC.UI.ViewModels private void MachineOperator_PowerUpEnded(object sender, EventArgs e) { + _started = false; _powerUpAppBar?.Close(); _powerUpAppBar = null; } @@ -93,6 +95,8 @@ namespace Tango.PPC.UI.ViewModels private void MachineOperator_PowerUpStarted(object sender, PMR.Power.StartPowerUpResponse e) { + _started = true; + InvokeUI(() => { if (_powerUpAppBar != null) @@ -100,8 +104,11 @@ namespace Tango.PPC.UI.ViewModels _powerUpAppBar.Close(); } - _powerUpAppBar = NotificationProvider.PushAppBarItem(); - _powerUpAppBar.Priority = AppBarPriority.Low; + if (_started) + { + _powerUpAppBar = NotificationProvider.PushAppBarItem(); + _powerUpAppBar.Priority = AppBarPriority.Low; + } }); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs index 6633d9eed..4ad21d4cd 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs @@ -28,7 +28,7 @@ namespace Tango.BL.Entities private bool _ignorePropChanged; private ActionTimer _syncTimer; private static List _colorPropertyNames; - public const double MAX_TOTAL_LIQUID_VOLUME = 200; + public const double MAX_INK_UPTAKE = 400; #region Enums @@ -104,7 +104,7 @@ namespace Tango.BL.Entities #region Properties /// - /// Gets or sets a value indicating whether the total value of liquid volumes has exceeded the maximum range of . + /// Gets or sets a value indicating whether the total value of liquid volumes has exceeded the maximum range of . /// [NotMapped] [JsonIgnore] @@ -112,7 +112,7 @@ namespace Tango.BL.Entities { get { - return LiquidVolumes != null ? LiquidVolumes.Where(x => x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor.ToInt32()).Sum(x => x.Volume) > GetTotalMaximumLiquidVolumeLimit() : false; + return LiquidVolumes != null ? LiquidVolumes.Where(x => x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor.ToInt32()).Sum(x => x.NanoliterPerCentimeter) > GetTotalMaximumLiquidNlPerCMLimit() : false; } } @@ -780,23 +780,24 @@ namespace Tango.BL.Entities #region Private Methods - private double GetTotalMaximumLiquidVolumeLimit() + private double GetTotalMaximumLiquidNlPerCMLimit() { try { var tables = Segment.Job.Rml.GetActiveProcessGroup().ProcessParametersTables.OrderBy(x => x.TableIndex).ToList(); - if (tables.Count > 1) + + if (tables.Count > 0) { - return (tables[1].MaxInkUptake / tables[0].MaxInkUptake) * 100; + return tables.Max(x => x.MaxInkUptake); } else { - return MAX_TOTAL_LIQUID_VOLUME; + return MAX_INK_UPTAKE; } } catch { - return MAX_TOTAL_LIQUID_VOLUME; + return MAX_INK_UPTAKE; } } -- cgit v1.3.1 From 89ffc630471605c4757b5854af3d73b5b75e98d6 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Mon, 14 Sep 2020 13:47:34 +0300 Subject: New thread loading wizard. --- .../DB/Fix Job Corrupted Runs Start Time.sql | 2 + .../Notes/Tango.Notes/Tango.Notes.csproj | 3 +- .../Tango.PPC.Maintenance.csproj | 2 +- .../ViewModels/MaintenanceViewVM.cs | 8 + .../Views/MaintenanceView.xaml | 2 + .../PPC/Tango.PPC.Common/PPCViewModel.cs | 7 + .../PPC/Tango.PPC.Common/Tango.PPC.Common.csproj | 3 +- .../ThreadLoading/IThreadLoadingService.cs | 13 ++ .../Tango.PPC.UI/Dialogs/ThreadLoadingView.xaml | 162 +++++++++---- .../Dialogs/ThreadLoadingViewVM - Copy.cs | 176 ++++++++++++++ .../Tango.PPC.UI/Dialogs/ThreadLoadingViewVM.cs | 255 ++++++++++++++------- .../Tango.PPC.UI/Images/thread_loading_preview.png | Bin 0 -> 529370 bytes .../PPC/Tango.PPC.UI/Tango.PPC.UI.csproj | 6 +- .../ThreadLoading/DefaultThreadLoadingService.cs | 50 ++++ .../PPC/Tango.PPC.UI/ViewModelLocator.cs | 4 + .../PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs | 97 +------- .../Visual_Studio/PPC/Tango.PPC.UI/app.manifest | 2 +- .../Tango.Emulations/Emulators/MachineEmulator.cs | 25 +- .../Operation/IMachineOperator.cs | 13 ++ .../Tango.Integration/Operation/MachineOperator.cs | 23 ++ .../Tango.Touch/Controls/TouchPanel.cs | 5 +- 21 files changed, 632 insertions(+), 226 deletions(-) create mode 100644 Software/Visual_Studio/Notes/Tango.Notes/DB/Fix Job Corrupted Runs Start Time.sql create mode 100644 Software/Visual_Studio/PPC/Tango.PPC.Common/ThreadLoading/IThreadLoadingService.cs create mode 100644 Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingViewVM - Copy.cs create mode 100644 Software/Visual_Studio/PPC/Tango.PPC.UI/Images/thread_loading_preview.png create mode 100644 Software/Visual_Studio/PPC/Tango.PPC.UI/ThreadLoading/DefaultThreadLoadingService.cs (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs') diff --git a/Software/Visual_Studio/Notes/Tango.Notes/DB/Fix Job Corrupted Runs Start Time.sql b/Software/Visual_Studio/Notes/Tango.Notes/DB/Fix Job Corrupted Runs Start Time.sql new file mode 100644 index 000000000..9467a8cf1 --- /dev/null +++ b/Software/Visual_Studio/Notes/Tango.Notes/DB/Fix Job Corrupted Runs Start Time.sql @@ -0,0 +1,2 @@ +UPDATE JOB_RUNS SET START_DATE = ACTUAL_START_DATE WHERE START_DATE = '0001-01-01 00:00:00.000' AND ACTUAL_START_DATE IS NOT NULL +UPDATE JOB_RUNS SET START_DATE = END_DATE WHERE START_DATE = '0001-01-01 00:00:00.000' AND ACTUAL_START_DATE IS NULL \ No newline at end of file diff --git a/Software/Visual_Studio/Notes/Tango.Notes/Tango.Notes.csproj b/Software/Visual_Studio/Notes/Tango.Notes/Tango.Notes.csproj index 0da639179..5dfe4c005 100644 --- a/Software/Visual_Studio/Notes/Tango.Notes/Tango.Notes.csproj +++ b/Software/Visual_Studio/Notes/Tango.Notes/Tango.Notes.csproj @@ -49,6 +49,7 @@ + @@ -66,7 +67,7 @@ - + \ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Tango.PPC.Maintenance.csproj b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Tango.PPC.Maintenance.csproj index c43b4fb7f..21b2eeb0a 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Tango.PPC.Maintenance.csproj +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Tango.PPC.Maintenance.csproj @@ -293,7 +293,7 @@ - + \ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/ViewModels/MaintenanceViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/ViewModels/MaintenanceViewVM.cs index 17051b773..f8535ad35 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/ViewModels/MaintenanceViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/ViewModels/MaintenanceViewVM.cs @@ -83,6 +83,8 @@ namespace Tango.PPC.Maintenance.ViewModels public RelayCommand HeadCleaningCommand { get; set; } + public RelayCommand StartThreadLoadingCommand { get; set; } + public MaintenanceViewVM() { Guides = new ObservableCollection(GuideHelper.CreateAllGuides()); @@ -96,6 +98,7 @@ namespace Tango.PPC.Maintenance.ViewModels OpenCloseRightLeadingWheelsCommand = new OpenCloseRightLeadingWheelsCommand(); ResetThreadLoadingCommand = new ResetThreadLoadingCommand(); HeadCleaningCommand = new RelayCommand(PerformHeadCleaning,() => MachineProvider.MachineOperator.CanPrint); + StartThreadLoadingCommand = new RelayCommand(StartThreadLoading, () => MachineProvider.MachineOperator.CanPrint); } public override void OnApplicationStarted() @@ -239,5 +242,10 @@ namespace Tango.PPC.Maintenance.ViewModels { await NotificationProvider.ShowDialog(); } + + private void StartThreadLoading() + { + ThreadLoadingService.StartThreadLoading(); + } } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Views/MaintenanceView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Views/MaintenanceView.xaml index d51f0eb38..6c48888af 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Views/MaintenanceView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Views/MaintenanceView.xaml @@ -207,6 +207,8 @@ RUN HEAD CLEANING + THREAD LOADING WIZARD + EXPORT SYSTEM LOGS diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCViewModel.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCViewModel.cs index 85de1c7f8..98eef6883 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCViewModel.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCViewModel.cs @@ -19,6 +19,7 @@ using Tango.PPC.Common.RemoteAssistance; using Tango.PPC.Common.RemoteDesktop; using Tango.PPC.Common.Storage; using Tango.PPC.Common.Synchronization; +using Tango.PPC.Common.ThreadLoading; using Tango.Settings; using Tango.SharedUI; using static Tango.SharedUI.Controls.NavigationControl; @@ -123,6 +124,12 @@ namespace Tango.PPC.Common [TangoInject] public IRemoteDesktopService RemoteDesktopService { get; set; } + /// + /// Gets or sets the thread loading service. + /// + [TangoInject] + public IThreadLoadingService ThreadLoadingService { get; set; } + private PPCSettings _settings; /// /// Gets the main PPC settings. diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj b/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj index bdb337dc2..14666f16a 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj @@ -190,6 +190,7 @@ + @@ -488,7 +489,7 @@ - + \ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/ThreadLoading/IThreadLoadingService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/ThreadLoading/IThreadLoadingService.cs new file mode 100644 index 000000000..ac878ed07 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/ThreadLoading/IThreadLoadingService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.PPC.Common.ThreadLoading +{ + public interface IThreadLoadingService + { + void StartThreadLoading(); + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingView.xaml index d6db3d124..a88d7a598 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingView.xaml @@ -4,51 +4,135 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch" + xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" xmlns:local="clr-namespace:Tango.PPC.UI.Dialogs" mc:Ignorable="d" - Background="{StaticResource TangoPrimaryBackgroundBrush}" d:DesignHeight="555" d:DesignWidth="560" Width="600" Height="900" d:DataContext="{d:DesignInstance Type=local:ThreadLoadingViewVM, IsDesignTimeCreatable=False}"> + Background="{StaticResource TangoPrimaryBackgroundBrush}" d:DesignHeight="555" d:DesignWidth="560" Width="700" Height="1150" d:DataContext="{d:DesignInstance Type=local:ThreadLoadingViewVM, IsDesignTimeCreatable=False}"> - - - Thread Loading - - - - - - The machine is ready for thread loading. Please load the thread as instructed and press 'continue'. - - - CONTINUE - - - - The machine is now loading the thread. please wait... - - - - - - - The machine is now preparing for thread loading. please wait... - - - - + + + Thread Loading - - - - + + + + + + CLOSE + CONTINUE + + + + Welcome to the automatic thread loading wizard. + + + Please ensure there are no thread residue in the system and press 'continue'. + + + + + + + + + + CLOSE + CONTINUE + + + + + The system is now preparing... + + + + + + + + + + + CLOSE + CONTINUE + + + + + Please select the thread type you are going to load and press 'continue'. + + + + + + + + + + + CLOSE + CONTINUE + + + + + The system is now loading the thread... + + + + + + + + + + + CLOSE + + + + + Thread loading completed successfully! + + + + + + + + + CLOSE + RETRY + + + + + Something went wrong + + + + + + + + + + CLOSE + RETRY + + + + + Something went wrong + + + + + + + diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingViewVM - Copy.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingViewVM - Copy.cs new file mode 100644 index 000000000..95fb77e48 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingViewVM - Copy.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.BL.Entities; +using Tango.Core.Commands; +using Tango.Integration.Operation; +using Tango.PMR.ThreadLoading; +using Tango.PPC.Common.Connection; +using Tango.SharedUI; + +namespace Tango.PPC.UI.Dialogs +{ + public class ThreadLoadingViewVM : DialogViewVM + { + public class ThreadLoadingResult + { + public bool IsCompleted { get; set; } + public Exception FailedException { get; set; } + } + + private ThreadLoadingConfirmationRequiredEventArgs _confirmationArgs; + + public ThreadLoadingResult Result { get; set; } + + public IMachineProvider MachineProvider { get; set; } + + private StartThreadLoadingResponse _status; + public StartThreadLoadingResponse Status + { + get { return _status; } + set { _status = value; RaisePropertyChangedAuto(); } + } + + private bool _isFinalizing; + public bool IsFinalizing + { + get { return _isFinalizing; } + set { _isFinalizing = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } + } + + private bool _isPreparing; + public bool IsPreparing + { + get { return _isPreparing; } + set { _isPreparing = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } + } + + public List Rmls { get; set; } + + private Rml _selectedRml; + public Rml SelectedRml + { + get { return _selectedRml; } + set { _selectedRml = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } + } + + public RelayCommand ContinueCommand { get; set; } + + public ThreadLoadingViewVM(IMachineProvider machineProvider) + { + CanClose = false; + IsPreparing = true; + ContinueCommand = new RelayCommand(ContinueThreadLoading, () => !IsFinalizing && SelectedRml != null); + MachineProvider = machineProvider; + MachineProvider.MachineOperator.ThreadLoadingStatusChanged += MachineOperator_ThreadLoadingStatusChanged; + MachineProvider.MachineOperator.ThreadLoadingCompleted += MachineOperator_ThreadLoadingCompleted; + MachineProvider.MachineOperator.ThreadLoadingFailed += MachineOperator_ThreadLoadingFailed; + MachineProvider.MachineOperator.ThreadLoadingConfirmationRequired += MachineOperator_ThreadLoadingConfirmationRequired; + } + + public ThreadLoadingViewVM(IMachineProvider machineProvider, ThreadLoadingConfirmationRequiredEventArgs confirmationArgs) : this(machineProvider) + { + _confirmationArgs = confirmationArgs; + IsPreparing = false; + } + + private void MachineOperator_ThreadLoadingConfirmationRequired(object sender, ThreadLoadingConfirmationRequiredEventArgs e) + { + _confirmationArgs = e; + IsPreparing = false; + } + + private async void ContinueThreadLoading() + { + IsFinalizing = true; + + try + { + await Task.Factory.StartNew(() => { _confirmationArgs.Confirm(SelectedRml.GetActiveProcessGroup().ProcessParametersTables.FirstOrDefault()); }); + } + catch (Exception ex) + { + Result = new ThreadLoadingResult() + { + FailedException = ex, + }; + + IsFinalizing = false; + + if (IsVisible) + { + InvokeUI(() => + { + Accept(); + }); + } + } + } + + private void MachineOperator_ThreadLoadingCompleted(object sender, StartThreadLoadingResponse e) + { + Result = new ThreadLoadingResult() + { + IsCompleted = true + }; + + if (IsVisible) + { + InvokeUI(() => + { + Accept(); + }); + } + } + + private void MachineOperator_ThreadLoadingFailed(object sender, StartThreadLoadingResponse e) + { + Result = new ThreadLoadingResult() + { + FailedException = new Exception(e.ErrorReason), + }; + + if (IsVisible) + { + InvokeUI(() => + { + Accept(); + }); + } + } + + private void MachineOperator_ThreadLoadingStatusChanged(object sender, StartThreadLoadingResponse e) + { + Status = e; + + if (Status.State == ThreadLoadingState.Finalizing) + { + IsFinalizing = true; + } + } + + protected override void Cancel() + { + IsFinalizing = false; + ClearEvents(); + base.Cancel(); + } + + protected override void Accept() + { + IsFinalizing = false; + ClearEvents(); + base.Accept(); + } + + private void ClearEvents() + { + MachineProvider.MachineOperator.ThreadLoadingStatusChanged -= MachineOperator_ThreadLoadingStatusChanged; + MachineProvider.MachineOperator.ThreadLoadingCompleted -= MachineOperator_ThreadLoadingCompleted; + MachineProvider.MachineOperator.ThreadLoadingFailed -= MachineOperator_ThreadLoadingFailed; + MachineProvider.MachineOperator.ThreadLoadingConfirmationRequired -= MachineOperator_ThreadLoadingConfirmationRequired; + } + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingViewVM.cs index 5c4d003a1..75354caf2 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/ThreadLoadingViewVM.cs @@ -3,28 +3,41 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.BL; +using Tango.BL.Builders; using Tango.BL.Entities; using Tango.Core.Commands; +using Tango.Core.DI; using Tango.Integration.Operation; using Tango.PMR.ThreadLoading; +using Tango.PPC.Common; using Tango.PPC.Common.Connection; +using Tango.PPC.Common.Notifications; +using Tango.Settings; using Tango.SharedUI; namespace Tango.PPC.UI.Dialogs { public class ThreadLoadingViewVM : DialogViewVM { - public class ThreadLoadingResult + public enum ThreadLoadingStage { - public bool IsCompleted { get; set; } - public Exception FailedException { get; set; } + Welcome, + Preparing, + ReadyForLoading, + Finalizing, + Completed, + PreparationError, + FinalizationError, } - private ThreadLoadingConfirmationRequiredEventArgs _confirmationArgs; + [TangoInject] + private IMachineProvider MachineProvider { get; set; } - public ThreadLoadingResult Result { get; set; } + [TangoInject] + private INotificationProvider NotificationProvider { get; set; } - public IMachineProvider MachineProvider { get; set; } + private PPCSettings _settings; private StartThreadLoadingResponse _status; public StartThreadLoadingResponse Status @@ -33,22 +46,13 @@ namespace Tango.PPC.UI.Dialogs set { _status = value; RaisePropertyChangedAuto(); } } - private bool _isFinalizing; - public bool IsFinalizing + private List _rmls; + public List Rmls { - get { return _isFinalizing; } - set { _isFinalizing = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } + get { return _rmls; } + set { _rmls = value; RaisePropertyChangedAuto(); } } - private bool _isPreparing; - public bool IsPreparing - { - get { return _isPreparing; } - set { _isPreparing = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - public List Rmls { get; set; } - private Rml _selectedRml; public Rml SelectedRml { @@ -56,121 +60,210 @@ namespace Tango.PPC.UI.Dialogs set { _selectedRml = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } + private ThreadLoadingStage _stage; + public ThreadLoadingStage Stage + { + get { return _stage; } + set { _stage = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } + } + + private String _error; + public String Error + { + get { return _error; } + set { _error = value; RaisePropertyChangedAuto(); } + } + + public RelayCommand ContinueCommand { get; set; } + public RelayCommand AbortCommand { get; set; } - public ThreadLoadingViewVM(IMachineProvider machineProvider) + public ThreadLoadingViewVM(bool userInvoked = false) { - CanClose = true; - IsPreparing = true; - ContinueCommand = new RelayCommand(ContinueThreadLoading, () => !IsFinalizing && SelectedRml != null); - MachineProvider = machineProvider; + CanClose = false; + + TangoIOC.Default.Inject(this); + _settings = SettingsManager.Default.GetOrCreate(); + MachineProvider.MachineOperator.ThreadLoadingStatusChanged += MachineOperator_ThreadLoadingStatusChanged; - MachineProvider.MachineOperator.ThreadLoadingCompleted += MachineOperator_ThreadLoadingCompleted; - MachineProvider.MachineOperator.ThreadLoadingFailed += MachineOperator_ThreadLoadingFailed; - MachineProvider.MachineOperator.ThreadLoadingConfirmationRequired += MachineOperator_ThreadLoadingConfirmationRequired; + + ContinueCommand = new RelayCommand(Continue, CanContinue); + AbortCommand = new RelayCommand(Abort); + + AdaptToState(userInvoked); } - public ThreadLoadingViewVM(IMachineProvider machineProvider, ThreadLoadingConfirmationRequiredEventArgs confirmationArgs) : this(machineProvider) + private void AdaptToState(bool userInvoked = false) { - _confirmationArgs = confirmationArgs; - IsPreparing = false; + var status = MachineProvider.MachineOperator.ThreadLoadingStatus; + + if (status != null) + { + if (status.State == ThreadLoadingState.Preparing) + { + Stage = ThreadLoadingStage.Preparing; + } + else if (status.State == ThreadLoadingState.ReadyForLoading) + { + Stage = ThreadLoadingStage.ReadyForLoading; + } + else if (status.State == ThreadLoadingState.Finalizing) + { + Stage = ThreadLoadingStage.Finalizing; + } + else if (status.State == ThreadLoadingState.PreparationError) + { + OnPreparationError(status.ErrorReason); + } + else if (status.State == ThreadLoadingState.FinalizationError) + { + OnFinalizationError(status.ErrorReason); + } + else if (status.State == ThreadLoadingState.Completed) + { + if (userInvoked) + { + Stage = ThreadLoadingStage.Welcome; + } + else + { + Stage = ThreadLoadingStage.Completed; + } + } + } } - private void MachineOperator_ThreadLoadingConfirmationRequired(object sender, ThreadLoadingConfirmationRequiredEventArgs e) + private void MachineOperator_ThreadLoadingStatusChanged(object sender, StartThreadLoadingResponse e) { - _confirmationArgs = e; - IsPreparing = false; + Status = e; + AdaptToState(); } - private async void ContinueThreadLoading() + private void Continue() { - IsFinalizing = true; + if (Stage == ThreadLoadingStage.Welcome) + { + Stage = ThreadLoadingStage.Preparing; + StartPreparing(); + } + else if (Stage == ThreadLoadingStage.ReadyForLoading) + { + ContinueThreadLoading(); + } + else if (Stage == ThreadLoadingStage.Completed) + { + Accept(); + } + else if (Stage == ThreadLoadingStage.PreparationError) + { + Stage = ThreadLoadingStage.Preparing; + StartPreparing(); + } + else if (Stage == ThreadLoadingStage.FinalizationError) + { + ContinueThreadLoading(); + } + } + private async void StartPreparing() + { try { - await Task.Factory.StartNew(() => { _confirmationArgs.Confirm(SelectedRml.GetActiveProcessGroup().ProcessParametersTables.FirstOrDefault()); }); + await MachineProvider.MachineOperator.StartThreadLoading(); } catch (Exception ex) { - Result = new ThreadLoadingResult() - { - FailedException = ex, - }; - - IsFinalizing = false; - - if (IsVisible) - { - InvokeUI(() => - { - Accept(); - }); - } + OnPreparationError(ex.Message); } } - private void MachineOperator_ThreadLoadingCompleted(object sender, StartThreadLoadingResponse e) + private async void ContinueThreadLoading() { - Result = new ThreadLoadingResult() + try { - IsCompleted = true - }; - - if (IsVisible) + Stage = ThreadLoadingStage.Finalizing; + await MachineProvider.MachineOperator.ContinueThreadLoading(SelectedRml.GetActiveProcessGroup().ProcessParametersTables.FirstOrDefault()); + } + catch (Exception ex) { - InvokeUI(() => - { - Accept(); - }); + OnFinalizationError(ex.Message); } } - private void MachineOperator_ThreadLoadingFailed(object sender, StartThreadLoadingResponse e) + private bool CanContinue() { - Result = new ThreadLoadingResult() + bool canContinue = false; + + if (Stage != ThreadLoadingStage.Preparing && Stage != ThreadLoadingStage.Finalizing) { - FailedException = new Exception(e.ErrorReason), - }; + canContinue = true; + } - if (IsVisible) + if (Stage == ThreadLoadingStage.ReadyForLoading && SelectedRml == null) { - InvokeUI(() => - { - Accept(); - }); + canContinue = false; } + + return canContinue; } - private void MachineOperator_ThreadLoadingStatusChanged(object sender, StartThreadLoadingResponse e) + private void OnPreparationError(String error) { - Status = e; + Error = error; + Stage = ThreadLoadingStage.PreparationError; + } + + private void OnFinalizationError(String error) + { + Error = error; + Stage = ThreadLoadingStage.FinalizationError; + } + + private void Abort() + { + Cancel(); + } + + public async override void OnShow() + { + base.OnShow(); + + LogManager.Log("Loading site RMLS..."); + + List rmls = new List(); - if (Status.State == ThreadLoadingState.Finalizing) + using (ObservablesContext db = ObservablesContext.CreateDefault()) { - IsFinalizing = true; + rmls = await new RmlsCollectionBuilder(db).SetAll().ForHeadType(MachineProvider.Machine.MachineHeadType).ForSite(MachineProvider.Machine.SiteGuid).WithActiveParametersGroup().BuildListAsync(); } + + var selectedRml = rmls.SingleOrDefault(x => x.Guid == _settings.LoadedRmlGuid); + + Rmls = rmls; + SelectedRml = selectedRml != null ? selectedRml : rmls.FirstOrDefault(); } protected override void Cancel() { - IsFinalizing = false; - ClearEvents(); + CleanUp(); base.Cancel(); } protected override void Accept() { - IsFinalizing = false; - ClearEvents(); + CleanUp(); base.Accept(); } - private void ClearEvents() + private void CleanUp() { MachineProvider.MachineOperator.ThreadLoadingStatusChanged -= MachineOperator_ThreadLoadingStatusChanged; - MachineProvider.MachineOperator.ThreadLoadingCompleted -= MachineOperator_ThreadLoadingCompleted; - MachineProvider.MachineOperator.ThreadLoadingFailed -= MachineOperator_ThreadLoadingFailed; - MachineProvider.MachineOperator.ThreadLoadingConfirmationRequired -= MachineOperator_ThreadLoadingConfirmationRequired; + + if (SelectedRml != null) + { + _settings.LoadedRmlGuid = SelectedRml.Guid; + _settings.Save(); + } } } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/thread_loading_preview.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/thread_loading_preview.png new file mode 100644 index 000000000..9bbea3368 Binary files /dev/null and b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/thread_loading_preview.png differ diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj b/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj index bfb16f10d..6b6934ce5 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj @@ -160,6 +160,7 @@ + FirmwareUpgradeFromFileView.xaml @@ -183,6 +184,7 @@ + @@ -450,6 +452,7 @@ Tango.ColorLib_v4.dll + @@ -641,6 +644,7 @@ + @@ -721,7 +725,7 @@ if $(ConfigurationName) == Debug copy /Y "$(TargetDir)Packages" "$(TargetDir)" - + \ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ThreadLoading/DefaultThreadLoadingService.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ThreadLoading/DefaultThreadLoadingService.cs new file mode 100644 index 000000000..5656300a7 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ThreadLoading/DefaultThreadLoadingService.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Integration.Operation; +using Tango.PPC.Common.Connection; +using Tango.PPC.Common.Notifications; +using Tango.PPC.Common.Threading; +using Tango.PPC.Common.ThreadLoading; +using Tango.PPC.UI.Dialogs; + +namespace Tango.PPC.UI.ThreadLoading +{ + public class DefaultThreadLoadingService : IThreadLoadingService + { + private INotificationProvider _notificationsProvider; + private IMachineProvider _machineProvider; + private IDispatcherProvider _dispatcher; + private bool _dialogShown; + + public DefaultThreadLoadingService(INotificationProvider notificationsProvider, IMachineProvider machineProvider, IDispatcherProvider dispatcher) + { + _notificationsProvider = notificationsProvider; + _machineProvider = machineProvider; + _dispatcher = dispatcher; + _machineProvider.MachineOperator.ThreadLoadingStatusChanged += MachineOperator_ThreadLoadingStatusChanged; + } + + private void MachineOperator_ThreadLoadingStatusChanged(object sender, PMR.ThreadLoading.StartThreadLoadingResponse e) + { + if (!_dialogShown && e.State != PMR.ThreadLoading.ThreadLoadingState.None) + { + _dialogShown = true; + _dispatcher.Invoke(async () => + { + await _notificationsProvider.ShowDialog(new ThreadLoadingViewVM()); + _dialogShown = false; + }); + } + } + + public async void StartThreadLoading() + { + _dialogShown = true; + await _notificationsProvider.ShowDialog(new ThreadLoadingViewVM(true)); + _dialogShown = false; + } + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs index 7011cd3be..181f70d4d 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs @@ -33,6 +33,7 @@ using Tango.PPC.Common.Storage; using Tango.PPC.Common.Synchronization; using Tango.PPC.Common.SystemInfo; using Tango.PPC.Common.Threading; +using Tango.PPC.Common.ThreadLoading; using Tango.PPC.Common.UpdatePackages; using Tango.PPC.Common.UWF; using Tango.PPC.Common.Web; @@ -45,6 +46,7 @@ using Tango.PPC.UI.PPCApplication; using Tango.PPC.UI.Printing; using Tango.PPC.UI.RemoteActions; using Tango.PPC.UI.Threading; +using Tango.PPC.UI.ThreadLoading; using Tango.PPC.UI.ViewModels; using Tango.PPC.UI.Views; using Tango.PPC.UI.ViewsContracts; @@ -97,6 +99,7 @@ namespace Tango.PPC.UI TangoIOC.Default.Unregister(); TangoIOC.Default.Unregister(); TangoIOC.Default.Unregister(); + TangoIOC.Default.Unregister(); if (App.StartupArgs != null && App.StartupArgs.Contains("-webDebug")) { @@ -139,6 +142,7 @@ namespace Tango.PPC.UI TangoIOC.Default.Register(); TangoIOC.Default.Register(); TangoIOC.Default.Register(); + TangoIOC.Default.Register(); TangoIOC.Default.Register(); TangoIOC.Default.Register(); diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs index 3b45a0c2b..05fb610c8 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs @@ -236,102 +236,15 @@ namespace Tango.PPC.UI.ViewModels private void MachineOperator_ThreadLoadingStatusChanged(object sender, PMR.ThreadLoading.StartThreadLoadingResponse e) { - if (e.State == PMR.ThreadLoading.ThreadLoadingState.Preparing) - { - DisplayThreadLoading(); - } + //if (e.State == PMR.ThreadLoading.ThreadLoadingState.Preparing) + //{ + // DisplayThreadLoading(); + //} } private void MachineOperator_ThreadLoadingConfirmationRequired(object sender, ThreadLoadingConfirmationRequiredEventArgs e) { - DisplayThreadLoading(e); - } - - private async void DisplayThreadLoading(ThreadLoadingConfirmationRequiredEventArgs confirmationArgs = null) - { - if (_isThreadLoadingShown) return; - - _isThreadLoadingShown = true; - - LogManager.Log("Thread loading preparation/finalization detected, showing thread loading screen..."); - - if (!Settings.DisplayAutomaticThreadLoadingScreen) - { - _isThreadLoadingShown = false; - LogManager.Log("Thread loading screen disabled. skipping..."); - return; - } - - ThreadLoadingViewVM vm; - - try - { - LogManager.Log("Loading site rmls..."); - - List rmls = new List(); - - using (ObservablesContext db = ObservablesContext.CreateDefault()) - { - rmls = await new RmlsCollectionBuilder(db).SetAll().ForHeadType(MachineProvider.Machine.MachineHeadType).ForSite(MachineProvider.Machine.SiteGuid).WithActiveParametersGroup().BuildListAsync(); - } - - var selectedRml = rmls.SingleOrDefault(x => x.Guid == Settings.LoadedRmlGuid); - - if (confirmationArgs == null) - { - vm = new ThreadLoadingViewVM(MachineProvider); - } - else - { - vm = new ThreadLoadingViewVM(MachineProvider, confirmationArgs); - } - - vm.Rmls = rmls; - vm.SelectedRml = selectedRml != null ? selectedRml : rmls.FirstOrDefault(); - } - catch (Exception ex) - { - _isThreadLoadingShown = false; - LogManager.Log(ex, "Error initializing thread loading screen."); - return; - } - - InvokeUI(async () => - { - await NotificationProvider.ShowDialog(vm); - - _isThreadLoadingShown = false; - - LogManager.Log("Thread loading screen closed."); - - if (!vm.DialogResult) - { - LogManager.Log("Thread loading screen aborted by user. No operation was performed."); - return; - } - - try - { - if (vm.Result.IsCompleted) - { - await NotificationProvider.ShowSuccess("Thread loading completed successfully."); - } - else - { - await NotificationProvider.ShowError($"Thread loading failed due to the following reason:\n{vm.Result.FailedException.FlattenException()}"); - } - - if (vm.SelectedRml != null) - { - Settings.LoadedRmlGuid = vm.SelectedRml.Guid; - Settings.Save(); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error occurred after thread loading screen closed."); - } - }); +// DisplayThreadLoading(e); } #endregion } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest index d72e75011..efc5f8179 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest @@ -16,7 +16,7 @@ Remove this element if your application requires this virtualization for backwards compatibility. --> - + diff --git a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs index e594416f9..8137579a2 100644 --- a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs +++ b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs @@ -418,6 +418,9 @@ namespace Tango.Emulations.Emulators case MessageType.StartThreadLoadingRequest: HandleStartThreadLoadingRequest(MessageFactory.ParseTangoMessageFromContainer(container)); break; + case MessageType.TryThreadLoadingRequest: + HandleTryThreadLoadingRequest(MessageFactory.ParseTangoMessageFromContainer(container)); + break; case MessageType.ContinueThreadLoadingRequest: HandleContinueThreadLoadingRequest(MessageFactory.ParseTangoMessageFromContainer(container)); break; @@ -1539,6 +1542,12 @@ namespace Tango.Emulations.Emulators await Transporter.SendResponse(new StartThreadLoadingResponse(), request.Container.Token); } + private async void HandleTryThreadLoadingRequest(TangoMessage request) + { + await Transporter.SendResponse(new TryThreadLoadingResponse(), request.Container.Token); + StartThreadLoading(); + } + private async void HandleContinueThreadLoadingRequest(TangoMessage request) { if (_threadLoadingToken != null) @@ -1549,14 +1558,14 @@ namespace Tango.Emulations.Emulators await Transporter.SendResponse(new StartThreadLoadingResponse() { State = ThreadLoadingState.Finalizing }, _threadLoadingToken); await Task.Delay(8000); - if (_rnd.Next(0, 100) > 50) - { + //if (_rnd.Next(0, 100) > 50) + //{ await Transporter.SendResponse(new StartThreadLoadingResponse() { State = ThreadLoadingState.Completed }, _threadLoadingToken); - } - else - { - await Transporter.SendResponse(new StartThreadLoadingResponse() { State = ThreadLoadingState.FinalizationError, ErrorReason = "Emulator random error." }, _threadLoadingToken); - } + //} + //else + //{ + // await Transporter.SendResponse(new StartThreadLoadingResponse() { State = ThreadLoadingState.FinalizationError, ErrorReason = "Emulator random error." }, _threadLoadingToken); + //} } else { @@ -1663,7 +1672,7 @@ namespace Tango.Emulations.Emulators public async void StartThreadLoading() { await Transporter.SendResponse(new StartThreadLoadingResponse() { State = ThreadLoadingState.Preparing }, _threadLoadingToken); - await Task.Delay(2000); + await Task.Delay(8000); if (_rnd.Next(0, 100) > 50) { diff --git a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs index 1c239f4f5..8bce840d9 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs @@ -509,5 +509,18 @@ namespace Tango.Integration.Operation /// /// Task PerformHeadCleaning(); + + /// + /// Starts the automatic thread loading process. + /// + /// + Task StartThreadLoading(); + + /// + /// Continues the current thread loading. + /// + /// The process parameters. + /// + Task ContinueThreadLoading(ProcessParametersTable processParameters); } } diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs index 0b343289d..fe6a03248 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs @@ -3895,6 +3895,29 @@ namespace Tango.Integration.Operation return Task.FromResult(handler); } + /// + /// Starts the automatic thread loading process. + /// + /// + public async Task StartThreadLoading() + { + var response = await SendRequest(new TryThreadLoadingRequest()); + } + + /// + /// Continues the current thread loading. + /// + /// The process parameters. + /// + public async Task ContinueThreadLoading(ProcessParametersTable processParameters) + { + var process = processParameters.ToProcessParametersPMR(); + var r = await SendRequest(new ContinueThreadLoadingRequest() + { + ProcessParameters = process, + }, new TransportRequestConfig() { ShouldLog = true }); + } + #endregion } } diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs index 9044b209f..1993e8cae 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs @@ -97,7 +97,10 @@ namespace Tango.Touch.Controls { try { - (CurrentDialog.DataContext as DialogViewVM).CloseCommand?.Execute(null); + if ((CurrentDialog.DataContext as DialogViewVM).CanClose) + { + (CurrentDialog.DataContext as DialogViewVM).CloseCommand?.Execute(null); + } } catch (Exception ex) { -- cgit v1.3.1