aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2017-12-20 10:17:08 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2017-12-20 10:17:08 +0200
commitde514b47f502ace13335e2a432b896f16af55039 (patch)
tree61f27e01e7303b23823645ffc7b257ac5925d05f
parentd9b0b7617864600f690a8202d06b2fb2a64306db (diff)
downloadTango-de514b47f502ace13335e2a432b896f16af55039.tar.gz
Tango-de514b47f502ace13335e2a432b896f16af55039.zip
MERGE.
-rw-r--r--Software/DB/Tango.mdfbin8388608 -> 8388608 bytes
-rw-r--r--Software/DB/Tango_log.ldfbin8388608 -> 8388608 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj9
-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/LocalSynchronizationViewVM.cs302
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs48
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/LocalSynchronizationView.xaml46
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml6
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml.cs15
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs20
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml14
-rw-r--r--Software/Visual_Studio/Tango.Settings/MachineStudioSettings/MachineStudio.cs (renamed from Software/Visual_Studio/Tango.Settings/MachineStudio.cs)9
-rw-r--r--Software/Visual_Studio/Tango.Settings/MachineStudioSettings/SynchronizationModule.cs15
-rw-r--r--Software/Visual_Studio/Tango.Settings/SettingsCollection.cs1
-rw-r--r--Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj3
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/App_Data/Tango.dbbin557056 -> 557056 bytes
17 files changed, 475 insertions, 24 deletions
diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf
index 11a540748..4b61dad5b 100644
--- a/Software/DB/Tango.mdf
+++ b/Software/DB/Tango.mdf
Binary files differ
diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf
index 5687558f7..9fc49b058 100644
--- a/Software/DB/Tango_log.ldf
+++ b/Software/DB/Tango_log.ldf
Binary files differ
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 53a0476e5..8b2f0ae82 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
@@ -77,6 +77,7 @@
<Compile Include="Navigation\NavigationView.cs" />
<Compile Include="Navigation\SyncNavigationManager.cs" />
<Compile Include="ViewModelLocator.cs" />
+ <Compile Include="ViewModels\LocalSynchronizationViewVM.cs" />
<Compile Include="ViewModels\MainViewVM.cs" />
<Compile Include="ViewModels\MenuViewVM.cs" />
<Compile Include="Views\RemoteSynchronizationView.xaml.cs">
@@ -153,6 +154,14 @@
<Project>{0ecd6da8-7aa6-48d9-8b65-279d176ad9af}</Project>
<Name>Tango.DAL.Observables</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj">
+ <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project>
+ <Name>Tango.Logging</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Settings\Tango.Settings.csproj">
+ <Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project>
+ <Name>Tango.Settings</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/Modules/Tango.MachineStudio.Synchronization/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModelLocator.cs
index 30162e824..8eac609c2 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModelLocator.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModelLocator.cs
@@ -20,6 +20,7 @@ namespace Tango.MachineStudio.Synchronization
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewVM>();
SimpleIoc.Default.Register<MenuViewVM>();
+ SimpleIoc.Default.Register<LocalSynchronizationViewVM>();
SimpleIoc.Default.Unregister<SyncNavigationManager>();
@@ -41,5 +42,13 @@ namespace Tango.MachineStudio.Synchronization
return ServiceLocator.Current.GetInstance<MenuViewVM>();
}
}
+
+ public static LocalSynchronizationViewVM LocalSynchronizationViewVM
+ {
+ get
+ {
+ return ServiceLocator.Current.GetInstance<LocalSynchronizationViewVM>();
+ }
+ }
}
} \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/LocalSynchronizationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/LocalSynchronizationViewVM.cs
new file mode 100644
index 000000000..773080813
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/LocalSynchronizationViewVM.cs
@@ -0,0 +1,302 @@
+using Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.Logging;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.MachineStudio.Synchronization.Navigation;
+using Tango.MachineStudio.Synchronization.Properties;
+using Tango.Settings;
+using Tango.SharedUI;
+using Tango.Synchronization;
+using Tango.Synchronization.Local;
+
+namespace Tango.MachineStudio.Synchronization.ViewModels
+{
+ public class LocalSynchronizationViewVM : ViewModel
+ {
+ private SyncNavigationManager _navigation;
+ private String _masterDBFile;
+ private String _slaveDBFile;
+ private LocalDBComparer _comparer;
+ private INotificationProvider _notification;
+ private bool _isWorking;
+
+ #region Constructors
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="LocalSynchronizationViewVM"/> class.
+ /// </summary>
+ /// <param name="navigation">The navigation.</param>
+ /// <param name="notification">The notification.</param>
+ public LocalSynchronizationViewVM(SyncNavigationManager navigation, INotificationProvider notification)
+ {
+ _navigation = navigation;
+ _notification = notification;
+
+ BackCommand = new RelayCommand(() => _navigation.NavigateTo(NavigationView.MenuView));
+
+ Differences = new ObservableCollection<Diff>();
+
+ BrowseMasterDBCommand = new RelayCommand(BrowseMasterDB, (x) => !_isWorking);
+ BrowseSlaveDBCommand = new RelayCommand(BrowseSlaveDB, (x) => !_isWorking);
+ CompareCommand = new RelayCommand(Compare, (x) => _masterDBFile != null && _slaveDBFile != null && !_isWorking);
+ CommitCommand = new RelayCommand(Commit, (x) => SelectedDifference != null && !_isWorking);
+ CommitAllCommand = new RelayCommand(CommitAll, (x) => Differences.Count > 0 && !_isWorking);
+
+ if (File.Exists(SettingsManager.Default.MachineStudio.SynchronizationModule.LocalMasterDBFile))
+ {
+ _masterDBFile = SettingsManager.Default.MachineStudio.SynchronizationModule.LocalMasterDBFile;
+ MasterDBName = Path.GetFileName(_masterDBFile);
+ }
+
+ if (File.Exists(SettingsManager.Default.MachineStudio.SynchronizationModule.LocalSlaveDBFile))
+ {
+ _slaveDBFile = SettingsManager.Default.MachineStudio.SynchronizationModule.LocalSlaveDBFile;
+ SlaveDBName = Path.GetFileName(_slaveDBFile);
+ }
+ }
+
+ #endregion
+
+ #region Commands
+
+ /// <summary>
+ /// Gets or sets the back command.
+ /// </summary>
+ public RelayCommand BackCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the browse master database command.
+ /// </summary>
+ public RelayCommand BrowseMasterDBCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the browse slave database command.
+ /// </summary>
+ public RelayCommand BrowseSlaveDBCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the compare command.
+ /// </summary>
+ public RelayCommand CompareCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the commit command.
+ /// </summary>
+ public RelayCommand CommitCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the commit all command.
+ /// </summary>
+ public RelayCommand CommitAllCommand { get; set; }
+ #endregion
+
+ #region Properties
+
+ private ObservableCollection<Diff> _differences;
+ /// <summary>
+ /// Gets or sets the differences.
+ /// </summary>
+ public ObservableCollection<Diff> Differences
+ {
+ get { return _differences; }
+ set { _differences = value; RaisePropertyChanged(nameof(Differences)); }
+ }
+
+ private Diff _selectedDifference;
+ /// <summary>
+ /// Gets or sets the selected difference.
+ /// </summary>
+ public Diff SelectedDifference
+ {
+ get { return _selectedDifference; }
+ set { _selectedDifference = value; RaisePropertyChanged(nameof(SelectedDifference)); InvalidateRelayCommands(); }
+ }
+
+ private String _masterDBName;
+ /// <summary>
+ /// Gets or sets the name of the master database.
+ /// </summary>
+ public String MasterDBName
+ {
+ get { return _masterDBName; }
+ set { _masterDBName = value; RaisePropertyChanged(nameof(MasterDBName)); }
+ }
+
+ private String _slaveDBName;
+ /// <summary>
+ /// Gets or sets the name of the slave database.
+ /// </summary>
+ public String SlaveDBName
+ {
+ get { return _slaveDBName; }
+ set { _slaveDBName = value; RaisePropertyChanged(nameof(SlaveDBName)); }
+ }
+
+ #endregion
+
+ #region Private Methods
+
+ private void Compare()
+ {
+ _comparer = new LocalDBComparer(new SQLiteDataBase(_masterDBFile), new SQLiteDataBase(_slaveDBFile));
+
+ Task.Factory.StartNew(() =>
+ {
+ using (_notification.PushTaskItem("Comparing Databases..."))
+ {
+ try
+ {
+ _isWorking = true;
+ InvalidateRelayCommands();
+ Thread.Sleep(1500);
+ var diffs = _comparer.Compare();
+ Differences = new ObservableCollection<Diff>(diffs);
+
+ if (diffs.Where(x => x.Action != DiffAction.ReplaceTableDataInSlave).Count() > 0)
+ {
+ ShowInfo("Found " + Differences.Where(x => x.Action != DiffAction.ReplaceTableDataInSlave).Count() + " differences.");
+ }
+ else
+ {
+ ShowInfo("The master and slave databases are synchronized.");
+ }
+ }
+ catch (Exception ex)
+ {
+ ShowError(ex.Message);
+ }
+ finally
+ {
+ _isWorking = false;
+ SelectedDifference = null;
+ InvalidateRelayCommands();
+
+ SettingsManager.Default.MachineStudio.SynchronizationModule.LocalMasterDBFile = _masterDBFile;
+ SettingsManager.Default.MachineStudio.SynchronizationModule.LocalSlaveDBFile = _slaveDBFile;
+ SettingsManager.SaveDefaultSettings();
+ }
+ }
+ });
+ }
+
+ private void Commit()
+ {
+ Task.Factory.StartNew(() =>
+ {
+ using (_notification.PushTaskItem("Committing difference..."))
+ {
+ try
+ {
+ _isWorking = true;
+ InvalidateRelayCommands();
+ Thread.Sleep(1500);
+ SelectedDifference.Commit();
+
+ InvokeUINow(() => Differences.Remove(SelectedDifference));
+ }
+ catch (Exception ex)
+ {
+ ShowError(ex.Message);
+ }
+ finally
+ {
+ _isWorking = false;
+ SelectedDifference = null;
+ InvalidateRelayCommands();
+ }
+ }
+ });
+ }
+
+ private void CommitAll()
+ {
+ Task.Factory.StartNew(() =>
+ {
+ using (_notification.PushTaskItem("Committing all differences..."))
+ {
+ try
+ {
+ _isWorking = true;
+ InvalidateRelayCommands();
+ Thread.Sleep(1500);
+
+ for (int i = 0; i < Differences.Count; i++)
+ {
+ var diff = Differences[i];
+ using (_notification.PushTaskItem("Committing difference " + (Differences.IndexOf(diff) + 1) + "..."))
+ {
+ diff.Commit();
+ InvokeUINow(() => Differences.Remove(diff));
+ i--;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ ShowError(ex.Message);
+ }
+ finally
+ {
+ _isWorking = false;
+ SelectedDifference = null;
+ InvalidateRelayCommands();
+ }
+ }
+ });
+ }
+
+ private void BrowseSlaveDB()
+ {
+ String file = BrowseForFilePath();
+ if (file != null)
+ {
+ _slaveDBFile = file;
+ SlaveDBName = Path.GetFileName(file);
+ InvalidateRelayCommands();
+ }
+ }
+
+ private void BrowseMasterDB()
+ {
+ String file = BrowseForFilePath();
+ if (file != null)
+ {
+ _masterDBFile = file;
+ MasterDBName = Path.GetFileName(file);
+ InvalidateRelayCommands();
+ }
+ }
+
+ private String BrowseForFilePath()
+ {
+ OpenFileDialog dlg = new OpenFileDialog();
+ dlg.Title = "Select SQLite Database File";
+ dlg.Filter = "SQLite Database|*.db";
+ if (dlg.ShowDialog().Value)
+ {
+ return dlg.FileName;
+ }
+ return null;
+ }
+
+ private void ShowError(String message)
+ {
+ InvokeUINow(() => _notification.ShowError(message));
+ }
+
+ private void ShowInfo(String message)
+ {
+ InvokeUINow(() => _notification.ShowInfo(message));
+ }
+
+ #endregion
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs
index 61bf6e20c..c392aee1a 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs
@@ -3,11 +3,59 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Tango.Logging;
using Tango.SharedUI;
namespace Tango.MachineStudio.Synchronization.ViewModels
{
public class MainViewVM : ViewModel
{
+ public MainViewVM()
+ {
+ MainViewLogger logger = new MainViewLogger();
+ logger.NewLog += (output) =>
+ {
+ Log += output + Environment.NewLine;
+ };
+
+ LogManager.RegisterLogger(logger);
+ }
+
+ private String _log;
+ /// <summary>
+ /// Gets or sets the current application log text.
+ /// </summary>
+ public String Log
+ {
+ get { return _log; }
+ set { _log = value; RaisePropertyChanged(nameof(Log)); }
+ }
+
+ #region Custom Logger
+
+ public class MainViewLogger : ILogger
+ {
+ public bool Enabled { get; set; }
+ public bool Immediate { get; set; }
+ public event Action<String> NewLog;
+
+ public MainViewLogger()
+ {
+ Enabled = true;
+ Immediate = true;
+ }
+
+ public void OnError(LogItemBase output)
+ {
+ NewLog?.Invoke(output.TimeStamp.ToTimeString() + ": " + output.GetMessage());
+ }
+
+ public void OnTrace(LogItemBase output)
+ {
+ NewLog?.Invoke(output.TimeStamp.ToTimeString() + ": " + output.GetMessage());
+ }
+ }
+
+ #endregion
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/LocalSynchronizationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/LocalSynchronizationView.xaml
index ded60fbb7..e52a8bfc1 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/LocalSynchronizationView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/LocalSynchronizationView.xaml
@@ -4,10 +4,13 @@
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"
xmlns:fa="http://schemas.fontawesome.io/icons/"
mc:Ignorable="d"
- d:DesignHeight="720" d:DesignWidth="1280">
+ d:DesignHeight="720" d:DesignWidth="1280" DataContext="{x:Static global:ViewModelLocator.LocalSynchronizationViewVM}">
<UserControl.Resources>
<VisualBrush x:Key="badgeBackground">
@@ -31,11 +34,23 @@
</VisualBrush.Visual>
</VisualBrush>
</UserControl.Resources>
-
+
<Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="100"/>
+ <RowDefinition Height="*"/>
+ </Grid.RowDefinitions>
<Grid>
+ <StackPanel Orientation="Horizontal" Margin="20">
+ <Button Style="{StaticResource MaterialDesignFlatButton}" Padding="0" Margin="0 5 0 0" VerticalAlignment="Center" Command="{Binding BackCommand}">
+ <materialDesign:PackIcon Kind="Backburger" Foreground="#303030" ToolTip="Back" VerticalAlignment="Center" Width="40" Height="40"></materialDesign:PackIcon>
+ </Button>
+ <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" FontSize="30">Local Database Synchronization</TextBlock>
+ </StackPanel>
+ </Grid>
+ <Grid Grid.Row="1">
<Grid.ColumnDefinitions>
- <ColumnDefinition Width="600"/>
+ <ColumnDefinition Width="800"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid Margin="20">
@@ -58,10 +73,10 @@
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20 0 0 0">
<Image Source="../Images/sqlite.png" Width="100" Margin="10" Opacity="0.8" HorizontalAlignment="Left" RenderOptions.BitmapScalingMode="Fant"></Image>
- <TextBlock Background="{StaticResource badgeBackground}" Padding="5" Width="200" FontSize="11" HorizontalAlignment="Left">Master DataBase</TextBlock>
+ <TextBlock Background="{StaticResource badgeBackground}" Padding="5" Width="200" FontSize="14" HorizontalAlignment="Left">Master Database</TextBlock>
<StackPanel Orientation="Horizontal" Margin="0 5 0 0">
<TextBox IsReadOnly="True" Width="130" BorderBrush="#4E4E4E" Text="{Binding MasterDBName}"></TextBox>
- <Button Margin="5 0 0 0" Cursor="Hand" VerticalAlignment="Center" Style="{DynamicResource MetroCircleButtonStyle}" mahapps:ButtonHelper.PreserveTextCase="True" BorderThickness="0" Command="{Binding BrowseMasterDBCommand}">
+ <Button Margin="5 0 0 0" Cursor="Hand" VerticalAlignment="Center" Style="{DynamicResource MetroCircleButtonStyle}" mahapps:ButtonHelper.PreserveTextCase="True" BorderThickness="0" Command="{Binding BrowseMasterDBCommand}" ToolTip="Browse for master database file">
<fa:ImageAwesome Icon="FolderOpen" Width="24" Foreground="Gray"></fa:ImageAwesome>
</Button>
</StackPanel>
@@ -69,10 +84,10 @@
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Row="1" Margin="20 0 0 0">
<Image Source="../Images/sqlite.png" Width="80" Margin="10" Opacity="0.8" HorizontalAlignment="Left" RenderOptions.BitmapScalingMode="Fant"></Image>
- <TextBlock Background="{StaticResource badgeBackground}" Padding="5" Width="200" FontSize="11" HorizontalAlignment="Left">Slave DataBase</TextBlock>
+ <TextBlock Background="{StaticResource badgeBackground}" Padding="5" Width="200" FontSize="14" HorizontalAlignment="Left">Slave Database</TextBlock>
<StackPanel Orientation="Horizontal" Margin="0 5 0 0">
<TextBox IsReadOnly="True" Width="130" BorderBrush="#4E4E4E" Text="{Binding SlaveDBName}"></TextBox>
- <Button Margin="5 0 0 0" Cursor="Hand" VerticalAlignment="Center" Style="{DynamicResource MetroCircleButtonStyle}" mahapps:ButtonHelper.PreserveTextCase="True" BorderThickness="0" Command="{Binding BrowseSlaveDBCommand}">
+ <Button Margin="5 0 0 0" Cursor="Hand" VerticalAlignment="Center" Style="{DynamicResource MetroCircleButtonStyle}" mahapps:ButtonHelper.PreserveTextCase="True" BorderThickness="0" Command="{Binding BrowseSlaveDBCommand}" ToolTip="Browse for slave database file">
<fa:ImageAwesome Icon="FolderOpen" Width="24" Foreground="Gray"></fa:ImageAwesome>
</Button>
</StackPanel>
@@ -91,14 +106,25 @@
<RowDefinition Height="20"/>
<RowDefinition Height="205*"/>
</Grid.RowDefinitions>
- <TextBlock Margin="10 5 0 0">Differences</TextBlock>
+ <TextBlock Margin="10 5 0 0" FontSize="14">Differences</TextBlock>
<ListBox Margin="10" Background="#F1F1F1" Grid.Row="1" ItemsSource="{Binding Differences}" SelectedItem="{Binding SelectedDifference,Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Padding="10">
<StackPanel Orientation="Horizontal">
<fa:ImageAwesome Icon="Cog" Width="20" Height="20" Foreground="Gray"></fa:ImageAwesome>
- <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" Text="{Binding Description}"></TextBlock>
+ <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" Text="{Binding Description}">
+ <TextBlock.Style>
+ <Style TargetType="TextBlock">
+ <Setter Property="Foreground" Value="Red"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Action}" Value="ReplaceTableDataInSlave">
+ <Setter Property="Foreground" Value="#404040"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </TextBlock.Style>
+ </TextBlock>
</StackPanel>
</Border>
</DataTemplate>
@@ -123,7 +149,7 @@
<RowDefinition Height="71*"/>
</Grid.RowDefinitions>
<TextBlock Margin="10 0 0 0" VerticalAlignment="Bottom">SQL Command</TextBlock>
- <TextBox Margin="10" Foreground="Gray" FontSize="11" Text="{Binding SelectedDifference.Command,Mode=OneWay}" BorderThickness="0" IsReadOnly="True" Background="#F1F1F1" Padding="5" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" AcceptsReturn="True" Grid.Row="1"></TextBox>
+ <TextBox Margin="10" Style="{x:Null}" BorderThickness="0" Foreground="Gray" FontSize="14" Text="{Binding SelectedDifference.Command,Mode=OneWay}" IsReadOnly="True" Background="#F1F1F1" Padding="5" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" AcceptsReturn="True" Grid.Row="1"></TextBox>
</Grid>
<Grid Grid.Row="1">
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 53bcfdb1e..bac530777 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
@@ -5,7 +5,7 @@
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Tango.MachineStudio.Synchronization.Views"
- xmlns:global="clr-namespace:Tango.MachineStudio.Synchronization"
+ xmlns:global="clr-namespace:Tango.MachineStudio.Synchronization"
xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
mc:Ignorable="d"
d:DesignHeight="720" d:DesignWidth="1280" Background="White" DataContext="{x:Static global:ViewModelLocator.MainViewVM}">
@@ -32,8 +32,8 @@
</controls:MultiTransitionControl>
<Grid Grid.Row="1">
- <TextBox Background="#202020" Foreground="Gainsboro" FontSize="11" Padding="5" Style="{x:Null}" BorderThickness="1" IsReadOnly="True" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap">
- 11:35:10.34> Synchronization Engine Started...
+ <TextBox x:Name="txtLog" TextChanged="txtLog_TextChanged" Text="{Binding Log}" Background="{StaticResource AccentColorBrush}" Opacity="0.8" Foreground="White" FontSize="11" Padding="5" Style="{x:Null}" BorderThickness="1" IsReadOnly="True" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap">
+
</TextBox>
</Grid>
</Grid>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml.cs
index 65e50905d..31d50dedb 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MainView.xaml.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@@ -27,5 +28,19 @@ namespace Tango.MachineStudio.Synchronization.Views
InitializeComponent();
Instance = this;
}
+
+ private void txtLog_TextChanged(object sender, TextChangedEventArgs e)
+ {
+ Task.Factory.StartNew(() =>
+ {
+ Thread.Sleep(50);
+
+ this.Dispatcher.Invoke(() =>
+ {
+ txtLog.SelectionStart = txtLog.Text.Length;
+ txtLog.ScrollToEnd();
+ });
+ });
+ }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
index f50b734f4..6505bcf88 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
@@ -31,7 +31,7 @@ namespace Tango.MachineStudio.UI.ViewModels
{
StaThreadHelper.StartStaThread(() =>
{
- Thread.Sleep(3000);
+ Thread.Sleep(1000);
try
{
ObservablesEntitiesAdapter.Instance.Initialize();
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
index 7ef47fabd..a12156d60 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
@@ -26,6 +26,15 @@ namespace Tango.MachineStudio.UI.ViewModels
set { _currentModule = value; RaisePropertyChangedAuto(); }
}
+ private bool _isModuleLoaded;
+
+ public bool IsModuleLoaded
+ {
+ get { return _isModuleLoaded; }
+ set { _isModuleLoaded = value; RaisePropertyChangedAuto(); }
+ }
+
+
private bool _isMenuOpened;
public bool IsMenuOpened
@@ -85,7 +94,16 @@ namespace Tango.MachineStudio.UI.ViewModels
private void StartModule(IStudioModule module)
{
IsMenuOpened = false;
- CurrentModule = module;
+
+ if (module != null)
+ {
+ CurrentModule = module;
+ IsModuleLoaded = true;
+ }
+ else
+ {
+ IsModuleLoaded = false;
+ }
}
protected override void OnViewAttached()
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 cb7378666..aad1189b8 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
@@ -166,22 +166,22 @@
<Setter Property="Opacity" Value="0"></Setter>
<Style.Triggers>
- <DataTrigger Binding="{Binding CurrentModule}" Value="{x:Null}">
+ <DataTrigger Binding="{Binding IsModuleLoaded}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
- <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="0" Duration="00:00:0.2"></DoubleAnimation>
- <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="0" Duration="00:00:0.2"></DoubleAnimation>
- <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="00:00:0.2"></DoubleAnimation>
+ <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="0" Duration="00:00:0.5"></DoubleAnimation>
+ <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="0" Duration="00:00:0.5"></DoubleAnimation>
+ <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="00:00:0.5"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
- <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1" Duration="00:00:0.2"></DoubleAnimation>
- <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1" Duration="00:00:0.2"></DoubleAnimation>
- <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="00:00:0.2"></DoubleAnimation>
+ <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1" Duration="00:00:0.5"></DoubleAnimation>
+ <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1" Duration="00:00:0.5"></DoubleAnimation>
+ <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="00:00:0.5"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
diff --git a/Software/Visual_Studio/Tango.Settings/MachineStudio.cs b/Software/Visual_Studio/Tango.Settings/MachineStudioSettings/MachineStudio.cs
index bc486b6c3..723d85c5d 100644
--- a/Software/Visual_Studio/Tango.Settings/MachineStudio.cs
+++ b/Software/Visual_Studio/Tango.Settings/MachineStudioSettings/MachineStudio.cs
@@ -5,7 +5,7 @@ using System.Text;
using System.Threading.Tasks;
using Tango.Core.Cryptography;
-namespace Tango.Settings
+namespace Tango.Settings.MachineStudioSettings
{
public class MachineStudio
{
@@ -14,5 +14,12 @@ namespace Tango.Settings
public String LastLoginPassword { get; set; }
public bool RememberMe { get; set; }
+
+ public SynchronizationModule SynchronizationModule { get; set; }
+
+ public MachineStudio()
+ {
+ SynchronizationModule = new SynchronizationModule();
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.Settings/MachineStudioSettings/SynchronizationModule.cs b/Software/Visual_Studio/Tango.Settings/MachineStudioSettings/SynchronizationModule.cs
new file mode 100644
index 000000000..18e50da90
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Settings/MachineStudioSettings/SynchronizationModule.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.Settings.MachineStudioSettings
+{
+ public class SynchronizationModule
+ {
+ public String LocalMasterDBFile { get; set; }
+
+ public String LocalSlaveDBFile { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Settings/SettingsCollection.cs b/Software/Visual_Studio/Tango.Settings/SettingsCollection.cs
index 1e0fbd522..aae228b49 100644
--- a/Software/Visual_Studio/Tango.Settings/SettingsCollection.cs
+++ b/Software/Visual_Studio/Tango.Settings/SettingsCollection.cs
@@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Serialization;
+using Tango.Settings.MachineStudioSettings;
namespace Tango.Settings
{
diff --git a/Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj b/Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj
index 895079449..e85a5f1bd 100644
--- a/Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj
+++ b/Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj
@@ -44,7 +44,8 @@
<Link>GlobalVersionInfo.cs</Link>
</Compile>
<Compile Include="DataBase.cs" />
- <Compile Include="MachineStudio.cs" />
+ <Compile Include="MachineStudioSettings\MachineStudio.cs" />
+ <Compile Include="MachineStudioSettings\SynchronizationModule.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SettingsCollection.cs" />
<Compile Include="SettingsManager.cs" />
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/App_Data/Tango.db b/Software/Visual_Studio/Web/Tango.MachineService/App_Data/Tango.db
index 2a238547c..a0d317b86 100644
--- a/Software/Visual_Studio/Web/Tango.MachineService/App_Data/Tango.db
+++ b/Software/Visual_Studio/Web/Tango.MachineService/App_Data/Tango.db
Binary files differ