Example #1
0
        public virtual void OnDrop(IListDragAndDropArgs args)
        {
            int indexShift = 0;

            var selectedIndices = m_ListView.selectedIndices.OrderBy(i => i).ToArray();

            for (int i = selectedIndices.Length - 1; i >= 0; --i)
            {
                var index = selectedIndices[i];
                if (index < args.insertAtIndex)
                {
                    indexShift--;
                }

                m_ListView.itemsSource.RemoveAt(index);
            }

            switch (args.dragAndDropPosition)
            {
            case DragAndDropPosition.OutsideItems:
            case DragAndDropPosition.BetweenItems:
                InsertRange(args.insertAtIndex + indexShift);
                break;

            default:
                throw new ArgumentException($"{args.dragAndDropPosition} is not supported by {nameof(ListViewReorderableDragAndDropController)}.");
            }

            m_ListView.Refresh();
        }
        public virtual void OnDrop(IListDragAndDropArgs args)
        {
            int indexShift = 0;

            foreach (var index in m_ListView.selectedIndices)
            {
                if (index < args.insertAtIndex)
                {
                    indexShift--;
                }
            }

            foreach (var selectedItem in m_ListView.selectedItems)
            {
                m_ListView.itemsSource.Remove(selectedItem);
            }

            switch (args.dragAndDropPosition)
            {
            case DragAndDropPosition.OutsideItems:
            case DragAndDropPosition.BetweenItems:
                InsertRange(args.insertAtIndex + indexShift);
                break;

            default:
                throw new ArgumentException($"{args.dragAndDropPosition} is not supported by {nameof(ListViewReorderableDragAndDropController)}.");
            }

            m_ListView.Refresh();
        }
        public override void OnDrop(IListDragAndDropArgs args)
        {
            var insertAtId         = m_TreeView.GetIdForIndex(args.insertAtIndex);
            var insertAtParentId   = m_TreeView.GetParentIdForIndex(args.insertAtIndex);
            var insertAtChildIndex = m_TreeView.viewController.GetChildIndexForId(insertAtId);

            if (args.dragAndDropPosition == DragAndDropPosition.OverItem || (insertAtId == -1 && insertAtParentId == -1 && insertAtChildIndex == -1))
            {
                for (var i = 0; i < m_SelectedIndices.Count; i++)
                {
                    var index = m_SelectedIndices[i];
                    var id    = m_TreeView.GetIdForIndex(index);

                    var parentId   = insertAtId;
                    var childIndex = -1;
                    m_TreeView.viewController.Move(id, parentId, childIndex, false);
                }
            }
            else
            {
                for (var i = m_SelectedIndices.Count - 1; i >= 0; --i)
                {
                    var index = m_SelectedIndices[i];
                    var id    = m_TreeView.GetIdForIndex(index);

                    var parentId   = insertAtParentId;
                    var childIndex = insertAtChildIndex;
                    m_TreeView.viewController.Move(id, parentId, childIndex, false);
                }
            }

            m_TreeView.viewController.RebuildTree();
            m_TreeView.RefreshItems();
        }
Example #4
0
        public virtual DragVisualMode HandleDragAndDrop(IListDragAndDropArgs args)
        {
            if (args.dragAndDropPosition == DragAndDropPosition.OverItem || !enableReordering)
            {
                return(DragVisualMode.Rejected);
            }

            return(args.dragAndDropData.userData == m_ListView ? DragVisualMode.Move : DragVisualMode.Rejected);
        }
        public override DragVisualMode HandleDragAndDrop(IListDragAndDropArgs args)
        {
            if (!enableReordering)
            {
                return(DragVisualMode.Rejected);
            }

            return(args.dragAndDropData.userData == m_TreeView ? DragVisualMode.Move : DragVisualMode.Rejected);
        }
        public override void OnDrop(IListDragAndDropArgs args)
        {
            switch (args.dragAndDropPosition)
            {
            case DragAndDropPosition.OutsideItems:
            case DragAndDropPosition.BetweenItems:
                // we're ok'
                break;

            default:
                throw new ArgumentException($"{args.dragAndDropPosition} is not supported by {nameof(SerializedObjectListReorderableDragAndDropController)}.");
            }

            base.OnDrop(args);
        }
        public override void OnDrop(IListDragAndDropArgs args)
        {
            var insertIndex = args.insertAtIndex;

            var insertIndexShift = 0;
            var srcIndexShift    = 0;

            for (var i = m_SelectedIndices.Count - 1; i >= 0; --i)
            {
                var index = m_SelectedIndices[i];

                if (index < 0)
                {
                    continue;
                }

                var newIndex = insertIndex - insertIndexShift;

                if (index > insertIndex)
                {
                    index += srcIndexShift;
                    srcIndexShift++;
                }
                else if (index < newIndex)
                {
                    insertIndexShift++;
                    newIndex--;
                }

                m_ListView.viewController.Move(index, newIndex);
            }

            if (m_ListView.selectionType != SelectionType.None)
            {
                var newSelection = new List <int>();

                for (var i = 0; i < m_SelectedIndices.Count; ++i)
                {
                    newSelection.Add(insertIndex - insertIndexShift + i);
                }

                m_ListView.SetSelectionWithoutNotify(newSelection);
            }
            else
            {
                m_ListView.ClearSelection();
            }
        }
Example #8
0
        public override void OnDrop(IListDragAndDropArgs args)
        {
            switch (args.dragAndDropPosition)
            {
            case DragAndDropPosition.OutsideItems:
            case DragAndDropPosition.BetweenItems:
                // we're ok'
                break;

            default:
                throw new ArgumentException($"{args.dragAndDropPosition} is not supported by {nameof(SerializedObjectListReorderableDragAndDropController)}.");
            }

            var array = objectList;

            // TODO: GC Allocs generated by LINQ
            var selection = m_ListView.selectedIndices.OrderBy((i) => i).ToArray();

            var baseOffset = 0;

            if (m_ListView.showBoundCollectionSize)
            {
                //we must offset everything by 1
                baseOffset = -1;
            }

            var insertIndex = args.insertAtIndex + baseOffset;

            int insertIndexShift = 0;
            int srcIndexShift    = 0;

            for (int i = selection.Length - 1; i >= 0; --i)
            {
                var index = selection[i] + baseOffset;

                if (index < 0)
                {
                    continue;
                }

                var newIndex = insertIndex - insertIndexShift;

                if (index > insertIndex)
                {
                    index += srcIndexShift;
                    srcIndexShift++;
                }
                else if (index < newIndex)
                {
                    insertIndexShift++;
                    newIndex--;
                }

                array.Move(index, newIndex);

                onItemMoved?.Invoke(new ItemMoveArgs <object>
                {
                    item          = objectList[index],
                    newIndex      = newIndex,
                    previousIndex = index
                });
            }

            array.ApplyChanges();

            var newSelection = new List <int>();

            for (int i = 0; i < selection.Length; ++i)
            {
                newSelection.Add(insertIndex - insertIndexShift + i - baseOffset);
            }

            m_ListView.SetSelectionWithoutNotify(newSelection);
        }
 public abstract void OnDrop(IListDragAndDropArgs args);
 public abstract DragVisualMode HandleDragAndDrop(IListDragAndDropArgs args);