www.pudn.com > WorkflowDesigner.rar > DesignerAbstractNewActivityTool.cs, change:2007-11-16,size:3199b
using System; using System.Collections.Generic; using System.Text; namespace WorkflowDesigner.Designer { /// <summary> /// 节点设计工具基类 /// </summary> public abstract class DesignerAbstractNewActivityTool:DesignerTool { #region 字段 #endregion #region 属性 #endregion #region 构造函数 #endregion #region 操作 #region 私有 #endregion #region 保护 /// <summary> /// 创建一个节点(可视化对象) /// </summary> /// <param name="x">鼠标所在位置的x轴坐标</param> /// <param name="y">鼠标所在位置的y轴坐标</param> /// <returns>返回创建的节点</returns> protected abstract WfAbstractActivity CreateActivity(int x, int y); /// <summary> /// 得到本节点的名称 /// </summary> /// <returns>返回本节点的名称</returns> protected virtual String GetActivityNamePrefix() { return "活动"; } /// <summary> /// 生成新的节点名称(如果相同的节点,自动累加并将累加值加在节点名称后) /// </summary> /// <returns>返回新节点的名称</returns> protected virtual String GenerateNewActivityName() { //存放判断名字是否存在 bool nameExist; //存放新名字 String newName; int i = 1; do { newName = GetActivityNamePrefix() + i.ToString(); //如果有相同名字的节点 if (Ctrl.Document.GetActivityByName(newName) == null) { nameExist = false; } else { nameExist = true; } i++; } while (nameExist); return newName; } #endregion #region 公用 /// <summary> /// 当鼠标按下时 /// </summary> /// <param name="x">鼠标点所在的位置x轴坐标</param> /// <param name="y">鼠标点所在的位置y轴坐标</param> public override void OnMouseDown(int x, int y) { //创建一个节点(可视化对象) WfAbstractActivity abstractActivity = CreateActivity(x, y); //设置节点所属工作文档 abstractActivity.Flow = Ctrl.Document; //对齐节点位置 abstractActivity.AlignToGrid(); //设置节点的名称 abstractActivity.Name = GenerateNewActivityName(); //把该节点增加到可视化队列中去 Ctrl.Document.VisualObjectList.Add(abstractActivity); //触发增加可视化对象的事件 Ctrl.FireVisualObjectAddEvent(abstractActivity); //重新绘制 Ctrl.RedrawAll(); //如果没有按下ctrl键 if (!IsControlPressed()) { //将“指针控件”设置为当前控件 Ctrl.CurrentTool = new DesignerSelector(); } } #endregion #endregion } }