/// <summary> /// 添加一个方法对象到动作流中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ToolStripMenuItem_Add_Click(object sender, EventArgs e) { Type methodType = currNode.Tag as Type; string dafaultNewName = _methodFlow.GetDefaultNameWillAddMethod(methodType); BenameDialog bnd = new BenameDialog(); bnd.Text = "新方法节点命名"; bnd.SetName(dafaultNewName); if (DialogResult.OK != bnd.ShowDialog()) { return; } IJFMethod newMethod = JFMethodFlow.CreateMethod(methodType.Name); bool isOK = _methodFlow.Add(newMethod, bnd.GetName()); if (isOK) { ToolStripMenuItem_Insert.Enabled = true; ShowTips("添加动作节点成功!"); UpdateFlow2UI(); } else { MessageBox.Show("添加动作节点失败,请检查动作名称是否已存在于流程中!"); return; } }
private void ToolStripMenuItem_Insert_Click(object sender, EventArgs e) { int idx = toolStripComboBox_Index.SelectedIndex; if (idx < 0) { MessageBox.Show("请选择动作节点序号"); return; } Type methodType = currNode.Tag as Type; string dafaultNewName = _methodFlow.GetDefaultNameWillAddMethod(methodType); BenameDialog bnd = new BenameDialog(); bnd.Text = "新方法节点命名"; bnd.SetName(dafaultNewName); if (DialogResult.OK != bnd.ShowDialog()) { return; } IJFMethod newMethod = JFMethodFlow.CreateMethod(methodType.Name); bool isOK = _methodFlow.Insert(newMethod, idx, bnd.GetName()); if (isOK) { ShowTips("插入动作节点成功!"); UpdateFlow2UI(); } else { MessageBox.Show("插入动作节点失败,请检查\n节点序号是否超限/动作名称是否已存在于流程中!"); return; } }
List <UcJFParamEdit> _lstUcParam = new List <UcJFParamEdit>();//保存初始化参数编辑面板 public void SetMethod(IJFMethod method) { _method = method; if (_isFormLoaded) { AdjustView(); } }
public void UpdateDataPoolRow() { if (InvokeRequired) { Invoke(new Action(UpdateDataPoolRow)); return; } if (null == _methodFlow) { return; } int mtdCount = _methodFlow.Count; List <string> ExistOutputIDs = new List <string>(); dgvDataPool.Rows.Clear(); for (int i = 0; i < mtdCount; i++) { JFMethodFlow.MethodItem mi = _methodFlow.GetItem(i); ///获取各Method对象的实时界面 IJFMethod mtd = mi.Value; ///更新数据池列表(内部) string[] outputNames = mi.Value.MethodOutputNames; if (null != outputNames) { foreach (string outname in outputNames) { DataGridViewRow row = new DataGridViewRow(); DataGridViewTextBoxCell cellName = new DataGridViewTextBoxCell(); string outputID = mi.OutputID(outname); cellName.Value = outputID; ExistOutputIDs.Add(outputID); row.Cells.Add(cellName); DataGridViewTextBoxCell cellValue = new DataGridViewTextBoxCell(); row.Cells.Add(cellValue); dgvDataPool.Rows.Add(row); } } } dgvOutterDataPool.Rows.Clear(); ///跟新外部数据池 string[] OutterAvailedDataIDs = _methodFlow.OutterAvailedIDs; if (null != OutterAvailedDataIDs) { foreach (string dataID in OutterAvailedDataIDs) { DataGridViewRow row = new DataGridViewRow(); DataGridViewTextBoxCell cellName = new DataGridViewTextBoxCell(); cellName.Value = dataID; ExistOutputIDs.Add(dataID); row.Cells.Add(cellName); DataGridViewTextBoxCell cellValue = new DataGridViewTextBoxCell(); row.Cells.Add(cellValue); dgvOutterDataPool.Rows.Add(row); } } }
/// <summary> /// 更新动作流面板和数据池面板 /// </summary> public void UpdateFlow2UI() { if (InvokeRequired) { Invoke(new Action(UpdateFlow2UI)); return; } pnFlow.Controls.Clear(); dgvDataPool.Rows.Clear(); dgvOutterDataPool.Rows.Clear(); _lstBtDel.Clear(); _lstBtAct.Clear(); _lstRtUi.Clear(); if (null == _methodFlow) { return; } int mtdCount = _methodFlow.Count; List <string> ExistOutputIDs = new List <string>(); //for (int i = 0; i < mtdCount; i++) // ExistOutputIDs.AddRange(_methodFlow.GetItem(i).OutputNameIDs.Values); int locX = 0, locY = 3; for (int i = 0; i < mtdCount; i++) { JFMethodFlow.MethodItem mi = _methodFlow.GetItem(i); ///获取各Method对象的实时界面 IJFMethod mtd = mi.Value; if (mtd is IJFRealtimeUIProvider) { _lstRtUi.Add((mtd as IJFRealtimeUIProvider).GetRealtimeUI()); } else { _lstRtUi.Add(null); } Label lbMiName = new Label(); //动作单元名称 lbMiName.Text = i + ":" + mi.Name; lbMiName.Location = new Point(locX, locY + 3); pnFlow.Controls.Add(lbMiName); Button btDel = new Button(); Button btAct = new Button(); btAct.Text = "执行"; btAct.Width = 37; btAct.Location = new Point(270 - btAct.Width, locY);//270为UcMethodNode对象的宽度 btAct.Click += OnButtonClick_MethodItemAction; _lstBtAct.Add(btAct); pnFlow.Controls.Add(btAct); btDel.Text = "删除"; btDel.Width = 37; btDel.Location = new Point(btAct.Left - btDel.Width - 10, locY);//270为UcMethodNode对象的宽度 btDel.Click += OnButtonClick_DelMethodItem; _lstBtDel.Add(btDel); pnFlow.Controls.Add(btDel); locY = btDel.Bottom + 2; UcMethodNode mn = new UcMethodNode(); mn.SetMethodItem(mi); mn.EventShowInfo += ShowMethodItemInfo; mn.Location = new Point(locX, locY); pnFlow.Controls.Add(mn); mn.UpdateAvailableIDs(_methodFlow.UnexportIDs);//(mi.AvailedInputIDs/*allOutputID.ToArray()*/); locY = mn.Bottom + 2; ///更新数据池列表(内部) string[] outputNames = mi.Value.MethodOutputNames; if (null != outputNames) { foreach (string outname in outputNames) { DataGridViewRow row = new DataGridViewRow(); DataGridViewTextBoxCell cellName = new DataGridViewTextBoxCell(); string outputID = mi.OutputID(outname); cellName.Value = outputID; ExistOutputIDs.Add(outputID); row.Cells.Add(cellName); DataGridViewTextBoxCell cellValue = new DataGridViewTextBoxCell(); row.Cells.Add(cellValue); dgvDataPool.Rows.Add(row); } } } foreach (string key in _methodFlow.DataPool.Keys) //更新数据池中的其他变量(不是算子的输出) { if (!ExistOutputIDs.Contains(key)) { DataGridViewRow row = new DataGridViewRow(); DataGridViewTextBoxCell cellName = new DataGridViewTextBoxCell(); cellName.Value = key; ExistOutputIDs.Add(key); row.Cells.Add(cellName); DataGridViewTextBoxCell cellValue = new DataGridViewTextBoxCell(); row.Cells.Add(cellValue); dgvDataPool.Rows.Add(row); } } ///跟新外部数据池 string[] OutterAvailedDataIDs = _methodFlow.OutterAvailedIDs; if (null != OutterAvailedDataIDs) { foreach (string dataID in OutterAvailedDataIDs) { DataGridViewRow row = new DataGridViewRow(); DataGridViewTextBoxCell cellName = new DataGridViewTextBoxCell(); cellName.Value = dataID; ExistOutputIDs.Add(dataID); row.Cells.Add(cellName); DataGridViewTextBoxCell cellValue = new DataGridViewTextBoxCell(); row.Cells.Add(cellValue); dgvOutterDataPool.Rows.Add(row); } } UpdatePoolValues(); }