aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-02-20 15:53:44 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-02-20 15:53:44 +0200
commitdb89412e079e151a3217ed2a108820ebe6ba2f30 (patch)
tree6a301ca19bae8982c7a786cfd6db5fa753ddaa1b /Software/Visual_Studio/MachineStudio
parent2fe707abce023813d234b57b097a731174fd4a26 (diff)
downloadTango-db89412e079e151a3217ed2a108820ebe6ba2f30.tar.gz
Tango-db89412e079e151a3217ed2a108820ebe6ba2f30.zip
Improved module popout..
Diffstat (limited to 'Software/Visual_Studio/MachineStudio')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs29
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs44
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs43
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml4
4 files changed, 72 insertions, 48 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
index 6ccc1caa0..ad763fe54 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
@@ -18,6 +18,7 @@ using Tango.Editors;
using Tango.Integration.Observables;
using Tango.Integration.Observables.Enumerations;
using Tango.Integration.Operators;
+using Tango.MachineStudio.Common.Diagnostics;
using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.Common.StudioApplication;
using Tango.MachineStudio.Technician.Editors;
@@ -168,19 +169,7 @@ namespace Tango.MachineStudio.Technician.ViewModels
/// </summary>
/// <param name="applicationManager">The application manager.</param>
/// <param name="notificationProvider">The notification provider.</param>
- [PreferredConstructor]
- public MachineTechViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider) : this(applicationManager, notificationProvider, true)
- {
-
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="MachineTechViewVM"/> class.
- /// </summary>
- /// <param name="applicationManager">The application manager.</param>
- /// <param name="notificationProvider">The notification provider.</param>
- /// <param name="loadLastProject">if set to <c>true</c> [load last project].</param>
- public MachineTechViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, bool loadLastProject)
+ public MachineTechViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, IDiagnosticsFrameProvider _diagnosticsFrameProvider)
{
_notification = notificationProvider;
_singleControllers = new Dictionary<SingleGraphItem, GraphController>();
@@ -200,10 +189,12 @@ namespace Tango.MachineStudio.Technician.ViewModels
_lastTechProjectFile = SettingsManager.Default.MachineStudio.TechnicianModule.LasTechProjectFile;
- if (File.Exists(_lastTechProjectFile) && loadLastProject)
+ if (File.Exists(_lastTechProjectFile))
{
OpenProjectFile(_lastTechProjectFile);
}
+
+ _diagnosticsFrameProvider.FrameReceived += DiagnosticsFrameProvider_FrameReceived;
}
#endregion
@@ -218,20 +209,14 @@ namespace Tango.MachineStudio.Technician.ViewModels
private void ApplicationManager_ConnectedMachineChanged(object sender, Integration.Services.IExternalBridgeClient machine)
{
MachineOperator = machine;
-
- if (MachineOperator != null)
- {
- MachineOperator.DiagnosticsDataAvailable -= MachineOperator_DiagnosticsDataAvailable;
- MachineOperator.DiagnosticsDataAvailable += MachineOperator_DiagnosticsDataAvailable;
- }
}
/// <summary>
- /// Machines the operator diagnostics data available.
+ /// Handles the diagnostics frame provider data.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="response">The response.</param>
- private void MachineOperator_DiagnosticsDataAvailable(object sender, PushDiagnosticsResponse response)
+ private void DiagnosticsFrameProvider_FrameReceived(object sender, PushDiagnosticsResponse response)
{
PopulateDiagnosticsData(response);
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs
index 886985c92..ee1724435 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs
@@ -17,6 +17,7 @@ using Tango.Logging;
using Tango.MachineStudio.Common.Modules;
using Tango.MachineStudio.Common;
using Tango.Settings;
+using System.Windows;
namespace Tango.MachineStudio.UI.StudioApplication
{
@@ -29,6 +30,7 @@ namespace Tango.MachineStudio.UI.StudioApplication
{
private INavigationManager _navigationManager;
private IStudioModuleLoader _moduleLoader;
+ private List<Window> _openedWindows;
/// <summary>
/// Initializes a new instance of the <see cref="DefaultStudioApplicationManager" /> class.
@@ -38,6 +40,7 @@ namespace Tango.MachineStudio.UI.StudioApplication
{
_moduleLoader = moduleLoader;
_navigationManager = navigationManager;
+ _openedWindows = new List<Window>();
}
/// <summary>
@@ -137,35 +140,45 @@ namespace Tango.MachineStudio.UI.StudioApplication
}
}
+ foreach (var vm in ServiceLocator.Current.GetAllInstancesByBase<IShutdownListener>())
+ {
+ vm.OnShuttingDown();
+ }
+
try
{
- if (ConnectedMachine != null)
- {
- ConnectedMachine.Disconnect().Wait();
- }
+ SettingsManager.SaveDefaultSettings();
}
catch (Exception ex)
{
- LogManager.Log(ex, "Error disconnecting from machine.");
+ LogManager.Log(ex, "Error saving settings.");
}
- foreach (var vm in ServiceLocator.Current.GetAllInstancesByBase<IShutdownListener>())
+ _navigationManager.NavigateTo(NavigationView.ShutdownView);
+
+ Thread.Sleep(1500);
+
+ foreach (var window in _openedWindows)
{
- vm.OnShuttingDown();
+ ThreadsHelper.InvokeUI(() =>
+ {
+ window.Close();
+ });
}
try
{
- SettingsManager.SaveDefaultSettings();
+ if (ConnectedMachine != null)
+ {
+ ConnectedMachine.Disconnect().Wait();
+ }
}
catch (Exception ex)
{
- LogManager.Log(ex, "Error saving settings.");
+ LogManager.Log(ex, "Error disconnecting from machine.");
}
- _navigationManager.NavigateTo(NavigationView.ShutdownView);
-
- Thread.Sleep(3000);
+ Thread.Sleep(1500);
Environment.Exit(0);
@@ -196,5 +209,12 @@ namespace Tango.MachineStudio.UI.StudioApplication
throw new InvalidOperationException("The module was not found or you do not have sufficient privileges.");
}
}
+
+ public void RegisterOpenedWindow(Window window)
+ {
+ _openedWindows.Add(window);
+
+ window.Closed += (x, y) => { _openedWindows.Remove(window); };
+ }
}
}
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 503532223..da73e8eae 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
@@ -19,6 +19,7 @@ using Tango.MachineStudio.Common.Modules;
using Tango.MachineStudio.Common.Navigation;
using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.Common.StudioApplication;
+using Tango.MachineStudio.UI.StudioApplication;
using Tango.MachineStudio.UI.SupervisingController;
using Tango.MachineStudio.UI.Views;
using Tango.MachineStudio.UI.Windows;
@@ -316,25 +317,39 @@ namespace Tango.MachineStudio.UI.ViewModels
private void OpenModuleInWindow(IStudioModule module)
{
- module.InNewWindow = true;
+ if (module == null) return;
- var parent = (MainView.Self as MainView).TransitionControl.Controls.SingleOrDefault(x => x.Tag.ToString() == module.Name).Content as Grid;
+ try
+ {
+ StartModule(null);
- var view = parent.Children[0] as FrameworkElement;
- parent.Children.Remove(view);
+ module.InNewWindow = true;
- ModuleWindowVM vm = new ModuleWindowVM(module, parent);
- ModuleWindow window = new ModuleWindow(this, vm, view);
+ var parent = (MainView.Self as MainView).TransitionControl.Controls.SingleOrDefault(x => x.Tag.ToString() == module.Name).Content as Grid;
- window.Closing += (x, y) =>
- {
- window.grid.Children.Remove(view);
- parent.Children.Add(view);
- module.InNewWindow = false;
- };
+ var view = parent.Children[0] as FrameworkElement;
+ parent.Children.Remove(view);
+
+ ModuleWindowVM vm = new ModuleWindowVM(module, parent);
+ ModuleWindow window = new ModuleWindow(this, vm, view);
+
+ window.Closing += (x, y) =>
+ {
+ window.grid.Children.Remove(view);
+ parent.Children.Add(view);
+ module.InNewWindow = false;
+ };
- window.Owner = MainWindow.Instance;
- window.Show();
+ window.Owner = MainWindow.Instance;
+ window.Show();
+
+ (_applicationManager as DefaultStudioApplicationManager).RegisterOpenedWindow(window);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error popping out module " + module.Name);
+ _notificationProvider.ShowError("Error popping out module " + module.Name);
+ }
}
}
}
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 19a5283c2..9a2cc37a4 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
@@ -18,6 +18,7 @@
<UserControl.Resources>
<converters:StringEllipsisConverter x:Key="StringEllipsisConverter" />
<converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter" />
+ <converters:NullObjectToBooleanConverter x:Key="NullObjectToBooleanConverter" />
</UserControl.Resources>
<Grid>
@@ -70,6 +71,7 @@
<Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
<Setter Property="VerticalContentAlignment" Value="Stretch"></Setter>
+ <Setter Property="Visibility" Value="{Binding InNewWindow,Converter={StaticResource BooleanToVisibilityInverseConverter}}"></Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
@@ -122,6 +124,8 @@
<Button Content="Machine Connection" Command="{Binding ConnectCommand}" />
<Button Content="Disconnect Machine" Command="{Binding DisconnectCommand}" />
<Separator/>
+ <Button Content="Open Module In New Window" IsEnabled="{Binding IsModuleLoaded}" Command="{Binding OpenModuleInWindowCommand}" CommandParameter="{Binding CurrentModule}" />
+ <Separator/>
<Button Content="Exit" />
</StackPanel>
</materialDesign:PopupBox>