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; } } }
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; } }
protected override Mono.Cecil.IMetadataTokenProvider ImportCore(MemberImportingOptions options, ICSharpCode.TreeView.SharpTreeNode node) { //Returns the type return(retType); }
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); }