public EffectParameterSetup(IEffectModuleDescriptor descriptor, IEffectModuleInstance effect)
        {
            InitializeComponent();

            _descriptor = descriptor;

            IEffectEditorControl[] controls = ApplicationServices.GetEffectEditorControls(descriptor.TypeId).ToArray();
            for(int i=0; i<descriptor.Parameters.Count; i++) {
                IEffectEditorControl effectEditorControl = controls[i];
                Control control = effectEditorControl as Control;
                effectEditorControl.TargetEffect = effect;
                control.Dock = DockStyle.Top;
                tableLayoutPanel.Controls.Add(new Label { Text = descriptor.Parameters[i].Name });
                tableLayoutPanel.Controls.Add(control);
            }

            object[] effectParameters = (effect != null) ? effect.ParameterValues : new object[_descriptor.Parameters.Count];
            if(controls.Length == 1) {
                // One control for all parameters.
                controls[0].EffectParameterValues = effectParameters;
            } else {
                // One control per parameter.
                for(int i = 0; i < descriptor.Parameters.Count; i++) {
                    controls[i].EffectParameterValues = new[] { effectParameters[i] };
                }
            }
        }
        public EffectParameterSetup(IEffectModuleDescriptor descriptor, IEffectModuleInstance effect)
        {
            InitializeComponent();
            Icon = Resources.Properties.Resources.Icon_Vixen3;

            _descriptor = descriptor;

            IEffectEditorControl[] controls = ApplicationServices.GetEffectEditorControls(descriptor.TypeId).ToArray();
            for (int i = 0; i < descriptor.Parameters.Count; i++)
            {
                IEffectEditorControl effectEditorControl = controls[i];
                Control control = effectEditorControl as Control;
                effectEditorControl.TargetEffect = effect;
                control.Dock = DockStyle.Top;
                tableLayoutPanel.Controls.Add(new Label {
                    Text = descriptor.Parameters[i].Name
                });
                tableLayoutPanel.Controls.Add(control);
            }

            object[] effectParameters = (effect != null) ? effect.ParameterValues : new object[_descriptor.Parameters.Count];
            if (controls.Length == 1)
            {
                // One control for all parameters.
                controls[0].EffectParameterValues = effectParameters;
            }
            else
            {
                // One control per parameter.
                for (int i = 0; i < descriptor.Parameters.Count; i++)
                {
                    controls[i].EffectParameterValues = new[] { effectParameters[i] };
                }
            }
        }
        private IEnumerable <IEffectEditorControl> _GetEditorBySignature(IEffectModuleDescriptor descriptor)
        {
            EffectEditorModuleRepository repository = Modules.GetRepository <IEffectEditorModuleInstance, EffectEditorModuleRepository>();
            IEffectEditorModuleInstance  instance   = repository.Get(descriptor.Parameters.Select(x => x.Type));

            return((instance != null) ? instance.CreateEditorControl().AsEnumerable() : null);
        }
Beispiel #4
0
        public override void Remove(Guid id)
        {
            IEffectModuleDescriptor descriptor = Modules.GetDescriptorById <IEffectModuleDescriptor>(id);

            if (descriptor != null)
            {
                _nameLookup.Remove(descriptor.EffectName);
            }
        }
        private IEnumerable <IEffectEditorControl> _GetEditorByEffect(IEffectModuleDescriptor descriptor)
        {
            // Need the type-specific repository reference, doing more than basic
            // repository operations.
            EffectEditorModuleRepository repository = Modules.GetRepository <IEffectEditorModuleInstance, EffectEditorModuleRepository>();
            IEffectEditorModuleInstance  instance   = repository.GetByEffectId(descriptor.TypeId);

            return((instance != null) ? instance.CreateEditorControl().AsEnumerable() : null);
        }
Beispiel #6
0
        private string _EffectParameterName(Guid effectModuleId, int parameterIndex)
        {
            IEffectModuleDescriptor descriptor = ApplicationServices.GetModuleDescriptor <IEffectModuleDescriptor>(effectModuleId);

            if (descriptor != null && parameterIndex < descriptor.Parameters.Count)
            {
                return(descriptor.Parameters[parameterIndex].Name);
            }
            return(null);
        }
        private IEnumerable <IEffectEditorControl> _GetEditorsByParameter(IEffectModuleDescriptor descriptor)
        {
            EffectEditorModuleRepository repository             = Modules.GetRepository <IEffectEditorModuleInstance, EffectEditorModuleRepository>();
            IEnumerable <IEffectEditorModuleInstance> instances = descriptor.Parameters.Select(x => repository.Get(x.Type));

            if (!instances.Any(x => x == null))
            {
                return(instances.Select(x => x.CreateEditorControl()));
            }
            return(null);
        }
Beispiel #8
0
        public IEnumerable <IEffectEditorControl> GetEffectEditors(Guid effectId)
        {
            IEffectModuleDescriptor descriptor = Modules.GetDescriptorById <IEffectModuleDescriptor>(effectId);

            // 1. Is there an editor for this specific effect by id?
            // 2. Is there an editor for this specific signature?
            // 3. Try to get a collection of editors, one for each parameter type.
            IEnumerable <IEffectEditorControl> editorControls =
                _GetEditorByEffect(descriptor) ??
                _GetEditorBySignature(descriptor) ??
                _GetEditorsByParameter(descriptor);

            // May be null if nothing qualifies.
            return(editorControls);
        }
        private void AddEffect(IEffectModuleDescriptor effectDesriptor)
        {
            ToolStripButton tsb = new ToolStripButton
            {
                ToolTipText = effectDesriptor.EffectName,
                Tag         = effectDesriptor.TypeId,
                ImageIndex  = toolStripEffects.Items.Count - 1,
                ImageKey    = effectDesriptor.EffectName,
                Image       = effectDesriptor.GetRepresentativeImage(),
                Text        = effectDesriptor.EffectName
            };

            tsb.MouseDown += tsb_MouseDown;
            tsb.MouseMove += tsb_MouseMove;
            toolStripEffects.Items.Add(tsb);
        }
Beispiel #10
0
        private void comboBoxEffect_SelectedIndexChanged(object sender, EventArgs e)
        {
            IEffectModuleDescriptor descriptor = _SelectedEffectDescriptor;

            buttonSetupEffect.Enabled = descriptor != null;

            panelEffectParameters.Controls.Clear();
            for (int i = 0; i < descriptor.Parameters.Count; i++)
            {
                ParameterSpecification parameterSpecification = descriptor.Parameters[i];
                if (_CanBeDouble(parameterSpecification.Type))
                {
                    RadioButton radioButton = new RadioButton {
                        Text = parameterSpecification.Name, Dock = DockStyle.Top, Tag = i
                    };
                    panelEffectParameters.Controls.Add(radioButton);
                }
            }
        }
Beispiel #11
0
        public virtual string TransformText()
        {
            this.Write(
                @"Option Strict Off

imports System
imports System.Collections.Generic
imports System.Linq
imports System.Text
imports System.Threading
imports System.Dynamic
imports Vixen.Sys
imports Vixen.Module.SequenceType
imports Vixen.Module.Effect
imports Vixen.Module.Script
imports Vixen.Commands

Namespace ");

#line 22 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Namespace));

#line default
#line hidden
            this.Write(" \r\n\tPartial Public Class ");

#line 23 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(ClassName));

#line default
#line hidden
            this.Write(
                @"
		Inherits UserScriptHost
		Private _nodes
		' Effect name : effect type id
		Private _effects As Dictionary(Of String, Guid)

		Public Sub New
			_nodes = VixenSystem.Nodes.Select(Function(x) New UserScriptNode(x)).ToArray()
			' Need to copy the command dictionary made in code, but in such a way that
			' it can be built when this is executing..
			_effects = New Dictionary(Of String, Guid)
");

#line 34 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"

            foreach (string effectName in Effects.Keys)
            {
#line default
#line hidden
                this.Write("\t\t\t_effects.Add(\"");

#line 37 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effectName));

#line default
#line hidden
                this.Write("\", New Guid(\"");

#line 37 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Effects[effectName].TypeId));

#line default
#line hidden
                this.Write("\"))\r\n");

#line 38 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
            }

#line default
#line hidden
            this.Write(
                @"		
		End Sub

		Public Overrides Property Sequence() As ISequence 
			Get
				Return MyBase.Sequence
			End Get
			Set
				MyBase.Sequence = Value
			End Set
		End Property

		Protected Sub _InvokeEffect(effectName as String, targetNodes as IEnumerable(Of UserScriptNode), timeSpan as TimeSpan, ParamArray args() as object)
			Dim effectId as Guid
			If _effects.TryGetValue(effectName, effectId) Then
				Dim effect as IEffectModuleInstance = Vixen.Services.ApplicationServices.Get(Of IEffectModuleInstance)(effectId)
				effect.TimeSpan = timeSpan
				effect.TargetNodes = targetNodes.Select(Function(x) x.Node).ToArray()
				effect.ParameterValues = args
				Dim effectNode as EffectNode = New EffectNode(effect, TimeSpan.Zero)
				Sequence.InsertData(effectNode)
			End If
		End Sub

' == Effects ==

");

#line 64 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"

            foreach (string effectName in Effects.Keys)
            {
                IEffectModuleDescriptor effect = Effects[effectName];
                string effectParameters        =
                    string.Join(", ",
                                (from parameter in effect.Parameters
                                 select _Mangle(parameter.Name) + " As " + parameter.Type).ToArray());
                string parameterNames =
                    string.Join(", ",
                                (from parameter in effect.Parameters
                                 select _Mangle(parameter.Name)).ToArray());


#line default
#line hidden
                this.Write("\t\t\' Original name: ");

#line 76 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effect.EffectName));

#line default
#line hidden
                this.Write("\r\n\t\tPublic Sub ");

#line 77 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effectName));

#line default
#line hidden
                this.Write("(targetNodes As IEnumerable(Of UserScriptNode), timeSpan As TimeSpan, ");

#line 77 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effectParameters));

#line default
#line hidden
                this.Write(")\r\n\t\t\t_InvokeEffect(\"");

#line 78 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effectName));

#line default
#line hidden
                this.Write("\", targetNodes, timeSpan, ");

#line 78 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(parameterNames));

#line default
#line hidden
                this.Write(")\r\n\t\tEnd Sub\r\n\r\n");

#line 81 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
            }

#line default
#line hidden
            this.Write("\r\n\' == Nodes ==\r\n\r\n");

#line 85 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"

            // This needs to match the node collection that the script created in its constructor.
            ElementNode[] nodes     = VixenSystem.Nodes.ToArray();
            List <string> usedNames = new List <string>();
            for (int i = 0; i < nodes.Length; i++)
            {
#line default
#line hidden
                this.Write("\t\t\' Original name: ");

#line 90 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(nodes[i].Name));

#line default
#line hidden
                this.Write("\r\n\t\tPublic ReadOnly Property ");

#line 91 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(_Fix(nodes[i].Name, usedNames)));

#line default
#line hidden
                this.Write("() As Object\r\n\t\t\tGet\r\n\t\t\t\tReturn _nodes(");

#line 93 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(i));

#line default
#line hidden
                this.Write(")\r\n\t\t\tEnd Get\r\n\t\tEnd Property\r\n");

#line 96 "C:\Git\vixen\Public\Modules\Script\VB\VB_ScriptFramework.tt"
            }

#line default
#line hidden
            this.Write("\tEnd Class\r\nEnd Namespace\r\n");
            return(this.GenerationEnvironment.ToString());
        }
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write("\r\n");
            this.Write(@"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Dynamic;
using Vixen.Sys;
using Vixen.Module.SequenceType;
using Vixen.Module.Effect;
using Vixen.Module.Script;
using Vixen.Commands;
using ValueTypes=Common.ValueTypes ;

namespace ");

            #line 25 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Namespace));

            #line default
            #line hidden
            this.Write(" {\r\n\tpublic partial class ");

            #line 26 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(ClassName));

            #line default
            #line hidden
            this.Write(" : UserScriptHost {\r\n\t\tprivate UserScriptNode[] _nodes;\r\n\t\t// Effect name : Effec" +
                       "t type id\r\n\t\tprivate Dictionary<string, Guid> _effects = new Dictionary<string, " +
                       "Guid>();\r\n\r\n\t\tpublic ");

            #line 31 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(ClassName));

            #line default
            #line hidden
            this.Write("() {\r\n\t\t\t_nodes = VixenSystem.Nodes.Select(x => new UserScriptNode(x)).ToArray();" +
                       "\r\n");

            #line 33 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"

            foreach (string effectName in Effects.Keys)
            {
            #line default
            #line hidden
                this.Write("\t\t\t_effects[\"");

            #line 36 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effectName));

            #line default
            #line hidden
                this.Write("\"] = new Guid(\"");

            #line 36 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Effects[effectName].TypeId));

            #line default
            #line hidden
                this.Write("\");\r\n");

            #line 37 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
            }

            #line default
            #line hidden
            this.Write(@"		
		}

		public void PreRenderEffect(EffectNode effectNode) {
			if(effectNode != null) {
				effectNode.Effect.PreRender();
			}
		}

		public void PreRenderEffects(IEnumerable<EffectNode> effectNodes) {
			if(effectNodes != null) {
				effectNodes.AsParallel().ForAll(x => x.Effect.PreRender());
			}
		}

		public void Execute(EffectNode effectNode) {
			if(effectNode != null) {
				Sequence.InsertData(effectNode);
			}
		}

		public void Execute(IEnumerable<EffectNode> effectNodes) {
			if(effectNodes != null) {
				Sequence.InsertData(effectNodes);
			}
		}

		public EffectNode CreateEffectNode(string effectName, IEnumerable<UserScriptNode> targetNodes, TimeSpan timeSpan, params object[] args) {
			Guid effectId;
			if(_effects.TryGetValue(effectName, out effectId)) {
				IEffectModuleInstance effect = Vixen.Services.ApplicationServices.Get<IEffectModuleInstance>(effectId);
				effect.TimeSpan = timeSpan;
				effect.TargetNodes = targetNodes.Select(x => x.Node).ToArray();
				effect.ParameterValues = args;
				return new EffectNode(effect, TimeSpan.Zero);
			}

			return null;
		}
		
// == Effects ==

");

            #line 79 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"

            foreach (string effectName in Effects.Keys)
            {
                IEffectModuleDescriptor effect = Effects[effectName];
                string effectParameters        =
                    string.Join(", ",
                                (from parameter in effect.Parameters
                                 select parameter.Type.ToString().Replace("Common.ValueTypes", "ValueTypes") + " " + _Mangle(parameter.Name)).ToArray());
                string parameterNames =
                    string.Join(", ",
                                (from parameter in effect.Parameters
                                 select _Mangle(parameter.Name)).ToArray());


            #line default
            #line hidden
                this.Write("\t\t// Original name: ");

            #line 91 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effect.EffectName));

            #line default
            #line hidden
                this.Write("\r\n\t\tpublic void ");

            #line 92 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effectName));

            #line default
            #line hidden
                this.Write("(IEnumerable<UserScriptNode> targetNodes, TimeSpan timeSpan, ");

            #line 92 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effectParameters));

            #line default
            #line hidden
                this.Write(") {\r\n\t\t\t_InvokeEffect(\"");

            #line 93 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(effectName));

            #line default
            #line hidden
                this.Write("\", targetNodes, timeSpan, ");

            #line 93 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(parameterNames));

            #line default
            #line hidden
                this.Write(");\r\n\t\t}\r\n\r\n");

            #line 96 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n\t\t// == Nodes ==\r\n\t\t\r\n");

            #line 100 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"

            // This needs to match the node collection that the script created in its constructor.
            var           nodes     = VixenSystem.Nodes.ToArray();
            List <string> usedNames = new List <string>();
            for (int i = 0; i < nodes.Length; i++)
            {
            #line default
            #line hidden
                this.Write("\t\t// Original name: ");

            #line 105 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(nodes[i].Name));

            #line default
            #line hidden
                this.Write("\r\n\t\tpublic dynamic ");

            #line 106 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(_Fix(nodes[i].Name, usedNames)));

            #line default
            #line hidden
                this.Write(" { \r\n\t\t\tget { return _nodes[");

            #line 107 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(i));

            #line default
            #line hidden
                this.Write("]; }\r\n\t\t}\r\n");

            #line 109 "C:\Users\gizmo_000\Documents\GitHub\vixen-master\Modules\Script\CSharp\CSharp_ScriptFramework.tt"
            }

            #line default
            #line hidden
            this.Write(@"
		public UserScriptNode[] Nodes {
			get { return _nodes; }
		}

		private void _InvokeEffect(string effectName, IEnumerable<UserScriptNode> targetNodes, TimeSpan timeSpan, params object[] args) {
			Execute(CreateEffectNode(effectName, targetNodes, timeSpan, args));
		}
	}
}
");
            return(this.GenerationEnvironment.ToString());
        }