aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio
diff options
context:
space:
mode:
authorRoy <roy.mail.net@gmail.com>2017-12-24 02:27:16 +0200
committerRoy <roy.mail.net@gmail.com>2017-12-24 02:27:16 +0200
commit53db041e636bb3802dbe3cb911de6ef6ef41446c (patch)
tree9be0b0961a31fea4a60f5a9c1741363fa313a13b /Software/Visual_Studio/MachineStudio
parentceac40d058a8554638aa3fa39d4697f3fbfe62f8 (diff)
downloadTango-53db041e636bb3802dbe3cb911de6ef6ef41446c.tar.gz
Tango-53db041e636bb3802dbe3cb911de6ef6ef41446c.zip
Continue for last commit.
Diffstat (limited to 'Software/Visual_Studio/MachineStudio')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ExtensionMethods/INotificationProviderExtensions.cs30
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj1
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DbTableViewModel.cs1
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Images/machine-trans.pngbin0 -> 45618 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs1
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj15
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModelLocator.cs9
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs20
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml33
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml.cs28
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml56
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Notifications/DialogViewVM.cs47
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Notifications/INotificationProvider.cs6
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs3
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj5
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config8
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs114
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml32
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml.cs42
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs29
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj23
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs15
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs55
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs73
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml85
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml.cs34
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml58
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs6
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/packages.config1
32 files changed, 693 insertions, 145 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ExtensionMethods/INotificationProviderExtensions.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ExtensionMethods/INotificationProviderExtensions.cs
deleted file mode 100644
index 8d95bb38e..000000000
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ExtensionMethods/INotificationProviderExtensions.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using MaterialDesignThemes.Wpf;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using Tango.DAL.Observables;
-using Tango.MachineStudio.Common.Notifications;
-using Tango.MachineStudio.DB.ViewModels;
-using Tango.MachineStudio.DB.Views.DBViews;
-using Tango.MachineStudio.DB.Windows;
-
-namespace Tango.MachineStudio.DB.ExtensionMethods
-{
- public static class INotificationProviderExtensions
- {
- public static bool ShowDialog<T>(this INotificationProvider provider, DialogOpenMode mode, DbTableViewModel<T> context) where T : class, IObservableEntity
- {
- Type viewType = typeof(INotificationProviderExtensions).Assembly.GetType(typeof(OrganizationView).Namespace + "." + typeof(T).Name + "View");
-
- DBDialogWindow window = new DBDialogWindow(Activator.CreateInstance(viewType) as FrameworkElement);
- window.IconKind = (mode == DialogOpenMode.Editing ? PackIconKind.TableEdit : PackIconKind.Plus);
- window.InnerTitle = (mode == DialogOpenMode.Editing ? "Edit " : "Add New ") + typeof(T).Name;
- window.DataContext = context;
-
- return provider.ShowModalWindow(window).Value;
- }
- }
-}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj
index b77d0daf9..bd6166b4f 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj
@@ -90,7 +90,6 @@
<Compile Include="Converters\EventTypeActionsToStringConverter.cs" />
<Compile Include="Converters\RolesPermissionsToStringConverter.cs" />
<Compile Include="DBModule.cs" />
- <Compile Include="ExtensionMethods\INotificationProviderExtensions.cs" />
<Compile Include="Messages\CloseEntityEditViewMessage.cs" />
<Compile Include="Messages\OpenEntityEditViewMessage.cs" />
<Compile Include="ViewModels\ActionTypesViewVM.cs" />
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DbTableViewModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DbTableViewModel.cs
index 89759309b..e472e312a 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DbTableViewModel.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DbTableViewModel.cs
@@ -8,7 +8,6 @@ using Tango.DAL.Observables;
using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.DB.Managers;
using Tango.SharedUI;
-using Tango.MachineStudio.DB.ExtensionMethods;
using System.Data.Entity.Infrastructure;
using GalaSoft.MvvmLight.Messaging;
using Tango.MachineStudio.DB.Messages;
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Images/machine-trans.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Images/machine-trans.png
new file mode 100644
index 000000000..a7cf65852
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Images/machine-trans.png
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs
index 8d38acb7c..d4212475c 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs
@@ -11,5 +11,6 @@ namespace Tango.MachineStudio.Synchronization.Navigation
MenuView,
LocalSynchronizationView,
RemoteSynchronizationView,
+ DirectSynchronizationView,
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj
index 12323ff91..19eecc2e1 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj
@@ -87,10 +87,14 @@
<Compile Include="Navigation\NavigationView.cs" />
<Compile Include="Navigation\SyncNavigationManager.cs" />
<Compile Include="ViewModelLocator.cs" />
+ <Compile Include="ViewModels\DirectSynchronizationViewVM.cs" />
<Compile Include="ViewModels\LocalSynchronizationViewVM.cs" />
<Compile Include="ViewModels\MainViewVM.cs" />
<Compile Include="ViewModels\MenuViewVM.cs" />
<Compile Include="ViewModels\RemoteSynchronizationViewVM.cs" />
+ <Compile Include="Views\DirectSynchronizationView.xaml.cs">
+ <DependentUpon>DirectSynchronizationView.xaml</DependentUpon>
+ </Compile>
<Compile Include="Views\RemoteSynchronizationView.xaml.cs">
<DependentUpon>RemoteSynchronizationView.xaml</DependentUpon>
</Compile>
@@ -107,6 +111,10 @@
<Link>GlobalVersionInfo.cs</Link>
</Compile>
<Compile Include="SynchronizationModule.cs" />
+ <Page Include="Views\DirectSynchronizationView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
<Page Include="Views\RemoteSynchronizationView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -170,6 +178,10 @@
<Project>{38197109-8610-4d3f-92b9-16d48df94d7c}</Project>
<Name>Tango.DAL.Remote</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Integration\Tango.Integration.csproj">
+ <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project>
+ <Name>Tango.Integration</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj">
<Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project>
<Name>Tango.Logging</Name>
@@ -205,5 +217,8 @@
<ItemGroup>
<Resource Include="Images\synch_big.png" />
</ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\machine-trans.png" />
+ </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModelLocator.cs
index a58ffe64b..090a323a2 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModelLocator.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModelLocator.cs
@@ -22,6 +22,7 @@ namespace Tango.MachineStudio.Synchronization
SimpleIoc.Default.Register<MenuViewVM>();
SimpleIoc.Default.Register<LocalSynchronizationViewVM>();
SimpleIoc.Default.Register<RemoteSynchronizationViewVM>();
+ SimpleIoc.Default.Register<DirectSynchronizationViewVM>();
SimpleIoc.Default.Unregister<SyncNavigationManager>();
@@ -59,5 +60,13 @@ namespace Tango.MachineStudio.Synchronization
return ServiceLocator.Current.GetInstance<RemoteSynchronizationViewVM>();
}
}
+
+ public static DirectSynchronizationViewVM DirectSynchronizationViewVM
+ {
+ get
+ {
+ return ServiceLocator.Current.GetInstance<DirectSynchronizationViewVM>();
+ }
+ }
}
} \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs
new file mode 100644
index 000000000..ba3521009
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Integration.Services;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.Synchronization.ViewModels
+{
+ public class DirectSynchronizationViewVM : ViewModel
+ {
+ public ExternalBridgeScanner Scanner { get; set; }
+
+ public DirectSynchronizationViewVM(ExternalBridgeScanner scanner)
+ {
+ Scanner = scanner;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs
index 8eb68a383..0fe510f36 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs
@@ -19,10 +19,13 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
StartLocalSyncCommand = new RelayCommand(() => { _navigation.NavigateTo(NavigationView.LocalSynchronizationView); });
StartRemoteSyncCommand = new RelayCommand(() => { _navigation.NavigateTo(NavigationView.RemoteSynchronizationView); });
+ StartDirectRemoteSyncCommand = new RelayCommand(() => { _navigation.NavigateTo(NavigationView.DirectSynchronizationView); });
}
public RelayCommand StartLocalSyncCommand { get; set; }
public RelayCommand StartRemoteSyncCommand { get; set; }
+
+ public RelayCommand StartDirectRemoteSyncCommand { get; set; }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml
new file mode 100644
index 000000000..7dc0cdacc
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml
@@ -0,0 +1,33 @@
+<UserControl x:Class="Tango.MachineStudio.Synchronization.Views.DirectSynchronizationView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ 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:synchronization="clr-namespace:Tango.Synchronization;assembly=Tango.Synchronization"
+ xmlns:global="clr-namespace:Tango.MachineStudio.Synchronization"
+ xmlns:local="clr-namespace:Tango.MachineStudio.Synchronization.Views"
+ mc:Ignorable="d"
+ d:DesignHeight="720" d:DesignWidth="1280" Background="White" DataContext="{x:Static global:ViewModelLocator.DirectSynchronizationViewVM}">
+ <Grid>
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="300"/>
+ <ColumnDefinition Width="1*"/>
+ </Grid.ColumnDefinitions>
+
+ <ListBox ItemsSource="{Binding Scanner.AvailableMachines}" SelectedItem="{Binding SelectedMachine}">
+ <ListBox.ItemTemplate>
+ <DataTemplate>
+ <StackPanel>
+ <TextBlock Text="{Binding SerialNumber}"></TextBlock>
+ <TextBlock Text="{Binding Organization}"></TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ListBox.ItemTemplate>
+ </ListBox>
+
+ </Grid>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml.cs
new file mode 100644
index 000000000..5a7c12646
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/DirectSynchronizationView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.MachineStudio.Synchronization.Views
+{
+ /// <summary>
+ /// Interaction logic for DirectSynchronizationView.xaml
+ /// </summary>
+ public partial class DirectSynchronizationView : UserControl
+ {
+ public DirectSynchronizationView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml
index bac530777..664dac229 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml
@@ -28,6 +28,9 @@
<ContentControl Tag="RemoteSynchronizationView">
<local:RemoteSynchronizationView></local:RemoteSynchronizationView>
</ContentControl>
+ <ContentControl Tag="DirectSynchronizationView">
+ <local:DirectSynchronizationView></local:DirectSynchronizationView>
+ </ContentControl>
</controls:MultiTransitionControl.Controls>
</controls:MultiTransitionControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml
index 6210ca94c..67501743b 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml
@@ -10,17 +10,34 @@
d:DesignHeight="720" d:DesignWidth="1280" DataContext="{x:Static global:ViewModelLocator.MenuViewVM}">
<Grid>
<Grid>
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="1*"/>
- <ColumnDefinition Width="1*"/>
- </Grid.ColumnDefinitions>
+ <UniformGrid Columns="3">
+ <Grid VerticalAlignment="Center">
+ <StackPanel>
+ <StackPanel HorizontalAlignment="Center" Margin="0 0 0 30">
+ <TextBlock TextAlignment="Center" FontSize="25">Local Synchronization</TextBlock>
+ <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Synchronize two SQLite local database files.</TextBlock>
+ </StackPanel>
+ <Viewbox RenderOptions.BitmapScalingMode="Fant" Width="400">
+ <Grid Width="450">
+ <StackPanel>
+ <StackPanel Orientation="Horizontal">
+ <Image Source="../Images/sqlite.png" Width="160"></Image>
+ <Image Source="../Images/arrow_right.png" Width="100" RenderTransformOrigin="0.5,0.5"></Image>
+ <Image Source="../Images/sqlite.png" Width="130"></Image>
+ </StackPanel>
+
+ <Button Command="{Binding StartLocalSyncCommand}" Height="80" Margin="0 20 0 0" HorizontalAlignment="Center" Padding="10" FontSize="20" Width="200">START</Button>
+ </StackPanel>
+ </Grid>
+ </Viewbox>
+ </StackPanel>
+ </Grid>
<Grid VerticalAlignment="Center">
<StackPanel>
<StackPanel HorizontalAlignment="Center" Margin="0 0 0 30">
- <TextBlock TextAlignment="Center" FontSize="25">Remote Synchronization</TextBlock>
- <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Synchronize local SQLite database file with the remote Twine database.</TextBlock>
+ <TextBlock TextAlignment="Center" FontSize="25">Direct Remote Synchronization</TextBlock>
+ <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Connect and synchronized a Tango machine over the network.</TextBlock>
</StackPanel>
<Viewbox RenderOptions.BitmapScalingMode="Fant" Width="400">
<Grid Width="450">
@@ -28,42 +45,39 @@
<StackPanel Orientation="Horizontal">
<Image Source="../Images/remote-db.png" Width="200"></Image>
<Image Source="../Images/arrow_right.png" Width="100"></Image>
- <Image Source="../Images/android-phone-color.png" Width="180"></Image>
+ <Image Source="../Images/machine-trans.png" Width="120"></Image>
</StackPanel>
- <Button Command="{Binding StartRemoteSyncCommand}" Height="80" Margin="20 20 10 0" HorizontalAlignment="Right" Padding="10" FontSize="20" Width="200">START</Button>
+ <Button Command="{Binding StartDirectRemoteSyncCommand}" Height="80" Margin="0 20 0 0" HorizontalAlignment="Center" Padding="10" FontSize="20" Width="200">START</Button>
</StackPanel>
</Grid>
</Viewbox>
</StackPanel>
</Grid>
- <Grid VerticalAlignment="Center" Grid.Column="1">
+ <Grid VerticalAlignment="Center">
<StackPanel>
<StackPanel HorizontalAlignment="Center" Margin="0 0 0 30">
- <TextBlock TextAlignment="Center" FontSize="25">Local Synchronization</TextBlock>
- <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Synchronize two SQLite local database files.</TextBlock>
+ <TextBlock TextAlignment="Center" FontSize="25">Semi Remote Synchronization</TextBlock>
+ <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Synchronize local SQLite database file with the remote Twine database.</TextBlock>
</StackPanel>
<Viewbox RenderOptions.BitmapScalingMode="Fant" Width="400">
<Grid Width="450">
<StackPanel>
<StackPanel Orientation="Horizontal">
- <Image Source="../Images/sqlite.png" Width="160"></Image>
- <Image Source="../Images/arrow_right.png" Width="100" RenderTransformOrigin="0.5,0.5">
- <Image.RenderTransform>
- <RotateTransform Angle="180"></RotateTransform>
- </Image.RenderTransform>
- </Image>
- <Image Source="../Images/sqlite.png" Width="160"></Image>
+ <Image Source="../Images/remote-db.png" Width="200"></Image>
+ <Image Source="../Images/arrow_right.png" Width="100"></Image>
+ <Image Source="../Images/sqlite.png" Width="120"></Image>
</StackPanel>
- <Button Command="{Binding StartLocalSyncCommand}" Height="80" Margin="5 20 20 0" HorizontalAlignment="Left" Padding="10" FontSize="20" Width="200">START</Button>
+ <Button Command="{Binding StartRemoteSyncCommand}" Height="80" Margin="0 20 0 0" HorizontalAlignment="Center" Padding="10" FontSize="20" Width="200">START</Button>
</StackPanel>
</Grid>
</Viewbox>
</StackPanel>
</Grid>
- </Grid>
+
+ </UniformGrid>
</Grid>
</Grid>
</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Notifications/DialogViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Notifications/DialogViewVM.cs
new file mode 100644
index 000000000..e5e4cac78
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Notifications/DialogViewVM.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.Common.Notifications
+{
+ public abstract class DialogViewVM : ViewModel
+ {
+ public event Action Accepted;
+ public event Action Canceled;
+
+ public DialogViewVM()
+ {
+ CanClose = true;
+ CloseCommand = new RelayCommand(Cancel, (x) => CanClose);
+ }
+
+ private bool _canClose;
+
+ public bool CanClose
+ {
+ get { return _canClose; }
+ set { _canClose = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
+ }
+
+ public RelayCommand CloseCommand { get; set; }
+
+ public virtual void OnShow()
+ {
+
+ }
+
+ protected virtual void Accept()
+ {
+ Accepted?.Invoke();
+ }
+
+ protected virtual void Cancel()
+ {
+ Canceled?.Invoke();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Notifications/INotificationProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Notifications/INotificationProvider.cs
index a45f9a847..937a39ec2 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Notifications/INotificationProvider.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Notifications/INotificationProvider.cs
@@ -24,11 +24,11 @@ namespace Tango.MachineStudio.Common.Notifications
void PopTaskItem(TaskItem taskItem);
- bool? ShowModalWindow(Window window);
+ void ShowModalDialog<View, VM>(Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM;
- bool ShowModalWindow<T>(PackIconKind icon, String title, object context) where T : FrameworkElement;
+ void ShowModalDialog<VM>(Action<VM> onAccept, Action onCancel) where VM : DialogViewVM;
- bool ShowModalWindow(PackIconKind icon, String title, FrameworkElement content, object context);
+ void ShowModalDialog<VM>(Action<VM> onAccept) where VM : DialogViewVM;
bool? ShowDialog(PackIconKind icon, Brush iconColor, String message, bool hasCancel);
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs
index 740c257b9..3297f9374 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Tango.Integration.Services;
namespace Tango.MachineStudio.Common.StudioApplication
{
@@ -10,5 +11,7 @@ namespace Tango.MachineStudio.Common.StudioApplication
{
bool IsShuttingDown { get;}
void ShutDown();
+ IExternalBridgeClient ConnectedMachine { get; set; }
+ bool IsMachineConnected { get; }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj
index 32466e45a..5cf171090 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj
@@ -71,6 +71,7 @@
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="Notifications\DialogViewVM.cs" />
<Compile Include="StudioApplication\IStudioApplicationManager.cs" />
<Compile Include="StudioApplication\IShutdownRequestBlocker.cs" />
<Compile Include="ExtensionMethods\IStudioMessageExtensions.cs" />
@@ -142,6 +143,10 @@
<Project>{38197109-8610-4d3f-92b9-16d48df94d7c}</Project>
<Name>Tango.DAL.Remote</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\Tango.Integration\Tango.Integration.csproj">
+ <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project>
+ <Name>Tango.Integration</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\Tango.SharedUI\Tango.SharedUI.csproj">
<Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project>
<Name>Tango.SharedUI</Name>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config
index b31d56717..692b77528 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config
@@ -21,4 +21,12 @@
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
</configuration> \ No newline at end of file
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 9193cfd3e..dfbc0eb77 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs
@@ -14,6 +14,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using Tango.Core.Helpers;
using Tango.MachineStudio.Common.StudioApplication;
namespace Tango.MachineStudio.UI
@@ -29,6 +30,7 @@ namespace Tango.MachineStudio.UI
{
InitializeComponent();
Instance = this;
+ ThreadsHelper.SetDisptacher(Dispatcher);
this.Closing += MainWindow_Closing;
}
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 b1ba03109..3c245510b 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs
@@ -35,48 +35,114 @@ namespace Tango.MachineStudio.UI.Notifications
TaskItems = new ObservableCollection<TaskItem>();
}
- public bool ShowModalWindow<T>(PackIconKind icon, string title, object context) where T : FrameworkElement
- {
- return ShowModalWindow(icon, title, Activator.CreateInstance<T>(), context);
- }
-
- public bool? ShowModalWindow(Window window)
+ public bool? ShowDialog(PackIconKind icon, Brush iconColor, string message, bool hasCancel)
{
- window.Owner = Application.Current.MainWindow;
MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
- bool result = window.ShowDialog().Value;
+
+ var result = new MessageBoxWindow()
+ {
+ Owner = Application.Current.MainWindow,
+ Message = message,
+ IconKind = icon,
+ IconColor = iconColor,
+ HasCancel = hasCancel
+
+ }.ShowDialog();
+
MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
return result;
}
- public bool ShowModalWindow(PackIconKind icon, string title, FrameworkElement content, object context)
+ public void ShowModalDialog<View, VM>(Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM
{
- DialogWindow dialog = new DialogWindow(content);
- dialog.DataContext = context;
- dialog.InnerTitle = title;
+ var view = Activator.CreateInstance<View>();
+ DialogWindow dialog = new DialogWindow();
dialog.Owner = Application.Current.MainWindow;
+ dialog.InnerContent = view;
MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
- bool result = dialog.ShowDialog().Value;
+ view.Loaded += (x, y) =>
+ {
+ VM context = view.DataContext as VM;
+ dialog.DataContext = context;
+
+ Action onAcceptAction = null;
+ onAcceptAction = new Action(() =>
+ {
+ dialog.Close();
+ onAccept(context);
+ context.Accepted -= onAcceptAction;
+ });
+
+ Action onCancelAction = null;
+ onCancelAction = new Action(() =>
+ {
+ dialog.Close();
+
+ if (onCancel != null)
+ {
+ onCancel();
+ }
+
+ context.Canceled -= onCancelAction;
+ });
+
+ context.Accepted += onAcceptAction;
+ context.Canceled += onCancelAction;
+
+ context.OnShow();
+ };
+ dialog.ShowDialog();
MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
- return result;
}
- public bool? ShowDialog(PackIconKind icon, Brush iconColor, string message, bool hasCancel)
+ public void ShowModalDialog<VM>(Action<VM> onAccept, Action onCancel) where VM : DialogViewVM
{
- MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
+ String viewName = typeof(VM).Name.Replace("VM", "");
- var result = new MessageBoxWindow()
+ var view = Activator.CreateInstance(AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).Single(x => x.Name == viewName)) as FrameworkElement;
+ DialogWindow dialog = new DialogWindow();
+ dialog.Owner = Application.Current.MainWindow;
+ dialog.InnerContent = view;
+ MainWindow.Instance.shadowGrid.Visibility = Visibility.Visible;
+ view.Loaded += (x, y) =>
{
- Owner = Application.Current.MainWindow,
- Message = message,
- IconKind = icon,
- IconColor = iconColor,
- HasCancel = hasCancel
+ VM context = view.DataContext as VM;
+ dialog.DataContext = context;
- }.ShowDialog();
+ Action onAcceptAction = null;
+ onAcceptAction = new Action(() =>
+ {
+ dialog.Close();
+ onAccept(context);
+ context.Accepted -= onAcceptAction;
+ });
+
+ Action onCancelAction = null;
+ onCancelAction = new Action(() =>
+ {
+ dialog.Close();
+
+ if (onCancel != null)
+ {
+ onCancel();
+ }
+
+ context.Canceled -= onCancelAction;
+ });
+ context.Accepted += onAcceptAction;
+ context.Canceled += onCancelAction;
+
+ context.OnShow();
+ };
+
+ dialog.ShowDialog();
MainWindow.Instance.shadowGrid.Visibility = Visibility.Hidden;
- return result;
+ }
+
+ public void ShowModalDialog<VM>(Action<VM> onAccept) where VM : DialogViewVM
+ {
+ ShowModalDialog<VM>(onAccept, null);
}
public void ShowError(string message)
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 2a8dd9f28..c11e2e11b 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml
@@ -1,4 +1,4 @@
-<mahapps:MetroWindow x:Class="Tango.MachineStudio.UI.Windows.DialogWindow"
+<Window x:Class="Tango.MachineStudio.UI.Windows.DialogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
@@ -7,18 +7,22 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Tango.MachineStudio.UI.Windows"
mc:Ignorable="d"
- Title="Machine Studio" Height="450" Width="650" EnableDWMDropShadow="True" ShowCloseButton="False" WindowTransitionsEnabled="False" ShowMaxRestoreButton="False" ShowMinButton="False" TitleCaps="False" BorderThickness="1" WindowStartupLocation="CenterOwner">
+ Title="Machine Studio" MinHeight="220" SizeToContent="WidthAndHeight" MinWidth="600" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent">
<Grid>
- <Border Margin="16">
- <DockPanel LastChildFill="True">
- <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" VerticalAlignment="Top">
- <materialDesign:PackIcon Kind="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=IconKind}" VerticalAlignment="Center" Width="32" Height="32" Foreground="{StaticResource AccentColorBrush}" />
- <TextBlock Margin="10 0 0 0" Foreground="{StaticResource AccentColorBrush}" FontSize="16" Text="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=InnerTitle}"></TextBlock>
- </StackPanel>
- <ScrollViewer Margin="0 10 0 10" VerticalScrollBarVisibility="Auto" Padding="5">
- <ContentPresenter x:Name="presenter"></ContentPresenter>
- </ScrollViewer>
- </DockPanel>
- </Border>
+ <Grid>
+ <Border Background="White" CornerRadius="10" Padding="10" Margin="20">
+ <Border.Effect>
+ <DropShadowEffect ShadowDepth="0" BlurRadius="10"></DropShadowEffect>
+ </Border.Effect>
+
+ <Grid>
+ <ContentPresenter x:Name="presenter" Content="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=InnerContent}"></ContentPresenter>
+
+ <Button Command="{Binding CloseCommand}" HorizontalAlignment="Right" VerticalAlignment="Top" Width="20" Height="20" Margin="0 -6 -4 0" Padding="0" Style="{StaticResource MaterialDesignFlatButton}" Foreground="Black">
+ <materialDesign:PackIcon Kind="Close" Width="16" Height="16"></materialDesign:PackIcon>
+ </Button>
+ </Grid>
+ </Border>
+ </Grid>
</Grid>
-</mahapps:MetroWindow>
+</Window>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml.cs
index 31dd3d644..d1bc0564b 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml.cs
@@ -20,51 +20,23 @@ namespace Tango.MachineStudio.UI.Windows
/// <summary>
/// Interaction logic for DialogWindow.xaml
/// </summary>
- public partial class DialogWindow : MetroWindow
+ public partial class DialogWindow : Window
{
public DialogWindow()
{
InitializeComponent();
}
-
-
- public String InnerTitle
- {
- get { return (String)GetValue(InnerTitleProperty); }
- set { SetValue(InnerTitleProperty, value); }
- }
- public static readonly DependencyProperty InnerTitleProperty =
- DependencyProperty.Register("InnerTitle", typeof(String), typeof(DialogWindow), new PropertyMetadata(null));
-
-
-
- public PackIconKind IconKind
+ public FrameworkElement InnerContent
{
- get { return (PackIconKind)GetValue(IconKindProperty); }
- set { SetValue(IconKindProperty, value); }
+ get { return (FrameworkElement)GetValue(InnerContentProperty); }
+ set { SetValue(InnerContentProperty, value); }
}
- public static readonly DependencyProperty IconKindProperty =
- DependencyProperty.Register("IconKind", typeof(PackIconKind), typeof(DialogWindow), new PropertyMetadata(PackIconKind.Information));
-
+ // Using a DependencyProperty as the backing store for InnerContent. This enables animation, styling, binding, etc...
+ public static readonly DependencyProperty InnerContentProperty =
+ DependencyProperty.Register("InnerContent", typeof(FrameworkElement), typeof(DialogWindow), new PropertyMetadata(null));
- public DialogWindow(FrameworkElement content) : this()
- {
- presenter.Content = content;
- }
-
- private void OnOKClicked(object sender, RoutedEventArgs e)
- {
- DialogResult = true;
- Close();
- }
-
- private void OnCancelClicked(object sender, RoutedEventArgs e)
- {
- DialogResult = false;
- Close();
- }
}
}
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 ea4234fd8..b0315e633 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs
@@ -11,10 +11,13 @@ using Tango.MachineStudio.Common.Navigation;
using GalaSoft.MvvmLight.Ioc;
using System.Reflection;
using System.Collections;
+using Tango.Integration.Services;
+using Tango.Core;
+using Tango.Logging;
namespace Tango.MachineStudio.UI.StudioApplication
{
- public class DefaultStudioApplicationManager : IStudioApplicationManager
+ public class DefaultStudioApplicationManager : ExtendedObject, IStudioApplicationManager
{
private INavigationManager _navigationManager;
@@ -25,6 +28,19 @@ namespace Tango.MachineStudio.UI.StudioApplication
public bool IsShuttingDown { get; private set; }
+ private IExternalBridgeClient _connectedMachine;
+
+ public IExternalBridgeClient ConnectedMachine
+ {
+ get { return _connectedMachine; }
+ set { _connectedMachine = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(IsMachineConnected)); }
+ }
+
+ public bool IsMachineConnected
+ {
+ get { return ConnectedMachine != null; }
+ }
+
public async void ShutDown()
{
if (IsShuttingDown) return;
@@ -33,6 +49,17 @@ namespace Tango.MachineStudio.UI.StudioApplication
await Task.Factory.StartNew(async () =>
{
+ try
+ {
+ if (ConnectedMachine != null)
+ {
+ ConnectedMachine.Disconnect().Wait();
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error disconnecting from machine.");
+ }
//Do Shutdown Procedures...
foreach (var vm in ServiceLocator.Current.GetAllInstancesByBase<IShutdownRequestBlocker>())
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj
index fa04a1068..3becf0252 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj
@@ -58,6 +58,9 @@
<Reference Include="GalaSoft.MvvmLight.Platform, Version=5.3.0.19032, Culture=neutral, PublicKeyToken=5f873c45e98af8a1, processorArchitecture=MSIL">
<HintPath>..\..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Platform.dll</HintPath>
</Reference>
+ <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath>
+ </Reference>
<Reference Include="MahApps.Metro, Version=1.5.0.23, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL">
<HintPath>..\..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll</HintPath>
</Reference>
@@ -110,6 +113,7 @@
<Compile Include="SupervisingController\IMainView.cs" />
<Compile Include="ViewModels\LoadingViewVM.cs" />
<Compile Include="ViewModels\LoginViewVM.cs" />
+ <Compile Include="ViewModels\MachineConnectionViewVM.cs" />
<Compile Include="ViewModels\MainViewVM.cs" />
<Compile Include="ViewModelLocator.cs" />
<Compile Include="ViewModels\ShutdownViewVM.cs" />
@@ -119,6 +123,9 @@
<Compile Include="Views\LoginView.xaml.cs">
<DependentUpon>LoginView.xaml</DependentUpon>
</Compile>
+ <Compile Include="Views\MachineConnectionView.xaml.cs">
+ <DependentUpon>MachineConnectionView.xaml</DependentUpon>
+ </Compile>
<Compile Include="Views\MainView.xaml.cs">
<DependentUpon>MainView.xaml</DependentUpon>
</Compile>
@@ -159,6 +166,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+ <Page Include="Views\MachineConnectionView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
<Page Include="Views\MainView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -216,10 +227,18 @@
<Project>{38197109-8610-4d3f-92b9-16d48df94d7c}</Project>
<Name>Tango.DAL.Remote</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\Tango.Integration\Tango.Integration.csproj">
+ <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project>
+ <Name>Tango.Integration</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\Tango.Logging\Tango.Logging.csproj">
<Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project>
<Name>Tango.Logging</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\Tango.PMR\Tango.PMR.csproj">
+ <Project>{e4927038-348d-4295-aaf4-861c58cb3943}</Project>
+ <Name>Tango.PMR</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\Tango.Settings\Tango.Settings.csproj">
<Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project>
<Name>Tango.Settings</Name>
@@ -228,6 +247,10 @@
<Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project>
<Name>Tango.SharedUI</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\Tango.Transport\Tango.Transport.csproj">
+ <Project>{74e700b0-1156-4126-be40-ee450d3c3026}</Project>
+ <Name>Tango.Transport</Name>
+ </ProjectReference>
<ProjectReference Include="..\Modules\Tango.MachineStudio.DB\Tango.MachineStudio.DB.csproj">
<Project>{94f7acf8-55e1-4a02-b9bc-a818413fdbbf}</Project>
<Name>Tango.MachineStudio.DB</Name>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
index f4a7a7502..e40f589af 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
@@ -2,6 +2,7 @@ using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Ioc;
using Microsoft.Practices.ServiceLocation;
using System;
+using Tango.Integration.Services;
using Tango.Logging;
using Tango.MachineStudio.Common.Authentication;
using Tango.MachineStudio.Common.Modules;
@@ -48,17 +49,23 @@ namespace Tango.MachineStudio.UI
SimpleIoc.Default.Unregister<INavigationManager>();
SimpleIoc.Default.Unregister<IStudioModuleLoader>();
SimpleIoc.Default.Unregister<IStudioApplicationManager>();
+ SimpleIoc.Default.Unregister<ExternalBridgeScanner>();
SimpleIoc.Default.Register<INotificationProvider, DefaultNotificationProvider>();
SimpleIoc.Default.Register<IAuthenticationProvider, DefaultAuthenticationProvider>();
SimpleIoc.Default.Register<INavigationManager, DefaultNavigationManager>();
SimpleIoc.Default.Register<IStudioModuleLoader, DefaultStudioModuleLoader>();
SimpleIoc.Default.Register<IStudioApplicationManager, DefaultStudioApplicationManager>();
+ SimpleIoc.Default.Register<ExternalBridgeScanner, ExternalBridgeScanner>();
SimpleIoc.Default.Register<MainViewVM>();
SimpleIoc.Default.Register<LoadingViewVM>();
SimpleIoc.Default.Register<ShutdownViewVM>();
SimpleIoc.Default.Register<LoginViewVM>();
+ SimpleIoc.Default.Register<MachineConnectionViewVM>();
+
+ LogManager.RegisterLogger(new VSOutputLogger());
+ LogManager.RegisterLogger(new FileLogger());
//Register View (Supervising Controller Pattern).
if (!ViewModelBase.IsInDesignModeStatic)
@@ -99,5 +106,13 @@ namespace Tango.MachineStudio.UI
return ServiceLocator.Current.GetInstance<LoginViewVM>();
}
}
+
+ public MachineConnectionViewVM MachineConnectionViewVM
+ {
+ get
+ {
+ return ServiceLocator.Current.GetInstance<MachineConnectionViewVM>();
+ }
+ }
}
} \ No newline at end of file
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/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
index a12156d60..6c44c8480 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
{
@@ -47,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
{
@@ -70,20 +80,81 @@ 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>(async (x) =>
+ {
+ if (x.SelectedMachine != null)
+ {
+ using (NotificationProvider.PushTaskItem("Connecting to machine " + x.SelectedMachine.SerialNumber + "..."))
+ {
+ try
+ {
+ await x.SelectedMachine.Connect();
+ var authenticated = await x.SelectedMachine.Authenticate();
+ if (!authenticated)
+ {
+ _notificationProvider.ShowError("It seems like you are not authorized to access the selected machine.");
+ }
+ else
+ {
+ ApplicationManager.ConnectedMachine = x.SelectedMachine;
+ var response = await x.SelectedMachine.SendRequest<CalculateRequest, CalculateResponse>(new CalculateRequest() { A = 10, B = 5 });
+ _notificationProvider.ShowInfo(response.ToString());
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex);
+ _notificationProvider.ShowError(ex.Message);
+ }
+ }
+ }
+
+ InvalidateRelayCommands();
+ });
}
private void Home()
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml
new file mode 100644
index 000000000..2d172837a
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml
@@ -0,0 +1,85 @@
+<UserControl x:Class="Tango.MachineStudio.UI.Views.MachineConnectionView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
+ xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views"
+ mc:Ignorable="d"
+ d:DesignHeight="300" d:DesignWidth="300" Width="600" Height="400" Background="White" DataContext="{Binding MachineConnectionViewVM, Source={StaticResource Locator}}">
+
+ <UserControl.Resources>
+ <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></converters:BooleanToVisibilityConverter>
+ <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter"></converters:BooleanToVisibilityInverseConverter>
+ <converters:BooleanInverseConverter x:Key="BooleanInverseConverter"></converters:BooleanInverseConverter>
+ </UserControl.Resources>
+
+ <Grid>
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="80"/>
+ <RowDefinition Height="1*"/>
+ </Grid.RowDefinitions>
+
+ <Grid>
+ <StackPanel Orientation="Horizontal" Margin="10">
+ <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant"></Image>
+ <TextBlock Text="Machine Connection" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="20"></TextBlock>
+ </StackPanel>
+ </Grid>
+
+ <Grid Grid.Row="1" Margin="10 0 10 10">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="1*"/>
+ <RowDefinition Height="50"/>
+ </Grid.RowDefinitions>
+
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="30"/>
+ <RowDefinition Height="223*"/>
+ </Grid.RowDefinitions>
+
+ <Grid>
+ <TextBlock VerticalAlignment="Center" Margin="0 0 0 0" Text="Scanning for machine on your local network..."></TextBlock>
+
+ <!--<Button Command="{Binding ScanCommand}" HorizontalAlignment="Right" Width="40" Padding="0" Style="{StaticResource MaterialDesignFlatButton}" Foreground="Black" ToolTip="Scan">
+ <materialDesign:PackIcon Kind="Refresh" Width="24" Height="24"></materialDesign:PackIcon>
+ </Button>-->
+ </Grid>
+
+ <Grid Grid.Row="1">
+ <ListBox ItemsSource="{Binding Scanner.AvailableMachines}" SelectedItem="{Binding SelectedMachine}" Margin="0 0 0 7" BorderThickness="1" BorderBrush="Gainsboro">
+ <ListBox.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal">
+ <Image Source="/Images/machine-trans.png" Width="38" Height="38" RenderOptions.BitmapScalingMode="Fant"></Image>
+ <StackPanel Margin="10 0 0 0">
+ <TextBlock FontSize="11">
+ <Run FontWeight="Bold">S/N:</Run> <Run Text="{Binding SerialNumber,Mode=OneWay}"></Run>
+ </TextBlock>
+ <TextBlock FontSize="11">
+ <Run FontWeight="Bold">IP Address:</Run> <Run Text="{Binding IPAddress,Mode=OneWay}"></Run>
+ </TextBlock>
+ <TextBlock FontSize="11">
+ <Run FontWeight="Bold">Organization:</Run> <Run Text="{Binding Organization,Mode=OneWay}"></Run>
+ </TextBlock>
+ </StackPanel>
+ </StackPanel>
+ </DataTemplate>
+ </ListBox.ItemTemplate>
+ </ListBox>
+
+ <mahapps:MetroProgressBar VerticalAlignment="Bottom" Height="1" IsIndeterminate="True"></mahapps:MetroProgressBar>
+ </Grid>
+ </Grid>
+
+ <Grid Grid.Row="1">
+ <Button HorizontalAlignment="Right" Width="140" Command="{Binding ConnectCommand}" Click="OnConnectClicked">CONNECT</Button>
+ </Grid>
+ </Grid>
+ </Grid>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml.cs
new file mode 100644
index 000000000..58cec1987
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.MachineStudio.UI.Views
+{
+ /// <summary>
+ /// Interaction logic for MachineConnectionView.xaml
+ /// </summary>
+ public partial class MachineConnectionView : UserControl
+ {
+ public MachineConnectionView()
+ {
+ InitializeComponent();
+ }
+
+ private void OnConnectClicked(object sender, RoutedEventArgs e)
+ {
+ Window.GetWindow(this).DialogResult = true;
+ Window.GetWindow(this).Close();
+ }
+ }
+}
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 aad1189b8..fc9db8adc 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
@@ -26,7 +26,7 @@
</Style.Triggers>
</Style>
</Grid.Style>
-
+
<materialDesign:DrawerHost IsLeftDrawerOpen="{Binding ElementName=MenuToggleButton, Path=IsChecked}">
<materialDesign:DrawerHost.LeftDrawerContent>
<StackPanel MinWidth="300">
@@ -84,17 +84,49 @@
x:Name="MenuToggleButton"/>
<materialDesign:PopupBox DockPanel.Dock="Right" PlacementMode="BottomAndAlignRightEdges" StaysOpen="False">
<StackPanel>
- <Button Content="Home"/>
- <Button Content="Nice Popup"/>
- <Button Content="Can't Touch This" IsEnabled="False" />
+ <Button Content="Machine Connection" Command="{Binding ConnectCommand}" />
+ <Button Content="Disconnect Machine" Command="{Binding DisconnectCommand}" />
+ <Button Content="Exit" />
<Separator/>
<Button Content="Goodbye"/>
</StackPanel>
</materialDesign:PopupBox>
- <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Height="60" HorizontalAlignment="Center">
- <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant"></Image>
- <TextBlock Text="Machine Studio" VerticalAlignment="Center" Margin="20 0 0 0" FontSize="36"/>
- </StackPanel>
+ <Grid>
+ <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Height="60" HorizontalAlignment="Center">
+ <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant"></Image>
+ <TextBlock Text="Machine Studio" VerticalAlignment="Center" Margin="20 0 0 0" FontSize="36"/>
+ </StackPanel>
+
+ <Grid HorizontalAlignment="Right">
+ <StackPanel Orientation="Horizontal">
+ <Button Margin="10 0 0 0" Style="{StaticResource MaterialDesignFlatButton}" FontSize="12" ToolTip="Connect to machine on the local network" BorderThickness="0" Command="{Binding ConnectCommand}">
+ <!--<Button.Background>
+ <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
+ <GradientStop Color="White" Offset="0.4" />
+ <GradientStop Color="#75E0FA" Offset="1"/>
+ </LinearGradientBrush>
+ </Button.Background>-->
+ <StackPanel Orientation="Horizontal">
+ <TextBlock Text="Machine Connection" VerticalAlignment="Center" Foreground="White"></TextBlock>
+ <materialDesign:PackIcon Margin="10 0 0 0" Width="16" Height="16">
+ <materialDesign:PackIcon.Style>
+ <Style TargetType="materialDesign:PackIcon">
+ <Setter Property="Foreground" Value="#FF6767"></Setter>
+ <Setter Property="Kind" Value="LanDisconnect"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding ApplicationManager.IsMachineConnected,Mode=OneWay}" Value="True">
+ <Setter Property="Foreground" Value="#03FF8E"></Setter>
+ <Setter Property="Kind" Value="LanConnect"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </materialDesign:PackIcon.Style>
+ </materialDesign:PackIcon>
+ </StackPanel>
+ </Button>
+ </StackPanel>
+ </Grid>
+ </Grid>
</DockPanel>
</materialDesign:ColorZone>
@@ -189,7 +221,7 @@
</Style.Triggers>
</Style>
</Grid.Style>
- <ContentPresenter Content="{Binding CurrentModule.MainView}"></ContentPresenter>
+ <ContentPresenter Content="{Binding CurrentModule.MainView}"/>
</Grid>
</Grid>
@@ -204,16 +236,16 @@
<Style.Triggers>
<DataTrigger Binding="{Binding NotificationProvider.HasTaskItems}" Value="True">
<DataTrigger.EnterActions>
- <BeginStoryboard>
+ <BeginStoryboard HandoffBehavior="Compose">
<Storyboard>
- <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1" Duration="00:00:0.2"></DoubleAnimation>
+ <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" FillBehavior="HoldEnd" To="1" Duration="00:00:0.2"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
- <BeginStoryboard>
+ <BeginStoryboard HandoffBehavior="Compose">
<Storyboard>
- <DoubleAnimation BeginTime="00:00:01" Storyboard.TargetProperty="RenderTransform.ScaleY" To="0" From="1" Duration="00:00:0.5"></DoubleAnimation>
+ <DoubleAnimation BeginTime="00:00:02" FillBehavior="HoldEnd" Storyboard.TargetProperty="RenderTransform.ScaleY" To="0" From="1" Duration="00:00:0.5"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
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 520b69741..f52393e1c 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
@@ -1,4 +1,5 @@
-using System;
+using Microsoft.Practices.ServiceLocation;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -9,9 +10,12 @@ using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
+using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.MachineStudio.UI.Notifications;
using Tango.MachineStudio.UI.SupervisingController;
using Tango.SharedUI;
using Tango.SharedUI.Controls;
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/packages.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/packages.config
index 3a7265a72..25ad810bd 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/packages.config
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/packages.config
@@ -4,6 +4,7 @@
<package id="Dragablz" version="0.0.3.197" targetFramework="net46" />
<package id="EntityFramework" version="6.0.0" targetFramework="net46" />
<package id="FontAwesome.WPF" version="4.7.0.9" targetFramework="net46" />
+ <package id="Google.Protobuf" version="3.4.1" targetFramework="net46" />
<package id="MahApps.Metro" version="1.5.0" targetFramework="net46" />
<package id="MaterialDesignColors" version="1.1.2" targetFramework="net46" />
<package id="MaterialDesignThemes" version="2.3.1.953" targetFramework="net46" />