using GongSolutions.Wpf.DragDrop; using Keysight.OpenTap.Wpf; using OpenTap; using System.Collections.ObjectModel; using System.Windows; namespace OpenTapEditor.Util { public class StepTreeDragHandler: DefaultDropHandler { public bool CanConvert(IDropInfo dropInfo) { if (!(dropInfo.TargetItem is TestStep target)) { return false; } if (!(dropInfo.Data is TestStep source)) { return false; } if (source == target) { return false; } var t = target.GetType(); var s = source.GetType(); var sss = TestStepList.AllowChild(t, s); if (!TestStepList.AllowChild(target.GetType(), source.GetType())) { return false; } //if(source.) //if (target.sequence != source.sequence) //{ // return false; //} return true; } public override void DragOver(IDropInfo dropInfo) { if (CanConvert(dropInfo)) { dropInfo.Effects = DragDropEffects.Move; if (dropInfo.InsertPosition.HasFlag(RelativeInsertPosition.TargetItemCenter)) { dropInfo.DropTargetAdorner = null; } else { dropInfo.DropTargetAdorner = DropTargetAdorners.Insert; } //if (dropInfo.DropTargetAdorner == DropTargetAdorners.Highlight) { //} //dropInfo.DropTargetAdorner = DropTargetAdorners.Insert; dropInfo.DropTargetHintState = DropHintState.Active; dropInfo.DropTargetHintAdorner = DropTargetAdorners.Hint; } else { dropInfo.Effects = DragDropEffects.None; dropInfo.DropTargetHintAdorner = DropTargetAdorners.Hint; dropInfo.DropTargetHintState = DropHintState.Error; } } //public override void Drop(IDropInfo dropInfo) //{ // if (!CanConvert(dropInfo)) // { // return; // } // //var sourceItem = (TreeItemData)dropInfo.Data; // //var targetItem = (TreeItemData)dropInfo.TargetItem; // var source = dropInfo.Data as TestStep; // var target = dropInfo.TargetItem as TestStep; // int sourceIndex = source.IndexInSequence; // int targetIndex = target.IndexInSequence; // if (sourceIndex == targetIndex) // { // return; // } // bool insertBefore = dropInfo.InsertPosition.HasFlag(RelativeInsertPosition.BeforeTargetItem); // if (!insertBefore && (sourceIndex == targetIndex + 1)) // { // return; // } // ObservableCollection datasource = model.sequenceCache[source.sequence]; // int uiSourceIndex = datasource.IndexOf(source); // int uiTargetIndex = datasource.IndexOf(target); // StepGroups group = target.StepGroup; // if (sourceIndex < targetIndex) // { // source.sequence.DeleteStep(sourceIndex, source.StepGroup); // target.sequence.InsertStep(source.step, targetIndex, group); // datasource.Move(uiSourceIndex, uiTargetIndex); // } // else if (sourceIndex > targetIndex) // { // source.sequence.DeleteStep(sourceIndex, source.StepGroup); // target.sequence.InsertStep(source.step, targetIndex, group); // datasource.Move(uiSourceIndex, uiTargetIndex); // } //} } }