aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs61
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs79
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs96
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ShutdownViewVM.cs12
4 files changed, 248 insertions, 0 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
new file mode 100644
index 000000000..f50b734f4
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Tango.Core.Threading;
+using Tango.DAL.Observables;
+using Tango.MachineStudio.Common.Modules;
+using Tango.MachineStudio.Common.Navigation;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.UI.ViewModels
+{
+ public class LoadingViewVM : ViewModel
+ {
+ private INotificationProvider _notificationProvider;
+ private INavigationManager _navigationManager;
+ private IStudioModuleLoader _studioModuleLoader;
+
+ public LoadingViewVM(INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider)
+ {
+ _navigationManager = navigationManager;
+ _studioModuleLoader = studioModuleLoader;
+ _notificationProvider = notificationProvider;
+ Load();
+ }
+
+ private void Load()
+ {
+ StaThreadHelper.StartStaThread(() =>
+ {
+ Thread.Sleep(3000);
+ try
+ {
+ ObservablesEntitiesAdapter.Instance.Initialize();
+ InvokeUI(() =>
+ {
+ _studioModuleLoader.LoadModules();
+ _navigationManager.NavigateTo(NavigationView.LoginView);
+ });
+ }
+ catch (Exception ex)
+ {
+ InvokeUINow(() =>
+ {
+ if (_notificationProvider.ShowQuestion("An error occurred while trying to connect to Twine database." + Environment.NewLine + "Would you like to try again?"))
+ {
+ Load();
+ }
+ else
+ {
+ Environment.Exit(0);
+ }
+ });
+ }
+ });
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs
new file mode 100644
index 000000000..6fe90fa99
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.Core.Cryptography;
+using Tango.MachineStudio.Common.Authentication;
+using Tango.MachineStudio.Common.Navigation;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.Settings;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.UI.ViewModels
+{
+ public class LoginViewVM : ViewModel
+ {
+ private IAuthenticationProvider _authenticationProvider;
+ private INavigationManager _navigationManager;
+ private INotificationProvider _notificationProvider;
+ private Rfc2898Cryptographer cryptographer;
+
+ private String _email;
+ [Required(ErrorMessage = "Email is required")]
+ [EmailAddress(ErrorMessage = "Please enter a valid email")]
+ public String Email
+ {
+ get { return _email; }
+ set { _email = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _rememberMe;
+
+ public bool RememberMe
+ {
+ get { return _rememberMe; }
+ set { _rememberMe = value; RaisePropertyChangedAuto(); }
+ }
+
+
+ public RelayCommand<String> LoginCommand { get; set; }
+
+ public LoginViewVM(IAuthenticationProvider authenticationProvider, INavigationManager navigationManager, INotificationProvider notificationProvider)
+ {
+ _notificationProvider = notificationProvider;
+ _navigationManager = navigationManager;
+ _authenticationProvider = authenticationProvider;
+ LoginCommand = new RelayCommand<String>(Login);
+
+ cryptographer = new Rfc2898Cryptographer();
+ Email = SettingsManager.Default.MachineStudio.LastLoginEmail;
+ RememberMe = SettingsManager.Default.MachineStudio.RememberMe;
+ }
+
+ private void Login(String password)
+ {
+ if (Validate())
+ {
+ try
+ {
+ _authenticationProvider.Login(Email, password);
+ _navigationManager.NavigateTo(NavigationView.MainView);
+ SettingsManager.Default.MachineStudio.LastLoginEmail = Email;
+ SettingsManager.Default.MachineStudio.RememberMe = RememberMe;
+
+ SettingsManager.Default.MachineStudio.LastLoginPassword = RememberMe ? cryptographer.Encrypt(password) : null;
+ SettingsManager.SaveDefaultSettings();
+ }
+ catch
+ {
+ _notificationProvider.ShowError("Invalid credentials. Please try again.");
+ }
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
new file mode 100644
index 000000000..7ef47fabd
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.MachineStudio.Common;
+using Tango.MachineStudio.Common.Authentication;
+using Tango.MachineStudio.Common.Modules;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.MachineStudio.UI.SupervisingController;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.UI.ViewModels
+{
+ public class MainViewVM : ViewModel<IMainView>
+ {
+ private IStudioModule _currentModule;
+
+ public IStudioModule CurrentModule
+ {
+ get { return _currentModule; }
+ set { _currentModule = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _isMenuOpened;
+
+ public bool IsMenuOpened
+ {
+ get { return _isMenuOpened; }
+ set { _isMenuOpened = value; RaisePropertyChangedAuto(); }
+ }
+
+ public RelayCommand<IStudioModule> StartModuleCommand { get; set; }
+
+ public RelayCommand HomeCommand { get; set; }
+
+ private IAuthenticationProvider _authenticationProvider;
+ public IAuthenticationProvider AuthenticationProvider
+ {
+ get { return _authenticationProvider; }
+ set { _authenticationProvider = value; RaisePropertyChangedAuto(); }
+ }
+
+ private IStudioModuleLoader _studioModuleLoader;
+
+ public IStudioModuleLoader StudioModuleLoader
+ {
+ get { return _studioModuleLoader; }
+ set { _studioModuleLoader = value; RaisePropertyChangedAuto(); }
+ }
+
+ private INotificationProvider _notificationProvider;
+
+ public INotificationProvider NotificationProvider
+ {
+ get { return _notificationProvider; }
+ set { _notificationProvider = value; RaisePropertyChangedAuto(); }
+ }
+
+
+ public MainViewVM(
+ IMainView view,
+ IAuthenticationProvider authenticationProvider,
+ IStudioModuleLoader studioModuleLoader,
+ INotificationProvider notificationProvider) : base(view)
+ {
+ AuthenticationProvider = authenticationProvider;
+ StudioModuleLoader = studioModuleLoader;
+ NotificationProvider = notificationProvider;
+
+ StartModuleCommand = new RelayCommand<IStudioModule>(StartModule);
+
+ HomeCommand = new RelayCommand(Home);
+ }
+
+ private void Home()
+ {
+ StartModule(null);
+ }
+
+ private void StartModule(IStudioModule module)
+ {
+ IsMenuOpened = false;
+ CurrentModule = module;
+ }
+
+ protected override void OnViewAttached()
+ {
+ base.OnViewAttached();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ShutdownViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ShutdownViewVM.cs
new file mode 100644
index 000000000..c7a919a82
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ShutdownViewVM.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.MachineStudio.UI.ViewModels
+{
+ public class ShutdownViewVM
+ {
+ }
+}