aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI
diff options
context:
space:
mode:
authorRoy <roy.mail.net@gmail.com>2018-04-21 19:49:05 +0300
committerRoy <roy.mail.net@gmail.com>2018-04-21 19:49:05 +0300
commit0dec8a74239cff769836cae577fbd84824070e83 (patch)
treed6cc24ee53454b3f17f1580e90de38238555b6bd /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI
parent4df1724226c0d0941b970dbe71b1476e3c3e9902 (diff)
downloadTango-0dec8a74239cff769836cae577fbd84824070e83.tar.gz
Tango-0dec8a74239cff769836cae577fbd84824070e83.zip
Implemented NavigationControl for better performance!!!
Redesign of machine studio module initialization.
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml26
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Modules/DefaultStudioModuleLoader.cs1
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Navigation/DefaultNavigationManager.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/SupervisingController/IMainView.cs10
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs1
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs21
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs28
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ModuleWindowVM.cs5
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml7
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml.cs24
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml134
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs26
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs5
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml.cs5
15 files changed, 137 insertions, 160 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml
index 6d8d86a8c..1dfe4c18f 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml
@@ -17,25 +17,13 @@
<Viewbox Stretch="Fill">
<Grid x:Name="grid" Width="1920" Height="1100">
<Grid>
- <sharedControls:MultiTransitionControl AlwaysFade="True" TransitionType="Zoom" x:Name="TransitionControl" x:FieldModifier="public">
- <sharedControls:MultiTransitionControl.Controls>
- <ContentControl Tag="LoadingView">
- <views:LoadingView></views:LoadingView>
- </ContentControl>
- <ContentControl Tag="LoginView" Visibility="Hidden">
- <views:LoginView></views:LoginView>
- </ContentControl>
- <ContentControl Tag="MainView" Visibility="Hidden">
- <views:MainView></views:MainView>
- </ContentControl>
- <ContentControl Tag="ShutdownView" Visibility="Hidden">
- <views:ShutdownView></views:ShutdownView>
- </ContentControl>
- <ContentControl Tag="UpdateView" Visibility="Hidden">
- <views:UpdateView></views:UpdateView>
- </ContentControl>
- </sharedControls:MultiTransitionControl.Controls>
- </sharedControls:MultiTransitionControl>
+ <sharedControls:NavigationControl TransitionAlwaysFades="True" TransitionType="Zoom" x:Name="TransitionControl" x:FieldModifier="public">
+ <views:LoadingView sharedControls:NavigationControl.NavigationName="LoadingView"></views:LoadingView>
+ <views:LoginView sharedControls:NavigationControl.NavigationName="LoginView"></views:LoginView>
+ <views:MainView sharedControls:NavigationControl.NavigationName="MainView"></views:MainView>
+ <views:ShutdownView sharedControls:NavigationControl.NavigationName="ShutdownView"></views:ShutdownView>
+ <views:UpdateView sharedControls:NavigationControl.NavigationName="UpdateView"></views:UpdateView>
+ </sharedControls:NavigationControl>
<Grid Background="Black" Opacity="0.7" x:Name="shadowGrid" Visibility="Hidden">
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs
index 48de019e8..8461a5d93 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs
@@ -40,7 +40,7 @@ namespace Tango.MachineStudio.UI
Instance = this;
ThreadsHelper.SetDisptacher(Dispatcher);
- this.Closing += MainWindow_Closing;
+ this.Closing += MainWindow_Closing;
}
catch (Exception ex)
{
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Modules/DefaultStudioModuleLoader.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Modules/DefaultStudioModuleLoader.cs
index 07834393b..d7035b57b 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Modules/DefaultStudioModuleLoader.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Modules/DefaultStudioModuleLoader.cs
@@ -109,6 +109,7 @@ namespace Tango.MachineStudio.UI.Modules
{
LogManager.Log(String.Format("Loading module '{0}'...", moduleType.Name));
var module = Activator.CreateInstance(moduleType) as IStudioModule;
+ //SimpleIoc.Default.Register(() => module);
AllModules.Add(module);
}
catch (Exception ex)
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Navigation/DefaultNavigationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Navigation/DefaultNavigationManager.cs
index 56abbd702..092b958cc 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Navigation/DefaultNavigationManager.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Navigation/DefaultNavigationManager.cs
@@ -22,7 +22,7 @@ namespace Tango.MachineStudio.UI.Navigation
{
MainWindow.Instance.Dispatcher.Invoke(() =>
{
- MainWindow.Instance.TransitionControl.AutoNavigate(view.ToString());
+ MainWindow.Instance.TransitionControl.NavigateTo(view.ToString());
});
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/SupervisingController/IMainView.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/SupervisingController/IMainView.cs
index fd8ef4be5..b202f61f4 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/SupervisingController/IMainView.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/SupervisingController/IMainView.cs
@@ -14,10 +14,10 @@ namespace Tango.MachineStudio.UI.SupervisingController
/// <seealso cref="Tango.SharedUI.IView" />
public interface IMainView : IView
{
- /// <summary>
- /// Navigates to the specified studio module.
- /// </summary>
- /// <param name="module">The module.</param>
- void NavigateToModule(IStudioModule module);
+ ///// <summary>
+ ///// Navigates to the specified studio module.
+ ///// </summary>
+ ///// <param name="module">The module.</param>
+ //void NavigateToModule(IStudioModule module);
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
index 97eb2913b..fa3a38c5c 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
@@ -71,6 +71,7 @@ namespace Tango.MachineStudio.UI
SimpleIoc.Default.Register<IStudioModuleLoader, DefaultStudioModuleLoader>();
SimpleIoc.Default.Register<IStudioApplicationManager, DefaultStudioApplicationManager>();
SimpleIoc.Default.Register<ExternalBridgeScanner, ExternalBridgeScanner>();
+ SimpleIoc.Default.Register<ExternalBridgeScanner, ExternalBridgeScanner>();
SimpleIoc.Default.Register<IVideoCaptureProvider, DefaultVideoCaptureProvider>();
SimpleIoc.Default.Register<IDiagnosticsFrameProvider, DefaultDiagnosticsFrameProvider>();
SimpleIoc.Default.Register<IEventLogger, DefaultEventLogger>();
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs
index 7fefe4a41..fafa752c5 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs
@@ -41,6 +41,15 @@ namespace Tango.MachineStudio.UI.ViewModels
set { _email = value; RaisePropertyChangedAuto(); }
}
+ private String _password;
+ [Required(ErrorMessage = "Password is required")]
+ public String Password
+ {
+ get { return _password; }
+ set { _password = value; RaisePropertyChangedAuto(); }
+ }
+
+
private bool _rememberMe;
/// <summary>
/// Gets or sets a value indicating whether to remember the last user email and password.
@@ -54,7 +63,7 @@ namespace Tango.MachineStudio.UI.ViewModels
/// <summary>
/// Gets or sets the login command.
/// </summary>
- public RelayCommand<String> LoginCommand { get; set; }
+ public RelayCommand LoginCommand { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="LoginViewVM"/> class.
@@ -68,29 +77,29 @@ namespace Tango.MachineStudio.UI.ViewModels
_navigationManager = navigationManager;
_authenticationProvider = authenticationProvider;
_eventLogger = eventLogger;
- LoginCommand = new RelayCommand<String>(Login);
+ LoginCommand = new RelayCommand(Login);
cryptographer = new Rfc2898Cryptographer();
Email = SettingsManager.Default.MachineStudio.LastLoginEmail;
RememberMe = SettingsManager.Default.MachineStudio.RememberMe;
+ Password = cryptographer.Decrypt(SettingsManager.Default.MachineStudio.LastLoginPassword);
}
/// <summary>
/// Logins the requested user.
/// </summary>
- /// <param name="password">The password.</param>
- private void Login(String password)
+ private void Login()
{
if (Validate())
{
try
{
- _authenticationProvider.Login(Email, password);
+ _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.Default.MachineStudio.LastLoginPassword = RememberMe ? cryptographer.Encrypt(Password) : null;
SettingsManager.SaveDefaultSettings();
_eventLogger.Log("User logged in");
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 8e451cdce..b97825d34 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
@@ -35,6 +35,7 @@ using Tango.MachineStudio.UI.Windows;
using Tango.PMR.Stubs;
using Tango.Settings;
using Tango.SharedUI;
+using Tango.SharedUI.Controls;
using Tango.SharedUI.Helpers;
using Tango.Transport.Adapters;
@@ -497,6 +498,16 @@ namespace Tango.MachineStudio.UI.ViewModels
{
IsMenuOpened = false;
+ if (module != null)
+ {
+ if (!(MainView.Self as MainView).TransitionControl.Elements.ToList().Exists(x => x.GetType() == module.MainViewType))
+ {
+ FrameworkElement view = Activator.CreateInstance(module.MainViewType) as FrameworkElement;
+ NavigationControl.SetNavigationName(view, module.Name);
+ (MainView.Self as MainView).TransitionControl.Elements.Add(view);
+ }
+ }
+
foreach (var m in StudioModuleLoader.AllModules.Where(x => x != module))
{
m.IsLoaded = false;
@@ -507,12 +518,12 @@ namespace Tango.MachineStudio.UI.ViewModels
CurrentModule = module;
CurrentModule.IsLoaded = true;
IsModuleLoaded = true;
- View.NavigateToModule(module);
+ (MainView.Self as MainView).TransitionControl.NavigateTo(module.Name);
}
else
{
IsModuleLoaded = false;
- View.NavigateToModule(null);
+ (MainView.Self as MainView).TransitionControl.NavigateTo("Home");
}
}
@@ -538,18 +549,21 @@ namespace Tango.MachineStudio.UI.ViewModels
module.InNewWindow = true;
- var parent = (MainView.Self as MainView).TransitionControl.Controls.SingleOrDefault(x => x.Tag.ToString() == module.Name).Content as Grid;
+ if (!(MainView.Self as MainView).TransitionControl.Elements.ToList().Exists(x => x.GetType() == module.MainViewType))
+ {
+ FrameworkElement v = Activator.CreateInstance(module.MainViewType) as FrameworkElement;
+ NavigationControl.SetNavigationName(v, module.Name);
+ (MainView.Self as MainView).TransitionControl.Elements.Add(v);
+ }
- var view = parent.Children[0] as FrameworkElement;
- parent.Children.Remove(view);
+ var view = (MainView.Self as MainView).TransitionControl.GetAndDetach(module.Name);
- ModuleWindowVM vm = new ModuleWindowVM(module, parent);
+ ModuleWindowVM vm = new ModuleWindowVM(module);
ModuleWindow window = new ModuleWindow(this, vm, view);
window.Closing += (x, y) =>
{
window.grid.Children.Remove(view);
- parent.Children.Add(view);
module.InNewWindow = false;
};
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ModuleWindowVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ModuleWindowVM.cs
index a5b737b59..9fd1d68bb 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ModuleWindowVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ModuleWindowVM.cs
@@ -19,11 +19,8 @@ namespace Tango.MachineStudio.UI.ViewModels
set { _module = value; RaisePropertyChangedAuto(); }
}
- public Grid Parent { get; set; }
-
- public ModuleWindowVM(IStudioModule module, Grid parent)
+ public ModuleWindowVM(IStudioModule module)
{
- Parent = parent;
Module = module;
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml
index 84ba597f2..7f54263b7 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml
@@ -5,6 +5,7 @@
xmlns:rules="clr-namespace:Tango.MachineStudio.Common.ValidationRules;assembly=Tango.MachineStudio.Common"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:helpers="clr-namespace:Tango.SharedUI.Helpers;assembly=Tango.SharedUI"
xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views"
mc:Ignorable="d"
d:DesignHeight="720" d:DesignWidth="1280" DataContext="{Binding LoginViewVM, Source={StaticResource Locator}}" Background="Transparent">
@@ -15,7 +16,7 @@
<UserControl.InputBindings>
- <KeyBinding Key="Return" Command="{Binding LoginCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=Password}"></KeyBinding>
+ <KeyBinding Key="Return" Command="{Binding LoginCommand}"></KeyBinding>
</UserControl.InputBindings>
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="40">
@@ -31,10 +32,10 @@
</DockPanel>
<DockPanel Margin="0 20 0 0">
<materialDesign:PackIcon Margin="0 0 0 0" Width="20" Height="20" VerticalAlignment="Top" Foreground="{Binding ElementName=txtPass, Path=BorderBrush}" Kind="Key" />
- <PasswordBox x:Name="txtPass" PasswordChanged="txtPass_PasswordChanged" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="Password" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" AutomationProperties.IsRequiredForForm="True" />
+ <PasswordBox x:Name="txtPass" helpers:PasswordHelper.Attach="True" helpers:PasswordHelper.Password="{Binding Password,Mode=TwoWay}" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="Password" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" AutomationProperties.IsRequiredForForm="True" />
</DockPanel>
<CheckBox Margin="25 20 0 0" IsChecked="{Binding RememberMe}">Remember me</CheckBox>
- <Button Margin="25 20 0 0" Height="50" Command="{Binding LoginCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=Password}" Content="LOGIN">
+ <Button Margin="25 20 0 0" Height="50" Command="{Binding LoginCommand}" Content="LOGIN">
</Button>
</StackPanel>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml.cs
index 027e37682..bf1dd389d 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml.cs
@@ -22,26 +22,15 @@ namespace Tango.MachineStudio.UI.Views
/// <summary>
/// Interaction logic for LoginView.xaml
/// </summary>
- public partial class LoginView : UserControl, ITransitionView
+ public partial class LoginView : UserControl
{
- private Rfc2898Cryptographer cryptographer;
-
public LoginView()
{
InitializeComponent();
-
- cryptographer = new Rfc2898Cryptographer();
- }
-
- public String Password
- {
- get { return (String)GetValue(PasswordProperty); }
- set { SetValue(PasswordProperty, value); }
+ this.Loaded += LoginView_Loaded;
}
- public static readonly DependencyProperty PasswordProperty =
- DependencyProperty.Register("Password", typeof(String), typeof(LoginView), new PropertyMetadata(null));
- public void OnTransitionCompleted()
+ private void LoginView_Loaded(object sender, RoutedEventArgs e)
{
txtEmail.Focus();
@@ -49,13 +38,6 @@ namespace Tango.MachineStudio.UI.Views
{
txtPass.Focus();
}
-
- txtPass.Password = cryptographer.Decrypt(SettingsManager.Default.MachineStudio.LastLoginPassword);
- }
-
- private void txtPass_PasswordChanged(object sender, RoutedEventArgs e)
- {
- Password = txtPass.Password;
}
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
index a841a72cb..dd3d122b6 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
@@ -38,14 +38,14 @@
</Style>
</Grid.Style>
- <materialDesign:DrawerHost IsLeftDrawerOpen="{Binding ElementName=MenuToggleButton, Path=IsChecked}">
+ <materialDesign:DrawerHost IsLeftDrawerOpen="{Binding Source={x:Reference MenuToggleButton}, Path=IsChecked}">
<materialDesign:DrawerHost.LeftDrawerContent>
<DockPanel LastChildFill="False">
<StackPanel MinWidth="300" DockPanel.Dock="Top">
<Grid>
<ToggleButton Style="{StaticResource MaterialDesignHamburgerToggleButton}"
HorizontalAlignment="Right" Margin="16"
- IsChecked="{Binding ElementName=MenuToggleButton, Path=IsChecked, Mode=TwoWay}" />
+ IsChecked="{Binding Source={x:Reference MenuToggleButton}, Path=IsChecked, Mode=TwoWay}" />
<StackPanel Margin="5 0 0 0" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
<Image Source="/Images/account.png" RenderOptions.BitmapScalingMode="Fant" VerticalAlignment="Center" Width="50" Height="50"></Image>
@@ -330,77 +330,73 @@
</Grid.RowDefinitions>
<Grid Grid.Row="1">
- <controls:MultiTransitionControl x:Name="TransitionControl" AlwaysFade="True" TransitionType="Zoom">
- <controls:MultiTransitionControl.Controls>
- <ContentControl Tag="Home">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="150"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <Grid>
- <StackPanel Margin="30 20" HorizontalAlignment="Left">
- <TextBlock FontSize="35">Welcome to Machine Studio</TextBlock>
- <TextBlock HorizontalAlignment="Left" Margin="350 5 0 0" FontStyle="Italic" FontSize="16">The below modules are displayed according to your user roles and permissions.</TextBlock>
- </StackPanel>
- </Grid>
+ <controls:NavigationControl x:Name="TransitionControl" TransitionAlwaysFades="True" TransitionType="Zoom">
+ <Grid controls:NavigationControl.NavigationName="Home">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="150"/>
+ <RowDefinition Height="*"/>
+ </Grid.RowDefinitions>
+ <Grid>
+ <StackPanel Margin="30 20" HorizontalAlignment="Left">
+ <TextBlock FontSize="35">Welcome to Machine Studio</TextBlock>
+ <TextBlock HorizontalAlignment="Left" Margin="350 5 0 0" FontStyle="Italic" FontSize="16">The below modules are displayed according to your user roles and permissions.</TextBlock>
+ </StackPanel>
+ </Grid>
- <Grid Grid.Row="2">
- <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
- <ItemsControl ItemsSource="{Binding StudioModuleLoader.UserModules}" Margin="10">
- <ItemsControl.ItemsPanel>
- <ItemsPanelTemplate>
- <WrapPanel IsItemsHost="True"></WrapPanel>
- </ItemsPanelTemplate>
- </ItemsControl.ItemsPanel>
+ <Grid Grid.Row="2">
+ <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
+ <ItemsControl ItemsSource="{Binding StudioModuleLoader.UserModules}" Margin="10">
+ <ItemsControl.ItemsPanel>
+ <ItemsPanelTemplate>
+ <WrapPanel IsItemsHost="True"></WrapPanel>
+ </ItemsPanelTemplate>
+ </ItemsControl.ItemsPanel>
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <materialDesign:Card Width="300" Margin="10" Height="400" Visibility="{Binding InNewWindow,Converter={StaticResource BooleanToVisibilityInverseConverter}}">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="180" />
- <RowDefinition Height="*" />
- <RowDefinition Height="Auto" />
- </Grid.RowDefinitions>
- <Image Source="{Binding Image,Mode=OneWay}" Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" />
- <Rectangle VerticalAlignment="Bottom" Stroke="Silver"></Rectangle>
- <Button AutomationProperties.AutomationId="{Binding Name}" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.StartModuleCommand}" CommandParameter="{Binding}" Grid.Row="0" Margin="0,0,20,-35" HorizontalAlignment="Right" Width="70" Height="70" VerticalAlignment="Bottom" Style="{StaticResource MaterialDesignFloatingActionMiniButton}" ToolTip="Start This Module">
- <materialDesign:PackIcon Kind="Play" Width="30" Height="30" />
- </Button>
- <StackPanel Grid.Row="1" Margin="8,24,8,0">
- <TextBlock FontWeight="Bold" FontSize="20" Text="{Binding Name,Mode=OneWay}"></TextBlock>
- <TextBlock VerticalAlignment="Center" Margin="0 5 0 0" FontSize="14" TextWrapping="Wrap" Text="{Binding Description,Mode=OneWay}"></TextBlock>
- </StackPanel>
- <StackPanel Grid.Row="2" Margin="8" HorizontalAlignment="Right" Orientation="Horizontal">
- <materialDesign:PopupBox Padding="2,0,2,0" Style="{StaticResource MaterialDesignToolPopupBox}">
- <StackPanel>
- <Button Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.OpenModuleInWindowCommand}" CommandParameter="{Binding}">
- <StackPanel Orientation="Horizontal">
- <materialDesign:PackIcon Kind="ArrowTopRight" Width="24" Height="24" />
- <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">Start in new window</TextBlock>
- </StackPanel>
- </Button>
- <Button>
- <StackPanel Orientation="Horizontal">
- <materialDesign:PackIcon Kind="Settings" Width="24" Height="24" />
- <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">Settings</TextBlock>
- </StackPanel>
- </Button>
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <materialDesign:Card Width="300" Margin="10" Height="400" Visibility="{Binding InNewWindow,Converter={StaticResource BooleanToVisibilityInverseConverter}}">
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="180" />
+ <RowDefinition Height="*" />
+ <RowDefinition Height="Auto" />
+ </Grid.RowDefinitions>
+ <Image Source="{Binding Image,Mode=OneWay}" Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" />
+ <Rectangle VerticalAlignment="Bottom" Stroke="Silver"></Rectangle>
+ <Button Tag="{Binding}" AutomationProperties.AutomationId="{Binding Name}" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.StartModuleCommand}" CommandParameter="{Binding}" Grid.Row="0" Margin="0,0,20,-35" HorizontalAlignment="Right" Width="70" Height="70" VerticalAlignment="Bottom" Style="{StaticResource MaterialDesignFloatingActionMiniButton}" ToolTip="Start this module">
+ <materialDesign:PackIcon Kind="Play" Width="30" Height="30" />
+ </Button>
+ <StackPanel Grid.Row="1" Margin="8,24,8,0">
+ <TextBlock FontWeight="Bold" FontSize="20" Text="{Binding Name,Mode=OneWay}"></TextBlock>
+ <TextBlock VerticalAlignment="Center" Margin="0 5 0 0" FontSize="14" TextWrapping="Wrap" Text="{Binding Description,Mode=OneWay}"></TextBlock>
+ </StackPanel>
+ <StackPanel Grid.Row="2" Margin="8" HorizontalAlignment="Right" Orientation="Horizontal">
+ <materialDesign:PopupBox Padding="2,0,2,0" Style="{StaticResource MaterialDesignToolPopupBox}">
+ <StackPanel>
+ <Button Command="{Binding RelativeSource={RelativeSource AncestorType=local:MainView},Path=DataContext.OpenModuleInWindowCommand}" CommandParameter="{Binding}">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="ArrowTopRight" Width="24" Height="24" />
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">Start in new window</TextBlock>
+ </StackPanel>
+ </Button>
+ <Button>
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Settings" Width="24" Height="24" />
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">Settings</TextBlock>
</StackPanel>
- </materialDesign:PopupBox>
+ </Button>
</StackPanel>
- </Grid>
- </materialDesign:Card>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
- </ScrollViewer>
- </Grid>
- </Grid>
- </ContentControl>
- </controls:MultiTransitionControl.Controls>
- </controls:MultiTransitionControl>
+ </materialDesign:PopupBox>
+ </StackPanel>
+ </Grid>
+ </materialDesign:Card>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </ScrollViewer>
+ </Grid>
+ </Grid>
+ </controls:NavigationControl>
</Grid>
</Grid>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs
index 442d11cdd..df1f97f23 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs
@@ -26,6 +26,7 @@ using System.Threading;
using Tango.Core.Helpers;
using Tango.SharedUI.Helpers;
using Tango.Logging;
+using static Tango.SharedUI.Controls.NavigationControl;
namespace Tango.MachineStudio.UI.Views
{
@@ -44,15 +45,8 @@ namespace Tango.MachineStudio.UI.Views
_loader.ModulesLoaded += Loader_ModulesLoaded;
}
- public void NavigateToModule(IStudioModule module)
- {
- TransitionControl.AutoNavigate(module != null ? module.Name : "Home");
- }
-
private void Loader_ModulesLoaded(object sender, EventArgs e)
{
- TransitionControl.Controls.RemoveAll((x) => x.Tag.ToString() != "Home");
-
Task.Factory.StartNew(() =>
{
LogManager.Default.Log("Loading modules views...");
@@ -74,15 +68,12 @@ namespace Tango.MachineStudio.UI.Views
ThreadsHelper.InvokeUI(() =>
{
- Grid grid = new Grid();
- grid.Children.Add(module.MainView);
-
- TransitionControl.Controls.Add(new ContentControl()
+ if (!TransitionControl.Elements.ToList().Exists(x => x.GetType() == module.MainViewType))
{
- Tag = module.Name,
- Content = grid,
- Visibility = Visibility.Hidden,
- });
+ FrameworkElement view = Activator.CreateInstance(module.MainViewType) as FrameworkElement;
+ NavigationControl.SetNavigationName(view, module.Name);
+ TransitionControl.Elements.Add(view);
+ }
_loader.UserModules.Add(module);
});
@@ -92,11 +83,6 @@ namespace Tango.MachineStudio.UI.Views
Thread.Sleep(100);
}
- ThreadsHelper.InvokeUI(() =>
- {
- TransitionControl.RefreshControls();
- });
-
item.Pop();
});
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs
index afe6d3800..e1e16592b 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs
@@ -13,20 +13,21 @@ using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static Tango.SharedUI.Controls.MultiTransitionControl;
+using static Tango.SharedUI.Controls.NavigationControl;
namespace Tango.MachineStudio.UI.Views
{
/// <summary>
/// Interaction logic for ShutdownView.xaml
/// </summary>
- public partial class ShutdownView : UserControl, ITransitionView
+ public partial class ShutdownView : UserControl, INavigationView
{
public ShutdownView()
{
InitializeComponent();
}
- public void OnTransitionCompleted()
+ public void OnNavigated()
{
progressRing.IsActive = true;
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml.cs
index 75b74f65d..deb4dfdbe 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml.cs
@@ -14,13 +14,14 @@ using System.Windows.Navigation;
using System.Windows.Shapes;
using Tango.MachineStudio.UI.ViewModels;
using static Tango.SharedUI.Controls.MultiTransitionControl;
+using static Tango.SharedUI.Controls.NavigationControl;
namespace Tango.MachineStudio.UI.Views
{
/// <summary>
/// Interaction logic for UpdateView.xaml
/// </summary>
- public partial class UpdateView : UserControl, ITransitionView
+ public partial class UpdateView : UserControl, INavigationView
{
private UpdateViewVM _vm;
@@ -34,7 +35,7 @@ namespace Tango.MachineStudio.UI.Views
};
}
- public void OnTransitionCompleted()
+ public void OnNavigated()
{
_vm.OnNavigatedInto();
}