public void QueryAllowedDragPositions(QueryAllowedPositionsEventArgs args) { args.AllowedCopyPositions = DropLinePosition.None; args.AllowedMovePositions = DropLinePosition.None; DesignerNodeData sourceNodeData = args.Source as DesignerNodeData; if (sourceNodeData != null) { INode source = sourceNodeData.TreeNode.Node; INode target = ((DesignerNode)args.TargetNode).Node; if (target.IsValidChild(source)) { args.AllowedCopyPositions |= DropLinePosition.OnNode; if (!IsNodeContained(source, target, true)) { args.AllowedMovePositions |= DropLinePosition.OnNode; } } if ((args.TargetNode.Parent != null) && target.Parent.IsValidChild(source)) { args.AllowedCopyPositions |= (DropLinePosition.AboveNode | DropLinePosition.BelowNode); if (!IsNodeContained(source, target.Parent, true) && !Object.ReferenceEquals(target, source)) { int index = target.Parent.Children.IndexOf(target); if ( (index == 0) || ((index > 0) && !ReferenceEquals(target.Parent.Children[index - 1], source)) ) { args.AllowedMovePositions |= DropLinePosition.AboveNode; } if ( (index == target.Parent.Children.Count - 1) || ((index < target.Parent.Children.Count - 1) && !ReferenceEquals(target.Parent.Children[index + 1], source)) ) { args.AllowedMovePositions |= DropLinePosition.BelowNode; } } } } }
public void QueryAllowedPalettePositions(QueryAllowedPositionsEventArgs args) { args.AllowedCopyPositions = DropLinePosition.None; args.AllowedMovePositions = DropLinePosition.None; PaletteItem item = args.Source as PaletteItem; if (item != null) { INode target = ((DesignerNode)args.TargetNode).Node; Type type = DesignerTree.FormDesigner.FrontendSession.NodeTypeTable.GetClassType(item.ClassName); if (target.IsValidChild(type)) { args.AllowedCopyPositions |= DropLinePosition.OnNode; } if ((args.TargetNode.Parent != null) && target.Parent.IsValidChild(type)) { args.AllowedCopyPositions |= (DropLinePosition.AboveNode | DropLinePosition.BelowNode); } } }
// Drag & drop private void QueryAllowedDragPositions(object sender, QueryAllowedPositionsEventArgs args) { ((DesignerNode)args.TargetNode).QueryAllowedDragPositions(args); }