Ejemplo n.º 1
0
 public void BindAttrs(XmlLayoutElement element, BoundAttributeCollection collection)
 {
     for (var i = 0; i < objectBuildActions.Count; i++)
     {
         objectBuildActions[i](element, collection);
     }
 }
Ejemplo n.º 2
0
        public Layout <T> InflateChild <T>(XmlLayoutElement parent, string layoutXml, IVariableProvider provider = null)
            where T : Component
        {
            var element = InflateChild(parent, layoutXml, provider);

            return(new Layout <T>(element, element.GetComponent <T>()));
        }
Ejemplo n.º 3
0
        public void AddAttributes <T>(XmlLayoutElement element, T component,
                                      IVariableBinder <T>[] binders,
                                      IConstantSetter <T>[] constants) where T : Object
        {
            if (binders.Length == 0 && constants.Length == 0)
            {
                return;
            }

            var holder = ScriptableObject.CreateInstance <VariableReferenceHolder>();

            holder.variables = new Func <object, IVariableProvider, IBoundVariable> [binders.Length];
            holder.constants = new Action <object> [constants.Length];

            for (var i = 0; i < binders.Length; i++)
            {
                var setter = binders[i];
                holder.variables[i] = (c, p) => setter.Bind(element, (T)c, p);
            }

            for (var i = 0; i < constants.Length; i++)
            {
                var setter = constants[i].Setter;
                holder.constants[i] = (c) => setter(element, (T)c);
            }

            setters.Add(new BoundReference
            {
                target = component,
                holder = holder
            });
        }
Ejemplo n.º 4
0
        public XmlLayoutElement InflateChild(XmlLayoutElement parent, string xmlString,
                                             IVariableProvider provider = null)
        {
            var child = Inflate(parent.ChildParentTransform, xmlString, provider);

            parent.Container.AddChild(child);
            return(child);
        }
Ejemplo n.º 5
0
            public BoundVariable(XmlLayoutElement element, T instance, IVariableValue <P> value, ValueSetterDelegate <T, P> setter)
            {
                this.element  = element;
                this.instance = instance;
                this.value    = value;
                this.setter   = setter;

                value.OnValueChanged += ApplyChanged;
            }
Ejemplo n.º 6
0
        private XmlLayoutElement CreateInstance(XmlLayoutElement elementRoot, Transform root,
                                                ElementNode element, BoundAttributeCollection binders)
        {
            var instance  = element.factory.CreateElement(root, binders, this, element.ownAttrs);
            var container = instance.Container;

            if (!elementRoot)
            {
                elementRoot = instance;
            }

            for (var i = 0; i < element.childNodes.Count; i++)
            {
                var node = element.childNodes[i];

                switch (node.type)
                {
                case XmlUIUtils.AttrsChildRootName:
                    elementRoot.Container = instance;
                    break;

                default:
                    var childInstance = CreateInstance(elementRoot, container.ChildParentTransform, node, binders);
                    container.AddChild(childInstance);
                    break;
                }
            }

            element.factory.BindAttrs(instance, binders);

            foreach (var c in element.components)
            {
                c.BindAttrs(instance, binders);
            }

            instance.OnCreatedFromXml();
            return(instance);
        }
Ejemplo n.º 7
0
 public void SetElement(XmlLayoutElement e, string layout)
 {
     this.element = e;
     this.layout  = layout;
 }
Ejemplo n.º 8
0
        public IBoundVariable Bind(XmlLayoutElement element, T instance, IVariableProvider provider)
        {
            var value = provider.GetValue <P>(VariableName);

            return(new BoundVariable(element, instance, value, Setter));
        }
Ejemplo n.º 9
0
 public void Apply(XmlLayoutElement element, T instance) => Setter(element, instance);
Ejemplo n.º 10
0
 public XmlPrefabElementInfo(string name, XmlLayoutElement prefab) : base(name)
 {
     prefabElement = prefab;
 }