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 
 
         
 
         
 
        
 
         
    } 
}