using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DocumentManagement.Properties;
namespace DocumentManagement
{
    [DisplayName("文书目录控件")]
    [Description("文书目录")]
    [ToolboxItem(true)]
    public partial class ucClassify : UserControl
    {
        [BrowsableAttribute(true), Description("是否为只读模式")]
        public bool IsReadOnly { get; set; }
        [BrowsableAttribute(false)]
        public TreeView tv { get { return this.treeView1; } }
        [BrowsableAttribute(false)]
        public ContextMenuStrip ms { get { return this.contextMenuStrip1; } }
        public ucClassify()
        {
            InitializeComponent();
#if DEBUG
            TreeNode t = new TreeNode("测试项目1");
            t.Nodes.Add(new TreeNode("测试子项目1"));
             TreeNode t1 = new TreeNode("测试项目2");
            t1.Nodes.Add(new TreeNode("测试子项目2"));
            t1.Nodes.Add(new TreeNode("测试子项目3"));
            treeView1.Nodes.Add(t);
            treeView1.Nodes.Add(t1);
#endif
        }
        
        /// 
        /// 刷新目录
        /// 
        /// 节点名称
        public void RefreshTree(string txtName = null)
        {
            this.treeView1.Nodes.Clear();
            //加载节点
            List listT = DocumentDAL.LoadTemplateTree();
            List listP = listT.Where(x => x.ParentId == 0).OrderBy(x => x.TemplateOrder).ToList();
            foreach (var item in listP)
            {
                TreeNode node = new TreeNode(item.XmlFileName);
                node.Name = item.Id.ToString();
                node.Tag = item;
                treeView1.Nodes.Add(node);
                node.ImageIndex = 0;
                List listC1 = listT.Where(x => x.ParentId == item.Id).OrderBy(x => x.TemplateOrder).ToList();
                foreach (var item2 in listC1)
                {
                    TreeNode node2 = new TreeNode(item2.XmlFileName);
                    node2.Name = item2.Id.ToString();
                    node2.Tag = item2;
                    node2.ImageIndex = 2;
                    node2.SelectedImageIndex = 2;
                    node.Nodes.Add(node2);
                    if (txtName != null && txtName == node2.Name)
                    {
                        treeView1.SelectedNode = node2;
                    }
                }
            }
            this.treeView1.ExpandAll();
            this.treeView1.Refresh();
        }
        /// 
        /// 刷新目录
        /// 
        /// 患者Id
        public void RefreshTree(int patientId)
        {
            this.treeView1.Nodes.Clear();
            //加载节点
            List listT = DocumentDAL.LoadTemplateTree(patientId);
            List listP = listT.Where(x => x.ParentId == 0).OrderBy(x => x.TemplateOrder).ToList();
            foreach (var item in listP)
            {
                TreeNode node = new TreeNode(item.XmlFileName);
                node.Name = item.Id.ToString();
                node.Tag = item.PrintDocumentId;
                treeView1.Nodes.Add(node);
                node.ImageIndex = 0;
                List listC1 = listT.Where(x => x.ParentId == item.Id).OrderBy(x => x.TemplateOrder).ToList();
                foreach (var item2 in listC1)
                {
                    TreeNode node2 = new TreeNode(item2.XmlFileName);
                    node2.Name = item2.Id.ToString();
                    node2.Tag = item2.PrintDocumentId;
                    node2.ImageIndex = item2.PrintDocumentId > 0 ? 1 : 2;
                    node2.SelectedImageIndex = item2.PrintDocumentId > 0 ? 1 : 2;
                    node.Nodes.Add(node2);
                }
            }
            this.treeView1.ExpandAll();
            this.treeView1.Refresh();
        }
        void treeView1_MouseClick(object sender, MouseEventArgs e)
        {
            TreeNode node = treeView1.SelectedNode;
            if (e.Button == MouseButtons.Right)
            {
                if (node != null && node.Parent == null)
                {
                    this.添加子目录ToolStripMenuItem.Enabled = true;
                    this.删除当前节点ToolStripMenuItem.Enabled = false;
                }
                else
                {
                    this.添加子目录ToolStripMenuItem.Enabled = false;
                    this.删除当前节点ToolStripMenuItem.Enabled = true;
                }
                contextMenuStrip1.Show(Control.MousePosition.X, Control.MousePosition.Y);
            }
        }
        void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            if (((TreeNode)e.Item).Parent == null)
            {
                return;
            }
            DoDragDrop(e.Item, DragDropEffects.Move);
        }
        void treeView1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(TreeNode)))
                e.Effect = DragDropEffects.Move;
            else
                e.Effect = DragDropEffects.None;
        }
        void treeView1_DragDrop(object sender, DragEventArgs e)
        {
            TreeNode moveNode = (TreeNode)e.Data.GetData(typeof(TreeNode));
            Point p = treeView1.PointToClient(new Point(e.X, e.Y));
            TreeNode DropNode = this.treeView1.GetNodeAt(p);
            if (DropNode == null)
            {
                return;
            }
            if (DropNode.Parent != null)
            {
                DropNode = DropNode.Parent;
            }
            // 1.目标节点不是被拖拽接点的子节点。2.目标节点不是被拖拽节点本身
            if (DropNode.Parent != moveNode 
                && DropNode != moveNode)
            {
                TreeNode tempNode = moveNode;
                // 将被拖拽节点从原来位置删除。
                moveNode.Remove();
                // 在目标节点下增加被拖拽节点
                DropNode.Nodes.Add(tempNode);
                DropNode.Expand();
            }
            // 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
            //if (DropNode == null)
            //{
            //    TreeNode DragNode = moveNode;
            //    moveNode.Remove();
            //    treeView1.Nodes.Add(DragNode);
            //}
            
        }
        private void 下移ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (treeView1.SelectedNode == null)
            {
                MessageBox.Show("请选择一个节点!");
                return;
            }
            if (treeView1.SelectedNode.NextNode == null)
            {
                MessageBox.Show("当前节点已是末节点!");
                return;
            }
            TreeNode Node = treeView1.SelectedNode;
            TreeNode NextNode = Node.NextNode;
            TreeNode NewNode = (TreeNode)Node.Clone();
            if (Node.Parent == null)
            {
                treeView1.Nodes.Insert(NextNode.Index + 1, NewNode);
            }
            else
            {
                Node.Parent.Nodes.Insert(NextNode.Index + 1, NewNode);
            }
            Node.Remove();
            treeView1.SelectedNode = NewNode;
            RefreshOrders(NewNode);
        }
        private void RefreshOrders(TreeNode node)
        {
            TreeNode pNode = node.Parent;
            List ls = new List();
            if (pNode == null)
            {
                for (int i = 0; i < this.treeView1.Nodes.Count; i++)
                {
                    ls.Add(treeView1.Nodes[i].Name);
                }
            }
            else
            {
                for (int i = 0; i < pNode.Nodes.Count; i++)
                {
                    ls.Add(pNode.Nodes[i].Name);
                }
            }
            if (ls.Count > 0)
            {
                DocumentDAL.SetTempOrders(ls);
            }
        }
        private void 上移ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (treeView1.SelectedNode == null)
            {
                MessageBox.Show("请选择一个节点!");
                return;
            }
            if (treeView1.SelectedNode.PrevNode == null)
            {
                MessageBox.Show("当前节点已是第一节点!");
                return;
            }
            TreeNode Node = treeView1.SelectedNode;
            TreeNode PreNode = Node.PrevNode;
            TreeNode NewNode = (TreeNode)Node.Clone();
            if (Node.Parent == null)
            {
                treeView1.Nodes.Insert(PreNode.Index, NewNode);
            }
            else
            {
                Node.Parent.Nodes.Insert(PreNode.Index, NewNode);
            }
            Node.Remove();
            treeView1.SelectedNode = NewNode;
            RefreshOrders(NewNode);
        }
        private void 新建同级目录ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmTitle f = new frmTitle();
            f.model = new PrintTemplate();
            f.ShowDialog();
        }
        private void ucClassify_Load(object sender, EventArgs e)
        {
            ImageList myImageList = new ImageList();
            myImageList.Images.Add(Resources.父节点);
            myImageList.Images.Add(Resources.完成2);
            myImageList.Images.Add(Resources.未完成2);
            treeView1.ImageList = myImageList;
            if (!IsReadOnly)
            {
                treeView1.AllowDrop = true;
                treeView1.ItemDrag += new ItemDragEventHandler(treeView1_ItemDrag);
                treeView1.DragEnter += new DragEventHandler(treeView1_DragEnter);
                treeView1.DragDrop += new DragEventHandler(treeView1_DragDrop);
                treeView1.MouseClick += new MouseEventHandler(treeView1_MouseClick);
                //RefreshTree();
            }
        }
    }
}