Exemplo n.º 1
0
        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;
        }
Exemplo n.º 3
0
        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;
        }