private void tv_DragDrop(object sender, DragEventArgs e) { var invalidFilesList = new List <string>(); // Retrieve the current selected node var treeview = (TreeView)sender; var location = tv.PointToScreen(Point.Empty); var currentNode = treeview.GetNodeAt(e.X - location.X, e.Y - location.Y); var files = (string[])e.Data.GetData(DataFormats.FileDrop); foreach (var file in files.OrderBy(f => !File.GetAttributes(f).HasFlag(FileAttributes.Directory)).ThenBy(f => Path.GetFileName(f))) { if (File.GetAttributes(file).HasFlag(FileAttributes.Directory)) { var di = new DirectoryInfo(file); AddSingleFolder((FolderNode)currentNode, di.Name, di); continue; } var fi = new FileInfo(file); AddFilesAsNodes((FolderNode)currentNode, new List <string> { fi.FullName }, invalidFilesList); // Create file if the current node has a filepath in its tag // this means, wen resources come from disk if (Directory.Exists(((FolderNode)currentNode).FolderPath)) { var resultingFileName = Path.Combine(((FolderNode)currentNode).FolderPath, fi.Name); if (resultingFileName.ToLower() != fi.FullName.ToLower()) { if (DialogResult.Yes == MessageBox.Show( $@"Would you like to also copy this file to folder '{((FolderNode)currentNode).FolderPath}'?", @"Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) { File.WriteAllBytes(resultingFileName, File.ReadAllBytes(file)); } } } } if (invalidFilesList.Any()) { ShowInvalidFilesRequested?.Invoke(this, new InvalidFilesEventArgs(invalidFilesList)); } tv.Sort(); }
public void DisplayNodes(IEnumerable <Webresource> resources, Entity theSolution = null, bool expanded = false) { Invoke(new Action(() => { //pnlTop.Visible = false; solution = theSolution; if (solution != null) { lblSolution.Text = $@"{solution.GetAttributeValue<string>("friendlyname")} ({solution.GetAttributeValue<string>("version")})"; pnlSolution.Visible = true; } })); var resourcesToDisplay = mainControl.WebresourcesCache.Where(w => txtSearch.Text.Length == 0 || w.ToString().ToLower() .Contains(txtSearch.Text.ToLower()) || chkSearchInContent.Checked && w.UpdatedStringContent.ToLower() .Contains(txtSearch.Text.ToLower())).ToList(); if (!resourcesToDisplay.Any() && txtSearch.Text.Length > 0) { txtSearch.BackColor = Color.LightCoral; return; } var rootNodes = new List <TreeNode>(); var invalidFilesList = new List <string>(); var orderedResources = resourcesToDisplay.OrderBy(r => r.Name.ToLower()); foreach (var resource in orderedResources) { if (Webresource.IsNameValid(resource.Name, OrganizationMajorVersion) && Webresource.IsValidExtension(Path.GetExtension(resource.Name), Settings)) { var nameParts = resource.Name.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); if (nameParts.Length == 1) { var node = AddSingleNode(resource, nameParts); if (node != null) { rootNodes.Add(node); } } else { AddFolderNode(resource, nameParts, rootNodes); } } else { invalidFilesList.Add(resource.Name); } } if (invalidFilesList.Any()) { ShowInvalidFilesRequested?.Invoke(this, new InvalidFilesEventArgs(invalidFilesList)); } tv.Nodes.Clear(); tv.Nodes.AddRange(rootNodes.ToArray()); tv.Sort(); if (expanded) { tv.ExpandAll(); } }