aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.UI
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-08-16 15:59:12 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-08-16 15:59:12 +0300
commit04fd2234090e23ff2e648d997a1cc753c9354941 (patch)
tree5624cfac25a0439ad6dfaae64132fbe5b62a50a0 /Software/Visual_Studio/PPC/Tango.PPC.UI
parent9dbb8f8eb3d07ee07cf7ce1beab72df056e157c6 (diff)
downloadTango-04fd2234090e23ff2e648d997a1cc753c9354941.tar.gz
Tango-04fd2234090e23ff2e648d997a1cc753c9354941.zip
Implemented full machine setup with connectivity and communication testing!
Fixed an issue with auto reset event on transport and logging :/
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Connectivity/DefaultConnectivityProvider.cs1
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs231
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml159
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml.cs13
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs7
5 files changed, 343 insertions, 68 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Connectivity/DefaultConnectivityProvider.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Connectivity/DefaultConnectivityProvider.cs
index ec51b9a98..d338b3ff1 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Connectivity/DefaultConnectivityProvider.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Connectivity/DefaultConnectivityProvider.cs
@@ -219,7 +219,6 @@ namespace Tango.PPC.UI.Connectivity
{
result = await network.Connect(auth);
await RefreshAvailableWiFiNetworks();
- return result;
}
if (result)
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs
index a81db331c..57c2200c6 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs
@@ -8,6 +8,9 @@ using System.Threading.Tasks;
using Tango.Core;
using Tango.Core.Commands;
using Tango.Core.Helpers;
+using Tango.Integration.Operation;
+using Tango.Logging;
+using Tango.PMR.Connection;
using Tango.PPC.Common;
using Tango.PPC.Common.Application;
using Tango.PPC.Common.MachineSetup;
@@ -16,6 +19,7 @@ using Tango.PPC.UI.ViewsContracts;
using Tango.Settings;
using Tango.SharedUI.Helpers;
using Tango.SQLExaminer;
+using Tango.Transport.Adapters;
namespace Tango.PPC.UI.ViewModels
{
@@ -36,6 +40,19 @@ namespace Tango.PPC.UI.ViewModels
Failed,
}
+ public enum MachineSetupView
+ {
+ WelcomeView,
+ WiFiSelectionView,
+ WiFiTestView,
+ EmbeddedWelcomeView,
+ EmbeddedTestView,
+ SetupWelcomeView,
+ SetupProgressView,
+ SetupCompletedView,
+ SetupFailedView,
+ }
+
private MachineSetupResult _setup_result;
#region Properties
@@ -85,19 +102,46 @@ namespace Tango.PPC.UI.ViewModels
set { _state = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
}
+ private String _machineConnectionStatus;
+ public String MachineConnectionStatus
+ {
+ get { return _machineConnectionStatus; }
+ set { _machineConnectionStatus = value; RaisePropertyChangedAuto(); }
+ }
+
#endregion
#region Commands
/// <summary>
- /// Gets or sets the start command.
+ /// Gets or sets the complete command.
+ /// </summary>
+ public RelayCommand CompleteCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the navigate to WiFi command.
/// </summary>
- public RelayCommand StartCommand { get; set; }
+ public RelayCommand NavigateToWiFiCommand { get; set; }
/// <summary>
- /// Gets or sets the complete command.
+ /// Gets or sets the skip embedded test command.
/// </summary>
- public RelayCommand CompleteCommand { get; set; }
+ public RelayCommand SkipEmbeddedTestCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the perform embedded test command.
+ /// </summary>
+ public RelayCommand PerformEmbeddedTestCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the install command.
+ /// </summary>
+ public RelayCommand InstallCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the restart command.
+ /// </summary>
+ public RelayCommand RestartCommand { get; set; }
#endregion
@@ -111,16 +155,31 @@ namespace Tango.PPC.UI.ViewModels
public MachineSetupViewVM(IPPCApplicationManager applicationManager, IMachineSetupManager machineSetupManager)
{
MachineSetupManager = machineSetupManager;
- MachineSetupManager.ProgressLog += (x, msg) => AppendLog(msg);
+ //MachineSetupManager.ProgressLog += (x, msg) => AppendLog(msg);
MachineSetupManager.ProgressStep += (x, step) => AppendLog(Environment.NewLine + "-----------" + step.ToDescription().ToUpper() + "-----------" + Environment.NewLine);
HostAddress = "localhost\\SQLEXPRESS";
SerialNumber = "1111";
- StartCommand = new RelayCommand(StartSetup, () => !String.IsNullOrWhiteSpace(HostAddress) && !String.IsNullOrWhiteSpace(SerialNumber) && State == MachineSetupStates.None);
CompleteCommand = new RelayCommand(CompleteSetup, () => State == MachineSetupStates.Completed);
applicationManager.SetupRequired += ApplicationManager_SetupRequired;
+
+ NavigateToWiFiCommand = new RelayCommand(EnsureWiFi);
+
+ PerformEmbeddedTestCommand = new RelayCommand(PerformEmbeddedTest);
+ SkipEmbeddedTestCommand = new RelayCommand(SkipEmbeddedTest);
+ InstallCommand = new RelayCommand(Install);
+ RestartCommand = new RelayCommand(() => { NavigateTo(MachineSetupView.WelcomeView); });
+
+ if (!LogManager.Categories.Contains(LogCategory.Debug))
+ {
+ LogManager.Categories.Add(LogCategory.Debug);
+ }
+
+ var logger = new SimpleStringLogger();
+ LogManager.RegisterLogger(logger);
+ logger.LogReceived += Logger_LogReceived;
}
#endregion
@@ -138,6 +197,12 @@ namespace Tango.PPC.UI.ViewModels
NavigationManager.NavigateTo(NavigationView.MachineSetupView);
}
+
+ private void Logger_LogReceived(object sender, LogItemBase e)
+ {
+ AppendLog(e.Message);
+ }
+
#endregion
#region Private Methods
@@ -158,10 +223,142 @@ namespace Tango.PPC.UI.ViewModels
}
/// <summary>
- /// Starts the setup.
+ /// Completes the setup.
+ /// </summary>
+ private void CompleteSetup()
+ {
+ String updater_exe = AssemblyHelper.GetCurrentAssemblyFolder() + "\\Tango.PPC.Updater.exe";
+
+ LogManager.Log("Completing machine setup...");
+ LogManager.Log($"Executing '{updater_exe}' with arguments '{_setup_result.UpdatePackagePath}'...");
+ Process.Start(updater_exe, _setup_result.UpdatePackagePath);
+ LogManager.Log("Terminating application process!");
+ Environment.Exit(0);
+ }
+
+ /// <summary>
+ /// Navigates to the specified view.
/// </summary>
- private async void StartSetup()
+ /// <param name="view">The view.</param>
+ private Task NavigateTo(MachineSetupView view)
{
+ return View.NavigateTo(view);
+ }
+
+ #endregion
+
+ #region WiFi
+
+ private async void EnsureWiFi()
+ {
+ await NavigateTo(MachineSetupView.WiFiTestView);
+
+ await Task.Delay(2000);
+
+ bool connected = await ConnectivityProvider.CheckInternetConnection();
+
+ if (connected)
+ {
+ await NavigateTo(MachineSetupView.EmbeddedWelcomeView);
+ }
+ else
+ {
+ await NavigateTo(MachineSetupView.WiFiSelectionView);
+ await ConnectivityProvider.RefreshAvailableWiFiNetworks();
+
+ ConnectivityProvider.ConnectionStateChanged += ConnectivityProvider_ConnectionStateChanged;
+ }
+ }
+
+ private void ConnectivityProvider_ConnectionStateChanged(object sender, Common.Connectivity.ConnectionStateEventArgs e)
+ {
+ if (e.IsConnected)
+ {
+ ConnectivityProvider.ConnectionStateChanged -= ConnectivityProvider_ConnectionStateChanged;
+ EnsureWiFi();
+ }
+ }
+
+ #endregion
+
+ #region Embedded
+
+ private async void PerformEmbeddedTest()
+ {
+ await NavigateTo(MachineSetupView.EmbeddedTestView);
+
+ try
+ {
+ MachineConnectionStatus = "Scanning for the machine...";
+
+ LogManager.Log("Starting machine connection procedure...");
+
+ TimeSpan timeout = TimeSpan.FromSeconds(SettingsManager.Default.GetOrCreate<PPCSettings>().MachineScanningTimeoutSeconds);
+
+ LogManager.Log("Scanning for machine on available serial ports...");
+ Transport.Discovery.UsbCommunicationScanner<ConnectRequest, ConnectResponse> scanner = new Transport.Discovery.UsbCommunicationScanner<ConnectRequest, ConnectResponse>(UsbSerialBaudRates.BR_9600);
+
+ scanner.ScanningPort += (port) =>
+ {
+ MachineConnectionStatus = $"Scanning for the machine on {port}...";
+ };
+
+ var response = await scanner.Scan(new ConnectRequest() { Password = "1234" }, timeout);
+
+ MachineConnectionStatus = "Machine discovered on port: " + response.Adapter.Address + ", trying to connect...";
+
+ LogManager.Log("Machine discovered on port: " + response.Adapter.Address);
+ LogManager.Log("Device Information:");
+ LogManager.Log(response.Response.DeviceInformation.ToJsonString());
+
+ LogManager.Log("Disconnecting machine operator...");
+
+ IMachineOperator op = new MachineOperator(response.Adapter);
+
+ op.EnableDiagnostics = false;
+ op.EnableEmbeddedDebugging = false;
+ op.EnableEventsNotification = false;
+
+ LogManager.Log("Connecting machine operator...");
+ await op.Connect();
+
+ MachineConnectionStatus = "Test completed successfully!";
+
+ await Task.Delay(1000);
+
+ try
+ {
+ await op.Disconnect();
+ }
+ catch { }
+
+ await NavigateTo(MachineSetupView.SetupWelcomeView);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error while trying to scan and connect to the machine.");
+ MachineConnectionStatus = "Test Failed!";
+ await Task.Delay(2000);
+ await NavigateTo(MachineSetupView.EmbeddedWelcomeView);
+ }
+ }
+
+ private async void SkipEmbeddedTest()
+ {
+ if (await NotificationProvider.ShowQuestion("Are you sure you want to skip the machine communication test?"))
+ {
+
+ }
+ }
+
+ #endregion
+
+ #region Setup
+
+ private async void Install()
+ {
+ await NavigateTo(MachineSetupView.SetupProgressView);
+
LogManager.Log("Starting machine setup...");
State = MachineSetupStates.Working;
@@ -172,31 +369,17 @@ namespace Tango.PPC.UI.ViewModels
Settings.ApplicationState = ApplicationStates.SemiSetup;
Settings.Save();
State = MachineSetupStates.Completed;
-
LogManager.Log("Machine setup completed.");
+ await NavigateTo(MachineSetupView.SetupCompletedView);
}
catch (Exception ex)
{
LogManager.Log(ex, "Machine setup failed.");
State = MachineSetupStates.Failed;
- await NotificationProvider.ShowInfo(ex.Message);
+ await NavigateTo(MachineSetupView.SetupFailedView);
}
}
- /// <summary>
- /// Completes the setup.
- /// </summary>
- private void CompleteSetup()
- {
- String updater_exe = AssemblyHelper.GetCurrentAssemblyFolder() + "\\Tango.PPC.Updater.exe";
-
- LogManager.Log("Completing machine setup...");
- LogManager.Log($"Executing '{updater_exe}' with arguments '{_setup_result.UpdatePackagePath}'...");
- Process.Start(updater_exe, _setup_result.UpdatePackagePath);
- LogManager.Log("Terminating application process!");
- Environment.Exit(0);
- }
-
#endregion
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml
index e67905eba..a097eeb45 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml
@@ -4,17 +4,24 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:Tango.PPC.UI.ViewModels"
+ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
xmlns:global="clr-namespace:Tango.PPC.UI"
xmlns:setup="clr-namespace:Tango.PPC.Common.MachineSetup;assembly=Tango.PPC.Common"
+ xmlns:connectivity="clr-namespace:Tango.PPC.Common.Connectivity;assembly=Tango.PPC.Common"
xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch"
xmlns:local="clr-namespace:Tango.PPC.UI.Views"
mc:Ignorable="d"
- d:DesignHeight="2000" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:MachineSetupViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MachineSetupViewVM}">
+ d:DesignHeight="1280" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:MachineSetupViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MachineSetupViewVM}">
<Grid Background="{StaticResource TangoPrimaryBackgroundBrush}">
- <Grid x:Name="Container">
+ <Grid>
<DockPanel>
- <Grid DockPanel.Dock="Bottom" Height="200" Background="{StaticResource TangoMidBackgroundBrush}" Visibility="{Binding State,Converter={StaticResource EnumToVisibilityConverter},ConverterParameter='Working,Failed,Completed'}">
+ <StackPanel DockPanel.Dock="Top" HorizontalAlignment="Center" Margin="0 100 0 0">
+ <Image Source="/Images/package.png" Width="180" Height="180" />
+ <TextBlock HorizontalAlignment="Center" FontSize="{StaticResource TangoHeaderFontSize}" Margin="30">MACHINE SETUP WIZARD</TextBlock>
+ </StackPanel>
+
+ <Grid DockPanel.Dock="Bottom" Height="200" Background="{StaticResource TangoMidBackgroundBrush}">
<Border BorderThickness="0 1 0 0" BorderBrush="{StaticResource TangoGrayBrush}">
<TextBox x:Name="txtLog" SelectionBrush="Transparent" IsReadOnly="True" Padding="5" Background="Transparent" AcceptsReturn="True" TextWrapping="Wrap" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
@@ -22,63 +29,129 @@
</Border>
</Grid>
- <StackPanel HorizontalAlignment="Center" Margin="0 200 0 0">
- <Image Source="/Images/package.png" Width="180" Height="180" />
- <TextBlock HorizontalAlignment="Center" Foreground="{StaticResource TangoPrimaryAccentBrush}" FontSize="{StaticResource TangoHeaderFontSize}" Margin="30">MACHINE SETUP</TextBlock>
+ <controls:NavigationControl x:Name="navigationControl" TransitionType="Slide" KeepElementsAttached="True" Margin="0 20 0 0" SelectedIndex="0">
+
+ <Grid controls:NavigationControl.NavigationName="WelcomeView">
+ <StackPanel HorizontalAlignment="Center" Margin="0 100 0 0">
+ <TextBlock TextAlignment="Center" LineHeight="20" Margin="20 0" TextWrapping="Wrap" FontSize="{StaticResource TangoTitleFontSize}">
+ <Run>Welcome to the machine setup wizard!</Run>
+ <Run>In the next steps the software will gather required information, perform tests and apply an initial configuration to this machine.</Run>
+ <LineBreak/>
+ <LineBreak/>
+ <Run>Press 'START' to initiate the setup process.</Run>
+ </TextBlock>
+
+ <touch:TouchButton Margin="0 250 0 0" Padding="20" Width="300" CornerRadius="35" Command="{Binding NavigateToWiFiCommand}">START</touch:TouchButton>
+ </StackPanel>
+ </Grid>
+
+ <Grid controls:NavigationControl.NavigationName="WiFiSelectionView">
+ <DockPanel>
+ <TextBlock DockPanel.Dock="Top" Margin="20 0" FontSize="{StaticResource TangoTitleFontSize}" HorizontalAlignment="Center" TextWrapping="Wrap" TextAlignment="Center">
+ <Run>We need an active internet connection in order to fetch the latest software package and machine configuration.</Run>
+ <LineBreak/>
+ <LineBreak/>
+ <Run>Please connect to one of the available WiFi networks.</Run>
+ </TextBlock>
+
+ <connectivity:AvailableWiFiConnectionsControl DataContext="{Binding ConnectivityProvider}" Margin="50 100 50 20" BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 1 0 0" />
+ </DockPanel>
+ </Grid>
+
+ <Grid controls:NavigationControl.NavigationName="WiFiTestView">
+ <StackPanel HorizontalAlignment="Center" Margin="0 200 0 0">
+ <TextBlock DockPanel.Dock="Top" Margin="20 0" FontSize="{StaticResource TangoTitleFontSize}" HorizontalAlignment="Center" TextWrapping="Wrap" TextAlignment="Center">
+ Checking internet connection, please wait...
+ </TextBlock>
+ <touch:TouchBusyIndicator Width="250" Margin="0 100 0 0" Height="250" IsIndeterminate="True" />
+ </StackPanel>
+ </Grid>
- <StackPanel Visibility="{Binding State,Converter={StaticResource EnumToVisibilityConverter},ConverterParameter='None'}">
- <TextBlock TextAlignment="Center" LineHeight="25">
- <Run>This machine has not been configured yet and require several steps in order to be ready.</Run>
- <LineBreak/>
- <Run>Enter this machine serial number, synchronization server address and tap 'INSTALL'.</Run>
- </TextBlock>
+ <Grid controls:NavigationControl.NavigationName="EmbeddedWelcomeView">
+ <StackPanel HorizontalAlignment="Center" Margin="0 100 0 0">
+ <TextBlock TextAlignment="Center" LineHeight="20" Margin="20 0" TextWrapping="Wrap" FontSize="{StaticResource TangoTitleFontSize}">
+ <Run>It is recommended to perform a quick communication test with the machine before proceeding. Please turn on and connect the machine, then tap 'PERFORM TEST'.</Run>
+ </TextBlock>
- <StackPanel Width="500" Margin="0 100 0 0" TextElement.FontSize="{StaticResource TangoTitleFontSize}">
- <TextBlock>SERIAL NUMBER</TextBlock>
- <touch:TouchTextBox Foreground="{StaticResource TangoGrayTextBrush}" Margin="0 10 0 0" Text="{Binding SerialNumber}" KeyboardContainer="{Binding ElementName=Container}" />
+ <StackPanel Orientation="Horizontal" Margin="0 250 0 0" HorizontalAlignment="Center">
+ <touch:TouchButton Margin="10" Background="{StaticResource TangoGrayBrush}" Padding="20" Width="300" CornerRadius="35" Command="{Binding SkipEmbeddedTestCommand}">SKIP</touch:TouchButton>
+ <touch:TouchButton Margin="10" Padding="20" Width="300" CornerRadius="35" Command="{Binding PerformEmbeddedTestCommand}">PERFORM TEST</touch:TouchButton>
+ </StackPanel>
+ </StackPanel>
+ </Grid>
+
+ <Grid controls:NavigationControl.NavigationName="EmbeddedTestView">
+ <StackPanel HorizontalAlignment="Center" Margin="0 200 0 0">
+ <TextBlock Text="{Binding MachineConnectionStatus}" DockPanel.Dock="Top" Margin="20 0" FontSize="{StaticResource TangoTitleFontSize}" HorizontalAlignment="Center" TextWrapping="Wrap" TextAlignment="Center"></TextBlock>
+ <touch:TouchProgressBar Height="20" Width="700" Margin="0 40 0 0" IsIndeterminate="True" />
+ </StackPanel>
+ </Grid>
+
+ <Grid controls:NavigationControl.NavigationName="SetupWelcomeView">
+ <StackPanel>
+ <TextBlock TextAlignment="Center" LineHeight="25" FontSize="{StaticResource TangoTitleFontSize}" Margin="40 0" TextWrapping="Wrap">
+ The next step is to download the latest software package and synchronize the machine data. Enter the machine serial number, service address and press 'INSTALL'.
+ </TextBlock>
+
+ <StackPanel Width="500" Margin="0 100 0 0" TextElement.FontSize="{StaticResource TangoTitleFontSize}">
+ <TextBlock>SERIAL NUMBER</TextBlock>
+ <touch:TouchTextBox Foreground="{StaticResource TangoGrayTextBrush}" Margin="0 10 0 0" Text="{Binding SerialNumber}" KeyboardContainer="{Binding ElementName=Container}" />
- <TextBlock Margin="0 40 0 0">MACHINE SERVICE ADDRESS</TextBlock>
- <touch:TouchTextBox Foreground="{StaticResource TangoGrayTextBrush}" Margin="0 10 0 0" Text="{Binding HostAddress}" KeyboardContainer="{Binding ElementName=Container}" />
+ <TextBlock Margin="0 80 0 0">MACHINE SERVICE ADDRESS</TextBlock>
+ <touch:TouchTextBox Foreground="{StaticResource TangoGrayTextBrush}" Margin="0 10 0 0" Text="{Binding HostAddress}" KeyboardContainer="{Binding ElementName=Container}" />
- <touch:TouchButton Margin="0 200 0 0" Padding="20" Width="300" CornerRadius="35" Command="{Binding StartCommand}">INSTALL</touch:TouchButton>
+ <touch:TouchButton Margin="0 200 0 0" Padding="20" Width="300" CornerRadius="35" Command="{Binding InstallCommand}">INSTALL</touch:TouchButton>
+ </StackPanel>
</StackPanel>
- </StackPanel>
+ </Grid>
- <StackPanel Visibility="{Binding State,Converter={StaticResource EnumToVisibilityConverter},ConverterParameter='Working'}">
- <TextBlock TextAlignment="Center">
+ <Grid controls:NavigationControl.NavigationName="SetupProgressView">
+ <StackPanel>
+ <TextBlock TextAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">
<Run>Please wait while we setting up this machine.</Run>
<Run>Do not turn off this PC.</Run>
- </TextBlock>
+ </TextBlock>
- <touch:TouchBusyIndicator Width="100" Height="100" Margin="0 80 0 0">
- <touch:TouchBusyIndicator.Style>
- <Style TargetType="touch:TouchBusyIndicator">
- <Setter Property="IsIndeterminate" Value="False"></Setter>
- <Style.Triggers>
- <DataTrigger Binding="{Binding State}" Value="Working">
- <Setter Property="IsIndeterminate" Value="True"></Setter>
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </touch:TouchBusyIndicator.Style>
- </touch:TouchBusyIndicator>
- <touch:TouchStepProgressBar FontSize="10" Width="720" Height="50" Margin="0 100 0 0" ItemsSource="{Binding Source={x:Type setup:MachineSetupSteps},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding MachineSetupManager.CurrentStep}" SelectedValuePath="Value" DisplayMemberPath="DisplayName" />
+ <touch:TouchBusyIndicator Width="100" Height="100" Margin="0 80 0 0">
+ <touch:TouchBusyIndicator.Style>
+ <Style TargetType="touch:TouchBusyIndicator">
+ <Setter Property="IsIndeterminate" Value="False"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding State}" Value="Working">
+ <Setter Property="IsIndeterminate" Value="True"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </touch:TouchBusyIndicator.Style>
+ </touch:TouchBusyIndicator>
+ <touch:TouchStepProgressBar FontSize="10" Width="720" Height="50" Margin="0 100 0 0" ItemsSource="{Binding Source={x:Type setup:MachineSetupSteps},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding MachineSetupManager.CurrentStep}" SelectedValuePath="Value" DisplayMemberPath="DisplayName" />
- <StackPanel Margin="100 100 100 0" Visibility="{Binding MachineSetupManager.CurrentStep,Converter={StaticResource EnumToVisibilityConverter},ConverterParameter='DownloadingPackage'}">
- <TextBlock Text="{Binding MachineSetupManager.DownloadingPackagesStatus,Mode=OneWay}"></TextBlock>
- <touch:TouchProgressBar Margin="0 10 0 0" Height="10" Maximum="100" Value="{Binding MachineSetupManager.DownloadingPackagesProgress,Mode=OneWay}" />
+ <StackPanel Margin="100 100 100 0" Visibility="{Binding MachineSetupManager.CurrentStep,Converter={StaticResource EnumToVisibilityConverter},ConverterParameter='DownloadingPackage'}">
+ <TextBlock Text="{Binding MachineSetupManager.DownloadingPackagesStatus,Mode=OneWay}"></TextBlock>
+ <touch:TouchProgressBar Margin="0 10 0 0" Height="10" Maximum="100" Value="{Binding MachineSetupManager.DownloadingPackagesProgress,Mode=OneWay}" />
+ </StackPanel>
</StackPanel>
- </StackPanel>
+ </Grid>
- <StackPanel Visibility="{Binding State,Converter={StaticResource EnumToVisibilityConverter},ConverterParameter='Completed'}">
+ <Grid controls:NavigationControl.NavigationName="SetupCompletedView">
<StackPanel HorizontalAlignment="Center" Margin="0 50 0 0">
<touch:TouchIcon Icon="Check" Foreground="{StaticResource TangoPrimaryAccentBrush}" Width="70" Height="70" />
<TextBlock VerticalAlignment="Center" Margin="0 10 0 0" Foreground="{StaticResource TangoPrimaryAccentBrush}" FontSize="{StaticResource TangoTitleFontSize}">Setup completed successfully. Machine is ready!</TextBlock>
+
+ <touch:TouchButton Margin="0 200 0 0" Padding="20" Width="300" CornerRadius="35" Command="{Binding CompleteCommand}">RESTART</touch:TouchButton>
</StackPanel>
+ </Grid>
- <touch:TouchButton Margin="0 200 0 0" Padding="20" Width="300" CornerRadius="35" Command="{Binding CompleteCommand}">RESTART</touch:TouchButton>
- </StackPanel>
- </StackPanel>
+ <Grid controls:NavigationControl.NavigationName="SetupFailedView">
+ <StackPanel HorizontalAlignment="Center" Margin="0 50 0 0">
+ <touch:TouchIcon Icon="AlertOctagon" Foreground="{StaticResource TangoErrorBrush}" Width="70" Height="70" />
+ <TextBlock VerticalAlignment="Center" Margin="0 10 0 0" Foreground="{StaticResource TangoErrorBrush}" FontSize="{StaticResource TangoTitleFontSize}">Setup failed, tap 'RESTART' to restart the process.</TextBlock>
+
+ <touch:TouchButton Margin="0 200 0 0" Padding="20" Width="300" CornerRadius="35" Command="{Binding RestartCommand}">RESTART</touch:TouchButton>
+ </StackPanel>
+ </Grid>
+
+ </controls:NavigationControl>
</DockPanel>
</Grid>
</Grid>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml.cs
index a2c20ecc2..aee809e9c 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml.cs
@@ -12,6 +12,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using Tango.PPC.UI.ViewModels;
using Tango.PPC.UI.ViewsContracts;
namespace Tango.PPC.UI.Views
@@ -35,5 +36,17 @@ namespace Tango.PPC.UI.Views
txtLog.SelectionStart = txtLog.Text.Length;
txtLog.ScrollToEnd();
}
+
+ public Task NavigateTo(MachineSetupViewVM.MachineSetupView view)
+ {
+ TaskCompletionSource<object> source = new TaskCompletionSource<object>();
+
+ navigationControl.NavigateTo(view.ToString(),() =>
+ {
+ source.SetResult(new object());
+ });
+
+ return source.Task;
+ }
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs
index c9ff93280..65b194f7b 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.PPC.Common;
+using static Tango.PPC.UI.ViewModels.MachineSetupViewVM;
namespace Tango.PPC.UI.ViewsContracts
{
@@ -18,5 +19,11 @@ namespace Tango.PPC.UI.ViewsContracts
/// </summary>
/// <param name="log">The log.</param>
void AppendLog(String log);
+
+ /// <summary>
+ /// Navigates to the specified machine setup view.
+ /// </summary>
+ /// <param name="view">The view.</param>
+ Task NavigateTo(MachineSetupView view);
}
}