BExplorer.Shell.ShellTreeViewEx.AddItem C# (CSharp) Method

AddItem() private method

private AddItem ( IListItemEx item ) : void
item IListItemEx
return void
		private void AddItem(IListItemEx item) {
			TreeNode itemNode = null;
			foreach (TreeNode node in this.ShellTreeView.Nodes) {
				try {
					itemNode = this.FromItem(item.Parent, node);
				} catch (Exception) {
					continue;
				}
				if (itemNode != null) break;
			}

			if (itemNode != null) {
				var node = new TreeNode(item.DisplayName);
				IListItemEx itemReal = FileSystemListItem.ToFileSystemItem(IntPtr.Zero, item.ParsingName.ToShellParsingName());
				node.Tag = itemReal;
				var oldnodearray = itemNode.Nodes.OfType<TreeNode>().ToList();
				if (!oldnodearray.Any(s => s.Tag != null && (s.Tag as IListItemEx).Equals(itemReal))) oldnodearray.Add(node);
				//var newArray = oldnodearray.OrderBy(o => o.Text).ToArray();
				this.ShellTreeView.BeginUpdate();
				itemNode.Nodes.Clear();
				itemNode.Nodes.AddRange(oldnodearray.OrderBy(o => o.Text).ToArray());
				this.ShellTreeView.EndUpdate();
				//if (itemNode != null && itemNode.Nodes.Count > 0) {
				if (itemNode?.Nodes?.Count > 0) {
					var newNode = itemNode.Nodes.OfType<TreeNode>().FirstOrDefault(s => (s?.Tag as IListItemEx).Equals(itemReal));
					if (newNode != null) {
						SetNodeImage(newNode.Handle, itemReal.PIDL, this.ShellTreeView.Handle, !(newNode.Parent != null && (newNode.Parent.Tag as IListItemEx).ParsingName == KnownFolders.Links.ParsingName));
					}
				}
			}
		}