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; } } } }
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; } } } } }