From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点
---
Plugin.SeqEditor/ViewModel/TreeListViewHandler.cs | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 119 insertions(+), 0 deletions(-)
diff --git a/Plugin.SeqEditor/ViewModel/TreeListViewHandler.cs b/Plugin.SeqEditor/ViewModel/TreeListViewHandler.cs
new file mode 100644
index 0000000..b68f3fc
--- /dev/null
+++ b/Plugin.SeqEditor/ViewModel/TreeListViewHandler.cs
@@ -0,0 +1,119 @@
+锘縰sing GongSolutions.Wpf.DragDrop;
+using NationalInstruments.TestStand.Interop.API;
+using Plugin.SeqEditor.Entity;
+using System.Collections.ObjectModel;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Plugin.SeqEditor.ViewModel
+{
+ public class TreeListViewHandler : DefaultDropHandler
+ {
+ private SeqEditorViewModel model;
+ public TreeListViewHandler(SeqEditorViewModel model)
+ {
+ this.model = model;
+ }
+
+ public bool CanConvert(IDropInfo dropInfo)
+ {
+ if (!(dropInfo.TargetItem is StepUI target))
+ {
+ return false;
+ }
+
+ if (!(dropInfo.Data is StepUI source))
+ {
+ return false;
+ }
+
+ if (source == target)
+ {
+ return false;
+ }
+
+ 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 StepUI;
+ var target = dropInfo.TargetItem as StepUI;
+
+ 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);
+ }
+ }
+ }
+}
--
Gitblit v1.9.1