aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-04-22 13:28:13 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-04-22 13:28:13 +0300
commit5ed5ef7ef65731a9e509cb7a707722458da206d1 (patch)
treec5bbe5086113a629c7a7c365698a95c971904c9b /Software/Visual_Studio/Scripting
parent34d7201f46c07a6311fcaa9df329ec22c5ebdb49 (diff)
downloadTango-5ed5ef7ef65731a9e509cb7a707722458da206d1.tar.gz
Tango-5ed5ef7ef65731a9e509cb7a707722458da206d1.zip
Working on FSE scripting.
Fixed issue with gradient generation using the color converter RGB only entry point for RGB and LAB brush stops.
Diffstat (limited to 'Software/Visual_Studio/Scripting')
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs40
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs54
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs24
3 files changed, 92 insertions, 26 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs
index 14a9d94da..446e5b529 100644
--- a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs
+++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs
@@ -15,6 +15,7 @@ using Tango.Core;
using Tango.Core.IO;
using Tango.Scripting.Core;
using System.IO;
+using Tango.Core.Helpers;
namespace Tango.Scripting.Basic
{
@@ -38,9 +39,6 @@ namespace Tango.Scripting.Basic
public ObservableCollection<ReferenceAssembly> ReferenceAssemblies { get; set; }
- [JsonIgnore]
- public ObservableCollection<Assembly> ReferenceAssembliesLoaded { get; set; }
-
public ObservableCollection<Script> Scripts { get; set; }
[JsonIgnore]
@@ -57,38 +55,20 @@ namespace Tango.Scripting.Basic
ApartmentState = ApartmentState.MTA;
ReferenceAssemblies = new ObservableCollection<ReferenceAssembly>();
- ReferenceAssemblies.CollectionChanged += ReferenceAssemblies_CollectionChanged;
- ReferenceAssembliesLoaded = new ObservableCollection<Assembly>();
Scripts = new ObservableCollection<Script>();
Scripts.CollectionChanged += (x, e) => { RaisePropertyChanged(nameof(AdditionalScripts)); };
}
- private void ReferenceAssemblies_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
- {
- LoadReferenceAssemblies();
- }
-
- private void LoadReferenceAssemblies()
- {
- ReferenceAssembliesLoaded.Clear();
-
- foreach (var asm in ReferenceAssemblies)
- {
- ReferenceAssembliesLoaded.Add(Assembly.LoadFrom(asm.File));
- }
- }
-
- public static Project<T> New(String name)
+ public static TProject New<TProject, TContext>(String name) where TProject : Project<TContext> where TContext : IContext
{
- Project<T> p = new Project<T>();
+ TProject p = Activator.CreateInstance<TProject>();
p.Name = name;
p.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(String)));
p.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(Enumerable)));
p.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(Form)));
- p.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(Project<T>)));
return p;
}
@@ -146,7 +126,7 @@ namespace Tango.Scripting.Basic
}
}
- var scriptOptions = ScriptOptions.Default.WithReferences(ReferenceAssembliesLoaded);
+ var scriptOptions = ScriptOptions.Default.WithReferences(LoadReferenceAssemblies());
var s = CSharpScript.Create<object>(mainScriptCode, scriptOptions, typeof(GlobalObject<T>));
result.Script = s;
@@ -215,5 +195,17 @@ namespace Tango.Scripting.Basic
return session;
}
+
+ public List<Assembly> LoadReferenceAssemblies()
+ {
+ List<Assembly> loadedAssemblies = new List<Assembly>();
+
+ foreach (var asm in ReferenceAssemblies)
+ {
+ loadedAssemblies.Add(asm.Load());
+ }
+
+ return loadedAssemblies;
+ }
}
}
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs
index 4b04270c1..665bd7ab1 100644
--- a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs
+++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs
@@ -3,15 +3,26 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Reflection;
using System.Text;
using System.Threading.Tasks;
+using Tango.Core.Helpers;
namespace Tango.Scripting.Basic
{
public class ReferenceAssembly
{
+ private static Dictionary<String, Assembly> _assembliesCache;
+
+ static ReferenceAssembly()
+ {
+ _assembliesCache = new Dictionary<string, Assembly>();
+ }
+
public String File { get; set; }
+ public Type HintType { get; set; }
+
[JsonIgnore]
public String Name
{
@@ -21,6 +32,7 @@ namespace Tango.Scripting.Basic
public static ReferenceAssembly FromType(Type type)
{
ReferenceAssembly reference = new ReferenceAssembly();
+ reference.HintType = type;
var assembly = type.Assembly;
reference.File = assembly.Location;
return reference;
@@ -30,5 +42,47 @@ namespace Tango.Scripting.Basic
{
return new ReferenceAssembly() { File = file };
}
+
+ public Assembly Load()
+ {
+ Assembly loaded = null;
+ if (!_assembliesCache.TryGetValue(Name, out loaded))
+ {
+ try
+ {
+ if (HintType != null)
+ {
+ loaded = HintType.Assembly;
+ }
+ else
+ {
+ loaded = Assembly.LoadFrom(File);
+ }
+
+ _assembliesCache.Add(Name, loaded);
+ }
+ catch
+ {
+ try
+ {
+ String dotNetPath = AssemblyHelper.GetAssemblyTargetFrameworkFolder(Assembly.GetExecutingAssembly());
+ String dotNetAsm = Path.Combine(dotNetPath, Name + ".dll");
+ loaded = Assembly.LoadFrom(dotNetAsm);
+ _assembliesCache.Add(Name, loaded);
+ }
+ catch (Exception ex)
+ {
+ throw new FileNotFoundException($"Could not load assembly '{Name}'. File not found.", ex);
+ }
+ }
+ }
+
+ return loaded;
+ }
+
+ public override string ToString()
+ {
+ return Name;
+ }
}
}
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs
index 29af14ddc..d1ea9de43 100644
--- a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs
+++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs
@@ -133,7 +133,7 @@ namespace Tango.Scripting.Editors
set { SetValue(ReferenceAssembliesProperty, value); }
}
public static readonly DependencyProperty ReferenceAssembliesProperty =
- DependencyProperty.Register("ReferenceAssemblies", typeof(ObservableCollection<Assembly>), typeof(ScriptEditor), new PropertyMetadata(null));
+ DependencyProperty.Register("ReferenceAssemblies", typeof(ObservableCollection<Assembly>), typeof(ScriptEditor), new PropertyMetadata(null, (d, e) => (d as ScriptEditor).OnReferenceAssembliesChanged()));
public Object CurrentPopupContent
{
@@ -1520,7 +1520,7 @@ namespace Tango.Scripting.Editors
foreach (var knownType in _knownTypesCache.ToList().Select(x => x.Value).ToList())
{
- if (usings.Exists(x => knownType.Type.Namespace == x))
+ if (usings.Exists(x => knownType.Type.Namespace == x) && assemblies.Exists(x => x == knownType.Type.Assembly))
{
lock (_knownTypes)
{
@@ -2080,5 +2080,25 @@ namespace Tango.Scripting.Editors
}
#endregion
+
+ #region Reference Assemblies Changed
+
+ private void OnReferenceAssembliesChanged()
+ {
+ if (ReferenceAssemblies != null)
+ {
+ ReferenceAssemblies.CollectionChanged -= ReferenceAssemblies_CollectionChanged;
+ ReferenceAssemblies.CollectionChanged += ReferenceAssemblies_CollectionChanged;
+
+ InvalidateHighlighting();
+ }
+ }
+
+ private void ReferenceAssemblies_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
+ {
+ InvalidateHighlighting();
+ }
+
+ #endregion
}
}