From 4ea7ed27293434587f5b2adb2bf400d9fa602afb Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Mon, 27 Apr 2020 17:17:06 +0300 Subject: TestDesigner/Runner array result! --- .../Tango.FSE.Stubs/Contracts/ITestDesignerView.cs | 1 + .../Tango.FSE.Stubs/Dialogs/ResultGridView.xaml | 31 +++++ .../Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs | 130 +++++++++++++++++++++ .../Tango.FSE.Stubs/Dialogs/ResultGridViewVM.cs | 31 +++++ .../FSE/Modules/Tango.FSE.Stubs/Result.cs | 2 +- .../Modules/Tango.FSE.Stubs/Tango.FSE.Stubs.csproj | 8 ++ .../ViewModels/TestDesignerViewVM.cs | 17 +++ .../Tango.FSE.Stubs/ViewModels/TestRunnerViewVM.cs | 26 ++++- .../Tango.FSE.Stubs/Views/TestDesignerView.xaml | 18 ++- .../Tango.FSE.Stubs/Views/TestDesignerView.xaml.cs | 11 ++ .../Views/TestRunnerExecutionView.xaml | 14 ++- .../FSE/Tango.FSE.Common/FSEDialogViewVM.cs | 13 +++ .../FSE/Tango.FSE.UI/Views/MainView.xaml | 70 +++++------ .../Tango.Scripting.Editors/ScriptEditor.cs | 2 +- 14 files changed, 335 insertions(+), 39 deletions(-) create mode 100644 Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml create mode 100644 Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs create mode 100644 Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridViewVM.cs (limited to 'Software') diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Contracts/ITestDesignerView.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Contracts/ITestDesignerView.cs index 97cf9a433..04287e765 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Contracts/ITestDesignerView.cs +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Contracts/ITestDesignerView.cs @@ -12,5 +12,6 @@ namespace Tango.FSE.Stubs.Contracts void FormatCode(); void HighlightCode(int position, int length); void InsertCode(String code); + void InvalidateHighlighting(); } } diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml new file mode 100644 index 000000000..0e7a1185b --- /dev/null +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs new file mode 100644 index 000000000..ab908f94f --- /dev/null +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +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.FSE.Stubs.Dialogs +{ + /// + /// Interaction logic for ResultGridView.xaml + /// + public partial class ResultGridView : UserControl + { + public class ResultObject + { + public Object V0 { get; set; } + public Object V1 { get; set; } + public Object V2 { get; set; } + public Object V3 { get; set; } + public Object V4 { get; set; } + public Object V5 { get; set; } + public Object V6 { get; set; } + public Object V7 { get; set; } + public Object V8 { get; set; } + public Object V9 { get; set; } + public Object V10 { get; set; } + public Object V11 { get; set; } + public Object V12 { get; set; } + public Object V13 { get; set; } + public Object V14 { get; set; } + } + + public ResultGridView() + { + InitializeComponent(); + + Loaded += ResultGridView_Loaded; + } + + private void ResultGridView_Loaded(object sender, RoutedEventArgs e) + { + var vm = DataContext as ResultGridViewVM; + var results = vm.Items; + + List objects = new List(); + + if (results.Count > 0) + { + var model = results.First(); + + if (model.GetType().IsValueTypeOrString()) + { + grid.Columns.Add(new DataGridTextColumn() + { + Header = "Values", + Binding = new Binding("V0"), + }); + + foreach (var item in results) + { + objects.Add(new ResultObject() + { + V0 = item, + }); + } + } + else + { + int columnCount = 0; + + //Generate columns + foreach (var prop in model.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) + { + grid.Columns.Add(new DataGridTextColumn() + { + Header = prop.Name, + Binding = new Binding($"V{columnCount++}"), + }); + } + + foreach (var field in model.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance)) + { + grid.Columns.Add(new DataGridTextColumn() + { + Header = field.Name, + Binding = new Binding($"V{columnCount++}"), + }); + } + + //Generate cells + + foreach (var item in results) + { + ResultObject obj = new ResultObject(); + + var properties = model.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList(); + var fields = model.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance).ToList(); + + int propCount = 0; + + for (int i = 0; i < properties.Count; i++) + { + typeof(ResultObject).GetProperty($"V{i}").SetValue(obj, properties[i].GetValue(item)); + propCount++; + } + + for (int i = 0; i < fields.Count; i++) + { + typeof(ResultObject).GetProperty($"V{i + propCount}").SetValue(obj, fields[i].GetValue(item)); + } + + objects.Add(obj); + } + } + } + + grid.ItemsSource = objects; + } + } +} diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridViewVM.cs new file mode 100644 index 000000000..b6e45c208 --- /dev/null +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridViewVM.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.FSE.Common; + +namespace Tango.FSE.Stubs.Dialogs +{ + public class ResultGridViewVM : FSEDialogViewVM + { + public Result Result { get; set; } + + public List Items { get; set; } + + public ResultGridViewVM(Result result) : base() + { + CanCancel = false; + OKText = "CLOSE"; + + Result = result; + Items = new List(); + + foreach (var item in Result.Value as IEnumerable) + { + Items.Add(item); + } + } + } +} diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Result.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Result.cs index 813f31532..b75bf3c42 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Result.cs +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Result.cs @@ -14,7 +14,7 @@ namespace Tango.FSE.Stubs public String Name { get; set; } public Object Value { get; set; } - internal bool IsValueArray + public bool IsValueArray { get { return Value != null && typeof(IEnumerable).IsAssignableFrom(Value.GetType()) && Value.GetType() != typeof(String); } } diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Tango.FSE.Stubs.csproj b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Tango.FSE.Stubs.csproj index 67bd5dfc8..61dedf949 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Tango.FSE.Stubs.csproj +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Tango.FSE.Stubs.csproj @@ -110,6 +110,10 @@ LoadPublishedProjectView.xaml + + ResultGridView.xaml + + UserInputDialogView.xaml @@ -247,6 +251,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/TestDesignerViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/TestDesignerViewVM.cs index cc5cdfdc7..7c0b0e01f 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/TestDesignerViewVM.cs +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/TestDesignerViewVM.cs @@ -179,6 +179,7 @@ namespace Tango.FSE.Stubs.ViewModels public RelayCommand TogglePublishPanelCommand { get; set; } public RelayCommand