protected virtual void OnMemberWoopsaVisibilityCheck(EventArgsMemberVisibilityCheck e) { if (MemberWoopsaVisibilityCheck != null) { MemberWoopsaVisibilityCheck(this, e); } else if (Owner is WoopsaObjectAdapter) { ((WoopsaObjectAdapter)Owner).OnMemberWoopsaVisibilityCheck(e); } }
protected virtual bool IsMemberWoopsaVisible(object targetObject, MemberInfo memberInfo) { var woopsaVisibleAttribute = WoopsaReflection.GetCustomAttribute <WoopsaVisibleAttribute>(memberInfo); bool isVisible; Type targetType = targetObject.GetType(); if (woopsaVisibleAttribute != null) { isVisible = woopsaVisibleAttribute.Visible; } else { isVisible = Visibility.HasFlag(WoopsaVisibility.DefaultIsVisible); } if (isVisible) { if (memberInfo.DeclaringType != targetType) { isVisible = Visibility.HasFlag(WoopsaVisibility.Inherited); } } if (isVisible) { if (memberInfo.DeclaringType == typeof(object)) { isVisible = Visibility.HasFlag(WoopsaVisibility.ObjectClassMembers); } } if (isVisible) { if (memberInfo.DeclaringType == typeof(ArrayList) || (memberInfo.DeclaringType.IsGenericType && (memberInfo.DeclaringType.GetGenericTypeDefinition() == typeof(List <>) || memberInfo.DeclaringType.GetGenericTypeDefinition() == typeof(Collection <>) || memberInfo.DeclaringType.GetGenericTypeDefinition() == typeof(ObservableCollection <>))) ) { isVisible = Visibility.HasFlag(WoopsaVisibility.ListClassMembers); } } if (isVisible) { if (memberInfo is MethodBase) { if ((memberInfo as MethodBase).IsSpecialName) { isVisible = Visibility.HasFlag(WoopsaVisibility.MethodSpecialName); } } } if (isVisible) { if (memberInfo is PropertyInfo) { PropertyInfo property = (PropertyInfo)memberInfo; if (typeof(IEnumerable <object>).IsAssignableFrom(property.PropertyType)) { isVisible = Visibility.HasFlag(WoopsaVisibility.IEnumerableObject); } } } EventArgsMemberVisibilityCheck e = new EventArgsMemberVisibilityCheck(memberInfo); e.IsVisible = isVisible; OnMemberWoopsaVisibilityCheck(e); isVisible = e.IsVisible; return(isVisible); }