public WorkflowDiagramArea(int requestID)
        {
            View           = AgentUICoreMediator.GetAgentUICoreMediator.UIManager.GetRequestDiagramForm();
            View.RequestID = requestID;
            var requestDiagram = AgentUICoreMediator.GetAgentUICoreMediator.workflowService.GetRequestDiagram(AgentUICoreMediator.GetAgentUICoreMediator.GetRequester(), requestID);

            I_View_StateShape shape = null;
            int index = 0;

            if (requestDiagram.FirstDiagramState != null)
            {
                shape = View.AddStateShape(index);
                SetShapeInfo(shape, requestDiagram.FirstDiagramState, View, null);
            }
            foreach (var item in requestDiagram.DiagramStates)
            {
                var lastShape = shape;
                index++;
                shape = View.AddStateShape(index);
                SetShapeInfo(shape, item, View, lastShape);
            }
        }
        public I_View_StateConnection AddConnection(I_View_StateShape shape, I_View_StateShape previousShape, int connectionCount, int index)
        {
            CustomConnector connector    = new View.CustomConnector();
            var             shape1       = (previousShape as UserControl).Parent as IShape;
            var             shape2       = (shape as UserControl).Parent as IShape;
            var             radConnector = diagram.AddConnection(shape1, shape2);

            if (connectionCount > 1)
            {
                var shapeWidth           = (shape1.Content as UserControl).Width + 8;  //خود شیپ یه بوردر اضافه دارد
                var shapeHeight          = (shape1.Content as UserControl).Height + 8; //خود شیپ یه بوردر اضافه دارد
                var connectionAreaHeight = 130;
                var perConnectionHeight  = connectionAreaHeight / connectionCount;
                //var xDif = shape2.Position.X - shape1.Position.X;
                //var yDif = shape2.Position.Y - shape1.Position.Y;
                var midYShapes  = shape1.Position.Y + shapeHeight / 2;
                var connectionY = (midYShapes - connectionAreaHeight / 2) + (index * perConnectionHeight) + (perConnectionHeight / 2);
                radConnector.ConnectionPoints.Add(new Point(shape1.Position.X + shapeWidth + 25, midYShapes));
                radConnector.ConnectionPoints.Add(new Point(shape1.Position.X + shapeWidth + 50, connectionY));
                var connectionWidth = shape2.Position.X - (shape1.Position.X + shapeWidth);
                radConnector.ConnectionPoints.Add(new Point((shape1.Position.X + shapeWidth) + connectionWidth - 50, connectionY));
                radConnector.ConnectionPoints.Add(new Point((shape1.Position.X + shapeWidth) + connectionWidth - 25, midYShapes));
            }

            (radConnector as RadDiagramConnection).Stroke = new SolidColorBrush()
            {
                Color = Colors.SteelBlue
            };
            (radConnector as RadDiagramConnection).StrokeThickness = 3;
            (radConnector as RadDiagramConnection).IsConnectorsManipulationEnabled = false;
            (radConnector as RadDiagramConnection).IsDraggingEnabled     = false;
            (radConnector as RadDiagramConnection).IsManipulationEnabled = false;
            radConnector.TargetCapSize = new Size(15, 15);
            radConnector.TargetCapType = CapType.Arrow1Filled;
            connector.Connector        = radConnector;
            return(connector);
        }
        private void SetShapeInfo(I_View_StateShape shape, DiagramStateDTO state, I_View_RequestDiagram view, I_View_StateShape previousShape)
        {
            shape.Title        = state.Name;
            shape.CreationDate = state.CreationDate.ToString();
            shape.Clicked     += (sender, e) => Shape_Clicked(sender, e, state);
            if (previousShape != null)
            {
                int index = 0;
                var causingRequestActions = state.CausingRequestActions.Where(x => x.IsCompleted);
                foreach (var item in causingRequestActions.OrderBy(x => x.DateTimeCompleted))
                {
                    var connector = view.AddConnection(shape, previousShape, causingRequestActions.Count(), index);
                    connector.Clicked += Connector_Clicked;
                    connector.OrgnizatoinPostUserInfo = item.OrganizationPost.Name;
                    if (causingRequestActions.Count() > 1)
                    {
                        if (item.LedToState != 0)
                        {
                            connector.Highlight = true;
                        }
                    }
                    var    dif      = item.DateTimeCompleted.Value - item.DateTimeCreation;
                    string duration = "";
                    if (dif.Days != 0)
                    {
                        duration += dif.Days + "روز";
                    }
                    if (dif.Hours != 0)
                    {
                        duration += (duration == "" ? "" : " و ") + dif.Hours + "ساعت";
                    }
                    if (dif.Minutes != 0)
                    {
                        duration += (duration == "" ? "" : " و ") + dif.Minutes + "دقیقه";
                    }

                    if (duration == "")
                    {
                        duration = dif.Seconds + "ثانیه";
                    }
                    connector.Duration = duration;

                    var tooltip = "اقدام :" + " " + item.TransitionAction.Name;
                    tooltip += Environment.NewLine + "پست سازمانی اقدام کننده :" + " " + item.OrganizationPost.Name;
                    if (item.User != null)
                    {
                        tooltip += Environment.NewLine + "کاربر اقدام کننده :" + " " + item.User.FullName;
                    }
                    tooltip += Environment.NewLine + "نوع اقدام کننده :" + " " + item.TargetReason;
                    tooltip += Environment.NewLine + "زمان شروع :" + " " + item.DateTimeCreation.ToString();
                    tooltip += Environment.NewLine + "زمان اتمام :" + " " + item.DateTimeCompleted.Value.ToString();
                    if (!string.IsNullOrEmpty(item.Description))
                    {
                        tooltip += Environment.NewLine + "توضیحات :" + " " + item.Description;
                    }
                    connector.Tooltip = tooltip;
                    connector.Action  = item.TransitionAction.Name;
                    index++;
                }
            }
        }