From 081d332a0494d309c2762f76f9dc5032a673ea0d Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Sun, 7 Jul 2019 15:05:28 +0300 Subject: Removed Object extension methods from global namespace. --- .../Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs | 1 + 1 file changed, 1 insertion(+) (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs index 73ba02435..6cc8289f4 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs @@ -12,6 +12,7 @@ using Tango.BL; using Tango.SharedUI.Components; using System.Runtime.CompilerServices; using Tango.MachineStudio.Common; +using Tango.Core.ExtensionMethods; namespace Tango.MachineStudio.HardwareDesigner.ViewModels { -- cgit v1.3.1 From 3b3967d9d1106c1df0d975eb1c2e47170746528c Mon Sep 17 00:00:00 2001 From: Victoria Plitt Date: Mon, 2 Sep 2019 14:46:14 +0300 Subject: Implemented hardware versions comparison tool. --- .../Comparison/HardwareCompareResult.cs | 26 ++ .../HardwareComponentCollectionCompareResult.cs | 29 ++ .../Comparison/HardwareComponentCompareResult.cs | 33 ++ .../Comparison/HardwareComponentPropertyResult.cs | 20 + .../Report/ReportModel.cs | 17 + .../Tango.MachineStudio.HardwareDesigner.csproj | 18 + .../ViewModels/ComparisonWizardViewVM.cs | 401 +++++++++++++++++++++ .../ViewModels/MainViewVM.cs | 13 +- .../Views/ComparisonWizardView.xaml | 332 +++++++++++++++++ .../Views/ComparisonWizardView.xaml.cs | 28 ++ .../Views/MainView.xaml | 7 + 11 files changed, 923 insertions(+), 1 deletion(-) create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareCompareResult.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentCollectionCompareResult.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentCompareResult.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentPropertyResult.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Report/ReportModel.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml.cs (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareCompareResult.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareCompareResult.cs new file mode 100644 index 000000000..6021f309e --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareCompareResult.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core; + +namespace Tango.MachineStudio.HardwareDesigner.Comparison +{ + public class HardwareCompareResult + { + public SynchronizedObservableCollection Collections { get; set; } + public bool HasDifferences + { + get + { + return Collections.Any(item => item.HasDifferences); + } + } + + public HardwareCompareResult() + { + Collections = new SynchronizedObservableCollection(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentCollectionCompareResult.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentCollectionCompareResult.cs new file mode 100644 index 000000000..c3c370f7a --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentCollectionCompareResult.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core; + +namespace Tango.MachineStudio.HardwareDesigner.Comparison +{ + public class HardwareComponentCollectionCompareResult + { + public String CollectionName { get; set; } + + public SynchronizedObservableCollection Components { get; set; } + + public bool HasDifferences + { + get + { + return Components.Any(item => item.HasDifferences); + } + } + + public HardwareComponentCollectionCompareResult() + { + Components = new SynchronizedObservableCollection(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentCompareResult.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentCompareResult.cs new file mode 100644 index 000000000..447984a5f --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentCompareResult.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core; + +namespace Tango.MachineStudio.HardwareDesigner.Comparison +{ + public class HardwareComponentCompareResult + { + public String ComponentName { get; set; } + + public bool HasComponent1 { get; set; } + + public bool HasComponent2 { get; set; } + + public SynchronizedObservableCollection Properties { get; set; } + + public bool HasDifferences + { + get + { + return Properties.Any(item => item.IsDifferent); + } + } + + public HardwareComponentCompareResult() + { + Properties = new SynchronizedObservableCollection(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentPropertyResult.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentPropertyResult.cs new file mode 100644 index 000000000..d57413af1 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Comparison/HardwareComponentPropertyResult.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.MachineStudio.HardwareDesigner.Comparison +{ + public class HardwareComponentPropertyResult + { + public String PropertyName { get; set; } + public String Value1 { get; set; } + public String Value2 { get; set; } + + public bool IsDifferent + { + get { return Value1 != Value2; } + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Report/ReportModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Report/ReportModel.cs new file mode 100644 index 000000000..8f644ceee --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Report/ReportModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.MachineStudio.HardwareDesigner.Report +{ + public class ReportModel + { + public String Collection { get; set; } + public String Component { get; set; } + public String Property { get; set; } + public String HW_1 { get; set; } + public String HW_2 { get; set; } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner.csproj index 09c8c5880..0e7663abc 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner.csproj @@ -69,12 +69,25 @@ GlobalVersionInfo.cs + + + + + + + + ComparisonWizardView.xaml + MainView.xaml + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -114,6 +127,10 @@ {a34ee0f0-649d-41c8-8489-b6f1cc6924ee} Tango.Core + + {58e8825f-0c96-449c-b320-1e82b0aa876b} + Tango.CSV + {b112d89a-a106-41ae-a0c1-4abc84c477f5} Tango.DragAndDrop @@ -172,6 +189,7 @@ + diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs new file mode 100644 index 000000000..801aa0a72 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs @@ -0,0 +1,401 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Tango.BL; +using Tango.BL.Builders; +using Tango.BL.Entities; +using Tango.BL.Enumerations; +using Tango.Core.Commands; +using Tango.CSV; +using Tango.MachineStudio.Common.Notifications; +using Tango.MachineStudio.HardwareDesigner.Comparison; +using Tango.MachineStudio.HardwareDesigner.Report; +using Tango.SharedUI; + +namespace Tango.MachineStudio.HardwareDesigner.ViewModels +{ + public class ComparisonWizardViewVM : DialogViewVM + { + private INotificationProvider _notification; + #region Properties + + private ObservableCollection _hardwareVersions; + public ObservableCollection HardwareVersions + { + get { return _hardwareVersions; } + set { _hardwareVersions = value; RaisePropertyChangedAuto(); } + } + + private HardwareVersion _selectedVersion1; + public HardwareVersion SelectedVersion1 + { + get { return _selectedVersion1; } + set + { + if (value != null && (_selectedVersion1 == null || _selectedVersion1.Guid != value.Guid)) + { + _selectedVersion1 = value; + RaisePropertyChangedAuto(); + OnSelectedVersionChanged(); + } + } + } + + private HardwareVersion _selectedVersion2; + public HardwareVersion SelectedVersion2 + { + get { return _selectedVersion2; } + set + { + if (value != null && (_selectedVersion2 == null || _selectedVersion2.Guid != value.Guid)) + { + _selectedVersion2 = value; + RaisePropertyChangedAuto(); + OnSelectedVersionChanged(); + } + + } + } + + private bool _isShowDifference; + public bool IsShowDifference + { + get { return _isShowDifference; } + set + { + _isShowDifference = value; + RaisePropertyChangedAuto(); + } + } + + private HardwareCompareResult _result; + public HardwareCompareResult Result + { + get + { + return _result; + } + set + { + _result = value; + RaisePropertyChangedAuto(); + InvalidateRelayCommands(); + } + } + + private bool _isRunning; + public bool IsRunning + { + get { return _isRunning; } + set { _isRunning = value; RaisePropertyChangedAuto(); } + } + + #endregion properties + + #region Command + + public RelayCommand GenerateReportCommand { get; set; } + + #endregion + + + #region Constructors + + public ComparisonWizardViewVM(IEnumerable availableVersions, HardwareVersion selectedVersion, INotificationProvider notification) + { + HardwareVersions = new ObservableCollection(availableVersions); + _selectedVersion1 = selectedVersion; + + _isShowDifference = false; + IsRunning = false; + IsShowDifference = true; + _notification = notification; + + GenerateReportCommand = new RelayCommand(GenerateReport, () => Result != null); + } + + #endregion + + #region Report + + private void GenerateReport() + { + SaveFileDialog dlg = new SaveFileDialog(); + dlg.Title = "Save Report"; + dlg.Filter = "CSV Files|*.csv"; + dlg.FileName = $"hw_compare_report__{SelectedVersion1.Name}__vs__{SelectedVersion2.Name}"; + dlg.DefaultExt = ".csv"; + if (dlg.ShowDialog().Value) + { + try + { + CsvFile csvFile = new CsvFile(new CsvDestination(dlg.FileName), new CsvDefinition() + { + Columns = new List() + { + "Collection", + "Component", + "Property", + SelectedVersion1.Name, + SelectedVersion2.Name, + }, + }); + + foreach (var collection in Result.Collections.Where(x => x.HasDifferences || !IsShowDifference)) + { + ReportModel model_collection = new ReportModel(); + model_collection.Collection = collection.CollectionName; + csvFile.Append(model_collection); + foreach (var component in collection.Components.Where(x => x.HasDifferences || !IsShowDifference)) + { + ReportModel model_component = new ReportModel(); + + model_component.Component = component.ComponentName; + csvFile.Append(model_component); + foreach (var prop in component.Properties.Where(x => x.IsDifferent || !IsShowDifference)) + { + ReportModel model = new ReportModel(); + model.Property = prop.PropertyName; + model.HW_1 = prop.Value1; + model.HW_2 = prop.Value2; + csvFile.Append(model); + } + } + } + + csvFile.Dispose(); + _notification.ShowInfo("Report generated successfully."); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error generating HW version comparison report."); + _notification.ShowError($"Error generating HW version comparison report.\n{ex.Message}"); + } + } + } + + #endregion + + private async void OnSelectedVersionChanged() + { + if (SelectedVersion1 != null && SelectedVersion2 != null) + { + IsRunning = true; + using (ObservablesContext db = ObservablesContext.CreateDefault()) + { + var h1 = await new HardwareVersionBuilder(db).Set(SelectedVersion1.Guid).WithHardwareComponents().BuildAsync(); + var h2 = await new HardwareVersionBuilder(db).Set(SelectedVersion2.Guid).WithHardwareComponents().BuildAsync(); + + await Task.Factory.StartNew(() => + { + Result = CompareHardwareVersions(h1, h2); + IsRunning = false; + }); + } + } + } + + #region Compare Versions + + private HardwareCompareResult CompareHardwareVersions(HardwareVersion h1, HardwareVersion h2) + { + _result = new HardwareCompareResult(); + _result.Collections.Add(CompareMotorsCollection(h1, h2)); + _result.Collections.Add(CompareDancerCollection(h1, h2)); + _result.Collections.Add(ComparePidControlsCollection(h1, h2)); + _result.Collections.Add(CompareWindersCollection(h1, h2)); + _result.Collections.Add(CompareSpeedSensorsCollection(h1, h2)); + _result.Collections.Add(CompareBlowersCollection(h1, h2)); + _result.Collections.Add(CompareBreakSensorCollection(h1, h2)); + + + return _result; + } + private HardwareComponentCollectionCompareResult CompareMotorsCollection(HardwareVersion h1, HardwareVersion h2) + { + HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult() + { + CollectionName = "MOTORS" + }; + foreach (var motorTypeCode in Enum.GetValues(typeof(HardwareMotorTypes)).Cast()) + { + var motor1 = h1.HardwareMotors.SingleOrDefault(x => x.HardwareMotorType.Code == motorTypeCode.ToInt32()); + var motor2 = h2.HardwareMotors.SingleOrDefault(x => x.HardwareMotorType.Code == motorTypeCode.ToInt32()); + + var componentResult = CompareComponents( + motorTypeCode.ToDescription(), + GetComponentProperties(typeof(HardwareMotorBase)), + motor1, + motor2); + + collection.Components.Add(componentResult); + } + return collection; + } + private HardwareComponentCollectionCompareResult CompareDancerCollection(HardwareVersion h1, HardwareVersion h2) + { + HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult() + { + CollectionName = "DANCERS" + }; + foreach (var dancerTypeCode in Enum.GetValues(typeof(HardwareDancerTypes)).Cast()) + { + var motor1 = h1.HardwareDancers.SingleOrDefault(x => x.HardwareDancerType.Code == dancerTypeCode.ToInt32()); + var motor2 = h2.HardwareDancers.SingleOrDefault(x => x.HardwareDancerType.Code == dancerTypeCode.ToInt32()); + + var componentResult = CompareComponents( + dancerTypeCode.ToDescription(), + GetComponentProperties(typeof(HardwareDancerBase)), + motor1, + motor2); + + collection.Components.Add(componentResult); + } + return collection; + } + private HardwareComponentCollectionCompareResult ComparePidControlsCollection(HardwareVersion h1, HardwareVersion h2) + { + HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult() + { + CollectionName = "PID CONTROLS" + }; + foreach (var pidControlsTypeCode in Enum.GetValues(typeof(HardwarePidControlTypes)).Cast()) + { + var motor1 = h1.HardwarePidControls.SingleOrDefault(x => x.HardwarePidControlType.Code == pidControlsTypeCode.ToInt32()); + var motor2 = h2.HardwarePidControls.SingleOrDefault(x => x.HardwarePidControlType.Code == pidControlsTypeCode.ToInt32()); + + var componentResult = CompareComponents( + pidControlsTypeCode.ToDescription(), + GetComponentProperties(typeof(HardwarePidControlBase)), + motor1, + motor2); + + collection.Components.Add(componentResult); + } + return collection; + } + private HardwareComponentCollectionCompareResult CompareWindersCollection(HardwareVersion h1, HardwareVersion h2) + { + HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult() + { + CollectionName = "WINDERS" + }; + foreach (var WinderTypeCode in Enum.GetValues(typeof(HardwareWinderTypes)).Cast()) + { + var motor1 = h1.HardwareWinders.SingleOrDefault(x => x.HardwareWinderType.Code == WinderTypeCode.ToInt32()); + var motor2 = h2.HardwareWinders.SingleOrDefault(x => x.HardwareWinderType.Code == WinderTypeCode.ToInt32()); + + var componentResult = CompareComponents( + WinderTypeCode.ToDescription(), + GetComponentProperties(typeof(HardwareWinderBase)), + motor1, + motor2); + + collection.Components.Add(componentResult); + } + return collection; + } + private HardwareComponentCollectionCompareResult CompareSpeedSensorsCollection(HardwareVersion h1, HardwareVersion h2) + { + HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult() + { + CollectionName = "SPEED SENSORS" + }; + foreach (var speedSewnsorsTypeCode in Enum.GetValues(typeof(HardwareSpeedSensorTypes)).Cast()) + { + var motor1 = h1.HardwareSpeedSensors.SingleOrDefault(x => x.HardwareSpeedSensorType.Code == speedSewnsorsTypeCode.ToInt32()); + var motor2 = h2.HardwareSpeedSensors.SingleOrDefault(x => x.HardwareSpeedSensorType.Code == speedSewnsorsTypeCode.ToInt32()); + + var componentResult = CompareComponents( + speedSewnsorsTypeCode.ToDescription(), + GetComponentProperties(typeof(HardwareSpeedSensorBase)), + motor1, + motor2); + + collection.Components.Add(componentResult); + } + return collection; + } + private HardwareComponentCollectionCompareResult CompareBlowersCollection(HardwareVersion h1, HardwareVersion h2) + { + HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult() + { + CollectionName = "BLOWERS" + }; + foreach (var blowersTypeCode in Enum.GetValues(typeof(HardwareBlowerTypes)).Cast()) + { + var motor1 = h1.HardwareBlowers.SingleOrDefault(x => x.HardwareBlowerType.Code == blowersTypeCode.ToInt32()); + var motor2 = h2.HardwareBlowers.SingleOrDefault(x => x.HardwareBlowerType.Code == blowersTypeCode.ToInt32()); + + var componentResult = CompareComponents( + blowersTypeCode.ToDescription(), + GetComponentProperties(typeof(HardwareBlowerBase)), + motor1, + motor2); + + collection.Components.Add(componentResult); + } + return collection; + } + private HardwareComponentCollectionCompareResult CompareBreakSensorCollection(HardwareVersion h1, HardwareVersion h2) + { + HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult() + { + CollectionName = "BREAK SENSOR" + }; + foreach (var breakSewnsorsTypeCode in Enum.GetValues(typeof(HardwareBreakSensorTypes)).Cast()) + { + var motor1 = h1.HardwareBreakSensors.SingleOrDefault(x => x.HardwareBreakSensorType.Code == breakSewnsorsTypeCode.ToInt32()); + var motor2 = h2.HardwareBreakSensors.SingleOrDefault(x => x.HardwareBreakSensorType.Code == breakSewnsorsTypeCode.ToInt32()); + + var componentResult = CompareComponents( + breakSewnsorsTypeCode.ToDescription(), + GetComponentProperties(typeof(HardwareBreakSensorBase)), + motor1, + motor2); + + collection.Components.Add(componentResult); + } + return collection; + } + + private HardwareComponentCompareResult CompareComponents(String name, List properties, Object component1, Object component2) + { + HardwareComponentCompareResult result = new HardwareComponentCompareResult(); + result.ComponentName = name; + result.HasComponent1 = component1 != null; + result.HasComponent2 = component2 != null; + + foreach (var prop in properties) + { + var hProp = new HardwareComponentPropertyResult(); + hProp.PropertyName = prop.Name; + hProp.Value1 = component1 != null ? (prop.GetValue(component1) == null ? "" : prop.GetValue(component1).ToString()) : null; + hProp.Value2 = component2 != null ? (prop.GetValue(component2) == null ? "" : prop.GetValue(component2).ToString()) : null; + + result.Properties.Add(hProp); + } + + return result; + } + private List GetComponentProperties(Type componentType) + { + List exclude = new List() + { + "Guid", + "ID", + "LastUpdated", + "Parameters", + }; + + return componentType.GetProperties(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public).Where(x => !x.PropertyType.IsClass && !exclude.Contains(x.Name)).ToList(); + } + + #endregion + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs index 6cc8289f4..918eb02d4 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs @@ -13,6 +13,7 @@ using Tango.SharedUI.Components; using System.Runtime.CompilerServices; using Tango.MachineStudio.Common; using Tango.Core.ExtensionMethods; +using Tango.MachineStudio.HardwareDesigner.Views; namespace Tango.MachineStudio.HardwareDesigner.ViewModels { @@ -86,7 +87,7 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels return name; } } - + private ObservableCollection _hardwareVersions; public ObservableCollection HardwareVersions { @@ -104,6 +105,8 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels public RelayCommand CopyParametersCommand { get; set; } + public RelayCommand OpenComparisonWizardCommand { get; set; } + public MainViewVM(INotificationProvider notification) { _notification = notification; @@ -118,6 +121,8 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels CopyParametersCommand = new RelayCommand(CopyParameters, (x) => SelectedVersion != null && IsFree); CloneCommand = new RelayCommand(CloneCurrentVersion, () => SelectedVersion != null && IsFree); + + OpenComparisonWizardCommand = new RelayCommand(OpenComparisonWizard); } public override void OnApplicationReady() @@ -428,6 +433,12 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels } } + private void OpenComparisonWizard() + { + ComparisonWizardViewVM vm = new ComparisonWizardViewVM(HardwareVersions, SelectedVersion, _notification); + _notification.ShowModalDialog(vm, (x) => { }, () => { }); + } + protected override void RaisePropertyChangedAuto([CallerMemberName] string caller = null) { base.RaisePropertyChangedAuto(caller); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml new file mode 100644 index 000000000..af18d0003 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + v + + + + + + + + + + v + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Select two hardware versions to display a comparison report + + + + + + + + + diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml.cs new file mode 100644 index 000000000..f3cc7519a --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.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.HardwareDesigner.Views +{ + /// + /// Interaction logic for ComparisonWizardView.xaml + /// + public partial class ComparisonWizardView : UserControl + { + public ComparisonWizardView() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/MainView.xaml index 9308fce5a..86cc089e5 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/MainView.xaml @@ -64,7 +64,14 @@ + + -- cgit v1.3.1 From 50b4615b65c7c4566637993868d24c9de939c8bb Mon Sep 17 00:00:00 2001 From: Victoria Plitt Date: Tue, 3 Sep 2019 09:51:32 +0300 Subject: Hardware version comparison, change colors according to themes --- .../ViewModels/ComparisonWizardViewVM.cs | 2 ++ .../Views/ComparisonWizardView.xaml | 28 ++++++++++------------ .../Notifications/DefaultNotificationProvider.cs | 12 +++++----- .../Notifications/MessageBoxWindow.xaml | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs index 801aa0a72..628613fea 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs @@ -125,6 +125,8 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels private void GenerateReport() { + _notification.ShowError($"Error generating HW version comparison report.\n"); + SaveFileDialog dlg = new SaveFileDialog(); dlg.Title = "Save Report"; dlg.Filter = "CSV Files|*.csv"; diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml index af18d0003..d8a125e02 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/ComparisonWizardView.xaml @@ -8,21 +8,21 @@ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:local="clr-namespace:Tango.MachineStudio.HardwareDesigner.ViewModels" mc:Ignorable="d" - d:DesignHeight="800" d:DesignWidth="800" Height="700" Width="1100"> + d:DesignHeight="800" d:DesignWidth="800" Height="700" Width="1100" Foreground="{StaticResource Dialog.Foreground}" Background="{StaticResource Dialog.Background}"> @@ -40,25 +40,23 @@ - - v + v - + - v + v - @@ -79,7 +77,7 @@ - + @@ -145,7 +143,7 @@ - + @@ -176,7 +174,7 @@ - + @@ -242,7 +240,7 @@ - + @@ -307,7 +305,7 @@ - +