/// <summary> /// 执行命令 /// </summary> /// <param name="o">当前对象</param> /// <returns>是否执行成功</returns> public override bool Execute(object o) { bool success = true; Helper helper = Helper.GetHelper(); object[] args = o as object[]; SlotGraphElement slot = args[0] as SlotGraphElement; ConnectorGraphElement connector = args[1] as ConnectorGraphElement; // 保存命令执行前的数据 if (firstCommand) // 只有第一条命令保存执行前的数据 { SaveBeforeExecute(flowChartManager.GetArguments()); } description = "连接图元 " + slot.SlotContainer.Name; slot.Bind(connector); // 执行逻辑功能 LogicBaseManager logicManager = helper.GetLogicManager(flowChartManager.CurrentChartMode); success = logicManager.DoLogicOperation(flowChartManager, LogicType.Connect, o); if (success) // 保存命令执行后的数据 { flowChartManager.ContentChanged = true; SaveAfterExecute(flowChartManager.GetArguments()); } return(success); }
/// <summary> /// 执行命令 /// </summary> /// <param name="o">当前对象</param> /// <returns>是否执行成功</returns> public override bool Execute(object o) { bool success = true; Helper helper = Helper.GetHelper(); object[] args = o as object[]; SlotGraphElement outSlot = args[0] as SlotGraphElement; SlotGraphElement inSlot = args[1] as SlotGraphElement; // 保存命令执行前的数据 if (firstCommand) // 只有第一条命令保存执行前的数据 { SaveBeforeExecute(flowChartManager.GetArguments()); } // 执行逻辑操作 LogicBaseManager logicManager = helper.GetLogicManager(flowChartManager.CurrentChartMode); logicManager.DoLogicOperation(flowChartManager, LogicType.CreateAndConnectLine, o); ConnectorContainer line = graphManager.SelectedGraphElement as ConnectorContainer; outSlot.Bind(line.GetConnectorList()[0]); inSlot.Bind(line.GetConnectorList()[1]); graphManager.ConnectorContainerList.Add(line); graphManager.SelectGraphElement(line, false); description = "创建并连接图元 " + outSlot.SlotContainer.Name + " - " + inSlot.SlotContainer.Name; dataManager.AddDataElement(line); graphManager.ReconstructCanvasGraphElementList(); // 执行逻辑操作 object[] logicData = new object[] { outSlot, outSlot.BindingConnector }; logicManager.DoLogicOperation(flowChartManager, LogicType.Connect, logicData); if (success) // 保存命令执行后的数据 { flowChartManager.ContentChanged = true; SaveAfterExecute(flowChartManager.GetArguments()); } return(success); }
/// <summary> /// 执行命令 /// </summary> /// <param name="o">当前对象</param> /// <returns>是否执行成功</returns> public override bool Execute(object o) { bool success = true; // 执行逻辑操作 LogicBaseManager logicManager = Helper.GetHelper().GetLogicManager(documentManager.CurrentChartMode); logicManager.DoLogicOperation(documentManager.CurrentFlowChartManager, LogicType.CreateChart, o); return(success); }
/// <summary> /// 执行命令 /// </summary> /// <param name="o">当前对象</param> /// <returns>是否执行成功</returns> public override bool Execute(object o) { bool success = true; Helper helper = Helper.GetHelper(); SlotGraphElement slot = o as SlotGraphElement; // 保存命令执行前的数据 if (firstCommand) // 只有第一条命令保存执行前的数据 { SaveBeforeExecute(flowChartManager.GetArguments()); } ConnectorGraphElement connector = slot.BindingConnector; ConnectorContainer line = connector.Line; SlotContainer slotContainer = slot.SlotContainer; description = "解除连接图元 " + slotContainer.Name; slot.UnBind(); if (slot.CanDelete && (slot.IsInSlot || slot.SlotContainer.OutSlotCount > 1)) // 插槽可以删除 { slotContainer.RemoveSlot(slot); } // 执行逻辑操作 LogicBaseManager logicManager = helper.GetLogicManager(flowChartManager.CurrentChartMode); object[] logicData = new object[] { slot, connector }; logicManager.DoLogicOperation(flowChartManager, LogicType.Disconnect, logicData); if (success) // 保存命令执行后的数据 { flowChartManager.ContentChanged = true; SaveAfterExecute(flowChartManager.GetArguments()); } return(success); }
/// <summary> /// 删除图元 /// </summary> /// <param name="graphElement">要删除的图元</param> /// <return>是否删除成功</return> protected bool DeleteGraphElement(GraphElement graphElement) { Helper helper = Helper.GetHelper(); GraphManager graphManager = data as GraphManager; FlowChartManager flowChartManager = graphManager.CurrentFlowChartManager; DataManager dataManager = flowChartManager.CurrentDataManager; bool deleteSuccess = false; // 是否删除成功 // 执行逻辑操作 LogicBaseManager logicManager = helper.GetLogicManager(flowChartManager.CurrentChartMode); logicManager.DoLogicOperation(flowChartManager, LogicType.BeforeDelete, graphElement); if (graphElement is SlotContainer) // 要删除的图元是插槽容器 { SlotContainer slotContainer = graphElement as SlotContainer; List <GraphElement> graphElementList = new List <GraphElement>(); // 解除绑定连接线控制点 foreach (ConnectorContainer line in slotContainer.GetConnectedLine()) { graphElementList.Add(line); } slotContainer.UnBind(); // 执行逻辑操作 logicManager.DoLogicOperation(flowChartManager, LogicType.AfterDelete, graphElementList); graphManager.SlotContainerList.Remove(slotContainer); // 从插槽容器索引链表中删除 deleteSuccess = true; } else if (graphElement is ConnectorContainer) // 要删除的图元是连接线控制点容器 { ConnectorContainer connectorContainer = graphElement as ConnectorContainer; List <GraphElement> graphElementList = new List <GraphElement>(); SlotContainer inSlotContainer = connectorContainer.InSlotContainer; if (inSlotContainer != null) { connectorContainer.UnbindInSlotContainer(); } SlotContainer outSlotContainer = connectorContainer.OutSlotContainer; if (outSlotContainer != null) { graphElementList.Add(outSlotContainer); connectorContainer.UnbindOutSlotContainer(); } // 执行逻辑操作 logicManager.DoLogicOperation(flowChartManager, LogicType.AfterDelete, graphElementList); graphManager.ConnectorContainerList.Remove(connectorContainer); // 从连接线控制点索引容器中删除 deleteSuccess = true; } else if (graphElement is ConnectorGraphElement) // 要删除的图元是连接线控制点 { ConnectorGraphElement connector = graphElement as ConnectorGraphElement; ConnectorContainer connectorContainer = connector.Line; List <GraphElement> graphElementList = new List <GraphElement>(); SlotContainer inSlotContainer = connectorContainer.InSlotContainer; if (inSlotContainer != null) { connectorContainer.UnbindInSlotContainer(); } SlotContainer outSlotContainer = connectorContainer.OutSlotContainer; if (outSlotContainer != null) { graphElementList.Add(outSlotContainer); connectorContainer.UnbindOutSlotContainer(); } // 执行逻辑操作 logicManager.DoLogicOperation(flowChartManager, LogicType.AfterDelete, graphElementList); graphManager.ConnectorContainerList.Remove(connectorContainer); // 从连接线控制点索引容器中删除 deleteSuccess = true; } else if (graphElement is SlotGraphElement) // 要删除的图元是插槽 { SlotGraphElement slot = graphElement as SlotGraphElement; if (slot.CanDelete && (slot.IsInSlot || slot.SlotContainer.OutSlotCount > 1)) // 插槽可以删除 { SlotContainer slotContainer = slot.SlotContainer; slotContainer.RemoveSlot(slot); deleteSuccess = true; } else { MessageBox.Show("该插槽不能删除", "图元删除", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else if (graphElement is RemarkGraphElement) // 要删除的图元是注释结点 { RemarkGraphElement remarkGraphElement = graphElement as RemarkGraphElement; SlotContainer slotContainer = remarkGraphElement.Owner as SlotContainer; slotContainer.RemarkNode = null; remarkGraphElement.Owner = null; remarkGraphElement = null; deleteSuccess = true; } if (deleteSuccess) // 释放图元所占的资源 { dataManager.DeleteData(graphElement); graphElement.Release(); } return(deleteSuccess); }