private void UpdateCheackableList(ICSharpCode.TreeView.SharpTreeNode node)
        {
            if (node.Children != null && node.Children.Count > 0)
            {
                foreach (ICSharpCode.TreeView.SharpTreeNode child in node.Children)
                {
                    UpdateCheackableList(child);
                }
            }
            if (node.IsCheckable)
            {
                int childCount = node.Children.Count((c) => c.IsCheckable);
                if (childCount == 0)
                {
                    return;
                }
                int checkedChildCount = node.Children.Count((c) => c.IsCheckable && c.IsChecked != null && c.IsChecked.Value);

                if (checkedChildCount == 0)
                {
                    node.IsChecked = false;
                }
                else
                if (checkedChildCount == childCount)
                {
                    node.IsChecked = true;
                }
                else
                {
                    node.IsChecked = null;
                }
            }
        }
示例#2
0
        public void Execute(ICSharpCode.TreeView.SharpTreeNode[] selectedNodes)
        {
            //Node
            var node = selectedNodes[0];

            //Confirmation message
            if (MessageBox.Show("Are you sure you want to remove " + node.Text + "?" + Environment.NewLine + "Warning: this action may break some references.", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No)
            {
                return;
            }

            //Checks if the node is an assembly reference
            if (node is AssemblyReferenceTreeNode)
            {
                //Walks the tree until it finds the module
                ModuleTreeNode module = Helpers.Tree.GetModuleNode(node);

                //Removes the reference from the module
                module.Module.AssemblyReferences.Remove(((AssemblyReferenceTreeNode)node).Reference);
            }
            else if (node is ModuleTreeNode) //Checks if the node is a module
            {
                //Module
                var m = ((ModuleTreeNode)node).Module;

                //Finds the assembly node
                AssemblyDefinition asm = null;
                ICSharpCode.TreeView.SharpTreeNode currentNode = node;
                while (asm == null)
                {
                    currentNode = currentNode.Parent;
                    asm         = (currentNode as AssemblyTreeNode) == null ? null : ((AssemblyTreeNode)currentNode).LoadedAssembly.AssemblyDefinition;
                }

                //Checks that this isn't the only module in the assembly
                if (asm.Modules.Count == 1)
                {
                    MessageBox.Show("Cannot remove the only module of an assembly", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                //Checks it isn't the main module
                else if (asm.MainModule == m)
                {
                    MessageBox.Show("Cannot remove the main module of an assembly", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                //Removes the module
                asm.Modules.Remove(m);
            }
            else
            {
                //Gets the member
                var m = ((IMemberTreeNode)node).Member;

                //Switches on the type of the member
                switch (m.MetadataToken.TokenType)
                {
                //Type
                case TokenType.TypeDef:
                    var type = (TypeDefinition)m;
                    if (type.IsNested)
                    {
                        type.DeclaringType.NestedTypes.Remove(type);
                    }
                    else
                    {
                        type.Module.Types.Remove(type);
                    }
                    break;

                //Field
                case TokenType.Field:
                    var field = (FieldDefinition)m;
                    field.DeclaringType.Fields.Remove(field);
                    break;

                //Method
                case TokenType.Method:
                    var method = (MethodDefinition)m;
                    method.DeclaringType.Methods.Remove(method);
                    break;

                //Event
                case TokenType.Event:
                    var evt = (EventDefinition)m;
                    foreach (var x in new MethodDefinition[] { evt.AddMethod, evt.RemoveMethod, evt.InvokeMethod }.Concat(evt.OtherMethods).Where(x => x != null))
                    {
                        evt.DeclaringType.Methods.Remove(x);
                    }
                    evt.DeclaringType.Events.Remove(evt);
                    break;

                //Property
                case TokenType.Property:
                    var property = (PropertyDefinition)m;
                    foreach (var x in new MethodDefinition[] { property.GetMethod, property.SetMethod }.Concat(property.OtherMethods).Where(x => x != null))
                    {
                        property.DeclaringType.Methods.Remove(x);
                    }
                    property.DeclaringType.Properties.Remove(property);
                    break;

                //Other
                default:
                    throw new ArgumentException("Cannot remove a " + m.MetadataToken.TokenType.ToString());
                }
            }

            //Removes the node
            var parent = node.Parent;

            parent.Children.Remove(node);

            //Collapses the parent if it has no more children
            if (parent.Children.Count == 0)
            {
                parent.IsExpanded = false;
            }
        }
示例#3
0
 protected override Mono.Cecil.IMetadataTokenProvider ImportCore(MemberImportingOptions options, ICSharpCode.TreeView.SharpTreeNode node)
 {
     //Returns the type
     return(retType);
 }
示例#4
0
        protected override Mono.Cecil.IMetadataTokenProvider ImportCore(MemberImportingOptions options, ICSharpCode.TreeView.SharpTreeNode node)
        {
            //Checks that the task hasn't been canceled
            options.CancellationToken.ThrowIfCancellationRequested();

            //Adds the field to the destination type
            ((TypeDefinition)Destination).Events.Add(evtClone);
            if (_createNode)
            {
                node.AddChildAndColorAncestors(new ILEditTreeNode(evtClone, false));
            }

            //Returns the new field
            return(evtClone);
        }
        protected override Mono.Cecil.IMetadataTokenProvider ImportCore(MemberImportingOptions options, ICSharpCode.TreeView.SharpTreeNode node)
        {
            //Throws if cancellation was requested
            options.CancellationToken.ThrowIfCancellationRequested();

            //Imports the generic parameters
            foreach (var x in parametersClone)
            {
                ((IGenericParameterProvider)Destination).GenericParameters.Add(x);
            }

            //Returns null
            return(null);
        }