Exemple #1
0
        //--------------------------------------------------------------------------
        public GraphNodeDataLink(GraphReferenceItem item) : base(item)
        {
            LinkNoEvent = GraphReferenceItem.WrappedItem?.GraphNode;

            GraphReferenceItem.PropertyChanged += (e, args) =>
            {
                if (args.PropertyName == "WrappedItem")
                {
                    Link = GraphReferenceItem.WrappedItem?.GraphNode;
                }
                else if (args.PropertyName == "TextBrush")
                {
                    RaisePropertyChangedEvent("FontBrush");
                }
                else if (args.PropertyName == "Name")
                {
                    RaisePropertyChangedEvent("Title");
                }
                else if (args.PropertyName == "IsVisible")
                {
                    RaisePropertyChangedEvent("Link");
                }
            };

            if (GraphReferenceItem.Parent is StructItem && GraphReferenceItem.ReferenceDef.UseParentDescription)
            {
                GraphReferenceItem.Parent.PropertyChanged += (e, args) =>
                {
                    if (args.PropertyName == "Description")
                    {
                        RaisePropertyChangedEvent("Title");
                    }
                    else if (args.PropertyName == "TextBrush")
                    {
                        RaisePropertyChangedEvent("FontBrush");
                    }
                };
            }

            foreach (var controlPoint in GraphReferenceItem.ControlPoints)
            {
                ControlPoints.Add(new LinkControlPoint(this, controlPoint));
            }

            PropertyChanged += (e, args) =>
            {
                if (args.PropertyName == "Node")
                {
                    if (Link != null)
                    {
                        Link.ParentNodes.Add(Node);
                    }
                }
            };
        }
        public override DataItem CreateData(UndoRedoManager undoRedo)
        {
            var item = new GraphReferenceItem(this, undoRedo);

            foreach (var att in Attributes)
            {
                var attItem = att.CreateData(undoRedo);
                item.Attributes.Add(attItem);
            }

            return(item);
        }
        public override DataItem LoadData(XElement element, UndoRedoManager undoRedo)
        {
            var key = element.Attribute(DataDefinition.MetaNS + "RefKey")?.Value?.ToString();

            if (key == null)
            {
                key = element.Attribute("RefKey")?.Value?.ToString();
            }

            GraphReferenceItem item = null;

            if (!element.HasElements)
            {
                item = new GraphReferenceItem(this, undoRedo);
                item.GuidToResolve = element.Value?.ToString();
                item.m_LinkType    = LinkType.Reference;
            }
            else if (key != null && Definitions.ContainsKey(key))
            {
                var def = Definitions[key];

                item = new GraphReferenceItem(this, undoRedo);
                item.ChosenDefinition = def;

                var loaded = def.LoadData(element, undoRedo) as GraphNodeItem;
                item.WrappedItem = loaded;
            }
            else
            {
                item = CreateData(undoRedo) as GraphReferenceItem;
            }

            foreach (var att in Attributes)
            {
                var      el      = element.Attribute(att.Name);
                DataItem attItem = null;

                if (el != null)
                {
                    attItem = att.LoadData(new XElement(el.Name, el.Value.ToString()), undoRedo);
                }
                else
                {
                    attItem = att.CreateData(undoRedo);
                }
                item.Attributes.Add(attItem);
            }

            var controlPoints = element.Attribute(DataDefinition.MetaNS + "ControlPoints")?.Value;

            if (controlPoints != null)
            {
                var points = controlPoints.Split('|');
                foreach (var point in points)
                {
                    var split = point.Split(',');
                    var x     = double.Parse(split[0]);
                    var y     = double.Parse(split[1]);
                    var flip  = split.Length == 3 ? bool.Parse(split[2]) : false;

                    item.ControlPoints.Add(new GraphReferenceControlPoint(item, new System.Windows.Point(x, y), flip));
                }
            }

            return(item);
        }