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<StepUI> 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);
|
// }
|
//}
|
}
|
}
|