aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2017-12-28 15:16:27 +0200
committerAvi Levkovich <avi@twine-s.com>2017-12-28 15:16:27 +0200
commitc056f991c0168f6449fac16c3b0cb165518c5e01 (patch)
treee5c69bb1f3e03029991efe15e930af80ff6712db /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels
parent15799210aab388996f86808e000940093306ca41 (diff)
parent2d3f4bfd4b265888933ad8a7e21e4dd80aa1eda2 (diff)
downloadTango-c056f991c0168f6449fac16c3b0cb165518c5e01.tar.gz
Tango-c056f991c0168f6449fac16c3b0cb165518c5e01.zip
MERGE.
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs1
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs55
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs31
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs98
4 files changed, 182 insertions, 3 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
index f50b734f4..f213af0d4 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
@@ -31,7 +31,6 @@ namespace Tango.MachineStudio.UI.ViewModels
{
StaThreadHelper.StartStaThread(() =>
{
- Thread.Sleep(3000);
try
{
ObservablesEntitiesAdapter.Instance.Initialize();
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs
new file mode 100644
index 000000000..b8b888e86
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.Integration.Services;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.UI.ViewModels
+{
+ public class MachineConnectionViewVM : DialogViewVM
+ {
+ private ExternalBridgeScanner _scanner;
+
+ public ExternalBridgeScanner Scanner
+ {
+ get { return _scanner; }
+ set { _scanner = value; RaisePropertyChangedAuto(); }
+ }
+
+ private IExternalBridgeClient _selectedMachine;
+
+ public IExternalBridgeClient SelectedMachine
+ {
+ get { return _selectedMachine; }
+ set { _selectedMachine = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
+ }
+
+ public RelayCommand ConnectCommand { get; set; }
+
+ public MachineConnectionViewVM(ExternalBridgeScanner scanner)
+ {
+ Scanner = scanner;
+ ConnectCommand = new RelayCommand(Connect,(x) => SelectedMachine != null);
+ Scanner.Start();
+ }
+
+ private void Connect()
+ {
+ if (SelectedMachine != null)
+ {
+ Accept();
+ }
+ }
+
+ public override void OnShow()
+ {
+ base.OnShow();
+
+ Scanner.AvailableMachines.Clear();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs
new file mode 100644
index 000000000..a6ee9ee2a
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.MachineStudio.Common.Notifications;
+
+namespace Tango.MachineStudio.UI.ViewModels
+{
+ public class MachineLoginViewVM : DialogViewVM
+ {
+ public String Password { get; set; }
+
+ public RelayCommand<String> LoginCommand { get; set; }
+
+ public RelayCommand CancelCommand { get; set; }
+
+ public MachineLoginViewVM()
+ {
+ LoginCommand = new RelayCommand<string>(Login);
+ CancelCommand = new RelayCommand(Cancel);
+ }
+
+ private void Login(string password)
+ {
+ Password = password;
+ Accept();
+ }
+ }
+}
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 7ef47fabd..92c0afa21 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
@@ -7,18 +7,24 @@ using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Tango.Core.Commands;
+using Tango.Logging;
using Tango.MachineStudio.Common;
using Tango.MachineStudio.Common.Authentication;
using Tango.MachineStudio.Common.Modules;
using Tango.MachineStudio.Common.Notifications;
+using Tango.MachineStudio.Common.StudioApplication;
using Tango.MachineStudio.UI.SupervisingController;
+using Tango.MachineStudio.UI.Views;
+using Tango.PMR.Stubs;
using Tango.SharedUI;
+using Tango.Transport.Adapters;
namespace Tango.MachineStudio.UI.ViewModels
{
public class MainViewVM : ViewModel<IMainView>
{
private IStudioModule _currentModule;
+ private bool _isDisconnecting;
public IStudioModule CurrentModule
{
@@ -26,6 +32,15 @@ namespace Tango.MachineStudio.UI.ViewModels
set { _currentModule = value; RaisePropertyChangedAuto(); }
}
+ private bool _isModuleLoaded;
+
+ public bool IsModuleLoaded
+ {
+ get { return _isModuleLoaded; }
+ set { _isModuleLoaded = value; RaisePropertyChangedAuto(); }
+ }
+
+
private bool _isMenuOpened;
public bool IsMenuOpened
@@ -38,6 +53,10 @@ namespace Tango.MachineStudio.UI.ViewModels
public RelayCommand HomeCommand { get; set; }
+ public RelayCommand ConnectCommand { get; set; }
+
+ public RelayCommand DisconnectCommand { get; set; }
+
private IAuthenticationProvider _authenticationProvider;
public IAuthenticationProvider AuthenticationProvider
{
@@ -61,20 +80,86 @@ namespace Tango.MachineStudio.UI.ViewModels
set { _notificationProvider = value; RaisePropertyChangedAuto(); }
}
+ private IStudioApplicationManager _applicationManager;
+
+ public IStudioApplicationManager ApplicationManager
+ {
+ get { return _applicationManager; }
+ set { _applicationManager = value; RaisePropertyChangedAuto(); }
+ }
+
+
public MainViewVM(
IMainView view,
IAuthenticationProvider authenticationProvider,
IStudioModuleLoader studioModuleLoader,
- INotificationProvider notificationProvider) : base(view)
+ INotificationProvider notificationProvider,
+ IStudioApplicationManager applicationManager) : base(view)
{
AuthenticationProvider = authenticationProvider;
StudioModuleLoader = studioModuleLoader;
NotificationProvider = notificationProvider;
+ ApplicationManager = applicationManager;
StartModuleCommand = new RelayCommand<IStudioModule>(StartModule);
HomeCommand = new RelayCommand(Home);
+ ConnectCommand = new RelayCommand(ConnectToMachine);
+ DisconnectCommand = new RelayCommand(DisconnectFromMachine,(x) => ApplicationManager.IsMachineConnected && !_isDisconnecting);
+ }
+
+ private async void DisconnectFromMachine()
+ {
+ using (_notificationProvider.PushTaskItem("Disconnecting from machine..."))
+ {
+ _isDisconnecting = true;
+ InvalidateRelayCommands();
+ await ApplicationManager.ConnectedMachine.Disconnect();
+ ApplicationManager.ConnectedMachine = null;
+ _isDisconnecting = false;
+ InvalidateRelayCommands();
+ }
+ }
+
+ private void ConnectToMachine()
+ {
+ _notificationProvider.ShowModalDialog<MachineConnectionViewVM>((x) =>
+ {
+ if (x.SelectedMachine != null)
+ {
+ _notificationProvider.ShowModalDialog<MachineLoginViewVM>(async (login) =>
+ {
+ using (NotificationProvider.PushTaskItem("Connecting to machine " + x.SelectedMachine.SerialNumber + "..."))
+ {
+ try
+ {
+ await x.SelectedMachine.Connect();
+ var authenticated = await x.SelectedMachine.Authenticate(login.Password);
+ if (!authenticated)
+ {
+ _notificationProvider.ShowError("It seems like you are not authorized to access the selected machine.");
+ }
+ else
+ {
+ ApplicationManager.ConnectedMachine = x.SelectedMachine;
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex);
+ _notificationProvider.ShowError(ex.Message);
+ }
+
+ InvalidateRelayCommands();
+ }
+ });
+
+ InvalidateRelayCommands();
+ }
+
+ InvalidateRelayCommands();
+ });
}
private void Home()
@@ -85,7 +170,16 @@ namespace Tango.MachineStudio.UI.ViewModels
private void StartModule(IStudioModule module)
{
IsMenuOpened = false;
- CurrentModule = module;
+
+ if (module != null)
+ {
+ CurrentModule = module;
+ IsModuleLoaded = true;
+ }
+ else
+ {
+ IsModuleLoaded = false;
+ }
}
protected override void OnViewAttached()