private void buttonNodeDelete_Click(object sender, EventArgs e)
        {
            NodeFormula node = waData.FormulaList.Find(nf => nf.NodeName == treeViewWeightSortNode.SelectedNode.Text);

            waData.FormulaList.Remove(node);

            treeViewWeightSortNode.Nodes.Remove(treeViewWeightSortNode.SelectedNode);

            if (treeViewWeightSortNode.Nodes.Count == 0)
            {
                treeViewWeightSortNode.SelectedNode = treeViewWeightSortNode.Nodes[0];
            }
        }
        private void buttonCancel_Click(object sender, EventArgs e)
        {
            TreeNode      node = treeViewWeightSortNode.SelectedNode;
            NodeFormula   nf   = (NodeFormula)node.Tag;
            WeightFormula wf   = nf[nEditFormulaIndex];

            if (nEditFormulaIndex == 0)
            {
                textBoxFormulaX.Text     = wf.Formula;
                textBoxFormulaX.Modified = false;
            }
            else
            {
                textBoxFormulaY.Text     = wf.Formula;
                textBoxFormulaY.Modified = false;
            }

            SetEditMode(1);
        }
        private void buttonEdit_Click(object sender, EventArgs e)
        {
            nEditFormulaIndex = (sender == buttonEditX) ? 0 : 1;

            TreeNode      node = treeViewWeightSortNode.SelectedNode;
            NodeFormula   nf   = (NodeFormula)node.Tag;
            WeightFormula wf   = nf[nEditFormulaIndex];

            dictTempPara.Clear();

            foreach (WeightParameter wp in wf.ParaList)
            {
                //if (WeightArithmetic.FindGlobleParameters(wp.ParaName, null).Count > 1)
                //{
                dictTempPara.Add(wp.ParaName, wp.ParaUnit);
                //}
            }

            textBoxFormulaEdit.Text = wf.Formula;
            SetEditMode(2);
            textBoxFormulaEdit.Focus();
            textBoxFormulaEdit.SelectionStart = textBoxFormulaEdit.TextLength;
        }
        private void buttonApplyNodeName_Click(object sender, EventArgs e)
        {
            string nodename = textBoxNodeName.Text;

            nodename = nodename.Trim();
            if (nodename.Length == 0)
            {
                MessageBox.Show("节点名称为空!");
                return;
            }
            if (XCommon.Verification.IsCheckString(nodename))
            {
                MessageBox.Show("节点名称含有非法字符!");
                return;
            }

            TreeNode pnode = treeViewWeightSortNode.Nodes[0];
            TreeNode node  = treeViewWeightSortNode.SelectedNode;

            if (node == null)
            {
                node = pnode;
            }

            if (nNodeEditMode == 2)
            {
                if (node == pnode)
                {
                    MessageBox.Show("不能修改根节点!");
                    return;
                }
                if (nodename == node.Text)
                {
                    return;
                }
            }

            if (pnode.Nodes.ContainsKey(nodename))
            {
                MessageBox.Show("算法中已含有该节点!");
                return;
            }

            if (nNodeEditMode == 2)
            {
                if (node != pnode)
                {
                    var tempnf = waData.FormulaList.Find(nf => nf.NodeName == node.Name);

                    XCommon.XLog.Write("修改节点名称成功,\"" + node.Name + "\"修改为\"" + nodename + "\"!");
                    node.Name       = nodename;
                    node.Text       = nodename;
                    tempnf.NodeName = nodename;
                }
            }
            else
            {
                TreeNode newNode = null;
                if (node != pnode)
                {
                    newNode = pnode.Nodes.Insert(node.Index, nodename, nodename);
                }
                else
                {
                    newNode = pnode.Nodes.Add(nodename, nodename);
                }
                XCommon.XLog.Write("成功插入节点\"" + nodename + "\"!");
                if (!pnode.IsExpanded)
                {
                    pnode.Expand();
                }

                NodeFormula nf = new NodeFormula(newNode.Text);
                newNode.Tag = nf;

                waData.FormulaList.Add(nf);
            }
        }
        private void buttonApply_Click(object sender, EventArgs e)
        {
            string errmsg;

            ZstExpression.CExpression expr = ZstExpression.CExpression.Parse(textBoxFormulaEdit.Text, out errmsg);

            if (expr == null)
            {
                MessageBox.Show(errmsg);
                return;
            }
            textBoxFormulaEdit.Text = expr.GetExpression();

            TreeNode      node = treeViewWeightSortNode.SelectedNode;
            NodeFormula   nf   = (NodeFormula)node.Tag;
            WeightFormula wf   = nf[nEditFormulaIndex];

            wf.Formula = textBoxFormulaEdit.Text;
            List <string> paras = new List <string>();

            expr.GetVariables(ref paras);

            wf.ParaList.Clear();

            foreach (string paraname in paras)
            {
                WeightParameter wp = null;
                if (dictTempPara.ContainsKey(paraname))
                {
                    wp = FindParameter(paraname, dictTempPara[paraname]);
                }
                else
                {
                    wp = FindParameter(paraname, null);
                }
                if (wp == null)
                {
                    wp          = new WeightParameter();
                    wp.ParaName = paraname;
                    wp.ParaType = 10;
                }
                wf.ParaList.Add(wp);
            }
            HashSet <WeightParameter> wpSet = new HashSet <WeightParameter>();

            foreach (WeightParameter wp in nf.XFormula.ParaList)
            {
                wpSet.Add(wp);
            }
            foreach (WeightParameter wp in nf.YFormula.ParaList)
            {
                wpSet.Add(wp);
            }
            SetParaList(wpSet);

            if (nEditFormulaIndex == 0)
            {
                textBoxFormulaX.Text     = wf.Formula;
                textBoxFormulaX.Modified = false;
            }
            else
            {
                textBoxFormulaY.Text     = wf.Formula;
                textBoxFormulaY.Modified = false;
            }

            SetEditMode(1);

            dateTimePickerLastModifyTime.Value = DateTime.Today;
        }
        private void treeViewWeightSortNode_AfterSelect(object sender, TreeViewEventArgs e)
        {
            SetEditMode(1);

            HashSet <WeightParameter> wpSet = new HashSet <WeightParameter>();

            TreeNode node = e.Node;

            if (node.Nodes.Count == 0)
            {
                TreeNode pnode = treeViewWeightSortNode.Nodes[0];

                NodeFormula nf = (NodeFormula)node.Tag;

                if (nf == null)
                {
                    if (pnode != node)
                    {
                        MessageBox.Show("异常错误!节点无对应公式!");
                    }
                    buttonEditX.Enabled = false;
                    buttonEditY.Enabled = false;
                }
                else
                {
                    textBoxFormulaX.Text = nf.XFormula.Formula;
                    textBoxFormulaY.Text = nf.YFormula.Formula;

                    foreach (WeightParameter wp in nf.XFormula.ParaList)
                    {
                        wpSet.Add(wp);
                    }
                    foreach (WeightParameter wp in nf.YFormula.ParaList)
                    {
                        wpSet.Add(wp);
                    }

                    buttonEditX.Enabled = true;
                    buttonEditY.Enabled = true;
                }
                buttonNodeEdit.Enabled   = (pnode != node);
                buttonNodeDelete.Enabled = (pnode != node);

                buttonNodeMoveUp.Enabled   = (pnode != node) && (pnode.FirstNode != node);
                buttonNodeMoveDown.Enabled = (pnode != node) && (pnode.LastNode != node);

                if (nNodeEditMode == 2)
                {
                    textBoxNodeName.Text = node.Text;
                }
            }
            else
            {
                buttonEditX.Enabled        = false;
                buttonEditY.Enabled        = false;
                buttonNodeEdit.Enabled     = false;
                buttonNodeDelete.Enabled   = false;
                buttonNodeMoveUp.Enabled   = false;
                buttonNodeMoveDown.Enabled = false;

                listViewPara.Items.Clear();

                List <TreeNode> ret = new List <TreeNode>();
                GetFinalNodeList(node, ref ret);

                foreach (TreeNode finalnode in ret)
                {
                    NodeFormula nf = (NodeFormula)finalnode.Tag;
                    if (nf == null)
                    {
                        MessageBox.Show("异常错误!节点无对应公式!");
                        return;
                    }
                    foreach (WeightParameter wp in nf.XFormula.ParaList)
                    {
                        wpSet.Add(wp);
                    }
                    foreach (WeightParameter wp in nf.YFormula.ParaList)
                    {
                        wpSet.Add(wp);
                    }
                }

                textBoxFormulaX.Text = "-";
                textBoxFormulaY.Text = "-";
            }
            SetParaList(wpSet);
        }
        private void buttonApplyNodeName_Click(object sender, EventArgs e)
        {
            string nodename = textBoxNodeName.Text;
            nodename = nodename.Trim();
            if (nodename.Length == 0)
            {
                MessageBox.Show("节点名称为空!");
                return;
            }
            if (XCommon.Verification.IsCheckString(nodename))
            {
                MessageBox.Show("节点名称含有非法字符!");
                return;
            }

            TreeNode pnode = treeViewWeightSortNode.Nodes[0];
            TreeNode node = treeViewWeightSortNode.SelectedNode;

            if (node == null)
            {
                node = pnode;
            }

            if (nNodeEditMode == 2)
            {
                if (node == pnode)
                {
                    MessageBox.Show("不能修改根节点!");
                    return;
                }
                if (nodename == node.Text)
                {
                    return;
                }
            }

            if (pnode.Nodes.ContainsKey(nodename))
            {
                MessageBox.Show("算法中已含有该节点!");
                return;
            }

            if (nNodeEditMode == 2)
            {
                if (node != pnode)
                {
                    var tempnf = waData.FormulaList.Find(nf => nf.NodeName == node.Name);

                    XCommon.XLog.Write("修改节点名称成功,\"" + node.Name + "\"修改为\"" + nodename + "\"!");
                    node.Name = nodename;
                    node.Text = nodename;
                    tempnf.NodeName = nodename;
                }
            }
            else
            {
                TreeNode newNode = null;
                if (node != pnode)
                {
                    newNode = pnode.Nodes.Insert(node.Index, nodename, nodename);
                }
                else
                {
                    newNode = pnode.Nodes.Add(nodename, nodename);
                }
                XCommon.XLog.Write("成功插入节点\"" + nodename + "\"!");
                if (!pnode.IsExpanded)
                {
                    pnode.Expand();
                }

                NodeFormula nf = new NodeFormula(newNode.Text);
                newNode.Tag = nf;

                waData.FormulaList.Add(nf);
            }
        }