Ejemplo n.º 1
0
        /// <summary>设置相连线条位置</summary>
        /// <param name="item">调整的元素</param>
        public void SetTransitionTransitionPoint(IDesignerNode item)
        {
            //设置相关连线条位置
            if (item is IDesignerSynchronizer)
            {
                foreach (var tran in ((IDesignerSynchronizer)item).LeavingTransitions)
                {
                    TransitionControl tc = (TransitionControl)UserControls[tran.Id];
                    tc.SetTransitionBegin(item.Bounds, false);
                    tc.SetTransitionEnd(((IDesignerNode)UserControls[tc.Transition.ToNode.Id]).Bounds, true);
                }
                foreach (var tran in ((IDesignerSynchronizer)item).EnteringTransitions)
                {
                    TransitionControl tc = (TransitionControl)UserControls[tran.Id];
                    tc.SetTransitionBegin(((IDesignerNode)UserControls[tc.Transition.FromNode.Id]).Bounds, true);
                    tc.SetTransitionEnd(item.Bounds, false);
                }

                foreach (var tran in ((IDesignerSynchronizer)item).LeavingLoops)
                {
                    LoopControl loop = (LoopControl)UserControls[tran.Id];
                    loop.SetTransitionBegin(item.Bounds, false);
                    loop.SetTransitionEnd(((IDesignerNode)UserControls[loop.Loop.ToNode.Id]).Bounds, false);
                }
                foreach (var tran in ((IDesignerSynchronizer)item).EnteringLoops)
                {
                    LoopControl loop = (LoopControl)UserControls[tran.Id];
                    loop.SetTransitionBegin(((IDesignerNode)UserControls[loop.Loop.FromNode.Id]).Bounds, false);
                    loop.SetTransitionEnd(item.Bounds, false);
                }
            }
            else if (item is ActivityControl)
            {
                if (((ActivityControl)item).Activity.LeavingTransition != null)
                {
                    TransitionControl tc = (TransitionControl)UserControls[((ActivityControl)item).Activity.LeavingTransition.Id];
                    tc.SetTransitionBegin(item.Bounds, true);
                    tc.SetTransitionEnd(((IDesignerNode)UserControls[tc.Transition.ToNode.Id]).Bounds, false);
                }
                if (((ActivityControl)item).Activity.EnteringTransition != null)
                {
                    TransitionControl tc = (TransitionControl)UserControls[((ActivityControl)item).Activity.EnteringTransition.Id];
                    tc.SetTransitionBegin(((IDesignerNode)UserControls[tc.Transition.FromNode.Id]).Bounds, false);
                    tc.SetTransitionEnd(item.Bounds, true);
                }
            }
        }
Ejemplo n.º 2
0
        //鼠标按下
        public void Handle_MouseDown(object sender, MouseEventArgs args)
        {
            Debug.WriteLine("Handle_MouseDown");
            IDesigner item = (IDesigner)sender;

            if (IsLoop || IsTransition)
            {
                if (item is IDesignerNode)
                {
                    if (mouseEnterNode == null) mouseEnterNode = (IDesignerNode)item;
                }
                else if (item is IDesignerEdge)
                {
                    if (mouseEnterEdge == null) mouseEnterEdge = (IDesignerEdge)item;
                }
                return;
            }

            ///if (listBox.SelectedIndex==0 && item.ResizeStatus==EnumResizeStatus.Move)
            if (item.ResizeStatus == EnumResizeStatus.Move)
            {
                isMouseCaptured = true;
                ((UserControl)sender).CaptureMouse();

                mouseY = args.GetPosition(null).Y;
                mouseX = args.GetPosition(null).X;

                return;
            }
            if (listBox.SelectedIndex >=0 && listBox.SelectedIndex<=7)
            {
                if (item is IDesignerNode)
                {
                    if (mouseEnterNode == null) mouseEnterNode = (IDesignerNode)item;
                }
                else if(item is IDesignerEdge)
                {
                    if (mouseEnterEdge == null) mouseEnterEdge = (IDesignerEdge)item;
                }
                AddPickOn(item);
            }
        }
Ejemplo n.º 3
0
        //添加连接线
        private void TransitionButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (mouseEnterNode != null)
            {
                if (IsTransition == false)
                {
                    //只能存在一个输出口
                    if (mouseEnterNode.Node is Activity && ((Activity)mouseEnterNode.Node).LeavingTransition != null)
                    {
                        Debug.WriteLine("Activity只能存在一个输出口!");
                        return;
                    }

                    Debug.WriteLine("增加TransitionControl");
                    currentTransitionControl = new TransitionControl(this, null, false);
                    currentTransitionControl.InitEdge();
                    currentTransitionControl.Transition.FromNode = mouseEnterNode.Node;
                    if (mouseEnterNode.Node is Synchronizer)
                    {
                        ((Synchronizer)mouseEnterNode.Node).LeavingTransitions.Add(currentTransitionControl.Transition);
                    }
                    else if (mouseEnterNode.Node is Activity)
                    {
                        ((Activity)mouseEnterNode.Node).LeavingTransition = currentTransitionControl.Transition;
                    }
                    mouseEnterNode = null;

                    Point p = e.GetPosition(canvas);

                    currentTransitionControl.SetTransitionPosition(p, null, p);

                    if (!canvas.Children.Contains(currentTransitionControl))
                    {
                        //设置位置
                        canvas.Children.Add(currentTransitionControl);
                        UserControls.Add(currentTransitionControl.Id, currentTransitionControl);
                        this.WorkflowProcessCurrent.Transitions.Add(currentTransitionControl.Transition);
                    }
                    IsTransition = true;
                    return;
                }
            }

            if (IsTransition)
            {
                if (mouseEnterNode != null)
                {
                    //判断是否配对连接
                    if (currentTransitionControl.Transition.FromNode is Activity && !(mouseEnterNode.Node is Synchronizer))
                    {
                        //当源节点为Activity,目标节点必须是Synchronizer;否则退出
                        Debug.WriteLine("配对失败!当源节点为Activity,目标节点必须是Synchronizer;");
                        return;
                    }
                    else if(currentTransitionControl.Transition.FromNode is Synchronizer)
                    {
                        //当源节点为Synchronizer,目标节点必须是Activity,并且Activity没有输入项;否则退出
                        if (!(mouseEnterNode.Node is Activity) || ((Activity)mouseEnterNode.Node).EnteringTransition != null)
                        {
                            Debug.WriteLine("配对失败!当源节点为Synchronizer,目标节点必须是Activity,并且Activity没有输入项");
                            return;
                        }
                    }

                    currentTransitionControl.Transition.ToNode = mouseEnterNode.Node;
                    if (mouseEnterNode.Node is Synchronizer)
                    {
                        ((Synchronizer)mouseEnterNode.Node).EnteringTransitions.Add(currentTransitionControl.Transition);
                    }
                    else if (mouseEnterNode.Node is Activity)
                    {
                        ((Activity)mouseEnterNode.Node).EnteringTransition = currentTransitionControl.Transition;
                    }
                    mouseEnterNode = null;

                    currentTransitionControl.SavePoint();
                    currentTransitionControl.LoadEdge();
                    this.AddHandle(currentTransitionControl);
                    currentTransitionControl = null;
                    IsTransition = false;
                }
                else
                {
                    Point p = e.GetPosition(canvas);
                    currentTransitionControl.AddLinePoint(p);
                }
            }
        }
Ejemplo n.º 4
0
        //添加循环线
        private void LoopButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (mouseEnterNode != null && mouseEnterNode.Node is Synchronizer && !(mouseEnterNode.Node is StartNode))
            {
                if (IsLoop == false)
                {
                    Debug.WriteLine("增加LoopControl");
                    currentLoopControl = new LoopControl(this, null, false);
                    currentLoopControl.InitEdge();
                    currentLoopControl.Loop.FromNode = mouseEnterNode.Node;

                    mouseEnterNode = null;

                    Point p = e.GetPosition(canvas);

                    currentLoopControl.SetLoopPosition(p, null, p);

                    if (!canvas.Children.Contains(currentLoopControl))
                    {
                        //设置位置
                        canvas.Children.Add(currentLoopControl);
                        UserControls.Add(currentLoopControl.Id, currentLoopControl);
                        this.WorkflowProcessCurrent.Loops.Add(currentLoopControl.Loop);
                    }
                    IsLoop = true;
                    return;
                }
            }

            if (IsLoop)
            {
                System.Threading.Thread.Sleep(300);//还没有获取mouseEnterNode就执行了。进行稍微延时已保证获取到了mouseEnterNode;

                if (mouseEnterNode != null)
                {
                    //判断是否配对连接
                    if (!(mouseEnterNode.Node is Synchronizer))
                    {
                        //目标节点必须是Synchronizer;否则退出
                        Debug.WriteLine("配对失败!目标节点必须是Synchronizer;");
                        return;
                    }
                    else if (currentLoopControl.Loop.FromNode.Id == mouseEnterNode.Node.Id)
                    {
                        //节点相同退出
                        Debug.WriteLine("配对失败!节点相同。");
                        return;

                    }

                    currentLoopControl.Loop.ToNode = mouseEnterNode.Node;
                    ((Synchronizer)mouseEnterNode.Node).LeavingLoops.Add(currentLoopControl.Loop);

                    mouseEnterNode = null;

                    currentLoopControl.SavePoint();
                    currentLoopControl.LoadEdge();
                    this.AddHandle(currentLoopControl);
                    currentLoopControl = null;
                    IsLoop = false;

                }
                else
                {
                    Point p = e.GetPosition(canvas);
                    currentLoopControl.AddLinePoint(p);
                }
            }
        }
Ejemplo n.º 5
0
 void Handle_MouseLeave(object sender, MouseEventArgs e)
 {
     //离开时发生
     Debug.WriteLine("离开");
     mouseEnterNode = null;
     mouseEnterEdge = null;
 }
Ejemplo n.º 6
0
 void Handle_MouseEnter(object sender, MouseEventArgs e)
 {
     //进入时发生
     if (sender is IDesignerNode)
     {
         Debug.WriteLine("进入时发生");
         mouseEnterNode = (IDesignerNode)sender;
     }
     else if (sender is IDesignerEdge)
     {
         mouseEnterEdge = (IDesignerEdge)sender;
     }
 }