/// <summary> /// 初始化数据元 /// </summary> /// <param name="graphElement">索引的图元</param> /// <returns>数据元</returns> public DataElement InitDataElement(GraphElement graphElement) { // 执行逻辑操作 LogicBaseManager logicManager = Helper.GetHelper().GetLogicManager(flowChartManager.CurrentChartMode); logicManager.DoLogicOperation(flowChartManager, LogicType.InitializeDataElement, graphElement); return(initializedDataElement); }
/// <summary> /// 编辑数据元 /// </summary> /// <param name="graphElement">索引的图元</param> /// <returns>是否编辑成功</returns> public bool EditData(GraphElement graphElement) { bool success = false; DataElement dataElement = graphTable[graphElement] as DataElement; if (dataElement != null) // 找到该图元绑定的数据元 { // 执行逻辑操作 LogicBaseManager logicManager = Helper.GetHelper().GetLogicManager(flowChartManager.CurrentChartMode); success = logicManager.DoLogicOperation(flowChartManager, LogicType.Edit, graphElement); } else { MessageBox.Show("该图元没有绑定数据元!", "数据元编辑", MessageBoxButtons.OK, MessageBoxIcon.Information); } return(success); }
/// <summary> /// 加载逻辑管理器 /// </summary> /// <param name="filePath">文件路径</param> /// <returns>逻辑管理器</returns> private LogicBaseManager LoadLogicManager(string filePath, string className) { LogicBaseManager logicBaseManager = null; try { string fullPath = Path.Combine(Application.StartupPath, @"Plugins\FlowChart"); fullPath = Path.Combine(fullPath, filePath); Assembly assembly = Assembly.LoadFrom(fullPath); logicBaseManager = assembly.CreateInstance(className) as LogicBaseManager; } catch (Exception ex) { MessageBox.Show(string.Format("加载逻辑文件 {0} 时产生异常:\r\n{1}", filePath, ex.Message), "初始化逻辑", MessageBoxButtons.OK, MessageBoxIcon.Error); } return(logicBaseManager); }
/// <summary> /// 获取逻辑管理器实例 /// </summary> /// <param name="chartMode">当前编辑模式</param> /// <returns>逻辑管理器实例</returns> public LogicBaseManager GetLogicManager(ChartMode chartMode) { LogicBaseManager logicManager = null; switch (chartMode) { case ChartMode.FlowChart: // 编辑流程图模式 { logicManager = FlowChartLogicManager; break; } case ChartMode.AIChart: // 编辑AI图模式 { logicManager = AIChartLogicManager; break; } } return(logicManager); }
/// <summary> /// 初始化逻辑管理器 /// </summary> public void InitLogicManager() { string filePath = Path.Combine(Application.StartupPath, configFileName); if (File.Exists(filePath)) { Lua lua = new Lua(); lua.DoFile(filePath); LuaTable configTable = lua.GetTable("Config") as LuaTable; string[] diagramNameArray = new string[maxDiagramCount]; foreach (object key in configTable.Keys) { LuaTable logicManagerTable = configTable[key] as LuaTable; if (logicManagerTable != null) { // 读取逻辑管理器信息 string logicManagerFilePath = logicManagerTable["LogicManagerFilePath"] as string; string logicManagerClassName = logicManagerTable["LogicManagerClassName"] as string; LogicBaseManager logicManager = null; if (!string.IsNullOrEmpty(logicManagerFilePath) && !string.IsNullOrEmpty(logicManagerClassName)) { logicManager = LoadLogicManager(logicManagerFilePath, logicManagerClassName); } else { logicManager = new LogicBaseManager(); } // 读取显示名称 string logicManagerDisplayName = logicManagerTable["DisplayName"] as string; if (!string.IsNullOrEmpty(logicManagerDisplayName)) { logicManager.DisplayName = logicManagerDisplayName; } // 读取脚本生成插件信息 string compilerFilePath = logicManagerTable["CompilerFilePath"] as string; string compilerClassName = logicManagerTable["CompilerClassName"] as string; if (!string.IsNullOrEmpty(compilerFilePath) && !string.IsNullOrEmpty(compilerClassName)) { logicManager.InitCompiler(compilerFilePath, compilerClassName); } // 检查是否是默认分类 int index = (int)(double)logicManagerTable["Index"]; diagramNameArray[index - 1] = logicManagerDisplayName; // 读取数据元信息 LuaTable dataElementGroupTable = logicManagerTable["DataElement"] as LuaTable; if (dataElementGroupTable != null) { foreach (object graphType in dataElementGroupTable.Keys) { LuaTable dataElementConfigTable = dataElementGroupTable[graphType] as LuaTable; if (dataElementConfigTable != null) { string dataElementFilePath = dataElementConfigTable["FilePath"] as string; string dataElementClassName = dataElementConfigTable["ClassName"] as string; logicManager.RegistDataElementInfo(graphType as string, dataElementFilePath, dataElementClassName); } } } logicManagerDictionary[logicManager.DisplayName] = logicManager; } } foreach (string displayName in diagramNameArray) { if (displayName != null) { diagramNameList.Add(displayName); } } } }
/// <summary> /// 键盘按下事件响应 /// </summary> /// <param name="sender">事件发送者</param> /// <param name="e">事件</param> private void canvas_KeyDown(object sender, KeyEventArgs e) { DocumentManager documentManager = DocumentManager.GetDocumentManager(); FlowChartManager flowChartManager = documentManager.CurrentFlowChartManager; graphManager.ControlMode = e.Control; graphManager.ShiftMode = e.Shift; graphManager.AltMode = e.Alt; switch (e.KeyCode) { case Keys.Enter: // 响应enter按键 { graphManager.EditDataElement(); break; } case Keys.Escape: // 响应esc按键 { graphManager.DeleteAbbreviateGraphElement(); break; } case Keys.Space: // 响应空格键 { graphManager.CurrentBackground.DebugMode = !graphManager.CurrentBackground.DebugMode; break; } case Keys.Left: // 响应左方向键 { graphManager.MoveSelectedGraphElement(new Size(-1, 0)); break; } case Keys.Up: // 响应上方向键 { graphManager.MoveSelectedGraphElement(new Size(0, -1)); break; } case Keys.Right: // 响应右方向键 { graphManager.MoveSelectedGraphElement(new Size(1, 0)); break; } case Keys.Down: // 响应下方向键 { graphManager.MoveSelectedGraphElement(new Size(0, 1)); break; } case Keys.Delete: // 响应delete按键 { graphManager.DeleteSelectedGraphElement(); break; } case Keys.D1: // 响应1按键 { // 执行逻辑操作 LogicBaseManager logicManager = Helper.GetHelper().GetLogicManager(flowChartManager.CurrentChartMode); object[] logicData = new object[2]; logicData[0] = 1; logicData[1] = (sender as Canvas).PointToClient(Cursor.Position); logicManager.DoLogicOperation(flowChartManager, LogicType.CreateAtPoint, logicData); break; } case Keys.NumPad1: // 响应1按键 { goto case Keys.D1; } case Keys.D2: // 响应2按键 { // 执行逻辑操作 LogicBaseManager logicManager = Helper.GetHelper().GetLogicManager(flowChartManager.CurrentChartMode); object[] logicData = new object[2]; logicData[0] = 2; logicData[1] = (sender as Canvas).PointToClient(Cursor.Position); logicManager.DoLogicOperation(flowChartManager, LogicType.CreateAtPoint, logicData); break; } case Keys.NumPad2: // 响应2按键 { goto case Keys.D2; } case Keys.D3: // 响应3按键 { // 执行逻辑操作 LogicBaseManager logicManager = Helper.GetHelper().GetLogicManager(flowChartManager.CurrentChartMode); object[] logicData = new object[2]; logicData[0] = 3; logicData[1] = (sender as Canvas).PointToClient(Cursor.Position); logicManager.DoLogicOperation(flowChartManager, LogicType.CreateAtPoint, logicData); break; } case Keys.NumPad3: // 响应3按键 { goto case Keys.D3; } case Keys.D4: // 响应4按键 { // 执行逻辑操作 LogicBaseManager logicManager = Helper.GetHelper().GetLogicManager(flowChartManager.CurrentChartMode); object[] logicData = new object[2]; logicData[0] = 4; logicData[1] = (sender as Canvas).PointToClient(Cursor.Position); logicManager.DoLogicOperation(flowChartManager, LogicType.CreateAtPoint, logicData); break; } case Keys.NumPad4: // 响应4按键 { goto case Keys.D4; } case Keys.D5: // 响应5按键 { // 执行逻辑操作 LogicBaseManager logicManager = Helper.GetHelper().GetLogicManager(flowChartManager.CurrentChartMode); object[] logicData = new object[2]; logicData[0] = 5; logicData[1] = (sender as Canvas).PointToClient(Cursor.Position); logicManager.DoLogicOperation(flowChartManager, LogicType.CreateAtPoint, logicData); break; } case Keys.NumPad5: // 响应5按键 { goto case Keys.D5; } case Keys.Oemplus: // 响应+按键 { graphManager.CurrentCanvas.AutoScroll = false; graphManager.AdjustCanvasScale(1.1f); documentManager.RefreshCanvasScaleDisplay(); break; } case Keys.OemMinus: // 响应-按键 { graphManager.CurrentCanvas.AutoScroll = false; graphManager.AdjustCanvasScale(0.9f); documentManager.RefreshCanvasScaleDisplay(); break; } case Keys.Oemcomma: // 逗号 { graphManager.SelectLineInSlotContainer(); break; } case Keys.OemPeriod: // 句号 { graphManager.SelectLineOutSlotContainer(); break; } case Keys.F5: // 刷新绘图板 { graphManager.RefreshRegion(); break; } } }
/// <summary> /// 获取逻辑管理器实例 /// </summary> /// <param name="chartMode">当前编辑模式</param> /// <returns>逻辑管理器实例</returns> public LogicBaseManager GetLogicManager(string chartMode) { LogicBaseManager logicManager = logicManagerDictionary[chartMode]; return(logicManager); }