/// <summary> /// Raises event immediately before list item is moved and provides oppertunity to cancel. /// </summary> /// <param name="args">Event arguments.</param> protected virtual void OnItemMoving(ItemMovingEventArgs args) { if (ItemMoving != null) ItemMoving(this, args); }
/// <summary> /// Move item from source index to destination index. /// </summary> /// <param name="adaptor">Reorderable list adaptor.</param> /// <param name="sourceIndex">Zero-based index of source item.</param> /// <param name="destIndex">Zero-based index of destination index.</param> protected void MoveItem(IReorderableListAdaptor adaptor, int sourceIndex, int destIndex) { // Raise event before moving item so that the operation can be cancelled. var movingEventArgs = new ItemMovingEventArgs(adaptor, sourceIndex, destIndex); OnItemMoving(movingEventArgs); if (!movingEventArgs.Cancel) { adaptor.Move(sourceIndex, destIndex); // Item was actually moved! int newIndex = destIndex; if (newIndex > sourceIndex) --newIndex; OnItemMoved(new ItemMovedEventArgs(adaptor, sourceIndex, newIndex)); GUI.changed = true; } ReorderableListGUI.IndexOfChangedItem = -1; }