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