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 AdvancedDataGridView;
using System.Reflection;
using System.Collections;
using CommonLang.Property;

namespace CommonFroms.Utils.TreeGrid
{
    public partial class G2DTreeDataGrid : UserControl
    {
        private G2DTreeGridDocument selected_doc ;

        public readonly Image img_icon_men;

        public G2DTreeDataGrid()
        {
            InitializeComponent();
            this.img_icon_men = imageList1.Images["icon_men.png"];
        }

        //-------------------------------------------------------------------------------------------

        public object SelectedObject
        {
            get
            {
                if (selected_doc != null)
                {
                    return selected_doc.Value;
                }
                return null;
            }
            set
            {
                SetSelectedObject(value);
            }
        }
        public G2DTreeGridValueNode CurrentValueNode
        {
            get
            {
                return treeGridView1.CurrentNode as G2DTreeGridValueNode;
            }
        }

        private void SetSelectedObject(object obj)
        {
            if (obj != null)
            {
                selected_doc = new G2DTreeGridDocument(this);
                treeGridView1.Nodes.Clear();
                treeGridView1.Nodes.Add(selected_doc);
                selected_doc.Value = (obj);
                treeGridView1.ExpandNode(selected_doc);
                treeGridView1.ExpandNode(selected_doc.DocumentElement);
            }
            else
            {
                selected_doc = null;
                treeGridView1.Nodes.Clear();
            }
        }

        private void SelectNode(int rowIndex)
        {
            try
            {
                TreeGridNode node = treeGridView1.GetNodeForRow(rowIndex);
                if (node != treeGridView1.CurrentNode)
                {
                    treeGridView1.ClearSelection();
                    node.Selected = true;
                    treeGridView1.CurrentCell = node.Cells[1];
                    treeGridView1.Invalidate();
                }
            }
            catch (Exception ) { }
        }

        //-------------------------------------------------------------------------------------------
        #region _Windows事件处理_

        // 选择 //
        private void treeGridView1_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
        {
            SelectNode(e.RowIndex);
        }
        private void treeGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            SelectNode(e.RowIndex);
        }
        private void menuNode_Opening(object sender, CancelEventArgs e)
        {
            if (CurrentValueNode != null)
            {
                CurrentValueNode.OnMenuOpening(e);
            }
        }

        private void menuNode_New_Click(object sender, EventArgs e)
        {
            if (CurrentValueNode != null)
            {
                CurrentValueNode.OnNewContentClick();
            }
        }

        private void menuNode_Delete_Click(object sender, EventArgs e)
        {
            if (CurrentValueNode != null)
            {
                CurrentValueNode.OnDelContentClick();
            }
        }

        private void menuNode_Up_Click(object sender, EventArgs e)
        {
            if (CurrentValueNode != null)
            {
                CurrentValueNode.OnMoveListItemIndexClick(-1);
            }
        }

        private void menuNode_Down_Click(object sender, EventArgs e)
        {
            if (CurrentValueNode != null)
            {
                CurrentValueNode.OnMoveListItemIndexClick(1);
            }
        }


        #endregion


        //-------------------------------------------------------------------------------------------


    }

}