aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-03-12 15:26:36 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-03-12 15:26:36 +0200
commitdb5c4418d90840ec033a8eacc948419b72755857 (patch)
tree70be526f87898e133718b315bbf7b3b02e9d35c0 /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI
parent64326bd1599ef3855212c737ddfaeb6756337e2d (diff)
downloadTango-db5c4418d90840ec033a8eacc948419b72755857.tar.gz
Tango-db5c4418d90840ec033a8eacc948419b72755857.zip
Machine Studio v4.0.10
PPC v1.0.6
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs393
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/MessageBoxWindow.xaml2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/TextInputBoxWindow.xaml2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs46
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs7
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs32
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineLoginView.xaml23
9 files changed, 310 insertions, 199 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs
index 161177bf1..7c56115e3 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs
@@ -105,109 +105,148 @@ namespace Tango.MachineStudio.UI.Notifications
}
/// <summary>
- /// Creates a new instance of the specified View type and displays it as a modal dialog.
+ /// Shows the specified view with the specified view model as it's data context.
/// </summary>
+ /// <typeparam name="VM">The type of the mm.</typeparam>
/// <typeparam name="View">The type of the view.</typeparam>
- /// <typeparam name="VM">The type of the view model.</typeparam>
- /// <param name="onAccept">Accept button callback.</param>
- /// <param name="onCancel">Cancel button callback.</param>
- public void ShowModalDialog<View, VM>(Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM
+ /// <param name="vm">The view model.</param>
+ /// <param name="view">The view.</param>
+ /// <param name="onAccept">The accept action.</param>
+ /// <param name="onCancel">The cancel action.</param>
+ public void ShowModalDialog<VM, View>(VM vm, View view, Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM
{
- var view = Activator.CreateInstance<View>();
- DialogWindow dialog = new DialogWindow();
- dialog.Owner = Application.Current.MainWindow;
- dialog.InnerContent = view;
- MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
- view.Loaded += (x, y) =>
+ try
{
- VM context = view.DataContext as VM;
- dialog.DataContext = context;
+ DialogWindow dialog = new DialogWindow();
+ dialog.Owner = Application.Current.MainWindow;
+ dialog.InnerContent = view;
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
+ view.Loaded += (x, y) =>
+ {
+ try
+ {
+ VM context = vm;
+ dialog.DataContext = context;
- Action onAcceptAction = null;
- Action onCancelAction = null;
+ Action onAcceptAction = null;
+ Action onCancelAction = null;
- onAcceptAction = new Action(() =>
- {
- dialog.Close();
- onAccept(context);
- context.Accepted -= onAcceptAction;
- context.Canceled -= onCancelAction;
- });
+ onAcceptAction = new Action(() =>
+ {
+ dialog.Close();
+ onAccept(context);
+ context.Accepted -= onAcceptAction;
+ context.Canceled -= onCancelAction;
+ });
- onCancelAction = new Action(() =>
- {
- dialog.Close();
+ onCancelAction = new Action(() =>
+ {
+ dialog.Close();
- if (onCancel != null)
- {
- onCancel();
- }
+ if (onCancel != null)
+ {
+ onCancel();
+ }
- context.Accepted -= onAcceptAction;
- context.Canceled -= onCancelAction;
- });
+ context.Canceled -= onCancelAction;
+ context.Accepted -= onAcceptAction;
+ });
- context.Accepted += onAcceptAction;
- context.Canceled += onCancelAction;
+ context.Accepted += onAcceptAction;
+ context.Canceled += onCancelAction;
- context.OnShow();
- };
- dialog.ShowDialog();
- MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
+ context.OnShow();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error display modal dialog. {typeof(VM).Name}");
+ onCancel?.Invoke();
+ }
+ };
+
+ dialog.ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error display modal dialog. {typeof(VM).Name}");
+ onCancel?.Invoke();
+ }
+ finally
+ {
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
+ }
}
/// <summary>
- /// Shows the specified view with the specified view model as it's data context.
+ /// Creates a new instance of the specified View type and displays it as a modal dialog.
/// </summary>
- /// <typeparam name="VM">The type of the mm.</typeparam>
/// <typeparam name="View">The type of the view.</typeparam>
- /// <param name="vm">The view model.</param>
- /// <param name="view">The view.</param>
- /// <param name="onAccept">The accept action.</param>
- /// <param name="onCancel">The cancel action.</param>
- public void ShowModalDialog<VM, View>(VM vm, Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM
+ /// <typeparam name="VM">The type of the view model.</typeparam>
+ /// <param name="onAccept">Accept button callback.</param>
+ /// <param name="onCancel">Cancel button callback.</param>
+ public void ShowModalDialog<View, VM>(Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM
{
- var view = Activator.CreateInstance<View>();
- DialogWindow dialog = new DialogWindow();
- dialog.Owner = Application.Current.MainWindow;
- dialog.InnerContent = view;
- MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
- view.Loaded += (x, y) =>
+ try
{
- VM context = vm;
- dialog.DataContext = context;
+ var view = Activator.CreateInstance<View>();
+ DialogWindow dialog = new DialogWindow();
+ dialog.Owner = Application.Current.MainWindow;
+ dialog.InnerContent = view;
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
+ view.Loaded += (x, y) =>
+ {
+ try
+ {
+ VM context = view.DataContext as VM;
+ dialog.DataContext = context;
- Action onAcceptAction = null;
- Action onCancelAction = null;
+ Action onAcceptAction = null;
+ Action onCancelAction = null;
- onAcceptAction = new Action(() =>
- {
- dialog.Close();
- onAccept(context);
- context.Accepted -= onAcceptAction;
- context.Canceled -= onCancelAction;
- });
+ onAcceptAction = new Action(() =>
+ {
+ dialog.Close();
+ onAccept(context);
+ context.Accepted -= onAcceptAction;
+ context.Canceled -= onCancelAction;
+ });
- onCancelAction = new Action(() =>
- {
- dialog.Close();
+ onCancelAction = new Action(() =>
+ {
+ dialog.Close();
- if (onCancel != null)
- {
- onCancel();
- }
+ if (onCancel != null)
+ {
+ onCancel();
+ }
- context.Accepted -= onAcceptAction;
- context.Canceled -= onCancelAction;
- });
+ context.Accepted -= onAcceptAction;
+ context.Canceled -= onCancelAction;
+ });
- context.Accepted += onAcceptAction;
- context.Canceled += onCancelAction;
+ context.Accepted += onAcceptAction;
+ context.Canceled += onCancelAction;
- context.OnShow();
- };
- dialog.ShowDialog();
- MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
+ context.OnShow();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error display modal dialog. {typeof(VM).Name}");
+ onCancel?.Invoke();
+ }
+ };
+ dialog.ShowDialog();
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error display modal dialog. {typeof(VM).Name}");
+ onCancel?.Invoke();
+ }
+ finally
+ {
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
+ }
}
/// <summary>
@@ -219,48 +258,68 @@ namespace Tango.MachineStudio.UI.Notifications
/// <param name="view">The view.</param>
/// <param name="onAccept">The accept action.</param>
/// <param name="onCancel">The cancel action.</param>
- public void ShowModalDialog<VM, View>(VM vm, View view, Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM
+ public void ShowModalDialog<VM, View>(VM vm, Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM
{
- DialogWindow dialog = new DialogWindow();
- dialog.Owner = Application.Current.MainWindow;
- dialog.InnerContent = view;
- MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
- view.Loaded += (x, y) =>
+ try
{
- VM context = vm;
- dialog.DataContext = context;
+ var view = Activator.CreateInstance<View>();
+ DialogWindow dialog = new DialogWindow();
+ dialog.Owner = Application.Current.MainWindow;
+ dialog.InnerContent = view;
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
+ view.Loaded += (x, y) =>
+ {
+ try
+ {
+ VM context = vm;
+ dialog.DataContext = context;
- Action onAcceptAction = null;
- Action onCancelAction = null;
+ Action onAcceptAction = null;
+ Action onCancelAction = null;
- onAcceptAction = new Action(() =>
- {
- dialog.Close();
- onAccept(context);
- context.Accepted -= onAcceptAction;
- context.Canceled -= onCancelAction;
- });
+ onAcceptAction = new Action(() =>
+ {
+ dialog.Close();
+ onAccept(context);
+ context.Accepted -= onAcceptAction;
+ context.Canceled -= onCancelAction;
+ });
- onCancelAction = new Action(() =>
- {
- dialog.Close();
+ onCancelAction = new Action(() =>
+ {
+ dialog.Close();
- if (onCancel != null)
- {
- onCancel();
- }
+ if (onCancel != null)
+ {
+ onCancel();
+ }
- context.Canceled -= onCancelAction;
- context.Accepted -= onAcceptAction;
- });
+ context.Accepted -= onAcceptAction;
+ context.Canceled -= onCancelAction;
+ });
- context.Accepted += onAcceptAction;
- context.Canceled += onCancelAction;
+ context.Accepted += onAcceptAction;
+ context.Canceled += onCancelAction;
- context.OnShow();
- };
- dialog.ShowDialog();
- MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
+ context.OnShow();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error display modal dialog. {typeof(VM).Name}");
+ onCancel?.Invoke();
+ }
+ };
+ dialog.ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error display modal dialog. {typeof(VM).Name}");
+ onCancel?.Invoke();
+ }
+ finally
+ {
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
+ }
}
/// <summary>
@@ -272,67 +331,87 @@ namespace Tango.MachineStudio.UI.Notifications
/// <exception cref="NullReferenceException">Could not locate view " + viewName</exception>
public void ShowModalDialog<VM>(Action<VM> onAccept, Action onCancel) where VM : DialogViewVM
{
- String viewName = typeof(VM).Name.Replace("VM", "");
-
- if (viewTypes == null)
+ try
{
- viewTypes = AppDomain.CurrentDomain.GetAssemblies().Where(x => x.FullName.Contains("MachineStudio")).SelectMany(x => x.GetTypes()).ToList();
- }
+ String viewName = typeof(VM).Name.Replace("VM", "");
- var viewType = viewTypes.SingleOrDefault(x => x.Name == viewName);
+ if (viewTypes == null)
+ {
+ viewTypes = AppDomain.CurrentDomain.GetAssemblies().Where(x => x.FullName.Contains("MachineStudio")).SelectMany(x => x.GetTypes()).ToList();
+ }
- if (viewType == null)
- {
- throw new NullReferenceException("Could not locate view " + viewName);
- }
+ var viewType = viewTypes.SingleOrDefault(x => x.Name == viewName);
- var view = Activator.CreateInstance(viewType) as FrameworkElement;
- DialogWindow dialog = new DialogWindow();
- dialog.Owner = Application.Current.MainWindow;
- dialog.InnerContent = view;
- MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
- view.Loaded += (x, y) =>
- {
- VM context = view.DataContext as VM;
- if (context == null)
+ if (viewType == null)
{
- context = Activator.CreateInstance<VM>();
+ throw new NullReferenceException("Could not locate view " + viewName);
}
- dialog.DataContext = context;
-
- Action onCancelAction = null;
- Action onAcceptAction = null;
- onAcceptAction = new Action(() =>
+ var view = Activator.CreateInstance(viewType) as FrameworkElement;
+ DialogWindow dialog = new DialogWindow();
+ dialog.Owner = Application.Current.MainWindow;
+ dialog.InnerContent = view;
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
+ view.Loaded += (x, y) =>
{
- dialog.Close();
- onAccept(context);
+ try
+ {
+ VM context = view.DataContext as VM;
+ if (context == null)
+ {
+ context = Activator.CreateInstance<VM>();
+ }
+ dialog.DataContext = context;
- context.Canceled -= onCancelAction;
- context.Accepted -= onAcceptAction;
- });
+ Action onCancelAction = null;
+ Action onAcceptAction = null;
- onCancelAction = new Action(() =>
- {
- dialog.Close();
+ onAcceptAction = new Action(() =>
+ {
+ dialog.Close();
+ onAccept(context);
- if (onCancel != null)
- {
- onCancel();
- }
+ context.Canceled -= onCancelAction;
+ context.Accepted -= onAcceptAction;
+ });
- context.Canceled -= onCancelAction;
- context.Accepted -= onAcceptAction;
- });
+ onCancelAction = new Action(() =>
+ {
+ dialog.Close();
- context.Accepted += onAcceptAction;
- context.Canceled += onCancelAction;
+ if (onCancel != null)
+ {
+ onCancel();
+ }
- context.OnShow();
- };
+ context.Canceled -= onCancelAction;
+ context.Accepted -= onAcceptAction;
+ });
- dialog.ShowDialog();
- MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
+ context.Accepted += onAcceptAction;
+ context.Canceled += onCancelAction;
+
+ context.OnShow();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error display modal dialog. {typeof(VM).Name}");
+ onCancel?.Invoke();
+ return;
+ }
+ };
+
+ dialog.ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error display modal dialog. {typeof(VM).Name}");
+ onCancel?.Invoke();
+ }
+ finally
+ {
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
+ }
}
/// <summary>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml
index c11e2e11b..2eb1080cb 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml
@@ -7,7 +7,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Tango.MachineStudio.UI.Windows"
mc:Ignorable="d"
- Title="Machine Studio" MinHeight="220" SizeToContent="WidthAndHeight" MinWidth="600" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent">
+ Title="Machine Studio" MinHeight="220" SizeToContent="WidthAndHeight" MinWidth="600" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent" ShowInTaskbar="False">
<Grid>
<Grid>
<Border Background="White" CornerRadius="10" Padding="10" Margin="20">
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/MessageBoxWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/MessageBoxWindow.xaml
index a89f8eeca..8f9512236 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/MessageBoxWindow.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/MessageBoxWindow.xaml
@@ -8,7 +8,7 @@
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
mc:Ignorable="d"
- Title="Machine Studio" MinHeight="220" MaxHeight="600" SizeToContent="Height" Width="570" Opacity="0" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent">
+ Title="Machine Studio" MinHeight="220" MaxHeight="600" SizeToContent="Height" Width="570" Opacity="0" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent" ShowInTaskbar="False">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></BooleanToVisibilityConverter>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/TextInputBoxWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/TextInputBoxWindow.xaml
index d2aad7cee..5e27071ec 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/TextInputBoxWindow.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/TextInputBoxWindow.xaml
@@ -8,7 +8,7 @@
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
mc:Ignorable="d"
- Title="Machine Studio" MinHeight="220" MaxHeight="600" SizeToContent="Height" Width="570" Opacity="0" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent">
+ Title="Machine Studio" MinHeight="220" MaxHeight="600" SizeToContent="Height" Width="570" Opacity="0" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent" ShowInTaskbar="False">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></BooleanToVisibilityConverter>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
index 7fbb0008c..3fffd69fd 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
@@ -61,7 +61,6 @@ namespace Tango.MachineStudio.UI
TangoIOC.Default.Unregister<INavigationManager>();
TangoIOC.Default.Unregister<IStudioModuleLoader>();
TangoIOC.Default.Unregister<IStudioApplicationManager>();
- TangoIOC.Default.Unregister<ExternalBridgeScanner>();
TangoIOC.Default.Unregister<IVideoCaptureProvider>();
TangoIOC.Default.Unregister<IDiagnosticsFrameProvider>();
TangoIOC.Default.Unregister<IEventLogger>();
@@ -79,7 +78,6 @@ namespace Tango.MachineStudio.UI
TangoIOC.Default.Register<INavigationManager, DefaultNavigationManager>();
TangoIOC.Default.Register<IStudioModuleLoader, DefaultStudioModuleLoader>();
TangoIOC.Default.Register<IStudioApplicationManager, DefaultStudioApplicationManager>();
- TangoIOC.Default.Register<ExternalBridgeScanner, ExternalBridgeScanner>();
TangoIOC.Default.Register<IVideoCaptureProvider, DefaultVideoCaptureProvider>();
TangoIOC.Default.Register<IDiagnosticsFrameProvider, DefaultDiagnosticsFrameProvider>();
TangoIOC.Default.Register<IEventLogger, DefaultEventLogger>();
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs
index 7737911e0..ce49d805e 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs
@@ -19,18 +19,16 @@ namespace Tango.MachineStudio.UI.ViewModels
/// <seealso cref="Tango.MachineStudio.Common.Notifications.DialogViewVM" />
public class MachineConnectionViewVM : DialogViewVM
{
- private EmulatorExternalBridge _emulator;
-
- private ExternalBridgeScanner _scanner;
- /// <summary>
- /// Gets or sets the machine scanner.
- /// </summary>
+ private static ExternalBridgeScanner _scanner;
public ExternalBridgeScanner Scanner
{
get { return _scanner; }
set { _scanner = value; RaisePropertyChangedAuto(); }
}
+
+ private EmulatorExternalBridge _emulator;
+
private IExternalBridgeClient _selectedMachine;
/// <summary>
/// Gets or sets the selected machine.
@@ -50,11 +48,15 @@ namespace Tango.MachineStudio.UI.ViewModels
/// Initializes a new instance of the <see cref="MachineConnectionViewVM"/> class.
/// </summary>
/// <param name="scanner">The scanner.</param>
- public MachineConnectionViewVM(ExternalBridgeScanner scanner)
+ public MachineConnectionViewVM()
{
+ if (_scanner == null)
+ {
+ _scanner = new ExternalBridgeScanner();
+ }
+
EnableDiagnostics = true;
UploadHardwareConfiguration = true;
- Scanner = scanner;
ConnectCommand = new RelayCommand(Connect, (x) => SelectedMachine != null);
}
@@ -65,7 +67,7 @@ namespace Tango.MachineStudio.UI.ViewModels
{
if (SelectedMachine != null)
{
- Scanner.Stop();
+ _scanner.Stop();
Accept();
}
}
@@ -75,7 +77,7 @@ namespace Tango.MachineStudio.UI.ViewModels
/// </summary>
protected override void Cancel()
{
- Scanner.Stop();
+ _scanner.Stop();
base.Cancel();
}
@@ -85,19 +87,27 @@ namespace Tango.MachineStudio.UI.ViewModels
public override void OnShow()
{
base.OnShow();
- Scanner.AvailableMachines.Clear();
- if (SettingsManager.Default.GetOrCreate<MachineStudioSettings>().UseExternalBridgeEmulator)
+ try
{
- if (_emulator != null)
+ _scanner.AvailableMachines.Clear();
+
+ if (SettingsManager.Default.GetOrCreate<MachineStudioSettings>().UseExternalBridgeEmulator)
{
- _emulator.Disconnect();
+ if (_emulator != null)
+ {
+ _emulator.Disconnect();
+ }
+ _emulator = new EmulatorExternalBridge();
}
- _emulator = new EmulatorExternalBridge();
- }
- Scanner.AvailableMachines.Add(_emulator);
- Scanner.Start();
+ _scanner.AvailableMachines.Add(_emulator);
+ _scanner.Start();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error starting external bridge scanner.");
+ }
}
private bool _enableDiagnostics;
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs
index 2b1acdbe6..7584617ed 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs
@@ -5,6 +5,7 @@ using System.Text;
using System.Threading.Tasks;
using Tango.Core.Commands;
using Tango.MachineStudio.Common.Notifications;
+using Tango.PMR.Integration;
using Tango.SharedUI;
namespace Tango.MachineStudio.UI.ViewModels
@@ -21,6 +22,11 @@ namespace Tango.MachineStudio.UI.ViewModels
public String Password { get; set; }
/// <summary>
+ /// Gets or sets the intent.
+ /// </summary>
+ public ExternalBridgeLoginIntent Intent { get; set; }
+
+ /// <summary>
/// Gets or sets the login command.
/// </summary>
public RelayCommand<String> LoginCommand { get; set; }
@@ -35,6 +41,7 @@ namespace Tango.MachineStudio.UI.ViewModels
/// </summary>
public MachineLoginViewVM()
{
+ Intent = ExternalBridgeLoginIntent.FullControl;
LoginCommand = new RelayCommand<string>(Login);
CancelCommand = new RelayCommand(Cancel);
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
index 986bf483f..3f69ff771 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
@@ -9,6 +9,7 @@ using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
+using System.Windows.Input;
using System.Windows.Media;
using Tango.BL;
using Tango.BL.Builders;
@@ -467,7 +468,7 @@ namespace Tango.MachineStudio.UI.ViewModels
HostName = Environment.MachineName,
Password = login.Password,
UserGuid = AuthenticationProvider.CurrentUser.Guid,
- Intent = PMR.Integration.ExternalBridgeLoginIntent.Override,
+ Intent = login.Intent,
});
ApplicationManager.SetConnectedMachine(x.SelectedMachine);
@@ -892,25 +893,28 @@ namespace Tango.MachineStudio.UI.ViewModels
{
if (!IsApplicationReady)
{
- var settings = SettingsManager.Default.GetOrCreate<MachineStudioSettings>();
-
- foreach (var item in settings.StudioModulesBounds)
+ if (!Keyboard.IsKeyDown(Key.LeftCtrl))
{
- var module = StudioModuleLoader.AllModules.SingleOrDefault(x => x.Name == item.Name);
+ var settings = SettingsManager.Default.GetOrCreate<MachineStudioSettings>();
- if (module != null && !module.InNewWindow)
+ foreach (var item in settings.StudioModulesBounds)
{
- OpenModuleInWindow(module, item.Bounds, item.State);
- }
- }
+ var module = StudioModuleLoader.AllModules.SingleOrDefault(x => x.Name == item.Name);
- if (settings.LastMainModuleName != null)
- {
- var m = StudioModuleLoader.UserModules.SingleOrDefault(x => x.Name == settings.LastMainModuleName);
+ if (module != null && !module.InNewWindow)
+ {
+ OpenModuleInWindow(module, item.Bounds, item.State);
+ }
+ }
- if (m != null)
+ if (settings.LastMainModuleName != null)
{
- StartModule(m);
+ var m = StudioModuleLoader.UserModules.SingleOrDefault(x => x.Name == settings.LastMainModuleName);
+
+ if (m != null)
+ {
+ StartModule(m);
+ }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineLoginView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineLoginView.xaml
index 04f787c41..14967686f 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineLoginView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineLoginView.xaml
@@ -5,9 +5,16 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:pmr="clr-namespace:Tango.PMR.Integration;assembly=Tango.PMR"
+ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="550" Background="White" DataContext="{Binding MachineLoginViewVM, Source={StaticResource Locator}}">
+
+ <UserControl.Resources>
+ <converters:EnumToItemsSourceConverter x:Key="EnumToItemsSourceConverter" />
+ </UserControl.Resources>
+
<Grid>
<DockPanel LastChildFill="True">
<StackPanel Margin="10" Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Right" DockPanel.Dock="Bottom">
@@ -26,12 +33,18 @@
<materialDesign:PackIcon Kind="Lock" VerticalAlignment="Bottom" Width="24" Height="24" HorizontalAlignment="Right" Foreground="{StaticResource AccentColorBrush}" />
</Grid>
<TextBlock Padding="0 10 0 0" TextWrapping="Wrap" Margin="10 0 0 0" VerticalAlignment="Top" FontSize="18" Text="Machine Login" Width="400"></TextBlock>
- </StackPanel>
-
- <StackPanel Margin="60 0 0 0">
- <TextBlock Margin="0 15 0 0">Enter machine password</TextBlock>
- <PasswordBox x:Name="txtPass" Margin="0 0 0 0" HorizontalAlignment="Left" PasswordChanged="txtPass_PasswordChanged" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="*********" Width="300" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" />
</StackPanel>
+
+ <DockPanel Margin="60 15 0 0">
+ <StackPanel Width="280" >
+ <TextBlock>Enter machine password</TextBlock>
+ <PasswordBox x:Name="txtPass" Margin="0 0 0 0" PasswordChanged="txtPass_PasswordChanged" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="*********" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" />
+ </StackPanel>
+ <StackPanel Margin="20 0 20 0">
+ <TextBlock>Intent</TextBlock>
+ <ComboBox Margin="0 8 0 0" ItemsSource="{Binding Source={x:Type pmr:ExternalBridgeLoginIntent},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding Intent}" SelectedValuePath="Value" DisplayMemberPath="DisplayName"></ComboBox>
+ </StackPanel>
+ </DockPanel>
</StackPanel>
</Grid>
</DockPanel>