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(); }
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(); } }
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);