aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-08-03 12:16:21 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-08-03 12:16:21 +0300
commitbd1221e36ee3e493dc25bd32559f846519fe60d0 (patch)
treee4462d6672223b1fb43ee017e256e13301cec9f2 /Software/Visual_Studio
parent99cbacc067251a3841fc1aca99e029146ed11c15 (diff)
downloadTango-bd1221e36ee3e493dc25bd32559f846519fe60d0.tar.gz
Tango-bd1221e36ee3e493dc25bd32559f846519fe60d0.zip
Refactored RemoteSQL on procedures.
Fixed issue with generic types display on code editor. Added line wrap toggle to procedure designer output.
Diffstat (limited to 'Software/Visual_Studio')
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/ViewModels/ProcedureDesignerViewVM.cs10
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/Views/ProcedureDesignerView.xaml22
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/SQL/RemoteSqlCommandResult.cs9
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/SQL/DefaultRemoteSqlProvider.cs27
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/SQL/DefaultRemoteSqlService.cs23
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/ExecuteSqlResponse.cs4
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlColumn.cs24
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlColumnCollection.cs47
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlDataSet.cs153
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlRow.cs98
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Shared/Tango.PPC.Shared.csproj5
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ExtensionMethods.cs2
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs18
13 files changed, 377 insertions, 65 deletions
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/ViewModels/ProcedureDesignerViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/ViewModels/ProcedureDesignerViewVM.cs
index 84f677087..68c8538b8 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/ViewModels/ProcedureDesignerViewVM.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/ViewModels/ProcedureDesignerViewVM.cs
@@ -266,13 +266,7 @@ namespace Tango.FSE.Procedures.ViewModels
ScriptEditor.LoadingSymbolsCompleted += ScriptEditor_LoadingSymbolsCompleted;
ScriptEditor.UsingsLoadingStarted += ScriptEditor_UsingsLoadingStarted;
ScriptEditor.UsingsLoadingCompleted += ScriptEditor_UsingsLoadingCompleted;
- ScriptEditor.BlockedUsingsCache.Add("Tango.FSE.Procedures");
- ScriptEditor.BlockedUsingsCache.Add("Tango.PMR.Stubs");
- ScriptEditor.BlockedUsingsCache.Add("Tango.BL.Entities");
- ScriptEditor.BlockedUsingsCache.Add("Tango.BL.Enumerations");
- ScriptEditor.BlockedUsingsCache.Add("Tango.PMR.Diagnostics");
- ScriptEditor.BlockedUsingsCache.Add("Tango.FSE.Common.Connection");
- ScriptEditor.BlockedUsingsCache.Add("Tango.FSE.Common.Diagnostics");
+ ScriptEditor.BlockedUsingsCache.Add("Tango");
OpenScripts = new ObservableCollection<Script>();
OpenScriptCommand = new RelayCommand<Script>(OpenScript);
@@ -446,7 +440,7 @@ namespace Tango.FSE.Procedures.ViewModels
{
SymbolsLoadingProgress = e.Progress;
- _symbolsTaskItem?.UpdateProgress(e.Progress.Message, e.Progress.Value, e.Progress.Maximum);
+ _symbolsTaskItem?.UpdateProgress(e.Progress.Message, e.Progress.Value, e.Progress.Maximum, e.Progress.IsIndeterminate);
}
private void ScriptEditor_UsingsLoadingStarted(object sender, EventArgs e)
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/Views/ProcedureDesignerView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/Views/ProcedureDesignerView.xaml
index 214dc66ee..e122a1eca 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/Views/ProcedureDesignerView.xaml
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures/Views/ProcedureDesignerView.xaml
@@ -505,11 +505,29 @@
<DockPanel>
<Grid DockPanel.Dock="Top" Height="28" Background="{StaticResource FSE_PrimaryBackgroundBrush}">
<TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontFamily="{StaticResource hand}">Output</TextBlock>
- <controls:IconButton Command="{Binding ClearOutputCommand}" Height="32" Cursor="Hand" ToolTip="Clear" Width="32" Icon="DeleteEmpty" Foreground="{StaticResource FSE_GrayBrush}" HorizontalAlignment="Right" VerticalAlignment="Center" />
+ <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
+ <ToggleButton x:Name="chkWrap" IsChecked="True" VerticalAlignment="Center" Style="{StaticResource MaterialDesignFlatPrimaryToggleButton}" Cursor="Hand" Foreground="{StaticResource FSE_GrayBrush}" ToolTip="Line Wrap" FocusVisualStyle="{x:Null}" Width="22" Height="22">
+ <material:PackIcon Kind="Wrap" />
+ </ToggleButton>
+ <controls:IconButton Margin="5 0 0 0" Command="{Binding ClearOutputCommand}" Height="32" Cursor="Hand" ToolTip="Clear" Width="32" Icon="DeleteEmpty" Foreground="{StaticResource FSE_GrayBrush}" VerticalAlignment="Center" />
+ </StackPanel>
<Rectangle VerticalAlignment="Bottom" Stroke="Black" StrokeThickness="2" />
</Grid>
- <TextBox HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" Padding="5" Style="{x:Null}" Foreground="{StaticResource FSE_PrimaryForegroundBrush}" FontFamily="Consolas" components:TextController.Controller="{Binding Logger}" FontSize="{StaticResource FSE_SmallFontSize}" Background="{StaticResource FSE_PrimaryBackgroundDarkBrush}" BorderThickness="0" AcceptsReturn="True" IsReadOnly="True" TextWrapping="Wrap" />
+ <TextBox VerticalScrollBarVisibility="Auto" Padding="5" Foreground="{StaticResource FSE_PrimaryForegroundBrush}" FontFamily="Consolas" components:TextController.Controller="{Binding Logger}" FontSize="{StaticResource FSE_SmallFontSize}" Background="{StaticResource FSE_PrimaryBackgroundDarkBrush}" BorderThickness="0" AcceptsReturn="True" IsReadOnly="True">
+ <TextBox.Style>
+ <Style TargetType="TextBox">
+ <Setter Property="TextWrapping" Value="Wrap"></Setter>
+ <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding ElementName=chkWrap,Path=IsChecked}" Value="False">
+ <Setter Property="TextWrapping" Value="NoWrap"></Setter>
+ <Setter Property="HorizontalScrollBarVisibility" Value="Auto"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </TextBox.Style>
+ </TextBox>
</DockPanel>
</TabItem>
<TabItem>
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/SQL/RemoteSqlCommandResult.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/SQL/RemoteSqlCommandResult.cs
index b4714c1aa..34ab74a68 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.Common/SQL/RemoteSqlCommandResult.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/SQL/RemoteSqlCommandResult.cs
@@ -3,25 +3,26 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Tango.PPC.Shared.SQL;
namespace Tango.FSE.Common.SQL
{
public class RemoteSqlCommandResult
{
public int LocalAffectedRecords { get; set; }
- public List<Dictionary<String, Object>> LocalRows { get; set; }
+ public RemoteSqlDataSet LocalDatSet { get; set; }
public bool HasLocalError { get; set; }
public String LocalError { get; set; }
public int GlobalAffectedRecords { get; set; }
- public List<Dictionary<String, Object>> GlobalRows { get; set; }
+ public RemoteSqlDataSet GLobalDataSet { get; set; }
public bool HasGlobalError { get; set; }
public String GlobalError { get; set; }
public RemoteSqlCommandResult()
{
- LocalRows = new List<Dictionary<string, object>>();
- GlobalRows = new List<Dictionary<string, object>>();
+ LocalDatSet = new RemoteSqlDataSet();
+ GLobalDataSet = new RemoteSqlDataSet();
}
}
}
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/SQL/DefaultRemoteSqlProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/SQL/DefaultRemoteSqlProvider.cs
index 19750094e..7477dc7f4 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/SQL/DefaultRemoteSqlProvider.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/SQL/DefaultRemoteSqlProvider.cs
@@ -119,14 +119,13 @@ namespace Tango.FSE.UI.SQL
}, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(command.Timeout) });
result.LocalAffectedRecords = response.AffectedRecords;
- result.LocalRows = response.Rows.ToList();
+ result.LocalDatSet = response.DataSet;
}
catch (Exception ex)
{
LogManager.Log(ex, "Remote SQL command local execution failed.");
result.HasLocalError = true;
result.LocalError = ex.FlattenMessage();
- return result;
}
}
@@ -140,31 +139,15 @@ namespace Tango.FSE.UI.SQL
{
using (SqlConnection connection = new SqlConnection(db.Database.Connection.ConnectionString))
{
+ connection.AccessToken = ObservablesContext.GetActualDataSource().AccessToken;
+ connection.Open();
+
SqlCommand cmd = new SqlCommand(command.SQL, connection);
cmd.CommandTimeout = command.Timeout;
- connection.Open();
SqlDataReader reader = await cmd.ExecuteReaderAsync();
result.GlobalAffectedRecords = reader.RecordsAffected;
-
- try
- {
- while (reader.Read())
- {
- Dictionary<String, Object> row = new Dictionary<string, object>();
-
- for (int i = 0; i < reader.FieldCount; i++)
- {
- row[reader.GetName(i)] = reader.GetValue(i);
- }
-
- result.GlobalRows.Add(row);
- }
- }
- finally
- {
- reader.Close();
- }
+ result.GLobalDataSet = await RemoteSqlDataSet.Load(reader);
}
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/SQL/DefaultRemoteSqlService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/SQL/DefaultRemoteSqlService.cs
index 986c4d062..e5ac43d3f 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/SQL/DefaultRemoteSqlService.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/SQL/DefaultRemoteSqlService.cs
@@ -27,7 +27,7 @@ namespace Tango.PPC.Common.SQL
{
this.ThrowIfDisabled();
- List<Dictionary<String, Object>> rows = new List<Dictionary<string, object>>();
+ RemoteSqlDataSet dataSet = new RemoteSqlDataSet();
int affected = 0;
using (ObservablesContext db = ObservablesContext.CreateDefault())
@@ -40,30 +40,13 @@ namespace Tango.PPC.Common.SQL
SqlDataReader reader = command.ExecuteReader();
affected = reader.RecordsAffected;
- try
- {
- while (reader.Read())
- {
- Dictionary<String, Object> row = new Dictionary<string, object>();
-
- for (int i = 0; i < reader.FieldCount; i++)
- {
- row[reader.GetName(i)] = reader.GetValue(i);
- }
-
- rows.Add(row);
- }
- }
- finally
- {
- reader.Close();
- }
+ dataSet = await RemoteSqlDataSet.Load(reader);
}
}
await receiver.SendGenericResponse(new ExecuteSqlResponse()
{
- Rows = rows,
+ DataSet = dataSet,
AffectedRecords = affected
}, token);
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/ExecuteSqlResponse.cs b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/ExecuteSqlResponse.cs
index 4166d8f82..2db90a336 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/ExecuteSqlResponse.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/ExecuteSqlResponse.cs
@@ -9,11 +9,11 @@ namespace Tango.PPC.Shared.SQL
public class ExecuteSqlResponse
{
public int AffectedRecords { get; set; }
- public List<Dictionary<String,Object>> Rows { get; set; }
+ public RemoteSqlDataSet DataSet { get; set; }
public ExecuteSqlResponse()
{
- Rows = new List<Dictionary<string, object>>();
+ DataSet = new RemoteSqlDataSet();
}
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlColumn.cs b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlColumn.cs
new file mode 100644
index 000000000..328dbb492
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlColumn.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.PPC.Shared.SQL
+{
+ public class RemoteSqlColumn
+ {
+ public String Name { get; set; }
+ public int Index { get; set; }
+
+ public RemoteSqlColumn()
+ {
+
+ }
+
+ public RemoteSqlColumn(String name)
+ {
+ Name = name;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlColumnCollection.cs b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlColumnCollection.cs
new file mode 100644
index 000000000..5358e047b
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlColumnCollection.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.PPC.Shared.SQL
+{
+ public class RemoteSqlColumnCollection : Collection<RemoteSqlColumn>
+ {
+ private Dictionary<String, RemoteSqlColumn> _dictionary;
+
+ public RemoteSqlColumnCollection()
+ {
+ _dictionary = new Dictionary<string, RemoteSqlColumn>();
+ }
+
+ protected override void InsertItem(int index, RemoteSqlColumn item)
+ {
+ item.Index = Count;
+ _dictionary.Add(item.Name, item);
+ base.InsertItem(index, item);
+ }
+
+ protected override void RemoveItem(int index)
+ {
+ throw new NotSupportedException();
+ }
+
+ protected override void ClearItems()
+ {
+ _dictionary.Clear();
+ base.ClearItems();
+ }
+
+ protected override void SetItem(int index, RemoteSqlColumn item)
+ {
+ throw new NotSupportedException();
+ }
+
+ public int GetIndexOf(String columnName)
+ {
+ return _dictionary[columnName].Index;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlDataSet.cs b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlDataSet.cs
new file mode 100644
index 000000000..089908e5a
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlDataSet.cs
@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.PPC.Shared.SQL
+{
+ public class RemoteSqlDataSet
+ {
+ public RemoteSqlColumnCollection Columns { get; set; }
+
+ private ObservableCollection<RemoteSqlRow> _rows;
+ public ObservableCollection<RemoteSqlRow> Rows
+ {
+ get { return _rows; }
+ set { _rows = value; OnRowsChanged(); }
+ }
+
+ public RemoteSqlDataSet()
+ {
+ Columns = new RemoteSqlColumnCollection();
+ Rows = new ObservableCollection<RemoteSqlRow>();
+ }
+
+ private void OnRowsChanged()
+ {
+ if (Rows != null)
+ {
+ Rows.CollectionChanged -= Rows_CollectionChanged;
+ Rows.CollectionChanged += Rows_CollectionChanged;
+
+ InitRows();
+ }
+ }
+
+ private void Rows_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
+ {
+ InitRows();
+ }
+
+ private void InitRows()
+ {
+ if (Rows != null)
+ {
+ foreach (var row in Rows.ToList())
+ {
+ row.Init(
+ (key) =>
+ {
+ return row.Values[Columns.GetIndexOf(key)];
+ },
+ (index) =>
+ {
+ return row.Values[index];
+ });
+ }
+ }
+ }
+
+ public static Task<RemoteSqlDataSet> Load(SqlDataReader reader)
+ {
+ return Task.Factory.StartNew<RemoteSqlDataSet>(() =>
+ {
+ bool columnsRead = false;
+ RemoteSqlDataSet dataSet = new RemoteSqlDataSet();
+
+ try
+ {
+ while (reader.Read())
+ {
+ RemoteSqlRow row = new RemoteSqlRow();
+
+ for (int i = 0; i < reader.FieldCount; i++)
+ {
+ if (!columnsRead)
+ {
+ dataSet.Columns.Add(new RemoteSqlColumn()
+ {
+ Name = reader.GetName(i)
+ });
+ }
+
+ row.Values.Add(reader.GetValue(i));
+ }
+
+ columnsRead = true;
+ dataSet.Rows.Add(row);
+ }
+ }
+ finally
+ {
+ reader.Close();
+ }
+
+ return dataSet;
+ });
+ }
+
+ public override string ToString()
+ {
+ return String.Join(", ", Columns.Select(x => x.Name)) + "\n" + String.Join(Environment.NewLine, Rows.Select(x => x.ToString()));
+ }
+
+ public String ToTableString()
+ {
+ Dictionary<int, int> columnsMaxLength = new Dictionary<int, int>();
+
+ for (int i = 0; i < Columns.Count; i++)
+ {
+ columnsMaxLength.Add(i, Columns[i].Name.Length);
+ }
+
+ foreach (var row in Rows)
+ {
+ for (int i = 0; i < row.Values.Count; i++)
+ {
+ int valueLength = row.Values[i].ToStringSafe().Length;
+
+ if (valueLength > columnsMaxLength[i])
+ {
+ columnsMaxLength[i] = valueLength;
+ }
+ }
+ }
+
+ String str = String.Empty;
+
+ for (int i = 0; i < Columns.Count; i++)
+ {
+ str += $"{Columns[i].Name.PadRight(columnsMaxLength[i])}{(i < Columns.Count - 1 ? " | " : "")}";
+ }
+
+ int width = str.Length;
+ str += Environment.NewLine + String.Empty.PadRight(width, '-');
+
+ foreach (var row in Rows)
+ {
+ str += Environment.NewLine;
+
+ for (int i = 0; i < row.Values.Count; i++)
+ {
+ str += $"{row.Values[i].ToStringSafe().PadRight(columnsMaxLength[i])}{(i < Columns.Count - 1 ? " | " : "")}";
+ }
+ }
+
+ return str;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlRow.cs b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlRow.cs
new file mode 100644
index 000000000..bf6b0ba0c
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Shared/SQL/RemoteSqlRow.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Diagnostics;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.BL.Entities;
+
+namespace Tango.PPC.Shared.SQL
+{
+ public class RemoteSqlRow
+ {
+ private Func<String, Object> _getFuncKey;
+ private Func<int, Object> _getFuncIndex;
+
+ public List<Object> Values { get; set; }
+
+ public RemoteSqlRow()
+ {
+ Values = new List<object>();
+ }
+
+ public Object Get(String columnName)
+ {
+ return _getFuncKey.Invoke(columnName);
+ }
+
+ public Object Get(int columnIndex)
+ {
+ return _getFuncIndex.Invoke(columnIndex);
+ }
+
+ public T Get<T>(String columnName)
+ {
+ var value = _getFuncKey.Invoke(columnName);
+
+ if (typeof(T) != value.GetType())
+ {
+ return (T)Convert.ChangeType(value, typeof(T));
+ }
+ else
+ {
+ return (T)value;
+ }
+ }
+
+ public T Get<T>(int columnIndex)
+ {
+ var value = _getFuncIndex.Invoke(columnIndex);
+
+ if (typeof(T) != value.GetType())
+ {
+ return (T)Convert.ChangeType(value, typeof(T));
+ }
+ else
+ {
+ return (T)value;
+ }
+ }
+
+ internal void Init(Func<String, Object> getFuncKey, Func<int, Object> getFuncIndex)
+ {
+ _getFuncKey = getFuncKey;
+ _getFuncIndex = getFuncIndex;
+ }
+
+ public override string ToString()
+ {
+ return String.Join(", ", Values);
+ }
+
+ public T Map<T>() where T : class, new()
+ {
+ var obj = Activator.CreateInstance<T>();
+ Map<T>(obj);
+ return obj;
+ }
+
+ public void Map<T>(T obj) where T : class
+ {
+ foreach (var prop in typeof(T).GetPropertiesWithAttribute<ColumnAttribute>())
+ {
+ try
+ {
+ var columnName = prop.GetCustomAttribute<ColumnAttribute>().Name;
+ var value = Get(columnName).ToStringSafe();
+ prop.SetValue(obj, Convert.ChangeType(value, prop.PropertyType));
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine(ex);
+ }
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Shared/Tango.PPC.Shared.csproj b/Software/Visual_Studio/PPC/Tango.PPC.Shared/Tango.PPC.Shared.csproj
index c93aef159..10993399c 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Shared/Tango.PPC.Shared.csproj
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Shared/Tango.PPC.Shared.csproj
@@ -33,6 +33,7 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
@@ -90,6 +91,10 @@
<Compile Include="RemoteUpgrade\StartRemoteApplicationUpgradeRequest.cs" />
<Compile Include="SQL\ExecuteSqlRequest.cs" />
<Compile Include="SQL\ExecuteSqlResponse.cs" />
+ <Compile Include="SQL\RemoteSqlColumn.cs" />
+ <Compile Include="SQL\RemoteSqlColumnCollection.cs" />
+ <Compile Include="SQL\RemoteSqlDataSet.cs" />
+ <Compile Include="SQL\RemoteSqlRow.cs" />
<Compile Include="Updates\GetUpdatesAndPackagesRequest.cs" />
<Compile Include="Updates\GetUpdatesAndPackagesResponse.cs" />
<Compile Include="Updates\PackageInstallation.cs" />
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ExtensionMethods.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ExtensionMethods.cs
index 1605ff281..d112c6141 100644
--- a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ExtensionMethods.cs
+++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ExtensionMethods.cs
@@ -22,7 +22,7 @@ namespace Tango.Scripting.Editors
{
List<String> args = new List<string>();
- foreach (var lGenericArgument in type.GetGenericTypeDefinition().GetGenericArguments())
+ foreach (var lGenericArgument in type.GetGenericArguments())
{
args.Add(lGenericArgument.Name);
}
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs
index 3c27118e2..0e32af6ed 100644
--- a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs
+++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs
@@ -260,6 +260,12 @@ namespace Tango.Scripting.Editors
}"
});
+
+ snippets.Add(new SnippetCompletionItem()
+ {
+ Name = "cw",
+ Code = "context.WriteLine(\"\");"
+ });
}
/// <summary>
@@ -1493,7 +1499,7 @@ namespace Tango.Scripting.Editors
knownType.LoadDocumentation();
}
- if (!BlockedUsingsCache.Exists(x => x == use))
+ if (!BlockedUsingsCache.Exists(x => use.StartsWith(x)))
{
Task.Factory.StartNew(() =>
{
@@ -1501,14 +1507,14 @@ namespace Tango.Scripting.Editors
File.WriteAllText(useFileName, json);
});
}
-
- if (_isUsingsLoadingStarted)
- {
- UsingsLoadingCompleted?.Invoke(this, new EventArgs());
- }
}
}
+ if (_isUsingsLoadingStarted)
+ {
+ UsingsLoadingCompleted?.Invoke(this, new EventArgs());
+ }
+
LoadingSymbolsCompleted?.Invoke(null, new EventArgs());
}
}