diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-12-20 10:17:08 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-12-20 10:17:08 +0200 |
| commit | de514b47f502ace13335e2a432b896f16af55039 (patch) | |
| tree | 61f27e01e7303b23823645ffc7b257ac5925d05f /Software/Visual_Studio | |
| parent | d9b0b7617864600f690a8202d06b2fb2a64306db (diff) | |
| download | Tango-de514b47f502ace13335e2a432b896f16af55039.tar.gz Tango-de514b47f502ace13335e2a432b896f16af55039.zip | |
MERGE.
Diffstat (limited to 'Software/Visual_Studio')
15 files changed, 475 insertions, 24 deletions
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 Binary files differindex 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 |
