public void Update()
        {
            VFXView view = GetFirstAncestorOfType<VFXView>();
            if (view == null || m_Controller == null)
                return;
            contexts = controller.contexts.Select(t => view.GetGroupNodeElement(t) as VFXContextUI).ToArray();

            title = controller.title;
        }
Esempio n. 2
0
        public void Update()
        {
            VFXView view = GetFirstAncestorOfType <VFXView>();

            if (view == null || m_Controller == null)
            {
                return;
            }
            contexts = controller.contexts.Select(t => view.GetGroupNodeElement(t) as VFXContextUI).ToArray();

            title = controller.contexts[0].model.GetGraph().systemNames.GetUniqueSystemName(controller.contexts[0].model.GetData());
        }
        public void SelfChange()
        {
            // use are custom data changed from the view because we can't listen simply to the VFXUI, because the VFXUI might have been modified because we were removed and the datawatch might call us before the view
            VFXView view = this.GetFirstAncestorOfType <VFXView>();

            if (view == null)
            {
                return;
            }


            m_ModificationFromController = true;
            inRemoveElement = true;
            title           = controller.title;


            var presenterContent = new HashSet <Controller>(controller.nodes);
            var elementContent   = containedElements.OfType <IControlledElement>().Where(t => t.controller is VFXNodeController || t.controller is VFXStickyNoteController).ToArray();

            bool elementsChanged = false;
            var  elementToDelete = elementContent.Where(t => !presenterContent.Contains(t.controller)).ToArray();

            foreach (var element in elementToDelete)
            {
                this.RemoveElement(element as GraphElement);
                elementsChanged = true;
            }

            if (presenterContent.Count() != elementContent.Count())
            {
                var elementToAdd = presenterContent.Select(t => view.GetGroupNodeElement(t)).Except(elementContent.Cast <GraphElement>()).ToArray();

                //bool someNodeNotFound = false;
                foreach (var element in elementToAdd)
                {
                    if (element != null)
                    {
                        this.AddElement(element as GraphElement);
                        elementsChanged = true;
                    }
                    else
                    {
                        //someNodeNotFound = true;
                    }
                }
            }

            // only update position if the groupnode is empty otherwise the size should be computed from the content.
            if (presenterContent.Count() == 0)
            {
                SetPosition(controller.position);
            }
            else
            {
                if (elementsChanged)
                {
                    UpdateGeometryFromContent();
                }
            }

            m_ModificationFromController = false;
            inRemoveElement = false;
        }