protected void AppendDrawer(PropertyDrawer drawer)
 {
     if (_drawer == null)
     {
         //no drawer has been set before... lets see if we got one
         if(drawer is PropertyModifier)
         {
             if (_modifiers == null) _modifiers = new List<PropertyModifier>();
             _modifiers.Add(drawer as PropertyModifier);
             
             if(this.Field.FieldType.IsListType())
             {
                 _drawer = new ArrayPropertyDrawer(null);
                 this.InternalDrawer = _drawer;
             }
         }
         else if(drawer != null)
         {
             //we got a new drawer, set it
             if (this.Field.FieldType.IsListType()) drawer = new ArrayPropertyDrawer(drawer);
             _drawer = drawer;
         }
     }
     else if (drawer != _drawer)
     {
         //a new drawer was created, lets see what we need to do with it compared to the last one
         if (drawer is PropertyModifier)
         {
             if (_modifiers == null) _modifiers = new List<PropertyModifier>();
             _modifiers.Add(drawer as PropertyModifier);
             this.InternalDrawer = _drawer;
         }
         else if (drawer is IArrayHandlingPropertyDrawer)
         {
             //got an array drawer, this overrides previous drawers
             if (_drawer is IArrayHandlingPropertyDrawer)
             {
                 var temp = _drawer as IArrayHandlingPropertyDrawer;
                 _drawer = drawer;
                 (_drawer as IArrayHandlingPropertyDrawer).InternalDrawer = temp.InternalDrawer;
             }
             else if (_drawer != null)
             {
                 var temp = _drawer;
                 _drawer = drawer;
                 (_drawer as IArrayHandlingPropertyDrawer).InternalDrawer = temp;
             }
             else
             {
                 _drawer = drawer;
             }
         }
         else if (_drawer is IArrayHandlingPropertyDrawer)
         {
             //got an internal drawer for the existing array drawer
             (_drawer as IArrayHandlingPropertyDrawer).InternalDrawer = drawer;
             this.InternalDrawer = _drawer;
         }
         else
         {
             //we got a new drawer, set it
             if (this.Field.FieldType.IsListType())
             {
                 _drawer = new ArrayPropertyDrawer(drawer);
                 this.InternalDrawer = _drawer;
             }
             else
             {
                 _drawer = drawer;
             }
         }
     }
 }
示例#2
0
        protected void AppendDrawer(PropertyDrawer drawer)
        {
            if (_drawer == null)
            {
                //no drawer has been set before... lets see if we got one
                if (drawer is PropertyModifier)
                {
                    if (_modifiers == null)
                    {
                        _modifiers = new List <PropertyModifier>();
                    }
                    _modifiers.Add(drawer as PropertyModifier);

                    if (_propertyIsArray)
                    {
                        _drawer = new ArrayPropertyDrawer(null);
                    }
                }
                else if (drawer != null)
                {
                    //we got a new drawer, set it
                    if (!(drawer is IArrayHandlingPropertyDrawer) && _propertyIsArray)
                    {
                        drawer = new ArrayPropertyDrawer(drawer);
                    }
                    _drawer = drawer;
                }
            }
            else if (drawer != _drawer)
            {
                //a new drawer was created, lets see what we need to do with it compared to the last one
                if (drawer is PropertyModifier)
                {
                    if (_modifiers == null)
                    {
                        _modifiers = new List <PropertyModifier>();
                    }
                    _modifiers.Add(drawer as PropertyModifier);
                }
                else if (drawer is IArrayHandlingPropertyDrawer)
                {
                    //got an array drawer, this overrides previous drawers
                    if (_drawer is IArrayHandlingPropertyDrawer)
                    {
                        var temp = _drawer as IArrayHandlingPropertyDrawer;
                        _drawer = drawer;
                        (_drawer as IArrayHandlingPropertyDrawer).InternalDrawer = temp.InternalDrawer;
                    }
                    else if (_drawer != null)
                    {
                        var temp = _drawer;
                        _drawer = drawer;
                        (_drawer as IArrayHandlingPropertyDrawer).InternalDrawer = temp;
                    }
                    else
                    {
                        _drawer = drawer;
                    }
                }
                else if (_drawer is IArrayHandlingPropertyDrawer)
                {
                    //got an internal drawer for the existing array drawer
                    (_drawer as IArrayHandlingPropertyDrawer).InternalDrawer = drawer;
                }
                else
                {
                    //we got a new drawer, set it
                    if (_propertyIsArray)
                    {
                        _drawer = new ArrayPropertyDrawer(drawer);
                    }
                    else
                    {
                        _drawer = drawer;
                    }
                }
            }

            //ensure internal drawer is set appropriately
            this.InternalDrawer = _drawer;
        }
 protected override void HandleAttribute(PropertyAttribute attribute, System.Reflection.FieldInfo field, System.Type propertyType)
 {
     if(attribute is PropertyModifierAttribute)
     {
         var mtp = ScriptAttributeUtility.GetDrawerTypeForType(attribute.GetType());
         if (TypeUtil.IsType(mtp, typeof(PropertyModifier)))
         {
             var modifier = PropertyDrawerActivator.Create(mtp, attribute, field) as PropertyModifier;
             modifier.Init(false);
             if (_modifiers == null) _modifiers = new List<PropertyModifier>();
             _modifiers.Add(modifier);
         }
     }
     else
     {
         base.HandleAttribute(attribute, field, propertyType);
         var drawer = this.InternalDrawer;
         if (_drawer == null)
         {
             //no drawer has been set before... lets see if we got one
             if (drawer != null)
             {
                 //we got a new drawer, set it
                 if (field.FieldType.IsListType()) drawer = new ArrayPropertyDrawer(drawer);
                 _drawer = drawer;
             }
         }
         else if (drawer != _drawer)
         {
             //a new drawer was created, lets see what we need to do with it compared to the last one
             if (drawer is PropertyModifier)
             {
                 if (_modifiers == null) _modifiers = new List<PropertyModifier>();
                 _modifiers.Add(drawer as PropertyModifier);
                 this.InternalDrawer = _drawer;
             }
             else if (drawer is IArrayHandlingPropertyDrawer)
             {
                 //got an array drawer, this overrides previous drivers
                 if (_drawer is IArrayHandlingPropertyDrawer)
                 {
                     var temp = _drawer as IArrayHandlingPropertyDrawer;
                     _drawer = drawer;
                     (_drawer as IArrayHandlingPropertyDrawer).InternalDrawer = temp.InternalDrawer;
                 }
                 else if (_drawer != null)
                 {
                     var temp = _drawer;
                     _drawer = drawer;
                     (_drawer as IArrayHandlingPropertyDrawer).InternalDrawer = temp;
                 }
                 else
                 {
                     _drawer = drawer;
                 }
             }
             else if (_drawer is IArrayHandlingPropertyDrawer)
             {
                 //got an internal drawer for the existing array drawer
                 (_drawer as IArrayHandlingPropertyDrawer).InternalDrawer = drawer;
                 this.InternalDrawer = _drawer;
             }
             else
             {
                 //we got a new drawer, set it
                 if (field.FieldType.IsListType())
                 {
                     _drawer = new ArrayPropertyDrawer(drawer);
                     this.InternalDrawer = _drawer;
                 }
                 else
                 {
                     _drawer = drawer;
                 }
             }
         }
     }
 }