using System;
namespace DevComponents.AdvTree
{
	/// 
	/// Represents event arguments for BeforeNodeDrop and AfterNodeDrop events
	/// 
    public class TreeDragDropEventArgs : AdvTreeMultiNodeCancelEventArgs
	{
        public TreeDragDropEventArgs(eTreeAction action, Node[] nodes, Node oldParentNode, Node newParentNode, int insertPosition)
            : base(action, nodes)
		{
			this.NewParentNode = newParentNode;
			this.OldParentNode = oldParentNode;
            this.InsertPosition = insertPosition;
		}
        public TreeDragDropEventArgs(eTreeAction action, Node[] nodes, Node oldParentNode, Node newParentNode, bool isCopy, int insertPosition)
            : base(action, nodes)
        {
            this.NewParentNode = newParentNode;
            this.OldParentNode = oldParentNode;
            this.IsCopy = isCopy;
            this.InsertPosition = insertPosition;
        }
		
		/// 
		/// Returns reference to the old parent node.
		/// 
		public readonly Node OldParentNode=null;
		
		/// 
		/// Reference to the new parent node if event is not cancelled.
		/// 
		public readonly Node NewParentNode=null;
        /// 
        /// Gets or sets whether drag node is being copied instead of moved.
        /// 
        public bool IsCopy = false;
        /// 
        /// Gets or sets the new insert position inside of NewParentNode.Nodes collection for the node being dragged. If InsertPosition is -1 
        /// the ParentNode refers to the current mouse over node and drag & drop node will be added as child node to it.
        /// 
        public int InsertPosition = 0;
	}
}