using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Windows.Forms;

namespace Mesnac.Basic
{
    /// <summary>
    /// 路径类
    /// </summary>
    public class IntakePath
    {
        #region 字段定义

        private int oldStatus = 0;
        private List<IntakeNode> tubes = new List<IntakeNode>();
        private List<IntakeNode> valves = new List<IntakeNode>();

        #endregion

        #region 构造方法

        public IntakePath() { }

        public IntakePath(IntakePath path)
        {
            this.tubes.AddRange(path.Tubes);
            this.valves.AddRange(path.Valves);
        }

        #endregion

        #region 属性定义

        /// <summary>
        /// 路径的原始状态
        /// </summary>
        public int OldStatus
        {
            get { return oldStatus; }
            set { oldStatus = value; }
        }
        /// <summary>
        /// 路径中的管道集合
        /// </summary>
        public List<IntakeNode> Tubes
        {
            get { return tubes; }
            set { tubes = value; }
        }
        /// <summary>
        /// 路径中阀门集合
        /// </summary>
        public List<IntakeNode> Valves
        {
            get { return valves; }
            set { valves = value; }
        }

        #endregion
    }
    /// <summary>
    /// 路径节点
    /// </summary>
    public class IntakeNode
    {
        #region 字段定义

        private Control ctl;
        private PropertyInfo linkProperty;
        private PropertyInfo controlProperty;

        #endregion

        #region 构造方法

        public IntakeNode() { }

        public IntakeNode(Control ctl)
        {
            this.ctl = ctl;
        }

        public IntakeNode(IntakeNode parent)
        {
            this.ctl = parent.ctl;
            this.linkProperty = parent.linkProperty;
            this.controlProperty = parent.controlProperty;
        }

        public IntakeNode(Control ctl, PropertyInfo linkProperty)
        {
            this.ctl = ctl;
            this.linkProperty = linkProperty;
        }

        #endregion

        #region 属性定义

        /// <summary>
        /// 节点控件
        /// </summary>
        public Control Ctl
        {
            get { return ctl; }
            set { ctl = value; }
        }
        /// <summary>
        /// 节点链接属性
        /// </summary>
        public PropertyInfo LinkProperty
        {
            get { return linkProperty; }
            set { linkProperty = value; }
        }
        /// <summary>
        /// 节点控制属性
        /// </summary>
        public PropertyInfo ControlProperty
        {
            get { return controlProperty; }
            set { controlProperty = value; }
        }

        #endregion
    }
}