Example #1
0
 public void ShrinkAllWidths()
 {
     foreach (CanvasItemData item in itemsList)
     {
         NodeCanvasItem classitem = item.Item as NodeCanvasItem;
         if (classitem != null)
         {
             classitem.Width = Math.Min(classitem.GetAbsoluteContentWidth(), 350);
         }
     }
     LayoutChanged(this, EventArgs.Empty);
 }
Example #2
0
        /// <summary>
        /// создание объекта из передаваемого типа
        /// </summary>
        public static NodeCanvasItem CreateItemFromType(INode ct)
        {
            if (ct == null)
            {
                return(null);
            }

            NodeCanvasItem item = new NodeCanvasItem(ct, NodeLowDetails);

            item.Initialize();
            return(item);
        }
Example #3
0
        /// <summary>
        /// Returns an canvas node by its node name.
        /// </summary>
        public CanvasItem GetNodeCanvasItem(string nodeName)
        {
            foreach (CanvasItemData item in itemsList)
            {
                NodeCanvasItem node = item.Item as NodeCanvasItem;
                if (node != null)
                {
                    if (node.GetNodeData.Name.Equals(nodeName, StringComparison.OrdinalIgnoreCase))
                    {
                        return(node);
                    }
                }
            }

            return(null);
        }
Example #4
0
 public void ExpandAll(bool type)
 {
     foreach (CanvasItemData item in itemsList)
     {
         NodeCanvasItem classitem = item.Item as NodeCanvasItem;
         if (classitem != null)
         {
             if (type)
             {
                 classitem.ContentCollapseAll(false);
             }
             else
             {
                 classitem.Collapsed = false;
             }
         }
     }
     LayoutChanged(this, EventArgs.Empty);
 }
Example #5
0
        public void DrawToGraphics(Graphics graphics)
        {
            List <Route>          routes;
            List <NodeCanvasItem> itemFocused = new List <NodeCanvasItem>();

            // отрисовываем ноды
            foreach (CanvasItemData item in itemsList)
            {
                NodeCanvasItem node = item.Item as NodeCanvasItem;
                if (node != null && item.Focused)                 // выбранные ноды отрисуем после соединяющих линий
                {
                    itemFocused.Add(node);
                }
                else
                {
                    item.Item.DrawToGraphics(graphics);
                }
            }

            // отрисовываем соединяющие линии
            DrawRoutes(graphics, itemFocused, out routes);

            // отрисовать выбранные ноды поверх линий
            foreach (NodeCanvasItem item in itemFocused)
            {
                item.DrawToGraphics(graphics);
            }

            // дорисовываем линии на ноде (для эстетики)
            foreach (Route route in routes)
            {
                if (route.StartShape != null && ((NodeCanvasItem)route.From).Collapsed == false)
                {
                    RouteStartShape shape = (RouteStartShape)route.StartShape;
                    shape = new RouteStartShape(Color.FromArgb(200, 255, 69, 0));
                    shape.Draw(graphics, route, false);
                }
            }
        }
Example #6
0
        public void RemoveCanvasItem(CanvasItem item)
        {
            if (item == null)
            {
                return;
            }

            itemsList.Remove(itemsData[item]);
            Stack <Route> routesToRemove = new Stack <Route>();

            foreach (Route r in diagramRouter.Routes)
            {
                if (r.From == item || r.To == item)
                {
                    routesToRemove.Push(r);
                }
            }

            foreach (Route r in routesToRemove)
            {
                diagramRouter.RemoveRoute(r);
            }

            diagramRouter.RemoveItem(item);

            NodeCanvasItem classItem = item as NodeCanvasItem;

            if (classItem != null)
            {
                nodesToData.Remove(classItem.GetNodeData);
            }

            itemsData.Remove(item);

            LayoutChanged(this, EventArgs.Empty);
        }
Example #7
0
        /// <summary>
        /// добавление новой ноды
        /// </summary>
        /// <param name="item"></param>
        public void AddCanvasItem(CanvasItem item, CanvasItem itemAt = null)
        {
            NodeCanvasItem classItem = item as NodeCanvasItem;

            if (classItem != null)
            {
                classItem.OffsetPointTo();
            }

            diagramRouter.AddItem(item);
            CanvasItemData itemData = new CanvasItemData(item, SizeGripMouseEntered, SizeGripMouseLeft);

            itemsData[item] = itemData;

            if (classItem != null)
            {
                nodesToData.Add(classItem.GetNodeData, item);
                foreach (CanvasItemData ci in itemsList)
                {
                    NodeCanvasItem cci = ci.Item as NodeCanvasItem;
                    if (cci != null)
                    {
                        //Route r = null;
                        foreach (LinkTo link in cci.GetNodeData.LinkedToNodes)
                        {
                            if (link.NameTo == classItem.GetNodeData.Name)
                            {
                                //                  link: from  >>>  to
                                Route r = diagramRouter.AddRoute(cci, classItem, link.ContentLine);
                                r.EndShape   = new RouteInheritanceShape();
                                r.StartShape = new RouteStartShape();
                            }
                        }
                        //if (r != null) {}
                        foreach (LinkTo link in classItem.GetNodeData.LinkedToNodes)
                        {
                            if (link.NameTo == cci.GetNodeData.Name)
                            {
                                //                  link: from  >>>  to
                                Route r = diagramRouter.AddRoute(classItem, cci, link.ContentLine);
                                r.EndShape   = new RouteInheritanceShape();
                                r.StartShape = new RouteStartShape();
                            }
                        }
                        //if (r != null && r.EndShape == null) {}
                    }
                }
            }

            // добавление ноды в лист
            if (itemAt != null)
            {
                LinkedListNode <CanvasItemData> find = itemsList.Find(itemsData[itemAt]);
                if (find != null)
                {
                    itemsList.AddBefore(find, itemData);
                }
                else
                {
                    itemsList.AddLast(itemData);
                }
            }
            else
            {
                itemsList.AddLast(itemData);
            }

            item.RedrawNeeded     += HandleRedraw;
            item.LayoutChanged    += HandleItemLayoutChange;
            item.PositionChanging += HandleItemPositionChange;
            item.SizeChanging     += HandleItemSizeChange;
        }