public void UpdateContext(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces)
        {
            var references = new List <MetadataReference>();

            foreach (var assembly in assemblies.AllAssemblyNamesInContext)
            {
                System.Reflection.Assembly asm = null;
                try
                {
                    asm = System.Reflection.Assembly.Load(assembly);
                }
                catch (Exception)
                {
                    //Console.WriteLine(ex.ToString());
                }
                if (asm != null)
                {
                    if (File.Exists(asm.Location))
                    {
                        references.Add(MetadataReference.CreateFromFile(asm.Location));
                    }
                }
            }

            baseAssemblies = references.ToArray();

            usingNamespaces = string.Join("", importedNamespaces.ImportedNamespaces.Select(ns => "using " + ns + ";\n").ToArray());
        }
示例#2
0
        void OnContextChanged()
        {
            this.targetFramework = WorkflowDesigner.GetTargetFramework(this.Context);

            AttachedPropertiesService attachedPropertyService = this.Context.Services.GetService <AttachedPropertiesService>();

            Fx.Assert(attachedPropertyService != null, "AttachedPropertiesService shouldn't be null in EditingContext.");
            attachedPropertyService.AddProperty(CreateAttachedPropertyForNamespace <string>(ErrorMessagePropertyName));
            attachedPropertyService.AddProperty(CreateAttachedPropertyForNamespace <bool>(IsInvalidPropertyName));
            //clear any defaults because it's meant to be set by host and not serialized to XAML
            VisualBasicSettings.Default.ImportReferences.Clear();

            ModelService modelService = this.Context.Services.GetService <ModelService>();

            Fx.Assert(modelService != null, "ModelService shouldn't be null in EditingContext.");
            Fx.Assert(modelService.Root != null, "model must have a root");
            this.importsModelItem = modelService.Root.Properties[NamespaceListPropertyDescriptor.ImportCollectionPropertyName].Collection;
            Fx.Assert(this.importsModelItem != null, "root must have imports");
            this.importsModelItem.CollectionChanged += this.OnImportsModelItemCollectionChanged;

            this.importedNamespacesItem = this.Context.Items.GetValue <ImportedNamespaceContextItem>();
            this.importedNamespacesItem.EnsureInitialized(this.Context);

            if (this.availableNamespaces == null)
            {
                //change to available namespace should not be a model change so we access the dictionary directly
                this.availableNamespaces = this.importsModelItem.Properties[NamespaceListPropertyDescriptor.AvailableNamespacesPropertyName].ComputedValue as Dictionary <string, List <string> >;
                Fx.Assert(this.availableNamespaces != null, "Available namespace dictionary is not in right format");
            }
            RefreshNamespaces();
        }
示例#3
0
        private IExpressionEditorInstance CreateEditor(ImportedNamespaceContextItem importedNamespaces, List <ModelItem> Variables, string text, Type expressionType, Size initialSize)
        {
            var namespaces = importedNamespaces.ImportedNamespaces;

            if (namespaces == null)
            {
                namespaces = new System.Collections.ObjectModel.Collection <string>();
            }
            if (!namespaces.Contains("System.Collections"))
            {
                namespaces.Add("System.Collections");
            }
            if (!namespaces.Contains("System.Collections.Generic"))
            {
                namespaces.Add("System.Collections.Generic");
            }
            var variables = new Dictionary <string, Type>();

            foreach (var variableModel in Variables)
            {
                var variable = variableModel.GetCurrentValue() as System.Activities.LocationReference;
                variables.Add(variable.Name, variable.Type);
            }
            EditorInstance instance = new EditorInstance
            {
                Text           = text,
                expressionType = expressionType,
                designer       = designer,
                Variables      = variables,
                Namespaces     = namespaces.ToArray()
            };

            return(instance);
        }
示例#4
0
        private IExpressionEditorInstance CreateEditor(ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text)
        {
            ExpressionNode data = AutoCompletionData;

            data = AddVariablesToAutoCompletionList(data, variables);
            data = AddNamespacesToAutoCompletionList(data, importedNamespaces);
            EditorInstance instance = new EditorInstance
            {
                AutoCompletionList = data,
                LanguageKeywords   = LanguageKeywords,
                Text = text
            };

            return(instance);
        }
        public void UpdateContext(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces)
        {
            var references = new List <MetadataReference>();

            foreach (var assembly in assemblies.AllAssemblyNamesInContext)
            {
                try
                {
                    references.Add(MetadataReference.CreateFromFile(System.Reflection.Assembly.Load(assembly).Location));
                }
                catch { }
            }

            baseAssemblies = references.ToArray();

            usingNamespaces = string.Join("", importedNamespaces.ImportedNamespaces.Select(ns => "using " + ns + ";\n").ToArray());
        }
示例#6
0
        private IExpressionEditorInstance CreateExpressionEditorPrivate(AssemblyContextControlItem assemblies,
                                                                        ImportedNamespaceContextItem importedNamespaces, IEnumerable <ModelItem> variables
                                                                        , string text, System.Type expressionType, Size?initialSize)
        {
            var editor = new EditorInstance()
            {
                IntellisenceList = this.CreateUpdatedIntellisense(variables),
                HighlightWords   = this.EditorKeyWord,
                ExpressionType   = expressionType,
                Guid             = Guid.NewGuid(),
                Text             = text ?? ""
            };

            editor.LostAggregateFocus += LostFocus;



            editorInstances.Add(editor.Guid.ToString(), editor);
            return(editor);
        }
        public void UpdateInstance(List <ModelItem> variables, string text, ImportedNamespaceContextItem importedNamespaces)
        {
            textEditor.Text = text;

            try
            {
                variableDeclarations = variables.Select(v =>
                {
                    var c = v.GetCurrentValue() as System.Activities.Variable;
                    //此处c可能为NULL
                    return(c?.Name);
                }).ToList();
            }
            catch (Exception err)
            {
                Logger.Debug(err, logger);
                variableDeclarations = new List <string>();
            }


            this.ImportedNamespaces = importedNamespaces.ImportedNamespaces;
        }
示例#8
0
 /// <summary>
 /// Creates a new expression editor.
 /// </summary>
 /// <returns>
 /// Returns a<see cref="T:System.Activities.Presentation.View.IExpressionEditorInstance"/>.
 /// </returns>
 /// <param name="assemblies">Used to set the context for the editor session.</param><param name="importedNamespaces">The imported namespaces to be used by the expression editor.</param><param name="variables">Local variables for the expression editor.</param><param name="text">A string used to populate the expression editor.</param>
 public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text)
 {
     return(this.CreateExpressionEditor(assemblies, importedNamespaces, variables, text, null, new Size()));
 }
示例#9
0
        /// <summary>
        /// Creates a new expression editor using the specified assemblies, imported namespaces, variables, expression text, expression type, and the initial size.
        /// </summary>
        /// <returns>
        /// A new instance of the <see cref="T:System.Activities.Presentation.View.IExpressionEditorInstance"/>.
        /// </returns>
        /// <param name="assemblies">The local and referenced assemblies in the environment.</param><param name="importedNamespaces">The imported namespaces used by the expression editor.</param><param name="variables">Local variables for the expression editor.</param><param name="text">A string used to populate the expression editor.</param><param name="expressionType">The type of the expression.</param><param name="initialSize">The initial height and width of the expression editor control.</param>
        public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text, Type expressionType, Size initialSize)
        {
            var instance = new EditorInstance
            {
                IntellisenseData   = this.CreateUpdatedIntellisense(variables),
                ImportedNamespaces = importedNamespaces.ImportedNamespaces.ToList(),
                HighlightWords     = vbKeywords,
                ExpressionType     = expressionType,
                Guid = Guid.NewGuid(),
                Text = text
            };

            instance.LostAggregateFocus += this.LostFocus;
            this._editorInstances.Add(instance.Guid.ToString(), instance);
            return(instance);
        }
        private void OnEditorLoaded(object sender, RoutedEventArgs e)
        {
            if (!IsEditorLoaded)
            {
                // If the service exists, create an expression editor and add it to the grid - else switch to the textbox data template
                if (ExpressionEditorService1 != null)
                {
                    Border border = (Border)sender;
                    // Get the references and variables in scope
                    AssemblyContextControlItem assemblies        = (AssemblyContextControlItem)Context.Items.GetValue(typeof(AssemblyContextControlItem));
                    List <ModelItem>           declaredVariables = CSharpExpressionHelper.GetVariablesInScope(OwnerActivity);

                    ImportedNamespaceContextItem importedNamespaces = Context.Items.GetValue <ImportedNamespaceContextItem>();
                    importedNamespaces.EnsureInitialized(Context);
                    //if the expression text is empty and the expression type is set, then we initialize the text to prompt text
                    if (string.Equals(Text, string.Empty, StringComparison.OrdinalIgnoreCase) && ExpressionType != null)
                    {
                        Text = TypeToPromptTextConverter.GetPromptText(ExpressionType);
                    }

                    //this is a hack
                    BlockWidth = Math.Max(ActualWidth - 8, 0);  //8 is the margin
                    if (HasErrors)
                    {
                        BlockWidth = Math.Max(BlockWidth - 16, 0); //give 16 for error icon
                    }
                    try
                    {
                        if (ExpressionType != null)
                        {
                            ExpressionEditorInstance = ExpressionEditorService1.CreateExpressionEditor(assemblies, importedNamespaces, declaredVariables, Text, ExpressionType, new Size(BlockWidth, BlockHeight));
                        }
                        else
                        {
                            ExpressionEditorInstance = ExpressionEditorService1.CreateExpressionEditor(assemblies, importedNamespaces, declaredVariables, Text, new Size(BlockWidth, BlockHeight));
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }

                    if (ExpressionEditorInstance != null)
                    {
                        try
                        {
                            ExpressionEditorInstance.VerticalScrollBarVisibility   = VerticalScrollBarVisibility;
                            ExpressionEditorInstance.HorizontalScrollBarVisibility = HorizontalScrollBarVisibility;

                            ExpressionEditorInstance.AcceptsReturn = AcceptsReturn;
                            ExpressionEditorInstance.AcceptsTab    = AcceptsTab;

                            // Add the expression editor to the text panel, at column 1
                            HostControl = ExpressionEditorInstance.HostControl;

                            // Subscribe to this event to change scrollbar visibility on the fly for auto, and to resize the hostable editor
                            // as necessary
                            ExpressionEditorInstance.LostAggregateFocus += new EventHandler(OnEditorLostAggregateFocus);
                            ExpressionEditorInstance.Closing            += new EventHandler(OnEditorClosing);

                            // Set up Hostable Editor properties
                            ExpressionEditorInstance.MinLines = MinLines;
                            ExpressionEditorInstance.MaxLines = MaxLines;

                            ExpressionEditorInstance.HostControl.Style = (Style)FindResource("editorStyle");

                            border.Child = HostControl;
                            ExpressionEditorInstance.Focus();
                        }
                        catch (KeyNotFoundException ex)
                        {
                            new ApplicationException("Unable to find editor with the following editor name: " + EditorName);
                        }
                    }
                }
                IsEditorLoaded = true;
            }
        }
        public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text, Type expressionType, Size initialSize)
        {
            UpdateContext(assemblies, importedNamespaces);
            var editor = new RoslynExpressionEditorInstance(initialSize);

            editor.UpdateInstance(variables, text);
            return(editor);
        }
示例#12
0
        private IExpressionEditorInstance CreateExpressionEditorPrivate(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, System.Collections.Generic.List <ModelItem> variables, string text, System.Type expressionType, System.Windows.Size initialSize)
        {
            EditorInstance editor = new EditorInstance
            {
                IntellisenseList = this.CreateUpdatedIntellisense(variables),
                HighlightWords   = this.EditorKeyWord,
                ExpressionType   = expressionType,
                Guid             = Guid.NewGuid(),
                Text             = text,
            };

            editor.LostAggregateFocus += LostFocus;

            editorInstances.Add(editor.Guid.ToString(), editor);
            return(editor);
        }
示例#13
0
 public void UpdateContext(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces)
 {
 }
示例#14
0
 public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text, Type expressionType)
 {
     return(CreateEditor(importedNamespaces, variables, text, expressionType, Size.Empty));
 }
        /// <summary>
        /// Creates an expression editor instance.
        /// </summary>
        /// <param name="assemblies">The accessible assemblies.</param>
        /// <param name="importedNamespaces">The imported namespaces.</param>
        /// <param name="variables">The variable list.</param>
        /// <param name="text">The text.</param>
        /// <returns>The <see cref="IExpressionEditorInstance"/> that was created.</returns>
        public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text)
        {
            var editor = new MyExpressionEditorInstance(designer, variables, language);

            editor.Text = text;
            editor.LostAggregateFocus += OnEditorLostFocus;
            editors.Add(editor);
            return(editor);
        }
示例#16
0
        public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text, Type expressionType, System.Windows.Size initialSize)
        {
            var instance = new ExpressionEditorInstance();

            return(instance);
        }
示例#17
0
        public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text)
        {
            var instance = new ExpressionEditorInstance();

            return(instance);
        }
示例#18
0
 public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, System.Collections.Generic.List <ModelItem> variables, string text, System.Windows.Size initialSize)
 {
     return(CreateExpressionEditorPrivate(assemblies, importedNamespaces, variables, text, null, initialSize));
 }
示例#19
0
 public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text, Size initialSize)
 {
     return(CreateEditor(importedNamespaces, variables, text, null, initialSize));
 }
示例#20
0
 public void UpdateContext(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces)
 {
     // throw new NotImplementedException();
 }
示例#21
0
 private ExpressionNode AddNamespacesToAutoCompletionList(ExpressionNode data, ImportedNamespaceContextItem importedNamespaces)
 {
     foreach (var ns in importedNamespaces.ImportedNamespaces)
     {
         var foundNodes = ExpressionNode.SearchForNode(data, ns, true, true);
         foreach (var node in foundNodes.Nodes)
         {
             data.Add(node);
         }
     }
     return(data);
 }
        public IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List <ModelItem> variables, string text, Type expressionType, Size initialSize)
        {
            UpdateContext(assemblies, importedNamespaces);
            var editor = new RoslynExpressionEditorInstance(initialSize);

            editor.UpdateInstance(variables, text, importedNamespaces);

            //生成命名空间树
            editor.m_namespaceNodeRoot = AddNamespacesToAutoCompletionList(EditorUtil.autoCompletionTree, importedNamespaces);

            return(editor);
        }