public void HandleDrop(object sender, DragEventArgs e, BaseTreeViewItem treeViewItem) { Assert.ArgumentNotNull(sender, nameof(sender)); Assert.ArgumentNotNull(e, nameof(e)); Assert.ArgumentNotNull(treeViewItem, nameof(treeViewItem)); if (e.Data.GetDataPresent(DataFormats.FileDrop)) { HandleFileDrop(e); return; } var target = treeViewItem as ItemTreeViewItem; if (target == null) { Diagnostics.Trace.Expected(typeof(ItemTreeViewItem)); return; } if (e.Data.GetDataPresent(@"CF_VSSTGPROJECTITEMS") && e.Data.GetDataPresent(@"Text")) { HandleSolutionExplorerDrop(target, e); return; } if (e.Data.GetDataPresent(DragManager.DragIdentifier)) { HandleItemDrop(target, e); return; } Notifications.RaiseItemTreeViewDrop(this, target, e); }
void ICanDrop.HandleDragOver(object sender, DragEventArgs e, BaseTreeViewItem treeViewItem) { Debug.ArgumentNotNull(sender, nameof(sender)); Debug.ArgumentNotNull(e, nameof(e)); Debug.ArgumentNotNull(treeViewItem, nameof(treeViewItem)); if (!e.Data.GetDataPresent(SiteTreeViewItem.DragIdentifier)) { return; } var items = e.Data.GetData(SiteTreeViewItem.DragIdentifier) as IEnumerable <BaseTreeViewItem>; if (items == null) { return; } if (items.Any(IsAncestor)) { return; } if (items.Any(i => i == this)) { return; } e.Effects = DragDropEffects.Move; e.Handled = true; }
public void HandleDragOver(object sender, DragEventArgs e, BaseTreeViewItem treeViewItem) { Assert.ArgumentNotNull(sender, nameof(sender)); Assert.ArgumentNotNull(e, nameof(e)); Assert.ArgumentNotNull(treeViewItem, nameof(treeViewItem)); adorner.AllowedPositions = ControlDragAdornerPosition.None; if (e.Data.GetDataPresent(DataFormats.FileDrop)) { HandleFileDragOver(e); return; } var target = treeViewItem as ItemTreeViewItem; if (target == null) { return; } if (e.Data.GetDataPresent(@"CF_VSSTGPROJECTITEMS") && e.Data.GetDataPresent(@"Text")) { var fileName = e.Data.GetData(@"Text") as string ?? string.Empty; if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName)) { var project = AppHost.Projects.FirstOrDefault(p => fileName.StartsWith(p.FolderName, StringComparison.InvariantCultureIgnoreCase)); if (project != null) { e.Effects = DragDropEffects.Link; } } return; } if (e.Data.GetDataPresent(DragManager.DragIdentifier)) { HandleItemDragOver(target, e); return; } Notifications.RaiseItemTreeViewDragOver(this, target, e); if (e.Effects != DragDropEffects.None) { adorner.AllowedPositions = ControlDragAdornerPosition.Over; } }
private bool IsAncestor([NotNull] BaseTreeViewItem item) { Debug.ArgumentNotNull(item, nameof(item)); var i = Parent as BaseTreeViewItem; while (i != null) { if (i == item) { return(true); } i = i.Parent as BaseTreeViewItem; } return(false); }
void ICanDrop.HandleDrop(object sender, DragEventArgs e, BaseTreeViewItem treeViewItem) { Debug.ArgumentNotNull(sender, nameof(sender)); Debug.ArgumentNotNull(e, nameof(e)); Debug.ArgumentNotNull(treeViewItem, nameof(treeViewItem)); if (!e.Data.GetDataPresent(SiteTreeViewItem.DragIdentifier)) { return; } var items = e.Data.GetData(SiteTreeViewItem.DragIdentifier) as IEnumerable <BaseTreeViewItem>; if (items == null) { return; } var itemTreeView = this.GetAncestorOrSelf <ItemTreeView>(); if (itemTreeView == null) { return; } MoveFolders(itemTreeView, items.OfType <ConnectionFolderTreeViewItem>(), Folder); MoveSites(items.OfType <SiteTreeViewItem>(), Folder); if (!IsExpanded) { IsExpanded = true; } Refresh(); e.Handled = true; }